{"version":3,"file":"ai-office.umd.cjs","sources":["../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../ai-design/src/lib/utils.ts","../../ai-design/src/hooks/use-shadow.ts","../../ai-design/src/const/ui.ts","../../ai-design/src/components/icons/calendar-icon.tsx","../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.3_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.5_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../../ai-design/src/components/ui/button.tsx","../../../node_modules/.pnpm/@radix-ui+primitive@1.1.4/node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-context@1.1.4_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-id@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.3_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.5_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.12_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.6_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.4_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.17_react@19.2.7/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.17_react@19.2.7/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.17_react@19.2.7/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.17_react@19.2.7/node_modules/use-sidecar/dist/es2015/medium.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.17_react@19.2.7/node_modules/use-sidecar/dist/es2015/exports.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.17_react@19.2.7/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.17_react@19.2.7/node_modules/react-style-singleton/dist/es2015/hook.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.17_react@19.2.7/node_modules/react-style-singleton/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.17_react@19.2.7/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.16_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../ai-design/src/components/ui/dialog.tsx","../../../node_modules/.pnpm/vaul@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/vaul/dist/index.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.6_react-dom@19.2.7_react@19.2.7/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-popper@1.3.0_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.5_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.9_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../ai-design/src/components/ui/tooltip.tsx","../../ai-design/src/components/tooltip.tsx","../../ai-design/src/components/icon-btn.tsx","../../ai-design/src/components/bs-icons.tsx","../../ai-design/src/components/ui/drawer.tsx","../../../node_modules/.pnpm/@radix-ui+react-popover@1.1.16_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-popover/dist/index.mjs","../../ai-design/src/components/ui/popover.tsx","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/shared/src/utils.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/Icon.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/check.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevrons-left.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevrons-right.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/send.js","../../../node_modules/.pnpm/lucide-react@0.554.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/x.js","../../ai-design/src/components/ui/spinner.tsx","../../../node_modules/.pnpm/@radix-ui+react-label@2.1.9_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-label/dist/index.mjs","../../ai-design/src/components/ui/label.tsx","../../ai-design/src/components/ui/input.tsx","../../ai-design/src/components/ui/textarea.tsx","../../../node_modules/.pnpm/@radix-ui+number@1.1.2/node_modules/@radix-ui/number/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.2_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-select@2.3.0_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-select/dist/index.mjs","../../ai-design/src/components/ui/select.tsx","../../../node_modules/.pnpm/react-hook-form@7.76.0_react@19.2.7/node_modules/react-hook-form/dist/index.esm.mjs","../../ai-design/src/components/ui/form.tsx","../../ai-design/src/components/abs-fullscreen-gradient-bg.tsx","../../ai-design/src/components/agent-select.tsx","../../ai-design/src/components/agent-scroll-selector.tsx","../../ai-design/src/components/img-part.tsx","../../ai-design/src/components/attachment-part.tsx","../../ai-design/src/components/attachment-part-group.tsx","../../ai-design/src/components/ui/icons.tsx","../../ai-design/src/components/attachments-previewer.tsx","../../ai-design/src/components/base-button.tsx","../../ai-design/src/components/bs-entry-select/build-tree.ts","../../ai-design/src/components/agent-helper/search-input/index.tsx","../../ai-design/src/components/bs-entry-select/search-input.tsx","../../ai-design/src/components/bs-entry-select/entry-item.tsx","../../ai-design/src/components/bs-entry-select/tree-item-node.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../../ai-design/src/components/bs-entry-select/scroll-slider.tsx","../../ai-design/src/components/bs-entry-select/app-group-folder.tsx","../../ai-design/src/components/bs-entry-select/other-app-section.tsx","../../ai-design/src/components/bs-entry-select/entry-popover.tsx","../../ai-design/src/components/bs-entry-select/bs-entry-select.tsx","../../ai-design/src/components/border-animation.tsx","../../ai-design/src/components/border-color-animation.tsx","../../ai-design/src/components/bot-icon.tsx","../../ai-design/src/components/bot-avatar-name.tsx","../../ai-design/src/components/card-field.tsx","../../ai-design/src/components/card.tsx","../../ai-design/src/components/icon-card.tsx","../../ai-design/src/components/agent-helper/agent-tag/index.tsx","../../ai-design/src/components/agent-helper/trigger-select/index.tsx","../../../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-checkbox@1.3.4_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.12_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-radio-group@1.4.0_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-radio-group/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-switch@1.3.0_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-switch/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.14_@types+react-dom@19.2.3_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../ai-design/src/components/ui/switch.tsx","../../ai-design/src/components/agent-helper/agent-helper-card/index.tsx","../../ai-design/src/components/agent-helper/agent-helper-card-list/index.tsx","../../ai-design/src/components/agent-helper/placeholder-card/index.tsx","../../ai-design/src/components/agent-helper/agent-entry-card/index.tsx","../../ai-design/src/components/icons/grids-icon.tsx","../../ai-design/src/components/agent-helper/agent-category-select-menu/index.tsx","../../ai-design/src/hooks/use-portal-container.ts","../../ai-feat-utils/dist/ai-feat-utils.js","../../ai-design/src/components/font-icon.tsx","../../ai-design/src/components/agent-helper/agent-sort-select/index.tsx","../../ai-design/src/components/agent-helper/form-select/index.tsx","../../ai-design/src/components/square-checker.tsx","../../ai-design/src/components/agent-helper/app-select/index.tsx","../../ai-design/src/components/check-card.tsx","../../ai-design/src/components/agent-helper/form-action-trigger-select/index.tsx","../../ai-design/src/components/agent-helper/flow-node-action-trigger-select/index.tsx","../../ai-design/src/components/agent-helper/trigger-time-source-type-select/index.tsx","../../ai-design/src/components/agent-helper/date-picker/utils.ts","../../ai-design/src/components/agent-helper/date-picker/calendar-panel.tsx","../../ai-design/src/components/agent-helper/date-picker/month-panel.tsx","../../ai-design/src/components/agent-helper/date-picker/year-panel.tsx","../../ai-design/src/components/agent-helper/date-picker/time-panel.tsx","../../ai-design/src/components/agent-helper/date-picker/footer-panel.tsx","../../ai-design/src/components/agent-helper/date-picker/date-picker.tsx","../../ai-design/src/components/agent-helper/date-picker/date-input.tsx","../../ai-design/src/components/agent-helper/field-select/index.tsx","../../ai-design/src/components/agent-helper/offset-type-select/index.tsx","../../ai-design/src/components/agent-helper/offset-unit-select/index.tsx","../../ai-design/src/components/agent-helper/offset-preference-select/index.tsx","../../ai-design/src/components/agent-helper/trigger-time-preference-select/index.tsx","../../ai-design/src/components/agent-helper/repeat-preference-type-select/index.tsx","../../ai-design/src/components/icons/clear-all-icon.tsx","../../ai-design/src/components/agent-helper/weekdays-select/index.tsx","../../ai-design/src/components/ui/tabs.tsx","../../ai-design/src/components/agent-helper/monthdays-select/index.tsx","../../ai-design/src/components/agent-helper/repeat-by-type-select/index.tsx","../../ai-design/src/components/agent-helper/repeat-preference-select/index.tsx","../../ai-design/src/components/agent-helper/form-divider/index.tsx","../../ai-design/src/components/agent-helper/relational-operator-select/index.tsx","../../ai-design/src/components/circle-checker.tsx","../../ai-design/src/components/collapsible-txt-msg.tsx","../../ai-design/src/components/confirm-dialog.tsx","../../ai-design/src/components/fields-design-info-table.tsx","../../ai-design/src/components/fields-generating-indicator.tsx","../../ai-design/src/components/message-content.tsx","../../ai-design/src/components/fake-bot-msg.tsx","../../ai-design/src/components/linear-gradient-color-bg-animation.tsx","../../ai-design/src/components/previewer-header.tsx","../../ai-design/src/components/fields-previewer.tsx","../../ai-design/src/components/primary-confirm-btn.tsx","../../ai-design/src/components/form-info-editor.tsx","../../types/dist/chat/plugin/query.js","../../types/dist/chat/plugin/index.js","../../ai-design/src/components/formula-tag.tsx","../../ai-design/src/components/generate-animation.tsx","../../ai-design/src/components/line-checker.tsx","../../../node_modules/.pnpm/marked@17.0.1/node_modules/marked/lib/marked.esm.js","../../../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js","../../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../node_modules/.pnpm/estree-util-is-identifier-name@3.0.0/node_modules/estree-util-is-identifier-name/lib/index.js","../../../node_modules/.pnpm/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/hast-to-react.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/index.js","../../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../node_modules/.pnpm/inline-style-parser@0.2.7/node_modules/inline-style-parser/cjs/index.js","../../../node_modules/.pnpm/style-to-object@1.0.14/node_modules/style-to-object/cjs/index.js","../../../node_modules/.pnpm/style-to-js@1.1.21/node_modules/style-to-js/cjs/utilities.js","../../../node_modules/.pnpm/style-to-js@1.1.21/node_modules/style-to-js/cjs/index.js","../../../node_modules/.pnpm/unist-util-position@5.0.0/node_modules/unist-util-position/lib/index.js","../../../node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js","../../../node_modules/.pnpm/vfile-message@4.0.3/node_modules/vfile-message/lib/index.js","../../../node_modules/.pnpm/hast-util-to-jsx-runtime@2.3.6/node_modules/hast-util-to-jsx-runtime/lib/index.js","../../../node_modules/.pnpm/html-url-attributes@3.0.1/node_modules/html-url-attributes/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js","../../../node_modules/.pnpm/decode-named-character-reference@1.3.0/node_modules/decode-named-character-reference/index.dom.js","../../../node_modules/.pnpm/micromark-util-chunked@2.0.1/node_modules/micromark-util-chunked/index.js","../../../node_modules/.pnpm/micromark-util-combine-extensions@2.0.1/node_modules/micromark-util-combine-extensions/index.js","../../../node_modules/.pnpm/micromark-util-decode-numeric-character-reference@2.0.2/node_modules/micromark-util-decode-numeric-character-reference/index.js","../../../node_modules/.pnpm/micromark-util-normalize-identifier@2.0.1/node_modules/micromark-util-normalize-identifier/index.js","../../../node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js","../../../node_modules/.pnpm/micromark-util-sanitize-uri@2.0.1/node_modules/micromark-util-sanitize-uri/index.js","../../../node_modules/.pnpm/micromark-factory-space@2.0.1/node_modules/micromark-factory-space/index.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/initialize/content.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/initialize/document.js","../../../node_modules/.pnpm/micromark-util-classify-character@2.0.1/node_modules/micromark-util-classify-character/index.js","../../../node_modules/.pnpm/micromark-util-resolve-all@2.0.1/node_modules/micromark-util-resolve-all/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/attention.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/autolink.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/blank-line.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/block-quote.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/character-escape.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/character-reference.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/code-fenced.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/code-indented.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/code-text.js","../../../node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../../../node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/content.js","../../../node_modules/.pnpm/micromark-factory-destination@2.0.1/node_modules/micromark-factory-destination/index.js","../../../node_modules/.pnpm/micromark-factory-label@2.0.1/node_modules/micromark-factory-label/index.js","../../../node_modules/.pnpm/micromark-factory-title@2.0.1/node_modules/micromark-factory-title/index.js","../../../node_modules/.pnpm/micromark-factory-whitespace@2.0.1/node_modules/micromark-factory-whitespace/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/definition.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/heading-atx.js","../../../node_modules/.pnpm/micromark-util-html-tag-name@2.0.1/node_modules/micromark-util-html-tag-name/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/html-flow.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/html-text.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/label-end.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/label-start-image.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/label-start-link.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/line-ending.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/thematic-break.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/list.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/setext-underline.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/initialize/flow.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/initialize/text.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/constructs.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/create-tokenizer.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/parse.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/postprocess.js","../../../node_modules/.pnpm/micromark@4.0.2/node_modules/micromark/lib/preprocess.js","../../../node_modules/.pnpm/micromark-util-decode-string@2.0.1/node_modules/micromark-util-decode-string/index.js","../../../node_modules/.pnpm/mdast-util-from-markdown@2.0.2/node_modules/mdast-util-from-markdown/lib/index.js","../../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/break.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/code.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/delete.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/heading.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/html.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/revert.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/image.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/link.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/list.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/root.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/strong.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/table.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../../../node_modules/.pnpm/trim-lines@3.0.1/node_modules/trim-lines/index.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/text.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/handlers/index.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/types.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/deserialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/serialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/index.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/footer.js","../../../node_modules/.pnpm/unist-util-is@6.0.1/node_modules/unist-util-is/lib/index.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/color.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/index.js","../../../node_modules/.pnpm/unist-util-visit@5.0.0/node_modules/unist-util-visit/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/state.js","../../../node_modules/.pnpm/mdast-util-to-hast@13.2.1/node_modules/mdast-util-to-hast/lib/index.js","../../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js","../../../node_modules/.pnpm/bail@2.0.2/node_modules/bail/index.js","../../../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js","../../../node_modules/.pnpm/is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js","../../../node_modules/.pnpm/trough@2.2.0/node_modules/trough/lib/index.js","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minpath.browser.js","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minproc.browser.js","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minurl.shared.js","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minurl.browser.js","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/index.js","../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/callable-instance.js","../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js","../../../node_modules/.pnpm/react-markdown@10.1.0_@types+react@19.2.17_react@19.2.7/node_modules/react-markdown/lib/index.js","../../ai-design/src/components/memoized-markdown.tsx","../../ai-design/src/components/option-item.tsx","../../ai-design/src/components/output-config-editor.tsx","../../ai-design/src/components/scroll-to-bottom-btn.tsx","../../ai-design/src/components/split-line.tsx","../../ai-design/src/components/tab-radio-group.tsx","../../ai-design/src/components/user-txt-msg-bubble.tsx","../../ai-design/src/hooks/use-resizable-width.ts","../../ai-design/src/hooks/use-column-appear.ts","../../ai-design/src/components/office-container.tsx","../../ai-design/src/components/warning-msg.tsx","../../ai-design/src/components/collapsible.tsx","../../ai-design/src/components/field-icon.tsx","../../ai-design/src/components/field-checker.tsx","../../ai-design/src/components/subform-fields-value-checker.tsx","../../ai-design/src/components/field-value-checker.tsx","../../ai-design/src/components/field-checker-list-msg.tsx","../../ai-design/src/components/agent-helper/field-value-input/icons.tsx","../../ai-design/src/components/agent-helper/field-value-input/inputs.tsx","../../ai-design/src/components/agent-helper/field-value-input/china-address-data.ts","../../ai-design/src/components/agent-helper/field-value-input/picker-inputs.tsx","../../ai-design/src/components/agent-helper/field-value-input/display.tsx","../../ai-design/src/components/agent-helper/field-value-input/index.tsx","../../../node_modules/.pnpm/codemirror@5.65.21/node_modules/codemirror/lib/codemirror.js","../../ai-design/src/components/agent-helper/prompt-input/index.tsx","../../ai-design/src/components/agent-helper/agent-helper-main-layout/index.tsx","../../ai-design/src/components/agent-helper/condition-quantifier-select/index.tsx","../../ai-design/src/components/agent-helper/condition-trigger-description/index.tsx","../../ai-design/src/components/agent-helper/condition-item/index.tsx","../../ai-design/src/components/agent-helper/condition-group/index.tsx","../../ai-design/src/components/agent-helper/condition-input/index.tsx","../../ai-design/src/components/agent-helper/field-edit-preference-select/index.tsx","../../../node_modules/.pnpm/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+react-table@8.21.3_react-dom@19.2.7_react@19.2.7/node_modules/@tanstack/react-table/build/lib/index.mjs","../../ai-design/src/components/icons/empty-table-icon.tsx","../../ai-design/src/components/agent-helper/table/index.tsx","../../ai-design/src/components/agent-helper/exec-log-filter/index.tsx","../../../node_modules/.pnpm/use-stick-to-bottom@1.1.6_react@19.2.7/node_modules/use-stick-to-bottom/dist/useStickToBottom.js","../../../node_modules/.pnpm/use-stick-to-bottom@1.1.6_react@19.2.7/node_modules/use-stick-to-bottom/dist/StickToBottom.js","../src/app/components/chat/messages/conversation.tsx","../src/const/ui.ts","../src/lib/utils.ts","../../../node_modules/.pnpm/zustand@5.0.10_@types+react@19.2.17_react@19.2.7/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.10_@types+react@19.2.17_react@19.2.7/node_modules/zustand/esm/react.mjs","../src/app/store/use-ai-office-store.ts","../src/app/components/chat/messages/preview-message-wrapper.tsx","../src/app/components/chat/messages/markdown-part.tsx","../src/app/components/chat/messages/error-msg.tsx","../src/app/components/chat/messages/error-boundary.tsx","../src/core/react-adapter/context.tsx","../src/app/components/ui/tooltip.tsx","../src/core/react-adapter/slots.tsx","../src/core/react-adapter/middlewares.ts","../src/app/hooks/use-regenerator.ts","../src/app/hooks/use-service-registry.ts","../src/app/components/chat/messages/preview-message.tsx","../src/app/components/chat/messages/opening-lines.tsx","../src/app/components/chat/messages/index.tsx","../src/app/components/chat/chat-frame.tsx","../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../src/app/components/ui/button.tsx","../src/app/components/ui/select.tsx","../src/app/components/ui/textarea.tsx","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/generated/bidi-data.js","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/bidi.js","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/analysis.js","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/measurement.js","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/line-break.js","../../../node_modules/.pnpm/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/layout.js","../src/app/hooks/use-textarea-indent.ts","../src/app/components/chat/input-area/multi-modal-input/prompt-input.tsx","../src/app/components/chat/input-area/multi-modal-input/components/attachment-preview-list.tsx","../src/app/components/chat/input-area/multi-modal-input/attachment-btn.tsx","../src/app/hooks/use-voice-input.ts","../src/app/components/chat/input-area/multi-modal-input/voice-btn.tsx","../src/app/components/chat/input-area/multi-modal-input/clear-btn.tsx","../src/app/components/chat/input-area/multi-modal-input/stop-btn.tsx","../src/app/components/chat/input-area/multi-modal-input/hooks/use-file-upload.ts","../src/app/components/chat/input-area/multi-modal-input/components/input-toolbar.tsx","../src/app/components/chat/input-area/multi-modal-input/hooks/use-text-input.ts","../src/app/components/chat/input-area/multi-modal-input/hooks/use-message-submit.ts","../src/app/hooks/use-office-event.ts","../src/app/hooks/use-event-msg-submit.ts","../src/app/components/chat/input-area/multi-modal-input/index.tsx","../src/app/utils/index.ts","../src/app/components/chat/input-area/index.tsx","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/dist/index.mjs","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/dist/index.js","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/dist/stream.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/types.js","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.20_zod@4.3.5/node_modules/@ai-sdk/provider-utils/dist/index.mjs","../../../node_modules/.pnpm/ai@5.0.121_zod@4.3.5/node_modules/ai/dist/index.mjs","../../../node_modules/.pnpm/throttleit@2.1.0/node_modules/throttleit/index.js","../../../node_modules/.pnpm/@ai-sdk+react@2.0.123_react@19.2.7_zod@4.3.5/node_modules/@ai-sdk/react/dist/index.mjs","../src/app/hooks/useOfficeChat.ts","../src/app/hooks/useChatTransport.ts","../src/app/utils/createCommonChatErrorHandler.ts","../src/plugin-sdk/react.tsx","../src/plugin-sdk/plugin.ts","../src/plugin-sdk/eventBus.ts","../src/app/hooks/use-publisher-config-parser.ts","../src/app/hooks/use-bot-ready-json-msg.ts","../src/app/hooks/use-std-action-task-parser.ts","../src/app/components/chat/index.tsx","../src/core/plugin-system/ServiceProxy.ts","../src/core/plugin-system/ServiceRegistry.ts","../src/core/plugin-system/PluginApiAdapter.ts","../src/core/plugin-system/PluginManager.ts","../src/core/services/SystemUIService.ts","../src/core/runtime/index.ts","../src/plugins/index.ts","../src/app/hooks/use-pre-installed-plugins.ts","../src/app/service/fetch-bots.ts","../src/app/service/built-in-bots-confit.ts","../src/core/event-system/eventBus.ts","../src/app/service/index.ts","../src/app/components/ai-office/index.tsx","../src/app/utils/mount-shadow-element.ts","../src/app/utils/createOfficeRoot.ts","../src/app/components/ai-office/portalHost.tsx","../src/core/std-action/index.ts","../src/app/index.ts","../src/plugins/agent-calling-confirm/utils.ts","../src/plugins/agent-calling-confirm/components/index.tsx","../src/plugins/agent-calling-confirm/index.ts","../src/plugins/agent-helper-manager/store/useAgentHelperStore.ts","../src/plugins/agent-helper-manager/components/index.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/agent-name-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/app-select-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/form-action-trigger-select-field.tsx","../src/plugins/agent-helper-manager/hooks/useFormStructure.ts","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/form-field-select-field.tsx","../src/plugins/agent-helper-manager/hooks/useAppForms.ts","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/form-select-field.tsx","../src/plugins/agent-helper-manager/hooks/useAgentPublishConfig.ts","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/output-config-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/prompt-input-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/trigger-condition-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/edit-form-field-preference-select-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/flow-node-trigger-select-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/trigger-time-preference-select-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/repeat-preference-select-field.tsx","../src/plugins/agent-helper-manager/consts/fields-config/index.ts","../src/plugins/agent-helper-manager/consts/index.ts","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/trigger-type-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/fields/trigger-divider-field.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/trigger-fields-router/index.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/validate-agent-helper-form.ts","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/agent-helper-configuration-form.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/form-drawer.tsx","../src/plugins/agent-helper-manager/components/agent-helper-configuration-form/index.tsx","../src/plugins/agent-helper-manager/components/agent-helper-exec-log-drawer/BsDrawer.tsx","../src/plugins/agent-helper-manager/components/agent-helper-exec-log-drawer/index.tsx","../src/plugins/agent-helper-manager/components/agent-helper-filter/index.tsx","../src/plugins/agent-helper-manager/components/agent-helper-Entry.tsx","../src/plugins/agent-helper-manager/components/agent-select-view/index.tsx","../src/plugins/agent-helper-manager/service/agent-helper-service.ts","../src/plugins/agent-helper-manager/service/trigger-hooks-listener-manager.ts","../src/plugins/agent-helper-manager/index.ts","../src/plugins/agent-select/components/index.tsx","../src/plugins/agent-select/index.ts","../src/plugins/bot-indicator-in-textarea/components/agent-select-trigger.tsx","../src/plugins/bot-indicator-in-textarea/components/index.tsx","../src/plugins/bot-indicator-in-textarea/index.ts","../src/plugins/bot-selection-guard/components/index.tsx","../src/plugins/bot-selection-guard/index.ts","../src/plugins/common-msg-part-viewer/components/attachment-part.tsx","../src/plugins/common-msg-part-viewer/matcher/index.ts","../src/plugins/common-msg-part-viewer/components/attachment-group-part.tsx","../src/plugins/common-msg-part-viewer/components/error-msg-part.tsx","../src/plugins/common-msg-part-viewer/components/fake-msg-part.tsx","../src/plugins/common-msg-part-viewer/index.ts","../src/plugins/entry-select/hooks/index.ts","../src/plugins/entry-select/components/entry-select-com.tsx","../src/plugins/entry-select/index.ts","../src/plugins/form-batch-filling-input-enhancer/index.ts","../src/plugins/form-batch-filling-opening-lines/opening-lines.tsx","../src/plugins/form-batch-filling-opening-lines/index.ts","../src/plugins/form-batch-filling/store/useBatchFillingStore.ts","../src/plugins/form-batch-filling/utils/get-fields-data.ts","../src/plugins/form-batch-filling/matcher/index.ts","../src/plugins/form-batch-filling/components/generated-data-counter.tsx","../src/plugins/form-batch-filling/components/first-batch-generating-animation.tsx","../src/plugins/form-batch-filling/components/non-first-batch-generating-animation.tsx","../src/plugins/form-batch-filling/hooks/usePreviewer.ts","../src/plugins/form-batch-filling/components/batch-generator-action.tsx","../src/plugins/form-batch-filling/components/batch-fill-part.tsx","../src/plugins/form-batch-filling/service/index.ts","../src/plugins/form-batch-filling/index.ts","../src/plugins/form-builder-opening-lines/opening-lines.tsx","../src/plugins/form-builder-opening-lines/index.ts","../src/plugins/form-builder/utils/index.ts","../src/lib/parse-design-doc.ts","../src/plugins/form-builder/components/design-doc/design-info.tsx","../src/plugins/form-builder/store/useBuilderStore.ts","../src/plugins/form-builder/components/design-doc/create-form-confirm.tsx","../src/plugins/form-builder/components/design-doc/index.tsx","../src/plugins/form-builder/matchers/index.ts","../src/plugins/form-builder/hooks/index.tsx","../src/plugins/form-builder/components/fields-part.tsx","../src/plugins/form-builder/components/follow-up/index.tsx","../src/plugins/form-builder/index.ts","../src/plugins/form-filling-input-enhancer/components/mode-select.tsx","../src/plugins/form-filling-input-enhancer/index.ts","../src/plugins/form-filling-opening-lines/opening-lines.tsx","../src/plugins/form-filling-opening-lines/index.ts","../src/plugins/form-filling/store/useFormFillingStore.ts","../src/plugins/form-filling/service/form-filling-service.ts","../src/plugins/form-filling/utils/index.ts","../src/plugins/form-filling/matchers/index.ts","../src/plugins/form-filling/components/single-fill-part.tsx","../src/plugins/form-filling/index.ts","../src/plugins/previewer/store/usePreviewStore.ts","../src/plugins/previewer/service/index.ts","../src/plugins/previewer/components/previewer.tsx","../src/plugins/previewer/index.ts","../src/plugins/report-query-input-enhancer/index.ts","../src/plugins/report-query/const.ts","../src/plugins/report-query/components/result-cards/CreatedSourceMsg.tsx","../src/plugins/report-query/components/result-cards/DataTableFields.tsx","../src/plugins/report-query/components/result-cards/FilterCondition.tsx","../src/const/index.ts","../src/plugins/report-query/components/result-cards/dash-widget-icon.tsx","../src/plugins/report-query/components/result-cards/DataTableCard.tsx","../src/plugins/report-query/components/index.tsx","../src/plugins/report-query/matcher/index.ts","../src/plugins/report-query/index.ts","../src/plugins/std-actions/const/index.ts","../src/plugins/std-actions/utils/index.ts","../src/plugins/std-actions/std-action-task-impl/index.ts","../src/plugins/std-actions/components/form-create-sucess.tsx","../src/plugins/std-actions/components/form-fields-checker.tsx","../src/plugins/std-actions/index.ts","../src/plugins/tl-actions-bar/components/ExpandIcon.tsx","../src/plugins/tl-actions-bar/consts/index.ts","../src/plugins/tl-actions-bar/components/ActionBtn.tsx","../src/plugins/tl-actions-bar/components/index.tsx","../src/plugins/tl-actions-bar/index.ts","../src/plugins/tr-actions-bar/consts/index.ts","../src/plugins/tr-actions-bar/components/ActionBtn.tsx","../src/plugins/tr-actions-bar/components/index.tsx","../src/plugins/tr-actions-bar/index.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n  // Pre-allocate for better V8 optimization\n  const combinedArray = new Array(array1.length + array2.length);\n  for (let i = 0; i < array1.length; i++) {\n    combinedArray[i] = array1[i];\n  }\n  for (let i = 0; i < array2.length; i++) {\n    combinedArray[array1.length + i] = array2[i];\n  }\n  return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n  classGroupId,\n  validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n  nextPart,\n  validators,\n  classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n  const classMap = createClassMap(config);\n  const {\n    conflictingClassGroups,\n    conflictingClassGroupModifiers\n  } = config;\n  const getClassGroupId = className => {\n    if (className.startsWith('[') && className.endsWith(']')) {\n      return getGroupIdForArbitraryProperty(className);\n    }\n    const classParts = className.split(CLASS_PART_SEPARATOR);\n    // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n    const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n    return getGroupRecursive(classParts, startIndex, classMap);\n  };\n  const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n    if (hasPostfixModifier) {\n      const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n      const baseConflicts = conflictingClassGroups[classGroupId];\n      if (modifierConflicts) {\n        if (baseConflicts) {\n          // Merge base conflicts with modifier conflicts\n          return concatArrays(baseConflicts, modifierConflicts);\n        }\n        // Only modifier conflicts\n        return modifierConflicts;\n      }\n      // Fall back to without postfix if no modifier conflicts\n      return baseConflicts || EMPTY_CONFLICTS;\n    }\n    return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n  };\n  return {\n    getClassGroupId,\n    getConflictingClassGroupIds\n  };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n  const classPathsLength = classParts.length - startIndex;\n  if (classPathsLength === 0) {\n    return classPartObject.classGroupId;\n  }\n  const currentClassPart = classParts[startIndex];\n  const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n  if (nextClassPartObject) {\n    const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n    if (result) return result;\n  }\n  const validators = classPartObject.validators;\n  if (validators === null) {\n    return undefined;\n  }\n  // Build classRest string efficiently by joining from startIndex onwards\n  const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n  const validatorsLength = validators.length;\n  for (let i = 0; i < validatorsLength; i++) {\n    const validatorObj = validators[i];\n    if (validatorObj.validator(classRest)) {\n      return validatorObj.classGroupId;\n    }\n  }\n  return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n  const content = className.slice(1, -1);\n  const colonIndex = content.indexOf(':');\n  const property = content.slice(0, colonIndex);\n  return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n  const {\n    theme,\n    classGroups\n  } = config;\n  return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n  const classMap = createClassPartObject();\n  for (const classGroupId in classGroups) {\n    const group = classGroups[classGroupId];\n    processClassesRecursively(group, classMap, classGroupId, theme);\n  }\n  return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n  const len = classGroup.length;\n  for (let i = 0; i < len; i++) {\n    const classDefinition = classGroup[i];\n    processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n  }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n  if (typeof classDefinition === 'string') {\n    processStringDefinition(classDefinition, classPartObject, classGroupId);\n    return;\n  }\n  if (typeof classDefinition === 'function') {\n    processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n    return;\n  }\n  processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n  const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n  classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n  if (isThemeGetter(classDefinition)) {\n    processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n    return;\n  }\n  if (classPartObject.validators === null) {\n    classPartObject.validators = [];\n  }\n  classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n  const entries = Object.entries(classDefinition);\n  const len = entries.length;\n  for (let i = 0; i < len; i++) {\n    const [key, value] = entries[i];\n    processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n  }\n};\nconst getPart = (classPartObject, path) => {\n  let current = classPartObject;\n  const parts = path.split(CLASS_PART_SEPARATOR);\n  const len = parts.length;\n  for (let i = 0; i < len; i++) {\n    const part = parts[i];\n    let next = current.nextPart.get(part);\n    if (!next) {\n      next = createClassPartObject();\n      current.nextPart.set(part, next);\n    }\n    current = next;\n  }\n  return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n  if (maxCacheSize < 1) {\n    return {\n      get: () => undefined,\n      set: () => {}\n    };\n  }\n  let cacheSize = 0;\n  let cache = Object.create(null);\n  let previousCache = Object.create(null);\n  const update = (key, value) => {\n    cache[key] = value;\n    cacheSize++;\n    if (cacheSize > maxCacheSize) {\n      cacheSize = 0;\n      previousCache = cache;\n      cache = Object.create(null);\n    }\n  };\n  return {\n    get(key) {\n      let value = cache[key];\n      if (value !== undefined) {\n        return value;\n      }\n      if ((value = previousCache[key]) !== undefined) {\n        update(key, value);\n        return value;\n      }\n    },\n    set(key, value) {\n      if (key in cache) {\n        cache[key] = value;\n      } else {\n        update(key, value);\n      }\n    }\n  };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n  modifiers,\n  hasImportantModifier,\n  baseClassName,\n  maybePostfixModifierPosition,\n  isExternal\n});\nconst createParseClassName = config => {\n  const {\n    prefix,\n    experimentalParseClassName\n  } = config;\n  /**\n   * Parse class name into parts.\n   *\n   * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n   * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n   */\n  let parseClassName = className => {\n    // Use simple array with push for better performance\n    const modifiers = [];\n    let bracketDepth = 0;\n    let parenDepth = 0;\n    let modifierStart = 0;\n    let postfixModifierPosition;\n    const len = className.length;\n    for (let index = 0; index < len; index++) {\n      const currentCharacter = className[index];\n      if (bracketDepth === 0 && parenDepth === 0) {\n        if (currentCharacter === MODIFIER_SEPARATOR) {\n          modifiers.push(className.slice(modifierStart, index));\n          modifierStart = index + 1;\n          continue;\n        }\n        if (currentCharacter === '/') {\n          postfixModifierPosition = index;\n          continue;\n        }\n      }\n      if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n    }\n    const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n    // Inline important modifier check\n    let baseClassName = baseClassNameWithImportantModifier;\n    let hasImportantModifier = false;\n    if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n      baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n      hasImportantModifier = true;\n    } else if (\n    /**\n     * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n     * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n     */\n    baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n      baseClassName = baseClassNameWithImportantModifier.slice(1);\n      hasImportantModifier = true;\n    }\n    const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n    return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n  };\n  if (prefix) {\n    const fullPrefix = prefix + MODIFIER_SEPARATOR;\n    const parseClassNameOriginal = parseClassName;\n    parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n  }\n  if (experimentalParseClassName) {\n    const parseClassNameOriginal = parseClassName;\n    parseClassName = className => experimentalParseClassName({\n      className,\n      parseClassName: parseClassNameOriginal\n    });\n  }\n  return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n  // Pre-compute weights for all known modifiers for O(1) comparison\n  const modifierWeights = new Map();\n  // Assign weights to sensitive modifiers (highest priority, but preserve order)\n  config.orderSensitiveModifiers.forEach((mod, index) => {\n    modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n  });\n  return modifiers => {\n    const result = [];\n    let currentSegment = [];\n    // Process modifiers in one pass\n    for (let i = 0; i < modifiers.length; i++) {\n      const modifier = modifiers[i];\n      // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n      const isArbitrary = modifier[0] === '[';\n      const isOrderSensitive = modifierWeights.has(modifier);\n      if (isArbitrary || isOrderSensitive) {\n        // Sort and flush current segment alphabetically\n        if (currentSegment.length > 0) {\n          currentSegment.sort();\n          result.push(...currentSegment);\n          currentSegment = [];\n        }\n        result.push(modifier);\n      } else {\n        // Regular modifier - add to current segment for batch sorting\n        currentSegment.push(modifier);\n      }\n    }\n    // Sort and add any remaining segment items\n    if (currentSegment.length > 0) {\n      currentSegment.sort();\n      result.push(...currentSegment);\n    }\n    return result;\n  };\n};\nconst createConfigUtils = config => ({\n  cache: createLruCache(config.cacheSize),\n  parseClassName: createParseClassName(config),\n  sortModifiers: createSortModifiers(config),\n  ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n  const {\n    parseClassName,\n    getClassGroupId,\n    getConflictingClassGroupIds,\n    sortModifiers\n  } = configUtils;\n  /**\n   * Set of classGroupIds in following format:\n   * `{importantModifier}{variantModifiers}{classGroupId}`\n   * @example 'float'\n   * @example 'hover:focus:bg-color'\n   * @example 'md:!pr'\n   */\n  const classGroupsInConflict = [];\n  const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n  let result = '';\n  for (let index = classNames.length - 1; index >= 0; index -= 1) {\n    const originalClassName = classNames[index];\n    const {\n      isExternal,\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    } = parseClassName(originalClassName);\n    if (isExternal) {\n      result = originalClassName + (result.length > 0 ? ' ' + result : result);\n      continue;\n    }\n    let hasPostfixModifier = !!maybePostfixModifierPosition;\n    let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n    if (!classGroupId) {\n      if (!hasPostfixModifier) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      classGroupId = getClassGroupId(baseClassName);\n      if (!classGroupId) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      hasPostfixModifier = false;\n    }\n    // Fast path: skip sorting for empty or single modifier\n    const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n    const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n    const classId = modifierId + classGroupId;\n    if (classGroupsInConflict.indexOf(classId) > -1) {\n      // Tailwind class omitted due to conflict\n      continue;\n    }\n    classGroupsInConflict.push(classId);\n    const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n    for (let i = 0; i < conflictGroups.length; ++i) {\n      const group = conflictGroups[i];\n      classGroupsInConflict.push(modifierId + group);\n    }\n    // Tailwind class not in conflict\n    result = originalClassName + (result.length > 0 ? ' ' + result : result);\n  }\n  return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n  let index = 0;\n  let argument;\n  let resolvedValue;\n  let string = '';\n  while (index < classLists.length) {\n    if (argument = classLists[index++]) {\n      if (resolvedValue = toValue(argument)) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n};\nconst toValue = mix => {\n  // Fast path for strings\n  if (typeof mix === 'string') {\n    return mix;\n  }\n  let resolvedValue;\n  let string = '';\n  for (let k = 0; k < mix.length; k++) {\n    if (mix[k]) {\n      if (resolvedValue = toValue(mix[k])) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n  let configUtils;\n  let cacheGet;\n  let cacheSet;\n  let functionToCall;\n  const initTailwindMerge = classList => {\n    const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n    configUtils = createConfigUtils(config);\n    cacheGet = configUtils.cache.get;\n    cacheSet = configUtils.cache.set;\n    functionToCall = tailwindMerge;\n    return tailwindMerge(classList);\n  };\n  const tailwindMerge = classList => {\n    const cachedResult = cacheGet(classList);\n    if (cachedResult) {\n      return cachedResult;\n    }\n    const result = mergeClassList(classList, configUtils);\n    cacheSet(classList, result);\n    return result;\n  };\n  functionToCall = initTailwindMerge;\n  return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n  const themeGetter = theme => theme[key] || fallbackThemeArr;\n  themeGetter.isThemeGetter = true;\n  return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n  const result = arbitraryValueRegex.exec(value);\n  if (result) {\n    if (result[1]) {\n      return testLabel(result[1]);\n    }\n    return testValue(result[2]);\n  }\n  return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n  const result = arbitraryVariableRegex.exec(value);\n  if (result) {\n    if (result[1]) {\n      return testLabel(result[1]);\n    }\n    return shouldMatchNoLabel;\n  }\n  return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  isAny,\n  isAnyNonArbitrary,\n  isArbitraryImage,\n  isArbitraryLength,\n  isArbitraryNumber,\n  isArbitraryPosition,\n  isArbitraryShadow,\n  isArbitrarySize,\n  isArbitraryValue,\n  isArbitraryVariable,\n  isArbitraryVariableFamilyName,\n  isArbitraryVariableImage,\n  isArbitraryVariableLength,\n  isArbitraryVariablePosition,\n  isArbitraryVariableShadow,\n  isArbitraryVariableSize,\n  isFraction,\n  isInteger,\n  isNumber,\n  isPercent,\n  isTshirtSize\n}, Symbol.toStringTag, {\n  value: 'Module'\n});\nconst getDefaultConfig = () => {\n  /**\n   * Theme getters for theme variable namespaces\n   * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n   */\n  /***/\n  const themeColor = fromTheme('color');\n  const themeFont = fromTheme('font');\n  const themeText = fromTheme('text');\n  const themeFontWeight = fromTheme('font-weight');\n  const themeTracking = fromTheme('tracking');\n  const themeLeading = fromTheme('leading');\n  const themeBreakpoint = fromTheme('breakpoint');\n  const themeContainer = fromTheme('container');\n  const themeSpacing = fromTheme('spacing');\n  const themeRadius = fromTheme('radius');\n  const themeShadow = fromTheme('shadow');\n  const themeInsetShadow = fromTheme('inset-shadow');\n  const themeTextShadow = fromTheme('text-shadow');\n  const themeDropShadow = fromTheme('drop-shadow');\n  const themeBlur = fromTheme('blur');\n  const themePerspective = fromTheme('perspective');\n  const themeAspect = fromTheme('aspect');\n  const themeEase = fromTheme('ease');\n  const themeAnimate = fromTheme('animate');\n  /**\n   * Helpers to avoid repeating the same scales\n   *\n   * We use functions that create a new array every time they're called instead of static arrays.\n   * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n   */\n  /***/\n  const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n  const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n  // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n  'left-top', 'top-right',\n  // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n  'right-top', 'bottom-right',\n  // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n  'right-bottom', 'bottom-left',\n  // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n  'left-bottom'];\n  const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n  const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n  const scaleOverscroll = () => ['auto', 'contain', 'none'];\n  const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n  const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n  const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n  const scaleGridColRowStartAndEnd = () => ['auto', {\n    span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n  }, isInteger, isArbitraryVariable, isArbitraryValue];\n  const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n  const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n  const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n  const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n  const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n  const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n  const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n  const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n    position: [isArbitraryVariable, isArbitraryValue]\n  }];\n  const scaleBgRepeat = () => ['no-repeat', {\n    repeat: ['', 'x', 'y', 'space', 'round']\n  }];\n  const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n    size: [isArbitraryVariable, isArbitraryValue]\n  }];\n  const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n  const scaleRadius = () => [\n  // Deprecated since Tailwind CSS v4.0.0\n  '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n  const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n  const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n  const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n  const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n  const scaleBlur = () => [\n  // Deprecated since Tailwind CSS v4.0.0\n  '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n  const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n  const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n  const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n  const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n  return {\n    cacheSize: 500,\n    theme: {\n      animate: ['spin', 'ping', 'pulse', 'bounce'],\n      aspect: ['video'],\n      blur: [isTshirtSize],\n      breakpoint: [isTshirtSize],\n      color: [isAny],\n      container: [isTshirtSize],\n      'drop-shadow': [isTshirtSize],\n      ease: ['in', 'out', 'in-out'],\n      font: [isAnyNonArbitrary],\n      'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n      'inset-shadow': [isTshirtSize],\n      leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n      perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n      radius: [isTshirtSize],\n      shadow: [isTshirtSize],\n      spacing: ['px', isNumber],\n      text: [isTshirtSize],\n      'text-shadow': [isTshirtSize],\n      tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n    },\n    classGroups: {\n      // --------------\n      // --- Layout ---\n      // --------------\n      /**\n       * Aspect Ratio\n       * @see https://tailwindcss.com/docs/aspect-ratio\n       */\n      aspect: [{\n        aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n      }],\n      /**\n       * Container\n       * @see https://tailwindcss.com/docs/container\n       * @deprecated since Tailwind CSS v4.0.0\n       */\n      container: ['container'],\n      /**\n       * Columns\n       * @see https://tailwindcss.com/docs/columns\n       */\n      columns: [{\n        columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n      }],\n      /**\n       * Break After\n       * @see https://tailwindcss.com/docs/break-after\n       */\n      'break-after': [{\n        'break-after': scaleBreak()\n      }],\n      /**\n       * Break Before\n       * @see https://tailwindcss.com/docs/break-before\n       */\n      'break-before': [{\n        'break-before': scaleBreak()\n      }],\n      /**\n       * Break Inside\n       * @see https://tailwindcss.com/docs/break-inside\n       */\n      'break-inside': [{\n        'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n      }],\n      /**\n       * Box Decoration Break\n       * @see https://tailwindcss.com/docs/box-decoration-break\n       */\n      'box-decoration': [{\n        'box-decoration': ['slice', 'clone']\n      }],\n      /**\n       * Box Sizing\n       * @see https://tailwindcss.com/docs/box-sizing\n       */\n      box: [{\n        box: ['border', 'content']\n      }],\n      /**\n       * Display\n       * @see https://tailwindcss.com/docs/display\n       */\n      display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n      /**\n       * Screen Reader Only\n       * @see https://tailwindcss.com/docs/display#screen-reader-only\n       */\n      sr: ['sr-only', 'not-sr-only'],\n      /**\n       * Floats\n       * @see https://tailwindcss.com/docs/float\n       */\n      float: [{\n        float: ['right', 'left', 'none', 'start', 'end']\n      }],\n      /**\n       * Clear\n       * @see https://tailwindcss.com/docs/clear\n       */\n      clear: [{\n        clear: ['left', 'right', 'both', 'none', 'start', 'end']\n      }],\n      /**\n       * Isolation\n       * @see https://tailwindcss.com/docs/isolation\n       */\n      isolation: ['isolate', 'isolation-auto'],\n      /**\n       * Object Fit\n       * @see https://tailwindcss.com/docs/object-fit\n       */\n      'object-fit': [{\n        object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n      }],\n      /**\n       * Object Position\n       * @see https://tailwindcss.com/docs/object-position\n       */\n      'object-position': [{\n        object: scalePositionWithArbitrary()\n      }],\n      /**\n       * Overflow\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      overflow: [{\n        overflow: scaleOverflow()\n      }],\n      /**\n       * Overflow X\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-x': [{\n        'overflow-x': scaleOverflow()\n      }],\n      /**\n       * Overflow Y\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-y': [{\n        'overflow-y': scaleOverflow()\n      }],\n      /**\n       * Overscroll Behavior\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      overscroll: [{\n        overscroll: scaleOverscroll()\n      }],\n      /**\n       * Overscroll Behavior X\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-x': [{\n        'overscroll-x': scaleOverscroll()\n      }],\n      /**\n       * Overscroll Behavior Y\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-y': [{\n        'overscroll-y': scaleOverscroll()\n      }],\n      /**\n       * Position\n       * @see https://tailwindcss.com/docs/position\n       */\n      position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n      /**\n       * Top / Right / Bottom / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      inset: [{\n        inset: scaleInset()\n      }],\n      /**\n       * Right / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-x': [{\n        'inset-x': scaleInset()\n      }],\n      /**\n       * Top / Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-y': [{\n        'inset-y': scaleInset()\n      }],\n      /**\n       * Start\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      start: [{\n        start: scaleInset()\n      }],\n      /**\n       * End\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      end: [{\n        end: scaleInset()\n      }],\n      /**\n       * Top\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      top: [{\n        top: scaleInset()\n      }],\n      /**\n       * Right\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      right: [{\n        right: scaleInset()\n      }],\n      /**\n       * Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      bottom: [{\n        bottom: scaleInset()\n      }],\n      /**\n       * Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      left: [{\n        left: scaleInset()\n      }],\n      /**\n       * Visibility\n       * @see https://tailwindcss.com/docs/visibility\n       */\n      visibility: ['visible', 'invisible', 'collapse'],\n      /**\n       * Z-Index\n       * @see https://tailwindcss.com/docs/z-index\n       */\n      z: [{\n        z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n      }],\n      // ------------------------\n      // --- Flexbox and Grid ---\n      // ------------------------\n      /**\n       * Flex Basis\n       * @see https://tailwindcss.com/docs/flex-basis\n       */\n      basis: [{\n        basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n      }],\n      /**\n       * Flex Direction\n       * @see https://tailwindcss.com/docs/flex-direction\n       */\n      'flex-direction': [{\n        flex: ['row', 'row-reverse', 'col', 'col-reverse']\n      }],\n      /**\n       * Flex Wrap\n       * @see https://tailwindcss.com/docs/flex-wrap\n       */\n      'flex-wrap': [{\n        flex: ['nowrap', 'wrap', 'wrap-reverse']\n      }],\n      /**\n       * Flex\n       * @see https://tailwindcss.com/docs/flex\n       */\n      flex: [{\n        flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n      }],\n      /**\n       * Flex Grow\n       * @see https://tailwindcss.com/docs/flex-grow\n       */\n      grow: [{\n        grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Flex Shrink\n       * @see https://tailwindcss.com/docs/flex-shrink\n       */\n      shrink: [{\n        shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Order\n       * @see https://tailwindcss.com/docs/order\n       */\n      order: [{\n        order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Grid Template Columns\n       * @see https://tailwindcss.com/docs/grid-template-columns\n       */\n      'grid-cols': [{\n        'grid-cols': scaleGridTemplateColsRows()\n      }],\n      /**\n       * Grid Column Start / End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start-end': [{\n        col: scaleGridColRowStartAndEnd()\n      }],\n      /**\n       * Grid Column Start\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start': [{\n        'col-start': scaleGridColRowStartOrEnd()\n      }],\n      /**\n       * Grid Column End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-end': [{\n        'col-end': scaleGridColRowStartOrEnd()\n      }],\n      /**\n       * Grid Template Rows\n       * @see https://tailwindcss.com/docs/grid-template-rows\n       */\n      'grid-rows': [{\n        'grid-rows': scaleGridTemplateColsRows()\n      }],\n      /**\n       * Grid Row Start / End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start-end': [{\n        row: scaleGridColRowStartAndEnd()\n      }],\n      /**\n       * Grid Row Start\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start': [{\n        'row-start': scaleGridColRowStartOrEnd()\n      }],\n      /**\n       * Grid Row End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-end': [{\n        'row-end': scaleGridColRowStartOrEnd()\n      }],\n      /**\n       * Grid Auto Flow\n       * @see https://tailwindcss.com/docs/grid-auto-flow\n       */\n      'grid-flow': [{\n        'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n      }],\n      /**\n       * Grid Auto Columns\n       * @see https://tailwindcss.com/docs/grid-auto-columns\n       */\n      'auto-cols': [{\n        'auto-cols': scaleGridAutoColsRows()\n      }],\n      /**\n       * Grid Auto Rows\n       * @see https://tailwindcss.com/docs/grid-auto-rows\n       */\n      'auto-rows': [{\n        'auto-rows': scaleGridAutoColsRows()\n      }],\n      /**\n       * Gap\n       * @see https://tailwindcss.com/docs/gap\n       */\n      gap: [{\n        gap: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Gap X\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-x': [{\n        'gap-x': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Gap Y\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-y': [{\n        'gap-y': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Justify Content\n       * @see https://tailwindcss.com/docs/justify-content\n       */\n      'justify-content': [{\n        justify: [...scaleAlignPrimaryAxis(), 'normal']\n      }],\n      /**\n       * Justify Items\n       * @see https://tailwindcss.com/docs/justify-items\n       */\n      'justify-items': [{\n        'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n      }],\n      /**\n       * Justify Self\n       * @see https://tailwindcss.com/docs/justify-self\n       */\n      'justify-self': [{\n        'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n      }],\n      /**\n       * Align Content\n       * @see https://tailwindcss.com/docs/align-content\n       */\n      'align-content': [{\n        content: ['normal', ...scaleAlignPrimaryAxis()]\n      }],\n      /**\n       * Align Items\n       * @see https://tailwindcss.com/docs/align-items\n       */\n      'align-items': [{\n        items: [...scaleAlignSecondaryAxis(), {\n          baseline: ['', 'last']\n        }]\n      }],\n      /**\n       * Align Self\n       * @see https://tailwindcss.com/docs/align-self\n       */\n      'align-self': [{\n        self: ['auto', ...scaleAlignSecondaryAxis(), {\n          baseline: ['', 'last']\n        }]\n      }],\n      /**\n       * Place Content\n       * @see https://tailwindcss.com/docs/place-content\n       */\n      'place-content': [{\n        'place-content': scaleAlignPrimaryAxis()\n      }],\n      /**\n       * Place Items\n       * @see https://tailwindcss.com/docs/place-items\n       */\n      'place-items': [{\n        'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n      }],\n      /**\n       * Place Self\n       * @see https://tailwindcss.com/docs/place-self\n       */\n      'place-self': [{\n        'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n      }],\n      // Spacing\n      /**\n       * Padding\n       * @see https://tailwindcss.com/docs/padding\n       */\n      p: [{\n        p: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding X\n       * @see https://tailwindcss.com/docs/padding\n       */\n      px: [{\n        px: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Y\n       * @see https://tailwindcss.com/docs/padding\n       */\n      py: [{\n        py: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Start\n       * @see https://tailwindcss.com/docs/padding\n       */\n      ps: [{\n        ps: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding End\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pe: [{\n        pe: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Top\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pt: [{\n        pt: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Right\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pr: [{\n        pr: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Bottom\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pb: [{\n        pb: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Left\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pl: [{\n        pl: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Margin\n       * @see https://tailwindcss.com/docs/margin\n       */\n      m: [{\n        m: scaleMargin()\n      }],\n      /**\n       * Margin X\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mx: [{\n        mx: scaleMargin()\n      }],\n      /**\n       * Margin Y\n       * @see https://tailwindcss.com/docs/margin\n       */\n      my: [{\n        my: scaleMargin()\n      }],\n      /**\n       * Margin Start\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ms: [{\n        ms: scaleMargin()\n      }],\n      /**\n       * Margin End\n       * @see https://tailwindcss.com/docs/margin\n       */\n      me: [{\n        me: scaleMargin()\n      }],\n      /**\n       * Margin Top\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mt: [{\n        mt: scaleMargin()\n      }],\n      /**\n       * Margin Right\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mr: [{\n        mr: scaleMargin()\n      }],\n      /**\n       * Margin Bottom\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mb: [{\n        mb: scaleMargin()\n      }],\n      /**\n       * Margin Left\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ml: [{\n        ml: scaleMargin()\n      }],\n      /**\n       * Space Between X\n       * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n       */\n      'space-x': [{\n        'space-x': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Space Between X Reverse\n       * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n       */\n      'space-x-reverse': ['space-x-reverse'],\n      /**\n       * Space Between Y\n       * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n       */\n      'space-y': [{\n        'space-y': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Space Between Y Reverse\n       * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n       */\n      'space-y-reverse': ['space-y-reverse'],\n      // --------------\n      // --- Sizing ---\n      // --------------\n      /**\n       * Size\n       * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n       */\n      size: [{\n        size: scaleSizing()\n      }],\n      /**\n       * Width\n       * @see https://tailwindcss.com/docs/width\n       */\n      w: [{\n        w: [themeContainer, 'screen', ...scaleSizing()]\n      }],\n      /**\n       * Min-Width\n       * @see https://tailwindcss.com/docs/min-width\n       */\n      'min-w': [{\n        'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n        'none', ...scaleSizing()]\n      }],\n      /**\n       * Max-Width\n       * @see https://tailwindcss.com/docs/max-width\n       */\n      'max-w': [{\n        'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n        'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n        {\n          screen: [themeBreakpoint]\n        }, ...scaleSizing()]\n      }],\n      /**\n       * Height\n       * @see https://tailwindcss.com/docs/height\n       */\n      h: [{\n        h: ['screen', 'lh', ...scaleSizing()]\n      }],\n      /**\n       * Min-Height\n       * @see https://tailwindcss.com/docs/min-height\n       */\n      'min-h': [{\n        'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n      }],\n      /**\n       * Max-Height\n       * @see https://tailwindcss.com/docs/max-height\n       */\n      'max-h': [{\n        'max-h': ['screen', 'lh', ...scaleSizing()]\n      }],\n      // ------------------\n      // --- Typography ---\n      // ------------------\n      /**\n       * Font Size\n       * @see https://tailwindcss.com/docs/font-size\n       */\n      'font-size': [{\n        text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n      }],\n      /**\n       * Font Smoothing\n       * @see https://tailwindcss.com/docs/font-smoothing\n       */\n      'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n      /**\n       * Font Style\n       * @see https://tailwindcss.com/docs/font-style\n       */\n      'font-style': ['italic', 'not-italic'],\n      /**\n       * Font Weight\n       * @see https://tailwindcss.com/docs/font-weight\n       */\n      'font-weight': [{\n        font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n      }],\n      /**\n       * Font Stretch\n       * @see https://tailwindcss.com/docs/font-stretch\n       */\n      'font-stretch': [{\n        'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n      }],\n      /**\n       * Font Family\n       * @see https://tailwindcss.com/docs/font-family\n       */\n      'font-family': [{\n        font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n      }],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-normal': ['normal-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-ordinal': ['ordinal'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-slashed-zero': ['slashed-zero'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n      /**\n       * Letter Spacing\n       * @see https://tailwindcss.com/docs/letter-spacing\n       */\n      tracking: [{\n        tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Line Clamp\n       * @see https://tailwindcss.com/docs/line-clamp\n       */\n      'line-clamp': [{\n        'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n      }],\n      /**\n       * Line Height\n       * @see https://tailwindcss.com/docs/line-height\n       */\n      leading: [{\n        leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n        themeLeading, ...scaleUnambiguousSpacing()]\n      }],\n      /**\n       * List Style Image\n       * @see https://tailwindcss.com/docs/list-style-image\n       */\n      'list-image': [{\n        'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * List Style Position\n       * @see https://tailwindcss.com/docs/list-style-position\n       */\n      'list-style-position': [{\n        list: ['inside', 'outside']\n      }],\n      /**\n       * List Style Type\n       * @see https://tailwindcss.com/docs/list-style-type\n       */\n      'list-style-type': [{\n        list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Text Alignment\n       * @see https://tailwindcss.com/docs/text-align\n       */\n      'text-alignment': [{\n        text: ['left', 'center', 'right', 'justify', 'start', 'end']\n      }],\n      /**\n       * Placeholder Color\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://v3.tailwindcss.com/docs/placeholder-color\n       */\n      'placeholder-color': [{\n        placeholder: scaleColor()\n      }],\n      /**\n       * Text Color\n       * @see https://tailwindcss.com/docs/text-color\n       */\n      'text-color': [{\n        text: scaleColor()\n      }],\n      /**\n       * Text Decoration\n       * @see https://tailwindcss.com/docs/text-decoration\n       */\n      'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n      /**\n       * Text Decoration Style\n       * @see https://tailwindcss.com/docs/text-decoration-style\n       */\n      'text-decoration-style': [{\n        decoration: [...scaleLineStyle(), 'wavy']\n      }],\n      /**\n       * Text Decoration Thickness\n       * @see https://tailwindcss.com/docs/text-decoration-thickness\n       */\n      'text-decoration-thickness': [{\n        decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n      }],\n      /**\n       * Text Decoration Color\n       * @see https://tailwindcss.com/docs/text-decoration-color\n       */\n      'text-decoration-color': [{\n        decoration: scaleColor()\n      }],\n      /**\n       * Text Underline Offset\n       * @see https://tailwindcss.com/docs/text-underline-offset\n       */\n      'underline-offset': [{\n        'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Text Transform\n       * @see https://tailwindcss.com/docs/text-transform\n       */\n      'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n      /**\n       * Text Overflow\n       * @see https://tailwindcss.com/docs/text-overflow\n       */\n      'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n      /**\n       * Text Wrap\n       * @see https://tailwindcss.com/docs/text-wrap\n       */\n      'text-wrap': [{\n        text: ['wrap', 'nowrap', 'balance', 'pretty']\n      }],\n      /**\n       * Text Indent\n       * @see https://tailwindcss.com/docs/text-indent\n       */\n      indent: [{\n        indent: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Vertical Alignment\n       * @see https://tailwindcss.com/docs/vertical-align\n       */\n      'vertical-align': [{\n        align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Whitespace\n       * @see https://tailwindcss.com/docs/whitespace\n       */\n      whitespace: [{\n        whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n      }],\n      /**\n       * Word Break\n       * @see https://tailwindcss.com/docs/word-break\n       */\n      break: [{\n        break: ['normal', 'words', 'all', 'keep']\n      }],\n      /**\n       * Overflow Wrap\n       * @see https://tailwindcss.com/docs/overflow-wrap\n       */\n      wrap: [{\n        wrap: ['break-word', 'anywhere', 'normal']\n      }],\n      /**\n       * Hyphens\n       * @see https://tailwindcss.com/docs/hyphens\n       */\n      hyphens: [{\n        hyphens: ['none', 'manual', 'auto']\n      }],\n      /**\n       * Content\n       * @see https://tailwindcss.com/docs/content\n       */\n      content: [{\n        content: ['none', isArbitraryVariable, isArbitraryValue]\n      }],\n      // -------------------\n      // --- Backgrounds ---\n      // -------------------\n      /**\n       * Background Attachment\n       * @see https://tailwindcss.com/docs/background-attachment\n       */\n      'bg-attachment': [{\n        bg: ['fixed', 'local', 'scroll']\n      }],\n      /**\n       * Background Clip\n       * @see https://tailwindcss.com/docs/background-clip\n       */\n      'bg-clip': [{\n        'bg-clip': ['border', 'padding', 'content', 'text']\n      }],\n      /**\n       * Background Origin\n       * @see https://tailwindcss.com/docs/background-origin\n       */\n      'bg-origin': [{\n        'bg-origin': ['border', 'padding', 'content']\n      }],\n      /**\n       * Background Position\n       * @see https://tailwindcss.com/docs/background-position\n       */\n      'bg-position': [{\n        bg: scaleBgPosition()\n      }],\n      /**\n       * Background Repeat\n       * @see https://tailwindcss.com/docs/background-repeat\n       */\n      'bg-repeat': [{\n        bg: scaleBgRepeat()\n      }],\n      /**\n       * Background Size\n       * @see https://tailwindcss.com/docs/background-size\n       */\n      'bg-size': [{\n        bg: scaleBgSize()\n      }],\n      /**\n       * Background Image\n       * @see https://tailwindcss.com/docs/background-image\n       */\n      'bg-image': [{\n        bg: ['none', {\n          linear: [{\n            to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n          }, isInteger, isArbitraryVariable, isArbitraryValue],\n          radial: ['', isArbitraryVariable, isArbitraryValue],\n          conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n        }, isArbitraryVariableImage, isArbitraryImage]\n      }],\n      /**\n       * Background Color\n       * @see https://tailwindcss.com/docs/background-color\n       */\n      'bg-color': [{\n        bg: scaleColor()\n      }],\n      /**\n       * Gradient Color Stops From Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from-pos': [{\n        from: scaleGradientStopPosition()\n      }],\n      /**\n       * Gradient Color Stops Via Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via-pos': [{\n        via: scaleGradientStopPosition()\n      }],\n      /**\n       * Gradient Color Stops To Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to-pos': [{\n        to: scaleGradientStopPosition()\n      }],\n      /**\n       * Gradient Color Stops From\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from': [{\n        from: scaleColor()\n      }],\n      /**\n       * Gradient Color Stops Via\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via': [{\n        via: scaleColor()\n      }],\n      /**\n       * Gradient Color Stops To\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to': [{\n        to: scaleColor()\n      }],\n      // ---------------\n      // --- Borders ---\n      // ---------------\n      /**\n       * Border Radius\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      rounded: [{\n        rounded: scaleRadius()\n      }],\n      /**\n       * Border Radius Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-s': [{\n        'rounded-s': scaleRadius()\n      }],\n      /**\n       * Border Radius End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-e': [{\n        'rounded-e': scaleRadius()\n      }],\n      /**\n       * Border Radius Top\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-t': [{\n        'rounded-t': scaleRadius()\n      }],\n      /**\n       * Border Radius Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-r': [{\n        'rounded-r': scaleRadius()\n      }],\n      /**\n       * Border Radius Bottom\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-b': [{\n        'rounded-b': scaleRadius()\n      }],\n      /**\n       * Border Radius Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-l': [{\n        'rounded-l': scaleRadius()\n      }],\n      /**\n       * Border Radius Start Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ss': [{\n        'rounded-ss': scaleRadius()\n      }],\n      /**\n       * Border Radius Start End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-se': [{\n        'rounded-se': scaleRadius()\n      }],\n      /**\n       * Border Radius End End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ee': [{\n        'rounded-ee': scaleRadius()\n      }],\n      /**\n       * Border Radius End Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-es': [{\n        'rounded-es': scaleRadius()\n      }],\n      /**\n       * Border Radius Top Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tl': [{\n        'rounded-tl': scaleRadius()\n      }],\n      /**\n       * Border Radius Top Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tr': [{\n        'rounded-tr': scaleRadius()\n      }],\n      /**\n       * Border Radius Bottom Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-br': [{\n        'rounded-br': scaleRadius()\n      }],\n      /**\n       * Border Radius Bottom Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-bl': [{\n        'rounded-bl': scaleRadius()\n      }],\n      /**\n       * Border Width\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w': [{\n        border: scaleBorderWidth()\n      }],\n      /**\n       * Border Width X\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-x': [{\n        'border-x': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Y\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-y': [{\n        'border-y': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Start\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-s': [{\n        'border-s': scaleBorderWidth()\n      }],\n      /**\n       * Border Width End\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-e': [{\n        'border-e': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Top\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-t': [{\n        'border-t': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Right\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-r': [{\n        'border-r': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Bottom\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-b': [{\n        'border-b': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Left\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-l': [{\n        'border-l': scaleBorderWidth()\n      }],\n      /**\n       * Divide Width X\n       * @see https://tailwindcss.com/docs/border-width#between-children\n       */\n      'divide-x': [{\n        'divide-x': scaleBorderWidth()\n      }],\n      /**\n       * Divide Width X Reverse\n       * @see https://tailwindcss.com/docs/border-width#between-children\n       */\n      'divide-x-reverse': ['divide-x-reverse'],\n      /**\n       * Divide Width Y\n       * @see https://tailwindcss.com/docs/border-width#between-children\n       */\n      'divide-y': [{\n        'divide-y': scaleBorderWidth()\n      }],\n      /**\n       * Divide Width Y Reverse\n       * @see https://tailwindcss.com/docs/border-width#between-children\n       */\n      'divide-y-reverse': ['divide-y-reverse'],\n      /**\n       * Border Style\n       * @see https://tailwindcss.com/docs/border-style\n       */\n      'border-style': [{\n        border: [...scaleLineStyle(), 'hidden', 'none']\n      }],\n      /**\n       * Divide Style\n       * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n       */\n      'divide-style': [{\n        divide: [...scaleLineStyle(), 'hidden', 'none']\n      }],\n      /**\n       * Border Color\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color': [{\n        border: scaleColor()\n      }],\n      /**\n       * Border Color X\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-x': [{\n        'border-x': scaleColor()\n      }],\n      /**\n       * Border Color Y\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-y': [{\n        'border-y': scaleColor()\n      }],\n      /**\n       * Border Color S\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-s': [{\n        'border-s': scaleColor()\n      }],\n      /**\n       * Border Color E\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-e': [{\n        'border-e': scaleColor()\n      }],\n      /**\n       * Border Color Top\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-t': [{\n        'border-t': scaleColor()\n      }],\n      /**\n       * Border Color Right\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-r': [{\n        'border-r': scaleColor()\n      }],\n      /**\n       * Border Color Bottom\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-b': [{\n        'border-b': scaleColor()\n      }],\n      /**\n       * Border Color Left\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-l': [{\n        'border-l': scaleColor()\n      }],\n      /**\n       * Divide Color\n       * @see https://tailwindcss.com/docs/divide-color\n       */\n      'divide-color': [{\n        divide: scaleColor()\n      }],\n      /**\n       * Outline Style\n       * @see https://tailwindcss.com/docs/outline-style\n       */\n      'outline-style': [{\n        outline: [...scaleLineStyle(), 'none', 'hidden']\n      }],\n      /**\n       * Outline Offset\n       * @see https://tailwindcss.com/docs/outline-offset\n       */\n      'outline-offset': [{\n        'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Outline Width\n       * @see https://tailwindcss.com/docs/outline-width\n       */\n      'outline-w': [{\n        outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n      }],\n      /**\n       * Outline Color\n       * @see https://tailwindcss.com/docs/outline-color\n       */\n      'outline-color': [{\n        outline: scaleColor()\n      }],\n      // ---------------\n      // --- Effects ---\n      // ---------------\n      /**\n       * Box Shadow\n       * @see https://tailwindcss.com/docs/box-shadow\n       */\n      shadow: [{\n        shadow: [\n        // Deprecated since Tailwind CSS v4.0.0\n        '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n      }],\n      /**\n       * Box Shadow Color\n       * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n       */\n      'shadow-color': [{\n        shadow: scaleColor()\n      }],\n      /**\n       * Inset Box Shadow\n       * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n       */\n      'inset-shadow': [{\n        'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n      }],\n      /**\n       * Inset Box Shadow Color\n       * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n       */\n      'inset-shadow-color': [{\n        'inset-shadow': scaleColor()\n      }],\n      /**\n       * Ring Width\n       * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n       */\n      'ring-w': [{\n        ring: scaleBorderWidth()\n      }],\n      /**\n       * Ring Width Inset\n       * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n       * @deprecated since Tailwind CSS v4.0.0\n       * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n       */\n      'ring-w-inset': ['ring-inset'],\n      /**\n       * Ring Color\n       * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n       */\n      'ring-color': [{\n        ring: scaleColor()\n      }],\n      /**\n       * Ring Offset Width\n       * @see https://v3.tailwindcss.com/docs/ring-offset-width\n       * @deprecated since Tailwind CSS v4.0.0\n       * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n       */\n      'ring-offset-w': [{\n        'ring-offset': [isNumber, isArbitraryLength]\n      }],\n      /**\n       * Ring Offset Color\n       * @see https://v3.tailwindcss.com/docs/ring-offset-color\n       * @deprecated since Tailwind CSS v4.0.0\n       * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n       */\n      'ring-offset-color': [{\n        'ring-offset': scaleColor()\n      }],\n      /**\n       * Inset Ring Width\n       * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n       */\n      'inset-ring-w': [{\n        'inset-ring': scaleBorderWidth()\n      }],\n      /**\n       * Inset Ring Color\n       * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n       */\n      'inset-ring-color': [{\n        'inset-ring': scaleColor()\n      }],\n      /**\n       * Text Shadow\n       * @see https://tailwindcss.com/docs/text-shadow\n       */\n      'text-shadow': [{\n        'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n      }],\n      /**\n       * Text Shadow Color\n       * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n       */\n      'text-shadow-color': [{\n        'text-shadow': scaleColor()\n      }],\n      /**\n       * Opacity\n       * @see https://tailwindcss.com/docs/opacity\n       */\n      opacity: [{\n        opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Mix Blend Mode\n       * @see https://tailwindcss.com/docs/mix-blend-mode\n       */\n      'mix-blend': [{\n        'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n      }],\n      /**\n       * Background Blend Mode\n       * @see https://tailwindcss.com/docs/background-blend-mode\n       */\n      'bg-blend': [{\n        'bg-blend': scaleBlendMode()\n      }],\n      /**\n       * Mask Clip\n       * @see https://tailwindcss.com/docs/mask-clip\n       */\n      'mask-clip': [{\n        'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n      }, 'mask-no-clip'],\n      /**\n       * Mask Composite\n       * @see https://tailwindcss.com/docs/mask-composite\n       */\n      'mask-composite': [{\n        mask: ['add', 'subtract', 'intersect', 'exclude']\n      }],\n      /**\n       * Mask Image\n       * @see https://tailwindcss.com/docs/mask-image\n       */\n      'mask-image-linear-pos': [{\n        'mask-linear': [isNumber]\n      }],\n      'mask-image-linear-from-pos': [{\n        'mask-linear-from': scaleMaskImagePosition()\n      }],\n      'mask-image-linear-to-pos': [{\n        'mask-linear-to': scaleMaskImagePosition()\n      }],\n      'mask-image-linear-from-color': [{\n        'mask-linear-from': scaleColor()\n      }],\n      'mask-image-linear-to-color': [{\n        'mask-linear-to': scaleColor()\n      }],\n      'mask-image-t-from-pos': [{\n        'mask-t-from': scaleMaskImagePosition()\n      }],\n      'mask-image-t-to-pos': [{\n        'mask-t-to': scaleMaskImagePosition()\n      }],\n      'mask-image-t-from-color': [{\n        'mask-t-from': scaleColor()\n      }],\n      'mask-image-t-to-color': [{\n        'mask-t-to': scaleColor()\n      }],\n      'mask-image-r-from-pos': [{\n        'mask-r-from': scaleMaskImagePosition()\n      }],\n      'mask-image-r-to-pos': [{\n        'mask-r-to': scaleMaskImagePosition()\n      }],\n      'mask-image-r-from-color': [{\n        'mask-r-from': scaleColor()\n      }],\n      'mask-image-r-to-color': [{\n        'mask-r-to': scaleColor()\n      }],\n      'mask-image-b-from-pos': [{\n        'mask-b-from': scaleMaskImagePosition()\n      }],\n      'mask-image-b-to-pos': [{\n        'mask-b-to': scaleMaskImagePosition()\n      }],\n      'mask-image-b-from-color': [{\n        'mask-b-from': scaleColor()\n      }],\n      'mask-image-b-to-color': [{\n        'mask-b-to': scaleColor()\n      }],\n      'mask-image-l-from-pos': [{\n        'mask-l-from': scaleMaskImagePosition()\n      }],\n      'mask-image-l-to-pos': [{\n        'mask-l-to': scaleMaskImagePosition()\n      }],\n      'mask-image-l-from-color': [{\n        'mask-l-from': scaleColor()\n      }],\n      'mask-image-l-to-color': [{\n        'mask-l-to': scaleColor()\n      }],\n      'mask-image-x-from-pos': [{\n        'mask-x-from': scaleMaskImagePosition()\n      }],\n      'mask-image-x-to-pos': [{\n        'mask-x-to': scaleMaskImagePosition()\n      }],\n      'mask-image-x-from-color': [{\n        'mask-x-from': scaleColor()\n      }],\n      'mask-image-x-to-color': [{\n        'mask-x-to': scaleColor()\n      }],\n      'mask-image-y-from-pos': [{\n        'mask-y-from': scaleMaskImagePosition()\n      }],\n      'mask-image-y-to-pos': [{\n        'mask-y-to': scaleMaskImagePosition()\n      }],\n      'mask-image-y-from-color': [{\n        'mask-y-from': scaleColor()\n      }],\n      'mask-image-y-to-color': [{\n        'mask-y-to': scaleColor()\n      }],\n      'mask-image-radial': [{\n        'mask-radial': [isArbitraryVariable, isArbitraryValue]\n      }],\n      'mask-image-radial-from-pos': [{\n        'mask-radial-from': scaleMaskImagePosition()\n      }],\n      'mask-image-radial-to-pos': [{\n        'mask-radial-to': scaleMaskImagePosition()\n      }],\n      'mask-image-radial-from-color': [{\n        'mask-radial-from': scaleColor()\n      }],\n      'mask-image-radial-to-color': [{\n        'mask-radial-to': scaleColor()\n      }],\n      'mask-image-radial-shape': [{\n        'mask-radial': ['circle', 'ellipse']\n      }],\n      'mask-image-radial-size': [{\n        'mask-radial': [{\n          closest: ['side', 'corner'],\n          farthest: ['side', 'corner']\n        }]\n      }],\n      'mask-image-radial-pos': [{\n        'mask-radial-at': scalePosition()\n      }],\n      'mask-image-conic-pos': [{\n        'mask-conic': [isNumber]\n      }],\n      'mask-image-conic-from-pos': [{\n        'mask-conic-from': scaleMaskImagePosition()\n      }],\n      'mask-image-conic-to-pos': [{\n        'mask-conic-to': scaleMaskImagePosition()\n      }],\n      'mask-image-conic-from-color': [{\n        'mask-conic-from': scaleColor()\n      }],\n      'mask-image-conic-to-color': [{\n        'mask-conic-to': scaleColor()\n      }],\n      /**\n       * Mask Mode\n       * @see https://tailwindcss.com/docs/mask-mode\n       */\n      'mask-mode': [{\n        mask: ['alpha', 'luminance', 'match']\n      }],\n      /**\n       * Mask Origin\n       * @see https://tailwindcss.com/docs/mask-origin\n       */\n      'mask-origin': [{\n        'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n      }],\n      /**\n       * Mask Position\n       * @see https://tailwindcss.com/docs/mask-position\n       */\n      'mask-position': [{\n        mask: scaleBgPosition()\n      }],\n      /**\n       * Mask Repeat\n       * @see https://tailwindcss.com/docs/mask-repeat\n       */\n      'mask-repeat': [{\n        mask: scaleBgRepeat()\n      }],\n      /**\n       * Mask Size\n       * @see https://tailwindcss.com/docs/mask-size\n       */\n      'mask-size': [{\n        mask: scaleBgSize()\n      }],\n      /**\n       * Mask Type\n       * @see https://tailwindcss.com/docs/mask-type\n       */\n      'mask-type': [{\n        'mask-type': ['alpha', 'luminance']\n      }],\n      /**\n       * Mask Image\n       * @see https://tailwindcss.com/docs/mask-image\n       */\n      'mask-image': [{\n        mask: ['none', isArbitraryVariable, isArbitraryValue]\n      }],\n      // ---------------\n      // --- Filters ---\n      // ---------------\n      /**\n       * Filter\n       * @see https://tailwindcss.com/docs/filter\n       */\n      filter: [{\n        filter: [\n        // Deprecated since Tailwind CSS v3.0.0\n        '', 'none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Blur\n       * @see https://tailwindcss.com/docs/blur\n       */\n      blur: [{\n        blur: scaleBlur()\n      }],\n      /**\n       * Brightness\n       * @see https://tailwindcss.com/docs/brightness\n       */\n      brightness: [{\n        brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Contrast\n       * @see https://tailwindcss.com/docs/contrast\n       */\n      contrast: [{\n        contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Drop Shadow\n       * @see https://tailwindcss.com/docs/drop-shadow\n       */\n      'drop-shadow': [{\n        'drop-shadow': [\n        // Deprecated since Tailwind CSS v4.0.0\n        '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n      }],\n      /**\n       * Drop Shadow Color\n       * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n       */\n      'drop-shadow-color': [{\n        'drop-shadow': scaleColor()\n      }],\n      /**\n       * Grayscale\n       * @see https://tailwindcss.com/docs/grayscale\n       */\n      grayscale: [{\n        grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Hue Rotate\n       * @see https://tailwindcss.com/docs/hue-rotate\n       */\n      'hue-rotate': [{\n        'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Invert\n       * @see https://tailwindcss.com/docs/invert\n       */\n      invert: [{\n        invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Saturate\n       * @see https://tailwindcss.com/docs/saturate\n       */\n      saturate: [{\n        saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Sepia\n       * @see https://tailwindcss.com/docs/sepia\n       */\n      sepia: [{\n        sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Filter\n       * @see https://tailwindcss.com/docs/backdrop-filter\n       */\n      'backdrop-filter': [{\n        'backdrop-filter': [\n        // Deprecated since Tailwind CSS v3.0.0\n        '', 'none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Blur\n       * @see https://tailwindcss.com/docs/backdrop-blur\n       */\n      'backdrop-blur': [{\n        'backdrop-blur': scaleBlur()\n      }],\n      /**\n       * Backdrop Brightness\n       * @see https://tailwindcss.com/docs/backdrop-brightness\n       */\n      'backdrop-brightness': [{\n        'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Contrast\n       * @see https://tailwindcss.com/docs/backdrop-contrast\n       */\n      'backdrop-contrast': [{\n        'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Grayscale\n       * @see https://tailwindcss.com/docs/backdrop-grayscale\n       */\n      'backdrop-grayscale': [{\n        'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Hue Rotate\n       * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n       */\n      'backdrop-hue-rotate': [{\n        'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Invert\n       * @see https://tailwindcss.com/docs/backdrop-invert\n       */\n      'backdrop-invert': [{\n        'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Opacity\n       * @see https://tailwindcss.com/docs/backdrop-opacity\n       */\n      'backdrop-opacity': [{\n        'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Saturate\n       * @see https://tailwindcss.com/docs/backdrop-saturate\n       */\n      'backdrop-saturate': [{\n        'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Backdrop Sepia\n       * @see https://tailwindcss.com/docs/backdrop-sepia\n       */\n      'backdrop-sepia': [{\n        'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      // --------------\n      // --- Tables ---\n      // --------------\n      /**\n       * Border Collapse\n       * @see https://tailwindcss.com/docs/border-collapse\n       */\n      'border-collapse': [{\n        border: ['collapse', 'separate']\n      }],\n      /**\n       * Border Spacing\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing': [{\n        'border-spacing': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Border Spacing X\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-x': [{\n        'border-spacing-x': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Border Spacing Y\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-y': [{\n        'border-spacing-y': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Table Layout\n       * @see https://tailwindcss.com/docs/table-layout\n       */\n      'table-layout': [{\n        table: ['auto', 'fixed']\n      }],\n      /**\n       * Caption Side\n       * @see https://tailwindcss.com/docs/caption-side\n       */\n      caption: [{\n        caption: ['top', 'bottom']\n      }],\n      // ---------------------------------\n      // --- Transitions and Animation ---\n      // ---------------------------------\n      /**\n       * Transition Property\n       * @see https://tailwindcss.com/docs/transition-property\n       */\n      transition: [{\n        transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Transition Behavior\n       * @see https://tailwindcss.com/docs/transition-behavior\n       */\n      'transition-behavior': [{\n        transition: ['normal', 'discrete']\n      }],\n      /**\n       * Transition Duration\n       * @see https://tailwindcss.com/docs/transition-duration\n       */\n      duration: [{\n        duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Transition Timing Function\n       * @see https://tailwindcss.com/docs/transition-timing-function\n       */\n      ease: [{\n        ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Transition Delay\n       * @see https://tailwindcss.com/docs/transition-delay\n       */\n      delay: [{\n        delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Animation\n       * @see https://tailwindcss.com/docs/animation\n       */\n      animate: [{\n        animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n      }],\n      // ------------------\n      // --- Transforms ---\n      // ------------------\n      /**\n       * Backface Visibility\n       * @see https://tailwindcss.com/docs/backface-visibility\n       */\n      backface: [{\n        backface: ['hidden', 'visible']\n      }],\n      /**\n       * Perspective\n       * @see https://tailwindcss.com/docs/perspective\n       */\n      perspective: [{\n        perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Perspective Origin\n       * @see https://tailwindcss.com/docs/perspective-origin\n       */\n      'perspective-origin': [{\n        'perspective-origin': scalePositionWithArbitrary()\n      }],\n      /**\n       * Rotate\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      rotate: [{\n        rotate: scaleRotate()\n      }],\n      /**\n       * Rotate X\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      'rotate-x': [{\n        'rotate-x': scaleRotate()\n      }],\n      /**\n       * Rotate Y\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      'rotate-y': [{\n        'rotate-y': scaleRotate()\n      }],\n      /**\n       * Rotate Z\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      'rotate-z': [{\n        'rotate-z': scaleRotate()\n      }],\n      /**\n       * Scale\n       * @see https://tailwindcss.com/docs/scale\n       */\n      scale: [{\n        scale: scaleScale()\n      }],\n      /**\n       * Scale X\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-x': [{\n        'scale-x': scaleScale()\n      }],\n      /**\n       * Scale Y\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-y': [{\n        'scale-y': scaleScale()\n      }],\n      /**\n       * Scale Z\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-z': [{\n        'scale-z': scaleScale()\n      }],\n      /**\n       * Scale 3D\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-3d': ['scale-3d'],\n      /**\n       * Skew\n       * @see https://tailwindcss.com/docs/skew\n       */\n      skew: [{\n        skew: scaleSkew()\n      }],\n      /**\n       * Skew X\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-x': [{\n        'skew-x': scaleSkew()\n      }],\n      /**\n       * Skew Y\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-y': [{\n        'skew-y': scaleSkew()\n      }],\n      /**\n       * Transform\n       * @see https://tailwindcss.com/docs/transform\n       */\n      transform: [{\n        transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n      }],\n      /**\n       * Transform Origin\n       * @see https://tailwindcss.com/docs/transform-origin\n       */\n      'transform-origin': [{\n        origin: scalePositionWithArbitrary()\n      }],\n      /**\n       * Transform Style\n       * @see https://tailwindcss.com/docs/transform-style\n       */\n      'transform-style': [{\n        transform: ['3d', 'flat']\n      }],\n      /**\n       * Translate\n       * @see https://tailwindcss.com/docs/translate\n       */\n      translate: [{\n        translate: scaleTranslate()\n      }],\n      /**\n       * Translate X\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-x': [{\n        'translate-x': scaleTranslate()\n      }],\n      /**\n       * Translate Y\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-y': [{\n        'translate-y': scaleTranslate()\n      }],\n      /**\n       * Translate Z\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-z': [{\n        'translate-z': scaleTranslate()\n      }],\n      /**\n       * Translate None\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-none': ['translate-none'],\n      // ---------------------\n      // --- Interactivity ---\n      // ---------------------\n      /**\n       * Accent Color\n       * @see https://tailwindcss.com/docs/accent-color\n       */\n      accent: [{\n        accent: scaleColor()\n      }],\n      /**\n       * Appearance\n       * @see https://tailwindcss.com/docs/appearance\n       */\n      appearance: [{\n        appearance: ['none', 'auto']\n      }],\n      /**\n       * Caret Color\n       * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n       */\n      'caret-color': [{\n        caret: scaleColor()\n      }],\n      /**\n       * Color Scheme\n       * @see https://tailwindcss.com/docs/color-scheme\n       */\n      'color-scheme': [{\n        scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n      }],\n      /**\n       * Cursor\n       * @see https://tailwindcss.com/docs/cursor\n       */\n      cursor: [{\n        cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n      }],\n      /**\n       * Field Sizing\n       * @see https://tailwindcss.com/docs/field-sizing\n       */\n      'field-sizing': [{\n        'field-sizing': ['fixed', 'content']\n      }],\n      /**\n       * Pointer Events\n       * @see https://tailwindcss.com/docs/pointer-events\n       */\n      'pointer-events': [{\n        'pointer-events': ['auto', 'none']\n      }],\n      /**\n       * Resize\n       * @see https://tailwindcss.com/docs/resize\n       */\n      resize: [{\n        resize: ['none', '', 'y', 'x']\n      }],\n      /**\n       * Scroll Behavior\n       * @see https://tailwindcss.com/docs/scroll-behavior\n       */\n      'scroll-behavior': [{\n        scroll: ['auto', 'smooth']\n      }],\n      /**\n       * Scroll Margin\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-m': [{\n        'scroll-m': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin X\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mx': [{\n        'scroll-mx': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Y\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-my': [{\n        'scroll-my': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Start\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ms': [{\n        'scroll-ms': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin End\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-me': [{\n        'scroll-me': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Top\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mt': [{\n        'scroll-mt': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Right\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mr': [{\n        'scroll-mr': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Bottom\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mb': [{\n        'scroll-mb': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Left\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ml': [{\n        'scroll-ml': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-p': [{\n        'scroll-p': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding X\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-px': [{\n        'scroll-px': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Y\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-py': [{\n        'scroll-py': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Start\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-ps': [{\n        'scroll-ps': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding End\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pe': [{\n        'scroll-pe': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Top\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pt': [{\n        'scroll-pt': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Right\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pr': [{\n        'scroll-pr': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Bottom\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pb': [{\n        'scroll-pb': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Left\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pl': [{\n        'scroll-pl': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Snap Align\n       * @see https://tailwindcss.com/docs/scroll-snap-align\n       */\n      'snap-align': [{\n        snap: ['start', 'end', 'center', 'align-none']\n      }],\n      /**\n       * Scroll Snap Stop\n       * @see https://tailwindcss.com/docs/scroll-snap-stop\n       */\n      'snap-stop': [{\n        snap: ['normal', 'always']\n      }],\n      /**\n       * Scroll Snap Type\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-type': [{\n        snap: ['none', 'x', 'y', 'both']\n      }],\n      /**\n       * Scroll Snap Type Strictness\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-strictness': [{\n        snap: ['mandatory', 'proximity']\n      }],\n      /**\n       * Touch Action\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      touch: [{\n        touch: ['auto', 'none', 'manipulation']\n      }],\n      /**\n       * Touch Action X\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-x': [{\n        'touch-pan': ['x', 'left', 'right']\n      }],\n      /**\n       * Touch Action Y\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-y': [{\n        'touch-pan': ['y', 'up', 'down']\n      }],\n      /**\n       * Touch Action Pinch Zoom\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-pz': ['touch-pinch-zoom'],\n      /**\n       * User Select\n       * @see https://tailwindcss.com/docs/user-select\n       */\n      select: [{\n        select: ['none', 'text', 'all', 'auto']\n      }],\n      /**\n       * Will Change\n       * @see https://tailwindcss.com/docs/will-change\n       */\n      'will-change': [{\n        'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n      }],\n      // -----------\n      // --- SVG ---\n      // -----------\n      /**\n       * Fill\n       * @see https://tailwindcss.com/docs/fill\n       */\n      fill: [{\n        fill: ['none', ...scaleColor()]\n      }],\n      /**\n       * Stroke Width\n       * @see https://tailwindcss.com/docs/stroke-width\n       */\n      'stroke-w': [{\n        stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n      }],\n      /**\n       * Stroke\n       * @see https://tailwindcss.com/docs/stroke\n       */\n      stroke: [{\n        stroke: ['none', ...scaleColor()]\n      }],\n      // ---------------------\n      // --- Accessibility ---\n      // ---------------------\n      /**\n       * Forced Color Adjust\n       * @see https://tailwindcss.com/docs/forced-color-adjust\n       */\n      'forced-color-adjust': [{\n        'forced-color-adjust': ['auto', 'none']\n      }]\n    },\n    conflictingClassGroups: {\n      overflow: ['overflow-x', 'overflow-y'],\n      overscroll: ['overscroll-x', 'overscroll-y'],\n      inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n      'inset-x': ['right', 'left'],\n      'inset-y': ['top', 'bottom'],\n      flex: ['basis', 'grow', 'shrink'],\n      gap: ['gap-x', 'gap-y'],\n      p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n      px: ['pr', 'pl'],\n      py: ['pt', 'pb'],\n      m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n      mx: ['mr', 'ml'],\n      my: ['mt', 'mb'],\n      size: ['w', 'h'],\n      'font-size': ['leading'],\n      'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n      'fvn-ordinal': ['fvn-normal'],\n      'fvn-slashed-zero': ['fvn-normal'],\n      'fvn-figure': ['fvn-normal'],\n      'fvn-spacing': ['fvn-normal'],\n      'fvn-fraction': ['fvn-normal'],\n      'line-clamp': ['display', 'overflow'],\n      rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n      'rounded-s': ['rounded-ss', 'rounded-es'],\n      'rounded-e': ['rounded-se', 'rounded-ee'],\n      'rounded-t': ['rounded-tl', 'rounded-tr'],\n      'rounded-r': ['rounded-tr', 'rounded-br'],\n      'rounded-b': ['rounded-br', 'rounded-bl'],\n      'rounded-l': ['rounded-tl', 'rounded-bl'],\n      'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n      'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n      'border-w-x': ['border-w-r', 'border-w-l'],\n      'border-w-y': ['border-w-t', 'border-w-b'],\n      'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n      'border-color-x': ['border-color-r', 'border-color-l'],\n      'border-color-y': ['border-color-t', 'border-color-b'],\n      translate: ['translate-x', 'translate-y', 'translate-none'],\n      'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n      'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n      'scroll-mx': ['scroll-mr', 'scroll-ml'],\n      'scroll-my': ['scroll-mt', 'scroll-mb'],\n      'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n      'scroll-px': ['scroll-pr', 'scroll-pl'],\n      'scroll-py': ['scroll-pt', 'scroll-pb'],\n      touch: ['touch-x', 'touch-y', 'touch-pz'],\n      'touch-x': ['touch'],\n      'touch-y': ['touch'],\n      'touch-pz': ['touch']\n    },\n    conflictingClassGroupModifiers: {\n      'font-size': ['leading']\n    },\n    orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n  };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n  cacheSize,\n  prefix,\n  experimentalParseClassName,\n  extend = {},\n  override = {}\n}) => {\n  overrideProperty(baseConfig, 'cacheSize', cacheSize);\n  overrideProperty(baseConfig, 'prefix', prefix);\n  overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n  overrideConfigProperties(baseConfig.theme, override.theme);\n  overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n  overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n  overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n  overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n  mergeConfigProperties(baseConfig.theme, extend.theme);\n  mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n  mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n  mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n  mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n  return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n  if (overrideValue !== undefined) {\n    baseObject[overrideKey] = overrideValue;\n  }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n  if (overrideObject) {\n    for (const key in overrideObject) {\n      overrideProperty(baseObject, key, overrideObject[key]);\n    }\n  }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n  if (mergeObject) {\n    for (const key in mergeObject) {\n      mergeArrayProperties(baseObject, mergeObject, key);\n    }\n  }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n  const mergeValue = mergeObject[key];\n  if (mergeValue !== undefined) {\n    baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n  }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { FieldType, IAddress, ILocation, IField } from '@baishuyun/types';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n// 复制文本的核心函数（TypeScript 版本）\nexport async function copyTextToClipboard(text: string): Promise<boolean> {\n  // 校验输入：确保复制的文本是字符串且非空\n  if (typeof text !== 'string' || text.trim() === '') {\n    console.error('要复制的文本必须是非空字符串');\n    return false;\n  }\n\n  try {\n    // 方案1：优先使用现代浏览器的 Clipboard API（更安全、无DOM操作）\n    if (navigator.clipboard && window.isSecureContext) {\n      await navigator.clipboard.writeText(text);\n      console.log('文本复制成功（Clipboard API）');\n      return true;\n    }\n\n    // 方案2：降级使用 execCommand（兼容旧浏览器，需创建临时DOM元素）\n    // 1. 创建临时textarea元素（隐藏，避免影响页面布局）\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.style.position = 'fixed'; // 避免滚动条偏移\n    textarea.style.left = '-9999px';\n    textarea.style.top = '-9999px';\n    document.body.appendChild(textarea);\n\n    // 2. 选中文本并执行复制\n    textarea.focus();\n    textarea.select();\n    const success = document.execCommand('copy');\n\n    // 3. 移除临时元素\n    document.body.removeChild(textarea);\n\n    if (success) {\n      console.log('文本复制成功（execCommand 降级方案）');\n      return true;\n    } else {\n      throw new Error('execCommand 复制失败');\n    }\n  } catch (error) {\n    // 捕获复制失败的异常（如用户拒绝权限、浏览器不支持等）\n    console.error('文本复制失败：', error);\n    return false;\n  }\n}\n\nfunction isOptionArray(value: unknown): value is Array<{ label: string; value: string }> {\n  if (!Array.isArray(value)) {\n    return false;\n  }\n\n  return value.every(\n    (item) =>\n      typeof item === 'object' &&\n      item !== null &&\n      'label' in item &&\n      'value' in item &&\n      typeof (item as any).label === 'string' &&\n      typeof (item as any).value === 'string'\n  );\n}\n\nexport const toHumanReadable = (value: unknown, type: FieldType): string | unknown => {\n  if (type === 'address' && typeof value === 'object') {\n    const v = value as IAddress;\n    return `${v.province} ${v.city} ${v.district} ${v.detail}`;\n  }\n\n  if (type === 'location' && typeof value === 'object') {\n    const v = value as ILocation;\n    const lnglatXY = v.lnglatXY || ['', ''];\n    return `经度: ${lnglatXY[0] || ''}, 纬度: ${lnglatXY[1] || ''}`;\n  }\n\n  if (Array.isArray(value)) {\n    return value.join(', ');\n  }\n\n  if (isOptionArray(value)) {\n    const values = value.map((item) => item.value);\n    return values.join(', ');\n  }\n\n  return value;\n};\n\nexport const isSubformFieldEqual = (f1: IField, f2: IField, widgetArrKey: string = 'value') => {\n  // 不是子表单字段，不进行比较，视为相等\n  if (f1?.widget?.type !== 'subform' || f2?.widget?.type !== 'subform') {\n    return true;\n  }\n\n  const subFields1 = (f1?.widget as any)[widgetArrKey] || [];\n  const subFields2 = (f2?.widget as any)[widgetArrKey] || [];\n\n  // 子表单字段长度不等，视为不同\n  if (subFields1.length !== subFields2.length) {\n    return false;\n  }\n\n  for (let i = 0; i < subFields1.length; i++) {\n    const subField1 = subFields1[i];\n    const subField2 = subFields2[i];\n\n    if (subField1.length !== subField2.length) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","import { useState, useEffect, useRef } from 'react';\n\ninterface UseShadowOptions {\n  /** Shadow DOM挂载的根元素（默认挂到body） */\n  rootEl?: HTMLElement;\n  /** 要注入到Shadow DOM中的样式文本 */\n  style?: string;\n  /** Shadow内部容器的类名 */\n  containerClasses?: string[];\n  /** 包裹Shadow的外层元素类名 */\n  wrapperClasses?: string[];\n  /** 包裹元素的内联样式 */\n  wrapperStyle?: React.CSSProperties;\n\n  extraHtml?: string;\n\n  id: string;\n}\n\n/**\n * 通用的创建Shadow DOM的Hook\n * @param options 配置项：样式、根元素、类名等\n * @returns Shadow DOM内部的容器元素（用于React Portal挂载）\n */\nexport const useShadow = ({\n  id,\n  style = '',\n  rootEl,\n  containerClasses = [],\n  wrapperClasses = [],\n  wrapperStyle = {},\n  extraHtml = '',\n}: UseShadowOptions): { shadowContainer: HTMLElement | null; destroy: () => void } => {\n  const [shadowContainer, setShadowContainer] = useState<HTMLElement | null>(null);\n  const wrapperRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    wrapperRef.current?.classList.add(...wrapperClasses);\n    shadowContainer?.classList.add(...containerClasses);\n  }, [wrapperClasses, containerClasses]);\n\n  useEffect(() => {\n    if (wrapperRef.current) {\n      Object.entries(wrapperStyle).forEach(([key, value]) => {\n        if (value !== undefined) {\n          // @ts-ignore\n          wrapperRef.current!.style[key as any] = value;\n        }\n      });\n    }\n  }, [wrapperStyle]);\n\n  useEffect(() => {\n    // Cleanup previous shadow container if it exists\n    if (wrapperRef.current && wrapperRef.current.parentNode) {\n      wrapperRef.current.parentNode.removeChild(wrapperRef.current);\n      wrapperRef.current = null;\n    }\n\n    try {\n      // 1. 创建外层包裹元素（挂载Shadow Root的载体）\n      const wrapperEl = document.createElement('div');\n      wrapperEl.classList.add(...wrapperClasses, 'wrapper');\n      // wrapperEl.style.height = '100%';\n      wrapperRef.current = wrapperEl;\n\n      // apply wrapper styles\n      Object.entries(wrapperStyle).forEach(([key, value]) => {\n        if (value !== undefined) {\n          // @ts-ignore\n          wrapperEl.style[key as any] = value;\n        }\n      });\n\n      // 2. 创建并挂载Shadow Root\n      const shadowRoot = wrapperEl.attachShadow({ mode: 'open' });\n\n      // 注入额外的HTML内容\n      if (extraHtml) {\n        shadowRoot.innerHTML = extraHtml;\n      }\n\n      // 3. 注入样式到Shadow DOM\n      if (style) {\n        const styleEl = document.createElement('style');\n        styleEl.textContent = style;\n        shadowRoot.appendChild(styleEl);\n      }\n\n      // 4. 创建Shadow内部的容器（最终挂载React Portal的元素）\n      const containerEl = document.createElement('div');\n      containerEl.classList.add(...containerClasses, 'shadow-container');\n      shadowRoot.appendChild(containerEl);\n\n      // 5. 将外层元素挂载到指定根节点\n      const mountRoot = rootEl || document.body;\n      mountRoot.appendChild(wrapperEl);\n\n      setShadowContainer(containerEl);\n    } catch (error) {\n      console.error('创建Shadow DOM失败:', error);\n      setShadowContainer(null);\n    }\n\n    // Cleanup on unmount or when rootEl changes\n    // return () => {\n    //   if (wrapperRef.current && wrapperRef.current.parentNode) {\n    //     wrapperRef.current.parentNode.removeChild(wrapperRef.current);\n    //     wrapperRef.current = null;\n    //   }\n    // };\n  }, [rootEl]); // Recreate when rootEl changes\n\n  if (shadowContainer) {\n    shadowContainer.id = id;\n  }\n\n  return {\n    shadowContainer,\n    destroy: () => {\n      if (wrapperRef.current && wrapperRef.current.parentNode) {\n        wrapperRef.current.parentNode.removeChild(wrapperRef.current);\n        wrapperRef.current = null;\n      }\n    },\n  };\n};\n","import { FormIconOption } from \"../types\";\nimport { FieldType } from \"@baishuyun/types\";\n\nexport const BotImgUrl = `\n  url(data:image/png;base64,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)\n  `;\n\nexport const WarningImgUrl = `\nurl(data:image/png;base64,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)`;\n\nexport const ChatHeaderBgImgUrl = `url(data:image/png;base64,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)`;\n\nexport const transCls = 'transition-all duration-200 ease-out';\n// Form icon data from iconfont.json (icons with name starting with \"表单\")\n\nexport const FORM_ICON_OPTIONS: FormIconOption[] = [\n  { id: 'biaodan1', code: '&#xe814;', label: '表单1', value: 25 },\n  { id: 'biaodan2', code: '&#xe81d;', label: '表单2', value: 26 },\n  { id: 'biaodan3', code: '&#xe81c;', label: '表单3', value: 27 },\n  { id: 'biaodan4', code: '&#xe81a;', label: '表单4', value: 28 },\n  { id: 'biaodan5', code: '&#xe813;', label: '表单5', value: 29 },\n  { id: 'biaodan6', code: '&#xe81b;', label: '表单6', value: 30 },\n  { id: 'biaodan7', code: '&#xe818;', label: '表单7', value: 31 },\n  { id: 'biaodan8', code: '&#xe819;', label: '表单8', value: 32 },\n  { id: 'biaodan9', code: '&#xe817;', label: '表单9', value: 33 },\n  { id: 'biaodan10', code: '&#xe816;', label: '表单10', value: 34 },\n  { id: 'biaodan11', code: '&#xe810;', label: '表单11', value: 35 },\n  { id: 'biaodan12', code: '&#xe815;', label: '表单12', value: 36 },\n  { id: 'biaodan13', code: '&#xe812;', label: '表单13', value: 37 },\n  { id: 'biaodan14', code: '&#xe811;', label: '表单14', value: 38 },\n  { id: 'biaodan15', code: '&#xe80e;', label: '表单15', value: 39 },\n  { id: 'biaodan16', code: '&#xe80f;', label: '表单16', value: 40 },\n  { id: 'biaodan17', code: '&#xe80d;', label: '表单17', value: 41 },\n  { id: 'biaodan18', code: '&#xe807;', label: '表单18', value: 42 },\n  { id: 'biaodan19', code: '&#xe80b;', label: '表单19', value: 43 },\n  { id: 'biaodan20', code: '&#xe80a;', label: '表单20', value: 44 },\n  { id: 'biaodan21', code: '&#xe80c;', label: '表单21', value: 45 },\n  { id: 'biaodan22', code: '&#xe809;', label: '表单22', value: 46 },\n  { id: 'biaodan23', code: '&#xe808;', label: '表单23', value: 47 },\n  { id: 'biaodan24', code: '&#xe805;', label: '表单24', value: 48 },\n  { id: 'biaodan25', code: '&#xe7ff;', label: '表单25', value: 49 },\n  { id: 'biaodan26', code: '&#xe803;', label: '表单26', value: 50 },\n  { id: 'biaodan27', code: '&#xe806;', label: '表单27', value: 51 },\n  { id: 'biaodan28', code: '&#xe802;', label: '表单28', value: 52 },\n  { id: 'biaodan29', code: '&#xe800;', label: '表单29', value: 53 },\n  { id: 'biaodan30', code: '&#xe804;', label: '表单30', value: 54 },\n  { id: 'biaodan31', code: '&#xe801;', label: '表单31', value: 55 },\n  { id: 'biaodan32', code: '&#xe7fe;', label: '表单32', value: 56 },\n  { id: 'biaodan33', code: '&#xe7fc;', label: '表单33', value: 57 },\n  { id: 'biaodan34', code: '&#xe7fd;', label: '表单34', value: 58 },\n  { id: 'biaodan35', code: '&#xe7fb;', label: '表单35', value: 59 },\n  { id: 'biaodan36', code: '&#xe7fa;', label: '表单36', value: 60 },\n];\n\nexport const FieldTypeNameMap: Record<FieldType, string> = {\n  text: '输入框',\n  password: '密码输入框',\n  location: '定位',\n  datetime: '日期时间选择器',\n  radiogroup: '单选框',\n  radio: '单选框',\n  combo: '下拉框',\n  address: '地址',\n  button: '按钮',\n  textarea: '多行输入框',\n  combocheck: '多选下拉框',\n  checkboxgroup: '多选框组',\n  separator: '分割线',\n  upload: '附件上传',\n  number: '数字输入框',\n  dataload: '数据加载',\n  image: '图片上传',\n  signature: '签名',\n  dept: '部门选择',\n  user: '成员选择',\n  usergroup: '成员多选',\n  deptgroup: '部门多选',\n  unknown: '未知类型',\n  sn: '流水号',\n  formula: '公式字段',\n  linkdata: '关联数据',\n  linkquery: '关联查询',\n  subform: '子表单',\n  flowState: '流程状态',\n  flowstate: '流程状态',\n};\n\nexport const FIELD_ICON_CODE_MAP: Record<FieldType, string> = {\n  address: '&#xe881;',\n  subform: '&#xe847;',\n  password: '&#xe854;',\n  button: '&#xe8e8;',\n  textarea: '&#xe84f;',\n  datetime: '&#xe849;',\n  text: '&#xe854;',\n  location: '&#xe87f;',\n  radiogroup: '&#xe853;',\n  radio: '&#xe861;',\n  combo: '&#xe84a;',\n  formula: '',\n  flowState: '',\n  flowstate: '',\n  combocheck: '&#xe84b;',\n  separator: '&#xe850;',\n  checkboxgroup: '&#xe84c;',\n  upload: '&#xe621;',\n  number: '&#xe846;',\n  image: '&#xe880;',\n  signature: '&#xe87e;',\n  user: '&#xe856;',\n  dataload: '&#xe848;',\n  linkdata: '&#xe857;',\n  linkquery: '&#xe857;',\n  usergroup: '&#xe851;',\n  dept: '&#xe84d;',\n  sn: '&#xe882;',\n  deptgroup: '&#xe852;',\n  unknown: '&#xe848;',\n};\n","export const CalendarIcon = ({ className }: { className?: string }) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className={className}>\n  <path d=\"M4.396 3.383H4.576C4.846 3.383 4.95 2.993 4.95 2.723V0.569C4.95 0.299 4.815 0 4.546 0H4.366C4.096 0 3.978 0.299 3.978 0.569V2.813C3.978 2.993 4.128 3.383 4.396 3.383ZM9.322 3.383H9.5C9.77 3.383 9.89 2.993 9.89 2.723V0.569C9.89 0.299 9.783 0 9.516 0H9.335C9.066 0 8.933 0.299 8.933 0.569V2.813C8.933 2.993 9.142 3.383 9.322 3.383ZM12.147 0.971053L10.5 0.971V1.924L12.147 1.92405C12.685 1.92405 13.135 2.45405 13.135 2.99305V3.89105H0.928V2.99305C0.928 2.45505 1.378 1.92505 1.917 1.92505L3.5 1.925V0.972L2.005 0.972053C0.928 0.972053 0 2.09505 0 3.08205V11.7911C0 12.7791 0.905053 14 1.98305 14H12.2131C13.2011 14 14 12.8681 14 11.7911V3.08305C13.912 2.09605 13.224 0.973053 12.146 0.973053V0.970053L12.147 0.971053ZM13.084 11.7011C13.084 12.3291 12.7541 13.044 12.1241 13.044H1.98505C1.44705 13.044 0.959 12.3291 0.959 11.7911V4.78805H13.088V11.7001H13.086L13.084 11.7011ZM8.63004 5.94605C8.96004 5.94605 9.17804 6.34705 9.07204 6.71005L9.03904 6.80005L6.69705 11.9791C6.57005 12.2561 6.28405 12.3561 6.05705 12.2021C5.85705 12.0641 5.77005 11.7721 5.84205 11.5151L5.87705 11.4191L7.83205 7.09705H5.35005C5.12005 7.09705 4.92805 6.89505 4.88905 6.62605L4.88105 6.52205C4.88105 6.24005 5.04705 6.00505 5.26505 5.95605L5.34905 5.94705L8.63004 5.94605ZM8.5 0.972V1.924H5.43V0.972H8.502H8.5Z\" fill=\"#666666\"/>\n</svg>\n);\n","// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction composeRefs(...refs) {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == \"function\") {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\nfunction useComposedRefs(...refs) {\n  return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n  composeRefs,\n  useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n  const Slot2 = React.forwardRef((props, forwardedRef) => {\n    let { children, ...slotProps } = props;\n    let slottableElement = null;\n    let hasSlottable = false;\n    const newChildren = [];\n    if (isLazyComponent(children) && typeof use === \"function\") {\n      children = use(children._payload);\n    }\n    React.Children.forEach(children, (maybeSlottable) => {\n      if (isSlottable(maybeSlottable)) {\n        hasSlottable = true;\n        const slottable = maybeSlottable;\n        let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n        if (isLazyComponent(child) && typeof use === \"function\") {\n          child = use(child._payload);\n        }\n        slottableElement = getSlottableElementFromSlottable(slottable, child);\n        newChildren.push(slottableElement?.props?.children);\n      } else {\n        newChildren.push(maybeSlottable);\n      }\n    });\n    if (slottableElement) {\n      slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n    } else if (\n      // A `Slottable` was found but it didn't resolve to a single element (e.g.\n      // it wrapped multiple elements, text, or a render-prop `child` that\n      // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n      // itself as the slot target — throw a descriptive error below instead.\n      !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n    ) {\n      slottableElement = children;\n    }\n    const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n    const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n    if (!slottableElement) {\n      if (children || children === 0) {\n        throw new Error(\n          hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n        );\n      }\n      return children;\n    }\n    const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n    if (slottableElement.type !== React.Fragment) {\n      mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n    }\n    return React.cloneElement(slottableElement, mergedProps);\n  });\n  Slot2.displayName = `${ownerName}.Slot`;\n  return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n  const Slottable2 = (props) => \"child\" in props ? props.children(props.child) : props.children;\n  Slottable2.displayName = `${ownerName}.Slottable`;\n  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n  return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = (slottable, child) => {\n  if (\"child\" in slottable.props) {\n    const child2 = slottable.props.child;\n    if (!React.isValidElement(child2)) return null;\n    return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n  }\n  return React.isValidElement(child) ? child : null;\n};\nfunction mergeProps(slotProps, childProps) {\n  const overrideProps = { ...childProps };\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args) => {\n          const result = childPropValue(...args);\n          slotPropValue(...args);\n          return result;\n        };\n      } else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    } else if (propName === \"style\") {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === \"className\") {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n    }\n  }\n  return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nfunction isSlottable(child) {\n  return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n  return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\nfunction isPromiseLike(value) {\n  return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nvar createSlotError = (ownerName) => {\n  return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\nvar createSlottableError = (ownerName) => {\n  return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\nvar use = React[\" use \".trim().toString()];\nexport {\n  Slot as Root,\n  Slot,\n  Slottable,\n  createSlot,\n  createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n        var _config_compoundVariants;\n        if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n        const { variants, defaultVariants } = config;\n        const getVariantClassNames = Object.keys(variants).map((variant)=>{\n            const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n            const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n            if (variantProp === null) return null;\n            const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n            return variants[variant][variantKey];\n        });\n        const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n            let [key, value] = param;\n            if (value === undefined) {\n                return acc;\n            }\n            acc[key] = value;\n            return acc;\n        }, {});\n        const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n            let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n            return Object.entries(compoundVariantOptions).every((param)=>{\n                let [key, value] = param;\n                return Array.isArray(value) ? value.includes({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                }[key]) : ({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                })[key] === value;\n            }) ? [\n                ...acc,\n                cvClass,\n                cvClassName\n            ] : acc;\n        }, []);\n        return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n    };\n\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../lib/utils';\n\nconst buttonVariants = cva(\n  'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-[14px] transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 rounded-[4px]',\n  {\n    variants: {\n      variant: {\n        default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n        destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n        outline:\n          'border border-[#e0e0e0] bg-white hover:bg-[#e0e0e0] text-[#121111]',\n        secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n        ghost: 'hover:bg-accent hover:text-accent-foreground',\n        link: 'text-primary underline-offset-4 hover:underline',\n        entry: '',\n      },\n      size: {\n        default: 'h-[34px] px-4 py-2',\n        sm: 'h-8 rounded-md px-3 text-xs',\n        lg: 'h-10 rounded-md px-8',\n        icon: 'h-[24px] w-[24px]',\n        entry: 'h-[30px] px-1.5 py-0 gap-1.5',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  }\n);\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : 'button';\n    return (\n      <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n    );\n  }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n  return function handleEvent(event) {\n    originalEventHandler?.(event);\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\nfunction getOwnerWindow(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access window outside of the DOM\");\n  }\n  return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access document outside of the DOM\");\n  }\n  return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    return null;\n  }\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\n  if (activeDescendant) {\n    const id = activeElement.getAttribute(\"aria-activedescendant\");\n    if (id) {\n      const element = getOwnerDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n  return activeElement;\n}\nfunction isFrame(element) {\n  return element.tagName === \"IFRAME\";\n}\nexport {\n  canUseDOM,\n  composeEventHandlers,\n  getActiveElement,\n  getOwnerDocument,\n  getOwnerWindow,\n  isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  Context.displayName = rootComponentName + \"Context\";\n  const Provider = (props) => {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  };\n  Provider.displayName = rootComponentName + \"Provider\";\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    BaseContext.displayName = rootComponentName + \"Context\";\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    const Provider = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    };\n    Provider.displayName = rootComponentName + \"Provider\";\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n  useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n  const [id, setId] = React.useState(useReactId());\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n  useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n  prop,\n  defaultProp,\n  onChange = () => {\n  },\n  caller\n}) {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange\n  });\n  const isControlled = prop !== void 0;\n  const value = isControlled ? prop : uncontrolledProp;\n  if (true) {\n    const isControlledRef = React.useRef(prop !== void 0);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const setValue = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value2 !== prop) {\n          onChangeRef.current?.(value2);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef]\n  );\n  return [value, setValue];\n}\nfunction useUncontrolledState({\n  defaultProp,\n  onChange\n}) {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n  return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== void 0;\n  const onChange = useEffectEvent(onChangeProp);\n  if (true) {\n    const isControlledRef = React2.useRef(controlledState !== void 0);\n    React2.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const args = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    args.push(init);\n  }\n  const [internalState, dispatch] = React2.useReducer(\n    (state2, action) => {\n      if (action.type === SYNC_STATE) {\n        return { ...state2, state: action.state };\n      }\n      const next = reducer(state2, action);\n      if (isControlled && !Object.is(next.state, state2.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args\n  );\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React2.useRef(uncontrolledState);\n  React2.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [uncontrolledState, prevValueRef, isControlled]);\n  const state = React2.useMemo(() => {\n    const isControlled2 = controlledState !== void 0;\n    if (isControlled2) {\n      return { ...internalState, state: controlledState };\n    }\n    return internalState;\n  }, [internalState, controlledState]);\n  React2.useEffect(() => {\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n  return [state, dispatch];\n}\nexport {\n  useControllableState,\n  useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n  \"a\",\n  \"button\",\n  \"div\",\n  \"form\",\n  \"h2\",\n  \"h3\",\n  \"img\",\n  \"input\",\n  \"label\",\n  \"li\",\n  \"nav\",\n  \"ol\",\n  \"p\",\n  \"select\",\n  \"span\",\n  \"svg\",\n  \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props, forwardedRef) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp = asChild ? Slot : node;\n    if (typeof window !== \"undefined\") {\n      window[Symbol.for(\"radix-ui\")] = true;\n    }\n    return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n  });\n  Node.displayName = `Primitive.${node}`;\n  return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n  Primitive,\n  Root,\n  dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n  const callbackRef = React.useRef(callback);\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n  return React.useMemo(() => ((...args) => callbackRef.current?.(...args)), []);\n}\nexport {\n  useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n  React.useEffect(() => {\n    const handleKeyDown = (event) => {\n      if (event.key === \"Escape\") {\n        onEscapeKeyDown(event);\n      }\n    };\n    ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n    return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n  }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n  useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n  layers: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = \"none\";\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (disableOutsidePointerEvents) {\n          context.layersWithOutsidePointerEventsDisabled.delete(node);\n          if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n            ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n          }\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        ...layerProps,\n        ref: composedRefs,\n        style: {\n          pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n          ...props.style\n        },\n        onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n        onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n        onPointerDownCapture: composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )\n      }\n    );\n  }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n  return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {\n  });\n  React.useEffect(() => {\n    const handlePointerDown = (event) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        let handleAndDispatchPointerDownOutsideEvent2 = function() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        };\n        var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n        const eventDetail = { originalEvent: event };\n        if (event.pointerType === \"touch\") {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n          ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent2();\n        }\n      } else {\n        ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n      ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n  };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside);\n  const isFocusInsideReactTreeRef = React.useRef(false);\n  React.useEffect(() => {\n    const handleFocus = (event) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false\n        });\n      }\n    };\n    ownerDocument.addEventListener(\"focusin\", handleFocus);\n    return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n  return {\n    onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n    onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n  };\n}\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n  Branch,\n  DismissableLayer,\n  DismissableLayerBranch,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n  const {\n    loop = false,\n    trapped = false,\n    onMountAutoFocus: onMountAutoFocusProp,\n    onUnmountAutoFocus: onUnmountAutoFocusProp,\n    ...scopeProps\n  } = props;\n  const [container, setContainer] = React.useState(null);\n  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n  const lastFocusedElementRef = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n  const focusScope = React.useRef({\n    paused: false,\n    pause() {\n      this.paused = true;\n    },\n    resume() {\n      this.paused = false;\n    }\n  }).current;\n  React.useEffect(() => {\n    if (trapped) {\n      let handleFocusIn2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const target = event.target;\n        if (container.contains(target)) {\n          lastFocusedElementRef.current = target;\n        } else {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleFocusOut2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const relatedTarget = event.relatedTarget;\n        if (relatedTarget === null) return;\n        if (!container.contains(relatedTarget)) {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleMutations2 = function(mutations) {\n        const focusedElement = document.activeElement;\n        if (focusedElement !== document.body) return;\n        for (const mutation of mutations) {\n          if (mutation.removedNodes.length > 0) focus(container);\n        }\n      };\n      var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n      document.addEventListener(\"focusin\", handleFocusIn2);\n      document.addEventListener(\"focusout\", handleFocusOut2);\n      const mutationObserver = new MutationObserver(handleMutations2);\n      if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n      return () => {\n        document.removeEventListener(\"focusin\", handleFocusIn2);\n        document.removeEventListener(\"focusout\", handleFocusOut2);\n        mutationObserver.disconnect();\n      };\n    }\n  }, [trapped, container, focusScope.paused]);\n  React.useEffect(() => {\n    if (container) {\n      focusScopesStack.add(focusScope);\n      const previouslyFocusedElement = document.activeElement;\n      const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n      if (!hasFocusedCandidate) {\n        const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n        container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        container.dispatchEvent(mountEvent);\n        if (!mountEvent.defaultPrevented) {\n          focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n          if (document.activeElement === previouslyFocusedElement) {\n            focus(container);\n          }\n        }\n      }\n      return () => {\n        container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        setTimeout(() => {\n          const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n          container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          container.dispatchEvent(unmountEvent);\n          if (!unmountEvent.defaultPrevented) {\n            focus(previouslyFocusedElement ?? document.body, { select: true });\n          }\n          container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          focusScopesStack.remove(focusScope);\n        }, 0);\n      };\n    }\n  }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n  const handleKeyDown = React.useCallback(\n    (event) => {\n      if (!loop && !trapped) return;\n      if (focusScope.paused) return;\n      const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n      const focusedElement = document.activeElement;\n      if (isTabKey && focusedElement) {\n        const container2 = event.currentTarget;\n        const [first, last] = getTabbableEdges(container2);\n        const hasTabbableElementsInside = first && last;\n        if (!hasTabbableElementsInside) {\n          if (focusedElement === container2) event.preventDefault();\n        } else {\n          if (!event.shiftKey && focusedElement === last) {\n            event.preventDefault();\n            if (loop) focus(first, { select: true });\n          } else if (event.shiftKey && focusedElement === first) {\n            event.preventDefault();\n            if (loop) focus(last, { select: true });\n          }\n        }\n      }\n    },\n    [loop, trapped, focusScope.paused]\n  );\n  return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n  const previouslyFocusedElement = document.activeElement;\n  for (const candidate of candidates) {\n    focus(candidate, { select });\n    if (document.activeElement !== previouslyFocusedElement) return;\n  }\n}\nfunction getTabbableEdges(container) {\n  const candidates = getTabbableCandidates(container);\n  const first = findVisible(candidates, container);\n  const last = findVisible(candidates.reverse(), container);\n  return [first, last];\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction findVisible(elements, container) {\n  for (const element of elements) {\n    if (!isHidden(element, { upTo: container })) return element;\n  }\n}\nfunction isHidden(node, { upTo }) {\n  if (getComputedStyle(node).visibility === \"hidden\") return true;\n  while (node) {\n    if (upTo !== void 0 && node === upTo) return false;\n    if (getComputedStyle(node).display === \"none\") return true;\n    node = node.parentElement;\n  }\n  return false;\n}\nfunction isSelectableInput(element) {\n  return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n  if (element && element.focus) {\n    const previouslyFocusedElement = document.activeElement;\n    element.focus({ preventScroll: true });\n    if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n      element.select();\n  }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n  let stack = [];\n  return {\n    add(focusScope) {\n      const activeFocusScope = stack[0];\n      if (focusScope !== activeFocusScope) {\n        activeFocusScope?.pause();\n      }\n      stack = arrayRemove(stack, focusScope);\n      stack.unshift(focusScope);\n    },\n    remove(focusScope) {\n      stack = arrayRemove(stack, focusScope);\n      stack[0]?.resume();\n    }\n  };\n}\nfunction arrayRemove(array, item) {\n  const updatedArray = [...array];\n  const index = updatedArray.indexOf(item);\n  if (index !== -1) {\n    updatedArray.splice(index, 1);\n  }\n  return updatedArray;\n}\nfunction removeLinks(items) {\n  return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n  FocusScope,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || mounted && globalThis?.document?.body;\n  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n  Portal,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef(null);\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n        if (event.target === node && isCurrentAnimation) {\n          send(\"ANIMATION_END\");\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = \"forwards\";\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === \"forwards\") {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      stylesRef.current = node2 ? getComputedStyle(node2) : null;\n      setNode(node2);\n    }, [])\n  };\n}\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction useStableComposedRefs(...refs) {\n  const refsRef = React2.useRef(refs);\n  refsRef.current = refs;\n  return React2.useCallback((node) => {\n    const currentRefs = refsRef.current;\n    let hasCleanup = false;\n    const cleanups = currentRefs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup === \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup === \"function\") {\n            cleanup();\n          } else {\n            setRef(currentRefs[i], null);\n          }\n        }\n      };\n    }\n  }, []);\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n  Presence,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nvar guards = null;\nfunction FocusGuards(props) {\n  useFocusGuards();\n  return props.children;\n}\nfunction useFocusGuards() {\n  React.useEffect(() => {\n    if (!guards) {\n      guards = { start: createFocusGuard(), end: createFocusGuard() };\n    }\n    const { start, end } = guards;\n    if (document.body.firstElementChild !== start) {\n      document.body.insertAdjacentElement(\"afterbegin\", start);\n    }\n    if (document.body.lastElementChild !== end) {\n      document.body.insertAdjacentElement(\"beforeend\", end);\n    }\n    count++;\n    return () => {\n      if (count === 1) {\n        guards?.start.remove();\n        guards?.end.remove();\n        guards = null;\n      }\n      count = Math.max(0, count - 1);\n    };\n  }, []);\n}\nfunction createFocusGuard() {\n  const element = document.createElement(\"span\");\n  element.setAttribute(\"data-radix-focus-guard\", \"\");\n  element.tabIndex = 0;\n  element.style.outline = \"none\";\n  element.style.opacity = \"0\";\n  element.style.position = \"fixed\";\n  element.style.pointerEvents = \"none\";\n  return element;\n}\nexport {\n  FocusGuards,\n  FocusGuards as Root,\n  useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n    var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n    if (!sideCar) {\n        throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n    }\n    var Target = sideCar.read();\n    if (!Target) {\n        throw new Error('Sidecar medium not found');\n    }\n    return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n    medium.useMedium(exported);\n    return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n    return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n    var ref = React.useRef(null);\n    var _a = React.useState({\n        onScrollCapture: nothing,\n        onWheelCapture: nothing,\n        onTouchMoveCapture: nothing,\n    }), callbacks = _a[0], setCallbacks = _a[1];\n    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n    var SideCar = sideCar;\n    var containerRef = useMergeRefs([ref, parentRef]);\n    var containerProps = __assign(__assign({}, rest), callbacks);\n    return (React.createElement(React.Fragment, null,\n        enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n        forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n    enabled: true,\n    removeScrollBar: true,\n    inert: false,\n};\nRemoveScroll.classNames = {\n    fullWidth: fullWidthClassName,\n    zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n    currentNonce = nonce;\n};\nexport var getNonce = function () {\n    if (currentNonce) {\n        return currentNonce;\n    }\n    if (typeof __webpack_nonce__ !== 'undefined') {\n        return __webpack_nonce__;\n    }\n    return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n    if (!document)\n        return null;\n    var tag = document.createElement('style');\n    tag.type = 'text/css';\n    var nonce = getNonce();\n    if (nonce) {\n        tag.setAttribute('nonce', nonce);\n    }\n    return tag;\n}\nfunction injectStyles(tag, css) {\n    // @ts-ignore\n    if (tag.styleSheet) {\n        // @ts-ignore\n        tag.styleSheet.cssText = css;\n    }\n    else {\n        tag.appendChild(document.createTextNode(css));\n    }\n}\nfunction insertStyleTag(tag) {\n    var head = document.head || document.getElementsByTagName('head')[0];\n    head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n    var counter = 0;\n    var stylesheet = null;\n    return {\n        add: function (style) {\n            if (counter == 0) {\n                if ((stylesheet = makeStyleTag())) {\n                    injectStyles(stylesheet, style);\n                    insertStyleTag(stylesheet);\n                }\n            }\n            counter++;\n        },\n        remove: function () {\n            counter--;\n            if (!counter && stylesheet) {\n                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n                stylesheet = null;\n            }\n        },\n    };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n    var sheet = stylesheetSingleton();\n    return function (styles, isDynamic) {\n        React.useEffect(function () {\n            sheet.add(styles);\n            return function () {\n                sheet.remove();\n            };\n        }, [styles && isDynamic]);\n    };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n    var useStyle = styleHookSingleton();\n    var Sheet = function (_a) {\n        var styles = _a.styles, dynamic = _a.dynamic;\n        useStyle(styles, dynamic);\n        return null;\n    };\n    return Sheet;\n};\n","export var zeroGap = {\n    left: 0,\n    top: 0,\n    right: 0,\n    gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n    var cs = window.getComputedStyle(document.body);\n    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n    return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    if (typeof window === 'undefined') {\n        return zeroGap;\n    }\n    var offsets = getOffset(gapMode);\n    var documentWidth = document.documentElement.clientWidth;\n    var windowWidth = window.innerWidth;\n    return {\n        left: offsets[0],\n        top: offsets[1],\n        right: offsets[2],\n        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n    };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    return \"\\n  .\".concat(noScrollbarsClassName, \" {\\n   overflow: hidden \").concat(important, \";\\n   padding-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  body[\").concat(lockAttribute, \"] {\\n    overflow: hidden \").concat(important, \";\\n    overscroll-behavior: contain;\\n    \").concat([\n        allowRelative && \"position: relative \".concat(important, \";\"),\n        gapMode === 'margin' &&\n            \"\\n    padding-left: \".concat(left, \"px;\\n    padding-top: \").concat(top, \"px;\\n    padding-right: \").concat(right, \"px;\\n    margin-left:0;\\n    margin-top:0;\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n    \"),\n        gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n    ]\n        .filter(Boolean)\n        .join(''), \"\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" {\\n    right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" {\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n    right: 0 \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n    margin-right: 0 \").concat(important, \";\\n  }\\n  \\n  body[\").concat(lockAttribute, \"] {\\n    \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n  }\\n\");\n};\nvar getCurrentUseCounter = function () {\n    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n    return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n    React.useEffect(function () {\n        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n        return function () {\n            var newCounter = getCurrentUseCounter() - 1;\n            if (newCounter <= 0) {\n                document.body.removeAttribute(lockAttribute);\n            }\n            else {\n                document.body.setAttribute(lockAttribute, newCounter.toString());\n            }\n        };\n    }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n    useLockAttribute();\n    /*\n     gap will be measured on every component mount\n     however it will be used only by the \"first\" invocation\n     due to singleton nature of <Style\n     */\n    var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n    return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passiveSupported = true;\n                return true;\n            },\n        });\n        // @ts-ignore\n        window.addEventListener('test', options, options);\n        // @ts-ignore\n        window.removeEventListener('test', options, options);\n    }\n    catch (err) {\n        passiveSupported = false;\n    }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n    // textarea will always _contain_ scroll inside self. It only can be hidden\n    return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n    if (!(node instanceof Element)) {\n        return false;\n    }\n    var styles = window.getComputedStyle(node);\n    return (\n    // not-not-scrollable\n    styles[overflow] !== 'hidden' &&\n        // contains scroll inside self\n        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n    var ownerDocument = node.ownerDocument;\n    var current = node;\n    do {\n        // Skip over shadow root\n        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n            current = current.host;\n        }\n        var isScrollable = elementCouldBeScrolled(axis, current);\n        if (isScrollable) {\n            var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n            if (scrollHeight > clientHeight) {\n                return true;\n            }\n        }\n        current = current.parentNode;\n    } while (current && current !== ownerDocument.body);\n    return false;\n};\nvar getVScrollVariables = function (_a) {\n    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n    return [\n        scrollTop,\n        scrollHeight,\n        clientHeight,\n    ];\n};\nvar getHScrollVariables = function (_a) {\n    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n    return [\n        scrollLeft,\n        scrollWidth,\n        clientWidth,\n    ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n    /**\n     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n     * and then increasingly negative as you scroll towards the end of the content.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n     */\n    return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n    var delta = directionFactor * sourceDelta;\n    // find scrollable target\n    var target = event.target;\n    var targetInLock = endTarget.contains(target);\n    var shouldCancelScroll = false;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = 0;\n    var availableScrollTop = 0;\n    do {\n        if (!target) {\n            break;\n        }\n        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n        var elementScroll = scroll_1 - capacity - directionFactor * position;\n        if (position || elementScroll) {\n            if (elementCouldBeScrolled(axis, target)) {\n                availableScroll += elementScroll;\n                availableScrollTop += position;\n            }\n        }\n        var parent_1 = target.parentNode;\n        // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n        // this is the same logic used in focus-lock\n        target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n    } while (\n    // portaled content\n    (!targetInLock && target !== document.body) ||\n        // self content\n        (targetInLock && (endTarget.contains(target) || endTarget === target)));\n    // handle epsilon around 0 (non standard zoom levels)\n    if (isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n        shouldCancelScroll = true;\n    }\n    else if (!isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n        shouldCancelScroll = true;\n    }\n    return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n    return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n  .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n  .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n    var shouldPreventQueue = React.useRef([]);\n    var touchStartRef = React.useRef([0, 0]);\n    var activeAxis = React.useRef();\n    var id = React.useState(idCounter++)[0];\n    var Style = React.useState(styleSingleton)[0];\n    var lastProps = React.useRef(props);\n    React.useEffect(function () {\n        lastProps.current = props;\n    }, [props]);\n    React.useEffect(function () {\n        if (props.inert) {\n            document.body.classList.add(\"block-interactivity-\".concat(id));\n            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n            allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n            return function () {\n                document.body.classList.remove(\"block-interactivity-\".concat(id));\n                allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n            };\n        }\n        return;\n    }, [props.inert, props.lockRef.current, props.shards]);\n    var shouldCancelEvent = React.useCallback(function (event, parent) {\n        if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n            return !lastProps.current.allowPinchZoom;\n        }\n        var touch = getTouchXY(event);\n        var touchStart = touchStartRef.current;\n        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n        var currentAxis;\n        var target = event.target;\n        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n        // allow horizontal touch move on Range inputs. They will not cause any scroll\n        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n            return false;\n        }\n        // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n        var selection = window.getSelection();\n        var anchorNode = selection && selection.anchorNode;\n        var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n        if (isTouchingSelection) {\n            return false;\n        }\n        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n        if (!canBeScrolledInMainDirection) {\n            return true;\n        }\n        if (canBeScrolledInMainDirection) {\n            currentAxis = moveDirection;\n        }\n        else {\n            currentAxis = moveDirection === 'v' ? 'h' : 'v';\n            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n            // other axis might be not scrollable\n        }\n        if (!canBeScrolledInMainDirection) {\n            return false;\n        }\n        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n            activeAxis.current = currentAxis;\n        }\n        if (!currentAxis) {\n            return true;\n        }\n        var cancelingAxis = activeAxis.current || currentAxis;\n        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n    }, []);\n    var shouldPrevent = React.useCallback(function (_event) {\n        var event = _event;\n        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n            // not the last active\n            return;\n        }\n        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n        // self event, and should be canceled\n        if (sourceEvent && sourceEvent.should) {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            return;\n        }\n        // outside or shard event\n        if (!sourceEvent) {\n            var shardNodes = (lastProps.current.shards || [])\n                .map(extractRef)\n                .filter(Boolean)\n                .filter(function (node) { return node.contains(event.target); });\n            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n            if (shouldStop) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n        }\n    }, []);\n    var shouldCancel = React.useCallback(function (name, delta, target, should) {\n        var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n        shouldPreventQueue.current.push(event);\n        setTimeout(function () {\n            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n        }, 1);\n    }, []);\n    var scrollTouchStart = React.useCallback(function (event) {\n        touchStartRef.current = getTouchXY(event);\n        activeAxis.current = undefined;\n    }, []);\n    var scrollWheel = React.useCallback(function (event) {\n        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    var scrollTouchMove = React.useCallback(function (event) {\n        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    React.useEffect(function () {\n        lockStack.push(Style);\n        props.setCallbacks({\n            onScrollCapture: scrollWheel,\n            onWheelCapture: scrollWheel,\n            onTouchMoveCapture: scrollTouchMove,\n        });\n        document.addEventListener('wheel', shouldPrevent, nonPassive);\n        document.addEventListener('touchmove', shouldPrevent, nonPassive);\n        document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n        return function () {\n            lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n            document.removeEventListener('wheel', shouldPrevent, nonPassive);\n            document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n        };\n    }, []);\n    var removeScrollBar = props.removeScrollBar, inert = props.inert;\n    return (React.createElement(React.Fragment, null,\n        inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n        removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n    var shadowParent = null;\n    while (node !== null) {\n        if (node instanceof ShadowRoot) {\n            shadowParent = node.host;\n            node = node.host;\n        }\n        node = node.parentNode;\n    }\n    return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n    // and script elements, as they have no impact on accessibility.\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n  const {\n    __scopeDialog,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    modal = true\n  } = props;\n  const triggerRef = React.useRef(null);\n  const contentRef = React.useRef(null);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: DIALOG_NAME\n  });\n  return /* @__PURE__ */ jsx(\n    DialogProvider,\n    {\n      scope: __scopeDialog,\n      triggerRef,\n      contentRef,\n      contentId: useId(),\n      titleId: useId(),\n      descriptionId: useId(),\n      open,\n      onOpenChange: setOpen,\n      onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n      modal,\n      children\n    }\n  );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...triggerProps } = props;\n    const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n    const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-haspopup\": \"dialog\",\n        \"aria-expanded\": context.open,\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"data-state\": getState(context.open),\n        ...triggerProps,\n        ref: composedTriggerRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n  }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar DialogPortal = (props) => {\n  const { __scopeDialog, forceMount, children, container } = props;\n  const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n    return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n  }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n    return (\n      // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n      // ie. when `Overlay` and `Content` are siblings\n      /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-state\": getState(context.open),\n          ...overlayProps,\n          ref: forwardedRef,\n          style: { pointerEvents: \"auto\", ...overlayProps.style }\n        }\n      ) })\n    );\n  }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n  }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n    React.useEffect(() => {\n      const content = contentRef.current;\n      if (content) return hideOthers(content);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: composedRefs,\n        trapFocus: context.open,\n        disableOutsidePointerEvents: context.open,\n        onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n          event.preventDefault();\n          context.triggerRef.current?.focus();\n        }),\n        onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n          const originalEvent = event.detail.originalEvent;\n          const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n          const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n          if (isRightClick) event.preventDefault();\n        }),\n        onFocusOutside: composeEventHandlers(\n          props.onFocusOutside,\n          (event) => event.preventDefault()\n        )\n      }\n    );\n  }\n);\nvar DialogContentNonModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const hasInteractedOutsideRef = React.useRef(false);\n    const hasPointerDownOutsideRef = React.useRef(false);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: forwardedRef,\n        trapFocus: false,\n        disableOutsidePointerEvents: false,\n        onCloseAutoFocus: (event) => {\n          props.onCloseAutoFocus?.(event);\n          if (!event.defaultPrevented) {\n            if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n            event.preventDefault();\n          }\n          hasInteractedOutsideRef.current = false;\n          hasPointerDownOutsideRef.current = false;\n        },\n        onInteractOutside: (event) => {\n          props.onInteractOutside?.(event);\n          if (!event.defaultPrevented) {\n            hasInteractedOutsideRef.current = true;\n            if (event.detail.originalEvent.type === \"pointerdown\") {\n              hasPointerDownOutsideRef.current = true;\n            }\n          }\n          const target = event.target;\n          const targetIsTrigger = context.triggerRef.current?.contains(target);\n          if (targetIsTrigger) event.preventDefault();\n          if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n            event.preventDefault();\n          }\n        }\n      }\n    );\n  }\n);\nvar DialogContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, contentRef);\n    useFocusGuards();\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(\n        FocusScope,\n        {\n          asChild: true,\n          loop: true,\n          trapped: trapFocus,\n          onMountAutoFocus: onOpenAutoFocus,\n          onUnmountAutoFocus: onCloseAutoFocus,\n          children: /* @__PURE__ */ jsx(\n            DismissableLayer,\n            {\n              role: \"dialog\",\n              id: context.contentId,\n              \"aria-describedby\": context.descriptionId,\n              \"aria-labelledby\": context.titleId,\n              \"data-state\": getState(context.open),\n              ...contentProps,\n              ref: composedRefs,\n              onDismiss: () => context.onOpenChange(false)\n            }\n          )\n        }\n      ),\n      /* @__PURE__ */ jsxs(Fragment, { children: [\n        /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n        /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n      ] })\n    ] });\n  }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...titleProps } = props;\n    const context = useDialogContext(TITLE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n  }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...descriptionProps } = props;\n    const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n  }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...closeProps } = props;\n    const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n      }\n    );\n  }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n  contentName: CONTENT_NAME,\n  titleName: TITLE_NAME,\n  docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n  const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n  const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n  React.useEffect(() => {\n    if (titleId) {\n      const hasTitle = document.getElementById(titleId);\n      if (!hasTitle) console.error(MESSAGE);\n    }\n  }, [MESSAGE, titleId]);\n  return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n  const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n  const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n  React.useEffect(() => {\n    const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n    if (descriptionId && describedById) {\n      const hasDescription = document.getElementById(descriptionId);\n      if (!hasDescription) console.warn(MESSAGE);\n    }\n  }, [MESSAGE, contentRef, descriptionId]);\n  return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n  Close,\n  Content,\n  Description,\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n  Overlay,\n  Portal,\n  Root,\n  Title,\n  Trigger,\n  WarningProvider,\n  createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\n\nimport { cn } from '../../lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & {\n    position?: 'fixed' | 'absolute';\n  }\n>(({ className, position = 'fixed', ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      'inset-0 z-50 bg-black/30 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n      position === 'absolute' ? 'absolute' : 'fixed',\n      className\n    )}\n    {...props}\n  />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { container?: HTMLElement }\n>(({ className, children, container, ...props }, ref) => {\n  return (\n    <DialogPortal container={container}>\n      <DialogOverlay position={container ? 'absolute' : 'fixed'} />\n      <DialogPrimitive.Content\n        style={{ padding: 0 }}\n        ref={ref}\n        className={cn(\n          'left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg',\n          container ? 'absolute' : 'fixed',\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </DialogPrimitive.Content>\n    </DialogPortal>\n  );\n});\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n    {...props}\n  />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n    {...props}\n  />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn('text-sm text-muted-foreground', className)}\n    {...props}\n  />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n  Dialog,\n  DialogPortal,\n  DialogOverlay,\n  DialogTrigger,\n  DialogClose,\n  DialogContent,\n  DialogHeader,\n  DialogFooter,\n  DialogTitle,\n  DialogDescription,\n};\n","'use client';\nfunction __insertCSS(code) {\n  if (!code || typeof document == 'undefined') return\n  let head = document.head || document.getElementsByTagName('head')[0]\n  let style = document.createElement('style')\n  style.type = 'text/css'\n  head.appendChild(style)\n  ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\nimport React__default, { useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst DrawerContext = React__default.createContext({\n    drawerRef: {\n        current: null\n    },\n    overlayRef: {\n        current: null\n    },\n    onPress: ()=>{},\n    onRelease: ()=>{},\n    onDrag: ()=>{},\n    onNestedDrag: ()=>{},\n    onNestedOpenChange: ()=>{},\n    onNestedRelease: ()=>{},\n    openProp: undefined,\n    dismissible: false,\n    isOpen: false,\n    isDragging: false,\n    keyboardIsOpen: {\n        current: false\n    },\n    snapPointsOffset: null,\n    snapPoints: null,\n    handleOnly: false,\n    modal: false,\n    shouldFade: false,\n    activeSnapPoint: null,\n    onOpenChange: ()=>{},\n    setActiveSnapPoint: ()=>{},\n    closeDrawer: ()=>{},\n    direction: 'bottom',\n    shouldAnimate: {\n        current: true\n    },\n    shouldScaleBackground: false,\n    setBackgroundColorOnScale: true,\n    noBodyStyles: false,\n    container: null,\n    autoFocus: false\n});\nconst useDrawerContext = ()=>{\n    const context = React__default.useContext(DrawerContext);\n    if (!context) {\n        throw new Error('useDrawerContext must be used within a Drawer.Root');\n    }\n    return context;\n};\n\n__insertCSS(\"[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\\n[data-state=closed]\\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}\");\n\nfunction isMobileFirefox() {\n    const userAgent = navigator.userAgent;\n    return typeof window !== 'undefined' && (/Firefox/.test(userAgent) && /Mobile/.test(userAgent) || // Android Firefox\n    /FxiOS/.test(userAgent) // iOS Firefox\n    );\n}\nfunction isMac() {\n    return testPlatform(/^Mac/);\n}\nfunction isIPhone() {\n    return testPlatform(/^iPhone/);\n}\nfunction isSafari() {\n    return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\nfunction isIPad() {\n    return testPlatform(/^iPad/) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n    isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n    return isIPhone() || isIPad();\n}\nfunction testPlatform(re) {\n    return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator.platform) : undefined;\n}\n\n// This code comes from https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/usePreventScroll.ts\nconst KEYBOARD_BUFFER = 24;\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction chain$1(...callbacks) {\n    return (...args)=>{\n        for (let callback of callbacks){\n            if (typeof callback === 'function') {\n                callback(...args);\n            }\n        }\n    };\n}\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction isScrollable(node) {\n    let style = window.getComputedStyle(node);\n    return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n}\nfunction getScrollParent(node) {\n    if (isScrollable(node)) {\n        node = node.parentElement;\n    }\n    while(node && !isScrollable(node)){\n        node = node.parentElement;\n    }\n    return node || document.scrollingElement || document.documentElement;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */ function usePreventScroll(options = {}) {\n    let { isDisabled } = options;\n    useIsomorphicLayoutEffect(()=>{\n        if (isDisabled) {\n            return;\n        }\n        preventScrollCount++;\n        if (preventScrollCount === 1) {\n            if (isIOS()) {\n                restore = preventScrollMobileSafari();\n            }\n        }\n        return ()=>{\n            preventScrollCount--;\n            if (preventScrollCount === 0) {\n                restore == null ? void 0 : restore();\n            }\n        };\n    }, [\n        isDisabled\n    ]);\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n//    it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n//    This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n//    scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n//    on the window.\n// 2. Prevent default on `touchmove` events inside a scrollable element when the scroll position is at the\n//    top or bottom. This avoids the whole page scrolling instead, but does prevent overscrolling.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n//    of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n//    into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n//    same visually, but makes the actual scroll position always zero. This is required to make all of the\n//    above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n//    to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n    let scrollable;\n    let lastY = 0;\n    let onTouchStart = (e)=>{\n        // Store the nearest scrollable parent element from the element that the user touched.\n        scrollable = getScrollParent(e.target);\n        if (scrollable === document.documentElement && scrollable === document.body) {\n            return;\n        }\n        lastY = e.changedTouches[0].pageY;\n    };\n    let onTouchMove = (e)=>{\n        // Prevent scrolling the window.\n        if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n            e.preventDefault();\n            return;\n        }\n        // Prevent scrolling up when at the top and scrolling down when at the bottom\n        // of a nested scrollable area, otherwise mobile Safari will start scrolling\n        // the window instead. Unfortunately, this disables bounce scrolling when at\n        // the top but it's the best we can do.\n        let y = e.changedTouches[0].pageY;\n        let scrollTop = scrollable.scrollTop;\n        let bottom = scrollable.scrollHeight - scrollable.clientHeight;\n        if (bottom === 0) {\n            return;\n        }\n        if (scrollTop <= 0 && y > lastY || scrollTop >= bottom && y < lastY) {\n            e.preventDefault();\n        }\n        lastY = y;\n    };\n    let onTouchEnd = (e)=>{\n        let target = e.target;\n        // Apply this change if we're not already focused on the target element\n        if (isInput(target) && target !== document.activeElement) {\n            e.preventDefault();\n            // Apply a transform to trick Safari into thinking the input is at the top of the page\n            // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n            // be done before the \"focus\" event, so we have to focus the element ourselves.\n            target.style.transform = 'translateY(-2000px)';\n            target.focus();\n            requestAnimationFrame(()=>{\n                target.style.transform = '';\n            });\n        }\n    };\n    let onFocus = (e)=>{\n        let target = e.target;\n        if (isInput(target)) {\n            // Transform also needs to be applied in the focus event in cases where focus moves\n            // other than tapping on an input directly, e.g. the next/previous buttons in the\n            // software keyboard. In these cases, it seems applying the transform in the focus event\n            // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷‍♂️\n            target.style.transform = 'translateY(-2000px)';\n            requestAnimationFrame(()=>{\n                target.style.transform = '';\n                // This will have prevented the browser from scrolling the focused element into view,\n                // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n                if (visualViewport) {\n                    if (visualViewport.height < window.innerHeight) {\n                        // If the keyboard is already visible, do this after one additional frame\n                        // to wait for the transform to be removed.\n                        requestAnimationFrame(()=>{\n                            scrollIntoView(target);\n                        });\n                    } else {\n                        // Otherwise, wait for the visual viewport to resize before scrolling so we can\n                        // measure the correct position to scroll to.\n                        visualViewport.addEventListener('resize', ()=>scrollIntoView(target), {\n                            once: true\n                        });\n                    }\n                }\n            });\n        }\n    };\n    let onWindowScroll = ()=>{\n        // Last resort. If the window scrolled, scroll it back to the top.\n        // It should always be at the top because the body will have a negative margin (see below).\n        window.scrollTo(0, 0);\n    };\n    // Record the original scroll position so we can restore it.\n    // Then apply a negative margin to the body to offset it by the scroll position. This will\n    // enable us to scroll the window to the top, which is required for the rest of this to work.\n    let scrollX = window.pageXOffset;\n    let scrollY = window.pageYOffset;\n    let restoreStyles = chain$1(setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`));\n    // Scroll to the top. The negative margin on the body will make this appear the same.\n    window.scrollTo(0, 0);\n    let removeEvents = chain$1(addEvent(document, 'touchstart', onTouchStart, {\n        passive: false,\n        capture: true\n    }), addEvent(document, 'touchmove', onTouchMove, {\n        passive: false,\n        capture: true\n    }), addEvent(document, 'touchend', onTouchEnd, {\n        passive: false,\n        capture: true\n    }), addEvent(document, 'focus', onFocus, true), addEvent(window, 'scroll', onWindowScroll));\n    return ()=>{\n        // Restore styles and scroll the page back to where it was.\n        restoreStyles();\n        removeEvents();\n        window.scrollTo(scrollX, scrollY);\n    };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element, style, value) {\n    // https://github.com/microsoft/TypeScript/issues/17827#issuecomment-391663310\n    // @ts-ignore\n    let cur = element.style[style];\n    // @ts-ignore\n    element.style[style] = value;\n    return ()=>{\n        // @ts-ignore\n        element.style[style] = cur;\n    };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent(target, event, handler, options) {\n    // @ts-ignore\n    target.addEventListener(event, handler, options);\n    return ()=>{\n        // @ts-ignore\n        target.removeEventListener(event, handler, options);\n    };\n}\nfunction scrollIntoView(target) {\n    let root = document.scrollingElement || document.documentElement;\n    while(target && target !== root){\n        // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n        let scrollable = getScrollParent(target);\n        if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n            let scrollableTop = scrollable.getBoundingClientRect().top;\n            let targetTop = target.getBoundingClientRect().top;\n            let targetBottom = target.getBoundingClientRect().bottom;\n            // Buffer is needed for some edge cases\n            const keyboardHeight = scrollable.getBoundingClientRect().bottom + KEYBOARD_BUFFER;\n            if (targetBottom > keyboardHeight) {\n                scrollable.scrollTop += targetTop - scrollableTop;\n            }\n        }\n        // @ts-ignore\n        target = scrollable.parentElement;\n    }\n}\nfunction isInput(target) {\n    return target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n// This code comes from https://github.com/radix-ui/primitives/tree/main/packages/react/compose-refs\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function setRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    } else if (ref !== null && ref !== undefined) {\n        ref.current = value;\n    }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function composeRefs(...refs) {\n    return (node)=>refs.forEach((ref)=>setRef(ref, node));\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function useComposedRefs(...refs) {\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    return React.useCallback(composeRefs(...refs), refs);\n}\n\nconst cache = new WeakMap();\nfunction set(el, styles, ignoreCache = false) {\n    if (!el || !(el instanceof HTMLElement)) return;\n    let originalStyles = {};\n    Object.entries(styles).forEach(([key, value])=>{\n        if (key.startsWith('--')) {\n            el.style.setProperty(key, value);\n            return;\n        }\n        originalStyles[key] = el.style[key];\n        el.style[key] = value;\n    });\n    if (ignoreCache) return;\n    cache.set(el, originalStyles);\n}\nfunction reset(el, prop) {\n    if (!el || !(el instanceof HTMLElement)) return;\n    let originalStyles = cache.get(el);\n    if (!originalStyles) {\n        return;\n    }\n    {\n        el.style[prop] = originalStyles[prop];\n    }\n}\nconst isVertical = (direction)=>{\n    switch(direction){\n        case 'top':\n        case 'bottom':\n            return true;\n        case 'left':\n        case 'right':\n            return false;\n        default:\n            return direction;\n    }\n};\nfunction getTranslate(element, direction) {\n    if (!element) {\n        return null;\n    }\n    const style = window.getComputedStyle(element);\n    const transform = // @ts-ignore\n    style.transform || style.webkitTransform || style.mozTransform;\n    let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n    if (mat) {\n        // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d\n        return parseFloat(mat[1].split(', ')[isVertical(direction) ? 13 : 12]);\n    }\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n    mat = transform.match(/^matrix\\((.+)\\)$/);\n    return mat ? parseFloat(mat[1].split(', ')[isVertical(direction) ? 5 : 4]) : null;\n}\nfunction dampenValue(v) {\n    return 8 * (Math.log(v + 1) - 2);\n}\nfunction assignStyle(element, style) {\n    if (!element) return ()=>{};\n    const prevStyle = element.style.cssText;\n    Object.assign(element.style, style);\n    return ()=>{\n        element.style.cssText = prevStyle;\n    };\n}\n/**\n * Receives functions as arguments and returns a new function that calls all.\n */ function chain(...fns) {\n    return (...args)=>{\n        for (const fn of fns){\n            if (typeof fn === 'function') {\n                // @ts-ignore\n                fn(...args);\n            }\n        }\n    };\n}\n\nconst TRANSITIONS = {\n    DURATION: 0.5,\n    EASE: [\n        0.32,\n        0.72,\n        0,\n        1\n    ]\n};\nconst VELOCITY_THRESHOLD = 0.4;\nconst CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst BORDER_RADIUS = 8;\nconst NESTED_DISPLACEMENT = 16;\nconst WINDOW_TOP_OFFSET = 26;\nconst DRAG_CLASS = 'vaul-dragging';\n\n// This code comes from https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\nfunction useCallbackRef(callback) {\n    const callbackRef = React__default.useRef(callback);\n    React__default.useEffect(()=>{\n        callbackRef.current = callback;\n    });\n    // https://github.com/facebook/react/issues/19240\n    return React__default.useMemo(()=>(...args)=>callbackRef.current == null ? void 0 : callbackRef.current.call(callbackRef, ...args), []);\n}\nfunction useUncontrolledState({ defaultProp, onChange }) {\n    const uncontrolledState = React__default.useState(defaultProp);\n    const [value] = uncontrolledState;\n    const prevValueRef = React__default.useRef(value);\n    const handleChange = useCallbackRef(onChange);\n    React__default.useEffect(()=>{\n        if (prevValueRef.current !== value) {\n            handleChange(value);\n            prevValueRef.current = value;\n        }\n    }, [\n        value,\n        prevValueRef,\n        handleChange\n    ]);\n    return uncontrolledState;\n}\nfunction useControllableState({ prop, defaultProp, onChange = ()=>{} }) {\n    const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n        defaultProp,\n        onChange\n    });\n    const isControlled = prop !== undefined;\n    const value = isControlled ? prop : uncontrolledProp;\n    const handleChange = useCallbackRef(onChange);\n    const setValue = React__default.useCallback((nextValue)=>{\n        if (isControlled) {\n            const setter = nextValue;\n            const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n            if (value !== prop) handleChange(value);\n        } else {\n            setUncontrolledProp(nextValue);\n        }\n    }, [\n        isControlled,\n        prop,\n        setUncontrolledProp,\n        handleChange\n    ]);\n    return [\n        value,\n        setValue\n    ];\n}\n\nfunction useSnapPoints({ activeSnapPointProp, setActiveSnapPointProp, snapPoints, drawerRef, overlayRef, fadeFromIndex, onSnapPointChange, direction = 'bottom', container, snapToSequentialPoint }) {\n    const [activeSnapPoint, setActiveSnapPoint] = useControllableState({\n        prop: activeSnapPointProp,\n        defaultProp: snapPoints == null ? void 0 : snapPoints[0],\n        onChange: setActiveSnapPointProp\n    });\n    const [windowDimensions, setWindowDimensions] = React__default.useState(typeof window !== 'undefined' ? {\n        innerWidth: window.innerWidth,\n        innerHeight: window.innerHeight\n    } : undefined);\n    React__default.useEffect(()=>{\n        function onResize() {\n            setWindowDimensions({\n                innerWidth: window.innerWidth,\n                innerHeight: window.innerHeight\n            });\n        }\n        window.addEventListener('resize', onResize);\n        return ()=>window.removeEventListener('resize', onResize);\n    }, []);\n    const isLastSnapPoint = React__default.useMemo(()=>activeSnapPoint === (snapPoints == null ? void 0 : snapPoints[snapPoints.length - 1]) || null, [\n        snapPoints,\n        activeSnapPoint\n    ]);\n    const activeSnapPointIndex = React__default.useMemo(()=>{\n        var _snapPoints_findIndex;\n        return (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : null;\n    }, [\n        snapPoints,\n        activeSnapPoint\n    ]);\n    const shouldFade = snapPoints && snapPoints.length > 0 && (fadeFromIndex || fadeFromIndex === 0) && !Number.isNaN(fadeFromIndex) && snapPoints[fadeFromIndex] === activeSnapPoint || !snapPoints;\n    const snapPointsOffset = React__default.useMemo(()=>{\n        const containerSize = container ? {\n            width: container.getBoundingClientRect().width,\n            height: container.getBoundingClientRect().height\n        } : typeof window !== 'undefined' ? {\n            width: window.innerWidth,\n            height: window.innerHeight\n        } : {\n            width: 0,\n            height: 0\n        };\n        var _snapPoints_map;\n        return (_snapPoints_map = snapPoints == null ? void 0 : snapPoints.map((snapPoint)=>{\n            const isPx = typeof snapPoint === 'string';\n            let snapPointAsNumber = 0;\n            if (isPx) {\n                snapPointAsNumber = parseInt(snapPoint, 10);\n            }\n            if (isVertical(direction)) {\n                const height = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.height : 0;\n                if (windowDimensions) {\n                    return direction === 'bottom' ? containerSize.height - height : -containerSize.height + height;\n                }\n                return height;\n            }\n            const width = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.width : 0;\n            if (windowDimensions) {\n                return direction === 'right' ? containerSize.width - width : -containerSize.width + width;\n            }\n            return width;\n        })) != null ? _snapPoints_map : [];\n    }, [\n        snapPoints,\n        windowDimensions,\n        container\n    ]);\n    const activeSnapPointOffset = React__default.useMemo(()=>activeSnapPointIndex !== null ? snapPointsOffset == null ? void 0 : snapPointsOffset[activeSnapPointIndex] : null, [\n        snapPointsOffset,\n        activeSnapPointIndex\n    ]);\n    const snapToPoint = React__default.useCallback((dimension)=>{\n        var _snapPointsOffset_findIndex;\n        const newSnapPointIndex = (_snapPointsOffset_findIndex = snapPointsOffset == null ? void 0 : snapPointsOffset.findIndex((snapPointDim)=>snapPointDim === dimension)) != null ? _snapPointsOffset_findIndex : null;\n        onSnapPointChange(newSnapPointIndex);\n        set(drawerRef.current, {\n            transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n            transform: isVertical(direction) ? `translate3d(0, ${dimension}px, 0)` : `translate3d(${dimension}px, 0, 0)`\n        });\n        if (snapPointsOffset && newSnapPointIndex !== snapPointsOffset.length - 1 && fadeFromIndex !== undefined && newSnapPointIndex !== fadeFromIndex && newSnapPointIndex < fadeFromIndex) {\n            set(overlayRef.current, {\n                transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n                opacity: '0'\n            });\n        } else {\n            set(overlayRef.current, {\n                transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n                opacity: '1'\n            });\n        }\n        setActiveSnapPoint(snapPoints == null ? void 0 : snapPoints[Math.max(newSnapPointIndex, 0)]);\n    }, [\n        drawerRef.current,\n        snapPoints,\n        snapPointsOffset,\n        fadeFromIndex,\n        overlayRef,\n        setActiveSnapPoint\n    ]);\n    React__default.useEffect(()=>{\n        if (activeSnapPoint || activeSnapPointProp) {\n            var _snapPoints_findIndex;\n            const newIndex = (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPointProp || snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : -1;\n            if (snapPointsOffset && newIndex !== -1 && typeof snapPointsOffset[newIndex] === 'number') {\n                snapToPoint(snapPointsOffset[newIndex]);\n            }\n        }\n    }, [\n        activeSnapPoint,\n        activeSnapPointProp,\n        snapPoints,\n        snapPointsOffset,\n        snapToPoint\n    ]);\n    function onRelease({ draggedDistance, closeDrawer, velocity, dismissible }) {\n        if (fadeFromIndex === undefined) return;\n        const currentPosition = direction === 'bottom' || direction === 'right' ? (activeSnapPointOffset != null ? activeSnapPointOffset : 0) - draggedDistance : (activeSnapPointOffset != null ? activeSnapPointOffset : 0) + draggedDistance;\n        const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n        const isFirst = activeSnapPointIndex === 0;\n        const hasDraggedUp = draggedDistance > 0;\n        if (isOverlaySnapPoint) {\n            set(overlayRef.current, {\n                transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n            });\n        }\n        if (!snapToSequentialPoint && velocity > 2 && !hasDraggedUp) {\n            if (dismissible) closeDrawer();\n            else snapToPoint(snapPointsOffset[0]); // snap to initial point\n            return;\n        }\n        if (!snapToSequentialPoint && velocity > 2 && hasDraggedUp && snapPointsOffset && snapPoints) {\n            snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n            return;\n        }\n        // Find the closest snap point to the current position\n        const closestSnapPoint = snapPointsOffset == null ? void 0 : snapPointsOffset.reduce((prev, curr)=>{\n            if (typeof prev !== 'number' || typeof curr !== 'number') return prev;\n            return Math.abs(curr - currentPosition) < Math.abs(prev - currentPosition) ? curr : prev;\n        });\n        const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n        if (velocity > VELOCITY_THRESHOLD && Math.abs(draggedDistance) < dim * 0.4) {\n            const dragDirection = hasDraggedUp ? 1 : -1; // 1 = up, -1 = down\n            // Don't do anything if we swipe upwards while being on the last snap point\n            if (dragDirection > 0 && isLastSnapPoint && snapPoints) {\n                snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n                return;\n            }\n            if (isFirst && dragDirection < 0 && dismissible) {\n                closeDrawer();\n            }\n            if (activeSnapPointIndex === null) return;\n            snapToPoint(snapPointsOffset[activeSnapPointIndex + dragDirection]);\n            return;\n        }\n        snapToPoint(closestSnapPoint);\n    }\n    function onDrag({ draggedDistance }) {\n        if (activeSnapPointOffset === null) return;\n        const newValue = direction === 'bottom' || direction === 'right' ? activeSnapPointOffset - draggedDistance : activeSnapPointOffset + draggedDistance;\n        // Don't do anything if we exceed the last(biggest) snap point\n        if ((direction === 'bottom' || direction === 'right') && newValue < snapPointsOffset[snapPointsOffset.length - 1]) {\n            return;\n        }\n        if ((direction === 'top' || direction === 'left') && newValue > snapPointsOffset[snapPointsOffset.length - 1]) {\n            return;\n        }\n        set(drawerRef.current, {\n            transform: isVertical(direction) ? `translate3d(0, ${newValue}px, 0)` : `translate3d(${newValue}px, 0, 0)`\n        });\n    }\n    function getPercentageDragged(absDraggedDistance, isDraggingDown) {\n        if (!snapPoints || typeof activeSnapPointIndex !== 'number' || !snapPointsOffset || fadeFromIndex === undefined) return null;\n        // If this is true we are dragging to a snap point that is supposed to have an overlay\n        const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n        const isOverlaySnapPointOrHigher = activeSnapPointIndex >= fadeFromIndex;\n        if (isOverlaySnapPointOrHigher && isDraggingDown) {\n            return 0;\n        }\n        // Don't animate, but still use this one if we are dragging away from the overlaySnapPoint\n        if (isOverlaySnapPoint && !isDraggingDown) return 1;\n        if (!shouldFade && !isOverlaySnapPoint) return null;\n        // Either fadeFrom index or the one before\n        const targetSnapPointIndex = isOverlaySnapPoint ? activeSnapPointIndex + 1 : activeSnapPointIndex - 1;\n        // Get the distance from overlaySnapPoint to the one before or vice-versa to calculate the opacity percentage accordingly\n        const snapPointDistance = isOverlaySnapPoint ? snapPointsOffset[targetSnapPointIndex] - snapPointsOffset[targetSnapPointIndex - 1] : snapPointsOffset[targetSnapPointIndex + 1] - snapPointsOffset[targetSnapPointIndex];\n        const percentageDragged = absDraggedDistance / Math.abs(snapPointDistance);\n        if (isOverlaySnapPoint) {\n            return 1 - percentageDragged;\n        } else {\n            return percentageDragged;\n        }\n    }\n    return {\n        isLastSnapPoint,\n        activeSnapPoint,\n        shouldFade,\n        getPercentageDragged,\n        setActiveSnapPoint,\n        activeSnapPointIndex,\n        onRelease,\n        onDrag,\n        snapPointsOffset\n    };\n}\n\nconst noop = ()=>()=>{};\nfunction useScaleBackground() {\n    const { direction, isOpen, shouldScaleBackground, setBackgroundColorOnScale, noBodyStyles } = useDrawerContext();\n    const timeoutIdRef = React__default.useRef(null);\n    const initialBackgroundColor = useMemo(()=>document.body.style.backgroundColor, []);\n    function getScale() {\n        return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n    }\n    React__default.useEffect(()=>{\n        if (isOpen && shouldScaleBackground) {\n            if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n            const wrapper = document.querySelector('[data-vaul-drawer-wrapper]') || document.querySelector('[vaul-drawer-wrapper]');\n            if (!wrapper) return;\n            chain(setBackgroundColorOnScale && !noBodyStyles ? assignStyle(document.body, {\n                background: 'black'\n            }) : noop, assignStyle(wrapper, {\n                transformOrigin: isVertical(direction) ? 'top' : 'left',\n                transitionProperty: 'transform, border-radius',\n                transitionDuration: `${TRANSITIONS.DURATION}s`,\n                transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n            }));\n            const wrapperStylesCleanup = assignStyle(wrapper, {\n                borderRadius: `${BORDER_RADIUS}px`,\n                overflow: 'hidden',\n                ...isVertical(direction) ? {\n                    transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`\n                } : {\n                    transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`\n                }\n            });\n            return ()=>{\n                wrapperStylesCleanup();\n                timeoutIdRef.current = window.setTimeout(()=>{\n                    if (initialBackgroundColor) {\n                        document.body.style.background = initialBackgroundColor;\n                    } else {\n                        document.body.style.removeProperty('background');\n                    }\n                }, TRANSITIONS.DURATION * 1000);\n            };\n        }\n    }, [\n        isOpen,\n        shouldScaleBackground,\n        initialBackgroundColor\n    ]);\n}\n\nlet previousBodyPosition = null;\n/**\n * This hook is necessary to prevent buggy behavior on iOS devices (need to test on Android).\n * I won't get into too much detail about what bugs it solves, but so far I've found that setting the body to `position: fixed` is the most reliable way to prevent those bugs.\n * Issues that this hook solves:\n * https://github.com/emilkowalski/vaul/issues/435\n * https://github.com/emilkowalski/vaul/issues/433\n * And more that I discovered, but were just not reported.\n */ function usePositionFixed({ isOpen, modal, nested, hasBeenOpened, preventScrollRestoration, noBodyStyles }) {\n    const [activeUrl, setActiveUrl] = React__default.useState(()=>typeof window !== 'undefined' ? window.location.href : '');\n    const scrollPos = React__default.useRef(0);\n    const setPositionFixed = React__default.useCallback(()=>{\n        // All browsers on iOS will return true here.\n        if (!isSafari()) return;\n        // If previousBodyPosition is already set, don't set it again.\n        if (previousBodyPosition === null && isOpen && !noBodyStyles) {\n            previousBodyPosition = {\n                position: document.body.style.position,\n                top: document.body.style.top,\n                left: document.body.style.left,\n                height: document.body.style.height,\n                right: 'unset'\n            };\n            // Update the dom inside an animation frame\n            const { scrollX, innerHeight } = window;\n            document.body.style.setProperty('position', 'fixed', 'important');\n            Object.assign(document.body.style, {\n                top: `${-scrollPos.current}px`,\n                left: `${-scrollX}px`,\n                right: '0px',\n                height: 'auto'\n            });\n            window.setTimeout(()=>window.requestAnimationFrame(()=>{\n                    // Attempt to check if the bottom bar appeared due to the position change\n                    const bottomBarHeight = innerHeight - window.innerHeight;\n                    if (bottomBarHeight && scrollPos.current >= innerHeight) {\n                        // Move the content further up so that the bottom bar doesn't hide it\n                        document.body.style.top = `${-(scrollPos.current + bottomBarHeight)}px`;\n                    }\n                }), 300);\n        }\n    }, [\n        isOpen\n    ]);\n    const restorePositionSetting = React__default.useCallback(()=>{\n        // All browsers on iOS will return true here.\n        if (!isSafari()) return;\n        if (previousBodyPosition !== null && !noBodyStyles) {\n            // Convert the position from \"px\" to Int\n            const y = -parseInt(document.body.style.top, 10);\n            const x = -parseInt(document.body.style.left, 10);\n            // Restore styles\n            Object.assign(document.body.style, previousBodyPosition);\n            window.requestAnimationFrame(()=>{\n                if (preventScrollRestoration && activeUrl !== window.location.href) {\n                    setActiveUrl(window.location.href);\n                    return;\n                }\n                window.scrollTo(x, y);\n            });\n            previousBodyPosition = null;\n        }\n    }, [\n        activeUrl\n    ]);\n    React__default.useEffect(()=>{\n        function onScroll() {\n            scrollPos.current = window.scrollY;\n        }\n        onScroll();\n        window.addEventListener('scroll', onScroll);\n        return ()=>{\n            window.removeEventListener('scroll', onScroll);\n        };\n    }, []);\n    React__default.useEffect(()=>{\n        if (!modal) return;\n        return ()=>{\n            if (typeof document === 'undefined') return;\n            // Another drawer is opened, safe to ignore the execution\n            const hasDrawerOpened = !!document.querySelector('[data-vaul-drawer]');\n            if (hasDrawerOpened) return;\n            restorePositionSetting();\n        };\n    }, [\n        modal,\n        restorePositionSetting\n    ]);\n    React__default.useEffect(()=>{\n        if (nested || !hasBeenOpened) return;\n        // This is needed to force Safari toolbar to show **before** the drawer starts animating to prevent a gnarly shift from happening\n        if (isOpen) {\n            // avoid for standalone mode (PWA)\n            const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n            !isStandalone && setPositionFixed();\n            if (!modal) {\n                window.setTimeout(()=>{\n                    restorePositionSetting();\n                }, 500);\n            }\n        } else {\n            restorePositionSetting();\n        }\n    }, [\n        isOpen,\n        hasBeenOpened,\n        activeUrl,\n        modal,\n        nested,\n        setPositionFixed,\n        restorePositionSetting\n    ]);\n    return {\n        restorePositionSetting\n    };\n}\n\nfunction Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground = false, setBackgroundColorOnScale = true, closeThreshold = CLOSE_THRESHOLD, scrollLockTimeout = SCROLL_LOCK_TIMEOUT, dismissible = true, handleOnly = false, fadeFromIndex = snapPoints && snapPoints.length - 1, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal = true, onClose, nested, noBodyStyles = false, direction = 'bottom', defaultOpen = false, disablePreventScroll = true, snapToSequentialPoint = false, preventScrollRestoration = false, repositionInputs = true, onAnimationEnd, container, autoFocus = false }) {\n    var _drawerRef_current, _drawerRef_current1;\n    const [isOpen = false, setIsOpen] = useControllableState({\n        defaultProp: defaultOpen,\n        prop: openProp,\n        onChange: (o)=>{\n            onOpenChange == null ? void 0 : onOpenChange(o);\n            if (!o && !nested) {\n                restorePositionSetting();\n            }\n            setTimeout(()=>{\n                onAnimationEnd == null ? void 0 : onAnimationEnd(o);\n            }, TRANSITIONS.DURATION * 1000);\n            if (o && !modal) {\n                if (typeof window !== 'undefined') {\n                    window.requestAnimationFrame(()=>{\n                        document.body.style.pointerEvents = 'auto';\n                    });\n                }\n            }\n            if (!o) {\n                // This will be removed when the exit animation ends (`500ms`)\n                document.body.style.pointerEvents = 'auto';\n            }\n        }\n    });\n    const [hasBeenOpened, setHasBeenOpened] = React__default.useState(false);\n    const [isDragging, setIsDragging] = React__default.useState(false);\n    const [justReleased, setJustReleased] = React__default.useState(false);\n    const overlayRef = React__default.useRef(null);\n    const openTime = React__default.useRef(null);\n    const dragStartTime = React__default.useRef(null);\n    const dragEndTime = React__default.useRef(null);\n    const lastTimeDragPrevented = React__default.useRef(null);\n    const isAllowedToDrag = React__default.useRef(false);\n    const nestedOpenChangeTimer = React__default.useRef(null);\n    const pointerStart = React__default.useRef(0);\n    const keyboardIsOpen = React__default.useRef(false);\n    const shouldAnimate = React__default.useRef(!defaultOpen);\n    const previousDiffFromInitial = React__default.useRef(0);\n    const drawerRef = React__default.useRef(null);\n    const drawerHeightRef = React__default.useRef(((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0);\n    const drawerWidthRef = React__default.useRef(((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0);\n    const initialDrawerHeight = React__default.useRef(0);\n    const onSnapPointChange = React__default.useCallback((activeSnapPointIndex)=>{\n        // Change openTime ref when we reach the last snap point to prevent dragging for 500ms incase it's scrollable.\n        if (snapPoints && activeSnapPointIndex === snapPointsOffset.length - 1) openTime.current = new Date();\n    }, []);\n    const { activeSnapPoint, activeSnapPointIndex, setActiveSnapPoint, onRelease: onReleaseSnapPoints, snapPointsOffset, onDrag: onDragSnapPoints, shouldFade, getPercentageDragged: getSnapPointsPercentageDragged } = useSnapPoints({\n        snapPoints,\n        activeSnapPointProp,\n        setActiveSnapPointProp,\n        drawerRef,\n        fadeFromIndex,\n        overlayRef,\n        onSnapPointChange,\n        direction,\n        container,\n        snapToSequentialPoint\n    });\n    usePreventScroll({\n        isDisabled: !isOpen || isDragging || !modal || justReleased || !hasBeenOpened || !repositionInputs || !disablePreventScroll\n    });\n    const { restorePositionSetting } = usePositionFixed({\n        isOpen,\n        modal,\n        nested: nested != null ? nested : false,\n        hasBeenOpened,\n        preventScrollRestoration,\n        noBodyStyles\n    });\n    function getScale() {\n        return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n    }\n    function onPress(event) {\n        var _drawerRef_current, _drawerRef_current1;\n        if (!dismissible && !snapPoints) return;\n        if (drawerRef.current && !drawerRef.current.contains(event.target)) return;\n        drawerHeightRef.current = ((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0;\n        drawerWidthRef.current = ((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0;\n        setIsDragging(true);\n        dragStartTime.current = new Date();\n        // iOS doesn't trigger mouseUp after scrolling so we need to listen to touched in order to disallow dragging\n        if (isIOS()) {\n            window.addEventListener('touchend', ()=>isAllowedToDrag.current = false, {\n                once: true\n            });\n        }\n        // Ensure we maintain correct pointer capture even when going outside of the drawer\n        event.target.setPointerCapture(event.pointerId);\n        pointerStart.current = isVertical(direction) ? event.pageY : event.pageX;\n    }\n    function shouldDrag(el, isDraggingInDirection) {\n        var _window_getSelection;\n        let element = el;\n        const highlightedText = (_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString();\n        const swipeAmount = drawerRef.current ? getTranslate(drawerRef.current, direction) : null;\n        const date = new Date();\n        // Fixes https://github.com/emilkowalski/vaul/issues/483\n        if (element.tagName === 'SELECT') {\n            return false;\n        }\n        if (element.hasAttribute('data-vaul-no-drag') || element.closest('[data-vaul-no-drag]')) {\n            return false;\n        }\n        if (direction === 'right' || direction === 'left') {\n            return true;\n        }\n        // Allow scrolling when animating\n        if (openTime.current && date.getTime() - openTime.current.getTime() < 500) {\n            return false;\n        }\n        if (swipeAmount !== null) {\n            if (direction === 'bottom' ? swipeAmount > 0 : swipeAmount < 0) {\n                return true;\n            }\n        }\n        // Don't drag if there's highlighted text\n        if (highlightedText && highlightedText.length > 0) {\n            return false;\n        }\n        // Disallow dragging if drawer was scrolled within `scrollLockTimeout`\n        if (lastTimeDragPrevented.current && date.getTime() - lastTimeDragPrevented.current.getTime() < scrollLockTimeout && swipeAmount === 0) {\n            lastTimeDragPrevented.current = date;\n            return false;\n        }\n        if (isDraggingInDirection) {\n            lastTimeDragPrevented.current = date;\n            // We are dragging down so we should allow scrolling\n            return false;\n        }\n        // Keep climbing up the DOM tree as long as there's a parent\n        while(element){\n            // Check if the element is scrollable\n            if (element.scrollHeight > element.clientHeight) {\n                if (element.scrollTop !== 0) {\n                    lastTimeDragPrevented.current = new Date();\n                    // The element is scrollable and not scrolled to the top, so don't drag\n                    return false;\n                }\n                if (element.getAttribute('role') === 'dialog') {\n                    return true;\n                }\n            }\n            // Move up to the parent element\n            element = element.parentNode;\n        }\n        // No scrollable parents not scrolled to the top found, so drag\n        return true;\n    }\n    function onDrag(event) {\n        if (!drawerRef.current) {\n            return;\n        }\n        // We need to know how much of the drawer has been dragged in percentages so that we can transform background accordingly\n        if (isDragging) {\n            const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n            const draggedDistance = (pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX)) * directionMultiplier;\n            const isDraggingInDirection = draggedDistance > 0;\n            // Pre condition for disallowing dragging in the close direction.\n            const noCloseSnapPointsPreCondition = snapPoints && !dismissible && !isDraggingInDirection;\n            // Disallow dragging down to close when first snap point is the active one and dismissible prop is set to false.\n            if (noCloseSnapPointsPreCondition && activeSnapPointIndex === 0) return;\n            // We need to capture last time when drag with scroll was triggered and have a timeout between\n            const absDraggedDistance = Math.abs(draggedDistance);\n            const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n            const drawerDimension = direction === 'bottom' || direction === 'top' ? drawerHeightRef.current : drawerWidthRef.current;\n            // Calculate the percentage dragged, where 1 is the closed position\n            let percentageDragged = absDraggedDistance / drawerDimension;\n            const snapPointPercentageDragged = getSnapPointsPercentageDragged(absDraggedDistance, isDraggingInDirection);\n            if (snapPointPercentageDragged !== null) {\n                percentageDragged = snapPointPercentageDragged;\n            }\n            // Disallow close dragging beyond the smallest snap point.\n            if (noCloseSnapPointsPreCondition && percentageDragged >= 1) {\n                return;\n            }\n            if (!isAllowedToDrag.current && !shouldDrag(event.target, isDraggingInDirection)) return;\n            drawerRef.current.classList.add(DRAG_CLASS);\n            // If shouldDrag gave true once after pressing down on the drawer, we set isAllowedToDrag to true and it will remain true until we let go, there's no reason to disable dragging mid way, ever, and that's the solution to it\n            isAllowedToDrag.current = true;\n            set(drawerRef.current, {\n                transition: 'none'\n            });\n            set(overlayRef.current, {\n                transition: 'none'\n            });\n            if (snapPoints) {\n                onDragSnapPoints({\n                    draggedDistance\n                });\n            }\n            // Run this only if snapPoints are not defined or if we are at the last snap point (highest one)\n            if (isDraggingInDirection && !snapPoints) {\n                const dampenedDraggedDistance = dampenValue(draggedDistance);\n                const translateValue = Math.min(dampenedDraggedDistance * -1, 0) * directionMultiplier;\n                set(drawerRef.current, {\n                    transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n                });\n                return;\n            }\n            const opacityValue = 1 - percentageDragged;\n            if (shouldFade || fadeFromIndex && activeSnapPointIndex === fadeFromIndex - 1) {\n                onDragProp == null ? void 0 : onDragProp(event, percentageDragged);\n                set(overlayRef.current, {\n                    opacity: `${opacityValue}`,\n                    transition: 'none'\n                }, true);\n            }\n            if (wrapper && overlayRef.current && shouldScaleBackground) {\n                // Calculate percentageDragged as a fraction (0 to 1)\n                const scaleValue = Math.min(getScale() + percentageDragged * (1 - getScale()), 1);\n                const borderRadiusValue = 8 - percentageDragged * 8;\n                const translateValue = Math.max(0, 14 - percentageDragged * 14);\n                set(wrapper, {\n                    borderRadius: `${borderRadiusValue}px`,\n                    transform: isVertical(direction) ? `scale(${scaleValue}) translate3d(0, ${translateValue}px, 0)` : `scale(${scaleValue}) translate3d(${translateValue}px, 0, 0)`,\n                    transition: 'none'\n                }, true);\n            }\n            if (!snapPoints) {\n                const translateValue = absDraggedDistance * directionMultiplier;\n                set(drawerRef.current, {\n                    transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n                });\n            }\n        }\n    }\n    React__default.useEffect(()=>{\n        window.requestAnimationFrame(()=>{\n            shouldAnimate.current = true;\n        });\n    }, []);\n    React__default.useEffect(()=>{\n        var _window_visualViewport;\n        function onVisualViewportChange() {\n            if (!drawerRef.current || !repositionInputs) return;\n            const focusedElement = document.activeElement;\n            if (isInput(focusedElement) || keyboardIsOpen.current) {\n                var _window_visualViewport;\n                const visualViewportHeight = ((_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.height) || 0;\n                const totalHeight = window.innerHeight;\n                // This is the height of the keyboard\n                let diffFromInitial = totalHeight - visualViewportHeight;\n                const drawerHeight = drawerRef.current.getBoundingClientRect().height || 0;\n                // Adjust drawer height only if it's tall enough\n                const isTallEnough = drawerHeight > totalHeight * 0.8;\n                if (!initialDrawerHeight.current) {\n                    initialDrawerHeight.current = drawerHeight;\n                }\n                const offsetFromTop = drawerRef.current.getBoundingClientRect().top;\n                // visualViewport height may change due to somq e subtle changes to the keyboard. Checking if the height changed by 60 or more will make sure that they keyboard really changed its open state.\n                if (Math.abs(previousDiffFromInitial.current - diffFromInitial) > 60) {\n                    keyboardIsOpen.current = !keyboardIsOpen.current;\n                }\n                if (snapPoints && snapPoints.length > 0 && snapPointsOffset && activeSnapPointIndex) {\n                    const activeSnapPointHeight = snapPointsOffset[activeSnapPointIndex] || 0;\n                    diffFromInitial += activeSnapPointHeight;\n                }\n                previousDiffFromInitial.current = diffFromInitial;\n                // We don't have to change the height if the input is in view, when we are here we are in the opened keyboard state so we can correctly check if the input is in view\n                if (drawerHeight > visualViewportHeight || keyboardIsOpen.current) {\n                    const height = drawerRef.current.getBoundingClientRect().height;\n                    let newDrawerHeight = height;\n                    if (height > visualViewportHeight) {\n                        newDrawerHeight = visualViewportHeight - (isTallEnough ? offsetFromTop : WINDOW_TOP_OFFSET);\n                    }\n                    // When fixed, don't move the drawer upwards if there's space, but rather only change it's height so it's fully scrollable when the keyboard is open\n                    if (fixed) {\n                        drawerRef.current.style.height = `${height - Math.max(diffFromInitial, 0)}px`;\n                    } else {\n                        drawerRef.current.style.height = `${Math.max(newDrawerHeight, visualViewportHeight - offsetFromTop)}px`;\n                    }\n                } else if (!isMobileFirefox()) {\n                    drawerRef.current.style.height = `${initialDrawerHeight.current}px`;\n                }\n                if (snapPoints && snapPoints.length > 0 && !keyboardIsOpen.current) {\n                    drawerRef.current.style.bottom = `0px`;\n                } else {\n                    // Negative bottom value would never make sense\n                    drawerRef.current.style.bottom = `${Math.max(diffFromInitial, 0)}px`;\n                }\n            }\n        }\n        (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.addEventListener('resize', onVisualViewportChange);\n        return ()=>{\n            var _window_visualViewport;\n            return (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.removeEventListener('resize', onVisualViewportChange);\n        };\n    }, [\n        activeSnapPointIndex,\n        snapPoints,\n        snapPointsOffset\n    ]);\n    function closeDrawer(fromWithin) {\n        cancelDrag();\n        onClose == null ? void 0 : onClose();\n        if (!fromWithin) {\n            setIsOpen(false);\n        }\n        setTimeout(()=>{\n            if (snapPoints) {\n                setActiveSnapPoint(snapPoints[0]);\n            }\n        }, TRANSITIONS.DURATION * 1000); // seconds to ms\n    }\n    function resetDrawer() {\n        if (!drawerRef.current) return;\n        const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n        const currentSwipeAmount = getTranslate(drawerRef.current, direction);\n        set(drawerRef.current, {\n            transform: 'translate3d(0, 0, 0)',\n            transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n        });\n        set(overlayRef.current, {\n            transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n            opacity: '1'\n        });\n        // Don't reset background if swiped upwards\n        if (shouldScaleBackground && currentSwipeAmount && currentSwipeAmount > 0 && isOpen) {\n            set(wrapper, {\n                borderRadius: `${BORDER_RADIUS}px`,\n                overflow: 'hidden',\n                ...isVertical(direction) ? {\n                    transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n                    transformOrigin: 'top'\n                } : {\n                    transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,\n                    transformOrigin: 'left'\n                },\n                transitionProperty: 'transform, border-radius',\n                transitionDuration: `${TRANSITIONS.DURATION}s`,\n                transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n            }, true);\n        }\n    }\n    function cancelDrag() {\n        if (!isDragging || !drawerRef.current) return;\n        drawerRef.current.classList.remove(DRAG_CLASS);\n        isAllowedToDrag.current = false;\n        setIsDragging(false);\n        dragEndTime.current = new Date();\n    }\n    function onRelease(event) {\n        if (!isDragging || !drawerRef.current) return;\n        drawerRef.current.classList.remove(DRAG_CLASS);\n        isAllowedToDrag.current = false;\n        setIsDragging(false);\n        dragEndTime.current = new Date();\n        const swipeAmount = getTranslate(drawerRef.current, direction);\n        if (!event || !shouldDrag(event.target, false) || !swipeAmount || Number.isNaN(swipeAmount)) return;\n        if (dragStartTime.current === null) return;\n        const timeTaken = dragEndTime.current.getTime() - dragStartTime.current.getTime();\n        const distMoved = pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX);\n        const velocity = Math.abs(distMoved) / timeTaken;\n        if (velocity > 0.05) {\n            // `justReleased` is needed to prevent the drawer from focusing on an input when the drag ends, as it's not the intent most of the time.\n            setJustReleased(true);\n            setTimeout(()=>{\n                setJustReleased(false);\n            }, 200);\n        }\n        if (snapPoints) {\n            const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n            onReleaseSnapPoints({\n                draggedDistance: distMoved * directionMultiplier,\n                closeDrawer,\n                velocity,\n                dismissible\n            });\n            onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n            return;\n        }\n        // Moved upwards, don't do anything\n        if (direction === 'bottom' || direction === 'right' ? distMoved > 0 : distMoved < 0) {\n            resetDrawer();\n            onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n            return;\n        }\n        if (velocity > VELOCITY_THRESHOLD) {\n            closeDrawer();\n            onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n            return;\n        }\n        var _drawerRef_current_getBoundingClientRect_height;\n        const visibleDrawerHeight = Math.min((_drawerRef_current_getBoundingClientRect_height = drawerRef.current.getBoundingClientRect().height) != null ? _drawerRef_current_getBoundingClientRect_height : 0, window.innerHeight);\n        var _drawerRef_current_getBoundingClientRect_width;\n        const visibleDrawerWidth = Math.min((_drawerRef_current_getBoundingClientRect_width = drawerRef.current.getBoundingClientRect().width) != null ? _drawerRef_current_getBoundingClientRect_width : 0, window.innerWidth);\n        const isHorizontalSwipe = direction === 'left' || direction === 'right';\n        if (Math.abs(swipeAmount) >= (isHorizontalSwipe ? visibleDrawerWidth : visibleDrawerHeight) * closeThreshold) {\n            closeDrawer();\n            onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n            return;\n        }\n        onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n        resetDrawer();\n    }\n    React__default.useEffect(()=>{\n        // Trigger enter animation without using CSS animation\n        if (isOpen) {\n            set(document.documentElement, {\n                scrollBehavior: 'auto'\n            });\n            openTime.current = new Date();\n        }\n        return ()=>{\n            reset(document.documentElement, 'scrollBehavior');\n        };\n    }, [\n        isOpen\n    ]);\n    function onNestedOpenChange(o) {\n        const scale = o ? (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth : 1;\n        const initialTranslate = o ? -NESTED_DISPLACEMENT : 0;\n        if (nestedOpenChangeTimer.current) {\n            window.clearTimeout(nestedOpenChangeTimer.current);\n        }\n        set(drawerRef.current, {\n            transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n            transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${initialTranslate}px, 0)` : `scale(${scale}) translate3d(${initialTranslate}px, 0, 0)`\n        });\n        if (!o && drawerRef.current) {\n            nestedOpenChangeTimer.current = setTimeout(()=>{\n                const translateValue = getTranslate(drawerRef.current, direction);\n                set(drawerRef.current, {\n                    transition: 'none',\n                    transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n                });\n            }, 500);\n        }\n    }\n    function onNestedDrag(_event, percentageDragged) {\n        if (percentageDragged < 0) return;\n        const initialScale = (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth;\n        const newScale = initialScale + percentageDragged * (1 - initialScale);\n        const newTranslate = -NESTED_DISPLACEMENT + percentageDragged * NESTED_DISPLACEMENT;\n        set(drawerRef.current, {\n            transform: isVertical(direction) ? `scale(${newScale}) translate3d(0, ${newTranslate}px, 0)` : `scale(${newScale}) translate3d(${newTranslate}px, 0, 0)`,\n            transition: 'none'\n        });\n    }\n    function onNestedRelease(_event, o) {\n        const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n        const scale = o ? (dim - NESTED_DISPLACEMENT) / dim : 1;\n        const translate = o ? -NESTED_DISPLACEMENT : 0;\n        if (o) {\n            set(drawerRef.current, {\n                transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n                transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${translate}px, 0)` : `scale(${scale}) translate3d(${translate}px, 0, 0)`\n            });\n        }\n    }\n    React__default.useEffect(()=>{\n        if (!modal) {\n            // Need to do this manually unfortunately\n            window.requestAnimationFrame(()=>{\n                document.body.style.pointerEvents = 'auto';\n            });\n        }\n    }, [\n        modal\n    ]);\n    return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Root, {\n        defaultOpen: defaultOpen,\n        onOpenChange: (open)=>{\n            if (!dismissible && !open) return;\n            if (open) {\n                setHasBeenOpened(true);\n            } else {\n                closeDrawer(true);\n            }\n            setIsOpen(open);\n        },\n        open: isOpen\n    }, /*#__PURE__*/ React__default.createElement(DrawerContext.Provider, {\n        value: {\n            activeSnapPoint,\n            snapPoints,\n            setActiveSnapPoint,\n            drawerRef,\n            overlayRef,\n            onOpenChange,\n            onPress,\n            onRelease,\n            onDrag,\n            dismissible,\n            shouldAnimate,\n            handleOnly,\n            isOpen,\n            isDragging,\n            shouldFade,\n            closeDrawer,\n            onNestedDrag,\n            onNestedOpenChange,\n            onNestedRelease,\n            keyboardIsOpen,\n            modal,\n            snapPointsOffset,\n            activeSnapPointIndex,\n            direction,\n            shouldScaleBackground,\n            setBackgroundColorOnScale,\n            noBodyStyles,\n            container,\n            autoFocus\n        }\n    }, children));\n}\nconst Overlay = /*#__PURE__*/ React__default.forwardRef(function({ ...rest }, ref) {\n    const { overlayRef, snapPoints, onRelease, shouldFade, isOpen, modal, shouldAnimate } = useDrawerContext();\n    const composedRef = useComposedRefs(ref, overlayRef);\n    const hasSnapPoints = snapPoints && snapPoints.length > 0;\n    // Overlay is the component that is locking scroll, removing it will unlock the scroll without having to dig into Radix's Dialog library\n    if (!modal) {\n        return null;\n    }\n    const onMouseUp = React__default.useCallback((event)=>onRelease(event), [\n        onRelease\n    ]);\n    return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Overlay, {\n        onMouseUp: onMouseUp,\n        ref: composedRef,\n        \"data-vaul-overlay\": \"\",\n        \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n        \"data-vaul-snap-points-overlay\": isOpen && shouldFade ? 'true' : 'false',\n        \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n        ...rest\n    });\n});\nOverlay.displayName = 'Drawer.Overlay';\nconst Content = /*#__PURE__*/ React__default.forwardRef(function({ onPointerDownOutside, style, onOpenAutoFocus, ...rest }, ref) {\n    const { drawerRef, onPress, onRelease, onDrag, keyboardIsOpen, snapPointsOffset, activeSnapPointIndex, modal, isOpen, direction, snapPoints, container, handleOnly, shouldAnimate, autoFocus } = useDrawerContext();\n    // Needed to use transition instead of animations\n    const [delayedSnapPoints, setDelayedSnapPoints] = React__default.useState(false);\n    const composedRef = useComposedRefs(ref, drawerRef);\n    const pointerStartRef = React__default.useRef(null);\n    const lastKnownPointerEventRef = React__default.useRef(null);\n    const wasBeyondThePointRef = React__default.useRef(false);\n    const hasSnapPoints = snapPoints && snapPoints.length > 0;\n    useScaleBackground();\n    const isDeltaInDirection = (delta, direction, threshold = 0)=>{\n        if (wasBeyondThePointRef.current) return true;\n        const deltaY = Math.abs(delta.y);\n        const deltaX = Math.abs(delta.x);\n        const isDeltaX = deltaX > deltaY;\n        const dFactor = [\n            'bottom',\n            'right'\n        ].includes(direction) ? 1 : -1;\n        if (direction === 'left' || direction === 'right') {\n            const isReverseDirection = delta.x * dFactor < 0;\n            if (!isReverseDirection && deltaX >= 0 && deltaX <= threshold) {\n                return isDeltaX;\n            }\n        } else {\n            const isReverseDirection = delta.y * dFactor < 0;\n            if (!isReverseDirection && deltaY >= 0 && deltaY <= threshold) {\n                return !isDeltaX;\n            }\n        }\n        wasBeyondThePointRef.current = true;\n        return true;\n    };\n    React__default.useEffect(()=>{\n        if (hasSnapPoints) {\n            window.requestAnimationFrame(()=>{\n                setDelayedSnapPoints(true);\n            });\n        }\n    }, []);\n    function handleOnPointerUp(event) {\n        pointerStartRef.current = null;\n        wasBeyondThePointRef.current = false;\n        onRelease(event);\n    }\n    return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Content, {\n        \"data-vaul-drawer-direction\": direction,\n        \"data-vaul-drawer\": \"\",\n        \"data-vaul-delayed-snap-points\": delayedSnapPoints ? 'true' : 'false',\n        \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n        \"data-vaul-custom-container\": container ? 'true' : 'false',\n        \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n        ...rest,\n        ref: composedRef,\n        style: snapPointsOffset && snapPointsOffset.length > 0 ? {\n            '--snap-point-height': `${snapPointsOffset[activeSnapPointIndex != null ? activeSnapPointIndex : 0]}px`,\n            ...style\n        } : style,\n        onPointerDown: (event)=>{\n            if (handleOnly) return;\n            rest.onPointerDown == null ? void 0 : rest.onPointerDown.call(rest, event);\n            pointerStartRef.current = {\n                x: event.pageX,\n                y: event.pageY\n            };\n            onPress(event);\n        },\n        onOpenAutoFocus: (e)=>{\n            onOpenAutoFocus == null ? void 0 : onOpenAutoFocus(e);\n            if (!autoFocus) {\n                e.preventDefault();\n            }\n        },\n        onPointerDownOutside: (e)=>{\n            onPointerDownOutside == null ? void 0 : onPointerDownOutside(e);\n            if (!modal || e.defaultPrevented) {\n                e.preventDefault();\n                return;\n            }\n            if (keyboardIsOpen.current) {\n                keyboardIsOpen.current = false;\n            }\n        },\n        onFocusOutside: (e)=>{\n            if (!modal) {\n                e.preventDefault();\n                return;\n            }\n        },\n        onPointerMove: (event)=>{\n            lastKnownPointerEventRef.current = event;\n            if (handleOnly) return;\n            rest.onPointerMove == null ? void 0 : rest.onPointerMove.call(rest, event);\n            if (!pointerStartRef.current) return;\n            const yPosition = event.pageY - pointerStartRef.current.y;\n            const xPosition = event.pageX - pointerStartRef.current.x;\n            const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n            const delta = {\n                x: xPosition,\n                y: yPosition\n            };\n            const isAllowedToSwipe = isDeltaInDirection(delta, direction, swipeStartThreshold);\n            if (isAllowedToSwipe) onDrag(event);\n            else if (Math.abs(xPosition) > swipeStartThreshold || Math.abs(yPosition) > swipeStartThreshold) {\n                pointerStartRef.current = null;\n            }\n        },\n        onPointerUp: (event)=>{\n            rest.onPointerUp == null ? void 0 : rest.onPointerUp.call(rest, event);\n            pointerStartRef.current = null;\n            wasBeyondThePointRef.current = false;\n            onRelease(event);\n        },\n        onPointerOut: (event)=>{\n            rest.onPointerOut == null ? void 0 : rest.onPointerOut.call(rest, event);\n            handleOnPointerUp(lastKnownPointerEventRef.current);\n        },\n        onContextMenu: (event)=>{\n            rest.onContextMenu == null ? void 0 : rest.onContextMenu.call(rest, event);\n            if (lastKnownPointerEventRef.current) {\n                handleOnPointerUp(lastKnownPointerEventRef.current);\n            }\n        }\n    });\n});\nContent.displayName = 'Drawer.Content';\nconst LONG_HANDLE_PRESS_TIMEOUT = 250;\nconst DOUBLE_TAP_TIMEOUT = 120;\nconst Handle = /*#__PURE__*/ React__default.forwardRef(function({ preventCycle = false, children, ...rest }, ref) {\n    const { closeDrawer, isDragging, snapPoints, activeSnapPoint, setActiveSnapPoint, dismissible, handleOnly, isOpen, onPress, onDrag } = useDrawerContext();\n    const closeTimeoutIdRef = React__default.useRef(null);\n    const shouldCancelInteractionRef = React__default.useRef(false);\n    function handleStartCycle() {\n        // Stop if this is the second click of a double click\n        if (shouldCancelInteractionRef.current) {\n            handleCancelInteraction();\n            return;\n        }\n        window.setTimeout(()=>{\n            handleCycleSnapPoints();\n        }, DOUBLE_TAP_TIMEOUT);\n    }\n    function handleCycleSnapPoints() {\n        // Prevent accidental taps while resizing drawer\n        if (isDragging || preventCycle || shouldCancelInteractionRef.current) {\n            handleCancelInteraction();\n            return;\n        }\n        // Make sure to clear the timeout id if the user releases the handle before the cancel timeout\n        handleCancelInteraction();\n        if (!snapPoints || snapPoints.length === 0) {\n            if (!dismissible) {\n                closeDrawer();\n            }\n            return;\n        }\n        const isLastSnapPoint = activeSnapPoint === snapPoints[snapPoints.length - 1];\n        if (isLastSnapPoint && dismissible) {\n            closeDrawer();\n            return;\n        }\n        const currentSnapIndex = snapPoints.findIndex((point)=>point === activeSnapPoint);\n        if (currentSnapIndex === -1) return; // activeSnapPoint not found in snapPoints\n        const nextSnapPoint = snapPoints[currentSnapIndex + 1];\n        setActiveSnapPoint(nextSnapPoint);\n    }\n    function handleStartInteraction() {\n        closeTimeoutIdRef.current = window.setTimeout(()=>{\n            // Cancel click interaction on a long press\n            shouldCancelInteractionRef.current = true;\n        }, LONG_HANDLE_PRESS_TIMEOUT);\n    }\n    function handleCancelInteraction() {\n        if (closeTimeoutIdRef.current) {\n            window.clearTimeout(closeTimeoutIdRef.current);\n        }\n        shouldCancelInteractionRef.current = false;\n    }\n    return /*#__PURE__*/ React__default.createElement(\"div\", {\n        onClick: handleStartCycle,\n        onPointerCancel: handleCancelInteraction,\n        onPointerDown: (e)=>{\n            if (handleOnly) onPress(e);\n            handleStartInteraction();\n        },\n        onPointerMove: (e)=>{\n            if (handleOnly) onDrag(e);\n        },\n        // onPointerUp is already handled by the content component\n        ref: ref,\n        \"data-vaul-drawer-visible\": isOpen ? 'true' : 'false',\n        \"data-vaul-handle\": \"\",\n        \"aria-hidden\": \"true\",\n        ...rest\n    }, /*#__PURE__*/ React__default.createElement(\"span\", {\n        \"data-vaul-handle-hitarea\": \"\",\n        \"aria-hidden\": \"true\"\n    }, children));\n});\nHandle.displayName = 'Drawer.Handle';\nfunction NestedRoot({ onDrag, onOpenChange, open: nestedIsOpen, ...rest }) {\n    const { onNestedDrag, onNestedOpenChange, onNestedRelease } = useDrawerContext();\n    if (!onNestedDrag) {\n        throw new Error('Drawer.NestedRoot must be placed in another drawer');\n    }\n    return /*#__PURE__*/ React__default.createElement(Root, {\n        nested: true,\n        open: nestedIsOpen,\n        onClose: ()=>{\n            onNestedOpenChange(false);\n        },\n        onDrag: (e, p)=>{\n            onNestedDrag(e, p);\n            onDrag == null ? void 0 : onDrag(e, p);\n        },\n        onOpenChange: (o)=>{\n            if (o) {\n                onNestedOpenChange(o);\n            }\n            onOpenChange == null ? void 0 : onOpenChange(o);\n        },\n        onRelease: onNestedRelease,\n        ...rest\n    });\n}\nfunction Portal(props) {\n    const context = useDrawerContext();\n    const { container = context.container, ...portalProps } = props;\n    return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Portal, {\n        container: container,\n        ...portalProps\n    });\n}\nconst Drawer = {\n    Root,\n    NestedRoot,\n    Content,\n    Overlay,\n    Trigger: DialogPrimitive.Trigger,\n    Portal,\n    Handle,\n    Close: DialogPrimitive.Close,\n    Title: DialogPrimitive.Title,\n    Description: DialogPrimitive.Description\n};\n\nexport { Content, Drawer, Handle, NestedRoot, Overlay, Portal, Root };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n  const { children, width = 10, height = 5, ...arrowProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.svg,\n    {\n      ...arrowProps,\n      ref: forwardedRef,\n      width,\n      height,\n      viewBox: \"0 0 30 10\",\n      preserveAspectRatio: \"none\",\n      children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n    }\n  );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n  Arrow,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n  const [size, setSize] = React.useState(void 0);\n  useLayoutEffect(() => {\n    if (element) {\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n        if (!entries.length) {\n          return;\n        }\n        const entry = entries[0];\n        let width;\n        let height;\n        if (\"borderBoxSize\" in entry) {\n          const borderSizeEntry = entry[\"borderBoxSize\"];\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize[\"inlineSize\"];\n          height = borderSize[\"blockSize\"];\n        } else {\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n        setSize({ width, height });\n      });\n      resizeObserver.observe(element, { box: \"border-box\" });\n      return () => resizeObserver.unobserve(element);\n    } else {\n      setSize(void 0);\n    }\n  }, [element]);\n  return size;\n}\nexport {\n  useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState(null);\n  const [placementState, setPlacementState] = React.useState(void 0);\n  return /* @__PURE__ */ jsx(\n    PopperProvider,\n    {\n      scope: __scopePopper,\n      anchor,\n      onAnchorChange: setAnchor,\n      placementState,\n      setPlacementState,\n      children\n    }\n  );\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef(null);\n    const onAnchorChange = context.onAnchorChange;\n    const callbackRef = React.useCallback(\n      (node) => {\n        ref.current = node;\n        if (node) {\n          onAnchorChange(node);\n        }\n      },\n      [onAnchorChange]\n    );\n    const composedRefs = useComposedRefs(forwardedRef, callbackRef);\n    const anchorRef = React.useRef(null);\n    React.useEffect(() => {\n      if (!virtualRef) {\n        return;\n      }\n      const previousAnchor = anchorRef.current;\n      anchorRef.current = virtualRef.current;\n      if (previousAnchor !== anchorRef.current) {\n        onAnchorChange(anchorRef.current);\n      }\n    });\n    const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);\n    const placedSide = sideAndAlign?.[0];\n    const placedAlign = sideAndAlign?.[1];\n    return virtualRef ? null : /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        \"data-radix-popper-side\": placedSide,\n        \"data-radix-popper-align\": placedAlign,\n        ...anchorProps,\n        ref: composedRefs\n      }\n    );\n  }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = \"bottom\",\n      sideOffset = 0,\n      align = \"center\",\n      alignOffset = 0,\n      arrowPadding = 0,\n      avoidCollisions = true,\n      collisionBoundary,\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = \"partial\",\n      hideWhenDetached = false,\n      updatePositionStrategy = \"optimized\",\n      onPlaced,\n      ...contentProps\n    } = props;\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n    const [content, setContent] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [arrow, setArrow] = React.useState(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n    const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n    const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n    const boundary = collisionBoundary ? Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary] : void 0;\n    const hasExplicitBoundaries = boundary !== void 0 && boundary.length > 0;\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary?.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries\n    };\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: \"fixed\",\n      placement: desiredPlacement,\n      whileElementsMounted: (...args) => {\n        const cleanup = autoUpdate(...args, {\n          animationFrame: updatePositionStrategy === \"always\"\n        });\n        return cleanup;\n      },\n      elements: {\n        reference: context.anchor\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions && shift({\n          mainAxis: true,\n          crossAxis: false,\n          limiter: sticky === \"partial\" ? limitShift() : void 0,\n          ...detectOverflowOptions\n        }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n          }\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n      ]\n    });\n    const setPlacementState = context.setPlacementState;\n    useLayoutEffect(() => {\n      setPlacementState(placement);\n      return () => {\n        setPlacementState(void 0);\n      };\n    }, [placement, setPlacementState]);\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const [contentZIndex, setContentZIndex] = React.useState();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n    return /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        ref: refs.setFloating,\n        \"data-radix-popper-content-wrapper\": \"\",\n        style: {\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n          // keep off the page when measuring\n          minWidth: \"max-content\",\n          zIndex: contentZIndex,\n          \"--radix-popper-transform-origin\": [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y\n          ].join(\" \"),\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...middlewareData.hide?.referenceHidden && {\n            visibility: \"hidden\",\n            pointerEvents: \"none\"\n          }\n        },\n        dir: props.dir,\n        children: /* @__PURE__ */ jsx(\n          PopperContentProvider,\n          {\n            scope: __scopePopper,\n            placedSide,\n            placedAlign,\n            onArrowChange: setArrow,\n            arrowX,\n            arrowY,\n            shouldHideArrow: cannotCenterArrow,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                \"data-side\": placedSide,\n                \"data-align\": placedAlign,\n                ...contentProps,\n                ref: composedRefs,\n                style: {\n                  ...contentProps.style,\n                  // if the PopperContent hasn't been placed yet (not all measurements done)\n                  // we prevent animations so that users's animation don't kick in too early referring wrong sides\n                  animation: !isPositioned ? \"none\" : void 0\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n  top: \"bottom\",\n  right: \"left\",\n  bottom: \"top\",\n  left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    /* @__PURE__ */ jsx(\n      \"span\",\n      {\n        ref: contentContext.onArrowChange,\n        style: {\n          position: \"absolute\",\n          left: contentContext.arrowX,\n          top: contentContext.arrowY,\n          [baseSide]: 0,\n          transformOrigin: {\n            top: \"\",\n            right: \"0 0\",\n            bottom: \"center 0\",\n            left: \"100% 0\"\n          }[contentContext.placedSide],\n          transform: {\n            top: \"translateY(100%)\",\n            right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n            bottom: `rotate(180deg)`,\n            left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n          }[contentContext.placedSide],\n          visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n        },\n        children: /* @__PURE__ */ jsx(\n          ArrowPrimitive.Root,\n          {\n            ...arrowProps,\n            ref: forwardedRef,\n            style: {\n              ...arrowProps.style,\n              // ensures the element can be measured correctly (mostly for if SVG)\n              display: \"block\"\n            }\n          }\n        )\n      }\n    )\n  );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n  return value !== null;\n}\nvar transformOrigin = (options) => ({\n  name: \"transformOrigin\",\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n    let x = \"\";\n    let y = \"\";\n    if (placedSide === \"bottom\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === \"top\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === \"right\") {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === \"left\") {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n  const [side, align = \"center\"] = placement.split(\"-\");\n  return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n  ALIGN_OPTIONS,\n  Anchor,\n  Arrow,\n  Content,\n  Popper,\n  PopperAnchor,\n  PopperArrow,\n  PopperContent,\n  Root2 as Root,\n  SIDE_OPTIONS,\n  createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n  // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n  position: \"absolute\",\n  border: 0,\n  width: 1,\n  height: 1,\n  padding: 0,\n  margin: -1,\n  overflow: \"hidden\",\n  clip: \"rect(0, 0, 0, 0)\",\n  whiteSpace: \"nowrap\",\n  wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...props,\n        ref: forwardedRef,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n      }\n    );\n  }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n  Root,\n  VISUALLY_HIDDEN_STYLES,\n  VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n  const {\n    __scopeTooltip,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = 300,\n    disableHoverableContent = false,\n    children\n  } = props;\n  const isOpenDelayedRef = React.useRef(true);\n  const isPointerInTransitRef = React.useRef(false);\n  const skipDelayTimerRef = React.useRef(0);\n  React.useEffect(() => {\n    const skipDelayTimer = skipDelayTimerRef.current;\n    return () => window.clearTimeout(skipDelayTimer);\n  }, []);\n  return /* @__PURE__ */ jsx(\n    TooltipProviderContextProvider,\n    {\n      scope: __scopeTooltip,\n      isOpenDelayedRef,\n      delayDuration,\n      onOpen: React.useCallback(() => {\n        if (skipDelayDuration <= 0) return;\n        window.clearTimeout(skipDelayTimerRef.current);\n        isOpenDelayedRef.current = false;\n      }, [skipDelayDuration]),\n      onClose: React.useCallback(() => {\n        if (skipDelayDuration <= 0) return;\n        window.clearTimeout(skipDelayTimerRef.current);\n        skipDelayTimerRef.current = window.setTimeout(\n          () => isOpenDelayedRef.current = true,\n          skipDelayDuration\n        );\n      }, [skipDelayDuration]),\n      isPointerInTransitRef,\n      onPointerInTransitChange: React.useCallback((inTransit) => {\n        isPointerInTransitRef.current = inTransit;\n      }, []),\n      disableHoverableContent,\n      children\n    }\n  );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n  const {\n    __scopeTooltip,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    disableHoverableContent: disableHoverableContentProp,\n    delayDuration: delayDurationProp\n  } = props;\n  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n  const popperScope = usePopperScope(__scopeTooltip);\n  const [trigger, setTrigger] = React.useState(null);\n  const contentId = useId();\n  const openTimerRef = React.useRef(0);\n  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n  const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n  const wasOpenDelayedRef = React.useRef(false);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: (open2) => {\n      if (open2) {\n        providerContext.onOpen();\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n      } else {\n        providerContext.onClose();\n      }\n      onOpenChange?.(open2);\n    },\n    caller: TOOLTIP_NAME\n  });\n  const stateAttribute = React.useMemo(() => {\n    return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n  }, [open]);\n  const handleOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    wasOpenDelayedRef.current = false;\n    setOpen(true);\n  }, [setOpen]);\n  const handleClose = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    setOpen(false);\n  }, [setOpen]);\n  const handleDelayedOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = window.setTimeout(() => {\n      wasOpenDelayedRef.current = true;\n      setOpen(true);\n      openTimerRef.current = 0;\n    }, delayDuration);\n  }, [delayDuration, setOpen]);\n  React.useEffect(() => {\n    return () => {\n      if (openTimerRef.current) {\n        window.clearTimeout(openTimerRef.current);\n        openTimerRef.current = 0;\n      }\n    };\n  }, []);\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    TooltipContextProvider,\n    {\n      scope: __scopeTooltip,\n      contentId,\n      open,\n      stateAttribute,\n      trigger,\n      onTriggerChange: setTrigger,\n      onTriggerEnter: React.useCallback(() => {\n        if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n        else handleOpen();\n      }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n      onTriggerLeave: React.useCallback(() => {\n        if (disableHoverableContent) {\n          handleClose();\n        } else {\n          window.clearTimeout(openTimerRef.current);\n          openTimerRef.current = 0;\n        }\n      }, [handleClose, disableHoverableContent]),\n      onOpen: handleOpen,\n      onClose: handleClose,\n      disableHoverableContent,\n      children\n    }\n  ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...triggerProps } = props;\n    const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n    const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n    const isPointerDownRef = React.useRef(false);\n    const hasPointerMoveOpenedRef = React.useRef(false);\n    const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n    React.useEffect(() => {\n      return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n    }, [handlePointerUp]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        \"aria-describedby\": context.open ? context.contentId : void 0,\n        \"data-state\": context.stateAttribute,\n        ...triggerProps,\n        ref: composedRefs,\n        onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n          if (event.pointerType === \"touch\") return;\n          if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n            context.onTriggerEnter();\n            hasPointerMoveOpenedRef.current = true;\n          }\n        }),\n        onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n          context.onTriggerLeave();\n          hasPointerMoveOpenedRef.current = false;\n        }),\n        onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n          if (context.open) {\n            context.onClose();\n          }\n          isPointerDownRef.current = true;\n          document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n        }),\n        onFocus: composeEventHandlers(props.onFocus, () => {\n          if (!isPointerDownRef.current) context.onOpen();\n        }),\n        onBlur: composeEventHandlers(props.onBlur, context.onClose),\n        onClick: composeEventHandlers(props.onClick, context.onClose)\n      }\n    ) });\n  }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n  const { __scopeTooltip, forceMount, children, container } = props;\n  const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n    const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n    const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n  }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n  const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n  const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n  const { trigger, onClose } = context;\n  const content = ref.current;\n  const { onPointerInTransitChange } = providerContext;\n  const handleRemoveGraceArea = React.useCallback(() => {\n    setPointerGraceArea(null);\n    onPointerInTransitChange(false);\n  }, [onPointerInTransitChange]);\n  const handleCreateGraceArea = React.useCallback(\n    (event, hoverTarget) => {\n      const currentTarget = event.currentTarget;\n      const exitPoint = { x: event.clientX, y: event.clientY };\n      const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n      const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n      const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n      const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n      setPointerGraceArea(graceArea);\n      onPointerInTransitChange(true);\n    },\n    [onPointerInTransitChange]\n  );\n  React.useEffect(() => {\n    return () => handleRemoveGraceArea();\n  }, [handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (trigger && content) {\n      const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n      const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n      trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n      content.addEventListener(\"pointerleave\", handleContentLeave);\n      return () => {\n        trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n        content.removeEventListener(\"pointerleave\", handleContentLeave);\n      };\n    }\n  }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (pointerGraceArea) {\n      const handleTrackPointerGrace = (event) => {\n        const target = event.target;\n        const pointerPosition = { x: event.clientX, y: event.clientY };\n        const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n        if (hasEnteredTarget) {\n          handleRemoveGraceArea();\n        } else if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea();\n          onClose();\n        }\n      };\n      document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n      return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n    }\n  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n  return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTooltip,\n      children,\n      \"aria-label\": ariaLabel,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      ...contentProps\n    } = props;\n    const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const { onClose } = context;\n    React.useEffect(() => {\n      document.addEventListener(TOOLTIP_OPEN, onClose);\n      return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n    }, [onClose]);\n    React.useEffect(() => {\n      if (context.trigger) {\n        const handleScroll = (event) => {\n          if (event.target instanceof Node && event.target.contains(context.trigger)) {\n            onClose();\n          }\n        };\n        window.addEventListener(\"scroll\", handleScroll, { capture: true });\n        return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n      }\n    }, [context.trigger, onClose]);\n    return /* @__PURE__ */ jsx(\n      DismissableLayer,\n      {\n        asChild: true,\n        disableOutsidePointerEvents: false,\n        onEscapeKeyDown,\n        onPointerDownOutside,\n        onFocusOutside: (event) => event.preventDefault(),\n        onDismiss: onClose,\n        children: /* @__PURE__ */ jsxs(\n          PopperPrimitive.Content,\n          {\n            \"data-state\": context.stateAttribute,\n            ...popperScope,\n            ...contentProps,\n            ref: forwardedRef,\n            style: {\n              ...contentProps.style,\n              // re-namespace exposed content custom properties\n              ...{\n                \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n                \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n                \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n              }\n            },\n            children: [\n              /* @__PURE__ */ jsx(Slottable, { children }),\n              /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n            ]\n          }\n        )\n      }\n    );\n  }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeTooltip);\n    const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n      ARROW_NAME,\n      __scopeTooltip\n    );\n    return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n  const top = Math.abs(rect.top - point.y);\n  const bottom = Math.abs(rect.bottom - point.y);\n  const right = Math.abs(rect.right - point.x);\n  const left = Math.abs(rect.left - point.x);\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return \"left\";\n    case right:\n      return \"right\";\n    case top:\n      return \"top\";\n    case bottom:\n      return \"bottom\";\n    default:\n      throw new Error(\"unreachable\");\n  }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n  const paddedExitPoints = [];\n  switch (exitSide) {\n    case \"top\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y + padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"bottom\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y - padding }\n      );\n      break;\n    case \"left\":\n      paddedExitPoints.push(\n        { x: exitPoint.x + padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"right\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x - padding, y: exitPoint.y + padding }\n      );\n      break;\n  }\n  return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n  const { top, right, bottom, left } = rect;\n  return [\n    { x: left, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom }\n  ];\n}\nfunction isPointInPolygon(point, polygon) {\n  const { x, y } = point;\n  let inside = false;\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const ii = polygon[i];\n    const jj = polygon[j];\n    const xi = ii.x;\n    const yi = ii.y;\n    const xj = jj.x;\n    const yj = jj.y;\n    const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) inside = !inside;\n  }\n  return inside;\n}\nfunction getHull(points) {\n  const newPoints = points.slice();\n  newPoints.sort((a, b) => {\n    if (a.x < b.x) return -1;\n    else if (a.x > b.x) return 1;\n    else if (a.y < b.y) return -1;\n    else if (a.y > b.y) return 1;\n    else return 0;\n  });\n  return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n  if (points.length <= 1) return points.slice();\n  const upperHull = [];\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i];\n    while (upperHull.length >= 2) {\n      const q = upperHull[upperHull.length - 1];\n      const r = upperHull[upperHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n      else break;\n    }\n    upperHull.push(p);\n  }\n  upperHull.pop();\n  const lowerHull = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i];\n    while (lowerHull.length >= 2) {\n      const q = lowerHull[lowerHull.length - 1];\n      const r = lowerHull[lowerHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n      else break;\n    }\n    lowerHull.push(p);\n  }\n  lowerHull.pop();\n  if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n    return upperHull;\n  } else {\n    return upperHull.concat(lowerHull);\n  }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n  Arrow2 as Arrow,\n  Content2 as Content,\n  Portal,\n  Provider,\n  Root3 as Root,\n  Tooltip,\n  TooltipArrow,\n  TooltipContent,\n  TooltipPortal,\n  TooltipProvider,\n  TooltipTrigger,\n  Trigger,\n  createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\nimport { cn } from '../../lib/utils';\n\nconst TooltipZIndexContext = React.createContext<number | undefined>(undefined);\n\ntype TooltipProviderProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider> & {\n  zIndex?: number;\n};\n\nconst TooltipProvider = ({ zIndex, children, ...props }: TooltipProviderProps) => (\n  <TooltipZIndexContext.Provider value={zIndex}>\n    <TooltipPrimitive.Provider {...props}>{children}</TooltipPrimitive.Provider>\n  </TooltipZIndexContext.Provider>\n);\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\ntype TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n  portalContainer?: HTMLElement | null;\n};\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  TooltipContentProps\n>(({ className, sideOffset = 4, portalContainer, style, ...props }, ref) => {\n  const zIndexFromProvider = React.useContext(TooltipZIndexContext);\n\n  return (\n    <TooltipPrimitive.Portal container={portalContainer ?? undefined}>\n      <TooltipPrimitive.Content\n        ref={ref}\n        sideOffset={sideOffset}\n        className={cn(\n          // 'z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]',\n          className\n        )}\n        style={zIndexFromProvider != null ? { ...style, zIndex: zIndexFromProvider } : style}\n        {...props}\n      >\n        {props.children}\n        <TooltipPrimitive.Arrow className=\"fill-[#525867] stroke-[#525867] stroke-[2px] stroke-linejoin-round [paint-order:stroke_fill]\" />\n      </TooltipPrimitive.Content>\n    </TooltipPrimitive.Portal>\n  );\n});\n\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';\n\nexport const BsTooltip = ({\n  children,\n  content,\n}: {\n  children: React.ReactNode;\n  content: React.ReactNode;\n}) => {\n  const triggerRef = useRef<HTMLSpanElement | null>(null);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    const triggerEl = triggerRef.current;\n    if (!triggerEl) {\n      return;\n    }\n\n    const rootNode = triggerEl.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-tooltip-portal]');\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-tooltip-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n      return;\n    }\n\n    setPortalContainer(null);\n  }, []);\n\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>\n        <span ref={triggerRef} className=\"inline-flex\">\n          {children}\n        </span>\n      </TooltipTrigger>\n      <TooltipContent\n        portalContainer={portalContainer}\n        className=\"rounded-[4px] bg-[#525867] px-[12px] !py-[7px] text-[12px] text-white leading-normal max-w-[288px] animate-in fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 duration-200\"\n      >\n        {content}\n      </TooltipContent>\n    </Tooltip>\n  );\n};\n","import { ReactNode, forwardRef } from 'react';\nimport { Button, ButtonProps } from './ui/button';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { BsTooltip } from './tooltip';\n\nexport interface IconBtnProps extends ButtonProps {\n  icon: ReactNode;\n  rounded?: boolean;\n  tooltip?: string;\n}\n\nexport const IconBtn = forwardRef<HTMLButtonElement, IconBtnProps>(\n  ({ icon, className, tooltip, size, rounded, ...rest }, ref) => {\n    const btn = (\n      <Button\n        ref={ref}\n        variant=\"ghost\"\n        size=\"icon\"\n        className={cn(\n          'p-2.5',\n          {\n            'rounded-full w-[26px] h-[26px] aspect-square !text-[#121111]': rounded,\n            'rounded-[4px]': !rounded,\n          },\n          'cursor-pointer',\n          'hover:!bg-[#EFF0F6]',\n          className,\n          transCls\n        )}\n        {...rest}\n      >\n        {icon}\n      </Button>\n    );\n\n    if (tooltip) {\n      return <BsTooltip content={tooltip}>{btn}</BsTooltip>;\n    }\n\n    return btn;\n  }\n);\n","import { transCls } from '../const/ui';\nimport { cn } from '../lib/utils';\n// import { FontIcon } from './font-icon';\n\nexport const DockIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H11V3H3Z\" />\n  </svg>\n);\n\nexport const FloatIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\" />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M13 2C13.5304 2 14.039 2.21086 14.4141 2.58594C14.7891 2.96101 15 3.46957 15 4V12C15 12.5304 14.7891 13.039 14.4141 13.4141C14.039 13.7891 13.5304 14 13 14H3C2.46957 14 1.96101 13.7891 1.58594 13.4141C1.21086 13.039 1 12.5304 1 12V4C1 3.46957 1.21086 2.96101 1.58594 2.58594C1.96101 2.21086 2.46957 2 3 2H13ZM3 3C2.7551 3.00003 2.51896 3.09021 2.33594 3.25293C2.15294 3.41565 2.03553 3.63963 2.00684 3.88281L2 4V12C2.00003 12.2449 2.09021 12.481 2.25293 12.6641C2.41565 12.8471 2.63963 12.9645 2.88281 12.9932L3 13H13C13.2449 13 13.481 12.9098 13.6641 12.7471C13.8471 12.5843 13.9645 12.3604 13.9932 12.1172L14 12V4C14 3.7551 13.9098 3.51896 13.7471 3.33594C13.5843 3.15294 13.3604 3.03553 13.1172 3.00684L13 3H3ZM12.5 4C12.7761 4 13 4.22386 13 4.5V11.5C13 11.7761 12.7761 12 12.5 12H10.5C10.2239 12 10 11.7761 10 11.5V4.5C10 4.22386 10.2239 4 10.5 4H12.5Z\"\n      fillOpacity=\"0.2\"\n    />\n  </svg>\n);\n\nexport const CloseIcon = () => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 16 16\"\n      fill=\"currentColor\"\n    >\n      <path d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\" />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n      <path\n        d=\"M9.00669 7.99894L14.2992 2.7038C14.4278 2.57406 14.5 2.39872 14.5 2.21597C14.5 2.03322 14.4278 1.85788 14.2992 1.72814L14.271 1.69996C14.1411 1.57218 13.9662 1.50058 13.784 1.50058C13.6018 1.50058 13.4269 1.57218 13.297 1.69996L8.00217 7.00331L2.70967 1.69996C2.57969 1.57183 2.40454 1.5 2.22207 1.5C2.0396 1.5 1.86446 1.57183 1.73448 1.69996L1.70515 1.72814C1.64021 1.79157 1.58861 1.86735 1.55338 1.95103C1.51815 2.0347 1.5 2.12458 1.5 2.21538C1.5 2.30618 1.51815 2.39606 1.55338 2.47974C1.58861 2.56341 1.64021 2.6392 1.70515 2.70263L6.99765 7.99894L1.70515 13.2964C1.57687 13.4261 1.50492 13.6012 1.50492 13.7837C1.50492 13.9661 1.57687 14.1412 1.70515 14.2709L1.73448 14.2991C1.86411 14.4274 2.03912 14.4994 2.22149 14.4994C2.40386 14.4994 2.57886 14.4274 2.70849 14.2991L8.00217 9.00396L13.2947 14.2991C13.4243 14.4278 13.5996 14.5 13.7823 14.5C13.9649 14.5 14.1402 14.4278 14.2699 14.2991L14.2992 14.2709C14.4275 14.1412 14.4994 13.9661 14.4994 13.7837C14.4994 13.6012 14.4275 13.4261 14.2992 13.2964L9.00786 7.99894H9.00669Z\"\n        fillOpacity=\"0.2\"\n      />\n    </svg>\n  );\n};\n\nexport const UserIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M13.334 14.3031H2.66732C1.93065 14.3031 1.33398 13.7064 1.33398 12.9697V12.6064C1.33398 10.5997 2.96065 8.96973 4.97065 8.96973H11.0307C13.0373 8.96973 14.6673 10.5964 14.6673 12.6064V12.9697C14.6673 13.7064 14.0707 14.3031 13.334 14.3031Z\" />\n    <path d=\"M4.66602 4.97005C4.66602 5.85411 5.01721 6.70195 5.64233 7.32707C6.26745 7.9522 7.11529 8.30338 7.99935 8.30338C8.8834 8.30338 9.73125 7.9522 10.3564 7.32707C10.9815 6.70195 11.3327 5.85411 11.3327 4.97005C11.3327 4.53231 11.2465 4.09886 11.0789 3.69444C10.9114 3.29002 10.6659 2.92256 10.3564 2.61303C10.0468 2.3035 9.67938 2.05797 9.27496 1.89045C8.87054 1.72294 8.43709 1.63672 7.99935 1.63672C7.56161 1.63672 7.12816 1.72294 6.72374 1.89045C6.31932 2.05797 5.95185 2.3035 5.64233 2.61303C5.3328 2.92256 5.08727 3.29002 4.91975 3.69444C4.75224 4.09886 4.66602 4.53231 4.66602 4.97005Z\" />\n  </svg>\n);\n\nexport const BagIcon = () => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 16 16\"\n      fill=\"currentColor\"\n    >\n      <path d=\"M4.17666 2.53223H11.8185C12.3729 2.53223 12.848 2.94798 12.9074 3.50231L13.8577 12.2331C13.8973 12.5498 13.7983 12.8468 13.5805 13.0844C13.3825 13.3219 13.0856 13.4407 12.7688 13.4407H3.20658C2.88982 13.4407 2.59285 13.3021 2.39488 13.0844C2.1969 12.8468 2.09792 12.5498 2.11772 12.2331L3.08781 3.52211C3.1472 2.96778 3.62234 2.53224 4.17668 2.53224L4.17666 2.53223ZM5.26553 5.81863C5.26553 7.32326 6.49298 8.5507 7.9976 8.5507C9.50222 8.5507 10.7297 7.32326 10.7297 5.81863C10.7297 5.52167 10.4921 5.2643 10.1753 5.2643C9.87837 5.2643 9.621 5.50187 9.621 5.81863C9.621 6.72933 8.88848 7.46183 7.9778 7.46183C7.06712 7.46183 6.3346 6.72932 6.3346 5.81863C6.3346 5.62065 6.23562 5.44248 6.05744 5.34349C5.87926 5.24451 5.68128 5.24451 5.5031 5.34349C5.36451 5.44248 5.26553 5.62065 5.26553 5.81863Z\" />\n    </svg>\n  );\n};\n\nexport const BuildingIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M10 1.81287V14.4799H2.667C2.267 14.4799 2 14.2129 2 13.8129V3.67987C2 3.34687 2.2 3.07987 2.533 3.01287L9.2 1.34687C9.533 1.27987 9.867 1.47987 10 1.81287ZM10.667 7.81287L13.6 8.94687C13.867 9.07987 14 9.27987 14 9.54687V13.8129C14 14.2129 13.733 14.4799 13.333 14.4799H10.667V7.81287ZM7.333 8.47987H4.667C4.267 8.47987 4 8.74687 4 9.14687C4 9.47987 4.267 9.74687 4.6 9.81287H7.333C7.733 9.81287 8 9.54687 8 9.14687C8 8.74687 7.733 8.47987 7.333 8.47987ZM7.333 5.14687H4.667C4.267 5.14687 4 5.41287 4 5.81287C4 6.14687 4.267 6.41287 4.6 6.47987H7.333C7.733 6.47987 8 6.21287 8 5.81287C8 5.41287 7.733 5.14687 7.333 5.14687Z\" />\n  </svg>\n);\n\nexport const PlaneIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M3.99999 6.66646L9.46666 7.99979L3.99999 9.33313L2.89399 12.2825C2.57533 13.1331 3.46466 13.9338 4.27799 13.5278L13.5447 8.89446C14.2813 8.52579 14.2813 7.47446 13.5447 7.10513L4.27799 2.47179C3.46466 2.06513 2.57533 2.86646 2.89399 3.71779L4.00066 6.66646H3.99999Z\" />\n  </svg>\n);\n\nexport const ExportIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\" />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n  </svg>\n);\n\nexport const AddIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M14.3994 7.46839H8.53343V1.60139C8.5341 1.53113 8.52074 1.46144 8.49413 1.3964C8.46751 1.33137 8.42819 1.2723 8.37846 1.22266C8.32872 1.17302 8.26958 1.1338 8.2045 1.10731C8.13941 1.08082 8.06969 1.06759 7.99943 1.06839C7.92925 1.06773 7.85964 1.08106 7.79467 1.10761C7.7297 1.13415 7.67068 1.17339 7.62105 1.22302C7.57143 1.27264 7.53219 1.33167 7.50564 1.39664C7.47909 1.4616 7.46576 1.53121 7.46643 1.60139V7.46839H1.59943C1.52925 7.46773 1.45964 7.48106 1.39467 7.50761C1.3297 7.53415 1.27068 7.57339 1.22105 7.62302C1.17143 7.67264 1.13219 7.73167 1.10564 7.79664C1.07909 7.8616 1.06576 7.93121 1.06643 8.00139C1.06643 8.30039 1.30143 8.53439 1.59943 8.53439H7.46643V14.4014C7.46643 14.7004 7.70143 14.9344 7.99943 14.9344C8.06962 14.9349 8.13922 14.9215 8.20418 14.8949C8.26914 14.8683 8.32818 14.8291 8.37785 14.7795C8.42753 14.7299 8.46687 14.671 8.49358 14.6061C8.52028 14.5412 8.53383 14.4716 8.53343 14.4014V8.53439H14.3994C14.4697 8.53519 14.5394 8.52196 14.6045 8.49547C14.6696 8.46898 14.7287 8.42977 14.7785 8.38013C14.8282 8.33049 14.8675 8.27142 14.8941 8.20639C14.9207 8.14135 14.9341 8.07166 14.9334 8.00139C14.9338 7.9312 14.9203 7.86163 14.8936 7.79672C14.8669 7.73181 14.8275 7.67285 14.7779 7.62326C14.7282 7.57367 14.6691 7.53445 14.6042 7.50786C14.5392 7.48128 14.4696 7.46786 14.3994 7.46839Z\" fill=\"currentColor\" />\n  </svg>\n)\n\nexport const TrashIcon = () => (\n  // <FontIcon code=\"&#xe85f;\"></FontIcon>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M9.99974 1C10.3726 1.00002 10.732 1.13413 11.008 1.37618C11.284 1.61824 11.4567 1.95088 11.4925 2.30924L11.4995 2.44828V4.37931H14.4991C14.6241 4.37909 14.7446 4.42404 14.8369 4.50532C14.9292 4.5866 14.9867 4.6983 14.998 4.81845C15.0092 4.93859 14.9735 5.05846 14.8979 5.15446C14.8222 5.25045 14.7121 5.31561 14.5891 5.3371L14.4991 5.34483H13.9292L12.4934 14.5887C12.4781 14.6881 12.4311 14.7804 12.3588 14.8527C12.2866 14.9251 12.1928 14.9739 12.0905 14.9923L11.9995 15H4.00053C3.89643 15.0001 3.7949 14.9687 3.71012 14.9104C3.62534 14.8521 3.56153 14.7697 3.52759 14.6746L3.50659 14.5887L2.06978 5.34483H1.50086C1.37593 5.34505 1.25544 5.3001 1.16312 5.21882C1.0708 5.13754 1.01333 5.02583 1.00205 4.90569C0.990758 4.78555 1.02646 4.66567 1.10213 4.56968C1.17779 4.47369 1.28794 4.40853 1.41087 4.38703L1.50086 4.37931H4.50046V2.44828C4.50048 2.08825 4.63936 1.74114 4.89003 1.47463C5.14069 1.20812 5.48517 1.04132 5.85628 1.00676L6.00026 1H9.99974ZM12.9184 5.34483H3.08065L4.43047 14.0345H11.5685L12.9184 5.34483ZM5.96427 5.82855C6.081 5.82046 6.19697 5.85217 6.29198 5.91815C6.38698 5.98414 6.45501 6.08022 6.4842 6.18966L6.4992 6.27655L6.99913 13.0352C7.00801 13.1554 6.97 13.2744 6.89259 13.369C6.81518 13.4635 6.70395 13.5266 6.58078 13.546C6.4576 13.5653 6.33138 13.5395 6.22692 13.4736C6.12247 13.4076 6.04732 13.3064 6.01626 13.1897L6.00026 13.1028L5.50033 6.34414C5.49098 6.2165 5.53449 6.0905 5.62129 5.99382C5.7081 5.89715 5.8311 5.8377 5.96327 5.82855H5.96427ZM10.0357 5.82855C10.1524 5.83668 10.2623 5.88402 10.3465 5.96234C10.4308 6.04067 10.4839 6.14501 10.4967 6.25724L10.4987 6.34414L9.99874 13.1028C9.99035 13.2232 9.93551 13.3363 9.84502 13.4197C9.75454 13.503 9.63499 13.5506 9.50997 13.553C9.38494 13.5555 9.26351 13.5126 9.16963 13.4328C9.07576 13.353 9.01626 13.2421 9.00287 13.1221L8.99987 13.0352L9.4998 6.27655C9.50437 6.21318 9.52184 6.15131 9.55121 6.09447C9.58058 6.03764 9.62128 5.98696 9.67098 5.94534C9.72067 5.90372 9.77838 5.87198 9.8408 5.85194C9.90322 5.8319 9.96912 5.82395 10.0347 5.82855H10.0357ZM9.99974 1.96552H6.00026C5.88325 1.96548 5.76994 2.00508 5.68005 2.07741C5.59016 2.14974 5.52939 2.25023 5.50833 2.36138L5.50033 2.44828V4.37931H10.4997V2.44828C10.4997 2.33529 10.4587 2.22586 10.3838 2.13906C10.3089 2.05226 10.2048 1.99358 10.0897 1.97324L9.99974 1.96552Z\" />\n  </svg>\n);\n\nexport const AnalysisIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\" />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M11.7497 4.22129L11.7581 4.2618C11.7838 4.4337 11.7584 4.91737 11.3386 5.77311C10.852 6.76434 10.0245 7.866 9.01143 8.87879C7.99806 9.89217 6.89698 10.7194 5.90605 11.2059C4.96901 11.6651 4.47747 11.6523 4.35364 11.6168L4.34548 11.576C4.32014 11.4041 4.34548 10.9201 4.76505 10.0641C5.25193 9.07284 6.0797 7.97148 7.09249 6.95869C8.10587 5.94502 9.20694 5.11812 10.1979 4.63125C11.1343 4.17293 11.6259 4.18546 11.7497 4.221V4.22129ZM12.4752 3.4955C11.5629 2.58294 8.91353 3.75656 6.50568 6.11227L6.37456 6.24192C3.93291 8.68387 2.69897 11.4137 3.62814 12.3426C4.54041 13.2551 7.18981 12.0812 9.59766 9.7258L9.72878 9.59614C12.1704 7.15419 13.4044 4.42438 12.4752 3.4955ZM9.01143 6.95927C10.0248 7.97264 10.852 9.07372 11.3389 10.0647C11.7984 11.0023 11.7852 11.4932 11.7503 11.6176L11.7095 11.6258C11.537 11.6511 11.0533 11.6258 10.1973 11.2062C9.20636 10.7194 8.1047 9.89158 7.09191 8.87879C6.07854 7.86542 5.25134 6.76434 4.76447 5.77311C4.30557 4.83637 4.3181 4.34483 4.35364 4.221L4.39443 4.21285C4.56692 4.1875 5.05059 4.21285 5.90663 4.63241C6.89728 5.1187 7.99864 5.94648 9.01143 6.95927ZM9.85844 6.37304L9.72878 6.24192C7.28683 3.80027 4.55702 2.56633 3.62814 3.4955C2.71558 4.40777 3.8892 7.05717 6.2449 9.46502L6.37456 9.59614C8.81651 12.0378 11.551 13.2668 12.4752 12.3426C13.3878 11.4303 12.2138 8.78089 9.85844 6.37304ZM13.4321 7.33455C13.3495 7.41272 13.2835 7.50663 13.2379 7.61074C13.1923 7.71484 13.168 7.82703 13.1665 7.94068C13.165 8.05433 13.1862 8.16714 13.229 8.27244C13.2718 8.37774 13.3352 8.47339 13.4156 8.55376C13.496 8.63413 13.5916 8.69758 13.6969 8.74037C13.8022 8.78316 13.915 8.80441 14.0287 8.80288C14.1423 8.80134 14.2545 8.77705 14.3586 8.73144C14.4627 8.68583 14.5566 8.61982 14.6348 8.53731C14.7873 8.3764 14.8709 8.16233 14.8679 7.94068C14.8649 7.71904 14.7755 7.50731 14.6188 7.35056C14.4621 7.19382 14.2503 7.10444 14.0287 7.10145C13.807 7.09846 13.593 7.18209 13.4321 7.33455ZM7.35122 1.25372C7.26937 1.33207 7.20398 1.42597 7.15891 1.52993C7.11384 1.63388 7.08999 1.74579 7.08875 1.85909C7.08751 1.97239 7.10892 2.0848 7.15172 2.18971C7.19451 2.29462 7.25783 2.38993 7.33796 2.47004C7.41809 2.55015 7.51342 2.61345 7.61834 2.65622C7.72326 2.69899 7.83567 2.72037 7.94897 2.71911C8.06227 2.71784 8.17418 2.69396 8.27812 2.64887C8.38207 2.60377 8.47595 2.53836 8.55428 2.45649C8.70801 2.29578 8.79271 2.08127 8.79023 1.85889C8.78775 1.63651 8.69829 1.42393 8.54102 1.2667C8.38374 1.10946 8.17115 1.02005 7.94877 1.01763C7.72638 1.0152 7.51189 1.09995 7.35122 1.25372ZM1.27419 7.36077C1.19314 7.43929 1.12852 7.53315 1.08409 7.63688C1.03966 7.74061 1.01632 7.85215 1.01541 7.96499C1.0145 8.07783 1.03605 8.18972 1.0788 8.29416C1.12155 8.39859 1.18465 8.49348 1.26443 8.57329C1.3442 8.6531 1.43906 8.71625 1.54347 8.75905C1.64788 8.80186 1.75977 8.82346 1.87261 8.8226C1.98545 8.82175 2.097 8.79846 2.20075 8.75408C2.3045 8.7097 2.39839 8.64513 2.47695 8.56412C2.63243 8.40378 2.71863 8.18874 2.71694 7.9654C2.71525 7.74206 2.62581 7.52835 2.46792 7.37038C2.31003 7.21242 2.09636 7.12287 1.87302 7.12107C1.64969 7.11928 1.4346 7.20537 1.27419 7.36077ZM7.45116 13.5383C7.37015 13.6169 7.30558 13.7108 7.2612 13.8145C7.21682 13.9183 7.19353 14.0298 7.19268 14.1427C7.19182 14.2555 7.21343 14.3674 7.25623 14.4718C7.29903 14.5762 7.36218 14.6711 7.44199 14.7509C7.5218 14.8306 7.61669 14.8937 7.72112 14.9365C7.82556 14.9792 7.93745 15.0008 8.05029 14.9999C8.16313 14.999 8.27467 14.9756 8.3784 14.9312C8.48213 14.8868 8.57599 14.8221 8.65451 14.7411C8.80991 14.5807 8.89601 14.3656 8.89421 14.1423C8.89241 13.9189 8.80286 13.7053 8.6449 13.5474C8.48693 13.3895 8.27322 13.3 8.04988 13.2983C7.82655 13.2967 7.6115 13.3828 7.45116 13.5383Z\"\n      fillOpacity=\"0.2\"\n    />\n  </svg>\n);\n\nexport const MagicIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M3.07981 6.57422L2.22738 6.82578L1.375 6.57422L1.6265 7.43609L1.375 8.29797L2.22744 8.04366L3.07981 8.29797L2.831 7.43609L3.07981 6.57422Z\"\n      fill=\"url(#paint0_linear_18039_4924)\"\n    />\n    <path\n      d=\"M8.63445 3.85273L8.25983 3.53592L7.77539 3.47361L8.0887 3.09486L8.15039 2.60498L8.52495 2.92186L9.00945 2.98411L8.69608 3.36286L8.63445 3.85273Z\"\n      fill=\"url(#paint1_linear_18039_4924)\"\n    />\n    <path\n      d=\"M6.03681 4.04956L5.23375 3.3705L4.19531 3.23694L4.867 2.425L4.99913 1.375L5.80213 2.05413L6.8405 2.18769L6.16894 2.99956L6.03681 4.04956Z\"\n      fill=\"url(#paint2_linear_18039_4924)\"\n    />\n    <path\n      d=\"M12.522 11.5454C12.4655 11.4861 12.3978 11.4387 12.3228 11.4058C12.2478 11.373 12.167 11.3554 12.0851 11.3541C12.0033 11.3528 11.922 11.3678 11.8459 11.3982C11.7699 11.4286 11.7007 11.4738 11.6424 11.5312C11.3956 11.7729 11.3894 12.1711 11.6284 12.4206L13.5568 14.4333C13.6133 14.4926 13.681 14.54 13.756 14.5729C13.831 14.6057 13.9118 14.6233 13.9936 14.6246C14.0755 14.6259 14.1568 14.6109 14.2328 14.5805C14.3088 14.5501 14.3781 14.5049 14.4364 14.4474C14.6832 14.2057 14.6894 13.8076 14.4504 13.5581L12.522 11.5454Z\"\n      fill=\"url(#paint3_linear_18039_4924)\"\n    />\n    <path\n      d=\"M10.1057 3.74423C10.6429 3.44848 11.3063 3.79023 11.3856 4.40348L11.642 6.38679C11.6813 6.69371 11.8245 6.97806 12.0477 7.19236L13.4836 8.56698C13.9278 8.99223 13.8113 9.73585 13.259 10.0015L11.4727 10.8609C11.195 10.9952 10.9717 11.221 10.8408 11.5002L9.99065 13.3064C9.72784 13.8647 8.99265 13.9824 8.57209 13.5335L7.21171 12.0815C7.00174 11.8568 6.72044 11.7118 6.41565 11.6712L4.45415 11.4119C3.84765 11.3318 3.50965 10.661 3.80209 10.1178L4.74765 8.36142C4.89462 8.08832 4.94409 7.77329 4.8879 7.46829L4.52528 5.50248C4.41309 4.89436 4.93965 4.36198 5.54109 4.47542L7.48509 4.84198C7.7869 4.89879 8.09903 4.84873 8.36859 4.70017L10.1057 3.74423Z\"\n      fill=\"url(#paint4_linear_18039_4924)\"\n    />\n    <defs>\n      <linearGradient\n        id=\"paint0_linear_18039_4924\"\n        x1=\"2.22741\"\n        y1=\"6.57422\"\n        x2=\"2.22741\"\n        y2=\"8.29797\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint1_linear_18039_4924\"\n        x1=\"8.39242\"\n        y1=\"2.60498\"\n        x2=\"8.39242\"\n        y2=\"3.85273\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint2_linear_18039_4924\"\n        x1=\"5.51791\"\n        y1=\"1.375\"\n        x2=\"5.51791\"\n        y2=\"4.04956\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint3_linear_18039_4924\"\n        x1=\"13.0394\"\n        y1=\"11.354\"\n        x2=\"13.0394\"\n        y2=\"14.6247\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint4_linear_18039_4924\"\n        x1=\"8.72558\"\n        y1=\"3.63623\"\n        x2=\"8.72558\"\n        y2=\"13.8086\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const ChevronIcon = ({ isOpen }: { isOpen?: boolean }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    className={cn(transCls, isOpen ? '' : 'rotate-180')}\n  >\n    <path\n      d=\"M3.28125 9.65625L7.58125 5.35625C7.63125 5.30625 7.69375 5.28125 7.75625 5.28125C7.81875 5.28125 7.88125 5.30625 7.93125 5.35625L12.2312 9.65625\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n    />\n  </svg>\n);\n\n// form field icons\nexport const SNIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M14.51 2C14.79 2 15 2.21135 15 2.49315V13.5067C15 13.7885 14.79 13.9999 14.51 13.9999H1.49013C1.42536 14.0014 1.36096 13.9897 1.30082 13.9655C1.24067 13.9412 1.18605 13.905 1.14024 13.8589C1.09443 13.8128 1.05839 13.7578 1.03431 13.6972C1.01023 13.6367 0.998601 13.5719 1.00013 13.5067V2.49315C1.00013 2.21135 1.21013 2 1.49013 2H14.51ZM14.02 2.98629H1.98012V12.9901H14.02V2.98629ZM11.6867 8.951C11.71 8.97448 11.71 8.97448 11.7334 8.97448C11.7567 8.99796 11.7567 8.99796 11.78 8.99796C11.8034 8.99796 11.8034 9.02145 11.8267 9.02145C11.85 9.02145 11.85 9.04493 11.8734 9.04493C11.8967 9.04493 11.8967 9.06841 11.92 9.06841C11.9434 9.06841 11.9667 9.0919 11.9667 9.0919L11.99 9.11538C11.99 9.13886 12.0134 9.13886 12.0134 9.16235C12.0367 9.16235 12.0367 9.18583 12.0367 9.18583C12.0367 9.20931 12.06 9.20931 12.06 9.2328C12.0834 9.25628 12.0834 9.25628 12.0834 9.27976V9.49111C12.06 9.51459 12.06 9.51459 12.06 9.53808C12.0367 9.56156 12.0367 9.56156 12.0367 9.58504C12.0367 9.60852 12.0134 9.60853 12.0134 9.63201C12.0134 9.65549 11.99 9.65549 11.99 9.67897C11.99 9.70246 11.9667 9.70246 11.9667 9.72594L11.9434 9.74942L11.92 9.77291C11.8967 9.77291 11.8967 9.79639 11.8734 9.79639L9.51672 11.2289C9.43847 11.2738 9.35016 11.2981 9.26006 11.2993C9.17551 11.302 9.09182 11.2815 9.01787 11.2402C8.94393 11.1989 8.88248 11.1381 8.84006 11.0645C8.80631 11.009 8.78376 10.9473 8.7737 10.8831C8.76364 10.8188 8.76627 10.7531 8.78144 10.6899C8.79661 10.6266 8.82402 10.567 8.86211 10.5144C8.90019 10.4619 8.9482 10.4174 9.00339 10.3835L9.86672 9.86684H4.3601C4.10344 9.86684 3.87011 9.72594 3.87011 9.44414C3.87011 9.16235 4.0801 8.951 4.3601 8.951H11.6867ZM6.46008 4.72404C6.51524 4.69012 6.57649 4.66746 6.64034 4.65736C6.7042 4.64727 6.7694 4.64992 6.83224 4.66519C6.89507 4.68045 6.9543 4.70802 7.00655 4.74633C7.0588 4.78463 7.10304 4.83291 7.13674 4.88842C7.17045 4.94393 7.19296 5.00558 7.20299 5.06984C7.21303 5.13411 7.21038 5.19973 7.19522 5.26297C7.18005 5.32621 7.15266 5.38582 7.1146 5.4384C7.07654 5.49099 7.02856 5.53551 6.97341 5.56943L6.11009 6.08606H11.6167C11.8967 6.08606 12.1067 6.29741 12.1067 6.57921C12.1067 6.861 11.8967 7.07235 11.6167 7.07235H4.33677C4.2901 7.07235 4.26677 7.04887 4.2201 7.04887H4.17344C4.15556 7.04703 4.13896 7.03867 4.12677 7.02538C4.12677 7.0019 4.10344 7.0019 4.10344 7.0019C4.0801 7.0019 4.05677 6.97842 4.03344 6.95493C4.03344 6.93145 4.01011 6.93145 4.01011 6.93145C3.98677 6.90797 3.96344 6.861 3.94011 6.83752C3.91677 6.83752 3.91677 6.81404 3.91677 6.81404C3.91677 6.79055 3.89344 6.79055 3.89344 6.76707C3.87011 6.74359 3.87011 6.74359 3.87011 6.7201V6.6196C3.87365 6.60407 3.88179 6.58999 3.89344 6.57921V6.48527C3.91677 6.46179 3.91677 6.46179 3.91677 6.43831C3.94011 6.41482 3.94011 6.41482 3.94011 6.39134C3.94011 6.36786 3.96344 6.36786 3.96344 6.34437C3.96344 6.32089 3.98677 6.32089 3.98677 6.29741C3.98677 6.27392 4.01011 6.27392 4.01011 6.25044C4.01011 6.22696 4.03344 6.20347 4.03344 6.20347L4.05677 6.17999C4.0801 6.17999 4.0801 6.15651 4.10344 6.15651L6.46008 4.72404Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const TextIcon = () => {\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n      <path\n        d=\"M10.4999 14.016H5.49994C5.4353 14.0149 5.37111 14.0269 5.31124 14.0513C5.25138 14.0757 5.19709 14.112 5.15166 14.158C5.10623 14.204 5.0706 14.2587 5.04693 14.3189C5.02326 14.379 5.01203 14.4434 5.01394 14.508C5.01394 14.789 5.22194 15 5.49994 15H10.4999C10.7779 15 10.9859 14.79 10.9859 14.508C10.988 14.4433 10.9769 14.3789 10.9532 14.3187C10.9296 14.2585 10.894 14.2037 10.8485 14.1577C10.8031 14.1117 10.7487 14.0754 10.6888 14.051C10.6289 14.0267 10.5646 14.0147 10.4999 14.016ZM14.6459 1.00098H1.353C1.151 1.00098 1 1.21098 1 1.49198C1 1.77298 1.151 1.98398 1.353 1.98398H14.6459C14.8479 1.98398 14.9999 1.77398 14.9999 1.49198C14.9829 1.21098 14.8309 1.00098 14.6459 1.00098ZM8.43594 12.685V1.89198C8.43594 1.68998 8.22593 1.53898 7.94393 1.53898C7.66293 1.53898 7.45194 1.68998 7.45194 1.89198V12.685C7.45194 12.887 7.66293 13.039 7.94393 13.039C8.22593 13.022 8.43594 12.87 8.43594 12.685Z\"\n        fill=\"#6F829E\"\n      />\n    </svg>\n  );\n};\n\nexport const NumberIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M2.667 11.111V4H1.856C1.60188 4.27268 1.31269 4.51042 0.996 4.707C0.645 4.907 0.313 5.046 0 5.125V6.201C0.638 6.015 1.172 5.716 1.602 5.305V11.111H2.667ZM9.777 11.111V10.173H6.554C6.692 9.789 7.108 9.35 7.8 8.855C8.439 8.385 8.884 8.011 9.137 7.731C9.559 7.223 9.77 6.673 9.77 6.081C9.77 5.468 9.574 4.967 9.183 4.576C8.79 4.192 8.282 4 7.655 4C6.956 4 6.402 4.25 5.993 4.752C5.589 5.221 5.382 5.846 5.369 6.628H6.354C6.372 6.061 6.487 5.635 6.697 5.348C6.902 5.048 7.209 4.898 7.619 4.898C8.004 4.898 8.296 4.996 8.495 5.192C8.694 5.387 8.793 5.68 8.793 6.071C8.793 6.475 8.646 6.856 8.35 7.214C8.176 7.409 7.869 7.676 7.43 8.014C6.682 8.574 6.198 8.998 5.975 9.284C5.54989 9.79691 5.32218 10.4449 5.333 11.111H9.778H9.777ZM13.799 11.111C14.455 11.111 14.993 10.907 15.413 10.498C15.804 10.095 16 9.578 16 8.945C16 8.536 15.896 8.205 15.69 7.948C15.494 7.693 15.218 7.504 14.86 7.383C15.54 7.133 15.88 6.633 15.88 5.878C15.88 5.297 15.695 4.837 15.327 4.498C14.953 4.166 14.455 4 13.834 4C13.224 4 12.732 4.188 12.358 4.565C11.955 4.949 11.728 5.479 11.676 6.156H12.6C12.634 5.741 12.758 5.425 12.97 5.208C13.178 4.997 13.469 4.891 13.843 4.891C14.216 4.891 14.496 4.984 14.68 5.169C14.858 5.354 14.947 5.616 14.947 5.955C14.947 6.3 14.849 6.565 14.654 6.751C14.458 6.936 14.174 7.028 13.799 7.028H13.359V7.814H13.808C14.216 7.814 14.524 7.91 14.731 8.102C14.956 8.294 15.068 8.591 15.068 8.993C15.068 9.325 14.962 9.61 14.748 9.846C14.501 10.102 14.182 10.229 13.791 10.229C13.428 10.229 13.135 10.114 12.911 9.884C12.657 9.642 12.522 9.287 12.505 8.821H11.555C11.607 9.587 11.849 10.171 12.28 10.574C12.666 10.932 13.172 11.111 13.8 11.111H13.799Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const SubformIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M10.398 1C10.713 1 11 1.216 11 1.505V7.225H14C14.2449 7.22503 14.4813 7.31496 14.6644 7.47772C14.8474 7.64047 14.9643 7.86475 14.993 8.108L15 8.225V13.725C15 13.9699 14.91 14.2063 14.7473 14.3894C14.5845 14.5724 14.3603 14.6893 14.117 14.718L14 14.725H10.938C10.842 14.891 10.642 15 10.398 15H1.602C1.258 15 1 14.784 1 14.495V1.505C1 1.216 1.258 1 1.602 1H10.398ZM10 2H2V14H10V2ZM14 8.225H11V13.725H14V8.225ZM6.056 8.725C6.3 8.725 6.5 8.949 6.5 9.225C6.5 9.47 6.343 9.675 6.135 9.717L6.055 9.725H2.945C2.698 9.725 2.5 9.501 2.5 9.225C2.5 8.98 2.657 8.775 2.865 8.733L2.945 8.725H6.056ZM9 5.725C9.12495 5.72477 9.24545 5.77133 9.33778 5.85551C9.43012 5.93969 9.48759 6.05539 9.49888 6.17982C9.51017 6.30426 9.47446 6.42841 9.39878 6.52783C9.3231 6.62725 9.21295 6.69474 9.09 6.717L9 6.725H3C2.87505 6.72523 2.75455 6.67867 2.66222 6.59449C2.56988 6.51031 2.51241 6.39461 2.50112 6.27018C2.48984 6.14574 2.52554 6.02159 2.60122 5.92217C2.6769 5.82275 2.78705 5.75526 2.91 5.733L3 5.725H9Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const EmptyCardIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"180\" height=\"124\" viewBox=\"0 0 180 124\" fill=\"none\">\n  <path d=\"M75.9984 98.2004C75.9984 87.2651 67.1337 78.4004 56.1984 78.4004C45.2632 78.4004 36.3984 87.2651 36.3984 98.2004\" fill=\"url(#paint0_linear_27318_10700)\"/>\n  <path d=\"M138.078 40.1919L137.393 39.9491L137.195 39.7526L133.041 35.5946L127.48 30.0312C125.052 32.612 123.701 36.0221 123.703 39.5652C123.716 47.263 129.94 53.4841 137.635 53.5009C143.527 53.5009 148.561 49.8384 150.598 44.6708L146.53 43.2176L138.078 40.1919Z\" fill=\"#B9D5FF\"/>\n  <path d=\"M136.642 36.1227L134.723 34.2024L127.547 27.0297C130.017 24.7044 133.252 23.3634 136.642 23.2598V36.1227Z\" fill=\"#DEEBFF\"/>\n  <path d=\"M138.406 24.6512C145.897 24.8974 151.882 31.0302 151.898 38.5767C151.898 40.0703 151.662 41.5042 151.229 42.8524L138.406 38.266V24.6512Z\" fill=\"#2EBDE4\"/>\n  <path d=\"M91.12 52.3008H90.88C89.296 52.3008 88 50.8048 88 48.9837V43.6179C88 41.7967 89.296 40.3008 90.88 40.3008H91.12C92.704 40.3008 94 41.7967 94 43.6179V49.0162C94 50.8374 92.704 52.3008 91.12 52.3008Z\" fill=\"#1973FF\"/>\n  <path d=\"M124.518 45.1609C123.718 44.3609 122.598 43.8809 121.438 43.8809H60.4381C59.2781 43.8809 58.1581 44.3209 57.3581 45.1609C56.5581 45.9609 56.0781 47.0809 56.0781 48.2409V87.4409C56.0781 88.6009 56.5181 89.7209 57.3581 90.5209C58.1581 91.3209 59.2781 91.8009 60.4381 91.8009H88.0381V94.7209H88.1181L75.7581 102.481C75.1581 102.961 74.7981 103.681 74.7181 104.441C74.6381 105.201 74.8781 105.961 75.3581 106.561C75.8381 107.161 76.5581 107.521 77.3181 107.601C78.0781 107.681 78.8381 107.401 79.4381 106.921L91.2381 99.5209L102.718 106.961C103.918 108.001 105.758 107.881 106.838 106.681C107.878 105.481 107.758 103.641 106.558 102.561L94.1581 94.4809C94.0781 94.4009 93.9581 94.3209 93.8781 94.2409V91.7609H121.478C122.638 91.7609 123.758 91.3209 124.558 90.4809C125.358 89.6809 125.838 88.5609 125.838 87.4009V48.2409C125.798 47.0809 125.318 46.0009 124.518 45.1609Z\" fill=\"url(#paint1_linear_27318_10700)\"/>\n  <path d=\"M82.6 77.9206C82.6 79.4406 81.32 80.7206 79.8 80.7206C78.28 80.7206 77 79.4406 77 77.9206V64.4406C77 62.9206 78.28 61.6406 79.8 61.6406C81.32 61.6406 82.6 62.9206 82.6 64.4406V77.9206Z\" fill=\"#91BCFF\"/>\n  <path d=\"M93.6 77.9205C93.6 79.4405 92.32 80.7205 90.8 80.7205C89.28 80.7205 88 79.4405 88 77.9205V56.3605C88 54.8005 89.28 53.5605 90.8 53.5605C92.32 53.5605 93.6 54.8005 93.6 56.3605V77.9205Z\" fill=\"#91BCFF\"/>\n  <path d=\"M104.6 77.9207C104.6 79.4407 103.32 80.7207 101.8 80.7207C100.28 80.7207 99 79.4407 99 77.9207V72.5207C99 71.0007 100.28 69.7207 101.8 69.7207C103.32 69.7207 104.6 71.0007 104.6 72.5207V77.9207Z\" fill=\"#91BCFF\"/>\n  <path d=\"M88.0383 91.7998V94.7198H88.1183L75.7583 102.48C75.1583 102.96 74.7983 103.68 74.7183 104.44C74.6383 105.2 74.8783 105.96 75.3583 106.56C75.8383 107.16 76.5583 107.52 77.3183 107.6C78.0783 107.68 78.8383 107.4 79.4383 106.92L91.2383 99.5198L102.718 106.96C103.918 108 105.758 107.88 106.838 106.68C107.878 105.48 107.758 103.64 106.558 102.56L94.1583 94.4798C94.0783 94.3998 93.9583 94.3198 93.8783 94.2398V91.7598L88.0383 91.7998Z\" fill=\"#0265FF\"/>\n  <path d=\"M164.797 98.1992C164.797 76.6601 147.336 59.1992 125.797 59.1992C104.258 59.1992 86.7969 76.6601 86.7969 98.1992\" fill=\"url(#paint2_linear_27318_10700)\"/>\n  <path d=\"M146.798 84.5859C147.698 86.3859 138.398 99.8859 138.398 104.386C138.398 108.886 141.698 106.786 145.598 106.786C149.498 106.786 153.398 110.086 152.798 102.286C152.198 94.4859 145.898 82.7859 146.798 84.5859Z\" fill=\"url(#paint3_linear_27318_10700)\" fill-opacity=\"0.2\"/>\n  <path d=\"M145.598 100.486L144.998 104.686L142.898 103.786L144.998 106.486L144.698 111.886H146.798L146.198 104.086L148.298 101.386L145.898 103.186L145.598 100.486Z\" fill=\"#0265FF\"/>\n  <path d=\"M54.9969 98.292C55.4469 99.192 50.7969 105.942 50.7969 108.192C50.7969 110.442 52.4469 109.392 54.3969 109.392C56.3469 109.392 58.2969 111.042 57.9969 107.142C57.6969 103.242 54.5469 97.392 54.9969 98.292Z\" fill=\"url(#paint4_linear_27318_10700)\" fill-opacity=\"0.2\"/>\n  <path d=\"M54.3969 106.242L54.0969 108.342L53.0469 107.892L54.0969 109.242L53.9469 111.942H54.9969L54.6969 108.042L55.7469 106.692L54.5469 107.592L54.3969 106.242Z\" fill=\"#0265FF\"/>\n  <path d=\"M36.1 98.2456C36.325 98.6956 34 102.071 34 103.196C34 104.321 34.825 103.796 35.8 103.796C36.775 103.796 37.75 104.621 37.6 102.671C37.45 100.721 35.875 97.7956 36.1 98.2456Z\" fill=\"url(#paint5_linear_27318_10700)\" fill-opacity=\"0.2\"/>\n  <path d=\"M35.8 102.221L35.65 103.271L35.125 103.046L35.65 103.721L35.575 105.071H36.1L35.95 103.121L36.475 102.446L35.875 102.896L35.8 102.221Z\" fill=\"#0265FF\"/>\n  <path d=\"M48.8069 16C48.8069 19.7647 48.041 22.5882 46.5091 24.4706C44.9772 26.3529 41.6069 27.2941 36.3984 27.2941C41.1396 27.5294 44.3567 28.3137 46.0495 29.6471C47.7423 30.9805 48.6615 34.4314 48.8069 40C48.8069 34.6667 49.4197 31.2157 50.6452 29.6471C51.8708 28.0784 54.3218 27.1373 57.9984 26.8235C54.1075 26.5139 51.6075 25.706 50.4984 24.4C49.3893 23.094 48.8255 20.294 48.8069 16Z\" fill=\"url(#paint6_linear_27318_10700)\" fill-opacity=\"0.2\"/>\n  <path d=\"M19.2043 59.1992C19.2043 61.0816 18.8213 62.4933 18.0553 63.4345C17.2894 64.3757 15.6043 64.8463 13 64.8463C15.3706 64.9639 16.9791 65.3561 17.8255 66.0227C18.672 66.6894 19.1315 68.4149 19.2043 71.1992C19.2043 68.5325 19.5106 66.8071 20.1234 66.0227C20.7362 65.2384 21.9617 64.7678 23.8 64.611C21.9035 64.4797 20.678 64.0875 20.1234 63.4345C19.5689 62.7815 19.2625 61.3697 19.2043 59.1992Z\" fill=\"url(#paint7_linear_27318_10700)\" fill-opacity=\"0.2\"/>\n  <defs>\n    <linearGradient id=\"paint0_linear_27318_10700\" x1=\"56.1984\" y1=\"78.4004\" x2=\"56.1984\" y2=\"98.2004\" gradientUnits=\"userSpaceOnUse\">\n      <stop offset=\"0.495192\" stop-color=\"#0265FF\" stop-opacity=\"0.1\"/>\n      <stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\"/>\n    </linearGradient>\n    <linearGradient id=\"paint1_linear_27318_10700\" x1=\"90.4981\" y1=\"18.0009\" x2=\"90.4981\" y2=\"97.0009\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\" stop-opacity=\"0\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\" stop-opacity=\"0.3\"/>\n    </linearGradient>\n    <linearGradient id=\"paint2_linear_27318_10700\" x1=\"125.797\" y1=\"59.1992\" x2=\"125.797\" y2=\"98.1992\" gradientUnits=\"userSpaceOnUse\">\n      <stop offset=\"0.495192\" stop-color=\"#0265FF\" stop-opacity=\"0.1\"/>\n      <stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\"/>\n    </linearGradient>\n    <linearGradient id=\"paint3_linear_27318_10700\" x1=\"145.629\" y1=\"84.4004\" x2=\"145.629\" y2=\"107.479\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\"/>\n    </linearGradient>\n    <linearGradient id=\"paint4_linear_27318_10700\" x1=\"54.4122\" y1=\"98.1992\" x2=\"54.4122\" y2=\"109.739\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\"/>\n    </linearGradient>\n    <linearGradient id=\"paint5_linear_27318_10700\" x1=\"35.8077\" y1=\"98.1992\" x2=\"35.8077\" y2=\"103.969\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\"/>\n    </linearGradient>\n    <linearGradient id=\"paint6_linear_27318_10700\" x1=\"1419.09\" y1=\"2416\" x2=\"1419.09\" y2=\"16\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\"/>\n    </linearGradient>\n    <linearGradient id=\"paint7_linear_27318_10700\" x1=\"704.346\" y1=\"1259.2\" x2=\"704.346\" y2=\"59.1992\" gradientUnits=\"userSpaceOnUse\">\n      <stop stop-color=\"white\"/>\n      <stop offset=\"1\" stop-color=\"#0265FF\"/>\n    </linearGradient>\n  </defs>\n</svg>\n)\n\nexport const MultilineTextIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M14.5558 10H10.3658C10.1348 10 9.96085 10.21 9.96085 10.492C9.96085 10.773 10.1348 10.984 10.3658 10.984H14.5558C14.7868 10.984 14.9608 10.774 14.9608 10.492C14.9608 10.211 14.7868 10 14.5558 10ZM14.5558 13H10.3658C10.1348 13 9.96085 13.21 9.96085 13.492C9.96085 13.773 10.1348 13.984 10.3658 13.984H14.5558C14.7868 13.984 14.9608 13.774 14.9608 13.492C14.9608 13.211 14.7868 13 14.5558 13ZM14.576 1H1.424C1.182 1 1 1.21 1 1.491C1 1.772 1.182 1.983 1.424 1.983H14.576C14.818 1.983 15 1.773 15 1.491C14.98 1.21 14.798 1 14.576 1ZM8.32685 14.5389L8.32687 1.998C8.32687 1.735 8.11688 1.538 7.83488 1.538C7.55387 1.538 7.34288 1.735 7.34288 1.998L7.34285 14.54C7.34285 14.803 7.55385 15 7.83485 15C8.11685 14.978 8.32685 14.78 8.32685 14.54V14.5389Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const FormFieldIcon = ({\n  size = 28\n}) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\">\n    <path d=\"M18.3749 24.5282H9.62489C9.51177 24.5263 9.39944 24.5473 9.29468 24.59C9.18992 24.6328 9.09492 24.6963 9.01541 24.7768C8.93591 24.8573 8.87356 24.953 8.83213 25.0583C8.7907 25.1636 8.77106 25.2762 8.77439 25.3892C8.77439 25.881 9.13839 26.2502 9.62489 26.2502H18.3749C18.8614 26.2502 19.2254 25.8827 19.2254 25.3892C19.229 25.2761 19.2095 25.1634 19.1682 25.058C19.1268 24.9526 19.0645 24.8567 18.9849 24.7762C18.9054 24.6957 18.8103 24.6322 18.7054 24.5895C18.6005 24.5469 18.4881 24.5261 18.3749 24.5282ZM25.6304 1.75195H2.36775C2.01425 1.75195 1.75 2.11945 1.75 2.6112C1.75 3.10295 2.01425 3.4722 2.36775 3.4722H25.6304C25.9839 3.4722 26.2499 3.1047 26.2499 2.6112C26.2201 2.11945 25.9541 1.75195 25.6304 1.75195ZM14.7629 22.199V3.3112C14.7629 2.9577 14.3954 2.69345 13.9019 2.69345C13.4101 2.69345 13.0409 2.9577 13.0409 3.3112V22.199C13.0409 22.5525 13.4101 22.8185 13.9019 22.8185C14.3954 22.7887 14.7629 22.5227 14.7629 22.199Z\" fill=\"#4D609F\"/>\n  </svg>\n)\n\nexport const DatetimeIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M5.396 4.383H5.576C5.846 4.383 5.95 3.993 5.95 3.723V1.569C5.95 1.299 5.815 1 5.546 1H5.366C5.096 1 4.978 1.299 4.978 1.569V3.813C4.978 3.993 5.128 4.383 5.396 4.383ZM10.322 4.383H10.5C10.77 4.383 10.89 3.993 10.89 3.723V1.569C10.89 1.299 10.783 1 10.516 1H10.335C10.066 1 9.933 1.299 9.933 1.569V3.813C9.933 3.993 10.142 4.383 10.322 4.383ZM13.147 1.97105L11.5 1.971V2.924L13.147 2.92405C13.685 2.92405 14.135 3.45405 14.135 3.99305V4.89105H1.928V3.99305C1.928 3.45505 2.378 2.92505 2.917 2.92505L4.5 2.925V1.972L3.005 1.97205C1.928 1.97205 1 3.09505 1 4.08205V12.7911C1 13.7791 1.90505 15 2.98305 15H13.2131C14.2011 15 15 13.8681 15 12.7911V4.08305C14.912 3.09605 14.224 1.97305 13.146 1.97305V1.97005L13.147 1.97105ZM14.084 12.7011C14.084 13.3291 13.7541 14.044 13.1241 14.044H2.98505C2.44705 14.044 1.959 13.3291 1.959 12.7911V5.78805H14.088V12.7001H14.086L14.084 12.7011ZM9.63004 6.94605C9.96004 6.94605 10.178 7.34705 10.072 7.71005L10.039 7.80005L7.69705 12.9791C7.57005 13.2561 7.28405 13.3561 7.05705 13.2021C6.85705 13.0641 6.77005 12.7721 6.84205 12.5151L6.87705 12.4191L8.83205 8.09705H6.35005C6.12005 8.09705 5.92805 7.89505 5.88905 7.62605L5.88105 7.52205C5.88105 7.24005 6.04705 7.00505 6.26505 6.95605L6.34905 6.94705L9.63004 6.94605ZM9.5 1.972V2.924H6.43V1.972H9.502H9.5Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const RadioButtonIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M6.5 8C6.5 8.39782 6.65804 8.77936 6.93934 9.06066C7.22064 9.34196 7.60218 9.5 8 9.5C8.39782 9.5 8.77936 9.34196 9.06066 9.06066C9.34196 8.77936 9.5 8.39782 9.5 8C9.5 7.60218 9.34196 7.22064 9.06066 6.93934C8.77936 6.65804 8.39782 6.5 8 6.5C7.60218 6.5 7.22064 6.65804 6.93934 6.93934C6.65804 7.22064 6.5 7.60218 6.5 8Z\"\n      fill=\"#6F829E\"\n    />\n    <path\n      d=\"M8 1C4.15 1 1 4.15 1 8C1 11.85 4.15 15 8 15C11.85 15 15 11.85 15 8C15 4.15 11.85 1 8 1ZM8 14.02C4.687 14.02 1.98 11.313 1.98 8C1.98 4.687 4.687 1.98 8 1.98C11.313 1.98 14.02 4.687 14.02 8C14.02 11.313 11.313 14.02 8 14.02Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const ImgIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M12.6671 15.0001H3.33312C3.02589 15.0032 2.72113 14.9449 2.43669 14.8288C2.15225 14.7126 1.89384 14.5409 1.67658 14.3236C1.45933 14.1064 1.2876 13.848 1.17144 13.5635C1.05529 13.2791 0.997041 12.9743 1.00012 12.6671V3.33312C0.997041 3.02589 1.05529 2.72113 1.17144 2.43669C1.2876 2.15225 1.45933 1.89384 1.67658 1.67658C1.89384 1.45933 2.15225 1.2876 2.43669 1.17144C2.72113 1.05529 3.02589 0.997041 3.33312 1.00012H12.6671C12.9743 0.997041 13.2791 1.05529 13.5635 1.17144C13.848 1.2876 14.1064 1.45933 14.3236 1.67658C14.5409 1.89384 14.7126 2.15225 14.8288 2.43669C14.9449 2.72113 15.0032 3.02589 15.0001 3.33312V12.6671C15.0032 12.9743 14.9449 13.2791 14.8288 13.5635C14.7126 13.848 14.5409 14.1064 14.3236 14.3236C14.1064 14.5409 13.848 14.7126 13.5635 14.8288C13.2791 14.9449 12.9743 15.0032 12.6671 15.0001ZM3.38512 2.00012C2.60012 2.00012 2.00012 2.60012 2.00012 3.38512V12.6151C2.00012 13.4001 2.60012 14.0001 3.38512 14.0001H12.6151C13.4001 14.0001 14.0001 13.4001 14.0001 12.6151V3.38512C14.0001 2.60012 13.4001 2.00012 12.6151 2.00012H3.38512ZM12.8141 5.61012C12.8653 5.65137 12.9079 5.70232 12.9394 5.76005C12.9709 5.81778 12.9907 5.88116 12.9977 5.94656C13.0046 6.01195 12.9986 6.07808 12.98 6.14115C12.9614 6.20422 12.9305 6.263 12.8891 6.31412C12.1811 7.19212 11.4751 7.75112 10.7551 7.97712C10.2921 8.12212 9.77512 8.23312 9.14312 8.33112L8.42912 8.43212L7.62612 8.53212C6.47612 8.67412 5.93812 8.77912 5.62812 8.94212C4.66512 9.45112 4.13412 10.1511 3.99412 11.0751C3.98648 11.1419 3.96546 11.2064 3.93231 11.2649C3.89917 11.3234 3.85457 11.3746 3.80119 11.4154C3.74782 11.4563 3.68675 11.4859 3.62165 11.5026C3.55655 11.5193 3.48875 11.5227 3.4223 11.5127C3.35585 11.5026 3.29212 11.4792 3.23491 11.4439C3.1777 11.4086 3.12819 11.3622 3.08934 11.3073C3.05049 11.2525 3.0231 11.1904 3.0088 11.1247C2.9945 11.059 2.99359 10.9911 3.00612 10.9251C3.19512 9.67512 3.92612 8.70912 5.16112 8.05812C5.59412 7.82912 6.13212 7.71512 7.25412 7.57112L8.08612 7.46812C8.31112 7.43912 8.49812 7.41512 8.67612 7.39012C9.41312 7.28612 9.97812 7.17312 10.4561 7.02312C10.9591 6.86512 11.5161 6.42412 12.1111 5.68612C12.1944 5.58297 12.3153 5.51712 12.4471 5.50305C12.5789 5.48899 12.7109 5.52786 12.8141 5.61112V5.61012ZM5.01412 4.48012C5.28291 4.48012 5.5407 4.58689 5.73077 4.77696C5.92084 4.96703 6.02762 5.22482 6.02762 5.49362C6.02762 5.76241 5.92084 6.0202 5.73077 6.21027C5.5407 6.40034 5.28291 6.50712 5.01412 6.50712C4.74532 6.50712 4.48753 6.40034 4.29746 6.21027C4.10739 6.0202 4.00062 5.76241 4.00062 5.49362C4.00062 5.22482 4.10739 4.96703 4.29746 4.77696C4.48753 4.58689 4.74532 4.48012 5.01412 4.48012Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const AttachmentIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M8 8.99974C8.113 8.99974 8.217 9.03774 8.301 9.09974L8.315 9.11274C8.342 9.13274 8.365 9.15674 8.387 9.18274L10.125 11.1697C10.2058 11.2701 10.2448 11.3977 10.2338 11.5261C10.2228 11.6545 10.1626 11.7736 10.0659 11.8587C9.9692 11.9438 9.84336 11.9883 9.71464 11.9829C9.58592 11.9775 9.46425 11.9227 9.375 11.8297L8.499 10.8297L8.5 13.9997C8.5 14.1324 8.44732 14.2595 8.35355 14.3533C8.25979 14.4471 8.13261 14.4997 8 14.4997C7.86739 14.4997 7.74021 14.4471 7.64645 14.3533C7.55268 14.2595 7.5 14.1324 7.5 13.9997L7.499 10.8297L6.625 11.8297C6.58266 11.8823 6.53012 11.9258 6.47054 11.9575C6.41096 11.9892 6.34557 12.0085 6.27832 12.0143C6.21107 12.02 6.14335 12.0121 6.07924 11.991C6.01513 11.9699 5.95596 11.9361 5.90529 11.8915C5.85462 11.8469 5.8135 11.7925 5.78441 11.7316C5.75533 11.6707 5.73887 11.6045 5.73604 11.5371C5.73321 11.4696 5.74406 11.4023 5.76795 11.3392C5.79183 11.2761 5.82824 11.2184 5.875 11.1697L7.625 9.16974L7.645 9.14774C7.65768 9.13504 7.67103 9.12302 7.685 9.11174L7.625 9.16974C7.67185 9.11641 7.72953 9.07366 7.79419 9.04435C7.85885 9.01504 7.92901 8.99983 8 8.99974ZM8 1.51074C8.88482 1.51077 9.74465 1.80417 10.4449 2.34503C11.1452 2.88588 11.6464 3.64366 11.87 4.49974H12C12.9283 4.49974 13.8185 4.86849 14.4749 5.52487C15.1313 6.18125 15.5 7.07148 15.5 7.99974C15.5 8.928 15.1313 9.81824 14.4749 10.4746C13.8185 11.131 12.9283 11.4997 12 11.4997H11.5C11.3674 11.4997 11.2402 11.4471 11.1464 11.3533C11.0527 11.2595 11 11.1324 11 10.9997C11 10.8671 11.0527 10.74 11.1464 10.6462C11.2402 10.5524 11.3674 10.4997 11.5 10.4997H12C12.3476 10.5012 12.6916 10.4301 13.0102 10.2911C13.3288 10.1521 13.6149 9.94815 13.8502 9.69234C14.0855 9.43653 14.2649 9.13447 14.3769 8.80543C14.4889 8.47639 14.5311 8.1276 14.5007 7.78135C14.4704 7.43509 14.3681 7.09898 14.2006 6.79446C14.033 6.48994 13.8037 6.22371 13.5275 6.01277C13.2512 5.80183 12.934 5.65081 12.5961 5.56937C12.2582 5.48792 11.907 5.47783 11.565 5.53974C11.4974 5.55334 11.4277 5.55282 11.3604 5.5382C11.293 5.52359 11.2294 5.4952 11.1735 5.45482C11.1176 5.41444 11.0707 5.36294 11.0357 5.30355C11.0007 5.24417 10.9783 5.17818 10.97 5.10974C10.8681 4.39464 10.5116 3.7403 9.96601 3.26693C9.42041 2.79356 8.72233 2.53294 8 2.53294C7.27767 2.53294 6.57959 2.79356 6.03399 3.26693C5.48839 3.7403 5.1319 4.39464 5.03 5.10974C5.0217 5.17818 4.99934 5.24417 4.96432 5.30355C4.9293 5.36294 4.88238 5.41444 4.8265 5.45482C4.77063 5.4952 4.707 5.52359 4.63963 5.5382C4.57225 5.55282 4.50259 5.55334 4.435 5.53974C4.09297 5.47783 3.7418 5.48792 3.40389 5.56937C3.06598 5.65081 2.74877 5.80183 2.47251 6.01277C2.19625 6.22371 1.96702 6.48994 1.79944 6.79446C1.63186 7.09898 1.52962 7.43509 1.49926 7.78135C1.46889 8.1276 1.51106 8.47639 1.62307 8.80543C1.73509 9.13447 1.91448 9.43653 2.14981 9.69234C2.38513 9.94815 2.67122 10.1521 2.98979 10.2911C3.30836 10.4301 3.65242 10.5012 4 10.4997H4.5C4.63261 10.4997 4.75979 10.5524 4.85355 10.6462C4.94732 10.74 5 10.8671 5 10.9997C5 11.1324 4.94732 11.2595 4.85355 11.3533C4.75979 11.4471 4.63261 11.4997 4.5 11.4997H4C3.54037 11.4997 3.08525 11.4092 2.66061 11.2333C2.23597 11.0574 1.85013 10.7996 1.52513 10.4746C1.20012 10.1496 0.942313 9.76377 0.766422 9.33913C0.59053 8.91449 0.5 8.45937 0.5 7.99974C0.5 7.54012 0.59053 7.08499 0.766422 6.66035C0.942313 6.23571 1.20012 5.84987 1.52513 5.52487C1.85013 5.19986 2.23597 4.94206 2.66061 4.76616C3.08525 4.59027 3.54037 4.49974 4 4.49974H4.13C4.35364 3.64366 4.85481 2.88588 5.55508 2.34503C6.25535 1.80417 7.11518 1.51077 8 1.51074Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const MultiUserIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M8.55309 6.75938C9.33971 6.19063 9.83409 5.09063 9.83409 4.08438C9.83409 2.37813 8.41834 1 6.66484 1C4.91221 1 3.49646 2.37813 3.49646 4.08438C3.49646 5.09063 4.01271 6.19063 4.77746 6.75938C3 8 1.22681 12.2875 1.00193 14.4969C0.979183 14.7594 1.15943 14.9781 1.42893 15C1.67656 15.0219 1.92331 14.8469 1.94518 14.5844C2.19281 12.2219 4.23759 7.35 6.68759 7.35C9.13759 7.35 11.1826 12.2219 11.4302 14.5844C11.4418 14.7002 11.4968 14.8074 11.5841 14.8845C11.6714 14.9615 11.7845 15.0028 11.9009 15H11.9464C12.0081 14.9966 12.0684 14.9806 12.1236 14.9531C12.1789 14.9256 12.228 14.8872 12.268 14.8401C12.3079 14.7931 12.3379 14.7384 12.356 14.6793C12.3741 14.6203 12.3801 14.5583 12.3734 14.4969C12.1258 12.2875 10.5 8 8.55309 6.75938ZM6.68759 1.91875C7.90296 1.91875 8.87509 2.88125 8.87509 4.08438C8.87487 4.37055 8.7077 4.91793 8.7077 4.91793C8.7077 4.91793 8.49998 5.5 8.23256 5.82609C8.02919 6.02743 7.78795 6.1865 7.52278 6.29412C7.25761 6.40174 6.97375 6.45578 6.68759 6.45312C5.47221 6.45312 4.50009 5.2875 4.50009 4.08438C4.50031 3.7982 4.5572 3.5149 4.66748 3.25082C4.77776 2.98674 4.93924 2.74712 5.14262 2.54578C5.34599 2.34445 5.58722 2.18538 5.85239 2.07775C6.11756 1.97013 6.40142 1.91609 6.68759 1.91875Z\"\n      fill=\"#6F829E\"\n    />\n    <path\n      d=\"M14.9892 14.4969C14.6628 11.9156 13.0005 7 11.3991 6.30006C11.8891 5.79693 12.3082 5.05318 12.3318 3.91568C12.3318 2.75631 11.6318 1.72187 11.3291 1.4375C10.8627 1 10.6527 1 10.5591 1C10.28 1 10.07 1.19688 10.07 1.45938C10.07 1.65625 10.21 1.83125 10.3963 1.89688C10.5836 2.00625 11.3527 2.90943 11.3527 3.91568C11.3527 5.18443 10.7463 5.73131 10.0936 6.14693C9.86085 6.27818 9.8136 6.58443 9.9536 6.78131C10.0008 6.86881 10.0936 6.91256 10.1872 6.95631C10.2572 6.97818 10.3272 7.00006 10.3972 7.00006C12.7772 7.81904 13.8237 13.1406 14.0101 14.6062C14.0328 14.8469 14.2428 15 14.5001 15H14.5456C14.8256 14.9781 15.012 14.7594 14.9892 14.4969Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const AddressIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M8 0C9.85651 0 11.637 0.702379 12.9497 1.95262C14.2625 3.20286 15 4.89856 15 6.66667C15 9.12222 12.6667 11.9 8 15C3.33333 11.9 1 9.12222 1 6.66667C1 4.89856 1.7375 3.20286 3.05025 1.95262C4.36301 0.702379 6.14348 0 8 0ZM8 1.11111C6.4529 1.11111 4.96917 1.69643 3.87521 2.7383C2.78125 3.78016 2.16667 5.19324 2.16667 6.66667C2.16667 8.47333 3.91783 10.7222 7.52867 13.3044L8 13.6356L8.105 13.5633C11.8383 10.96 13.7108 8.68556 13.8275 6.84889L13.8333 6.66667C13.8333 5.19324 13.2188 3.78016 12.1248 2.7383C11.0308 1.69643 9.5471 1.11111 8 1.11111ZM8 4.44444C8.61884 4.44444 9.21233 4.67857 9.64991 5.09532C10.0875 5.51207 10.3333 6.0773 10.3333 6.66667C10.3333 7.25604 10.0875 7.82127 9.64991 8.23802C9.21233 8.65476 8.61884 8.88889 8 8.88889C7.38116 8.88889 6.78767 8.65476 6.35008 8.23802C5.9125 7.82127 5.66667 7.25604 5.66667 6.66667C5.66667 6.0773 5.9125 5.51207 6.35008 5.09532C6.78767 4.67857 7.38116 4.44444 8 4.44444ZM8 5.55556C7.69058 5.55556 7.39383 5.67262 7.17504 5.88099C6.95625 6.08937 6.83333 6.37198 6.83333 6.66667C6.83333 6.96135 6.95625 7.24397 7.17504 7.45234C7.39383 7.66071 7.69058 7.77778 8 7.77778C8.30942 7.77778 8.60616 7.66071 8.82496 7.45234C9.04375 7.24397 9.16667 6.96135 9.16667 6.66667C9.16667 6.37198 9.04375 6.08937 8.82496 5.88099C8.60616 5.67262 8.30942 5.55556 8 5.55556Z\"\n      fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const LocationIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clipPath=\"url(#clip0_18039_11921)\">\n      <path\n        d=\"M6.66667 8C6.66667 8.35362 6.80714 8.69276 7.05719 8.94281C7.30724 9.19286 7.64638 9.33333 8 9.33333C8.35362 9.33333 8.69276 9.19286 8.94281 8.94281C9.19286 8.69276 9.33333 8.35362 9.33333 8C9.33333 7.64638 9.19286 7.30724 8.94281 7.05719C8.69276 6.80714 8.35362 6.66667 8 6.66667C7.64638 6.66667 7.30724 6.80714 7.05719 7.05719C6.80714 7.30724 6.66667 7.64638 6.66667 8ZM15.4667 7.46667H14.9067C14.7777 5.81937 14.0648 4.27225 12.8964 3.10398C11.7279 1.9357 10.1806 1.22305 8.53333 1.0944V0.533333C8.53333 0.391885 8.47714 0.256229 8.37712 0.15621C8.27711 0.0561903 8.14145 0 8 0C7.85855 0 7.7229 0.0561903 7.62288 0.15621C7.52286 0.256229 7.46667 0.391885 7.46667 0.533333V1.0944C5.81954 1.2233 4.27256 1.93605 3.1043 3.1043C1.93605 4.27256 1.2233 5.81954 1.0944 7.46667H0.533333C0.391885 7.46667 0.256229 7.52286 0.15621 7.62288C0.0561903 7.7229 0 7.85855 0 8C0 8.14145 0.0561903 8.27711 0.15621 8.37712C0.256229 8.47714 0.391885 8.53333 0.533333 8.53333H1.0944C1.22305 10.1806 1.9357 11.7279 3.10398 12.8964C4.27225 14.0648 5.81937 14.7777 7.46667 14.9067V15.4667C7.46667 15.6081 7.52286 15.7438 7.62288 15.8438C7.7229 15.9438 7.85855 16 8 16C8.14145 16 8.27711 15.9438 8.37712 15.8438C8.47714 15.7438 8.53333 15.6081 8.53333 15.4667V14.9067C10.1808 14.778 11.7282 14.0652 12.8967 12.8967C14.0652 11.7282 14.778 10.1808 14.9067 8.53333H15.4667C15.6081 8.53333 15.7438 8.47714 15.8438 8.37712C15.9438 8.27711 16 8.14145 16 8C16 7.85855 15.9438 7.7229 15.8438 7.62288C15.7438 7.52286 15.6081 7.46667 15.4667 7.46667ZM8.53333 13.84V12.8C8.53333 12.6586 8.47714 12.5229 8.37712 12.4229C8.27711 12.3229 8.14145 12.2667 8 12.2667C7.85855 12.2667 7.7229 12.3229 7.62288 12.4229C7.52286 12.5229 7.46667 12.6586 7.46667 12.8V13.84C6.10203 13.7136 4.82458 13.1139 3.85561 12.1447C2.88663 11.1756 2.28717 9.89799 2.16107 8.53333H3.2C3.34145 8.53333 3.4771 8.47714 3.57712 8.37712C3.67714 8.27711 3.73333 8.14145 3.73333 8C3.73333 7.85855 3.67714 7.7229 3.57712 7.62288C3.4771 7.52286 3.34145 7.46667 3.2 7.46667H2.16107C2.28741 6.1022 2.88697 4.82488 3.85593 3.85593C4.82488 2.88697 6.1022 2.28741 7.46667 2.16107V3.2C7.46667 3.34145 7.52286 3.4771 7.62288 3.57712C7.7229 3.67714 7.85855 3.73333 8 3.73333C8.14145 3.73333 8.27711 3.67714 8.37712 3.57712C8.47714 3.4771 8.53333 3.34145 8.53333 3.2V2.16107C9.89799 2.28717 11.1756 2.88663 12.1447 3.85561C13.1139 4.82458 13.7136 6.10203 13.84 7.46667H12.8C12.6586 7.46667 12.5229 7.52286 12.4229 7.62288C12.3229 7.7229 12.2667 7.85855 12.2667 8C12.2667 8.14145 12.3229 8.27711 12.4229 8.37712C12.5229 8.47714 12.6586 8.53333 12.8 8.53333H13.84C13.7139 9.89816 13.1142 11.1759 12.1451 12.1451C11.1759 13.1142 9.89816 13.7139 8.53333 13.84Z\"\n        fill=\"#6F829E\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_18039_11921\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const LetterAIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"#121111\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M4.52464 12.6249C4.59964 12.6499 4.64964 12.6499 4.72464 12.6499C4.92464 12.6499 5.12464 12.5249 5.19964 12.3249L6.37464 9.3749H9.62464L10.7996 12.3249C10.8746 12.5249 11.0746 12.6499 11.2746 12.6499C11.3496 12.6499 11.3996 12.6499 11.4746 12.6249C11.7496 12.5249 11.8746 12.2249 11.7746 11.9499L8.47464 3.6749C8.47464 3.6499 8.44964 3.6499 8.44964 3.6249C8.44964 3.6249 8.44964 3.5999 8.42464 3.5999C8.42464 3.5749 8.39964 3.5749 8.39964 3.5499L8.37464 3.5249C8.37464 3.5249 8.34964 3.4999 8.32464 3.4999C8.29964 3.4999 8.29964 3.4749 8.27464 3.4749C8.27464 3.4749 8.24964 3.4499 8.22464 3.4499C8.19964 3.4499 8.19964 3.4249 8.17464 3.4249H8.14964C8.12463 3.4249 8.12464 3.4249 8.09964 3.3999H7.89964C7.87464 3.3999 7.87464 3.3999 7.84964 3.4249H7.82464C7.79964 3.4249 7.79964 3.4499 7.77464 3.4499C7.74964 3.4499 7.74964 3.4749 7.72464 3.4749C7.69964 3.4749 7.69964 3.4999 7.67464 3.4999C7.64964 3.4999 7.64964 3.5249 7.62464 3.5249L7.59964 3.5499C7.59964 3.5749 7.57464 3.5749 7.57464 3.5999L7.54964 3.6249C7.54964 3.6499 7.52464 3.6499 7.52464 3.6749L4.22464 11.9499C4.12464 12.2249 4.24964 12.5249 4.52464 12.6249ZM6.79964 8.3249L7.99964 5.2749L9.19964 8.3249H6.79964Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"#121111\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M14.475 1H1.525C1.225 1 1 1.225 1 1.525L1 14.4751C1 14.7751 1.225 15.0001 1.525 15.0001H14.475C14.775 15.0001 15 14.7751 15 14.4751V1.525C15 1.225 14.775 1 14.475 1ZM13.95 13.9501H2.05V2.05H13.95V13.9501Z\"\n      fill=\"black\"\n      fillOpacity=\"0.2\"\n    />\n  </svg>\n);\n\nexport const LeftArrowIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"#121111\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10.4807 12.5275C10.6032 12.4039 10.6719 12.2369 10.6719 12.063C10.6719 11.889 10.6032 11.7221 10.4807 11.5985L6.89074 8.00846L10.4797 4.41746C10.6019 4.29391 10.6704 4.12719 10.6704 3.95346C10.6704 3.77973 10.6019 3.61301 10.4797 3.48946C10.3562 3.36733 10.1895 3.29883 10.0157 3.29883C9.84202 3.29883 9.67529 3.36733 9.55175 3.48946L5.49775 7.54446C5.37561 7.66801 5.30711 7.83473 5.30711 8.00846C5.30711 8.18219 5.37561 8.34891 5.49775 8.47246L9.55075 12.5255C9.67425 12.6483 9.84132 12.7174 10.0155 12.7176C10.1898 12.7178 10.357 12.6491 10.4807 12.5265L10.4807 12.5275Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n</svg>\n)\n\nexport const SolidArrowDownIcon = ({ className, size = 16 }: { className?: string, size?: number }) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" className={className}>\n    <path d=\"M11.8225 5.68855C11.6892 5.54756 11.512 5.5 11.3349 5.5L4.68698 5.54756C4.50983 5.54756 4.33268 5.59428 4.19941 5.73612C4.1364 5.79998 4.08623 5.87679 4.05195 5.96191C4.01768 6.04703 4 6.13867 4 6.23128C4 6.32389 4.01768 6.41553 4.05195 6.50065C4.08623 6.58577 4.1364 6.66259 4.19941 6.72645L7.52297 10.2648C7.56766 10.3115 7.65623 10.3582 7.70092 10.4058L7.74481 10.4533C7.96664 10.5468 8.27706 10.5001 8.45421 10.3115L11.7778 6.72645C12.089 6.39605 12.0443 5.97138 11.8225 5.68855Z\" fill=\"#666666\"/>\n  </svg>\n);\n\nexport const DividerIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1\" height=\"14\" viewBox=\"0 0 1 14\" fill=\"none\">\n    <path d=\"M0.5 0V14\" stroke=\"#E0E0E0\" />\n  </svg>\n);\n\nexport const MicrophoneIcon = () => (\n  // <svg\n  //   xmlns=\"http://www.w3.org/2000/svg\"\n  //   width=\"16\"\n  //   height=\"16\"\n  //   viewBox=\"0 0 16 16\"\n  //   fill=\"currentColor\"\n  // >\n  //   <path d=\"M8 1C6.89543 1 6 1.89543 6 3V8C6 9.10457 6.89543 10 8 10C9.10457 10 10 9.10457 10 8V3C10 1.89543 9.10457 1 8 1ZM8 2C8.55228 2 9 2.44772 9 3V8C9 8.55228 8.55228 9 8 9C7.44772 9 7 8.55228 7 8V3C7 2.44772 7.44772 2 8 2ZM4 7V8C4 10.2091 5.79086 12 8 12C10.2091 12 12 10.2091 12 8V7H13V8C13 10.5264 11.1242 12.6186 8.67419 12.9328L8.66667 15H7.33333L7.32581 12.9328C4.87583 12.6186 3 10.5264 3 8V7H4Z\" />\n  // </svg>\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" className=\"size-18\"><path d=\"M19.8628 9.29346C20.3042 9.29375 20.6624 9.65179 20.6626 10.0933V10.5698C20.6626 15.0969 17.189 18.8112 12.7622 19.1978V21.7212C12.7621 22.1422 12.4205 22.4839 11.9995 22.4839C11.5785 22.4839 11.2369 22.1422 11.2368 21.7212V19.1978C6.80986 18.8114 3.33742 15.097 3.3374 10.5698V10.0933C3.33761 9.65161 3.6955 9.29346 4.13721 9.29346C4.57871 9.29369 4.93681 9.65175 4.93701 10.0933V10.5698C4.93703 14.4703 8.09908 17.6321 11.9995 17.6323C15.8999 17.6321 19.063 14.4703 19.063 10.5698V10.0933C19.0632 9.65161 19.4211 9.29346 19.8628 9.29346ZM12.2622 1.52197C14.9646 1.64424 17.2258 3.64186 17.3608 6.36768C17.3969 7.09606 17.4194 7.87827 17.4194 8.69385L17.4155 9.29932C17.4075 9.89739 17.3879 10.4738 17.3608 11.02C17.2215 13.8337 14.8166 15.8714 11.9995 15.8716L11.7358 15.8657C9.03367 15.7432 6.77221 13.7456 6.63721 11.02C6.61016 10.4738 6.59059 9.89739 6.58252 9.29932L6.57861 8.69385C6.57861 8.28589 6.58405 7.88626 6.59424 7.49756L6.63721 6.36768C6.77657 3.55397 9.1824 1.51629 11.9995 1.51611L12.2622 1.52197ZM11.9995 3.11572C9.93006 3.1159 8.328 4.58622 8.23584 6.44678C8.20091 7.15198 8.17822 7.90765 8.17822 8.69385C8.17822 9.48005 8.20091 10.2357 8.23584 10.9409C8.328 12.8015 9.93006 14.2718 11.9995 14.272C14.0689 14.2718 15.671 12.8015 15.7632 10.9409C15.7981 10.2357 15.8198 9.48004 15.8198 8.69385C15.8198 7.90765 15.7981 7.15198 15.7632 6.44678C15.671 4.58622 14.069 3.11591 11.9995 3.11572Z\" fill=\"currentColor\"></path></svg>\n);\n\nexport const UploadIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M8.5 3.15V10.5C8.5 10.8 8.3 11 8 11C7.7 11 7.5 10.8 7.5 10.5V3.3L5.6 5.2C5.4 5.4 5.1 5.4 4.9 5.2C4.7 5 4.7 4.7 4.9 4.5L7.35 2.05C7.75 1.65 8.35 1.65 8.75 2.05L11.2 4.5C11.4 4.7 11.4 5 11.2 5.2C11 5.4 10.7 5.4 10.5 5.2L8.5 3.15ZM13 9.5C13 9.2 13.2 9 13.5 9C13.8 9 14 9.2 14 9.5V12C14 12.85 13.35 13.5 12.5 13.5H3.5C2.65 13.5 2 12.85 2 12V9.5C2 9.2 2.2 9 2.5 9C2.8 9 3 9.2 3 9.5V12C3 12.3 3.2 12.5 3.5 12.5H12.5C12.8 12.5 13 12.3 13 12V9.5Z\"\n      fillOpacity=\"0.2\"\n    />\n  </svg>\n);\n\nexport const StopIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"2\" />\n  </svg>\n);\n\nexport const SearchIcon = ({ className }: { className?: string }) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className={className}>\n    <path d=\"M14.8985 13.9522L12.2795 11.2492C13.1525 10.1142 13.6755 8.80619 13.6755 7.23519C13.6755 3.74519 10.7965 0.867188 7.30645 0.867188C3.81745 0.866188 0.939453 3.74519 0.939453 7.23419C0.939453 10.7242 3.81845 13.6042 7.30745 13.6042C8.79045 13.6042 10.1875 13.0802 11.3215 12.2072L13.9385 14.8242C14.0255 14.9992 14.1995 14.9992 14.3745 14.9992C14.5362 14.9958 14.6912 14.9335 14.8105 14.8242C15.0725 14.6502 15.0725 14.2142 14.8985 13.9522ZM2.24845 7.32219C2.24951 5.98052 2.78296 4.6941 3.73166 3.7454C4.68037 2.79669 5.96678 2.26325 7.30845 2.26219C8.65012 2.26325 9.93654 2.79669 10.8852 3.7454C11.8339 4.6941 12.3674 5.98052 12.3685 7.32219C12.3674 8.66386 11.8339 9.95027 10.8852 10.899C9.93654 11.8477 8.65012 12.3811 7.30845 12.3822C5.96678 12.3811 4.68037 11.8477 3.73166 10.899C2.78296 9.95027 2.24951 8.66386 2.24845 7.32219Z\" fill=\"currentColor\"/>\n  </svg>\n);\n\nexport const EditIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M3.7789 14.5951C3.1481 14.594 2.54346 14.3429 2.09751 13.8968C1.65156 13.4506 1.4007 12.8459 1.3999 12.2151V3.9801C1.4007 3.3493 1.65156 2.74455 2.09751 2.29841C2.54346 1.85228 3.1481 1.60116 3.7789 1.6001H8.3589C8.48515 1.6001 8.60622 1.65025 8.69548 1.73951C8.78475 1.82878 8.8349 1.94985 8.8349 2.0761C8.8349 2.20234 8.78475 2.32341 8.69548 2.41268C8.60622 2.50195 8.48515 2.5521 8.3589 2.5521H3.7799C3.40142 2.55316 3.03877 2.70411 2.77132 2.97193C2.50388 3.23975 2.35343 3.60261 2.3529 3.9811V12.2141C2.3539 13.0021 2.9929 13.6411 3.7799 13.6431H12.0089C12.3874 13.642 12.75 13.4911 13.0175 13.2233C13.2849 12.9554 13.4354 12.5926 13.4359 12.2141V7.6311C13.433 7.56682 13.4431 7.50261 13.4656 7.44235C13.4882 7.38209 13.5227 7.32704 13.5672 7.28051C13.6116 7.23397 13.6651 7.19694 13.7242 7.17164C13.7834 7.14633 13.8471 7.13329 13.9114 7.13329C13.9757 7.13329 14.0394 7.14633 14.0986 7.17164C14.1577 7.19694 14.2112 7.23397 14.2556 7.28051C14.3001 7.32704 14.3346 7.38209 14.3572 7.44235C14.3797 7.50261 14.3899 7.56682 14.3869 7.6311V12.2141C14.3861 12.8447 14.1354 13.4493 13.6896 13.8954C13.2439 14.3415 12.6395 14.5928 12.0089 14.5941H3.7789V14.5951ZM11.9199 4.0661L12.3699 4.5141L10.1819 6.7041L7.5659 9.3201L6.5799 9.4121L6.6719 8.4241L9.2849 5.8061L11.4739 3.6161L11.9209 4.0661H11.9199ZM11.4729 2.5331C11.3892 2.53318 11.3063 2.54983 11.2291 2.5821C11.1519 2.61436 11.0818 2.66161 11.0229 2.7211L8.6119 5.1331L5.8399 7.9291C5.7876 7.98109 5.75507 8.0497 5.7479 8.1231L5.5699 10.1001C5.56602 10.1441 5.57133 10.1884 5.58549 10.2302C5.59966 10.272 5.62238 10.3104 5.6522 10.3429C5.68201 10.3755 5.71828 10.4014 5.75869 10.4192C5.7991 10.437 5.84276 10.4461 5.8869 10.4461H5.9159L7.8919 10.2691C7.96495 10.2617 8.03316 10.2292 8.0849 10.1771L10.8639 7.3961L13.2739 4.9841C13.333 4.92511 13.3799 4.85505 13.4119 4.77792C13.4439 4.70079 13.4604 4.6181 13.4604 4.5346C13.4604 4.45109 13.4439 4.36841 13.4119 4.29128C13.3799 4.21414 13.333 4.14408 13.2739 4.0851L12.5929 3.3941L11.9199 2.7211C11.8017 2.60167 11.6409 2.53405 11.4729 2.5331Z\" />\n  </svg>\n);\n\nexport const QuestionIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\" fill=\"none\">\n    <path\n      d=\"M14.0287 0C6.28125 0 0 6.28125 0 14.0306C0 21.7791 6.28125 28.0603 14.0297 28.0603C21.7781 28.0603 28.0594 21.7791 28.0594 14.0306C28.0594 6.28219 21.7781 0 14.0297 0H14.0287ZM15.3909 22.1259C15.3909 22.3119 15.3171 22.4903 15.1855 22.6218C15.054 22.7533 14.8757 22.8272 14.6897 22.8272H12.585C12.399 22.8272 12.2207 22.7533 12.0891 22.6218C11.9576 22.4903 11.8838 22.3119 11.8838 22.1259V20.0213C11.8838 19.6341 12.1978 19.32 12.585 19.32H14.6897C15.0769 19.32 15.3909 19.6341 15.3909 20.0213V22.1259ZM18.8691 12.4697C18.5859 12.8728 17.9466 13.3847 17.145 14.0091L16.2572 14.6222C15.8259 14.9559 15.4434 15.3459 15.3019 15.7913C15.2531 15.9431 15.2175 16.1934 15.1931 16.4625C15.1809 16.5984 15.0591 16.875 14.7759 16.875H12.4913C12.12 16.875 12.0534 16.5844 12.06 16.4428C12.1003 15.51 12.1866 14.6831 12.5662 14.2369C13.335 13.3359 15.0844 12.2137 15.0844 12.2137C15.3506 12.0122 15.5662 11.7937 15.7294 11.5556C16.0256 11.1469 16.2722 10.6978 16.2722 10.2075C16.2722 9.64312 16.1072 9.12937 15.7753 8.66344C15.4472 8.20031 14.8425 7.96781 13.9669 7.96781C13.1053 7.96781 12.495 8.25375 12.135 8.82562C11.8688 9.2475 11.7009 9.63656 11.6316 10.0594C11.6072 10.2094 11.5116 10.5234 11.1909 10.5234H8.96625C8.49187 10.5234 8.38781 10.2159 8.40094 10.0678C8.5725 8.20125 9.30281 6.92531 10.5928 6.10594C11.4703 5.5425 12.5494 5.25938 13.8291 5.25938C15.5119 5.25938 16.9078 5.66062 18.0216 6.46313C19.1325 7.26562 19.6903 8.45344 19.6903 10.0294C19.6903 10.995 19.3509 11.8088 18.8691 12.4697Z\"\n      fill=\"#0265FF\"\n    />\n  </svg>\n);\n\nexport const InfoIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M8 15C4.2 15 1 11.9 1 8C1 4.2 4.1 1 8 1C11.8 1 15 4.1 15 8C15 11.9 11.8 15 8 15ZM8 2C4.7 2 2 4.7 2 8C2 11.3 4.7 14 8 14C11.3 14 14 11.3 14 8C14 4.7 11.3 2 8 2Z\" />\n    <path d=\"M7.19922 4.8C7.19922 5.2 7.49922 5.6 7.99922 5.6C8.49922 5.6 8.79922 5.3 8.79922 4.8C8.79922 4.3 8.39922 4 7.99922 4C7.59922 4 7.19922 4.3 7.19922 4.8ZM7.99922 12C7.69922 12 7.49922 11.8 7.49922 11.5V7C7.49922 6.7 7.69922 6.5 7.99922 6.5C8.29922 6.5 8.49922 6.7 8.49922 7V11.5C8.49922 11.8 8.29922 12 7.99922 12Z\" />\n  </svg>\n);\n\nexport const ExcelIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n    <g clipPath=\"url(#clip0_18510_39599)\">\n      <path\n        d=\"M20.7403 0V5.92593C20.7403 7.86765 22.2969 9.44593 24.2307 9.48089L24.2959 9.48148H30.2218V28.4444C30.2218 30.4081 28.6299 32 26.6662 32H5.3329C3.36925 32 1.77734 30.4081 1.77734 28.4444V3.55556C1.77734 1.5919 3.36925 0 5.3329 0H20.7403ZM25.481 12.642H6.51808C5.01132 12.642 3.78623 13.8469 3.75324 15.3456L3.75265 15.4074V27.2593C3.75265 28.7658 4.95759 29.9911 6.45626 30.0241L6.51808 30.0247H25.481C26.9876 30.0247 28.2129 28.8198 28.2459 27.3211L28.2465 27.2593V15.4074C28.2465 13.8801 27.0084 12.642 25.481 12.642ZM22.123 0L30.2218 8.09877H25.6786C23.7149 8.09877 22.123 6.50686 22.123 4.54321V0Z\"\n        fill=\"#389E0D\"\n      />\n      <path\n        d=\"M7.29786 24.099L8.30487 22.4634L9.30832 24.099H11.0756L9.34309 21.4738L10.9263 19.0086H9.21114L8.33608 20.5746L7.43336 19.0086H5.70042L7.29766 21.4461L5.54102 24.099H7.29786ZM15.6455 24.099V22.8454H13.1906V19.0086H11.6177V24.099H15.6453H15.6455ZM18.486 24.1859C18.9792 24.1859 19.3877 24.1148 19.7117 23.9721C20.0358 23.8299 20.2881 23.6209 20.4688 23.3456C20.6468 23.0783 20.7411 22.764 20.7394 22.4429C20.7394 22.1649 20.6719 21.9139 20.5364 21.6893C20.4011 21.4647 20.1848 21.2764 19.8871 21.1249C19.5896 20.9734 19.0972 20.8235 18.4096 20.6754C18.1318 20.6175 17.956 20.5549 17.882 20.4877C17.8055 20.4231 17.7674 20.35 17.7674 20.269C17.7674 20.158 17.8136 20.0636 17.9063 19.9862C17.9989 19.9085 18.1366 19.8696 18.3195 19.8696C18.5417 19.8696 18.7159 19.922 18.842 20.0261C18.9682 20.1302 19.0509 20.2969 19.0903 20.526L20.5729 20.4391C20.5081 19.9115 20.3049 19.5265 19.9635 19.2847C19.622 19.0428 19.126 18.9219 18.4757 18.9219C17.9456 18.9219 17.5284 18.9884 17.224 19.1214C16.9196 19.2547 16.6914 19.4374 16.5399 19.6701C16.3882 19.9028 16.3126 20.1499 16.3126 20.4115C16.3126 20.8097 16.4607 21.1372 16.757 21.3942C17.0509 21.651 17.5428 21.857 18.2326 22.0122C18.6539 22.1047 18.9223 22.2031 19.0381 22.3074C19.1539 22.4115 19.2119 22.5296 19.2119 22.6615C19.2119 22.8004 19.1511 22.9223 19.0294 23.0278C18.9079 23.133 18.7351 23.1858 18.5103 23.1858C18.2095 23.1858 17.978 23.0827 17.816 22.8768C17.7164 22.7494 17.6504 22.5641 17.6181 22.3212L16.1216 22.415C16.1654 22.9288 16.3541 23.3525 16.6875 23.6857C17.0207 24.0192 17.6204 24.1857 18.486 24.1857V24.1859ZM22.8127 24.099L23.8197 22.4634L24.8232 24.099H26.5905L24.858 21.4738L26.4414 19.0086H24.726L23.8509 20.5746L22.9482 19.0086H21.2157L22.8127 21.4461L21.0559 24.099H22.8127Z\"\n        fill=\"#389E0D\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_18510_39599\">\n        <rect width=\"32\" height=\"32\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const ColorfulEditIcon = ({ size = 20 }: { size?: number }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width={size}\n    height={size}\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n  >\n    <path\n      d=\"M3.07981 6.57422L2.22738 6.82578L1.375 6.57422L1.6265 7.43609L1.375 8.29797L2.22744 8.04366L3.07981 8.29797L2.831 7.43609L3.07981 6.57422Z\"\n      fill=\"url(#paint0_linear_18510_37545)\"\n    />\n    <path\n      d=\"M8.63384 3.85224L8.25922 3.53543L7.77478 3.47312L8.08809 3.09437L8.14978 2.60449L8.52434 2.92137L9.00884 2.98362L8.69547 3.36237L8.63384 3.85224Z\"\n      fill=\"url(#paint1_linear_18510_37545)\"\n    />\n    <path\n      d=\"M6.03681 4.04956L5.23375 3.3705L4.19531 3.23694L4.867 2.425L4.99913 1.375L5.80213 2.05413L6.8405 2.18769L6.16894 2.99956L6.03681 4.04956Z\"\n      fill=\"url(#paint2_linear_18510_37545)\"\n    />\n    <path\n      d=\"M13.4934 5.30179C13.5249 5.37309 13.5505 5.45627 13.5703 5.55134C13.59 5.6464 13.5998 5.74543 13.5998 5.84842C13.5998 5.9514 13.5801 6.05439 13.5407 6.15738C13.5013 6.26036 13.4382 6.35939 13.3514 6.45445C13.2568 6.54952 13.172 6.6327 13.0971 6.704C13.0222 6.7753 12.9571 6.83867 12.9019 6.89413C12.8389 6.9575 12.7797 7.01296 12.7245 7.06049L10.5126 4.83835C10.6072 4.75121 10.7196 4.64624 10.8497 4.52345C10.9798 4.40066 11.0882 4.30361 11.175 4.23231C11.2854 4.14517 11.3997 4.08378 11.518 4.04813C11.6363 4.01248 11.7526 3.99663 11.867 4.00059C11.9813 4.00456 12.0917 4.02238 12.1981 4.05407C12.3046 4.08576 12.3973 4.12141 12.4761 4.16102C12.6417 4.24816 12.8251 4.40066 13.0261 4.61852C13.2272 4.83637 13.383 5.06413 13.4934 5.30179ZM4.27895 11.1007C4.32627 11.0532 4.43667 10.9403 4.61015 10.7621C4.78364 10.5838 5.00049 10.364 5.26072 10.1026L6.1242 9.2351L7.08231 8.27257L9.62545 5.7177L11.8374 7.95172L9.29425 10.5066L8.34797 11.4691C8.03254 11.7781 7.74865 12.0613 7.49631 12.3188C7.24397 12.5762 7.035 12.7881 6.8694 12.9545C6.7038 13.1209 6.60523 13.2159 6.57369 13.2397C6.49483 13.311 6.40415 13.3863 6.30163 13.4655C6.19912 13.5447 6.09266 13.6081 5.98226 13.6556C5.87186 13.7111 5.71021 13.7784 5.49729 13.8576C5.28438 13.9368 5.06161 14.0141 4.82898 14.0893C4.59635 14.1646 4.37555 14.23 4.16658 14.2854C3.95761 14.3409 3.80187 14.3765 3.69936 14.3924C3.48644 14.4161 3.3445 14.3844 3.27353 14.2973C3.20256 14.2102 3.18284 14.0636 3.21439 13.8576C3.23016 13.7467 3.26762 13.5863 3.32676 13.3764C3.3859 13.1664 3.44899 12.9486 3.51601 12.7228C3.58304 12.497 3.6481 12.2891 3.71119 12.0989C3.77427 11.9088 3.82553 11.7781 3.86496 11.7068C3.91227 11.5959 3.9655 11.4949 4.02464 11.4038C4.08378 11.3127 4.16855 11.2117 4.27895 11.1007Z\"\n      fill=\"url(#paint3_linear_18510_37545)\"\n    />\n    <defs>\n      <linearGradient\n        id=\"paint0_linear_18510_37545\"\n        x1=\"2.22741\"\n        y1=\"6.57422\"\n        x2=\"2.22741\"\n        y2=\"8.29797\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint1_linear_18510_37545\"\n        x1=\"8.39181\"\n        y1=\"2.60449\"\n        x2=\"8.39181\"\n        y2=\"3.85224\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint2_linear_18510_37545\"\n        x1=\"5.51791\"\n        y1=\"1.375\"\n        x2=\"5.51791\"\n        y2=\"4.04956\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint3_linear_18510_37545\"\n        x1=\"8.39983\"\n        y1=\"4\"\n        x2=\"8.39983\"\n        y2=\"14.4\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const RemoveCircleIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M8 1C8.91925 1 9.8295 1.18106 10.6788 1.53284C11.5281 1.88463 12.2997 2.40024 12.9497 3.05025C13.5998 3.70026 14.1154 4.47194 14.4672 5.32122C14.8189 6.17049 15 7.08075 15 8C15 8.91925 14.8189 9.8295 14.4672 10.6788C14.1154 11.5281 13.5998 12.2997 12.9497 12.9497C12.2997 13.5998 11.5281 14.1154 10.6788 14.4672C9.8295 14.8189 8.91925 15 8 15C4.13372 15 1 11.8658 1 8C1 4.13372 4.13372 1 8 1ZM11.1495 4.85C11.0301 4.7308 10.8682 4.66386 10.6995 4.66386C10.5308 4.66386 10.369 4.7308 10.2496 4.85L8 7.10058L5.74993 4.85C5.6295 4.73566 5.46918 4.67288 5.30313 4.67503C5.13708 4.67718 4.97844 4.7441 4.86102 4.86153C4.7436 4.97895 4.67668 5.13759 4.67452 5.30364C4.67237 5.46968 4.73515 5.63001 4.84949 5.75044L7.10109 8L4.85 10.2496C4.73566 10.37 4.67288 10.5303 4.67503 10.6964C4.67718 10.8624 4.7441 11.021 4.86153 11.1385C4.97895 11.2559 5.13759 11.3228 5.30364 11.325C5.46969 11.3271 5.63001 11.2643 5.75044 11.15L8 8.8984L10.2496 11.1495C10.3703 11.2621 10.53 11.3234 10.695 11.3205C10.86 11.3177 11.0175 11.2509 11.1342 11.1342C11.2509 11.0175 11.3178 10.8601 11.3208 10.6951C11.3237 10.53 11.2625 10.3703 11.15 10.2496L8.8984 8L11.1495 5.74993C11.2688 5.63049 11.3359 5.46856 11.3359 5.29971C11.3359 5.13086 11.2688 4.96892 11.1495 4.84949V4.85Z\"\n      fill=\"#666666\"\n    />\n  </svg>\n);\n\nexport const BackIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"26\"\n    height=\"26\"\n    viewBox=\"0 0 26 26\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M6.5 13.0001C6.5 12.6394 6.66738 12.2932 6.968 12.0349L16.7732 3.64987C17.0905 3.38703 17.4907 3.24537 17.9026 3.25012C18.3284 3.25012 18.7363 3.39474 19.032 3.64987C19.656 4.18937 19.656 5.04249 19.032 5.58199L10.3545 13.0001L19.032 20.4182C19.6544 20.9577 19.6544 21.8109 19.032 22.3504C18.7151 22.6136 18.3138 22.7566 17.901 22.7501C17.4753 22.7501 17.0674 22.6055 16.7732 22.3504L6.96638 13.9654C6.82284 13.8483 6.70669 13.7012 6.62612 13.5345C6.54554 13.3677 6.50249 13.1853 6.5 13.0001Z\" />\n  </svg>\n);\n\nexport const RefreshIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <g clipPath=\"url(#clip0_18449_37925)\">\n      <path d=\"M2.71657 9.24964C2.74357 9.24964 2.76957 9.22364 2.82357 9.19764L2.84957 9.17064C2.87657 9.17064 2.87657 9.14364 2.90357 9.14364L4.90157 7.49264C5.01434 7.40051 5.08606 7.26749 5.10105 7.12264C5.11604 6.9778 5.07309 6.83291 4.98157 6.71964C4.88944 6.60687 4.75642 6.53515 4.61158 6.52016C4.46673 6.50517 4.32184 6.54812 4.20857 6.63964L3.06257 7.59964C3.16957 4.90864 4.95457 2.96364 7.45857 2.80364C8.97757 2.69664 9.90957 2.93664 10.6556 3.57564C10.8956 3.78964 11.2416 3.76264 11.4556 3.52264C11.5058 3.46726 11.5443 3.40232 11.5689 3.3317C11.5934 3.26109 11.6035 3.18625 11.5984 3.11166C11.5934 3.03707 11.5734 2.96426 11.5395 2.89759C11.5057 2.83092 11.4588 2.77176 11.4016 2.72364C10.1766 1.68464 8.71157 1.60464 7.43157 1.68464C4.34157 1.87064 2.13157 4.24264 1.91757 7.38564L0.95757 6.47964C0.903958 6.42795 0.840508 6.38756 0.770985 6.36086C0.701463 6.33416 0.627285 6.3217 0.552854 6.32422C0.478424 6.32673 0.405258 6.34418 0.337699 6.37552C0.270141 6.40685 0.209566 6.45144 0.15957 6.50664C-0.05343 6.74664 -0.05343 7.09264 0.18557 7.30664L2.10357 9.11664L2.15757 9.17064L2.18357 9.19764C2.1977 9.21273 2.21696 9.222 2.23757 9.22364C2.23757 9.22364 2.26357 9.22364 2.26357 9.25064C2.29057 9.25064 2.31757 9.27764 2.34357 9.27764H2.55657C2.63657 9.27764 2.66357 9.27764 2.71657 9.25064C2.69057 9.25064 2.69057 9.25064 2.71657 9.25064V9.24964ZM15.7966 7.35964L13.9066 5.81364C13.9066 5.81364 13.8796 5.81364 13.8796 5.78764C13.8526 5.78764 13.8526 5.76064 13.8256 5.76064C13.7996 5.76064 13.7996 5.73364 13.7726 5.73364C13.7456 5.73364 13.7456 5.70764 13.7196 5.70764C13.6926 5.70764 13.6926 5.70764 13.6656 5.68064H13.4526C13.3829 5.68128 13.314 5.69575 13.25 5.72321C13.186 5.75068 13.128 5.7906 13.0796 5.84064L11.4026 7.57264C11.3507 7.62627 11.3102 7.68978 11.2834 7.7594C11.2566 7.82902 11.2441 7.90331 11.2466 7.97787C11.2491 8.05242 11.2666 8.1257 11.2981 8.19335C11.3295 8.261 11.3742 8.32163 11.4296 8.37164C11.5356 8.47764 11.6696 8.53164 11.8296 8.53164C11.978 8.53068 12.1206 8.47351 12.2286 8.37164L13.1346 7.43864C13.1606 7.59864 13.1606 7.75864 13.1606 7.89164C13.1606 10.8486 11.4296 13.0066 8.92457 13.1666C7.03357 13.2736 6.10157 12.9806 4.66257 11.7016C4.60723 11.6512 4.54228 11.6125 4.47161 11.5877C4.40093 11.563 4.32599 11.5528 4.25128 11.5578C4.17658 11.5627 4.10364 11.5827 4.03684 11.6165C3.97005 11.6504 3.91077 11.6973 3.86257 11.7546C3.81219 11.81 3.77353 11.875 3.74889 11.9458C3.72425 12.0165 3.71415 12.0914 3.71919 12.1661C3.72424 12.2409 3.74432 12.3138 3.77824 12.3805C3.81215 12.4473 3.8592 12.5065 3.91657 12.5546C5.38157 13.8596 6.47357 14.3386 8.23257 14.3386C8.47257 14.3386 8.71257 14.3386 8.97857 14.3126C12.0416 14.1256 14.2536 11.4346 14.2536 7.94564V7.62564L15.0526 8.29164C15.1586 8.37164 15.2926 8.42464 15.3986 8.42464C15.5586 8.42464 15.7186 8.34464 15.8246 8.21164C16.0916 7.91864 16.0376 7.54564 15.7986 7.35864L15.7966 7.35964Z\" />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_18449_37925\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const CopyIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M13.5483 1.00195H5.68641C5.30143 1.00191 4.93219 1.15477 4.6599 1.42692C4.3876 1.69907 4.23454 2.06822 4.23438 2.4532V4.2207H2.25C1.91848 4.2207 1.60054 4.3524 1.36612 4.58682C1.1317 4.82124 1 5.13918 1 5.4707V13.752C1 14.0835 1.1317 14.4014 1.36612 14.6358C1.60054 14.8703 1.91848 15.002 2.25 15.002H10.5312C10.8628 15.002 11.1807 14.8703 11.4151 14.6358C11.6496 14.4014 11.7812 14.0835 11.7812 13.752V11.7832H13.5483C13.9333 11.7832 14.3026 11.6302 14.5748 11.3579C14.8471 11.0856 15 10.7164 15 10.3313V2.4532C14.9998 2.06828 14.8468 1.69917 14.5746 1.42703C14.3024 1.15489 13.9332 1.00199 13.5483 1.00195ZM10.5312 14.0645H2.25C2.16712 14.0645 2.08763 14.0315 2.02903 13.9729C1.97042 13.9143 1.9375 13.8348 1.9375 13.752V5.4707C1.9375 5.38782 1.97042 5.30834 2.02903 5.24973C2.08763 5.19113 2.16712 5.1582 2.25 5.1582H10.5312C10.6141 5.1582 10.6936 5.19113 10.7522 5.24973C10.8108 5.30834 10.8438 5.38782 10.8438 5.4707V13.752C10.8438 13.8348 10.8108 13.9143 10.7522 13.9729C10.6936 14.0315 10.6141 14.0645 10.5312 14.0645ZM14.0781 10.3313C14.0781 10.4677 14.0239 10.5986 13.9275 10.695C13.831 10.7915 13.7002 10.8457 13.5638 10.8457H11.7969V5.4707C11.7969 5.13918 11.6652 4.82124 11.4308 4.58682C11.1963 4.3524 10.8784 4.2207 10.5469 4.2207H5.17188V2.4532C5.17188 2.31678 5.22607 2.18595 5.32253 2.08949C5.419 1.99302 5.54983 1.93883 5.68625 1.93883H13.5639C13.7003 1.93887 13.8311 1.99308 13.9275 2.08954C14.024 2.186 14.0781 2.31681 14.0781 2.4532V10.3313Z\" />\n    <path d=\"M8.47518 7.73633H4.32861C4.08158 7.73633 3.86971 7.92383 3.85189 8.17008C3.84708 8.23441 3.85559 8.29904 3.8769 8.35993C3.89821 8.42082 3.93186 8.47666 3.97575 8.52394C4.01963 8.57123 4.0728 8.60895 4.13193 8.63474C4.19106 8.66053 4.25488 8.67384 4.31939 8.67383H8.46596C8.71299 8.67383 8.92486 8.48633 8.94268 8.24008C8.94749 8.17575 8.93898 8.11111 8.91767 8.05023C8.89636 7.98934 8.86271 7.9335 8.81882 7.88621C8.77494 7.83893 8.72177 7.80121 8.66264 7.77542C8.60351 7.74963 8.53969 7.73632 8.47518 7.73633ZM8.47518 10.5488H4.32861C4.08158 10.5488 3.86971 10.7363 3.85189 10.9826C3.84708 11.0469 3.85559 11.1115 3.8769 11.1724C3.89821 11.2333 3.93186 11.2892 3.97575 11.3364C4.01963 11.3837 4.0728 11.4214 4.13193 11.4472C4.19106 11.473 4.25488 11.4863 4.31939 11.4863H8.46596C8.71299 11.4863 8.92486 11.2988 8.94268 11.0526C8.94749 10.9882 8.93898 10.9236 8.91767 10.8627C8.89636 10.8018 8.86271 10.746 8.81882 10.6987C8.77494 10.6514 8.72177 10.6137 8.66264 10.5879C8.60351 10.5621 8.53969 10.5488 8.47518 10.5488Z\" />\n  </svg>\n);\n\nexport const XlsxIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"52\" height=\"52\" viewBox=\"0 0 52 52\" fill=\"none\">\n    <path\n      d=\"M33.7054 0V9.62963C33.7054 12.7849 36.2348 15.3496 39.3773 15.4064L39.4832 15.4074H49.1128V46.2222C49.1128 49.4132 46.526 52 43.3351 52H8.6684C5.47747 52 2.89062 49.4132 2.89062 46.2222V5.77778C2.89063 2.58684 5.47746 0 8.6684 0H33.7054ZM41.4091 20.5432H10.5943C8.14584 20.5432 6.15507 22.5012 6.10146 24.9366L6.1005 25.037V44.2963C6.1005 46.7445 8.05853 48.7356 10.4939 48.7892L10.5943 48.7901H41.4091C43.8573 48.7901 45.8484 46.8321 45.902 44.3968L45.903 44.2963V25.037C45.903 22.5552 43.891 20.5432 41.4091 20.5432ZM35.9524 0L49.1128 13.1605H41.7301C38.5392 13.1605 35.9524 10.5737 35.9524 7.38272V0Z\"\n      fill=\"#389E0D\"\n    />\n    <path\n      d=\"M11.8597 39.1608L13.4961 36.503L15.1268 39.1608H17.9986L15.1833 34.8949L17.756 30.889H14.9688L13.5469 33.4338L12.0799 30.889H9.26392L11.8594 34.8499L9.00488 39.1608H11.8597ZM25.4247 39.1608V37.1238H21.4355V30.889H18.8794V39.1608H25.4244H25.4247ZM30.0405 39.302C30.842 39.302 31.5058 39.1865 32.0322 38.9547C32.559 38.7236 32.9689 38.384 33.2626 37.9366C33.5518 37.5022 33.7049 36.9915 33.7023 36.4697C33.7023 36.018 33.5925 35.61 33.3723 35.2451C33.1525 34.8801 32.801 34.5742 32.3173 34.328C31.8338 34.0818 31.0336 33.8382 29.9163 33.5975C29.465 33.5034 29.1793 33.4017 29.0589 33.2925C28.9347 33.1876 28.8727 33.0688 28.8727 32.9372C28.8727 32.7568 28.9478 32.6034 29.0984 32.4775C29.2489 32.3514 29.4727 32.2881 29.7699 32.2881C30.131 32.2881 30.4141 32.3732 30.6189 32.5424C30.824 32.7115 30.9585 32.9824 31.0224 33.3548L33.4317 33.2136C33.3264 32.3562 32.9961 31.7306 32.4415 31.3377C31.8865 30.9445 31.0805 30.748 30.0238 30.748C29.1623 30.748 28.4843 30.8562 27.9897 31.0722C27.4951 31.2889 27.1243 31.5858 26.8781 31.9639C26.6316 32.3421 26.5087 32.7436 26.5087 33.1686C26.5087 33.8157 26.7494 34.3479 27.2309 34.7655C27.7085 35.1828 28.5078 35.5176 29.6287 35.7699C30.3133 35.9201 30.7495 36.08 30.9376 36.2495C31.1257 36.4186 31.2201 36.6106 31.2201 36.825C31.2201 37.0506 31.1213 37.2487 30.9235 37.4201C30.7261 37.5912 30.4453 37.6769 30.08 37.6769C29.5911 37.6769 29.2149 37.5093 28.9517 37.1749C28.7899 36.9678 28.6827 36.6667 28.6301 36.2719L26.1983 36.4244C26.2695 37.2593 26.5761 37.9478 27.1179 38.4893C27.6594 39.0311 28.6339 39.3017 30.0405 39.3017V39.302ZM37.0714 39.1608L38.7078 36.503L40.3384 39.1608H43.2103L40.3949 34.8949L42.9679 30.889H40.1805L38.7585 33.4338L37.2916 30.889H34.4762L37.0714 34.8499L34.2165 39.1608H37.0714Z\"\n      fill=\"#389E0D\"\n    />\n  </svg>\n);\n\nexport const UnknownFileIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clipPath=\"url(#clip0_21638_4657)\">\n      <path\n        d=\"M10.3704 0V2.96296C10.3704 3.93383 11.1486 4.72296 12.1156 4.74044L12.1481 4.74074H15.1111V14.2222C15.1111 15.204 14.3152 16 13.3333 16H2.66666C1.68484 16 0.888885 15.204 0.888885 14.2222V1.77778C0.888885 0.795951 1.68484 0 2.66666 0H10.3704ZM12.7407 6.32099H3.25926C2.50587 6.32099 1.89333 6.92346 1.87684 7.67279L1.87654 7.7037V13.6296C1.87654 14.3829 2.47901 14.9956 3.22834 15.012L3.25926 15.0123H12.7407C13.494 15.0123 14.1067 14.4099 14.1232 13.6605L14.1235 13.6296V7.7037C14.1235 6.94005 13.5044 6.32099 12.7407 6.32099ZM11.0617 0L15.1111 4.04938H12.8395C11.8577 4.04938 11.0617 3.25343 11.0617 2.27161V0Z\"\n        fill=\"#8C8C8C\"\n      />\n      <path\n        d=\"M8.40366 12.0892V11.9703C8.40366 11.7665 8.44613 11.5796 8.53107 11.4097C8.61357 11.2485 8.72938 11.1066 8.87082 10.9935C9.26717 10.6481 9.51072 10.4244 9.60129 10.3225C9.81077 10.045 9.91556 9.69684 9.91556 9.27778C9.91556 8.75679 9.74569 8.34908 9.40593 8.05467C9.07181 7.75452 8.6245 7.60449 8.06391 7.60449C7.44099 7.60449 6.94559 7.78286 6.57749 8.1396C6.20939 8.49071 6.02539 8.98336 6.02539 9.61753H6.99369C6.99369 9.24943 7.0645 8.96913 7.20603 8.77664C7.37591 8.55017 7.64208 8.43689 8.00445 8.43689C8.29887 8.43689 8.52544 8.5162 8.68396 8.67471C8.84248 8.84459 8.92179 9.06543 8.92179 9.33723C8.92179 9.55244 8.84534 9.75343 8.69245 9.94029L8.59053 10.0592C8.03556 10.5519 7.7043 10.9115 7.59675 11.1379C7.48346 11.3588 7.42687 11.6362 7.42687 11.9703V12.0892H8.40366ZM7.91102 13.788C8.09225 13.788 8.25077 13.7285 8.38667 13.6096C8.51122 13.4851 8.57354 13.3293 8.57354 13.1425C8.57354 12.9612 8.51132 12.8083 8.38667 12.6838C8.26213 12.5649 8.10351 12.5054 7.91102 12.5054C7.72416 12.5054 7.57127 12.5649 7.45235 12.6838C7.32208 12.7971 7.257 12.95 7.257 13.1425C7.257 13.3351 7.32218 13.4879 7.45235 13.6011C7.5769 13.7257 7.72988 13.788 7.91102 13.788Z\"\n        fill=\"#8C8C8C\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_21638_4657\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const CsvFileIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clipPath=\"url(#clip0_21638_4627)\">\n      <path\n        d=\"M10.3704 0V2.96296C10.3704 3.93383 11.1486 4.72296 12.1156 4.74044L12.1481 4.74074H15.1111V14.2222C15.1111 15.204 14.3152 16 13.3333 16H2.66666C1.68484 16 0.888885 15.204 0.888885 14.2222V1.77778C0.888885 0.795951 1.68484 0 2.66666 0H10.3704ZM12.7407 6.32099H3.25926C2.50587 6.32099 1.89333 6.92346 1.87684 7.67279L1.87654 7.7037V13.6296C1.87654 14.3829 2.47901 14.9956 3.22834 15.012L3.25926 15.0123H12.7407C13.494 15.0123 14.1067 14.4099 14.1232 13.6605L14.1235 13.6296V7.7037C14.1235 6.94005 13.5044 6.32099 12.7407 6.32099ZM11.0617 0L15.1111 4.04938H12.8395C11.8577 4.04938 11.0617 3.25343 11.0617 2.27161V0Z\"\n        fill=\"#1D39C4\"\n      />\n      <path\n        d=\"M5.37169 12.1151C5.59964 12.1151 5.78749 12.0821 5.93505 12.0162C6.08136 11.9512 6.20887 11.8503 6.30572 11.7228C6.40517 11.5931 6.47816 11.4317 6.52438 11.2384L5.8352 11.03C5.80043 11.191 5.74463 11.3136 5.66769 11.3981C5.59066 11.4826 5.47698 11.5248 5.32646 11.5248C5.1714 11.5248 5.051 11.4725 4.96537 11.3678C4.87974 11.2631 4.83698 11.0695 4.83698 10.787C4.83698 10.559 4.87283 10.3918 4.94463 10.2853C5.03945 10.1418 5.17604 10.07 5.35431 10.07C5.43303 10.07 5.50414 10.0862 5.56784 10.1186C5.63145 10.151 5.68537 10.1973 5.72932 10.2574C5.75599 10.2934 5.78137 10.3501 5.80567 10.4276L6.50009 10.2731C6.411 10.0045 6.2747 9.80549 6.0912 9.67591C5.90789 9.54624 5.65584 9.48145 5.33525 9.48145C4.92557 9.48145 4.60873 9.59463 4.38473 9.8209C4.16083 10.0471 4.04883 10.3709 4.04883 10.7922C4.04883 11.1082 4.11253 11.3675 4.23984 11.5699C4.36715 11.7725 4.51836 11.914 4.69377 11.9944C4.86917 12.0749 5.09515 12.1151 5.37179 12.1151H5.37169ZM7.96903 12.1133C8.21554 12.1133 8.41989 12.0778 8.58187 12.0067C8.74384 11.9355 8.87006 11.831 8.96033 11.6933C9.04938 11.5597 9.09652 11.4025 9.09574 11.2419C9.09574 11.103 9.06196 10.9773 8.99421 10.8651C8.92646 10.7529 8.81831 10.6587 8.66957 10.583C8.52083 10.5072 8.27451 10.4323 7.9308 10.3582C7.79194 10.3292 7.70404 10.2979 7.667 10.2644C7.62878 10.2321 7.60972 10.1955 7.60972 10.155C7.60972 10.0995 7.63283 10.0523 7.67915 10.0136C7.72537 9.97478 7.79431 9.95532 7.88567 9.95532C7.99678 9.95532 8.08389 9.9814 8.147 10.0335C8.21011 10.0856 8.2514 10.1689 8.27115 10.2835L9.01248 10.2401C8.97999 9.97626 8.87846 9.78377 8.70779 9.66288C8.53703 9.54189 8.28903 9.48145 7.96379 9.48145C7.6988 9.48145 7.49011 9.51473 7.33791 9.5812C7.18582 9.64787 7.07174 9.73922 6.99599 9.85557C6.92014 9.97191 6.88221 10.0955 6.88221 10.2262C6.88221 10.4253 6.95628 10.5891 7.10443 10.7176C7.2514 10.846 7.49742 10.949 7.84221 11.0266C8.05298 11.0729 8.1872 11.122 8.24508 11.1742C8.30295 11.2262 8.33189 11.2853 8.33189 11.3513C8.33189 11.4207 8.30147 11.4816 8.24073 11.5344C8.17999 11.587 8.09347 11.6134 7.98117 11.6134C7.83075 11.6134 7.715 11.5618 7.63401 11.4588C7.58424 11.3952 7.55125 11.3026 7.53505 11.1811L6.7867 11.228C6.80873 11.4849 6.90305 11.6968 7.06977 11.8634C7.23638 12.0301 7.53614 12.1133 7.96903 12.1133ZM11.0716 12.07L12.016 9.5248H11.2175L10.6533 11.3564L10.0803 9.5249H9.25742L10.2192 12.0701H11.0715L11.0716 12.07Z\"\n        fill=\"#1D39C4\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_21638_4627\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const TxtFileIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <g clipPath=\"url(#clip0_21638_4630)\">\n      <path\n        d=\"M10.3704 0V2.96296C10.3704 3.93383 11.1486 4.72296 12.1156 4.74044L12.1481 4.74074H15.1111V14.2222C15.1111 15.204 14.3152 16 13.3333 16H2.66666C1.68484 16 0.888885 15.204 0.888885 14.2222V1.77778C0.888885 0.795951 1.68484 0 2.66666 0H10.3704ZM12.7407 6.32099H3.25926C2.50587 6.32099 1.89333 6.92346 1.87684 7.67279L1.87654 7.7037V13.6296C1.87654 14.3829 2.47901 14.9956 3.22834 15.012L3.25926 15.0123H12.7407C13.494 15.0123 14.1067 14.4099 14.1232 13.6605L14.1235 13.6296V7.7037C14.1235 6.94005 13.5044 6.32099 12.7407 6.32099ZM11.0617 0L15.1111 4.04938H12.8395C11.8577 4.04938 11.0617 3.25343 11.0617 2.27161V0Z\"\n        fill=\"#08979C\"\n      />\n      <path\n        d=\"M5.73698 12.0266V10.1099H6.53905V9.48145H4.14844V10.1099H4.95051V12.0266H5.73698ZM7.5358 12.0266L8.0392 11.2089L8.54093 12.0266H9.42468L8.55831 10.714L9.35002 9.48145H8.49234L8.05481 10.2645L7.60345 9.48145H6.73718L7.5358 10.7002L6.65728 12.0266H7.5358ZM11.1054 12.0266V10.1099H11.9075V9.48145H9.51683V10.1099H10.3189V12.0266H11.1054Z\"\n        fill=\"#08979C\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_21638_4630\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const CheckerInBoxIcon = ({ className }: { className?: string }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"10\"\n    height=\"8\"\n    viewBox=\"0 0 10 8\"\n    className={className}\n    fill=\"currentColor\"\n  >\n    <path d=\"M9.5067 0.236399C9.33081 0.075254 9.09814 -0.00947067 8.85981 0.000842334C8.62149 0.0111553 8.39701 0.115663 8.2357 0.291399L3.4847 5.4714L1.6307 2.8764L1.5597 2.7884C1.40419 2.62083 1.19075 2.51872 0.962705 2.5028C0.734658 2.48687 0.509095 2.55832 0.331809 2.70264C0.154524 2.84697 0.0388021 3.05335 0.00813691 3.27988C-0.0225283 3.50642 0.0341613 3.73614 0.166697 3.9224L2.6667 7.4224L2.7427 7.5154C2.8275 7.60576 2.93004 7.67764 3.04391 7.72654C3.15778 7.77543 3.28052 7.80028 3.40444 7.79952C3.52836 7.79877 3.65079 7.77244 3.76406 7.72217C3.87733 7.6719 3.979 7.59879 4.0627 7.5074L9.5627 1.5074L9.6387 1.4124C9.76255 1.23353 9.81742 1.01586 9.79315 0.799654C9.76888 0.58345 9.66712 0.383356 9.5067 0.236399Z\" />\n  </svg>\n);\n\nexport const CheckerIcon = ({ className }: { className?: string }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n    className={className}\n  >\n    <path d=\"M12.6092 4.33894C12.4333 4.17779 12.2007 4.09307 11.9624 4.10338C11.724 4.11369 11.4995 4.2182 11.3382 4.39394L6.58724 9.57394L4.73324 6.97894L4.66224 6.89094C4.50673 6.72337 4.29329 6.62126 4.06524 6.60534C3.8372 6.58941 3.61163 6.66086 3.43435 6.80518C3.25706 6.94951 3.14134 7.15589 3.11068 7.38242C3.08001 7.60896 3.1367 7.83868 3.26924 8.02494L5.76924 11.5249L5.84524 11.6179C5.93003 11.7083 6.03258 11.7802 6.14645 11.8291C6.26032 11.878 6.38306 11.9028 6.50698 11.9021C6.6309 11.9013 6.75333 11.875 6.8666 11.8247C6.97987 11.7744 7.08154 11.7013 7.16524 11.6099L12.6652 5.60994L12.7412 5.51494C12.8651 5.33607 12.92 5.1184 12.8957 4.90219C12.8714 4.68599 12.7697 4.4859 12.6092 4.33894Z\" />\n  </svg>\n);\n\nexport const StatsIcon = ({ size }: { size?: number }) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n  >\n    <path\n      d=\"M20.2789 20.7891H3.72266C3.17188 20.7891 2.72656 20.3438 2.72656 19.793C2.72656 19.2422 3.17188 18.7969 3.72266 18.7969H20.2789C20.8297 18.7969 21.275 19.2422 21.275 19.793C21.275 20.3438 20.8297 20.7891 20.2789 20.7891Z\"\n      fill=\"url(#paint0_linear_21740_6067)\"\n    />\n    <path\n      d=\"M5.52148 17.6605H4.16211C3.72148 17.6605 3.36523 17.3043 3.36523 16.8637V12.9473C3.36523 12.5066 3.72148 12.1504 4.16211 12.1504H5.52148C5.96211 12.1504 6.31836 12.5066 6.31836 12.9473V16.8637C6.31836 17.302 5.95977 17.6605 5.52148 17.6605Z\"\n      fill=\"url(#paint1_linear_21740_6067)\"\n    />\n    <path\n      d=\"M10.2816 17.6602H8.94336C8.49805 17.6602 8.13477 17.2992 8.13477 16.8516V6.82969C8.13477 6.38437 8.4957 6.02109 8.94336 6.02109H10.2816C10.727 6.02109 11.0902 6.38203 11.0902 6.82969V16.8516C11.0902 17.2969 10.727 17.6602 10.2816 17.6602ZM15.0676 17.6602H13.7035C13.2652 17.6602 12.909 17.3039 12.909 16.8656V10.0031C12.909 9.56484 13.2652 9.20859 13.7035 9.20859H15.0676C15.5059 9.20859 15.8621 9.56484 15.8621 10.0031V16.8633C15.8621 17.3039 15.5059 17.6602 15.0676 17.6602ZM19.8371 17.6602H18.4824C18.0418 17.6602 17.6832 17.3016 17.6832 16.8609V4.01016C17.6832 3.56953 18.0418 3.21094 18.4824 3.21094H19.8371C20.2777 3.21094 20.6363 3.56953 20.6363 4.01016V16.8609C20.634 17.3016 20.2777 17.6602 19.8371 17.6602Z\"\n      fill=\"url(#paint2_linear_21740_6067)\"\n    />\n    <defs>\n      <linearGradient\n        id=\"paint0_linear_21740_6067\"\n        x1=\"12.0008\"\n        y1=\"18.7969\"\n        x2=\"12.0008\"\n        y2=\"20.7891\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint1_linear_21740_6067\"\n        x1=\"4.8418\"\n        y1=\"12.1504\"\n        x2=\"4.8418\"\n        y2=\"17.6605\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint2_linear_21740_6067\"\n        x1=\"14.3855\"\n        y1=\"3.21094\"\n        x2=\"14.3855\"\n        y2=\"17.6602\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#0265FF\" />\n        <stop offset=\"1\" stopColor=\"#A6FFFF\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const DataTableIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M12.6671 1.00011C12.9743 0.99704 13.2792 1.05583 13.5636 1.17199C13.848 1.28815 14.1071 1.45962 14.3243 1.67687C14.5414 1.89404 14.7131 2.15236 14.8292 2.43664C14.9454 2.72105 15.0032 3.02593 15.0001 3.33312V12.6671C15.0032 12.9743 14.9453 13.2792 14.8292 13.5636C14.7131 13.8478 14.5414 14.1062 14.3243 14.3234C14.1071 14.5406 13.848 14.7131 13.5636 14.8292C13.2792 14.9453 12.9742 15.0032 12.6671 15.0001H3.33312C3.02597 15.0032 2.72101 14.9453 2.43664 14.8292C2.15225 14.7131 1.89409 14.5406 1.67687 14.3234C1.45971 14.1062 1.28811 13.8479 1.17199 13.5636C1.05583 13.2792 0.99704 12.9743 1.00011 12.6671V3.33312C0.997054 3.02593 1.05585 2.72105 1.17199 2.43664C1.28813 2.15232 1.45971 1.89405 1.67687 1.67687C1.89403 1.45972 2.15235 1.28814 2.43664 1.17199C2.72101 1.05586 3.02597 0.997071 3.33312 1.00011H12.6671ZM2.00011 10.5001V12.6153C2.00018 13.4001 2.60015 13.9999 3.38488 14.0001H5.00011V10.5001H2.00011ZM6.00011 10.5001V14.0001H10.0001V10.5001H6.00011ZM11.0001 10.5001V14.0001H12.6153C13.4003 14.0001 14.0001 13.4003 14.0001 12.6153V10.5001H11.0001ZM2.00011 9.50011H5.00011V6.50011H2.00011V9.50011ZM6.00011 9.50011H10.0001V6.50011H6.00011V9.50011ZM11.0001 9.50011H14.0001V6.50011H11.0001V9.50011ZM3.38488 2.00011C2.60022 2.00035 2.00029 2.6002 2.00011 3.38488V5.50011H14.0001V3.38488C13.9999 2.60005 13.4002 2.00012 12.6153 2.00011H3.38488Z\"\n    />\n  </svg>\n);\n\nexport const DefaultFormIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path\n      d=\"M9.15595 1.42188V4.08854C9.15595 4.56004 9.34325 5.01222 9.67664 5.34562C10.01 5.67902 10.4622 5.86632 10.9337 5.86632H13.6004V13.8663C13.6004 14.1021 13.5067 14.3282 13.34 14.4949C13.1733 14.6616 12.9472 14.7552 12.7115 14.7552H3.28928C3.05353 14.7552 2.82744 14.6616 2.66074 14.4949C2.49404 14.3282 2.40039 14.1021 2.40039 13.8663V2.31076C2.40039 2.07502 2.49404 1.84892 2.66074 1.68222C2.82744 1.51553 3.05353 1.42188 3.28928 1.42188H9.15595ZM5.5115 8.53299C5.39363 8.53299 5.28058 8.57981 5.19723 8.66316C5.11388 8.74651 5.06706 8.85956 5.06706 8.97743C5.06706 9.0953 5.11388 9.20835 5.19723 9.2917C5.28058 9.37505 5.39363 9.42187 5.5115 9.42187H10.4893C10.6072 9.42187 10.7202 9.37505 10.8035 9.2917C10.8869 9.20835 10.9337 9.0953 10.9337 8.97743C10.9337 8.85956 10.8869 8.74651 10.8035 8.66316C10.7202 8.57981 10.6072 8.53299 10.4893 8.53299H5.5115ZM5.5115 11.1997C5.39363 11.1997 5.28058 11.2465 5.19723 11.3298C5.11388 11.4132 5.06706 11.5262 5.06706 11.6441C5.06706 11.762 5.11388 11.875 5.19723 11.9584C5.28058 12.0417 5.39363 12.0885 5.5115 12.0885H10.4893C10.6072 12.0885 10.7202 12.0417 10.8035 11.9584C10.8869 11.875 10.9337 11.762 10.9337 11.6441C10.9337 11.5262 10.8869 11.4132 10.8035 11.3298C10.7202 11.2465 10.6072 11.1997 10.4893 11.1997H5.5115ZM10.0448 1.42188L13.6004 4.97743H10.9337C10.698 4.97743 10.4719 4.88378 10.3052 4.71708C10.1385 4.55038 10.0448 4.32429 10.0448 4.08854V1.42188Z\"\n      fill=\"#0265FF\"\n    />\n  </svg>\n);\n\nexport const FormulasIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M13.6028 7.93734C13.6699 7.99362 13.7252 8.06255 13.7656 8.14022C13.8061 8.21788 13.8308 8.30275 13.8385 8.38998C13.8461 8.47721 13.8365 8.56509 13.8101 8.64859C13.7838 8.7321 13.7413 8.80961 13.685 8.87668L11.8059 11.1158L13.0219 13.2218C13.0663 13.2976 13.0954 13.3815 13.1073 13.4686C13.1192 13.5557 13.1137 13.6444 13.0913 13.7294C13.0688 13.8144 13.0297 13.8941 12.9763 13.9639C12.9229 14.0337 12.8562 14.0923 12.7801 14.1363C12.704 14.1803 12.6199 14.2087 12.5327 14.2201C12.4455 14.2314 12.3569 14.2254 12.2721 14.2023C12.1872 14.1793 12.1078 14.1397 12.0383 14.0858C11.9688 14.032 11.9107 13.9649 11.8672 13.8885L10.8939 12.2029L9.39966 13.9836C9.34386 14.0521 9.275 14.1089 9.19706 14.1506C9.11913 14.1923 9.03368 14.2181 8.94569 14.2264C8.8577 14.2348 8.76893 14.2256 8.68453 14.1993C8.60013 14.1731 8.5218 14.1303 8.45409 14.0735C8.38638 14.0167 8.33064 13.947 8.29011 13.8684C8.24959 13.7899 8.22509 13.704 8.21804 13.6159C8.21099 13.5278 8.22153 13.4392 8.24905 13.3552C8.27656 13.2712 8.32051 13.1935 8.37832 13.1267L10.1843 10.974L8.97832 8.88468C8.93386 8.80883 8.90483 8.72494 8.89292 8.63783C8.88101 8.55072 8.88645 8.46211 8.90892 8.37711C8.9314 8.29211 8.97046 8.2124 9.02386 8.14256C9.07727 8.07272 9.14396 8.01413 9.2201 7.97017C9.29624 7.92621 9.38033 7.89774 9.46751 7.88641C9.5547 7.87508 9.64327 7.8811 9.72812 7.90414C9.81297 7.92717 9.89242 7.96676 9.96191 8.02063C10.0314 8.0745 10.0895 8.14158 10.133 8.21801L11.0965 9.8869L12.6634 8.01957C12.7197 7.95248 12.7886 7.89714 12.8663 7.8567C12.944 7.81626 13.0288 7.79151 13.1161 7.78388C13.2033 7.77624 13.2912 7.78587 13.3747 7.8122C13.4582 7.83853 13.5357 7.88106 13.6028 7.93734ZM9.55566 1.77734C9.72919 1.77718 9.89595 1.84468 10.0205 1.96552C10.1451 2.08635 10.2176 2.25099 10.2227 2.42445C10.2278 2.59791 10.165 2.76652 10.0478 2.89445C9.93053 3.02238 9.76801 3.09955 9.59477 3.10957L9.55566 3.11068H9.25477C8.77582 3.11068 8.31278 3.28256 7.94984 3.59506C7.58689 3.90757 7.34814 4.33994 7.27699 4.81357L7.26899 4.87246L7.24032 5.11068H8.66677C8.72513 5.11068 8.78293 5.12217 8.83685 5.14451C8.89077 5.16684 8.93977 5.19958 8.98104 5.24085C9.02231 5.28212 9.05504 5.33112 9.07738 5.38504C9.09972 5.43896 9.11121 5.49676 9.11121 5.55512V5.99957C9.11121 6.11744 9.06439 6.23049 8.98104 6.31384C8.89769 6.39719 8.78464 6.44401 8.66677 6.44401H7.08032L6.49943 11.2856C6.40386 12.0824 6.02403 12.818 5.4297 13.3572C4.83536 13.8965 4.06642 14.2032 3.2641 14.2211L3.18988 14.2218H2.88899C2.71545 14.222 2.54869 14.1545 2.42414 14.0336C2.29959 13.9128 2.22706 13.7481 2.22197 13.5747C2.21687 13.4012 2.27962 13.2326 2.39687 13.1047C2.51412 12.9768 2.67663 12.8996 2.84988 12.8896L2.88899 12.8885H3.18988C3.66882 12.8884 4.13186 12.7166 4.49481 12.4041C4.85775 12.0916 5.09651 11.6592 5.16766 11.1856L5.17566 11.1267L5.73721 6.44401H4.22232C4.10445 6.44401 3.9914 6.39719 3.90805 6.31384C3.8247 6.23049 3.77788 6.11744 3.77788 5.99957V5.55512C3.77788 5.49676 3.78937 5.43896 3.81171 5.38504C3.83404 5.33112 3.86678 5.28212 3.90805 5.24085C3.94932 5.19958 3.99832 5.16684 4.05224 5.14451C4.10616 5.12217 4.16396 5.11068 4.22232 5.11068H5.89721L5.94521 4.71357C6.04078 3.91675 6.42061 3.18117 7.01495 2.6419C7.60928 2.10264 8.37822 1.79589 9.18054 1.77801L9.25477 1.77734H9.55566Z\" />\n  </svg>\n);\n\nexport const ScrollArrowDownIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M12.7549 2.5C12.1757 2.5 11.7063 2.98638 11.7063 3.58637V20.4136C11.7063 21.0136 12.1757 21.5 12.7549 21.5C13.3341 21.5 13.8035 21.0136 13.8035 20.4136V3.58637C13.8035 2.98638 13.3341 2.5 12.7549 2.5ZM16.9494 14.9819C16.8105 14.9819 16.6729 15.0105 16.5448 15.0661C16.4166 15.1217 16.3004 15.2031 16.2028 15.3056L12.8052 18.8775L9.2965 15.2948C9.199 15.192 9.08274 15.1103 8.95449 15.0546C8.82623 14.9988 8.68855 14.97 8.54946 14.9699C8.41036 14.9698 8.27264 14.9983 8.1443 15.0539C8.01596 15.1095 7.89957 15.1909 7.80192 15.2935C7.70426 15.3961 7.62728 15.5179 7.57547 15.6516C7.52366 15.7853 7.49804 15.9284 7.50012 16.0725C7.50219 16.2165 7.53192 16.3588 7.58756 16.4908C7.6432 16.6229 7.72365 16.7422 7.82422 16.8417L12.0775 21.1871C12.2767 21.3892 12.5703 21.4348 12.822 21.5C13.1004 21.4977 13.3666 21.3813 13.5624 21.1762L17.6982 16.8309C17.8434 16.6782 17.9418 16.4844 17.981 16.2739C18.0202 16.0634 17.9984 15.8457 17.9184 15.648C17.8383 15.4503 17.7036 15.2816 17.5312 15.1631C17.3588 15.0445 17.1564 14.9815 16.9494 14.9819Z\" />\n  </svg>\n);\n\nexport const AggregateTableIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 20 20\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M2.1875 4.0625C2.1875 3.56522 2.38504 3.08831 2.73667 2.73667C3.08831 2.38504 3.56522 2.1875 4.0625 2.1875H15.9375C16.4348 2.1875 16.9117 2.38504 17.2633 2.73667C17.615 3.08831 17.8125 3.56522 17.8125 4.0625V5H2.1875V4.0625ZM2.1875 6.25H17.8125V15.9375C17.8125 16.4348 17.615 16.9117 17.2633 17.2633C16.9117 17.615 16.4348 17.8125 15.9375 17.8125H4.0625C3.56522 17.8125 3.08831 17.615 2.73667 17.2633C2.38504 16.9117 2.1875 16.4348 2.1875 15.9375V6.25ZM5.42125 8.75C5.31033 8.75254 5.20465 8.79774 5.1262 8.8762C5.04774 8.95465 5.00254 9.06033 5 9.17125V10.8288C5 11.0538 5.19625 11.25 5.42125 11.25H7.075C7.3 11.25 7.49625 11.0538 7.49625 10.8288V9.17125C7.525 8.94625 7.32875 8.75 7.075 8.75H5.42125ZM9.17125 8.75C9.06033 8.75254 8.95465 8.79774 8.8762 8.8762C8.79774 8.95465 8.75254 9.06033 8.75 9.17125V10.8288C8.75 11.0538 8.94625 11.25 9.17125 11.25H10.825C11.05 11.25 11.2463 11.0538 11.2463 10.8288V9.17125C11.275 8.94625 11.0787 8.75 10.825 8.75H9.17125ZM14.5763 8.75H12.9212C12.8103 8.75254 12.7047 8.79774 12.6262 8.8762C12.5477 8.95465 12.5025 9.06033 12.5 9.17125V10.8288C12.5 11.0538 12.6962 11.25 12.9212 11.25H14.5763C14.8013 11.25 14.9975 11.0538 14.9975 10.8288V9.17125C15.025 8.94625 14.8288 8.75 14.5763 8.75ZM5.42125 13C5.31033 13.0025 5.20465 13.0477 5.1262 13.1262C5.04774 13.2047 5.00254 13.3103 5 13.4213V15.0787C5 15.3038 5.19625 15.5 5.42125 15.5H7.075C7.3 15.5 7.49625 15.3038 7.49625 15.0787V13.4213C7.52375 13.1963 7.3275 13 7.075 13H5.42125ZM10.8263 13H9.17125C9.06033 13.0025 8.95465 13.0477 8.8762 13.1262C8.79774 13.2047 8.75254 13.3103 8.75 13.4213V15.0787C8.75 15.3038 8.94625 15.5 9.17125 15.5H10.825C11.05 15.5 11.2463 15.3038 11.2463 15.0787V13.4213C11.2737 13.1963 11.0775 13 10.825 13H10.8263ZM12.9212 13C12.8103 13.0025 12.7047 13.0477 12.6262 13.1262C12.5477 13.2047 12.5025 13.3103 12.5 13.4213V15.0787C12.5 15.3038 12.6962 15.5 12.9212 15.5H14.5763C14.8013 15.5 14.9975 15.3038 14.9975 15.0787V13.4213C15.025 13.1963 14.8288 13 14.5763 13H12.9212Z\" />\n  </svg>\n);\n\nexport const GanttIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path\n      d=\"M12.6671 15.0001H3.33312C3.02589 15.0032 2.72113 14.9449 2.43669 14.8288C2.15225 14.7126 1.89384 14.5409 1.67658 14.3236C1.45933 14.1064 1.2876 13.848 1.17144 13.5635C1.05529 13.2791 0.997041 12.9743 1.00012 12.6671V3.33312C0.997041 3.02589 1.05529 2.72113 1.17144 2.43669C1.2876 2.15225 1.45933 1.89384 1.67658 1.67658C1.89384 1.45933 2.15225 1.2876 2.43669 1.17144C2.72113 1.05529 3.02589 0.997041 3.33312 1.00012H12.6671C12.9743 0.997041 13.2791 1.05529 13.5635 1.17144C13.848 1.2876 14.1064 1.45933 14.3236 1.67658C14.5409 1.89384 14.7126 2.15225 14.8288 2.43669C14.9449 2.72113 15.0032 3.02589 15.0001 3.33312V12.6671C15.0032 12.9743 14.9449 13.2791 14.8288 13.5635C14.7126 13.848 14.5409 14.1064 14.3236 14.3236C14.1064 14.5409 13.848 14.7126 13.5635 14.8288C13.2791 14.9449 12.9743 15.0032 12.6671 15.0001ZM3.38512 2.00012C2.60012 2.00012 2.00012 2.60012 2.00012 3.38512V12.6151C2.00012 13.4001 2.60012 14.0001 3.38512 14.0001H12.6151C13.4001 14.0001 14.0001 13.4001 14.0001 12.6151V3.38512C14.0001 2.60012 13.4001 2.00012 12.6151 2.00012H3.38512Z\"\n      // fill=\"#6F829E\"\n    />\n    <path\n      d=\"M9.74995 10.5C9.87489 10.4998 9.9954 10.5463 10.0877 10.6305C10.1801 10.7147 10.2375 10.8304 10.2488 10.9548C10.2601 11.0793 10.2244 11.2034 10.1487 11.3028C10.073 11.4023 9.96289 11.4697 9.83995 11.492L9.74995 11.5H4.24995C4.125 11.5002 4.00449 11.4537 3.91216 11.3695C3.81983 11.2853 3.76236 11.1696 3.75107 11.0452C3.73978 10.9207 3.77549 10.7966 3.85116 10.6972C3.92684 10.5977 4.037 10.5303 4.15994 10.508L4.24995 10.5H9.74995ZM11.9999 7.5C12.1249 7.49977 12.2454 7.54633 12.3377 7.63051C12.4301 7.71469 12.4875 7.83039 12.4988 7.95482C12.5101 8.07926 12.4744 8.20341 12.3987 8.30283C12.323 8.40225 12.2129 8.46974 12.0899 8.492L11.9999 8.5H5.49995C5.375 8.50023 5.25449 8.45367 5.16216 8.36949C5.06983 8.28531 5.01236 8.16961 5.00107 8.04518C4.98978 7.92074 5.02549 7.79659 5.10116 7.69717C5.17684 7.59775 5.287 7.53026 5.40995 7.508L5.49995 7.5H11.9999ZM6.99995 4.5C7.12489 4.49977 7.2454 4.54633 7.33773 4.63051C7.43006 4.71469 7.48753 4.83039 7.49882 4.95482C7.51011 5.07926 7.4744 5.20341 7.39873 5.30283C7.32305 5.40225 7.21289 5.46974 7.08995 5.492L6.99995 5.5H3.49995C3.375 5.50023 3.25449 5.45367 3.16216 5.36949C3.06983 5.28531 3.01236 5.16961 3.00107 5.04518C2.98978 4.92074 3.02549 4.79659 3.10116 4.69717C3.17684 4.59775 3.287 4.53026 3.40995 4.508L3.49995 4.5H6.99995Z\"\n      // fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const DashLayoutContainerIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path\n      d=\"M12.964 1C14.109 1 15 1.98 15 3.24V12.76C15 14.021 14.11 15 13.027 15H2.973C1.89 15 1 14.021 1 12.76V3.24C1 1.98 1.89 1 2.973 1H12.963H12.964ZM10.137 6.047H1.954V12.76C1.954 13.39 2.399 13.88 2.972 13.88H10.137V6.047ZM13.981 6.047H11.137V13.88H12.964C13.537 13.88 13.981 13.39 13.981 12.76V6.047ZM12.964 2.12H2.973C2.4 2.12 1.955 2.61 1.955 3.24L1.954 5.017H13.981V3.24C13.981 2.61 13.537 2.12 12.964 2.12Z\"\n      // fill=\"#6F829E\"\n    />\n  </svg>\n);\n\nexport const DataViewIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 20 20\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M16.25 1.25C16.9404 1.25 17.5 1.80964 17.5 2.5V5C17.5 5.69036 16.9404 6.25 16.25 6.25H3.75C3.05964 6.25 2.5 5.69036 2.5 5V2.5C2.5 1.80964 3.05964 1.25 3.75 1.25H16.25ZM6.25 2.5C5.55964 2.5 5 3.05964 5 3.75C5 4.44036 5.55964 5 6.25 5C6.94036 5 7.5 4.44036 7.5 3.75C7.5 3.05964 6.94036 2.5 6.25 2.5Z\" />\n    <path d=\"M16.25 7.5C16.9404 7.5 17.5 8.05964 17.5 8.75V11.25C17.5 11.9404 16.9404 12.5 16.25 12.5H3.75C3.05964 12.5 2.5 11.9404 2.5 11.25V8.75C2.5 8.05964 3.05964 7.5 3.75 7.5H16.25ZM6.25 8.75C5.55964 8.75 5 9.30964 5 10C5 10.6904 5.55964 11.25 6.25 11.25C6.94036 11.25 7.5 10.6904 7.5 10C7.5 9.30964 6.94036 8.75 6.25 8.75Z\" />\n    <path d=\"M16.25 13.75C16.9404 13.75 17.5 14.3096 17.5 15V17.5C17.5 18.1904 16.9404 18.75 16.25 18.75H3.75C3.05964 18.75 2.5 18.1904 2.5 17.5V15C2.5 14.3096 3.05964 13.75 3.75 13.75H16.25ZM6.25 15C5.55964 15 5 15.5596 5 16.25C5 16.9404 5.55964 17.5 6.25 17.5C6.94036 17.5 7.5 16.9404 7.5 16.25C7.5 15.5596 6.94036 15 6.25 15Z\" />\n  </svg>\n);\n\nexport const DataReportIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 20 20\"\n    fill=\"currentColor\"\n  >\n    <path\n      d=\"M1.25 18.2377V15.9502H18.75V18.2377H1.25ZM16.4075 5.4427L16.4062 6.6677L16.4075 6.66895V14.7227L16.4062 14.7214L16.4075 14.7239H12.8912V5.4427H16.4075ZM11.7212 1.7627L11.72 3.1177H11.7212V14.7239H9.4875V14.7227H8.205V1.7627H11.7212ZM7.035 7.76644L7.03375 9.08395L7.035 9.0852V14.7239L3.52 14.7227V7.76644H7.035Z\"\n      // fill=\"\"\n    />\n  </svg>\n);\n\nexport const BrushIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"currentColor\">\n    <path d=\"M14.72 2.64C14.72 2.16 14.56 1.76 14.24 1.44L13.28 0.48C12.64 -0.16 11.6 -0.16 10.96 0.48L8.8 2.64L7.04 0.96C6.4 0.32 5.36 0.32 4.72 0.96L3.12 2.56L0.48 5.28C0.16 5.6 0 6 0 6.4C0 6.8 0.16 7.28 0.48 7.6L2 9.12L7.12 14.24C7.44 14.56 7.84 14.72 8.24 14.72H8.32C8.72 14.72 9.2 14.56 9.52 14.24L12.08 11.68C12.08 11.68 12.16 11.68 12.16 11.6C12.16 11.6 12.16 11.52 12.24 11.52L13.76 10C14.08 9.68 14.24 9.28 14.24 8.8C14.24 8.32 14.08 7.92 13.76 7.6L12.08 5.92L14.24 3.76C14.48 3.44 14.72 3.04 14.72 2.64ZM8.64 13.44C8.56 13.52 8.4 13.6 8.24 13.6H8.16C8 13.6 7.92 13.52 7.76 13.44L6.8 12.48L7.6 11.68C7.84 11.44 7.84 11.12 7.6 10.88C7.36 10.64 7.04 10.64 6.8 10.88L6 11.68L4.96 10.64L6.24 9.36C6.48 9.12 6.48 8.8 6.24 8.56C6 8.32 5.68 8.32 5.44 8.56L4.16 9.84L2.96 8.64L3.6 8C3.84 7.76 3.84 7.44 3.6 7.2C3.36 6.96 3.04 6.96 2.8 7.2L2.16 7.84L1.2 6.8C1.12 6.72 1.12 6.56 1.12 6.4C1.12 6.24 1.2 6.16 1.28 6L3.52 3.76L10.96 11.2L8.64 13.44ZM13.44 2.96L10.88 5.52C10.64 5.76 10.64 6.08 10.88 6.32L12.96 8.4C13.04 8.48 13.12 8.64 13.12 8.8C13.12 8.96 13.04 9.04 12.96 9.2L11.68 10.4L4.32 2.96L5.52 1.76C5.68 1.6 6.08 1.6 6.24 1.76L8.32 3.84C8.56 4.08 8.88 4.08 9.12 3.84L11.68 1.28C11.84 1.12 12.24 1.12 12.4 1.28L13.36 2.24C13.44 2.32 13.52 2.48 13.52 2.64C13.52 2.8 13.52 2.88 13.44 2.96Z\"/>\n  </svg>\n)\n\n\nexport const AIIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"#121111\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.25781 1.99119C9.51918 1.99119 9.75287 2.15339 9.84375 2.39841C11.0662 5.70202 13.672 8.3078 16.9756 9.53025C17.2203 9.62127 17.3828 9.85501 17.3828 10.1162C17.3826 10.3773 17.2203 10.6112 16.9756 10.7021C13.672 11.9246 11.0662 14.5294 9.84375 17.833C9.75288 18.078 9.51919 18.2412 9.25781 18.2412C8.99643 18.2412 8.76274 18.078 8.67188 17.833C7.4495 14.5296 4.84434 11.9247 1.54102 10.7021C1.29611 10.6113 1.133 10.3774 1.13281 10.1162C1.13281 9.85481 1.29597 9.62112 1.54102 9.53025C4.84449 8.30776 7.44947 5.70192 8.67188 2.39841L8.71191 2.31052C8.82109 2.11518 9.02907 1.99119 9.25781 1.99119ZM9.25781 4.18064C7.97127 6.74645 5.88903 8.8296 3.32324 10.1162C5.88854 11.4026 7.97129 13.4845 9.25781 16.0498C10.5442 13.4848 12.6265 11.4027 15.1914 10.1162C12.626 8.82957 10.5442 6.74619 9.25781 4.18064ZM15.9375 1.89451C16.0048 1.71358 16.2609 1.71352 16.3281 1.89451L16.9766 3.64744L18.7295 4.29685C18.9109 4.36397 18.9109 4.62036 18.7295 4.68748L16.9766 5.33591L16.3281 7.08884C16.261 7.27016 16.0047 7.2701 15.9375 7.08884L15.2891 5.33591L13.5361 4.68748C13.3548 4.62036 13.3548 4.36397 13.5361 4.29685L15.2891 3.64744L15.9375 1.89451Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n</svg>\n);\n\nexport const SettingIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"#121111\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M13.4288 1.98975H6.57004C6.20662 1.98974 5.84961 2.0854 5.53487 2.26711C5.22014 2.44882 4.95879 2.71017 4.77708 3.0249L1.34768 8.96481C1.16597 9.27953 1.07031 9.63655 1.07031 9.99996C1.07031 10.3634 1.16597 10.7204 1.34768 11.0351L4.7771 16.975C4.9588 17.2897 5.22016 17.5511 5.53489 17.7328C5.84961 17.9145 6.20663 18.0102 6.57004 18.0102H13.4288C13.7923 18.0102 14.1493 17.9145 14.464 17.7328C14.7787 17.5511 15.0401 17.2898 15.2218 16.975L18.6512 11.0351C18.8329 10.7204 18.9286 10.3634 18.9286 9.99996C18.9286 9.63655 18.8329 9.27953 18.6512 8.96481L15.2218 3.0249C15.0401 2.71017 14.7787 2.44882 14.464 2.26711C14.1493 2.08541 13.7923 1.98975 13.4288 1.98975ZM14.0039 3.72803L17.4333 9.66793C17.4916 9.76888 17.5223 9.88339 17.5223 9.99996C17.5223 10.1165 17.4916 10.231 17.4333 10.332L14.0039 16.2719C13.9456 16.3728 13.8618 16.4567 13.7609 16.515C13.6599 16.5732 13.5454 16.6039 13.4288 16.6039H6.57004C6.45348 16.6039 6.33896 16.5732 6.23801 16.515C6.13706 16.4567 6.05323 16.3728 5.99495 16.2719L2.56553 10.332C2.50725 10.231 2.47657 10.1165 2.47657 9.99996C2.47657 9.88339 2.50725 9.76888 2.56553 9.66793L5.99495 3.72803C6.05323 3.62708 6.13706 3.54325 6.23801 3.48496C6.33896 3.42668 6.45348 3.396 6.57004 3.396H13.4288C13.5437 3.39599 13.6566 3.42578 13.7565 3.48244C13.8564 3.5391 13.9399 3.62071 13.9988 3.71928L14.0039 3.72803Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"#121111\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M10 6.38672C8.00443 6.38672 6.38672 8.00443 6.38672 10C6.38672 11.9956 8.00443 13.6133 10 13.6133C11.9956 13.6133 13.6133 11.9956 13.6133 10C13.6133 8.00443 11.9956 6.38672 10 6.38672ZM10 7.79297C11.2189 7.79297 12.207 8.78109 12.207 10C12.207 11.2189 11.2189 12.207 10 12.207C8.78109 12.207 7.79297 11.2189 7.79297 10C7.79297 8.78109 8.78109 7.79297 10 7.79297Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n</svg>\n)\n\nexport const FullscreenIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"#121111\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M4.63375 3.75H6.875C7.04076 3.75 7.19973 3.68415 7.31694 3.56694C7.43415 3.44973 7.5 3.29076 7.5 3.125C7.5 2.95924 7.43415 2.80027 7.31694 2.68306C7.19973 2.56585 7.04076 2.5 6.875 2.5H3.125C2.95924 2.5 2.80027 2.56585 2.68306 2.68306C2.56585 2.80027 2.5 2.95924 2.5 3.125V6.875C2.5 7.04076 2.56585 7.19973 2.68306 7.31694C2.80027 7.43415 2.95924 7.5 3.125 7.5C3.29076 7.5 3.44973 7.43415 3.56694 7.31694C3.68415 7.19973 3.75 7.04076 3.75 6.875V4.63375L6.4325 7.31625C6.49015 7.37594 6.55912 7.42356 6.63537 7.45631C6.71162 7.48907 6.79364 7.50631 6.87662 7.50703C6.95961 7.50775 7.04191 7.49194 7.11872 7.46051C7.19553 7.42909 7.26531 7.38268 7.324 7.324C7.38268 7.26531 7.42909 7.19553 7.46051 7.11872C7.49194 7.04191 7.50775 6.95961 7.50703 6.87662C7.50631 6.79364 7.48907 6.71162 7.45631 6.63537C7.42356 6.55912 7.37594 6.49015 7.31625 6.4325L4.63375 3.75ZM16.25 4.63375V6.875C16.25 7.04076 16.3158 7.19973 16.4331 7.31694C16.5503 7.43415 16.7092 7.5 16.875 7.5C17.0408 7.5 17.1997 7.43415 17.3169 7.31694C17.4342 7.19973 17.5 7.04076 17.5 6.875V3.125C17.5 2.95924 17.4342 2.80027 17.3169 2.68306C17.1997 2.56585 17.0408 2.5 16.875 2.5H13.125C12.9592 2.5 12.8003 2.56585 12.6831 2.68306C12.5658 2.80027 12.5 2.95924 12.5 3.125C12.5 3.29076 12.5658 3.44973 12.6831 3.56694C12.8003 3.68415 12.9592 3.75 13.125 3.75H15.3663L12.6838 6.4325C12.6241 6.49015 12.5764 6.55912 12.5437 6.63537C12.5109 6.71162 12.4937 6.79364 12.493 6.87662C12.4922 6.95961 12.5081 7.04191 12.5395 7.11872C12.5709 7.19553 12.6173 7.26531 12.676 7.324C12.7347 7.38268 12.8045 7.42909 12.8813 7.46051C12.9581 7.49194 13.0404 7.50775 13.1234 7.50703C13.2064 7.50631 13.2884 7.48907 13.3646 7.45631C13.4409 7.42356 13.5098 7.37594 13.5675 7.31625L16.25 4.63375ZM4.63375 16.25H6.875C7.04076 16.25 7.19973 16.3158 7.31694 16.4331C7.43415 16.5503 7.5 16.7092 7.5 16.875C7.5 17.0408 7.43415 17.1997 7.31694 17.3169C7.19973 17.4342 7.04076 17.5 6.875 17.5H3.125C2.95924 17.5 2.80027 17.4342 2.68306 17.3169C2.56585 17.1997 2.5 17.0408 2.5 16.875V13.125C2.5 12.9592 2.56585 12.8003 2.68306 12.6831C2.80027 12.5658 2.95924 12.5 3.125 12.5C3.29076 12.5 3.44973 12.5658 3.56694 12.6831C3.68415 12.8003 3.75 12.9592 3.75 13.125V15.3663L6.4325 12.6838C6.49015 12.6241 6.55912 12.5764 6.63537 12.5437C6.71162 12.5109 6.79364 12.4937 6.87662 12.493C6.95961 12.4922 7.04191 12.5081 7.11872 12.5395C7.19553 12.5709 7.26531 12.6173 7.324 12.676C7.38268 12.7347 7.42909 12.8045 7.46051 12.8813C7.49194 12.9581 7.50775 13.0404 7.50703 13.1234C7.50631 13.2064 7.48907 13.2884 7.45631 13.3646C7.42356 13.4409 7.37594 13.5098 7.31625 13.5675L4.63375 16.25ZM16.25 15.3663V13.125C16.25 12.9592 16.3158 12.8003 16.4331 12.6831C16.5503 12.5658 16.7092 12.5 16.875 12.5C17.0408 12.5 17.1997 12.5658 17.3169 12.6831C17.4342 12.8003 17.5 12.9592 17.5 13.125V16.875C17.5 17.0408 17.4342 17.1997 17.3169 17.3169C17.1997 17.4342 17.0408 17.5 16.875 17.5H13.125C12.9592 17.5 12.8003 17.4342 12.6831 17.3169C12.5658 17.1997 12.5 17.0408 12.5 16.875C12.5 16.7092 12.5658 16.5503 12.6831 16.4331C12.8003 16.3158 12.9592 16.25 13.125 16.25H15.3663L12.6838 13.5675C12.6241 13.5098 12.5764 13.4409 12.5437 13.3646C12.5109 13.2884 12.4937 13.2064 12.493 13.1234C12.4922 13.0404 12.5081 12.9581 12.5395 12.8813C12.5709 12.8045 12.6173 12.7347 12.676 12.676C12.7347 12.6173 12.8045 12.5709 12.8813 12.5395C12.9581 12.5081 13.0404 12.4922 13.1234 12.493C13.2064 12.4937 13.2884 12.5109 13.3646 12.5437C13.4409 12.5764 13.5098 12.6241 13.5675 12.6838L16.25 15.3663Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  </svg>\n);\n\nexport const MenuLinesIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"#121111\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M2.35156 3.99961C2.35156 3.82722 2.42004 3.66189 2.54194 3.53999C2.66384 3.41809 2.82917 3.34961 3.00156 3.34961H13.0016C13.174 3.34961 13.3393 3.41809 13.4612 3.53999C13.5831 3.66189 13.6516 3.82722 13.6516 3.99961C13.6516 4.172 13.5831 4.33733 13.4612 4.45923C13.3393 4.58113 13.174 4.64961 13.0016 4.64961H3.00156C2.82917 4.64961 2.66384 4.58113 2.54194 4.45923C2.42004 4.33733 2.35156 4.172 2.35156 3.99961ZM2.35156 7.99961C2.35156 7.82722 2.42004 7.66189 2.54194 7.53999C2.66384 7.41809 2.82917 7.34961 3.00156 7.34961H10.0016C10.174 7.34961 10.3393 7.41809 10.4612 7.53999C10.5831 7.66189 10.6516 7.82722 10.6516 7.99961C10.6516 8.172 10.5831 8.33733 10.4612 8.45923C10.3393 8.58113 10.174 8.64961 10.0016 8.64961H3.00156C2.82917 8.64961 2.66384 8.58113 2.54194 8.45923C2.42004 8.33733 2.35156 8.172 2.35156 7.99961ZM3.00156 11.3496C2.82917 11.3496 2.66384 11.4181 2.54194 11.54C2.42004 11.6619 2.35156 11.8272 2.35156 11.9996C2.35156 12.172 2.42004 12.3373 2.54194 12.4592C2.66384 12.5811 2.82917 12.6496 3.00156 12.6496H8.00156C8.17395 12.6496 8.33928 12.5811 8.46118 12.4592C8.58308 12.3373 8.65156 12.172 8.65156 11.9996C8.65156 11.8272 8.58308 11.6619 8.46118 11.54C8.33928 11.4181 8.17395 11.3496 8.00156 11.3496H3.00156Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n</svg>\n);\n\nexport const HCollapseIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n  <g clip-path=\"url(#clip0_26973_22856)\">\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"#121111\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n    <path d=\"M15.2937 12.8547C15.3571 12.7918 15.4074 12.7171 15.4417 12.6347C15.476 12.5523 15.4936 12.4639 15.4936 12.3747C15.4936 12.2855 15.476 12.1971 15.4417 12.1147C15.4074 12.0323 15.3571 11.9576 15.2937 11.8947L14.1962 10.8072H19.3263C19.5067 10.8056 19.6794 10.7336 19.8075 10.6066C19.9357 10.4796 20.0093 10.3076 20.0125 10.1272C20.0093 9.94679 19.9357 9.77477 19.8075 9.64777C19.6794 9.52076 19.5067 9.4488 19.3263 9.4472L14.205 9.45595L15.2925 8.37595C15.3557 8.31311 15.4058 8.23841 15.44 8.15615C15.4742 8.07388 15.4918 7.98567 15.4918 7.89658C15.4918 7.80749 15.4742 7.71927 15.44 7.63701C15.4058 7.55474 15.3557 7.48004 15.2925 7.4172C15.1633 7.29062 14.9896 7.21973 14.8087 7.21973C14.6279 7.21973 14.4542 7.29062 14.325 7.4172L12.0687 9.6547C12.0054 9.71756 11.9551 9.79234 11.9208 9.87472C11.8865 9.9571 11.8689 10.0455 11.8689 10.1347C11.8689 10.2239 11.8865 10.3123 11.9208 10.3947C11.9551 10.4771 12.0054 10.5518 12.0687 10.6147L14.3262 12.8547C14.4555 12.9817 14.6294 13.0528 14.8106 13.0528C14.9918 13.0528 15.1657 12.9817 15.295 12.8547H15.2937ZM5.80625 10.8072L4.71 11.8947C4.64666 11.9576 4.59638 12.0323 4.56208 12.1147C4.52777 12.1971 4.51011 12.2855 4.51011 12.3747C4.51011 12.4639 4.52777 12.5523 4.56208 12.6347C4.59638 12.7171 4.64666 12.7918 4.71 12.8547C4.8392 12.9813 5.01287 13.0522 5.19375 13.0522C5.37463 13.0522 5.5483 12.9813 5.6775 12.8547L7.93625 10.6147C7.9994 10.5519 8.04952 10.4772 8.08372 10.3949C8.11791 10.3126 8.13552 10.2244 8.13552 10.1353C8.13552 10.0462 8.11791 9.95802 8.08372 9.87576C8.04952 9.79349 7.9994 9.71879 7.93625 9.65595L5.67875 7.4172C5.54955 7.29062 5.37588 7.21973 5.195 7.21973C5.01412 7.21973 4.84045 7.29062 4.71125 7.4172C4.6481 7.48004 4.59798 7.55474 4.56378 7.63701C4.52959 7.71927 4.51198 7.80749 4.51198 7.89658C4.51198 7.98567 4.52959 8.07388 4.56378 8.15615C4.59798 8.23841 4.6481 8.31311 4.71125 8.37595L5.8 9.45595H0.68625C0.505817 9.45755 0.333134 9.52951 0.204961 9.65652C0.0767887 9.78352 0.00324995 9.95554 0 10.136C0 10.5035 0.30625 10.8072 0.68625 10.8147L5.8075 10.8072H5.80625Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  </g>\n  <defs>\n    <clipPath id=\"clip0_26973_22856\">\n      <rect width=\"20\" height=\"20\" fill=\"white\"/>\n    </clipPath>\n  </defs>\n</svg>\n)\n\nexport const HExpandIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"#121111\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n  <path d=\"M16.573 12.8547C16.5097 12.7918 16.4594 12.7171 16.4251 12.6347C16.3908 12.5523 16.3731 12.4639 16.3731 12.3747C16.3731 12.2855 16.3908 12.1971 16.4251 12.1147C16.4594 12.0323 16.5097 11.9576 16.573 11.8947L17.6705 10.8072H12.5393C12.359 10.8053 12.1867 10.7332 12.0588 10.6062C11.9309 10.4792 11.8575 10.3074 11.8543 10.1272C11.8543 9.7597 12.1605 9.45595 12.5393 9.4472L17.6618 9.45595L16.573 8.37595C16.5099 8.31311 16.4597 8.23841 16.4256 8.15615C16.3914 8.07388 16.3738 7.98567 16.3738 7.89658C16.3738 7.80749 16.3914 7.71927 16.4256 7.63701C16.4597 7.55474 16.5099 7.48004 16.573 7.4172C16.7022 7.29062 16.8759 7.21973 17.0568 7.21973C17.2376 7.21973 17.4113 7.29062 17.5405 7.4172L19.7993 9.6547C19.8626 9.71756 19.9129 9.79234 19.9472 9.87472C19.9815 9.9571 19.9992 10.0455 19.9992 10.1347C19.9992 10.2239 19.9815 10.3123 19.9472 10.3947C19.9129 10.4771 19.8626 10.5518 19.7993 10.6147L17.5405 12.8547C17.4113 12.9813 17.2376 13.0522 17.0568 13.0522C16.8759 13.0522 16.7022 12.9813 16.573 12.8547ZM2.32802 10.8072L3.42552 11.8947C3.48886 11.9576 3.53913 12.0323 3.57344 12.1147C3.60775 12.1971 3.62541 12.2855 3.62541 12.3747C3.62541 12.4639 3.60775 12.5523 3.57344 12.6347C3.53913 12.7171 3.48886 12.7918 3.42552 12.8547C3.29631 12.9813 3.12264 13.0522 2.94177 13.0522C2.76089 13.0522 2.58722 12.9813 2.45802 12.8547L0.199266 10.6147C0.136112 10.5519 0.085997 10.4772 0.0518005 10.3949C0.017604 10.3126 0 10.2244 0 10.1353C0 10.0462 0.017604 9.95802 0.0518005 9.87576C0.085997 9.79349 0.136112 9.71879 0.199266 9.65595L2.45802 7.4172C2.58722 7.29062 2.76089 7.21973 2.94177 7.21973C3.12264 7.21973 3.29631 7.29062 3.42552 7.4172C3.48867 7.48004 3.53879 7.55474 3.57298 7.63701C3.60718 7.71927 3.62478 7.80749 3.62478 7.89658C3.62478 7.98567 3.60718 8.07388 3.57298 8.15615C3.53879 8.23841 3.48867 8.31311 3.42552 8.37595L2.33677 9.45595H7.44927C7.82052 9.45595 8.12677 9.7597 8.13552 10.136C8.13194 10.3161 8.05826 10.4878 7.93013 10.6146C7.80199 10.7413 7.62949 10.8131 7.44927 10.8147L2.32677 10.8072H2.32802Z\" fill=\"black\" fill-opacity=\"0.2\"/>\n</svg>\n)\n\nexport const CommonTypeIcon = ({\n  fill = 'currentColor',\n  size = 28,\n}) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 28 28\" fill={fill}>\n  <path d=\"M25.0691 7.13125L14.5254 1.00625C14.2629 0.83125 13.9129 0.83125 13.6066 1.00625L2.97539 7.0875C2.74781 7.23922 2.58599 7.4896 2.51846 7.7531C2.4979 7.83332 2.49414 7.91656 2.49414 7.99937V20.0813C2.49414 20.3875 2.66914 20.6938 2.93164 20.8687L13.4754 26.9937C13.6066 27.0813 13.7816 27.125 13.9566 27.125C14.1316 27.125 14.2629 27.0813 14.3941 26.9937L24.9816 20.9125C25.2441 20.7375 25.4191 20.4312 25.4629 20.125L25.5066 7.91875C25.5066 7.6125 25.3316 7.30625 25.0691 7.13125ZM23.6293 18.5919C23.6269 19.2159 23.2923 19.7914 22.7513 20.1023L14.834 24.6521C14.2912 24.964 13.6231 24.9622 13.082 24.6474L5.20553 20.0647C4.66481 19.7501 4.33315 19.1708 4.33561 18.5452L4.37144 9.40814C4.37388 8.78412 4.70844 8.20861 5.24949 7.89769L13.1668 3.34793C13.7096 3.03601 14.3777 3.0378 14.9188 3.35263L22.7953 7.93531C23.336 8.2499 23.6676 8.82921 23.6652 9.45478L23.6293 18.5919Z\" fill=\"#4ACCC1\"/>\n  <path d=\"M8.35656 9.88664C7.91906 9.62414 7.35031 9.75539 7.08781 10.1929C6.82531 10.6304 6.95656 11.1991 7.39406 11.4616L13.0816 14.9616L13.1691 20.2116C13.1691 20.6929 13.6066 21.1304 14.0878 21.1304C14.6128 21.1304 15.0066 20.6929 15.0066 20.2116L14.8753 15.0054L20.6066 11.4616C21.0441 11.1991 21.1753 10.6304 20.9128 10.1929C20.6503 9.75539 20.0816 9.62414 19.6441 9.88664L14.0003 13.3866L8.35656 9.88664Z\" fill=\"#4ACCC1\"/>\n</svg>\n);\n\nexport const FlowNodeTypeIcon = ({\n  size = 28,\n}) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\">\n    <path d=\"M22.3125 23.625C22.1398 23.6248 21.9688 23.5905 21.8094 23.5242C21.6499 23.4579 21.505 23.3609 21.3831 23.2386C21.2611 23.1163 21.1644 22.9712 21.0986 22.8115C21.0327 22.6519 20.9989 22.4808 20.9991 22.3081C20.9994 22.1354 21.0336 21.9645 21.0999 21.805C21.1662 21.6455 21.2633 21.5007 21.3856 21.3787C21.5078 21.2567 21.6529 21.1601 21.8126 21.0942C21.9722 21.0283 22.1433 20.9945 22.316 20.9947C22.6648 20.9952 22.9991 21.1342 23.2454 21.3812C23.4917 21.6281 23.6298 21.9628 23.6294 22.3116C23.6289 22.6604 23.4899 22.9947 23.2429 23.241C22.996 23.4874 22.6613 23.6255 22.3125 23.625ZM14 12.6875C14.3481 12.6875 14.6819 12.8258 14.9281 13.0719C15.1742 13.3181 15.3125 13.6519 15.3125 14C15.3125 14.3481 15.1742 14.6819 14.9281 14.9281C14.6819 15.1742 14.3481 15.3125 14 15.3125C13.6519 15.3125 13.3181 15.1742 13.0719 14.9281C12.8258 14.6819 12.6875 14.3481 12.6875 14C12.6875 13.6519 12.8258 13.3181 13.0719 13.0719C13.3181 12.8258 13.6519 12.6875 14 12.6875ZM5.6875 7C5.51491 6.99977 5.34406 6.96555 5.18469 6.89929C5.02533 6.83303 4.88057 6.73603 4.7587 6.61383C4.51256 6.36703 4.37454 6.03256 4.375 5.684C4.37546 5.33544 4.51437 5.00134 4.76117 4.7552C5.00797 4.50906 5.34244 4.37104 5.691 4.3715C6.03956 4.37196 6.37366 4.51087 6.6198 4.75767C6.86594 5.00447 7.00396 5.33894 7.0035 5.6875C7.00304 6.03606 6.86413 6.37016 6.61733 6.6163C6.37053 6.86244 6.03606 7.00046 5.6875 7ZM22.3125 19.25C20.7725 19.25 19.495 20.3927 19.2815 21.875H9.352C8.49643 21.8741 7.67617 21.5338 7.07119 20.9288C6.46621 20.3238 6.12593 19.5036 6.125 18.648V17.9918C6.125 16.2137 7.57225 14.7665 9.352 14.7665H11.0337C11.205 15.4231 11.589 16.0046 12.1256 16.4199C12.6623 16.8353 13.3214 17.0613 14 17.0625C15.4245 17.0625 16.625 16.0842 16.9662 14.7665H18.648C19.9676 14.7651 21.2327 14.2403 22.1657 13.3072C23.0988 12.3742 23.6236 11.1091 23.625 9.7895C23.6236 8.46994 23.0988 7.20483 22.1657 6.27176C21.2327 5.3387 19.9676 4.81389 18.648 4.8125H8.6205C8.43141 4.18122 8.04407 3.62761 7.51582 3.23362C6.98757 2.83964 6.34649 2.62624 5.6875 2.625C3.99875 2.625 2.625 3.99875 2.625 5.6875C2.625 7.37625 3.99875 8.75 5.6875 8.75C7.07175 8.75 8.24425 7.826 8.62225 6.5625H18.6497C19.2866 6.56512 19.9085 6.75595 20.4373 7.11099C20.966 7.46603 21.3781 7.96944 21.6215 8.55795C21.865 9.14647 21.9291 9.79382 21.8058 10.4187C21.6824 11.0435 21.3771 11.6179 20.9282 12.0697C20.3245 12.6753 19.5037 13.0148 18.648 13.0165H16.898C16.6919 12.4111 16.3018 11.8853 15.7822 11.5126C15.2626 11.1398 14.6395 10.9388 14 10.9375C12.656 10.9375 11.5115 11.809 11.1003 13.0165H9.35025C8.0316 13.0184 6.76747 13.5429 5.83488 14.4751C4.90229 15.4074 4.37731 16.6714 4.375 17.99V18.6462C4.37593 19.9661 4.90053 21.2317 5.83365 22.1651C6.76676 23.0986 8.03214 23.6236 9.352 23.625H19.5457C20.0392 24.6575 21.0928 25.375 22.3125 25.375C24.0012 25.375 25.375 24.0012 25.375 22.3125C25.375 20.6238 24.0012 19.25 22.3125 19.25Z\" fill=\"#FF9921\"/>\n  </svg>\n);\n\nexport const ScheduleTypeIcon = ({\n  size = 28,\n}) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\">\n  <path d=\"M14 1.75C17.2489 1.75 20.3647 3.04062 22.6621 5.33794C24.9594 7.63526 26.25 10.7511 26.25 14C26.25 17.2489 24.9594 20.3647 22.6621 22.6621C20.3647 24.9594 17.2489 26.25 14 26.25C10.7511 26.25 7.63526 24.9594 5.33794 22.6621C3.04062 20.3647 1.75 17.2489 1.75 14C1.75 10.7511 3.04062 7.63526 5.33794 5.33794C7.63526 3.04062 10.7511 1.75 14 1.75ZM14 3.5C12.6211 3.5 11.2557 3.77159 9.98182 4.29926C8.70791 4.82694 7.55039 5.60036 6.57538 6.57538C5.60036 7.55039 4.82694 8.70791 4.29926 9.98182C3.77159 11.2557 3.5 12.6211 3.5 14C3.5 15.3789 3.77159 16.7443 4.29926 18.0182C4.82694 19.2921 5.60036 20.4496 6.57538 21.4246C7.55039 22.3996 8.70791 23.1731 9.98182 23.7007C11.2557 24.2284 12.6211 24.5 14 24.5C16.7848 24.5 19.4555 23.3938 21.4246 21.4246C23.3938 19.4555 24.5 16.7848 24.5 14C24.5 11.2152 23.3938 8.54451 21.4246 6.57538C19.4555 4.60625 16.7848 3.5 14 3.5ZM13.125 7C13.3298 6.99993 13.5281 7.0717 13.6855 7.20281C13.8428 7.33391 13.9491 7.51605 13.986 7.7175L14 7.875V14H19.25C19.4548 13.9999 19.6531 14.0717 19.8105 14.2028C19.9678 14.3339 20.0741 14.5161 20.111 14.7175L20.125 14.875C20.1251 15.0798 20.0533 15.2781 19.9222 15.4355C19.7911 15.5928 19.6089 15.6991 19.4075 15.736L19.25 15.75H13.125C12.9202 15.7501 12.7219 15.6783 12.5645 15.5472C12.4072 15.4161 12.3009 15.2339 12.264 15.0325L12.25 14.875V7.875C12.25 7.64294 12.3422 7.42038 12.5063 7.25628C12.6704 7.09219 12.8929 7 13.125 7Z\" fill=\"#F06648\"/>\n</svg>\n);\n\nexport const FormTypeIcon = ({\n  size = 28,\n}) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\">\n  <path d=\"M16.954 1.75L24.5 8.35275V23.625C24.5 24.3212 24.2234 24.9889 23.7312 25.4812C23.2389 25.9734 22.5712 26.25 21.875 26.25H6.125C5.42881 26.25 4.76113 25.9734 4.26884 25.4812C3.77656 24.9889 3.5 24.3212 3.5 23.625V4.375C3.5 3.67881 3.77656 3.01113 4.26884 2.51884C4.76113 2.02656 5.42881 1.75 6.125 1.75H16.954ZM14.875 3.5H6.125C5.89294 3.5 5.67038 3.59219 5.50628 3.75628C5.34219 3.92038 5.25 4.14294 5.25 4.375V23.625C5.25 23.8571 5.34219 24.0796 5.50628 24.2437C5.67038 24.4078 5.89294 24.5 6.125 24.5H21.875C22.1071 24.5 22.3296 24.4078 22.4937 24.2437C22.6578 24.0796 22.75 23.8571 22.75 23.625V10.5H17.5C16.8475 10.5 16.2183 10.2569 15.7353 9.81817C15.2522 9.37944 14.9499 8.77653 14.8872 8.127L14.875 7.875V3.5ZM19.25 18.375C19.4687 18.3746 19.6795 18.4561 19.8411 18.6034C20.0027 18.7507 20.1033 18.9532 20.123 19.1709C20.1428 19.3887 20.0803 19.606 19.9479 19.78C19.8154 19.9539 19.6227 20.072 19.4075 20.111L19.25 20.125H8.75C8.53134 20.1254 8.32046 20.0439 8.15888 19.8966C7.9973 19.7493 7.89673 19.5468 7.87697 19.3291C7.85721 19.1113 7.9197 18.894 8.05213 18.72C8.18457 18.5461 8.37734 18.428 8.5925 18.389L8.75 18.375H19.25ZM19.25 14C19.4687 13.9996 19.6795 14.0811 19.8411 14.2284C20.0027 14.3757 20.1033 14.5782 20.123 14.7959C20.1428 15.0137 20.0803 15.231 19.9479 15.405C19.8154 15.5789 19.6227 15.697 19.4075 15.736L19.25 15.75H8.75C8.53134 15.7504 8.32046 15.6689 8.15888 15.5216C7.9973 15.3743 7.89673 15.1718 7.87697 14.9541C7.85721 14.7363 7.9197 14.519 8.05213 14.345C8.18457 14.1711 8.37734 14.053 8.5925 14.014L8.75 14H19.25ZM16.625 3.78875V7.875C16.6249 8.07979 16.6967 8.27813 16.8278 8.43545C16.9589 8.59278 17.1411 8.69914 17.3425 8.736L17.5 8.75H22.2968L16.625 3.78875Z\" fill=\"#0265FF\"/>\n</svg>\n)\n\nexport const GoToFormIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"currentColor\"\n  >\n    <path d=\"M14.625 6.36445V6.26445C14.625 6.23945 14.625 6.23945 14.6 6.21445C14.6 6.18945 14.6 6.18945 14.575 6.16445C14.575 6.13945 14.55 6.13945 14.55 6.11445C14.55 6.08945 14.525 6.08945 14.525 6.06445C14.525 6.06445 14.525 6.03945 14.5 6.03945L9.975 0.514453L9.95 0.489453C9.95 0.464453 9.925 0.464453 9.9 0.439453C9.9 0.439453 9.875 0.414453 9.85 0.414453C9.825 0.414453 9.825 0.389453 9.8 0.389453C9.775 0.389453 9.775 0.364453 9.75 0.364453C9.725 0.364453 9.725 0.339453 9.7 0.339453C9.675 0.339453 9.675 0.339453 9.65 0.314453H2.675C1.95 0.314453 1.375 0.939453 1.375 1.73945V8.28945C1.375 8.58945 1.6 8.81445 1.9 8.81445C2.2 8.81445 2.425 8.58945 2.425 8.28945V1.73945C2.425 1.51445 2.55 1.36445 2.675 1.36445H9.05V5.43945C9.05 6.23945 9.65 6.88945 10.4 6.88945H13.6V13.8395C13.6 14.0645 13.475 14.2645 13.3 14.2645H2.725C2.575 14.2645 2.425 14.0645 2.425 13.8395V12.8895C2.425 12.5895 2.2 12.3645 1.9 12.3645C1.6 12.3645 1.375 12.5895 1.375 12.8895V13.8395C1.375 14.6395 1.975 15.2895 2.725 15.2895H13.3C14.05 15.2895 14.65 14.6395 14.65 13.8395L14.625 6.36445ZM10.1 5.43945V2.31445L13 5.86445H10.375C10.225 5.86445 10.1 5.66445 10.1 5.43945Z\" />\n    <path d=\"M1.42585 10.5887C1.42585 10.8887 1.65085 11.1137 1.95085 11.1137H8.30085L7.07585 12.3387C6.87585 12.5387 6.87585 12.8637 7.07585 13.0887C7.17585 13.1887 7.30085 13.2387 7.45085 13.2387C7.60085 13.2387 7.72585 13.1887 7.82585 13.0887L9.95085 10.9637C10.0508 10.8637 10.1008 10.7137 10.1008 10.5637C10.1008 10.4137 10.0508 10.2637 9.95085 10.1637L7.82585 8.03867C7.62585 7.83867 7.30085 7.83867 7.07585 8.03867C6.87585 8.23867 6.87585 8.56367 7.07585 8.78867L8.37585 10.0887H1.95085C1.88287 10.0842 1.81471 10.0939 1.75068 10.1172C1.68664 10.1404 1.62811 10.1766 1.57878 10.2236C1.52945 10.2706 1.4904 10.3273 1.46407 10.3901C1.43775 10.453 1.42474 10.5206 1.42585 10.5887Z\" />\n  </svg>\n);","import * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\nimport { IconBtn } from \"../icon-btn\"\nimport { CloseIcon } from \"../bs-icons\"\n\nfunction Drawer({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n  return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n  return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n  container,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal> & {\n  container?: HTMLElement | null;\n}) {\n  return (\n    <DrawerPrimitive.Portal\n      data-slot=\"drawer-portal\"\n      container={container ?? undefined}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerClose({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n  return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n  return (\n    <DrawerPrimitive.Overlay\n      data-slot=\"drawer-overlay\"\n      className={cn(\n        \"fixed inset-0 z-50 bg-black/30 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerContent({\n  className,\n  children,\n  container: containerProp,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content> & {\n  container?: HTMLElement | null;\n}) {\n  const [autoContainer, setAutoContainer] = React.useState<HTMLElement | null>(null);\n\n  const setDetectorRef = React.useCallback((node: HTMLElement | null) => {\n    if (!node) return;\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-drawer-portal]');\n      if (existing) {\n        setAutoContainer(existing);\n        return;\n      }\n\n      // vaul injects its CSS (keyframes, transitions) into document.head at module load.\n      // Clone it into the ShadowRoot so animations work when portaled inside Shadow DOM.\n      if (!rootNode.querySelector('style[data-bs-vaul-style]')) {\n        const vaulStyle = Array.from(document.head.querySelectorAll('style')).find(\n          (el) => el.textContent?.includes('[data-vaul-drawer]')\n        );\n        if (vaulStyle) {\n          const cloned = vaulStyle.cloneNode(true) as HTMLStyleElement;\n          cloned.setAttribute('data-bs-vaul-style', '');\n          rootNode.appendChild(cloned);\n        }\n      }\n\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-drawer-portal', 'true');\n      rootNode.appendChild(container);\n      setAutoContainer(container);\n    }\n  }, []);\n\n  const effectiveContainer = containerProp !== undefined ? containerProp : autoContainer;\n\n  return (\n    <>\n      {containerProp === undefined && (\n        <span ref={setDetectorRef} style={{ display: 'none' }} aria-hidden />\n      )}\n      <DrawerPortal container={effectiveContainer ?? undefined}>\n        <DrawerOverlay />\n        <DrawerPrimitive.Content\n          data-slot=\"drawer-content\"\n          className={cn(\n            \"group/drawer-content fixed z-50 flex h-auto flex-col bg-white shadow-xl\",\n            \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg\",\n            \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[calc(100vh-52px)] data-[vaul-drawer-direction=bottom]:rounded-t-[10px]\",\n            \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n            \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n            \"rounded-0!\",\n            className\n          )}\n          {...props}\n          style={{\n            ...(props.style || {}),\n            borderRadius: 0,\n          }}\n        >\n          {children}\n        </DrawerPrimitive.Content>\n      </DrawerPortal>\n    </>\n  )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"drawer-header\"\n      className={cn(\n        \"flex items-center justify-center relative h-[50px] shrink-0 border-b border-[#E0E0E0]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerBody({ className, children, style, ...props }: React.ComponentProps<\"div\"> & {\n  full?: boolean;\n}) {\n  const bodyRef = React.useRef<HTMLDivElement>(null);\n  const contentRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    const el = bodyRef.current;\n    if (!el) return;\n\n    const handleWheel = (e: WheelEvent) => {\n      const { scrollTop, scrollHeight, clientHeight } = el;\n      const atTop = scrollTop <= 0;\n      const atBottom = scrollTop + clientHeight >= scrollHeight - 1;\n\n      if ((e.deltaY > 0 && !atBottom) || (e.deltaY < 0 && !atTop)) {\n        e.stopPropagation();\n      }\n    };\n\n    el.addEventListener(\"wheel\", handleWheel);\n    return () => el.removeEventListener(\"wheel\", handleWheel);\n  }, []);\n\n  React.useEffect(() => {\n    const content = contentRef.current;\n    const body = bodyRef.current;\n    if (!content || !body) return;\n\n    const observer = new ResizeObserver(() => {\n      body.scrollTo({ top: body.scrollHeight, behavior: \"smooth\" });\n    });\n\n    observer.observe(content);\n    return () => observer.disconnect();\n  }, []);\n\n  return (\n    <div\n      ref={bodyRef}\n      data-slot=\"drawer-body\"\n      className={cn(\"flex-1 overflow-y-auto bg-[#F5F7FA]\", className)}\n      style={{ scrollbarGutter: \"stable\", ...style }}\n      {...props}\n    >\n      <div\n        ref={contentRef}\n        className={cn(\"content-wrapper w-[1120px] bg-white mx-auto p-5 rounded-lg my-5\", {\n          \"w-[calc(100%-40px)]\": props.full,\n          \"h-[calc(100%-40px)]\": props.full,\n          'mx-5': props.full,\n          \"w-[1120px]\": !props.full,\n        })}\n      >\n        {children}\n      </div>\n    </div>\n  );\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"drawer-footer\"\n      className={cn(\n        \"flex items-center justify-center gap-4 h-[52px] shrink-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n  return (\n    <DrawerPrimitive.Title\n      data-slot=\"drawer-title\"\n      className={cn(\"text-[18px] font-semibold text-black\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n  return (\n    <DrawerPrimitive.Description\n      data-slot=\"drawer-description\"\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nconst DrawerCloseButton = React.forwardRef<\n  React.ElementRef<typeof DrawerPrimitive.Close>,\n  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Close>\n>(({ className, ...props }, ref) => (\n  <DrawerPrimitive.Close\n    ref={ref}\n    className={cn(\n      \"absolute right-3 top-1/2 -translate-y-1/2 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n      className\n    )}\n    {...props}\n  >\n    {/* <X className=\"h-4 w-4\" /> */}\n    <IconBtn\n      icon={ <CloseIcon />}\n    />\n    <span className=\"sr-only\">Close</span>\n  </DrawerPrimitive.Close>\n))\nDrawerCloseButton.displayName = \"DrawerCloseButton\"\n\nexport {\n  Drawer,\n  DrawerPortal,\n  DrawerOverlay,\n  DrawerTrigger,\n  DrawerClose,\n  DrawerContent,\n  DrawerHeader,\n  DrawerBody,\n  DrawerFooter,\n  DrawerTitle,\n  DrawerDescription,\n  DrawerCloseButton,\n}\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n  const {\n    __scopePopover,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    modal = false\n  } = props;\n  const popperScope = usePopperScope(__scopePopover);\n  const triggerRef = React.useRef(null);\n  const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: POPOVER_NAME\n  });\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    PopoverProvider,\n    {\n      scope: __scopePopover,\n      contentId: useId(),\n      triggerRef,\n      open,\n      onOpenChange: setOpen,\n      onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n      hasCustomAnchor,\n      onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n      onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n      modal,\n      children\n    }\n  ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...anchorProps } = props;\n    const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n    React.useEffect(() => {\n      onCustomAnchorAdd();\n      return () => onCustomAnchorRemove();\n    }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n  }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...triggerProps } = props;\n    const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n    const trigger = /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-haspopup\": \"dialog\",\n        \"aria-expanded\": context.open,\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"data-state\": getState(context.open),\n        ...triggerProps,\n        ref: composedTriggerRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n    return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n  }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n  const { __scopePopover, forceMount, children, container } = props;\n  const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n  }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, contentRef);\n    const isRightClickOutsideRef = React.useRef(false);\n    React.useEffect(() => {\n      const content = contentRef.current;\n      if (content) return hideOthers(content);\n    }, []);\n    return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n      PopoverContentImpl,\n      {\n        ...props,\n        ref: composedRefs,\n        trapFocus: context.open,\n        disableOutsidePointerEvents: true,\n        onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n          event.preventDefault();\n          if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n        }),\n        onPointerDownOutside: composeEventHandlers(\n          props.onPointerDownOutside,\n          (event) => {\n            const originalEvent = event.detail.originalEvent;\n            const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n            const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n            isRightClickOutsideRef.current = isRightClick;\n          },\n          { checkForDefaultPrevented: false }\n        ),\n        onFocusOutside: composeEventHandlers(\n          props.onFocusOutside,\n          (event) => event.preventDefault(),\n          { checkForDefaultPrevented: false }\n        )\n      }\n    ) });\n  }\n);\nvar PopoverContentNonModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    const hasInteractedOutsideRef = React.useRef(false);\n    const hasPointerDownOutsideRef = React.useRef(false);\n    return /* @__PURE__ */ jsx(\n      PopoverContentImpl,\n      {\n        ...props,\n        ref: forwardedRef,\n        trapFocus: false,\n        disableOutsidePointerEvents: false,\n        onCloseAutoFocus: (event) => {\n          props.onCloseAutoFocus?.(event);\n          if (!event.defaultPrevented) {\n            if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n            event.preventDefault();\n          }\n          hasInteractedOutsideRef.current = false;\n          hasPointerDownOutsideRef.current = false;\n        },\n        onInteractOutside: (event) => {\n          props.onInteractOutside?.(event);\n          if (!event.defaultPrevented) {\n            hasInteractedOutsideRef.current = true;\n            if (event.detail.originalEvent.type === \"pointerdown\") {\n              hasPointerDownOutsideRef.current = true;\n            }\n          }\n          const target = event.target;\n          const targetIsTrigger = context.triggerRef.current?.contains(target);\n          if (targetIsTrigger) event.preventDefault();\n          if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n            event.preventDefault();\n          }\n        }\n      }\n    );\n  }\n);\nvar PopoverContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopover,\n      trapFocus,\n      onOpenAutoFocus,\n      onCloseAutoFocus,\n      disableOutsidePointerEvents,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      ...contentProps\n    } = props;\n    const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    useFocusGuards();\n    return /* @__PURE__ */ jsx(\n      FocusScope,\n      {\n        asChild: true,\n        loop: true,\n        trapped: trapFocus,\n        onMountAutoFocus: onOpenAutoFocus,\n        onUnmountAutoFocus: onCloseAutoFocus,\n        children: /* @__PURE__ */ jsx(\n          DismissableLayer,\n          {\n            asChild: true,\n            disableOutsidePointerEvents,\n            onInteractOutside,\n            onEscapeKeyDown,\n            onPointerDownOutside,\n            onFocusOutside,\n            onDismiss: () => context.onOpenChange(false),\n            children: /* @__PURE__ */ jsx(\n              PopperPrimitive.Content,\n              {\n                \"data-state\": getState(context.open),\n                role: \"dialog\",\n                id: context.contentId,\n                ...popperScope,\n                ...contentProps,\n                ref: forwardedRef,\n                style: {\n                  ...contentProps.style,\n                  // re-namespace exposed content custom properties\n                  ...{\n                    \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                    \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n                    \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n                    \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                    \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n                  }\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...closeProps } = props;\n    const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n      }\n    );\n  }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopePopover);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n  Anchor2 as Anchor,\n  Arrow2 as Arrow,\n  Close,\n  Content2 as Content,\n  Popover,\n  PopoverAnchor,\n  PopoverArrow,\n  PopoverClose,\n  PopoverContent,\n  PopoverPortal,\n  PopoverTrigger,\n  Portal,\n  Root2 as Root,\n  Trigger,\n  createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\n\nimport { cn } from '../../lib/utils';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\ntype PopoverContentProps = React.ComponentPropsWithoutRef<\n  typeof PopoverPrimitive.Content\n> & {\n  portalContainer?: HTMLElement | null;\n};\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  PopoverContentProps\n>(\n  (\n    { className, align = 'start', sideOffset = 4, portalContainer, style, onWheel, ...props },\n    ref\n  ) => {\n    const handleWheel = portalContainer\n      ? (e: React.WheelEvent<HTMLDivElement>) => {\n          let el: HTMLElement | null = e.target as HTMLElement;\n          while (el && el !== e.currentTarget) {\n            const { overflowY } = window.getComputedStyle(el);\n            if (overflowY === 'auto' || overflowY === 'scroll') {\n              if (el.scrollHeight > el.clientHeight) {\n                const atTop = el.scrollTop <= 0;\n                const atBottom = el.scrollTop + el.clientHeight >= el.scrollHeight;\n                if ((e.deltaY < 0 && !atTop) || (e.deltaY > 0 && !atBottom)) {\n                  e.preventDefault();\n                  el.scrollTop += e.deltaY;\n                }\n                return;\n              }\n            }\n            el = el.parentElement;\n          }\n          onWheel?.(e);\n        }\n      : onWheel;\n\n    return (\n      <PopoverPrimitive.Portal container={portalContainer ?? undefined}>\n        <PopoverPrimitive.Content\n          ref={ref}\n          align={align}\n          sideOffset={sideOffset}\n          onWheel={handleWheel}\n          className={cn(\n            'z-50 w-60 rounded-[8px] bg-white p-1 text-[#121111] shadow-[0px_6px_16px_rgba(0,0,0,0.06)] outline-none',\n            'data-[state=open]:animate-in data-[state=closed]:animate-out',\n            'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n            'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n            'data-[side=bottom]:slide-in-from-top-2',\n            'data-[side=left]:slide-in-from-right-2',\n            'data-[side=right]:slide-in-from-left-2',\n            'data-[side=top]:slide-in-from-bottom-2',\n            className\n          )}\n          style={{\n            transformOrigin: 'var(--radix-popover-content-transform-origin)',\n            ...style,\n          }}\n          {...props}\n        />\n      </PopoverPrimitive.Portal>\n    );\n  }\n);\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n  /^([A-Z])|[\\s-_]+(\\w)/g,\n  (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n  const camelCase = toCamelCase(string);\n  return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n  for (const prop in props) {\n    if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n      return true;\n    }\n  }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 2,\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n  ({\n    color = \"currentColor\",\n    size = 24,\n    strokeWidth = 2,\n    absoluteStrokeWidth,\n    className = \"\",\n    children,\n    iconNode,\n    ...rest\n  }, ref) => createElement(\n    \"svg\",\n    {\n      ref,\n      ...defaultAttributes,\n      width: size,\n      height: size,\n      stroke: color,\n      strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n      className: mergeClasses(\"lucide\", className),\n      ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n      ...rest\n    },\n    [\n      ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n      ...Array.isArray(children) ? children : [children]\n    ]\n  )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n  const Component = forwardRef(\n    ({ className, ...props }, ref) => createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(\n        `lucide-${toKebabCase(toPascalCase(iconName))}`,\n        `lucide-${iconName}`,\n        className\n      ),\n      ...props\n    })\n  );\n  Component.displayName = toPascalCase(iconName);\n  return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"chevron-up\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m11 17-5-5 5-5\", key: \"13zhaf\" }],\n  [\"path\", { d: \"m18 17-5-5 5-5\", key: \"h8a8et\" }]\n];\nconst ChevronsLeft = createLucideIcon(\"chevrons-left\", __iconNode);\n\nexport { __iconNode, ChevronsLeft as default };\n//# sourceMappingURL=chevrons-left.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m6 17 5-5-5-5\", key: \"xnjwq\" }],\n  [\"path\", { d: \"m13 17 5-5-5-5\", key: \"17xmmf\" }]\n];\nconst ChevronsRight = createLucideIcon(\"chevrons-right\", __iconNode);\n\nexport { __iconNode, ChevronsRight as default };\n//# sourceMappingURL=chevrons-right.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n      key: \"1ffxy3\"\n    }\n  ],\n  [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * @license lucide-react v0.554.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { Loader2Icon } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n  return (\n    // @ts-ignore\n    <Loader2Icon\n      role=\"status\"\n      aria-label=\"Loading\"\n      className={cn(\"size-4 animate-spin\", className)}\n      {...props}\n    />\n  );\n}\n\nexport { Spinner };\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n  return /* @__PURE__ */ jsx(\n    Primitive.label,\n    {\n      ...props,\n      ref: forwardedRef,\n      onMouseDown: (event) => {\n        const target = event.target;\n        if (target.closest(\"button, input, select, textarea\")) return;\n        props.onMouseDown?.(event);\n        if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n      }\n    }\n  );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n  Label,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\n\nimport { cn } from '../../lib/utils';\n\ninterface LabelProps\n  extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n  required?: boolean;\n}\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  LabelProps\n>(({ className, children, required, ...props }, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(\n      'text-[14px] font-bold text-[#030303] leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-foreground',\n      className\n    )}\n    {...props}\n  >\n    {required && <span className=\"text-[#ff5631]\">*</span>}\n    {children}\n  </LabelPrimitive.Root>\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\nexport type { LabelProps };\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nconst Input = React.forwardRef<\n  HTMLInputElement,\n  React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, type, ...props }, ref) => (\n  <input\n    type={type}\n    className={cn(\n      'h-[34px] px-[10px] py-[7px] rounded-[4px]',\n      'bg-white border border-[#e0e0e0]',\n      'text-[14px] text-[#030303] placeholder:text-[#999999]',\n      'focus:outline-none focus:border-[#0265ff] focus:ring-0',\n      'disabled:bg-[#eff0f6] disabled:cursor-not-allowed disabled:opacity-100',\n      'dark:bg-background dark:border-border dark:text-foreground dark:placeholder:text-muted-foreground',\n      'dark:disabled:bg-[oklch(0.279_0.041_260.031)]',\n      'w-full',\n      className\n    )}\n    ref={ref}\n    {...props}\n  />\n));\nInput.displayName = 'Input';\n\nexport { Input };\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nconst Textarea = React.forwardRef<\n  HTMLTextAreaElement,\n  React.TextareaHTMLAttributes<HTMLTextAreaElement>\n>(({ className, ...props }, ref) => (\n  <textarea\n    className={cn(\n      'h-[120px] p-[10px] rounded-[4px]',\n      'bg-white border border-[#e0e0e0]',\n      'text-[14px] text-[#030303] placeholder:text-[#999999]',\n      'focus:outline-none focus:border-[#0265ff] focus:ring-0',\n      'disabled:bg-[#eff0f6] disabled:cursor-not-allowed disabled:opacity-100',\n      'dark:bg-background dark:border-border dark:text-foreground dark:placeholder:text-muted-foreground',\n      'dark:disabled:bg-[oklch(0.279_0.041_260.031)]',\n      'resize-none',\n      'w-full',\n      className\n    )}\n    ref={ref}\n    {...props}\n  />\n));\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","// src/number.ts\nfunction clamp(value, [min, max]) {\n  return Math.min(max, Math.max(min, value));\n}\nexport {\n  clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n  );\n  const CollectionProvider = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef(null);\n    const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n    return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...itemData });\n        return () => void context.itemMap.delete(ref);\n      });\n      return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useCollection(scope) {\n    const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n    const getItems = React.useCallback(() => {\n      const collectionNode = context.collectionRef.current;\n      if (!collectionNode) return [];\n      const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n      const items = Array.from(context.itemMap.values());\n      const orderedItems = items.sort(\n        (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n      );\n      return orderedItems;\n    }, [context.collectionRef, context.itemMap]);\n    return getItems;\n  }\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope\n  ];\n}\n\n// src/collection.tsx\nimport * as React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n  #keys;\n  constructor(entries) {\n    super(entries);\n    this.#keys = [...super.keys()];\n    __instanciated.set(this, true);\n  }\n  set(key, value) {\n    if (__instanciated.get(this)) {\n      if (this.has(key)) {\n        this.#keys[this.#keys.indexOf(key)] = key;\n      } else {\n        this.#keys.push(key);\n      }\n    }\n    super.set(key, value);\n    return this;\n  }\n  insert(index, key, value) {\n    const has = this.has(key);\n    const length = this.#keys.length;\n    const relativeIndex = toSafeInteger(index);\n    let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n    const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n    if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n      this.set(key, value);\n      return this;\n    }\n    const size = this.size + (has ? 0 : 1);\n    if (relativeIndex < 0) {\n      actualIndex++;\n    }\n    const keys = [...this.#keys];\n    let nextValue;\n    let shouldSkip = false;\n    for (let i = actualIndex; i < size; i++) {\n      if (actualIndex === i) {\n        let nextKey = keys[i];\n        if (keys[i] === key) {\n          nextKey = keys[i + 1];\n        }\n        if (has) {\n          this.delete(key);\n        }\n        nextValue = this.get(nextKey);\n        this.set(key, value);\n      } else {\n        if (!shouldSkip && keys[i - 1] === key) {\n          shouldSkip = true;\n        }\n        const currentKey = keys[shouldSkip ? i : i - 1];\n        const currentValue = nextValue;\n        nextValue = this.get(currentKey);\n        this.delete(currentKey);\n        this.set(currentKey, currentValue);\n      }\n    }\n    return this;\n  }\n  with(index, key, value) {\n    const copy = new _OrderedDict(this);\n    copy.insert(index, key, value);\n    return copy;\n  }\n  before(key) {\n    const index = this.#keys.indexOf(key) - 1;\n    if (index < 0) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position before the given key.\n   */\n  setBefore(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index, newKey, value);\n  }\n  after(key) {\n    let index = this.#keys.indexOf(key);\n    index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n    if (index === -1) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position after the given key.\n   */\n  setAfter(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index + 1, newKey, value);\n  }\n  first() {\n    return this.entryAt(0);\n  }\n  last() {\n    return this.entryAt(-1);\n  }\n  clear() {\n    this.#keys = [];\n    return super.clear();\n  }\n  delete(key) {\n    const deleted = super.delete(key);\n    if (deleted) {\n      this.#keys.splice(this.#keys.indexOf(key), 1);\n    }\n    return deleted;\n  }\n  deleteAt(index) {\n    const key = this.keyAt(index);\n    if (key !== void 0) {\n      return this.delete(key);\n    }\n    return false;\n  }\n  at(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return this.get(key);\n    }\n  }\n  entryAt(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return [key, this.get(key)];\n    }\n  }\n  indexOf(key) {\n    return this.#keys.indexOf(key);\n  }\n  keyAt(index) {\n    return at(this.#keys, index);\n  }\n  from(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.at(dest);\n  }\n  keyFrom(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.keyAt(dest);\n  }\n  find(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return entry;\n      }\n      index++;\n    }\n    return void 0;\n  }\n  findIndex(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return index;\n      }\n      index++;\n    }\n    return -1;\n  }\n  filter(predicate, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        entries.push(entry);\n      }\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  map(callbackfn, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  reduce(...args) {\n    const [callbackfn, initialValue] = args;\n    let index = 0;\n    let accumulator = initialValue ?? this.at(0);\n    for (const entry of this) {\n      if (index === 0 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n      index++;\n    }\n    return accumulator;\n  }\n  reduceRight(...args) {\n    const [callbackfn, initialValue] = args;\n    let accumulator = initialValue ?? this.at(-1);\n    for (let index = this.size - 1; index >= 0; index--) {\n      const entry = this.at(index);\n      if (index === this.size - 1 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n    }\n    return accumulator;\n  }\n  toSorted(compareFn) {\n    const entries = [...this.entries()].sort(compareFn);\n    return new _OrderedDict(entries);\n  }\n  toReversed() {\n    const reversed = new _OrderedDict();\n    for (let index = this.size - 1; index >= 0; index--) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      reversed.set(key, element);\n    }\n    return reversed;\n  }\n  toSpliced(...args) {\n    const entries = [...this.entries()];\n    entries.splice(...args);\n    return new _OrderedDict(entries);\n  }\n  slice(start, end) {\n    const result = new _OrderedDict();\n    let stop = this.size - 1;\n    if (start === void 0) {\n      return result;\n    }\n    if (start < 0) {\n      start = start + this.size;\n    }\n    if (end !== void 0 && end > 0) {\n      stop = end - 1;\n    }\n    for (let index = start; index <= stop; index++) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      result.set(key, element);\n    }\n    return result;\n  }\n  every(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return false;\n      }\n      index++;\n    }\n    return true;\n  }\n  some(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return true;\n      }\n      index++;\n    }\n    return false;\n  }\n};\nfunction at(array, index) {\n  if (\"at\" in Array.prototype) {\n    return Array.prototype.at.call(array, index);\n  }\n  const actualIndex = toSafeIndex(array, index);\n  return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n  const length = array.length;\n  const relativeIndex = toSafeInteger(index);\n  const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n  return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n  return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n  const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    {\n      collectionElement: null,\n      collectionRef: { current: null },\n      collectionRefObject: { current: null },\n      itemMap: new OrderedDict(),\n      setItemMap: () => void 0\n    }\n  );\n  const CollectionProvider = ({ state, ...props }) => {\n    return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const CollectionInit = (props) => {\n    const state = useInitCollection();\n    return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n  };\n  CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n  const CollectionProviderImpl = (props) => {\n    const { scope, children, state } = props;\n    const ref = React2.useRef(null);\n    const [collectionElement, setCollectionElement] = React2.useState(\n      null\n    );\n    const composeRefs = useComposedRefs2(ref, setCollectionElement);\n    const [itemMap, setItemMap] = state;\n    React2.useEffect(() => {\n      if (!collectionElement) return;\n      const observer = getChildListObserver(() => {\n      });\n      observer.observe(collectionElement, {\n        childList: true,\n        subtree: true\n      });\n      return () => {\n        observer.disconnect();\n      };\n    }, [collectionElement]);\n    return /* @__PURE__ */ jsx2(\n      CollectionContextProvider,\n      {\n        scope,\n        itemMap,\n        setItemMap,\n        collectionRef: composeRefs,\n        collectionRefObject: ref,\n        collectionElement,\n        children\n      }\n    );\n  };\n  CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React2.useRef(null);\n      const [element, setElement] = React2.useState(null);\n      const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      const { setItemMap } = context;\n      const itemDataRef = React2.useRef(itemData);\n      if (!shallowEqual(itemDataRef.current, itemData)) {\n        itemDataRef.current = itemData;\n      }\n      const memoizedItemData = itemDataRef.current;\n      React2.useEffect(() => {\n        const itemData2 = memoizedItemData;\n        setItemMap((map) => {\n          if (!element) {\n            return map;\n          }\n          if (!map.has(element)) {\n            map.set(element, { ...itemData2, element });\n            return map.toSorted(sortByDocumentPosition);\n          }\n          return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n        });\n        return () => {\n          setItemMap((map) => {\n            if (!element || !map.has(element)) {\n              return map;\n            }\n            map.delete(element);\n            return new OrderedDict(map);\n          });\n        };\n      }, [element, memoizedItemData, setItemMap]);\n      return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useInitCollection() {\n    return React2.useState(new OrderedDict());\n  }\n  function useCollection(scope) {\n    const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n    return itemMap;\n  }\n  const functions = {\n    createCollectionScope,\n    useCollection,\n    useInitCollection\n  };\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    functions\n  ];\n}\nfunction shallowEqual(a, b) {\n  if (a === b) return true;\n  if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n  if (a == null || b == null) return false;\n  const keysA = Object.keys(a);\n  const keysB = Object.keys(b);\n  if (keysA.length !== keysB.length) return false;\n  for (const key of keysA) {\n    if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n    if (a[key] !== b[key]) return false;\n  }\n  return true;\n}\nfunction isElementPreceding(a, b) {\n  return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n  return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n  const observer = new MutationObserver((mutationsList) => {\n    for (const mutation of mutationsList) {\n      if (mutation.type === \"childList\") {\n        callback();\n        return;\n      }\n    }\n  });\n  return observer;\n}\nexport {\n  createCollection,\n  createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n  const { dir, children } = props;\n  return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n  DirectionProvider,\n  Provider,\n  useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n  const ref = React.useRef({ value, previous: value });\n  return React.useMemo(() => {\n    if (ref.current.value !== value) {\n      ref.current.previous = ref.current.value;\n      ref.current.value = value;\n    }\n    return ref.current.previous;\n  }, [value]);\n}\nexport {\n  usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment as Fragment2, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n  createCollectionScope,\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar PROVIDER_NAME = \"SelectProvider\";\nfunction SelectProvider(props) {\n  const {\n    __scopeSelect,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    value: valueProp,\n    defaultValue,\n    onValueChange,\n    dir,\n    name,\n    autoComplete,\n    disabled,\n    required,\n    form,\n    // @ts-expect-error internal render prop used by `Select` to compose its default parts\n    internal_do_not_use_render\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  const [trigger, setTrigger] = React.useState(null);\n  const [valueNode, setValueNode] = React.useState(null);\n  const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n  const direction = useDirection(dir);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: SELECT_NAME\n  });\n  const [value, setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n    caller: SELECT_NAME\n  });\n  const triggerPointerDownPosRef = React.useRef(null);\n  const isFormControl = trigger ? !!form || !!trigger.closest(\"form\") : true;\n  const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n  const contentId = useId();\n  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n  const handleNativeOptionAdd = React.useCallback((option) => {\n    setNativeOptionsSet((prev) => new Set(prev).add(option));\n  }, []);\n  const handleNativeOptionRemove = React.useCallback((option) => {\n    setNativeOptionsSet((prev) => {\n      const optionsSet = new Set(prev);\n      optionsSet.delete(option);\n      return optionsSet;\n    });\n  }, []);\n  const context = {\n    required,\n    trigger,\n    onTriggerChange: setTrigger,\n    valueNode,\n    onValueNodeChange: setValueNode,\n    valueNodeHasChildren,\n    onValueNodeHasChildrenChange: setValueNodeHasChildren,\n    contentId,\n    value,\n    onValueChange: setValue,\n    open,\n    onOpenChange: setOpen,\n    dir: direction,\n    triggerPointerDownPosRef,\n    disabled,\n    name,\n    autoComplete,\n    form,\n    nativeOptions: nativeOptionsSet,\n    nativeSelectKey,\n    isFormControl\n  };\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n    SelectNativeOptionsProvider,\n    {\n      scope: __scopeSelect,\n      onNativeOptionAdd: handleNativeOptionAdd,\n      onNativeOptionRemove: handleNativeOptionRemove,\n      children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n    }\n  ) }) }) });\n}\nSelectProvider.displayName = PROVIDER_NAME;\nvar Select = (props) => {\n  const { __scopeSelect, children, ...providerProps } = props;\n  return /* @__PURE__ */ jsx(\n    SelectProvider,\n    {\n      __scopeSelect,\n      ...providerProps,\n      internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment2, { children: [\n        children,\n        isFormControl ? /* @__PURE__ */ jsx(\n          SelectBubbleInput,\n          {\n            __scopeSelect\n          }\n        ) : null\n      ] })\n    }\n  );\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, disabled = false, ...triggerProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n    const isDisabled = context.disabled || disabled;\n    const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n    const getItems = useCollection(__scopeSelect);\n    const pointerTypeRef = React.useRef(\"touch\");\n    const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.value === context.value);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem !== void 0) {\n        context.onValueChange(nextItem.value);\n      }\n    });\n    const handleOpen = (pointerEvent) => {\n      if (!isDisabled) {\n        context.onOpenChange(true);\n        resetTypeahead();\n      }\n      if (pointerEvent) {\n        context.triggerPointerDownPosRef.current = {\n          x: Math.round(pointerEvent.pageX),\n          y: Math.round(pointerEvent.pageY)\n        };\n      }\n    };\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"combobox\",\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"aria-expanded\": context.open,\n        \"aria-required\": context.required,\n        \"aria-autocomplete\": \"none\",\n        dir: context.dir,\n        \"data-state\": context.open ? \"open\" : \"closed\",\n        disabled: isDisabled,\n        \"data-disabled\": isDisabled ? \"\" : void 0,\n        \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n        ...triggerProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n          event.currentTarget.focus();\n          if (pointerTypeRef.current !== \"mouse\") {\n            handleOpen(event);\n          }\n        }),\n        onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n          pointerTypeRef.current = event.pointerType;\n          const target = event.target;\n          if (target.hasPointerCapture(event.pointerId)) {\n            target.releasePointerCapture(event.pointerId);\n          }\n          if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n            handleOpen(event);\n            event.preventDefault();\n          }\n        }),\n        onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n          const isTypingAhead = searchRef.current !== \"\";\n          const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n          if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n          if (isTypingAhead && event.key === \" \") return;\n          if (OPEN_KEYS.includes(event.key)) {\n            handleOpen();\n            event.preventDefault();\n          }\n        })\n      }\n    ) });\n  }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n    const context = useSelectContext(VALUE_NAME, __scopeSelect);\n    const { onValueNodeHasChildrenChange } = context;\n    const hasChildren = children !== void 0;\n    const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n    useLayoutEffect(() => {\n      onValueNodeHasChildrenChange(hasChildren);\n    }, [onValueNodeHasChildrenChange, hasChildren]);\n    const showPlaceholder = shouldShowPlaceholder(context.value);\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...valueProps,\n        asChild: showPlaceholder ? false : valueProps.asChild,\n        ref: composedRefs,\n        style: { pointerEvents: \"none\" },\n        children: /* @__PURE__ */ jsx(React.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? \"placeholder\" : \"value\")\n      }\n    );\n  }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, children, ...iconProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n  }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar SelectPortal = (props) => {\n  const { __scopeSelect, forceMount, ...portalProps } = props;\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...portalProps }) });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n    const [fragment, setFragment] = React.useState();\n    useLayoutEffect(() => {\n      setFragment(new DocumentFragment());\n    }, []);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(SelectContentFragment, { ...contentProps, fragment }) });\n  }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar SelectContentFragment = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, children, fragment } = props;\n  if (!fragment) return null;\n  return ReactDOM.createPortal(\n    /* @__PURE__ */ jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { ref: forwardedRef, children }) }) }),\n    fragment\n  );\n});\nSelectContentFragment.displayName = \"SelectContentFragment\";\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect } = props;\n    const {\n      position = \"item-aligned\",\n      onCloseAutoFocus,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      //\n      // PopperContent props\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions,\n      //\n      ...contentProps\n    } = props;\n    const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n    const [content, setContent] = React.useState(null);\n    const [viewport, setViewport] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [selectedItem, setSelectedItem] = React.useState(null);\n    const [selectedItemText, setSelectedItemText] = React.useState(\n      null\n    );\n    const getItems = useCollection(__scopeSelect);\n    const [isPositioned, setIsPositioned] = React.useState(false);\n    const firstValidItemFoundRef = React.useRef(false);\n    React.useEffect(() => {\n      if (content) return hideOthers(content);\n    }, [content]);\n    useFocusGuards();\n    const focusFirst = React.useCallback(\n      (candidates) => {\n        const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n        const [lastItem] = restItems.slice(-1);\n        const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n        for (const candidate of candidates) {\n          if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n          candidate?.scrollIntoView({ block: \"nearest\" });\n          if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n          if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n          candidate?.focus();\n          if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n        }\n      },\n      [getItems, viewport]\n    );\n    const focusSelectedItem = React.useCallback(\n      () => focusFirst([selectedItem, content]),\n      [focusFirst, selectedItem, content]\n    );\n    React.useEffect(() => {\n      if (isPositioned) {\n        focusSelectedItem();\n      }\n    }, [isPositioned, focusSelectedItem]);\n    const { onOpenChange, triggerPointerDownPosRef } = context;\n    React.useEffect(() => {\n      if (content) {\n        let pointerMoveDelta = { x: 0, y: 0 };\n        const handlePointerMove = (event) => {\n          pointerMoveDelta = {\n            x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n            y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n          };\n        };\n        const handlePointerUp = (event) => {\n          if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n            event.preventDefault();\n          } else {\n            if (!event.composedPath().includes(content)) {\n              onOpenChange(false);\n            }\n          }\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          triggerPointerDownPosRef.current = null;\n        };\n        if (triggerPointerDownPosRef.current !== null) {\n          document.addEventListener(\"pointermove\", handlePointerMove);\n          document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n        }\n        return () => {\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n        };\n      }\n    }, [content, onOpenChange, triggerPointerDownPosRef]);\n    React.useEffect(() => {\n      const close = () => onOpenChange(false);\n      window.addEventListener(\"blur\", close);\n      window.addEventListener(\"resize\", close);\n      return () => {\n        window.removeEventListener(\"blur\", close);\n        window.removeEventListener(\"resize\", close);\n      };\n    }, [onOpenChange]);\n    const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem) {\n        setTimeout(() => nextItem.ref.current.focus());\n      }\n    });\n    const itemRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItem(node);\n          if (isFirstValidItem) firstValidItemFoundRef.current = true;\n        }\n      },\n      [context.value]\n    );\n    const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n    const itemTextRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItemText(node);\n        }\n      },\n      [context.value]\n    );\n    const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n    const popperContentProps = SelectPosition === SelectPopperPosition ? {\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions\n    } : {};\n    return /* @__PURE__ */ jsx(\n      SelectContentProvider,\n      {\n        scope: __scopeSelect,\n        content,\n        viewport,\n        onViewportChange: setViewport,\n        itemRefCallback,\n        selectedItem,\n        onItemLeave: handleItemLeave,\n        itemTextRefCallback,\n        focusSelectedItem,\n        selectedItemText,\n        position,\n        isPositioned,\n        searchRef,\n        children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n          FocusScope,\n          {\n            asChild: true,\n            trapped: context.open,\n            onMountAutoFocus: (event) => {\n              event.preventDefault();\n            },\n            onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n              context.trigger?.focus({ preventScroll: true });\n              event.preventDefault();\n            }),\n            children: /* @__PURE__ */ jsx(\n              DismissableLayer,\n              {\n                asChild: true,\n                disableOutsidePointerEvents: true,\n                onEscapeKeyDown,\n                onPointerDownOutside,\n                onFocusOutside: (event) => event.preventDefault(),\n                onDismiss: () => context.onOpenChange(false),\n                children: /* @__PURE__ */ jsx(\n                  SelectPosition,\n                  {\n                    role: \"listbox\",\n                    id: context.contentId,\n                    \"data-state\": context.open ? \"open\" : \"closed\",\n                    dir: context.dir,\n                    onContextMenu: (event) => event.preventDefault(),\n                    ...contentProps,\n                    ...popperContentProps,\n                    onPlaced: () => setIsPositioned(true),\n                    ref: composedRefs,\n                    style: {\n                      // flex layout so we can place the scroll buttons properly\n                      display: \"flex\",\n                      flexDirection: \"column\",\n                      // reset the outline by default as the content MAY get focused\n                      outline: \"none\",\n                      ...contentProps.style\n                    },\n                    onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n                      const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n                      if (event.key === \"Tab\") event.preventDefault();\n                      if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n                      if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n                        const items = getItems().filter((item) => !item.disabled);\n                        let candidateNodes = items.map((item) => item.ref.current);\n                        if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n                          candidateNodes = candidateNodes.slice().reverse();\n                        }\n                        if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n                          const currentElement = event.target;\n                          const currentIndex = candidateNodes.indexOf(currentElement);\n                          candidateNodes = candidateNodes.slice(currentIndex + 1);\n                        }\n                        setTimeout(() => focusFirst(candidateNodes));\n                        event.preventDefault();\n                      }\n                    })\n                  }\n                )\n              }\n            )\n          }\n        ) })\n      }\n    );\n  }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onPlaced, ...popperProps } = props;\n  const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n  const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n  const [contentWrapper, setContentWrapper] = React.useState(null);\n  const [content, setContent] = React.useState(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n  const getItems = useCollection(__scopeSelect);\n  const shouldExpandOnScrollRef = React.useRef(false);\n  const shouldRepositionRef = React.useRef(true);\n  const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n  const position = React.useCallback(() => {\n    if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n      const triggerRect = context.trigger.getBoundingClientRect();\n      const contentRect = content.getBoundingClientRect();\n      const valueNodeRect = context.valueNode.getBoundingClientRect();\n      const itemTextRect = selectedItemText.getBoundingClientRect();\n      if (context.dir !== \"rtl\") {\n        const itemTextOffset = itemTextRect.left - contentRect.left;\n        const left = valueNodeRect.left - itemTextOffset;\n        const leftDelta = triggerRect.left - left;\n        const minContentWidth = triggerRect.width + leftDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const rightEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedLeft = clamp(left, [\n          CONTENT_MARGIN,\n          // Prevents the content from going off the starting edge of the\n          // viewport. It may still go off the ending edge, but this can be\n          // controlled by the user since they may want to manage overflow in a\n          // specific way.\n          // https://github.com/radix-ui/primitives/issues/2049\n          Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.left = clampedLeft + \"px\";\n      } else {\n        const itemTextOffset = contentRect.right - itemTextRect.right;\n        const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n        const rightDelta = window.innerWidth - triggerRect.right - right;\n        const minContentWidth = triggerRect.width + rightDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const leftEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedRight = clamp(right, [\n          CONTENT_MARGIN,\n          Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.right = clampedRight + \"px\";\n      }\n      const items = getItems();\n      const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n      const itemsHeight = viewport.scrollHeight;\n      const contentStyles = window.getComputedStyle(content);\n      const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n      const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n      const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n      const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n      const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n      const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n      const viewportStyles = window.getComputedStyle(viewport);\n      const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n      const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n      const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n      const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n      const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n      const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n      const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n      const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n      const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n      if (willAlignWithoutTopOverflow) {\n        const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n        contentWrapper.style.bottom = \"0px\";\n        const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n        const clampedTriggerMiddleToBottomEdge = Math.max(\n          triggerMiddleToBottomEdge,\n          selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n          (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n        );\n        const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n        contentWrapper.style.height = height + \"px\";\n      } else {\n        const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n        contentWrapper.style.top = \"0px\";\n        const clampedTopEdgeToTriggerMiddle = Math.max(\n          topEdgeToTriggerMiddle,\n          contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n          (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n        );\n        const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n        contentWrapper.style.height = height + \"px\";\n        viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n      }\n      contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n      contentWrapper.style.minHeight = minContentHeight + \"px\";\n      contentWrapper.style.maxHeight = availableHeight + \"px\";\n      onPlaced?.();\n      requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n    }\n  }, [\n    getItems,\n    context.trigger,\n    context.valueNode,\n    contentWrapper,\n    content,\n    viewport,\n    selectedItem,\n    selectedItemText,\n    context.dir,\n    onPlaced\n  ]);\n  useLayoutEffect(() => position(), [position]);\n  const [contentZIndex, setContentZIndex] = React.useState();\n  useLayoutEffect(() => {\n    if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n  }, [content]);\n  const handleScrollButtonChange = React.useCallback(\n    (node) => {\n      if (node && shouldRepositionRef.current === true) {\n        position();\n        focusSelectedItem?.();\n        shouldRepositionRef.current = false;\n      }\n    },\n    [position, focusSelectedItem]\n  );\n  return /* @__PURE__ */ jsx(\n    SelectViewportProvider,\n    {\n      scope: __scopeSelect,\n      contentWrapper,\n      shouldExpandOnScrollRef,\n      onScrollButtonChange: handleScrollButtonChange,\n      children: /* @__PURE__ */ jsx(\n        \"div\",\n        {\n          ref: setContentWrapper,\n          style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            position: \"fixed\",\n            zIndex: contentZIndex\n          },\n          children: /* @__PURE__ */ jsx(\n            Primitive.div,\n            {\n              ...popperProps,\n              ref: composedRefs,\n              style: {\n                // When we get the height of the content, it includes borders. If we were to set\n                // the height without having `boxSizing: 'border-box'` it would be too big.\n                boxSizing: \"border-box\",\n                // We need to ensure the content doesn't get taller than the wrapper\n                maxHeight: \"100%\",\n                ...popperProps.style\n              }\n            }\n          )\n        }\n      )\n    }\n  );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n  const {\n    __scopeSelect,\n    align = \"start\",\n    collisionPadding = CONTENT_MARGIN,\n    ...popperProps\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  return /* @__PURE__ */ jsx(\n    PopperPrimitive.Content,\n    {\n      ...popperScope,\n      ...popperProps,\n      ref: forwardedRef,\n      align,\n      collisionPadding,\n      style: {\n        // Ensure border-box for floating-ui calculations\n        boxSizing: \"border-box\",\n        ...popperProps.style,\n        // re-namespace exposed content custom properties\n        ...{\n          \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n          \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n          \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n          \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n          \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n        }\n      }\n    }\n  );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, nonce, ...viewportProps } = props;\n    const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n    const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n    const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n    const prevScrollTopRef = React.useRef(0);\n    return /* @__PURE__ */ jsxs(Fragment2, { children: [\n      /* @__PURE__ */ jsx(\n        \"style\",\n        {\n          dangerouslySetInnerHTML: {\n            __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n          },\n          nonce\n        }\n      ),\n      /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-radix-select-viewport\": \"\",\n          role: \"presentation\",\n          ...viewportProps,\n          ref: composedRefs,\n          style: {\n            // we use position: 'relative' here on the `viewport` so that when we call\n            // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n            // (independent of the scrollUpButton).\n            position: \"relative\",\n            flex: 1,\n            // Viewport should only be scrollable in the vertical direction.\n            // This won't work in vertical writing modes, so we'll need to\n            // revisit this if/when that is supported\n            // https://developer.chrome.com/blog/vertical-form-controls\n            overflow: \"hidden auto\",\n            ...viewportProps.style\n          },\n          onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n            const viewport = event.currentTarget;\n            const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n            if (shouldExpandOnScrollRef?.current && contentWrapper) {\n              const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n              if (scrolledBy > 0) {\n                const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n                const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n                const cssHeight = parseFloat(contentWrapper.style.height);\n                const prevHeight = Math.max(cssMinHeight, cssHeight);\n                if (prevHeight < availableHeight) {\n                  const nextHeight = prevHeight + scrolledBy;\n                  const clampedNextHeight = Math.min(availableHeight, nextHeight);\n                  const heightDiff = nextHeight - clampedNextHeight;\n                  contentWrapper.style.height = clampedNextHeight + \"px\";\n                  if (contentWrapper.style.bottom === \"0px\") {\n                    viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n                    contentWrapper.style.justifyContent = \"flex-end\";\n                  }\n                }\n              }\n            }\n            prevScrollTopRef.current = viewport.scrollTop;\n          })\n        }\n      ) })\n    ] });\n  }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...groupProps } = props;\n    const groupId = useId();\n    return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n  }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...labelProps } = props;\n    const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n    return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n  }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSelect,\n      value,\n      disabled = false,\n      textValue: textValueProp,\n      ...itemProps\n    } = props;\n    const context = useSelectContext(ITEM_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n    const isSelected = context.value === value;\n    const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n    const [isFocused, setIsFocused] = React.useState(false);\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      (node) => contentContext.itemRefCallback?.(node, value, disabled)\n    );\n    const textId = useId();\n    const pointerTypeRef = React.useRef(\"touch\");\n    const handleSelect = () => {\n      if (!disabled) {\n        context.onValueChange(value);\n        context.onOpenChange(false);\n      }\n    };\n    if (value === \"\") {\n      throw new Error(\n        \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n      );\n    }\n    return /* @__PURE__ */ jsx(\n      SelectItemContextProvider,\n      {\n        scope: __scopeSelect,\n        value,\n        disabled,\n        textId,\n        isSelected,\n        onItemTextChange: React.useCallback((node) => {\n          setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n        }, []),\n        children: /* @__PURE__ */ jsx(\n          Collection.ItemSlot,\n          {\n            scope: __scopeSelect,\n            value,\n            disabled,\n            textValue,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                role: \"option\",\n                \"aria-labelledby\": textId,\n                \"data-highlighted\": isFocused ? \"\" : void 0,\n                \"aria-selected\": isSelected && isFocused,\n                \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n                \"aria-disabled\": disabled || void 0,\n                \"data-disabled\": disabled ? \"\" : void 0,\n                tabIndex: disabled ? void 0 : -1,\n                ...itemProps,\n                ref: composedRefs,\n                onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n                onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n                onClick: composeEventHandlers(itemProps.onClick, () => {\n                  if (pointerTypeRef.current !== \"mouse\") handleSelect();\n                }),\n                onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n                  if (pointerTypeRef.current === \"mouse\") handleSelect();\n                }),\n                onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                }),\n                onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                  if (disabled) {\n                    contentContext.onItemLeave?.();\n                  } else if (pointerTypeRef.current === \"mouse\") {\n                    event.currentTarget.focus({ preventScroll: true });\n                  }\n                }),\n                onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n                  if (event.currentTarget === document.activeElement) {\n                    contentContext.onItemLeave?.();\n                  }\n                }),\n                onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n                  const isTypingAhead = contentContext.searchRef?.current !== \"\";\n                  if (isTypingAhead && event.key === \" \") return;\n                  if (SELECTION_KEYS.includes(event.key)) handleSelect();\n                  if (event.key === \" \") event.preventDefault();\n                })\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, ...itemTextProps } = props;\n    const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n    const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n    const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n    const [itemTextNode, setItemTextNode] = React.useState(null);\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      (node) => setItemTextNode(node),\n      itemContext.onItemTextChange,\n      (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n    );\n    const textContent = itemTextNode?.textContent;\n    const nativeOption = React.useMemo(\n      () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n      [itemContext.disabled, itemContext.value, textContent]\n    );\n    const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n    useLayoutEffect(() => {\n      onNativeOptionAdd(nativeOption);\n      return () => onNativeOptionRemove(nativeOption);\n    }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n    return /* @__PURE__ */ jsxs(Fragment2, { children: [\n      /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n      itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n    ] });\n  }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...itemIndicatorProps } = props;\n    const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n    return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n  }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollUp, setCanScrollUp] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const canScrollUp2 = viewport.scrollTop > 0;\n        setCanScrollUp(canScrollUp2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollUp ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollDown, setCanScrollDown] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n        const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n        setCanScrollDown(canScrollDown2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollDown ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n  const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n  const autoScrollTimerRef = React.useRef(null);\n  const getItems = useCollection(__scopeSelect);\n  const clearAutoScrollTimer = React.useCallback(() => {\n    if (autoScrollTimerRef.current !== null) {\n      window.clearInterval(autoScrollTimerRef.current);\n      autoScrollTimerRef.current = null;\n    }\n  }, []);\n  React.useEffect(() => {\n    return () => clearAutoScrollTimer();\n  }, [clearAutoScrollTimer]);\n  useLayoutEffect(() => {\n    const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n    activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n  }, [getItems]);\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"aria-hidden\": true,\n      ...scrollIndicatorProps,\n      ref: forwardedRef,\n      style: { flexShrink: 0, ...scrollIndicatorProps.style },\n      onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n        contentContext.onItemLeave?.();\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n        clearAutoScrollTimer();\n      })\n    }\n  );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...separatorProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n  }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n    return contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n  }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n  ({ __scopeSelect, ...props }, forwardedRef) => {\n    const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);\n    const { value, onValueChange, required, disabled, name, autoComplete, form } = context;\n    const { nativeOptions, nativeSelectKey } = context;\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const selectValue = value ?? \"\";\n    const prevValue = usePrevious(selectValue);\n    React.useEffect(() => {\n      const select = ref.current;\n      if (!select) return;\n      const selectProto = window.HTMLSelectElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        selectProto,\n        \"value\"\n      );\n      const setValue = descriptor.set;\n      if (prevValue !== selectValue && setValue) {\n        const event = new Event(\"change\", { bubbles: true });\n        setValue.call(select, selectValue);\n        select.dispatchEvent(event);\n      }\n    }, [prevValue, selectValue]);\n    return /* @__PURE__ */ jsxs(\n      Primitive.select,\n      {\n        \"aria-hidden\": true,\n        required,\n        tabIndex: -1,\n        name,\n        autoComplete,\n        disabled,\n        form,\n        onChange: (event) => onValueChange(event.target.value),\n        ...props,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n        ref: composedRefs,\n        defaultValue: selectValue,\n        children: [\n          shouldShowPlaceholder(value) ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n          Array.from(nativeOptions)\n        ]\n      },\n      nativeSelectKey\n    );\n  }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction shouldShowPlaceholder(value) {\n  return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n  const handleSearchChange = useCallbackRef(onSearchChange);\n  const searchRef = React.useRef(\"\");\n  const timerRef = React.useRef(0);\n  const handleTypeaheadSearch = React.useCallback(\n    (key) => {\n      const search = searchRef.current + key;\n      handleSearchChange(search);\n      (function updateSearch(value) {\n        searchRef.current = value;\n        window.clearTimeout(timerRef.current);\n        if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n      })(search);\n    },\n    [handleSearchChange]\n  );\n  const resetTypeahead = React.useCallback(() => {\n    searchRef.current = \"\";\n    window.clearTimeout(timerRef.current);\n  }, []);\n  React.useEffect(() => {\n    return () => window.clearTimeout(timerRef.current);\n  }, []);\n  return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n  const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n  const normalizedSearch = isRepeated ? search[0] : search;\n  const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n  let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n  const excludeCurrentItem = normalizedSearch.length === 1;\n  if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n  const nextItem = wrappedItems.find(\n    (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n  );\n  return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nexport {\n  SelectArrow as Arrow,\n  SelectContent as Content,\n  SelectGroup as Group,\n  SelectIcon as Icon,\n  SelectItem as Item,\n  SelectItemIndicator as ItemIndicator,\n  SelectItemText as ItemText,\n  SelectLabel as Label,\n  SelectPortal as Portal,\n  Select as Root,\n  SelectScrollDownButton as ScrollDownButton,\n  SelectScrollUpButton as ScrollUpButton,\n  Select,\n  SelectArrow,\n  SelectContent,\n  SelectGroup,\n  SelectIcon,\n  SelectItem,\n  SelectItemIndicator,\n  SelectItemText,\n  SelectLabel,\n  SelectPortal,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n  SelectViewport,\n  SelectSeparator as Separator,\n  SelectTrigger as Trigger,\n  SelectValue as Value,\n  SelectViewport as Viewport,\n  createSelectScope,\n  SelectBubbleInput as unstable_BubbleInput,\n  SelectProvider as unstable_Provider,\n  SelectBubbleInput as unstable_SelectBubbleInput,\n  SelectProvider as unstable_SelectProvider\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      'flex items-center justify-between gap-2',\n      '[&>span]:truncate [&>span]:min-w-0',\n      'h-[34px] px-[10px] py-[7px] rounded-[4px]',\n      'bg-white border border-[#e0e0e0]',\n      'text-[14px] text-[#030303]',\n      'data-[placeholder]:text-[#999999]',\n      'focus:outline-none focus:border-[#0265ff] focus:ring-0',\n      'disabled:bg-[#eff0f6] disabled:cursor-not-allowed',\n      'dark:bg-background dark:border-border dark:text-foreground',\n      'dark:data-[placeholder]:text-muted-foreground',\n      'dark:disabled:bg-[oklch(0.279_0.041_260.031)]',\n      'w-full',\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDown className=\"h-4 w-4 shrink-0 opacity-50 transition-transform data-[state=open]:rotate-180\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\n      'flex items-center justify-center py-1',\n      className\n    )}\n    {...props}\n  >\n    <ChevronUp className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\n      'flex items-center justify-center py-1',\n      className\n    )}\n    {...props}\n  >\n    <ChevronDown className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {\n    container?: HTMLElement | null;\n  }\n>(\n  (\n    { className, children, position = 'popper', container: containerProp, style, ...props },\n    ref\n  ) => {\n    const [autoContainer, setAutoContainer] = React.useState<HTMLElement | null>(null);\n\n    const setDetectorRef = React.useCallback((node: HTMLElement | null) => {\n      if (!node) return;\n      const rootNode = node.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        const existing = rootNode.querySelector<HTMLElement>('[data-bs-select-portal]');\n        if (existing) {\n          setAutoContainer(existing);\n          return;\n        }\n\n        const container = document.createElement('div');\n        container.setAttribute('data-bs-select-portal', 'true');\n        rootNode.appendChild(container);\n        setAutoContainer(container);\n      }\n    }, []);\n\n    const effectiveContainer = containerProp !== undefined ? containerProp : autoContainer;\n\n    return (\n      <>\n        {containerProp === undefined && (\n          <span ref={setDetectorRef} style={{ display: 'none' }} aria-hidden />\n        )}\n        <SelectPrimitive.Portal container={effectiveContainer ?? undefined}>\n          <SelectPrimitive.Content\n            ref={ref}\n            className={cn(\n              'z-50 bg-white rounded-[4px] p-[4px]',\n              'shadow-[0_0_8px_rgba(0,0,0,0.1)]',\n              'data-[state=open]:animate-in data-[state=closed]:animate-out',\n              'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n              'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n              'data-[side=bottom]:slide-in-from-top-2',\n              'data-[side=left]:slide-in-from-right-2',\n              'data-[side=right]:slide-in-from-left-2',\n              'data-[side=top]:slide-in-from-bottom-2',\n              'dark:bg-background dark:border-border',\n              position === 'popper' &&\n                'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n              className\n            )}\n            position={position}\n            style={{\n              boxSizing: 'border-box',\n              maxHeight: 'var(--radix-select-content-available-height)',\n              minWidth:\n                position === 'popper'\n                  ? 'var(--radix-select-trigger-width)'\n                  : '120px',\n              ...style,\n            }}\n            {...props}\n          >\n            <SelectScrollUpButton />\n            <SelectPrimitive.Viewport\n              className={cn(\n                'p-1',\n                position === 'popper' && 'w-full'\n              )}\n              style={\n                position === 'popper'\n                  ? {\n                      height: 'var(--radix-select-trigger-height)',\n                      minWidth: 'var(--radix-select-trigger-width)',\n                    }\n                  : undefined\n              }\n            >\n              {children}\n            </SelectPrimitive.Viewport>\n            <SelectScrollDownButton />\n          </SelectPrimitive.Content>\n        </SelectPrimitive.Portal>\n      </>\n    );\n  }\n);\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\n      'px-[10px] py-[6px] text-[14px] font-bold text-[#030303] dark:text-foreground',\n      className\n    )}\n    {...props}\n  />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      'relative flex items-center gap-2 px-[10px] py-[7px]',\n      'text-[14px] text-[#030303]',\n      'cursor-pointer select-none rounded-[4px]',\n      'data-[highlighted]:bg-[#eff0f6] data-[highlighted]:outline-none',\n      'data-[state=checked]:bg-[#f0f6ff] data-[state=checked]:text-[#0265ff]',\n      'dark:text-foreground dark:data-[highlighted]:bg-accent dark:data-[state=checked]:bg-accent',\n      className\n    )}\n    {...props}\n  >\n    {/* <span className=\"absolute left-[10px] flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </SelectPrimitive.ItemIndicator>\n    </span> */}\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n  </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn('h-px bg-[#e0e0e0] my-1 dark:bg-border', className)}\n    {...props}\n  />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n};\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n    !Array.isArray(value) &&\n    isObjectType(value) &&\n    !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n    ? isCheckBoxInput(event.target)\n        ? event.target.checked\n        : event.target.value\n    : event;\n\nvar getFieldArrayParentNames = (names, name) => {\n    const parts = name.split('.');\n    const matches = [];\n    let prefix = parts[0];\n    for (let i = 1; i < parts.length; prefix += '.' + parts[i++]) {\n        !isNaN(+parts[i]) && names.has(prefix) && matches.push(prefix);\n    }\n    return matches;\n};\n\nvar isPlainObject = (tempObject) => {\n    const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n    return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n    typeof window.HTMLElement !== 'undefined' &&\n    typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n    if (data instanceof Date) {\n        return new Date(data);\n    }\n    const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n    if (isWeb && (data instanceof Blob || isFileListInstance)) {\n        return data;\n    }\n    const isArray = Array.isArray(data);\n    if (!isArray && !(isObject(data) && isPlainObject(data))) {\n        return data;\n    }\n    const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            copy[key] = cloneObject(data[key]);\n        }\n    }\n    return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n    if (!path || !isObject(object)) {\n        return defaultValue;\n    }\n    const paths = isKey(path) ? [path] : stringToPath(path);\n    const result = paths.reduce((result, key) => {\n        return isNullOrUndefined(result) ? undefined : result[key];\n    }, object);\n    return isUndefined(result) || result === object\n        ? isUndefined(object[path])\n            ? defaultValue\n            : object[path]\n        : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n    let index = -1;\n    const tempPath = isKey(path) ? [path] : stringToPath(path);\n    const length = tempPath.length;\n    const lastIndex = length - 1;\n    while (++index < length) {\n        const key = tempPath[index];\n        let newValue = value;\n        if (index !== lastIndex) {\n            const objValue = object[key];\n            newValue =\n                isObject(objValue) || Array.isArray(objValue)\n                    ? objValue\n                    : !isNaN(+tempPath[index + 1])\n                        ? []\n                        : {};\n        }\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n            return;\n        }\n        object[key] = newValue;\n        object = object[key];\n    }\n};\n\nconst EVENTS = {\n    BLUR: 'blur',\n    FOCUS_OUT: 'focusout',\n    CHANGE: 'change',\n    SUBMIT: 'submit',\n    TRIGGER: 'trigger',\n    VALID: 'valid',\n};\nconst VALIDATION_MODE = {\n    onBlur: 'onBlur',\n    onChange: 'onChange',\n    onSubmit: 'onSubmit',\n    onTouched: 'onTouched',\n    all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n    max: 'max',\n    min: 'min',\n    maxLength: 'maxLength',\n    minLength: 'minLength',\n    pattern: 'pattern',\n    required: 'required',\n    validate: 'validate',\n};\nconst FORM_ERROR_TYPE = 'form';\nconst ROOT_ERROR_TYPE = 'root';\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n    const result = {};\n    for (const key in formState) {\n        Object.defineProperty(result, key, {\n            get: () => {\n                const _key = key;\n                if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n                    control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n                }\n                localProxyFormState && (localProxyFormState[_key] = true);\n                return formState[_key];\n            },\n        });\n    }\n    return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, control } = useForm({\n *     defaultValues: {\n *     firstName: \"firstName\"\n *   }});\n *   const { dirtyFields } = useFormState({\n *     control\n *   });\n *   const onSubmit = (data) => console.log(data);\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input {...register(\"firstName\")} placeholder=\"First Name\" />\n *       {dirtyFields.firstName && <p>Field is dirty.</p>}\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFormState(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, disabled, name, exact } = props || {};\n    const [formState, updateFormState] = React.useState(() => ({\n        ...control._formState,\n        defaultValues: control._defaultValues,\n    }));\n    const _localProxyFormState = React.useRef({\n        isDirty: false,\n        isLoading: false,\n        dirtyFields: false,\n        touchedFields: false,\n        validatingFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    });\n    useIsomorphicLayoutEffect(() => control._subscribe({\n        name,\n        formState: _localProxyFormState.current,\n        exact,\n        callback: (formState) => {\n            !disabled &&\n                updateFormState({\n                    ...control._formState,\n                    ...formState,\n                    defaultValues: control._defaultValues,\n                });\n        },\n    }), [name, disabled, exact]);\n    React.useEffect(() => {\n        _localProxyFormState.current.isValid && control._setValid(true);\n    }, [control]);\n    return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n    if (isString(names)) {\n        isGlobal && _names.watch.add(names);\n        return get(formValues, names, defaultValue);\n    }\n    if (Array.isArray(names)) {\n        return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n            get(formValues, fieldName)));\n    }\n    isGlobal && (_names.watchAll = true);\n    return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, visited = new WeakSet()) {\n    if (object1 === object2) {\n        return true;\n    }\n    if (isPrimitive(object1) || isPrimitive(object2)) {\n        return Object.is(object1, object2);\n    }\n    if (isDateObject(object1) && isDateObject(object2)) {\n        return Object.is(object1.getTime(), object2.getTime());\n    }\n    const keys1 = Object.keys(object1);\n    const keys2 = Object.keys(object2);\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n    if (visited.has(object1) || visited.has(object2)) {\n        return true;\n    }\n    visited.add(object1);\n    visited.add(object2);\n    for (const key of keys1) {\n        const val1 = object1[key];\n        if (!(key in object2)) {\n            return false;\n        }\n        if (key !== 'ref') {\n            const val2 = object2[key];\n            if ((isDateObject(val1) && isDateObject(val2)) ||\n                ((isObject(val1) || Array.isArray(val1)) &&\n                    (isObject(val2) || Array.isArray(val2)))\n                ? !deepEqual(val1, val2, visited)\n                : !Object.is(val1, val2)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n *   name: \"fieldName\"\n *   control,\n * })\n * ```\n */\nfunction useWatch(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n    const _defaultValue = React.useRef(defaultValue);\n    const _compute = React.useRef(compute);\n    const _computeFormValues = React.useRef(undefined);\n    const _prevControl = React.useRef(control);\n    const _prevName = React.useRef(name);\n    _compute.current = compute;\n    const [value, updateValue] = React.useState(() => {\n        const defaultValue = control._getWatch(name, _defaultValue.current);\n        return _compute.current ? _compute.current(defaultValue) : defaultValue;\n    });\n    const getCurrentOutput = React.useCallback((values) => {\n        const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n        return _compute.current ? _compute.current(formValues) : formValues;\n    }, [control._formValues, control._names, name]);\n    const refreshValue = React.useCallback((values) => {\n        if (!disabled) {\n            const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n            if (_compute.current) {\n                const computedFormValues = _compute.current(formValues);\n                if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n                    updateValue(computedFormValues);\n                    _computeFormValues.current = computedFormValues;\n                }\n            }\n            else {\n                updateValue(formValues);\n            }\n        }\n    }, [control._formValues, control._names, disabled, name]);\n    useIsomorphicLayoutEffect(() => {\n        if (_prevControl.current !== control ||\n            !deepEqual(_prevName.current, name)) {\n            _prevControl.current = control;\n            _prevName.current = name;\n            refreshValue();\n        }\n        return control._subscribe({\n            name,\n            formState: {\n                values: true,\n            },\n            exact,\n            callback: (formState) => {\n                refreshValue(formState.values);\n            },\n        });\n    }, [control, exact, name, refreshValue]);\n    React.useEffect(() => control._removeUnmounted());\n    // If name or control changed for this render, synchronously reflect the\n    // latest value so callers (like useController) see the correct value\n    // immediately on the same render.\n    // Optimize: Check control reference first before expensive deepEqual\n    const controlChanged = _prevControl.current !== control;\n    const prevName = _prevName.current;\n    // Cache the computed output to avoid duplicate calls within the same render\n    // We include shouldReturnImmediate in deps to ensure proper recomputation\n    const computedOutput = React.useMemo(() => {\n        if (disabled) {\n            return null;\n        }\n        const nameChanged = !controlChanged && !deepEqual(prevName, name);\n        const shouldReturnImmediate = controlChanged || nameChanged;\n        return shouldReturnImmediate ? getCurrentOutput() : null;\n    }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n    return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n *   const { field, fieldState, formState } = useController(props);\n *   return (\n *     <div>\n *       <input {...field} placeholder={props.name} />\n *       <p>{fieldState.isTouched && \"Touched\"}</p>\n *       <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *     </div>\n *   );\n * }\n * ```\n */\nfunction useController(props) {\n    const formControl = useFormControlContext();\n    const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n    const isArrayField = !!getFieldArrayParentNames(control._names.array, name)\n        .length;\n    const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n    const value = useWatch({\n        control,\n        name,\n        defaultValue: defaultValueMemo,\n        exact,\n    });\n    const formState = useFormState({\n        control,\n        name,\n        exact,\n    });\n    const _props = React.useRef(props);\n    const _registerProps = React.useRef(control.register(name, {\n        ...props.rules,\n        value,\n        ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n    }));\n    _props.current = props;\n    const fieldState = React.useMemo(() => Object.defineProperties({}, {\n        invalid: {\n            enumerable: true,\n            get: () => !!get(formState.errors, name),\n        },\n        isDirty: {\n            enumerable: true,\n            get: () => !!get(formState.dirtyFields, name),\n        },\n        isTouched: {\n            enumerable: true,\n            get: () => !!get(formState.touchedFields, name),\n        },\n        isValidating: {\n            enumerable: true,\n            get: () => !!get(formState.validatingFields, name),\n        },\n        error: {\n            enumerable: true,\n            get: () => get(formState.errors, name),\n        },\n    }), [formState, name]);\n    const onChange = React.useCallback((event) => _registerProps.current.onChange({\n        target: {\n            value: getEventValue(event),\n            name: name,\n        },\n        type: EVENTS.CHANGE,\n    }), [name]);\n    const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n        target: {\n            value: get(control._formValues, name),\n            name: name,\n        },\n        type: EVENTS.BLUR,\n    }), [name, control._formValues]);\n    const ref = React.useCallback((elm) => {\n        const field = get(control._fields, name);\n        if (field && field._f && elm) {\n            field._f.ref = {\n                focus: () => isFunction(elm.focus) && elm.focus(),\n                select: () => isFunction(elm.select) && elm.select(),\n                setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n                reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n            };\n        }\n    }, [control._fields, name]);\n    const field = React.useMemo(() => ({\n        name,\n        value,\n        ...(isBoolean(disabled) || formState.disabled\n            ? { disabled: formState.disabled || disabled }\n            : {}),\n        onChange,\n        onBlur,\n        ref,\n    }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n    React.useEffect(() => {\n        const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n        control.register(name, {\n            ..._props.current.rules,\n            ...(isBoolean(_props.current.disabled)\n                ? { disabled: _props.current.disabled }\n                : {}),\n        });\n        const updateMounted = (name, value) => {\n            const field = get(control._fields, name);\n            if (field && field._f) {\n                field._f.mount = value;\n            }\n        };\n        updateMounted(name, true);\n        if (_shouldUnregisterField) {\n            const value = cloneObject(get(control._defaultValues, name, get(control._options.defaultValues, name, _props.current.defaultValue)));\n            set(control._defaultValues, name, value);\n            if (isUndefined(get(control._formValues, name))) {\n                set(control._formValues, name, value);\n            }\n        }\n        !isArrayField && control.register(name);\n        return () => {\n            (isArrayField\n                ? _shouldUnregisterField && !control._state.action\n                : _shouldUnregisterField)\n                ? control.unregister(name)\n                : updateMounted(name, false);\n        };\n    }, [name, control, isArrayField, shouldUnregister]);\n    React.useEffect(() => {\n        control._setDisabledField({\n            disabled,\n            name,\n        });\n    }, [disabled, name, control]);\n    return React.useMemo(() => ({\n        field,\n        formState,\n        fieldState,\n    }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control } = useForm<FormValues>({\n *     defaultValues: {\n *       test: \"\"\n *     }\n *   });\n *\n *   return (\n *     <form>\n *       <Controller\n *         control={control}\n *         name=\"test\"\n *         render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n *           <>\n *             <input\n *               onChange={onChange} // send value to hook form\n *               onBlur={onBlur} // notify when input is touched\n *               value={value} // return updated value\n *               ref={ref} // set ref for focus management\n *             />\n *             <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *             <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n *           </>\n *         )}\n *       />\n *     </form>\n *   );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n    const output = {};\n    for (const key of Object.keys(obj)) {\n        if (isObjectType(obj[key]) && obj[key] !== null) {\n            const nested = flatten(obj[key]);\n            for (const nestedKey of Object.keys(nested)) {\n                output[`${key}.${nestedKey}`] = nested[nestedKey];\n            }\n        }\n        else {\n            output[key] = obj[key];\n        }\n    }\n    return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n    const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n    const memoizedValue = React.useMemo(() => ({\n        watch,\n        getValues,\n        getFieldState,\n        setError,\n        clearErrors,\n        setValue,\n        setValues,\n        trigger,\n        formState,\n        resetField,\n        reset,\n        handleSubmit,\n        unregister,\n        control,\n        register,\n        setFocus,\n        subscribe,\n    }), [\n        clearErrors,\n        control,\n        formState,\n        getFieldState,\n        getValues,\n        handleSubmit,\n        register,\n        reset,\n        resetField,\n        setError,\n        setFocus,\n        setValue,\n        setValues,\n        subscribe,\n        trigger,\n        unregister,\n        watch,\n    ]);\n    return (React.createElement(HookFormContext.Provider, { value: memoizedValue },\n        React.createElement(HookFormControlContext.Provider, { value: memoizedValue.control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control, formState: { errors } } = useForm();\n *\n *   return (\n *     <Form action=\"/api\" control={control}>\n *       <input {...register(\"name\")} />\n *       <p>{errors?.root?.server && 'Server error'}</p>\n *       <button>Submit</button>\n *     </Form>\n *   );\n * }\n * ```\n */\nfunction Form(props) {\n    const methods = useFormContext();\n    const [mounted, setMounted] = React.useState(false);\n    const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n    const submit = React.useCallback(async (event) => {\n        let hasError = false;\n        let type = '';\n        await control.handleSubmit(async (data) => {\n            const formData = new FormData();\n            let formDataJson = '';\n            try {\n                formDataJson = JSON.stringify(data);\n            }\n            catch (_a) { }\n            const flattenFormValues = flatten(data);\n            for (const key in flattenFormValues) {\n                formData.append(key, flattenFormValues[key]);\n            }\n            if (onSubmit) {\n                await onSubmit({\n                    data,\n                    event,\n                    method,\n                    formData,\n                    formDataJson,\n                });\n            }\n            if (action) {\n                try {\n                    const shouldStringifySubmissionData = [\n                        headers && headers['Content-Type'],\n                        encType,\n                    ].some((value) => value && value.includes('json'));\n                    const response = await fetch(String(action), {\n                        method,\n                        headers: {\n                            ...headers,\n                            ...(encType && encType !== 'multipart/form-data'\n                                ? { 'Content-Type': encType }\n                                : {}),\n                        },\n                        body: shouldStringifySubmissionData ? formDataJson : formData,\n                    });\n                    if (response &&\n                        (validateStatus\n                            ? !validateStatus(response.status)\n                            : response.status < 200 || response.status >= 300)) {\n                        hasError = true;\n                        onError && onError({ response });\n                        type = String(response.status);\n                    }\n                    else {\n                        onSuccess && onSuccess({ response });\n                    }\n                }\n                catch (error) {\n                    hasError = true;\n                    onError && onError({ error });\n                }\n            }\n        })(event);\n        if (hasError && control) {\n            control._subjects.state.next({\n                isSubmitSuccessful: false,\n            });\n            control.setError('root.server', {\n                type,\n            });\n        }\n    }, [\n        control,\n        onSubmit,\n        method,\n        action,\n        headers,\n        encType,\n        validateStatus,\n        onError,\n        onSuccess,\n    ]);\n    React.useEffect(() => {\n        setMounted(true);\n    }, []);\n    return render ? (React.createElement(React.Fragment, null, render({\n        submit,\n    }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n    ? {\n        ...errors[name],\n        types: {\n            ...(errors[name] && errors[name].types ? errors[name].types : {}),\n            [type]: message || true,\n        },\n    }\n    : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n    let _observers = [];\n    const next = (value) => {\n        for (const observer of _observers) {\n            observer.next && observer.next(value);\n        }\n    };\n    const subscribe = (observer) => {\n        _observers.push(observer);\n        return {\n            unsubscribe: () => {\n                _observers = _observers.filter((o) => o !== observer);\n            },\n        };\n    };\n    const unsubscribe = () => {\n        _observers = [];\n    };\n    return {\n        get observers() {\n            return _observers;\n        },\n        next,\n        subscribe,\n        unsubscribe,\n    };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n    const values = {};\n    for (const key in fieldsState) {\n        if (fieldsState.hasOwnProperty(key)) {\n            const fieldState = fieldsState[key];\n            const fieldValue = formValues[key];\n            if (fieldState && isObject(fieldState) && fieldValue) {\n                const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n                if (isObject(nestedFieldsState)) {\n                    values[key] = nestedFieldsState;\n                }\n            }\n            else if (fieldsState[key]) {\n                values[key] = fieldValue;\n            }\n        }\n    }\n    return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n    if (!isWeb) {\n        return false;\n    }\n    const owner = value ? value.ownerDocument : 0;\n    return (value instanceof\n        (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n    const length = updatePath.slice(0, -1).length;\n    let index = 0;\n    while (index < length) {\n        if (isNullOrUndefined(object)) {\n            object = undefined;\n            break;\n        }\n        object = object[updatePath[index]];\n        index++;\n    }\n    return object;\n}\nfunction isEmptyArray(obj) {\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction unset(object, path) {\n    if (isString(path) && Object.prototype.hasOwnProperty.call(object, path)) {\n        delete object[path];\n        return object;\n    }\n    const paths = Array.isArray(path)\n        ? path\n        : isKey(path)\n            ? [path]\n            : stringToPath(path);\n    const childObject = paths.length === 1 ? object : baseGet(object, paths);\n    const index = paths.length - 1;\n    const key = paths[index];\n    if (childObject) {\n        delete childObject[key];\n    }\n    if (index !== 0 &&\n        ((isObject(childObject) && isEmptyObject(childObject)) ||\n            (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n        unset(object, paths.slice(0, -1));\n    }\n    return object;\n}\n\nvar objectHasFunction = (data) => {\n    for (const key in data) {\n        if (isFunction(data[key])) {\n            return true;\n        }\n    }\n    return false;\n};\n\nfunction isTraversable(value) {\n    return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n    for (const key in data) {\n        const value = data[key];\n        if (isTraversable(value)) {\n            fields[key] = Array.isArray(value) ? [] : {};\n            markFieldsDirty(value, fields[key]);\n        }\n        else if (!isUndefined(value)) {\n            fields[key] = true;\n        }\n    }\n    return fields;\n}\nfunction pruneDirtyFields(value) {\n    if (value === false) {\n        return undefined;\n    }\n    if (value === true) {\n        return true;\n    }\n    if (Array.isArray(value)) {\n        const result = value.map((value) => pruneDirtyFields(value));\n        return (result.some((value) => value !== undefined) ? result : undefined);\n    }\n    if (isObject(value)) {\n        const result = {};\n        for (const key in value) {\n            const pruned = pruneDirtyFields(value[key]);\n            if (!isUndefined(pruned)) {\n                result[key] = pruned;\n            }\n        }\n        return (Object.keys(result).length ? result : undefined);\n    }\n    return undefined;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n    if (!dirtyFieldsFromValues) {\n        dirtyFieldsFromValues = markFieldsDirty(formValues);\n    }\n    for (const key in data) {\n        const value = data[key];\n        if (isTraversable(value)) {\n            if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n                dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n            }\n            else {\n                getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n            }\n        }\n        else {\n            const formValue = formValues[key];\n            dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n        }\n    }\n    return pruneDirtyFields(dirtyFieldsFromValues) || {};\n}\n\nconst defaultResult = {\n    value: false,\n    isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n    if (Array.isArray(options)) {\n        if (options.length > 1) {\n            const values = options\n                .filter((option) => option && option.checked && !option.disabled)\n                .map((option) => option.value);\n            return { value: values, isValid: !!values.length };\n        }\n        return options[0].checked && !options[0].disabled\n            ? // @ts-expect-error expected to work in the browser\n                options[0].attributes && !isUndefined(options[0].attributes.value)\n                    ? isUndefined(options[0].value) || options[0].value === ''\n                        ? validResult\n                        : { value: options[0].value, isValid: true }\n                    : validResult\n            : defaultResult;\n    }\n    return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n    ? value\n    : valueAsNumber\n        ? value === ''\n            ? NaN\n            : value\n                ? +value\n                : value\n        : valueAsDate && isString(value)\n            ? new Date(value)\n            : setValueAs\n                ? setValueAs(value)\n                : value;\n\nconst defaultReturn = {\n    isValid: false,\n    value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n    ? options.reduce((previous, option) => option && option.checked && !option.disabled\n        ? {\n            isValid: true,\n            value: option.value,\n        }\n        : previous, defaultReturn)\n    : defaultReturn;\n\nfunction getFieldValue(_f) {\n    const ref = _f.ref;\n    if (isFileInput(ref)) {\n        return ref.files;\n    }\n    if (isRadioInput(ref)) {\n        return getRadioValue(_f.refs).value;\n    }\n    if (isMultipleSelect(ref)) {\n        return [...ref.selectedOptions].map(({ value }) => value);\n    }\n    if (isCheckBoxInput(ref)) {\n        return getCheckboxValue(_f.refs).value;\n    }\n    return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n    const fields = {};\n    for (const name of fieldsNames) {\n        const field = get(_fields, name);\n        field && set(fields, name, field._f);\n    }\n    return {\n        criteriaMode,\n        names: [...fieldsNames],\n        fields,\n        shouldUseNativeValidation,\n    };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n    ? rule\n    : isRegex(rule)\n        ? rule.source\n        : isObject(rule)\n            ? isRegex(rule.value)\n                ? rule.value.source\n                : rule.value\n            : rule;\n\nvar getValidationModes = (mode) => ({\n    isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n    isOnBlur: mode === VALIDATION_MODE.onBlur,\n    isOnChange: mode === VALIDATION_MODE.onChange,\n    isOnAll: mode === VALIDATION_MODE.all,\n    isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n    !!fieldReference.validate &&\n    !!((isFunction(fieldReference.validate) &&\n        fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n        (isObject(fieldReference.validate) &&\n            Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n    (options.required ||\n        options.min ||\n        options.max ||\n        options.maxLength ||\n        options.minLength ||\n        options.pattern ||\n        options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n    (_names.watchAll ||\n        _names.watch.has(name) ||\n        [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n            /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n    for (const key of fieldsNames || Object.keys(fields)) {\n        const field = get(fields, key);\n        if (field) {\n            const { _f, ...currentField } = field;\n            if (_f) {\n                if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n                    return true;\n                }\n                else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n                    return true;\n                }\n                else {\n                    if (iterateFieldsByAction(currentField, action)) {\n                        break;\n                    }\n                }\n            }\n            else if (isObject(currentField)) {\n                if (iterateFieldsByAction(currentField, action)) {\n                    break;\n                }\n            }\n        }\n    }\n    return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n    const error = get(errors, name);\n    if (error || isKey(name)) {\n        return {\n            error,\n            name,\n        };\n    }\n    const names = name.split('.');\n    while (names.length) {\n        const fieldName = names.join('.');\n        const field = get(_fields, fieldName);\n        const foundError = get(errors, fieldName);\n        if (field && !Array.isArray(field) && name !== fieldName) {\n            return { name };\n        }\n        if (foundError && foundError.type) {\n            return {\n                name: fieldName,\n                error: foundError,\n            };\n        }\n        if (foundError && foundError.root && foundError.root.type) {\n            return {\n                name: `${fieldName}.root`,\n                error: foundError.root,\n            };\n        }\n        names.pop();\n    }\n    return {\n        name,\n    };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n    updateFormState(formStateData);\n    const { name, ...formState } = formStateData;\n    return (isEmptyObject(formState) ||\n        (isRoot &&\n            Object.keys(formState).length >= Object.keys(_proxyFormState).length) ||\n        Object.keys(formState).find((key) => _proxyFormState[key] ===\n            (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n    !signalName ||\n    name === signalName ||\n    convertToArrayPayload(name).some((currentName) => currentName &&\n        (exact\n            ? currentName === signalName\n            : currentName.startsWith(signalName) ||\n                signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n    if (mode.isOnAll) {\n        return false;\n    }\n    else if (!isSubmitted && mode.isOnTouch) {\n        return !(isTouched || isBlurEvent);\n    }\n    else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n        return !isBlurEvent;\n    }\n    else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n        return isBlurEvent;\n    }\n    return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n    const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n    set(fieldArrayErrors, ROOT_ERROR_TYPE, error[name]);\n    set(errors, name, fieldArrayErrors);\n    return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n    if (isString(result) ||\n        (Array.isArray(result) && result.every(isString)) ||\n        (isBoolean(result) && !result)) {\n        return {\n            type,\n            message: isString(result) ? result : '',\n            ref,\n        };\n    }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n    ? validationData\n    : {\n        value: validationData,\n        message: '',\n    };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n    const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n    const inputValue = get(formValues, name);\n    if (!mount || disabledFieldNames.has(name)) {\n        return {};\n    }\n    const inputRef = refs ? refs[0] : ref;\n    const setCustomValidity = (message) => {\n        if (shouldUseNativeValidation && inputRef.reportValidity) {\n            inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n            inputRef.reportValidity();\n        }\n    };\n    const error = {};\n    const isRadio = isRadioInput(ref);\n    const isCheckBox = isCheckBoxInput(ref);\n    const isRadioOrCheckbox = isRadio || isCheckBox;\n    const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n        isUndefined(ref.value) &&\n        isUndefined(inputValue)) ||\n        (isHTMLElement(ref) && ref.value === '') ||\n        inputValue === '' ||\n        (Array.isArray(inputValue) && !inputValue.length) ||\n        (valueAsNumber && typeof inputValue === 'number' && isNaN(inputValue));\n    const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n    const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n        const message = exceedMax ? maxLengthMessage : minLengthMessage;\n        error[name] = {\n            type: exceedMax ? maxType : minType,\n            message,\n            ref,\n            ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n        };\n    };\n    if (isFieldArray\n        ? !Array.isArray(inputValue) || !inputValue.length\n        : required &&\n            ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n                (isBoolean(inputValue) && !inputValue) ||\n                (isCheckBox && !getCheckboxValue(refs).isValid) ||\n                (isRadio && !getRadioValue(refs).isValid))) {\n        const { value, message } = isString(required)\n            ? { value: !!required, message: required }\n            : getValueAndMessage(required);\n        if (value) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.required,\n                message,\n                ref: inputRef,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n        let exceedMax;\n        let exceedMin;\n        const maxOutput = getValueAndMessage(max);\n        const minOutput = getValueAndMessage(min);\n        if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n            const valueNumber = ref.valueAsNumber ||\n                (inputValue ? +inputValue : inputValue);\n            if (!isNullOrUndefined(maxOutput.value)) {\n                exceedMax = valueNumber > maxOutput.value;\n            }\n            if (!isNullOrUndefined(minOutput.value)) {\n                exceedMin = valueNumber < minOutput.value;\n            }\n        }\n        else {\n            const valueDate = ref.valueAsDate || new Date(inputValue);\n            const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n            const isTime = ref.type == 'time';\n            const isWeek = ref.type == 'week';\n            if (isString(maxOutput.value) && inputValue) {\n                exceedMax = isTime\n                    ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n                    : isWeek\n                        ? inputValue > maxOutput.value\n                        : valueDate > new Date(maxOutput.value);\n            }\n            if (isString(minOutput.value) && inputValue) {\n                exceedMin = isTime\n                    ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n                    : isWeek\n                        ? inputValue < minOutput.value\n                        : valueDate < new Date(minOutput.value);\n            }\n        }\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if ((maxLength || minLength) &&\n        !isEmpty &&\n        (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n        const maxLengthOutput = getValueAndMessage(maxLength);\n        const minLengthOutput = getValueAndMessage(minLength);\n        const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n            inputValue.length > +maxLengthOutput.value;\n        const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n            inputValue.length < +minLengthOutput.value;\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if (pattern && !isEmpty && isString(inputValue)) {\n        const { value: patternValue, message } = getValueAndMessage(pattern);\n        if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.pattern,\n                message,\n                ref,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (validate) {\n        if (isFunction(validate)) {\n            const result = await validate(inputValue, formValues);\n            const validateError = getValidateError(result, inputRef);\n            if (validateError) {\n                error[name] = {\n                    ...validateError,\n                    ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n                };\n                if (!validateAllFieldCriteria) {\n                    setCustomValidity(validateError.message);\n                    return error;\n                }\n            }\n        }\n        else if (isObject(validate)) {\n            let validationResult = {};\n            for (const key in validate) {\n                if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n                    break;\n                }\n                const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n                if (validateError) {\n                    validationResult = {\n                        ...validateError,\n                        ...appendErrorsCurry(key, validateError.message),\n                    };\n                    setCustomValidity(validateError.message);\n                    if (validateAllFieldCriteria) {\n                        error[name] = validationResult;\n                    }\n                }\n            }\n            if (!isEmptyObject(validationResult)) {\n                error[name] = {\n                    ref: inputRef,\n                    ...validationResult,\n                };\n                if (!validateAllFieldCriteria) {\n                    return error;\n                }\n            }\n        }\n    }\n    setCustomValidity(true);\n    return error;\n};\n\nconst defaultOptions = {\n    mode: VALIDATION_MODE.onSubmit,\n    reValidateMode: VALIDATION_MODE.onChange,\n    shouldFocusError: true,\n};\nconst DEFAULT_FORM_STATE = {\n    submitCount: 0,\n    isDirty: false,\n    isReady: false,\n    isValidating: false,\n    isSubmitted: false,\n    isSubmitting: false,\n    isSubmitSuccessful: false,\n    isValid: false,\n    touchedFields: {},\n    dirtyFields: {},\n    validatingFields: {},\n};\nfunction createFormControl(props = {}) {\n    let _options = {\n        ...defaultOptions,\n        ...props,\n    };\n    let _formState = {\n        ...cloneObject(DEFAULT_FORM_STATE),\n        isLoading: isFunction(_options.defaultValues),\n        errors: _options.errors || {},\n        disabled: _options.disabled || false,\n    };\n    let _fields = {};\n    let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n        ? cloneObject(_options.defaultValues || _options.values) || {}\n        : {};\n    let _formValues = _options.shouldUnregister\n        ? {}\n        : cloneObject(_defaultValues);\n    let _state = {\n        action: false,\n        mount: false,\n        watch: false,\n        keepIsValid: false,\n    };\n    let _names = {\n        mount: new Set(),\n        disabled: new Set(),\n        unMount: new Set(),\n        array: new Set(),\n        watch: new Set(),\n        registerName: new Set(),\n    };\n    let delayErrorCallback;\n    let timer = 0;\n    const defaultProxyFormState = {\n        isDirty: false,\n        dirtyFields: false,\n        validatingFields: false,\n        touchedFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    };\n    const _proxyFormState = {\n        ...defaultProxyFormState,\n    };\n    let _proxySubscribeFormState = {\n        ..._proxyFormState,\n    };\n    const _subjects = {\n        array: createSubject(),\n        state: createSubject(),\n    };\n    const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n    const debounce = (callback) => (wait) => {\n        clearTimeout(timer);\n        timer = setTimeout(callback, wait);\n    };\n    const _setValid = async (shouldUpdateValid) => {\n        if (_state.keepIsValid) {\n            return;\n        }\n        if (!_options.disabled &&\n            (_proxyFormState.isValid ||\n                _proxySubscribeFormState.isValid ||\n                shouldUpdateValid)) {\n            let isValid;\n            if (_options.resolver) {\n                isValid = isEmptyObject((await _runSchema()).errors);\n                _updateIsValidating();\n            }\n            else {\n                isValid = await executeBuiltInValidation({\n                    fields: _fields,\n                    onlyCheckValid: true,\n                    eventType: EVENTS.VALID,\n                });\n            }\n            if (isValid !== _formState.isValid) {\n                _subjects.state.next({\n                    isValid,\n                });\n            }\n        }\n    };\n    const _updateIsValidating = (names, isValidating) => {\n        if (!_options.disabled &&\n            (_proxyFormState.isValidating ||\n                _proxyFormState.validatingFields ||\n                _proxySubscribeFormState.isValidating ||\n                _proxySubscribeFormState.validatingFields)) {\n            (names || Array.from(_names.mount)).forEach((name) => {\n                if (name) {\n                    isValidating\n                        ? set(_formState.validatingFields, name, isValidating)\n                        : unset(_formState.validatingFields, name);\n                }\n            });\n            _subjects.state.next({\n                validatingFields: _formState.validatingFields,\n                isValidating: !isEmptyObject(_formState.validatingFields),\n            });\n        }\n    };\n    const _updateDirtyFields = () => {\n        _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n    };\n    const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n        if (args && method && !_options.disabled) {\n            _state.action = true;\n            if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n                const fieldValues = method(get(_fields, name), args.argA, args.argB);\n                shouldSetValues && set(_fields, name, fieldValues);\n            }\n            if (shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.errors, name))) {\n                const errors = method(get(_formState.errors, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.errors, name, errors);\n                unsetEmptyArray(_formState.errors, name);\n            }\n            if ((_proxyFormState.touchedFields ||\n                _proxySubscribeFormState.touchedFields) &&\n                shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.touchedFields, name))) {\n                const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n            }\n            if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n                _updateDirtyFields();\n            }\n            _subjects.state.next({\n                name,\n                isDirty: _getDirty(name, values),\n                dirtyFields: _formState.dirtyFields,\n                errors: _formState.errors,\n                isValid: _formState.isValid,\n            });\n        }\n        else {\n            set(_formValues, name, values);\n        }\n    };\n    const updateErrors = (name, error) => {\n        set(_formState.errors, name, error);\n        _subjects.state.next({\n            errors: _formState.errors,\n        });\n    };\n    const _setErrors = (errors) => {\n        _formState.errors = errors;\n        _subjects.state.next({\n            errors: _formState.errors,\n            isValid: false,\n        });\n    };\n    const hasExplicitNullIntermediate = (name) => {\n        const segments = isKey(name) ? [name] : stringToPath(name);\n        let formValues = _formValues;\n        let defaultValues = _defaultValues;\n        for (let i = 0; i < segments.length - 1; i++) {\n            const key = segments[i];\n            formValues = isNullOrUndefined(formValues) ? formValues : formValues[key];\n            defaultValues = isNullOrUndefined(defaultValues)\n                ? defaultValues\n                : defaultValues[key];\n            if (formValues === null && defaultValues !== null) {\n                return true;\n            }\n        }\n        return false;\n    };\n    const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n        const field = get(_fields, name);\n        if (field) {\n            if (hasExplicitNullIntermediate(name)) {\n                return;\n            }\n            const wasUnsetInFormValues = isUndefined(get(_formValues, name));\n            const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n            isUndefined(defaultValue) ||\n                (ref && ref.defaultChecked) ||\n                shouldSkipSetValueAs\n                ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n                : setFieldValue(name, defaultValue);\n            if (_state.mount && !_state.action) {\n                _setValid();\n                // Re-registering a field after a prior unregister puts its key back\n                // into _formValues, which can flip isDirty back to false (#13397).\n                // Only run when we are currently dirty, otherwise an initial register\n                // for a field with no defaultValue would flip isDirty to true. Reset\n                // paths repopulate _formValues before re-register, so the key is\n                // present then and this branch is skipped (preserves keepDirty).\n                if (wasUnsetInFormValues &&\n                    _formState.isDirty &&\n                    (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty)) {\n                    const isDirty = _getDirty();\n                    if (!isDirty) {\n                        _formState.isDirty = false;\n                        _subjects.state.next({ ..._formState });\n                    }\n                }\n            }\n        }\n    };\n    const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n        let shouldUpdateField = false;\n        let isPreviousDirty = false;\n        const output = {\n            name,\n        };\n        if (!_options.disabled) {\n            if (!isBlurEvent || shouldDirty) {\n                if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n                    isPreviousDirty = _formState.isDirty;\n                    _formState.isDirty = output.isDirty = _getDirty();\n                    shouldUpdateField = isPreviousDirty !== output.isDirty;\n                }\n                const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n                isPreviousDirty = !!get(_formState.dirtyFields, name);\n                if (isCurrentFieldPristine !== _formState.isDirty) {\n                    _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n                }\n                else {\n                    isCurrentFieldPristine\n                        ? unset(_formState.dirtyFields, name)\n                        : set(_formState.dirtyFields, name, true);\n                }\n                output.dirtyFields = _formState.dirtyFields;\n                shouldUpdateField =\n                    shouldUpdateField ||\n                        ((_proxyFormState.dirtyFields ||\n                            _proxySubscribeFormState.dirtyFields) &&\n                            isPreviousDirty !== !isCurrentFieldPristine);\n            }\n            if (isBlurEvent) {\n                const isPreviousFieldTouched = get(_formState.touchedFields, name);\n                if (!isPreviousFieldTouched) {\n                    set(_formState.touchedFields, name, isBlurEvent);\n                    output.touchedFields = _formState.touchedFields;\n                    shouldUpdateField =\n                        shouldUpdateField ||\n                            ((_proxyFormState.touchedFields ||\n                                _proxySubscribeFormState.touchedFields) &&\n                                isPreviousFieldTouched !== isBlurEvent);\n                }\n            }\n            shouldUpdateField && shouldRender && _subjects.state.next(output);\n        }\n        return shouldUpdateField ? output : {};\n    };\n    const shouldRenderByError = (name, isValid, error, fieldState) => {\n        const previousFieldError = get(_formState.errors, name);\n        const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n            isBoolean(isValid) &&\n            _formState.isValid !== isValid;\n        if (_options.delayError && error) {\n            delayErrorCallback = debounce(() => updateErrors(name, error));\n            delayErrorCallback(_options.delayError);\n        }\n        else {\n            clearTimeout(timer);\n            delayErrorCallback = null;\n            error\n                ? set(_formState.errors, name, error)\n                : unset(_formState.errors, name);\n        }\n        if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n            !isEmptyObject(fieldState) ||\n            shouldUpdateValid) {\n            const updatedFormState = {\n                ...fieldState,\n                ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n                errors: _formState.errors,\n                name,\n            };\n            _formState = {\n                ..._formState,\n                ...updatedFormState,\n            };\n            _subjects.state.next(updatedFormState);\n        }\n    };\n    const _runSchema = async (name) => {\n        _updateIsValidating(name, true);\n        return await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n    };\n    const executeSchemaAndUpdateState = async (names) => {\n        const { errors } = await _runSchema(names);\n        _updateIsValidating(names);\n        if (names) {\n            for (const name of names) {\n                const error = get(errors, name);\n                error\n                    ? _names.array.has(name) && isObject(error)\n                        ? updateFieldArrayRootError(_formState.errors, { [name]: error }, name)\n                        : set(_formState.errors, name, error)\n                    : unset(_formState.errors, name);\n            }\n        }\n        else {\n            _formState.errors = errors;\n        }\n        return errors;\n    };\n    const validateForm = async ({ name, eventType, }) => {\n        if (props.validate) {\n            const result = await props.validate({\n                formValues: _formValues,\n                formState: _formState,\n                name,\n                eventType,\n            });\n            if (isObject(result)) {\n                for (const key in result) {\n                    const error = result[key];\n                    if (error) {\n                        setError(`${FORM_ERROR_TYPE}.${key}`, {\n                            message: isString(error.message) ? error.message : '',\n                            type: error.type || INPUT_VALIDATION_RULES.validate,\n                        });\n                    }\n                }\n            }\n            else if (isString(result) || !result) {\n                setError(FORM_ERROR_TYPE, {\n                    message: result || '',\n                    type: INPUT_VALIDATION_RULES.validate,\n                });\n            }\n            else {\n                clearErrors(FORM_ERROR_TYPE);\n            }\n            return result;\n        }\n        return true;\n    };\n    const executeBuiltInValidation = async ({ fields, onlyCheckValid, name, eventType, context = {\n        valid: true,\n        runRootValidation: false,\n    }, }) => {\n        if (props.validate) {\n            context.runRootValidation = true;\n            const result = await validateForm({\n                name,\n                eventType,\n            });\n            if (!result) {\n                context.valid = false;\n                if (onlyCheckValid) {\n                    return context.valid;\n                }\n            }\n        }\n        for (const name in fields) {\n            const field = fields[name];\n            if (field) {\n                const { _f, ...fieldValue } = field;\n                if (_f) {\n                    const isFieldArrayRoot = _names.array.has(_f.name);\n                    const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n                    const shouldTrackIsValidatingState = _proxyFormState.validatingFields ||\n                        _proxyFormState.isValidating ||\n                        _proxySubscribeFormState.validatingFields ||\n                        _proxySubscribeFormState.isValidating;\n                    if (isPromiseFunction && shouldTrackIsValidatingState) {\n                        _updateIsValidating([_f.name], true);\n                    }\n                    const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !onlyCheckValid, isFieldArrayRoot);\n                    if (isPromiseFunction && shouldTrackIsValidatingState) {\n                        _updateIsValidating([_f.name]);\n                    }\n                    if (fieldError[_f.name]) {\n                        context.valid = false;\n                        if (onlyCheckValid) {\n                            break;\n                        }\n                    }\n                    !onlyCheckValid &&\n                        (get(fieldError, _f.name)\n                            ? isFieldArrayRoot\n                                ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n                                : set(_formState.errors, _f.name, fieldError[_f.name])\n                            : unset(_formState.errors, _f.name));\n                    if (props.shouldUseNativeValidation && fieldError[_f.name]) {\n                        break;\n                    }\n                }\n                !isEmptyObject(fieldValue) &&\n                    (await executeBuiltInValidation({\n                        context,\n                        onlyCheckValid,\n                        fields: fieldValue,\n                        name: name,\n                        eventType,\n                    }));\n            }\n        }\n        return context.valid;\n    };\n    const _removeUnmounted = () => {\n        for (const name of _names.unMount) {\n            const field = get(_fields, name);\n            field &&\n                (field._f.refs\n                    ? field._f.refs.every((ref) => !live(ref))\n                    : !live(field._f.ref)) &&\n                unregister(name);\n        }\n        _names.unMount = new Set();\n    };\n    const _getDirty = (name, data) => !_options.disabled &&\n        (name && data && set(_formValues, name, data),\n            !deepEqual(getValues(), _defaultValues));\n    const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n        ...(_state.mount\n            ? _formValues\n            : isUndefined(defaultValue)\n                ? _defaultValues\n                : isString(names)\n                    ? { [names]: defaultValue }\n                    : defaultValue),\n    }, isGlobal, defaultValue);\n    const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n    const setFieldValue = (name, value, options = {}) => {\n        const field = get(_fields, name);\n        let fieldValue = value;\n        if (field) {\n            const fieldReference = field._f;\n            if (fieldReference) {\n                !fieldReference.disabled &&\n                    set(_formValues, name, getFieldValueAs(value, fieldReference));\n                fieldValue =\n                    isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n                        ? ''\n                        : value;\n                if (isMultipleSelect(fieldReference.ref)) {\n                    [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n                }\n                else if (fieldReference.refs) {\n                    if (isCheckBoxInput(fieldReference.ref)) {\n                        fieldReference.refs.forEach((checkboxRef) => {\n                            if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n                                if (Array.isArray(fieldValue)) {\n                                    checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n                                }\n                                else {\n                                    checkboxRef.checked =\n                                        fieldValue === checkboxRef.value || !!fieldValue;\n                                }\n                            }\n                        });\n                    }\n                    else {\n                        fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n                    }\n                }\n                else if (isFileInput(fieldReference.ref)) {\n                    fieldReference.ref.value = '';\n                }\n                else {\n                    fieldReference.ref.value = fieldValue;\n                    if (!fieldReference.ref.type) {\n                        _subjects.state.next({\n                            name,\n                            values: cloneObject(_formValues),\n                        });\n                    }\n                }\n            }\n        }\n        (options.shouldDirty || options.shouldTouch) &&\n            updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n        options.shouldValidate && trigger(name);\n    };\n    const setFieldValues = (name, value, options) => {\n        for (const fieldKey in value) {\n            if (!value.hasOwnProperty(fieldKey)) {\n                return;\n            }\n            const fieldValue = value[fieldKey];\n            const fieldName = name + '.' + fieldKey;\n            const field = get(_fields, fieldName);\n            (_names.array.has(name) ||\n                isObject(fieldValue) ||\n                (field && !field._f)) &&\n                !isDateObject(fieldValue)\n                ? setFieldValues(fieldName, fieldValue, options)\n                : setFieldValue(fieldName, fieldValue, options);\n        }\n    };\n    const setValue = (name, value, options = {}) => {\n        const field = get(_fields, name);\n        const isFieldArray = _names.array.has(name);\n        const cloneValue = cloneObject(value);\n        const previousValue = get(_formValues, name);\n        const isValueUnchanged = deepEqual(previousValue, cloneValue);\n        if (!isValueUnchanged) {\n            set(_formValues, name, cloneValue);\n        }\n        if (isFieldArray) {\n            _subjects.array.next({\n                name,\n                values: cloneObject(_formValues),\n            });\n            if ((_proxyFormState.isDirty ||\n                _proxyFormState.dirtyFields ||\n                _proxySubscribeFormState.isDirty ||\n                _proxySubscribeFormState.dirtyFields) &&\n                options.shouldDirty) {\n                _updateDirtyFields();\n                _subjects.state.next({\n                    name,\n                    dirtyFields: _formState.dirtyFields,\n                    isDirty: _getDirty(name, cloneValue),\n                });\n            }\n        }\n        else {\n            const isEmpty = (Array.isArray(cloneValue) && !cloneValue.length) ||\n                isEmptyObject(cloneValue);\n            if (!field || field._f || isNullOrUndefined(cloneValue) || isEmpty) {\n                setFieldValue(name, cloneValue, options);\n            }\n            else {\n                setFieldValues(name, cloneValue, options);\n            }\n        }\n        if (!isValueUnchanged) {\n            const watched = isWatched(name, _names);\n            const values = cloneObject(_formValues);\n            if (!isFieldArray) {\n                for (const arrayName of getFieldArrayParentNames(_names.array, name)) {\n                    _subjects.array.next({ name: arrayName, values });\n                }\n            }\n            _subjects.state.next({\n                ...(watched && _formState),\n                name: _state.mount || watched ? name : undefined,\n                values,\n            });\n        }\n    };\n    const setValues = (formValues) => {\n        const updatedFormValues = isFunction(formValues)\n            ? formValues(_formValues)\n            : formValues;\n        if (!deepEqual(_formValues, updatedFormValues)) {\n            _formValues = {\n                ..._formValues,\n                ...updatedFormValues,\n            };\n            for (const fieldName of _names.mount) {\n                setValue(fieldName, get(updatedFormValues, fieldName));\n            }\n            _subjects.state.next({ ..._formState, values: _formValues });\n        }\n    };\n    const onChange = async (event) => {\n        _state.mount = true;\n        const target = event.target;\n        let name = target.name;\n        let isFieldValueUpdated = true;\n        const field = get(_fields, name);\n        const _updateIsFieldValueUpdated = (fieldValue) => {\n            isFieldValueUpdated =\n                Number.isNaN(fieldValue) ||\n                    (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n                    deepEqual(fieldValue, get(_formValues, name, fieldValue));\n        };\n        const validationModeBeforeSubmit = getValidationModes(_options.mode);\n        const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n        if (field) {\n            let error;\n            let isValid;\n            const fieldValue = target.type\n                ? getFieldValue(field._f)\n                : getEventValue(event);\n            const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n            const shouldSkipValidation = (!hasValidation(field._f) &&\n                !props.validate &&\n                !_options.resolver &&\n                !get(_formState.errors, name) &&\n                !field._f.deps) ||\n                skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n            const watched = isWatched(name, _names, isBlurEvent);\n            set(_formValues, name, fieldValue);\n            if (isBlurEvent) {\n                if (!target || !target.readOnly) {\n                    field._f.onBlur && field._f.onBlur(event);\n                    delayErrorCallback && delayErrorCallback(0);\n                }\n            }\n            else if (field._f.onChange) {\n                field._f.onChange(event);\n            }\n            const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n            const shouldRender = !isEmptyObject(fieldState) || watched;\n            !isBlurEvent &&\n                _subjects.state.next({\n                    name,\n                    type: event.type,\n                    values: cloneObject(_formValues),\n                });\n            if (shouldSkipValidation) {\n                if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n                    if (_options.mode === 'onBlur') {\n                        if (isBlurEvent) {\n                            _setValid();\n                        }\n                    }\n                    else if (!isBlurEvent) {\n                        _setValid();\n                    }\n                }\n                return (shouldRender &&\n                    _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n            }\n            if (!_options.resolver && props.validate) {\n                await validateForm({\n                    name: name,\n                    eventType: event.type,\n                });\n            }\n            !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n            if (_options.resolver) {\n                const { errors } = await _runSchema([name]);\n                _updateIsValidating([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (isFieldValueUpdated) {\n                    const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n                    const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n                    error = errorLookupResult.error;\n                    name = errorLookupResult.name;\n                    isValid = isEmptyObject(errors);\n                }\n            }\n            else {\n                _updateIsValidating([name], true);\n                error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n                _updateIsValidating([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (isFieldValueUpdated) {\n                    if (error) {\n                        isValid = false;\n                    }\n                    else if (_proxyFormState.isValid ||\n                        _proxySubscribeFormState.isValid) {\n                        isValid = await executeBuiltInValidation({\n                            fields: _fields,\n                            onlyCheckValid: true,\n                            name: name,\n                            eventType: event.type,\n                        });\n                    }\n                }\n            }\n            if (isFieldValueUpdated) {\n                field._f.deps &&\n                    (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n                    trigger(field._f.deps);\n                shouldRenderByError(name, isValid, error, fieldState);\n            }\n        }\n    };\n    const _focusInput = (ref, key) => {\n        if (get(_formState.errors, key) && ref.focus) {\n            ref.focus();\n            return 1;\n        }\n        return;\n    };\n    const trigger = async (name, options = {}) => {\n        let isValid;\n        let validationResult;\n        const fieldNames = convertToArrayPayload(name);\n        if (_options.resolver) {\n            const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n            isValid = isEmptyObject(errors);\n            validationResult = name\n                ? !fieldNames.some((name) => get(errors, name))\n                : isValid;\n        }\n        else if (name) {\n            validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n                const field = get(_fields, fieldName);\n                return await executeBuiltInValidation({\n                    fields: field && field._f ? { [fieldName]: field } : field,\n                    eventType: EVENTS.TRIGGER,\n                });\n            }))).every(Boolean);\n            !(!validationResult && !_formState.isValid) && _setValid();\n        }\n        else {\n            validationResult = isValid = await executeBuiltInValidation({\n                fields: _fields,\n                name,\n                eventType: EVENTS.TRIGGER,\n            });\n        }\n        _subjects.state.next({\n            ...(!isString(name) ||\n                ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n                    isValid !== _formState.isValid)\n                ? {}\n                : { name }),\n            ...(_options.resolver || !name ? { isValid } : {}),\n            errors: _formState.errors,\n        });\n        options.shouldFocus &&\n            !validationResult &&\n            iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n        return validationResult;\n    };\n    const getValues = (fieldNames, config) => {\n        let values = {\n            ...(_state.mount ? _formValues : _defaultValues),\n        };\n        if (config) {\n            values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n        }\n        return isUndefined(fieldNames)\n            ? values\n            : isString(fieldNames)\n                ? get(values, fieldNames)\n                : fieldNames.map((name) => get(values, name));\n    };\n    const getFieldState = (name, formState) => ({\n        invalid: !!get((formState || _formState).errors, name),\n        isDirty: !!get((formState || _formState).dirtyFields, name),\n        error: get((formState || _formState).errors, name),\n        isValidating: !!get(_formState.validatingFields, name),\n        isTouched: !!get((formState || _formState).touchedFields, name),\n    });\n    const clearErrors = (name) => {\n        const names = name ? convertToArrayPayload(name) : undefined;\n        names === null || names === void 0 ? void 0 : names.forEach((inputName) => unset(_formState.errors, inputName));\n        if (names) {\n            // Emit for each cleared field with the field name so that\n            // shouldSubscribeByName can filter and avoid broad re-renders\n            names.forEach((inputName) => {\n                _subjects.state.next({\n                    name: inputName,\n                    errors: _formState.errors,\n                });\n            });\n        }\n        else {\n            // Clear all errors - emit without name to notify all subscribers\n            _subjects.state.next({\n                errors: {},\n            });\n        }\n    };\n    const setError = (name, error, options) => {\n        const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n        const currentError = get(_formState.errors, name) || {};\n        // Don't override existing error messages elsewhere in the object tree.\n        const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n        set(_formState.errors, name, {\n            ...restOfErrorTree,\n            ...error,\n            ref,\n        });\n        _subjects.state.next({\n            name,\n            errors: _formState.errors,\n            isValid: false,\n        });\n        options && options.shouldFocus && ref && ref.focus && ref.focus();\n    };\n    const watch = (name, defaultValue) => isFunction(name)\n        ? _subjects.state.subscribe({\n            next: (payload) => 'values' in payload &&\n                name(payload.values || _getWatch(undefined, defaultValue), payload),\n        })\n        : _getWatch(name, defaultValue, true);\n    const _subscribe = (props) => _subjects.state.subscribe({\n        next: (formState) => {\n            if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n                shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n                const snapshot = { ..._formValues };\n                props.callback({\n                    values: snapshot,\n                    ..._formState,\n                    ...formState,\n                    defaultValues: _defaultValues,\n                });\n            }\n        },\n    }).unsubscribe;\n    const subscribe = (props) => {\n        _state.mount = true;\n        _proxySubscribeFormState = {\n            ..._proxySubscribeFormState,\n            ...props.formState,\n        };\n        return _subscribe({\n            ...props,\n            formState: {\n                ...defaultProxyFormState,\n                ...props.formState,\n            },\n        });\n    };\n    const unregister = (name, options = {}) => {\n        for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n            _names.mount.delete(fieldName);\n            _names.array.delete(fieldName);\n            if (!options.keepValue) {\n                unset(_fields, fieldName);\n                unset(_formValues, fieldName);\n            }\n            !options.keepError && unset(_formState.errors, fieldName);\n            !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n            !options.keepTouched && unset(_formState.touchedFields, fieldName);\n            !options.keepIsValidating &&\n                unset(_formState.validatingFields, fieldName);\n            !_options.shouldUnregister &&\n                !options.keepDefaultValue &&\n                unset(_defaultValues, fieldName);\n        }\n        _subjects.state.next({\n            values: cloneObject(_formValues),\n        });\n        _subjects.state.next({\n            ..._formState,\n            ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n        });\n        !options.keepIsValid && _setValid();\n    };\n    const _setDisabledField = ({ disabled, name, }) => {\n        if ((isBoolean(disabled) && _state.mount) ||\n            !!disabled ||\n            _names.disabled.has(name)) {\n            const wasDisabled = _names.disabled.has(name);\n            const isDisabled = !!disabled;\n            const disabledStateChanged = wasDisabled !== isDisabled;\n            disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n            disabledStateChanged && _state.mount && !_state.action && _setValid();\n        }\n    };\n    const register = (name, options = {}) => {\n        let field = get(_fields, name);\n        const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n        const shouldRevalidateRemount = !_names.registerName.has(name) && field && field._f && !field._f.mount;\n        set(_fields, name, {\n            ...(field || {}),\n            _f: {\n                ...(field && field._f ? field._f : { ref: { name } }),\n                name,\n                mount: true,\n                ...options,\n            },\n        });\n        _names.mount.add(name);\n        if (field && !shouldRevalidateRemount) {\n            _setDisabledField({\n                disabled: isBoolean(options.disabled)\n                    ? options.disabled\n                    : _options.disabled,\n                name,\n            });\n        }\n        else {\n            updateValidAndValue(name, true, options.value);\n        }\n        return {\n            ...(disabledIsDefined\n                ? { disabled: options.disabled || _options.disabled }\n                : {}),\n            ...(_options.progressive\n                ? {\n                    required: !!options.required,\n                    min: getRuleValue(options.min),\n                    max: getRuleValue(options.max),\n                    minLength: getRuleValue(options.minLength),\n                    maxLength: getRuleValue(options.maxLength),\n                    pattern: getRuleValue(options.pattern),\n                }\n                : {}),\n            name,\n            onChange,\n            onBlur: onChange,\n            ref: (ref) => {\n                if (ref) {\n                    _names.registerName.add(name);\n                    register(name, options);\n                    _names.registerName.delete(name);\n                    field = get(_fields, name);\n                    const fieldRef = isUndefined(ref.value)\n                        ? ref.querySelectorAll\n                            ? ref.querySelectorAll('input,select,textarea')[0] || ref\n                            : ref\n                        : ref;\n                    const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n                    const refs = field._f.refs || [];\n                    if (radioOrCheckbox\n                        ? refs.find((option) => option === fieldRef)\n                        : fieldRef === field._f.ref) {\n                        return;\n                    }\n                    set(_fields, name, {\n                        _f: {\n                            ...field._f,\n                            ...(radioOrCheckbox\n                                ? {\n                                    refs: [\n                                        ...refs.filter(live),\n                                        fieldRef,\n                                        ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n                                    ],\n                                    ref: { type: fieldRef.type, name },\n                                }\n                                : { ref: fieldRef }),\n                        },\n                    });\n                    updateValidAndValue(name, false, undefined, fieldRef);\n                }\n                else {\n                    field = get(_fields, name, {});\n                    if (field._f) {\n                        field._f.mount = false;\n                    }\n                    (_options.shouldUnregister || options.shouldUnregister) &&\n                        !(getFieldArrayParentNames(_names.array, name).length &&\n                            _state.action) &&\n                        _names.unMount.add(name);\n                }\n            },\n        };\n    };\n    const _focusError = () => _options.shouldFocusError &&\n        !_options.shouldUseNativeValidation &&\n        iterateFieldsByAction(_fields, _focusInput, _names.mount);\n    const _disableForm = (disabled) => {\n        if (isBoolean(disabled)) {\n            _subjects.state.next({ disabled });\n            iterateFieldsByAction(_fields, (ref, name) => {\n                const currentField = get(_fields, name);\n                if (currentField) {\n                    ref.disabled = currentField._f.disabled || disabled;\n                    if (Array.isArray(currentField._f.refs)) {\n                        currentField._f.refs.forEach((inputRef) => {\n                            inputRef.disabled = currentField._f.disabled || disabled;\n                        });\n                    }\n                }\n            }, 0, false);\n        }\n    };\n    const handleSubmit = (onValid, onInvalid) => async (e) => {\n        let onValidError = undefined;\n        if (e) {\n            e.preventDefault && e.preventDefault();\n            e.persist &&\n                e.persist();\n        }\n        let fieldValues = cloneObject(_formValues);\n        _subjects.state.next({\n            isSubmitting: true,\n        });\n        if (_options.resolver) {\n            const { errors, values } = await _runSchema();\n            _updateIsValidating();\n            _formState.errors = errors;\n            fieldValues = cloneObject(values);\n        }\n        else {\n            await executeBuiltInValidation({\n                fields: _fields,\n                eventType: EVENTS.SUBMIT,\n            });\n        }\n        if (_names.disabled.size) {\n            for (const name of _names.disabled) {\n                unset(fieldValues, name);\n            }\n        }\n        unset(_formState.errors, ROOT_ERROR_TYPE);\n        if (isEmptyObject(_formState.errors)) {\n            _subjects.state.next({\n                errors: {},\n            });\n            try {\n                await onValid(fieldValues, e);\n            }\n            catch (error) {\n                onValidError = error;\n            }\n        }\n        else {\n            if (onInvalid) {\n                await onInvalid({ ..._formState.errors }, e);\n            }\n            _focusError();\n            setTimeout(_focusError);\n        }\n        _subjects.state.next({\n            isSubmitted: true,\n            isSubmitting: false,\n            isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n            submitCount: _formState.submitCount + 1,\n            errors: _formState.errors,\n        });\n        if (onValidError) {\n            throw onValidError;\n        }\n    };\n    const resetField = (name, options = {}) => {\n        if (get(_fields, name)) {\n            if (isUndefined(options.defaultValue)) {\n                setValue(name, cloneObject(get(_defaultValues, name)));\n            }\n            else {\n                setValue(name, options.defaultValue);\n                set(_defaultValues, name, cloneObject(options.defaultValue));\n            }\n            if (!options.keepTouched) {\n                unset(_formState.touchedFields, name);\n            }\n            if (!options.keepDirty) {\n                unset(_formState.dirtyFields, name);\n                _formState.isDirty = options.defaultValue\n                    ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n                    : _getDirty();\n            }\n            if (!options.keepError) {\n                unset(_formState.errors, name);\n                _proxyFormState.isValid && _setValid();\n            }\n            _subjects.state.next({ ..._formState });\n        }\n    };\n    const _reset = (formValues, keepStateOptions = {}) => {\n        const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n        const cloneUpdatedValues = cloneObject(updatedValues);\n        const isEmptyResetValues = isEmptyObject(formValues);\n        const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n        if (!keepStateOptions.keepDefaultValues) {\n            _defaultValues = updatedValues;\n        }\n        if (!keepStateOptions.keepValues) {\n            if (keepStateOptions.keepDirtyValues) {\n                const fieldsToCheck = new Set([\n                    ..._names.mount,\n                    ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n                ]);\n                for (const fieldName of Array.from(fieldsToCheck)) {\n                    const isDirty = get(_formState.dirtyFields, fieldName);\n                    const existingValue = get(_formValues, fieldName);\n                    const newValue = get(values, fieldName);\n                    if (isDirty && !isUndefined(existingValue)) {\n                        set(values, fieldName, existingValue);\n                    }\n                    else if (!isDirty && !isUndefined(newValue)) {\n                        setValue(fieldName, newValue);\n                    }\n                }\n            }\n            else {\n                if (isWeb && isUndefined(formValues)) {\n                    for (const name of _names.mount) {\n                        const field = get(_fields, name);\n                        if (field && field._f) {\n                            const fieldReference = Array.isArray(field._f.refs)\n                                ? field._f.refs[0]\n                                : field._f.ref;\n                            if (isHTMLElement(fieldReference)) {\n                                const form = fieldReference.closest('form');\n                                if (form) {\n                                    form.reset();\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                }\n                if (keepStateOptions.keepFieldsRef) {\n                    for (const fieldName of _names.mount) {\n                        setValue(fieldName, get(values, fieldName));\n                    }\n                }\n                else {\n                    _fields = {};\n                }\n            }\n            _formValues = _options.shouldUnregister\n                ? keepStateOptions.keepDefaultValues\n                    ? cloneObject(_defaultValues)\n                    : {}\n                : cloneObject(values);\n            _subjects.array.next({\n                values: { ...values },\n            });\n            _subjects.state.next({\n                values: { ...values },\n            });\n        }\n        _names = {\n            mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n            unMount: new Set(),\n            array: new Set(),\n            registerName: new Set(),\n            disabled: new Set(),\n            watch: new Set(),\n            watchAll: false,\n            focus: '',\n        };\n        _state.mount =\n            !_proxyFormState.isValid ||\n                !!keepStateOptions.keepIsValid ||\n                !!keepStateOptions.keepDirtyValues ||\n                (!_options.shouldUnregister && !isEmptyObject(values));\n        _state.watch = !!_options.shouldUnregister;\n        _state.keepIsValid = !!keepStateOptions.keepIsValid;\n        _state.action = false;\n        // Clear errors synchronously to prevent validation errors on subsequent submissions\n        // This fixes the issue where form.reset() causes validation errors on subsequent\n        // submissions in Next.js 16 with Server Actions\n        if (!keepStateOptions.keepErrors) {\n            _formState.errors = {};\n        }\n        _subjects.state.next({\n            submitCount: keepStateOptions.keepSubmitCount\n                ? _formState.submitCount\n                : 0,\n            isDirty: isEmptyResetValues\n                ? false\n                : keepStateOptions.keepDirty\n                    ? _formState.isDirty\n                    : !!(keepStateOptions.keepDefaultValues &&\n                        !deepEqual(formValues, _defaultValues)),\n            isSubmitted: keepStateOptions.keepIsSubmitted\n                ? _formState.isSubmitted\n                : false,\n            dirtyFields: isEmptyResetValues\n                ? {}\n                : keepStateOptions.keepDirtyValues\n                    ? keepStateOptions.keepDefaultValues && _formValues\n                        ? getDirtyFields(_defaultValues, _formValues)\n                        : _formState.dirtyFields\n                    : keepStateOptions.keepDefaultValues && formValues\n                        ? getDirtyFields(_defaultValues, formValues)\n                        : keepStateOptions.keepDirty\n                            ? _formState.dirtyFields\n                            : {},\n            touchedFields: keepStateOptions.keepTouched\n                ? _formState.touchedFields\n                : {},\n            errors: keepStateOptions.keepErrors ? _formState.errors : {},\n            isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n                ? _formState.isSubmitSuccessful\n                : false,\n            isSubmitting: false,\n            defaultValues: _defaultValues,\n        });\n    };\n    const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n        ? formValues(_formValues)\n        : formValues, { ..._options.resetOptions, ...keepStateOptions });\n    const setFocus = (name, options = {}) => {\n        const field = get(_fields, name);\n        const fieldReference = field && field._f;\n        if (fieldReference) {\n            const fieldRef = fieldReference.refs\n                ? fieldReference.refs[0]\n                : fieldReference.ref;\n            if (fieldRef.focus) {\n                // Use setTimeout to ensure focus happens after any pending state updates\n                // This fixes the issue where setFocus doesn't work immediately after setError\n                setTimeout(() => {\n                    fieldRef.focus();\n                    options.shouldSelect &&\n                        isFunction(fieldRef.select) &&\n                        fieldRef.select();\n                });\n            }\n        }\n    };\n    const _setFormState = (updatedFormState) => {\n        _formState = {\n            ..._formState,\n            ...updatedFormState,\n        };\n    };\n    const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n        _options.defaultValues().then((values) => {\n            reset(values, _options.resetOptions);\n            _subjects.state.next({\n                isLoading: false,\n            });\n        });\n    const methods = {\n        control: {\n            register,\n            unregister,\n            getFieldState,\n            handleSubmit,\n            setError,\n            _subscribe,\n            _runSchema,\n            _updateIsValidating,\n            _focusError,\n            _getWatch,\n            _getDirty,\n            _setValid,\n            _setFieldArray,\n            _setDisabledField,\n            _setErrors,\n            _getFieldArray,\n            _reset,\n            _resetDefaultValues,\n            _removeUnmounted,\n            _disableForm,\n            _subjects,\n            _proxyFormState,\n            get _fields() {\n                return _fields;\n            },\n            get _formValues() {\n                return _formValues;\n            },\n            get _state() {\n                return _state;\n            },\n            set _state(value) {\n                _state = value;\n            },\n            get _defaultValues() {\n                return _defaultValues;\n            },\n            get _names() {\n                return _names;\n            },\n            set _names(value) {\n                _names = value;\n            },\n            get _formState() {\n                return _formState;\n            },\n            get _options() {\n                return _options;\n            },\n            set _options(value) {\n                _options = {\n                    ..._options,\n                    ...value,\n                };\n            },\n        },\n        subscribe,\n        trigger,\n        register,\n        handleSubmit,\n        watch,\n        setValue,\n        setValues,\n        getValues,\n        reset,\n        resetField,\n        clearErrors,\n        unregister,\n        setError,\n        setFocus,\n        getFieldState,\n    };\n    return {\n        ...methods,\n        formControl: methods,\n    };\n}\n\nvar generateId = () => {\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n        const r = ((Math.random() * 16 + d) % 16) | 0;\n        return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n    });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n    ? options.focusName ||\n        `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n    : '';\n\nvar appendAt = (data, value) => [\n    ...data,\n    ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n    return [\n        ...data.slice(0, index),\n        ...convertToArrayPayload(value),\n        ...data.slice(index),\n    ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n    if (!Array.isArray(data)) {\n        return [];\n    }\n    if (isUndefined(data[to])) {\n        data[to] = undefined;\n    }\n    data.splice(to, 0, data.splice(from, 1)[0]);\n    return data;\n};\n\nvar prependAt = (data, value) => [\n    ...convertToArrayPayload(value),\n    ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n    let i = 0;\n    const temp = [...data];\n    for (const index of indexes) {\n        temp.splice(index - i, 1);\n        i++;\n    }\n    return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n    ? []\n    : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n    [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n    fieldValues[index] = value;\n    return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n *     defaultValues: {\n *       test: []\n *     }\n *   });\n *   const { fields, append } = useFieldArray({\n *     control,\n *     name: \"test\"\n *   });\n *\n *   return (\n *     <form onSubmit={handleSubmit(data => console.log(data))}>\n *       {fields.map((item, index) => (\n *          <input key={item.id} {...register(`test.${index}.firstName`)}  />\n *       ))}\n *       <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n *         append\n *       </button>\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n    const [fields, setFields] = React.useState(control._getFieldArray(name));\n    const ids = React.useRef(control._getFieldArray(name).map(generateId));\n    const _actioned = React.useRef(false);\n    control._names.array.add(name);\n    React.useMemo(() => rules &&\n        fields.length >= 0 &&\n        control.register(name, rules), [control, name, fields.length, rules]);\n    useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n        next: ({ values, name: fieldArrayName, }) => {\n            if (fieldArrayName === name || !fieldArrayName) {\n                const fieldValues = get(values, name);\n                if (Array.isArray(fieldValues)) {\n                    setFields(fieldValues);\n                    ids.current = fieldValues.map(generateId);\n                }\n            }\n        },\n    }).unsubscribe, [control, name]);\n    const updateValues = React.useCallback((updatedFieldArrayValues) => {\n        _actioned.current = true;\n        control._setFieldArray(name, updatedFieldArrayValues);\n    }, [control, name]);\n    const append = (value, options) => {\n        const appendValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n        control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n        ids.current = appendAt(ids.current, appendValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const prepend = (value, options) => {\n        const prependValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n        control._names.focus = getFocusFieldName(name, 0, options);\n        ids.current = prependAt(ids.current, prependValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const remove = (index) => {\n        const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n        ids.current = removeArrayAt(ids.current, index);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        !Array.isArray(get(control._fields, name)) &&\n            set(control._fields, name, undefined);\n        control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n            argA: index,\n        });\n    };\n    const insert$1 = (index, value, options) => {\n        const insertValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n        control._names.focus = getFocusFieldName(name, index, options);\n        ids.current = insert(ids.current, index, insertValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, insert, {\n            argA: index,\n            argB: fillEmptyArray(value),\n        });\n    };\n    const swap = (indexA, indexB) => {\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n        swapArrayAt(ids.current, indexA, indexB);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n            argA: indexA,\n            argB: indexB,\n        }, false);\n    };\n    const move = (from, to) => {\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        moveArrayAt(updatedFieldArrayValues, from, to);\n        moveArrayAt(ids.current, from, to);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n            argA: from,\n            argB: to,\n        }, false);\n    };\n    const update = (index, value) => {\n        const updateValue = cloneObject(value);\n        const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n        ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n        updateValues(updatedFieldArrayValues);\n        setFields([...updatedFieldArrayValues]);\n        control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n            argA: index,\n            argB: updateValue,\n        }, true, false);\n    };\n    const replace = (value) => {\n        const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n        ids.current = updatedFieldArrayValues.map(generateId);\n        updateValues([...updatedFieldArrayValues]);\n        setFields([...updatedFieldArrayValues]);\n        control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n    };\n    React.useEffect(() => {\n        control._state.action = false;\n        isWatched(name, control._names) &&\n            control._subjects.state.next({\n                ...control._formState,\n            });\n        const validationModes = getValidationModes(control._options.mode);\n        if (_actioned.current &&\n            (!validationModes.isOnSubmit || control._formState.isSubmitted) &&\n            !getValidationModes(control._options.reValidateMode).isOnSubmit &&\n            !validationModes.isOnBlur) {\n            if (control._options.resolver) {\n                control._runSchema([name]).then((result) => {\n                    control._updateIsValidating([name]);\n                    const error = get(result.errors, name);\n                    const existingError = get(control._formState.errors, name);\n                    if (existingError\n                        ? (!error && existingError.type) ||\n                            (error &&\n                                (existingError.type !== error.type ||\n                                    existingError.message !== error.message))\n                        : error && error.type) {\n                        error\n                            ? set(control._formState.errors, name, error)\n                            : unset(control._formState.errors, name);\n                        control._subjects.state.next({\n                            errors: control._formState.errors,\n                        });\n                    }\n                });\n            }\n            else {\n                const field = get(control._fields, name);\n                if (field &&\n                    field._f &&\n                    !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n                        getValidationModes(control._options.mode).isOnSubmit)) {\n                    validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n                        control._subjects.state.next({\n                            errors: updateFieldArrayRootError(control._formState.errors, error, name),\n                        }));\n                }\n            }\n        }\n        control._subjects.state.next({\n            name,\n            values: cloneObject(control._formValues),\n        });\n        control._names.focus &&\n            iterateFieldsByAction(control._fields, (ref, key) => {\n                if (control._names.focus &&\n                    key.startsWith(control._names.focus) &&\n                    ref.focus) {\n                    ref.focus();\n                    return 1;\n                }\n                return;\n            });\n        control._names.focus = '';\n        control._setValid();\n        _actioned.current = false;\n    }, [fields, name, control]);\n    React.useEffect(() => {\n        !get(control._formValues, name) && control._setFieldArray(name);\n        return () => {\n            const shouldKeepFieldArrayValues = !(control._options.shouldUnregister || shouldUnregister);\n            const updateMounted = (name, value) => {\n                const field = get(control._fields, name);\n                if (field && field._f) {\n                    field._f.mount = value;\n                }\n            };\n            if (_actioned.current && shouldKeepFieldArrayValues) {\n                control._subjects.state.next({\n                    name,\n                    values: cloneObject(control._formValues),\n                });\n            }\n            shouldKeepFieldArrayValues\n                ? updateMounted(name, false)\n                : control.unregister(name);\n        };\n    }, [name, control, keyName, shouldUnregister]);\n    return {\n        swap: React.useCallback(swap, [updateValues, name, control]),\n        move: React.useCallback(move, [updateValues, name, control]),\n        prepend: React.useCallback(prepend, [updateValues, name, control]),\n        append: React.useCallback(append, [updateValues, name, control]),\n        remove: React.useCallback(remove, [updateValues, name, control]),\n        insert: React.useCallback(insert$1, [updateValues, name, control]),\n        update: React.useCallback(update, [updateValues, name, control]),\n        replace: React.useCallback(replace, [updateValues, name, control]),\n        fields: React.useMemo(() => fields.map((field, index) => ({\n            ...field,\n            [keyName]: ids.current[index] || generateId(),\n        })), [fields, keyName]),\n    };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, watch, formState: { errors } } = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   console.log(watch(\"example\"));\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input defaultValue=\"test\" {...register(\"example\")} />\n *       <input {...register(\"exampleRequired\", { required: true })} />\n *       {errors.exampleRequired && <span>This field is required</span>}\n *       <button>Submit</button>\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n    const _formControl = React.useRef(undefined);\n    const _values = React.useRef(undefined);\n    const [formState, updateFormState] = React.useState(() => ({\n        ...cloneObject(DEFAULT_FORM_STATE),\n        isLoading: isFunction(props.defaultValues),\n        errors: props.errors || {},\n        disabled: props.disabled || false,\n        defaultValues: isFunction(props.defaultValues)\n            ? undefined\n            : props.defaultValues,\n    }));\n    if (!_formControl.current) {\n        if (props.formControl) {\n            _formControl.current = {\n                ...props.formControl,\n                formState,\n            };\n            if (props.defaultValues && !isFunction(props.defaultValues)) {\n                props.formControl.reset(props.defaultValues, props.resetOptions);\n            }\n        }\n        else {\n            const { formControl, ...rest } = createFormControl(props);\n            _formControl.current = {\n                ...rest,\n                formState,\n            };\n        }\n    }\n    const control = _formControl.current.control;\n    control._options = props;\n    useIsomorphicLayoutEffect(() => {\n        const sub = control._subscribe({\n            formState: control._proxyFormState,\n            callback: () => updateFormState({\n                ...control._formState,\n                defaultValues: control._defaultValues,\n            }),\n            reRenderRoot: true,\n        });\n        updateFormState((data) => ({\n            ...data,\n            isReady: true,\n        }));\n        control._formState.isReady = true;\n        return sub;\n    }, [control]);\n    React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n    React.useEffect(() => {\n        if (props.mode) {\n            control._options.mode = props.mode;\n        }\n        if (props.reValidateMode) {\n            control._options.reValidateMode = props.reValidateMode;\n        }\n    }, [control, props.mode, props.reValidateMode]);\n    React.useEffect(() => {\n        if (props.errors) {\n            control._setErrors(props.errors);\n            control._focusError();\n        }\n    }, [control, props.errors]);\n    React.useEffect(() => {\n        props.shouldUnregister &&\n            control._subjects.state.next({\n                values: control._getWatch(),\n            });\n    }, [control, props.shouldUnregister]);\n    React.useEffect(() => {\n        if (control._proxyFormState.isDirty) {\n            const isDirty = control._getDirty();\n            if (isDirty !== formState.isDirty) {\n                control._subjects.state.next({\n                    isDirty,\n                });\n            }\n        }\n    }, [control, formState.isDirty]);\n    React.useEffect(() => {\n        var _a;\n        if (props.values && !deepEqual(props.values, _values.current)) {\n            control._reset(props.values, {\n                keepFieldsRef: true,\n                ...control._options.resetOptions,\n            });\n            if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n                control._setValid();\n            }\n            _values.current = props.values;\n            updateFormState((state) => ({ ...state }));\n        }\n        else {\n            control._resetDefaultValues();\n        }\n    }, [control, props.values]);\n    React.useEffect(() => {\n        if (!control._state.mount) {\n            control._setValid();\n            control._state.mount = true;\n        }\n        if (control._state.watch) {\n            control._state.watch = false;\n            control._subjects.state.next({ ...control._formState });\n        }\n        control._removeUnmounted();\n    });\n    _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n    return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n *   control={control}\n *   names={['foo', 'bar', 'baz.qux']}\n *   render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n  Controller,\n  type ControllerProps,\n  type ControllerRenderProps,\n  type FieldPath,\n  type FieldValues,\n  type UseFormReturn,\n  FormProvider,\n  useForm,\n  useFormContext,\n} from 'react-hook-form';\n\nimport { cn } from '../../lib/utils';\nimport { Label } from './label';\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n  name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n);\n\ntype FormItemContextValue = {\n  id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n);\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext);\n  const itemContext = React.useContext(FormItemContext);\n  const { getFieldState, formState } = useFormContext();\n\n  if (!fieldContext) {\n    throw new Error('useFormField must be used within <FormField>');\n  }\n\n  const fieldState = getFieldState(fieldContext.name, formState);\n\n  const { id } = itemContext;\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  };\n};\n\nconst Form = React.forwardRef<\n  HTMLFormElement,\n  React.FormHTMLAttributes<HTMLFormElement> & {\n    formMethods: UseFormReturn<any>;\n  }\n>(({ className, formMethods, children, ...props }, ref) => (\n  <form ref={ref} className={cn(className)} {...props}>\n    <FormProvider {...formMethods}>{children}</FormProvider>\n  </form>\n));\nForm.displayName = 'Form';\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{ name: props.name }}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  );\n};\n\nconst FormItem = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n  const id = React.useId();\n\n  return (\n    <FormItemContext.Provider value={{ id }}>\n      <div\n        ref={ref}\n        className={cn('flex flex-col gap-[6px]', className)}\n        {...props}\n      />\n    </FormItemContext.Provider>\n  );\n});\nFormItem.displayName = 'FormItem';\n\nconst FormLabel = React.forwardRef<\n  React.ElementRef<typeof Label>,\n  React.ComponentPropsWithoutRef<typeof Label>\n>(({ className, ...props }, ref) => {\n  const { error, formItemId } = useFormField();\n\n  return (\n    <Label\n      ref={ref}\n      className={cn(error && 'text-[#ff5631]', 'peer', className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  );\n});\nFormLabel.displayName = 'FormLabel';\n\nconst FormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n  const { error, formItemId, formDescriptionId, formMessageId } =\n    useFormField();\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      aria-invalid={!!error}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      {...props}\n    />\n  );\n});\nFormControl.displayName = 'FormControl';\n\nconst FormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n  const { formDescriptionId } = useFormField();\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn(\n        'text-[12px] text-[#999999] leading-normal dark:text-muted-foreground',\n        className\n      )}\n      {...props}\n    />\n  );\n});\nFormDescription.displayName = 'FormDescription';\n\nconst FormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n  const { error, formMessageId } = useFormField();\n  const body = error ? String(error?.message) : children;\n\n  if (!body) {\n    return null;\n  }\n\n  return (\n    <p\n      ref={ref}\n      id={formMessageId}\n      className={cn(\n        'text-[12px] text-[#ff5631] leading-normal',\n        className\n      )}\n      {...props}\n    >\n      {body}\n    </p>\n  );\n});\nFormMessage.displayName = 'FormMessage';\n\nexport {\n  useFormField,\n  useForm,\n  Form,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormControl,\n  FormDescription,\n  FormMessage,\n  type UseFormReturn,\n  type ControllerRenderProps,\n};\n","import React, { forwardRef } from 'react';\n\nexport interface AbsFullscreenGradientBgProps {\n  children?: React.ReactNode;\n  zIndex: number;\n  padding?: number;\n  bgColor?: string;\n  disableGradient?: boolean;\n}\n\nexport const AbsFullscreenGradientBg = forwardRef<HTMLDivElement, AbsFullscreenGradientBgProps>(\n  ({ children, zIndex, padding, disableGradient, bgColor = '#fff' }, ref) => {\n    return (\n      <div\n        ref={ref}\n        style={{\n          position: 'absolute',\n          top: 0,\n          left: 0,\n          width: '100%',\n          height: '100%',\n          background: disableGradient\n            ? bgColor\n            : 'linear-gradient(180deg, #DBE9FF 0%, #E9FFFD 100%)',\n          padding: padding || 0,\n          zIndex,\n        }}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nAbsFullscreenGradientBg.displayName = 'AbsFullscreenGradientBg';\n","import { useMemo, useState, useCallback } from 'react';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { type AgentShortSummary as AgentSelectAgent } from '@baishuyun/types';\n\nexport { type AgentSelectAgent };\n\nexport interface AgentSelectProps {\n  agents: Array<AgentSelectAgent>;\n  showSearch?: boolean;\n  activeAgent?: { id: string } | null;\n  onSelect: (agent: AgentSelectAgent) => void | Promise<void>;\n}\n\ninterface AgentGroup {\n  label: string;\n  agents: Array<AgentSelectAgent>;\n}\n\nexport const AgentSelect = ({\n  agents,\n  showSearch = false,\n  activeAgent,\n  onSelect,\n}: AgentSelectProps) => {\n  const [searchQuery, setSearchQuery] = useState('');\n\n  const groups = useMemo<AgentGroup[]>(() => {\n    const systemAgents = agents.filter((a) => a.builtIn);\n    const customAgents = agents.filter((a) => !a.builtIn);\n    return [\n      { label: '系统智能体助手', agents: systemAgents },\n      { label: '自定义智能体助手', agents: customAgents },\n    ]\n      .map((g) => ({\n        ...g,\n        agents: g.agents.filter((a) =>\n          a?.name?.toLowerCase().includes(searchQuery.toLowerCase())\n        ),\n      }))\n      .filter((g) => g.agents.length > 0);\n  }, [agents, searchQuery]);\n\n  const handleSelect = useCallback(\n    (agent: AgentSelectAgent) => {\n      onSelect(agent);\n    },\n    [onSelect]\n  );\n\n  return (\n    <div className=\"flex flex-col\">\n      {showSearch && (\n        <div className=\"px-1.5 pt-1 pb-0.5\">\n          <div className=\"flex h-7.5 items-center gap-1.5 rounded-[4px] bg-white px-2.5 py-1.25 border border-[#E0E0E0]\">\n            <svg\n              width=\"14\"\n              height=\"14\"\n              viewBox=\"0 0 14 14\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              className=\"shrink-0 text-[#999999]\"\n            >\n              <path\n                d=\"M6.41667 11.0833C8.994 11.0833 11.0833 8.994 11.0833 6.41667C11.0833 3.83934 8.994 1.75 6.41667 1.75C3.83934 1.75 1.75 3.83934 1.75 6.41667C1.75 8.994 3.83934 11.0833 6.41667 11.0833Z\"\n                stroke=\"currentColor\"\n                strokeWidth=\"1.2\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n              />\n              <path\n                d=\"M12.25 12.25L9.7125 9.7125\"\n                stroke=\"currentColor\"\n                strokeWidth=\"1.2\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n              />\n            </svg>\n            <input\n              type=\"text\"\n              placeholder=\"搜索智能体助手\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"h-full flex-1 bg-transparent text-[12px] text-[#121111] placeholder:text-[#999999] outline-none\"\n            />\n          </div>\n        </div>\n      )}\n\n      <div className=\"max-h-80 overflow-y-auto scrollbar-hide\">\n        {groups.map((group, groupIndex) => (\n          <div key={group.label}>\n            <div\n              className={cn(\n                'flex h-8 items-start px-2.5 pt-2.25',\n                groupIndex > 0 && 'mt-0.5'\n              )}\n            >\n              <div className=\"flex w-full flex-col gap-1.5\">\n                <span className=\"text-[12px] font-medium text-[#666666] leading-4.25\">\n                  {group.label}\n                </span>\n                <div className=\"h-0 w-full border-b border-[#E0E0E0]\" />\n              </div>\n            </div>\n\n            <div className=\"px-1\">\n              {group.agents.map((agent) => {\n                const isActive = activeAgent?.id === agent.id;\n                return (\n                  <button\n                    key={agent.id}\n                    className={cn(\n                      'flex h-8 w-full cursor-pointer items-center gap-1.5 rounded-[4px] px-2.5 py-1.5 text-left',\n                      transCls,\n                      isActive\n                        ? 'bg-[#F0F6FF] text-[#0265FF]'\n                        : 'text-[#121111] hover:bg-[#EFF0F6]'\n                    )}\n                    onClick={() => handleSelect(agent)}\n                  >\n                    <img\n                      src={agent.icon}\n                      alt={agent.name}\n                      className=\"h-4 w-4 rounded-[4px] object-cover shrink-0\"\n                    />\n                    <span className=\"truncate text-[14px] leading-5\">\n                      {agent.name}\n                    </span>\n                  </button>\n                );\n              })}\n            </div>\n          </div>\n        ))}\n\n        {groups.length === 0 && (\n          <div className=\"flex h-15 items-center justify-center text-[12px] text-[#999999]\">\n            未找到相关智能体助手\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n","import { useCallback, useState, useRef, useEffect } from 'react';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { IconBtn } from './icon-btn';\nimport { LeftArrowIcon, MenuLinesIcon } from './bs-icons';\nimport { AgentSelect } from './agent-select';\nimport type { AgentSelectAgent } from './agent-select';\nimport { Popover, PopoverTrigger, PopoverContent } from './ui/popover';\n\nexport interface AgentScrollSelectorProps {\n  agents: Array<AgentSelectAgent>;\n  activeAgent?: { id: string } | null;\n  onSelect: (agent: AgentSelectAgent) => void | Promise<void>;\n  showSlider?: boolean;\n  className?: string;\n}\n\nexport const AgentScrollSelector = ({\n  agents,\n  activeAgent,\n  onSelect,\n  className,\n  showSlider,\n}: AgentScrollSelectorProps) => {\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(false);\n  const [popoverOpen, setPopoverOpen] = useState(false);\n\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n// 用 callback ref，在 DOM attach/detach 时触发\nconst setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n  if (!node) {\n    setPortalContainer(null);\n    return;\n  }\n\n  const rootNode = node.getRootNode();\n  if (rootNode instanceof ShadowRoot) {\n    const existing = rootNode.querySelector<HTMLElement>('[data-bs-popover-portal]');\n    if (existing) {\n      setPortalContainer(existing);\n      return;\n    }\n    const container = document.createElement('div');\n    container.setAttribute('data-bs-popover-portal', 'true');\n    rootNode.appendChild(container);\n    setPortalContainer(container);\n  } else {\n    setPortalContainer(null);\n  }\n}, []);\n\n  const checkScroll = useCallback(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n    setCanScrollLeft(el.scrollLeft > 0);\n    setCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n  }, []);\n\n  useEffect(() => {\n    checkScroll();\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const observer = new ResizeObserver(checkScroll);\n    observer.observe(el);\n    el.addEventListener('scroll', checkScroll, { passive: true });\n    return () => {\n      observer.disconnect();\n      el.removeEventListener('scroll', checkScroll);\n    };\n  }, [agents, checkScroll]);\n\n  const scroll = useCallback((direction: 'left' | 'right') => {\n    const el = scrollRef.current;\n    if (!el) return;\n    el.scrollBy({\n      left: direction === 'left' ? -150 : 150,\n      behavior: 'smooth',\n    });\n  }, []);\n\n  const handleSelect = useCallback(\n    (agent: AgentSelectAgent) => {\n      onSelect(agent);\n      setPopoverOpen(false);\n    },\n    [onSelect]\n  );\n\n  const slider = (\n    <>\n      <IconBtn\n        rounded\n        disabled={!canScrollLeft}\n        icon={<LeftArrowIcon />}\n        onClick={() => scroll('left')}\n      />\n\n      <div\n        ref={scrollRef}\n        className=\"flex-1 overflow-x-auto scrollbar-hide flex gap-[6px] min-w-0\"\n      >\n        {agents.map((agent) => {\n          const isActive = activeAgent?.id === agent.id;\n          return (\n            <button\n              key={agent.id}\n              type=\"button\"\n              onClick={() => onSelect(agent)}\n              className={cn(\n                'flex items-center gap-[6px] shrink-0 max-w-[240px]',\n                'px-[10px] py-[7px] rounded-[100px]',\n                transCls,\n                isActive\n                  ? 'border border-[#f0f6ff] bg-[#F0F6FF] text-[#0265FF]'\n                  : 'border border-[#E0E0E0] text-[#121111] hover:bg-[#F0F6FF] hover:text-[#0265FF]'\n              )}\n            >\n              <img\n                src={agent.icon}\n                alt={agent.name}\n                className=\"h-4 w-4 rounded-[4px] object-cover shrink-0\"\n              />\n              <span className=\"text-[14px] leading-[normal] truncate\">\n                {agent.name}\n              </span>\n            </button>\n          );\n        })}\n      </div>\n\n      <IconBtn\n        rounded\n        disabled={!canScrollRight}\n        icon={\n          <span className=\"rotate-180 inline-flex\">\n            <LeftArrowIcon />\n          </span>\n        }\n        onClick={() => scroll('right')}\n      />\n    </>\n  );\n\n  return (\n    <div className={cn('flex items-center gap-2.5 w-fit max-w-full min-w-0', className)}>\n      {showSlider ? slider : null}\n      {agents.length > 0 && (\n        <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n          <PopoverTrigger asChild>\n            <button\n              ref={setTriggerRef}\n              type=\"button\"\n              className={cn(\n                'flex items-center gap-[6px] shrink-0 h-[34px]',\n                'px-[10px] py-[5px] rounded-[4px]',\n                'text-[14px] text-[#121111] leading-[normal]',\n                'hover:bg-[#EFF0F6]',\n                {\n                  'bg-[#eff0f6]': popoverOpen,\n                },\n                transCls\n              )}\n            >\n              <MenuLinesIcon />\n              <span>技能</span>\n            </button>\n          </PopoverTrigger>\n          <PopoverContent\n            align=\"start\"\n            sideOffset={4}\n            portalContainer={portalContainer}\n          >\n            <AgentSelect\n              agents={agents}\n              showSearch\n              activeAgent={activeAgent}\n              onSelect={handleSelect}\n            />\n          </PopoverContent>\n        </Popover>\n      )}\n    </div>\n  );\n};\n","import { cn } from '../lib/utils';\n\nexport interface ImgMsgPartProps {\n  url: string;\n  alt?: string;\n  className?: string;\n  /** Size in pixels (width & height), defaults to 102 */\n  size?: number;\n  onClick?: () => void;\n}\n\nexport const ImgMsgPart = ({ url, alt = '', className, size = 102, onClick }: ImgMsgPartProps) => {\n  return (\n    <div\n      className={cn('relative overflow-hidden rounded-[10px] border border-[#e0e0e0] hover:border-[#0265FF]/20 hover:cursor-pointer', onClick && 'cursor-pointer', className)}\n      style={{ width: size, height: size }}\n      onClick={onClick}\n    >\n      <img\n        src={url}\n        alt={alt}\n        className=\"block w-full h-full object-cover rounded-[10px]\"\n        loading=\"lazy\"\n      />\n    </div>\n  );\n};\n","import { ComponentType } from 'react';\nimport { cn } from '../lib/utils';\nimport { ImgMsgPart } from './img-part';\nimport { XlsxIcon, CsvFileIcon, TxtFileIcon, UnknownFileIcon } from './bs-icons';\n\n/** File part from AI message */\nexport interface FilePart {\n  type: 'file';\n  url: string;\n  name?: string;\n  mediaType?: string;\n}\n\nexport interface AttachmentPartProps {\n  part: FilePart;\n  className?: string;\n  /** Size in pixels (width & height), defaults to 102 */\n  size?: number;\n  /** Show only the icon without file name */\n  iconOnly?: boolean;\n  /** Click handler for the attachment */\n  onClick?: (part: FilePart) => void;\n}\n\ntype FileIconComponent = ComponentType;\n\ninterface FileTypeConfig {\n  icon: FileIconComponent;\n  /** Icon original size for scaling */\n  iconSize: number;\n}\n\n/** Map media types to icon configurations */\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n  // Excel files\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {\n    icon: XlsxIcon,\n    iconSize: 52,\n  },\n  'application/vnd.ms-excel': { icon: XlsxIcon, iconSize: 52 },\n\n  // CSV files\n  'text/csv': { icon: CsvFileIcon, iconSize: 16 },\n\n  // Text files\n  'text/plain': { icon: TxtFileIcon, iconSize: 16 },\n  'application/octet-stream': { icon: TxtFileIcon, iconSize: 16 }, // treat as text for ts/js files\n};\n\nconst DEFAULT_FILE_CONFIG: FileTypeConfig = {\n  icon: UnknownFileIcon,\n  iconSize: 16,\n};\n\n/** Check if media type is an image */\nconst isImageType = (mediaType?: string): boolean => {\n  return Boolean(mediaType?.startsWith('image/'));\n};\n\n/** Get file config based on media type and file extension */\nconst getFileConfig = (mediaType?: string, fileName?: string): FileTypeConfig => {\n  // Check media type first\n  if (mediaType && FILE_TYPE_MAP[mediaType]) {\n    return FILE_TYPE_MAP[mediaType];\n  }\n\n  // Fallback to file extension\n  if (fileName) {\n    const ext = fileName.split('.').pop()?.toLowerCase();\n    switch (ext) {\n      case 'xlsx':\n      case 'xls':\n        return FILE_TYPE_MAP['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\n      case 'csv':\n        return FILE_TYPE_MAP['text/csv'];\n      case 'txt':\n      case 'ts':\n      case 'tsx':\n      case 'js':\n      case 'jsx':\n      case 'json':\n      case 'md':\n        return FILE_TYPE_MAP['text/plain'];\n    }\n  }\n\n  return DEFAULT_FILE_CONFIG;\n};\n\n/** Extract display file name from full path */\nconst getDisplayFileName = (name?: string): string | undefined => {\n  if (!name) return undefined;\n  // Get last segment of path\n  const segments = name.split('/');\n  return segments[segments.length - 1];\n};\n\n/** Generic file message part component */\nconst FileMsgPart = ({\n  fileName,\n  icon: Icon,\n  iconSize,\n  className,\n  size = 102,\n}: {\n  fileName?: string;\n  icon: FileIconComponent;\n  iconSize: number;\n  className?: string;\n  size?: number;\n}) => {\n  const scale = size / 102;\n  const scaledIconSize = (52 / 102) * size; // Target icon takes ~51% of container\n  const iconScale = scaledIconSize / iconSize;\n  const hasFileName = Boolean(fileName);\n\n  return (\n    <div\n      className={cn(\n        'relative flex flex-col items-center justify-center rounded-[10px] bg-[#EFF0F6] px-[10px]',\n        hasFileName && 'gap-[6px]',\n        className\n      )}\n      style={{ width: size, height: size }}\n    >\n      <div\n        className=\"shrink-0 flex items-center justify-center\"\n        style={{\n          width: scaledIconSize,\n          height: scaledIconSize,\n        }}\n      >\n        <div\n          style={{\n            transform: iconScale !== 1 ? `scale(${iconScale})` : undefined,\n            transformOrigin: 'center',\n          }}\n        >\n          <Icon />\n        </div>\n      </div>\n      {hasFileName && (\n        <p\n          className=\"block max-w-full shrink-0 truncate text-center text-[14px] leading-normal text-[#030303]\"\n          style={{ fontSize: 14 * scale, maxWidth: '100%', display: 'block' }}\n          title={fileName}\n        >\n          {fileName}\n        </p>\n      )}\n    </div>\n  );\n};\n\nexport const AttachmentPart = ({ part, className, size = 102, iconOnly, onClick }: AttachmentPartProps) => {\n  const { url, name, mediaType } = part;\n  const handleClick = onClick ? () => onClick(part) : undefined;\n\n  // Render image for image types\n  if (isImageType(mediaType)) {\n    return <ImgMsgPart url={url} alt={name} className={className} size={size} onClick={handleClick} />;\n  }\n\n  // Render file icon for other types\n  const { icon, iconSize } = getFileConfig(mediaType, name);\n  const displayName = iconOnly ? undefined : getDisplayFileName(name);\n\n  return (\n    <div onClick={handleClick} className={onClick ? 'cursor-pointer' : undefined}>\n      <FileMsgPart\n        fileName={displayName}\n        icon={icon}\n        iconSize={iconSize}\n        className={className}\n        size={size}\n      />\n    </div>\n  );\n};\n","import { cn } from '../lib/utils';\nimport { AttachmentPart, FilePart } from './attachment-part';\nimport { FileUIPart } from 'ai';\n\nexport interface AttachmentPartGroupProps {\n  parts: FileUIPart[];\n  className?: string;\n  /** Size in pixels for each item, defaults to 102 */\n  size?: number;\n  /** Gap between items in pixels, defaults to 10 */\n  gap?: number;\n  /** Show only icons without file names */\n  iconOnly?: boolean;\n  /** Click handler for individual parts */\n  onPartClick?: (part: FilePart) => void;\n}\n\nexport const AttachmentPartGroup = ({\n  parts,\n  className,\n  size = 100,\n  gap = 10,\n  iconOnly,\n  onPartClick,\n}: AttachmentPartGroupProps) => {\n  if (!parts.length) return null;\n\n  return (\n    <div className={cn('flex flex-wrap content-center items-center', className)} style={{ gap }}>\n      {parts.map((part, index) => (\n        <AttachmentPart key={part.url || index} part={part} size={size} iconOnly={iconOnly} onClick={onPartClick} />\n      ))}\n    </div>\n  );\n};\n","export const BotIcon = () => {\n  return (\n    <svg\n      height=\"16\"\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M8.75 2.79933C9.19835 2.53997 9.5 2.05521 9.5 1.5C9.5 0.671573 8.82843 0 8 0C7.17157 0 6.5 0.671573 6.5 1.5C6.5 2.05521 6.80165 2.53997 7.25 2.79933V5H7C4.027 5 1.55904 7.16229 1.08296 10H0V13H1V14.5V16H2.5H13.5H15V14.5V13H16V10H14.917C14.441 7.16229 11.973 5 9 5H8.75V2.79933ZM7 6.5C4.51472 6.5 2.5 8.51472 2.5 11V14.5H13.5V11C13.5 8.51472 11.4853 6.5 9 6.5H7ZM7.25 11.25C7.25 12.2165 6.4665 13 5.5 13C4.5335 13 3.75 12.2165 3.75 11.25C3.75 10.2835 4.5335 9.5 5.5 9.5C6.4665 9.5 7.25 10.2835 7.25 11.25ZM10.5 13C11.4665 13 12.25 12.2165 12.25 11.25C12.25 10.2835 11.4665 9.5 10.5 9.5C9.5335 9.5 8.75 10.2835 8.75 11.25C8.75 12.2165 9.5335 13 10.5 13Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\n// export const PaperclipIcon = () => {\n//   return (\n//     <svg\n//       data-testid=\"geist-icon\"\n//       height=\"16\"\n//       stroke-linejoin=\"round\"\n//       viewBox=\"0 0 16 16\"\n//       width=\"16\"\n//     >\n//       <path\n//         fill-rule=\"evenodd\"\n//         clip-rule=\"evenodd\"\n//         d=\"M10.8591 1.70735C10.3257 1.70735 9.81417 1.91925 9.437 2.29643L3.19455 8.53886C2.56246 9.17095 2.20735 10.0282 2.20735 10.9222C2.20735 11.8161 2.56246 12.6734 3.19455 13.3055C3.82665 13.9376 4.68395 14.2927 5.57786 14.2927C6.47178 14.2927 7.32908 13.9376 7.96117 13.3055L14.2036 7.06304L14.7038 6.56287L15.7041 7.56321L15.204 8.06337L8.96151 14.3058C8.06411 15.2032 6.84698 15.7074 5.57786 15.7074C4.30875 15.7074 3.09162 15.2032 2.19422 14.3058C1.29682 13.4084 0.792664 12.1913 0.792664 10.9222C0.792664 9.65305 1.29682 8.43592 2.19422 7.53852L8.43666 1.29609C9.07914 0.653606 9.95054 0.292664 10.8591 0.292664C11.7678 0.292664 12.6392 0.653606 13.2816 1.29609C13.9241 1.93857 14.2851 2.80997 14.2851 3.71857C14.2851 4.62718 13.9241 5.49858 13.2816 6.14106L13.2814 6.14133L7.0324 12.3835C7.03231 12.3836 7.03222 12.3837 7.03213 12.3838C6.64459 12.7712 6.11905 12.9888 5.57107 12.9888C5.02297 12.9888 4.49731 12.7711 4.10974 12.3835C3.72217 11.9959 3.50444 11.4703 3.50444 10.9222C3.50444 10.3741 3.72217 9.8484 4.10974 9.46084L4.11004 9.46054L9.877 3.70039L10.3775 3.20051L11.3772 4.20144L10.8767 4.70131L5.11008 10.4612C5.11005 10.4612 5.11003 10.4612 5.11 10.4613C4.98779 10.5835 4.91913 10.7493 4.91913 10.9222C4.91913 11.0951 4.98782 11.2609 5.11008 11.3832C5.23234 11.5054 5.39817 11.5741 5.57107 11.5741C5.74398 11.5741 5.9098 11.5054 6.03206 11.3832L6.03233 11.3829L12.2813 5.14072C12.2814 5.14063 12.2815 5.14054 12.2816 5.14045C12.6586 4.7633 12.8704 4.25185 12.8704 3.71857C12.8704 3.18516 12.6585 2.6736 12.2813 2.29643C11.9041 1.91925 11.3926 1.70735 10.8591 1.70735Z\"\n//         fill=\"currentColor\"\n//       ></path>\n//     </svg>\n//   );\n// };\n\nexport const BotAvatarIcon = () => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      aria-hidden=\"true\"\n      role=\"img\"\n      data-testid=\"geist-icon\"\n      height=\"16\"\n      stroke-linejoin=\"round\"\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M8.75 2.79933C9.19835 2.53997 9.5 2.05521 9.5 1.5C9.5 0.671573 8.82843 0 8 0C7.17157 0 6.5 0.671573 6.5 1.5C6.5 2.05521 6.80165 2.53997 7.25 2.79933V5H7C4.027 5 1.55904 7.16229 1.08296 10H0V13H1V14.5V16H2.5H13.5H15V14.5V13H16V10H14.917C14.441 7.16229 11.973 5 9 5H8.75V2.79933ZM7 6.5C4.51472 6.5 2.5 8.51472 2.5 11V14.5H13.5V11C13.5 8.51472 11.4853 6.5 9 6.5H7ZM7.25 11.25C7.25 12.2165 6.4665 13 5.5 13C4.5335 13 3.75 12.2165 3.75 11.25C3.75 10.2835 4.5335 9.5 5.5 9.5C6.4665 9.5 7.25 10.2835 7.25 11.25ZM10.5 13C11.4665 13 12.25 12.2165 12.25 11.25C12.25 10.2835 11.4665 9.5 10.5 9.5C9.5335 9.5 8.75 10.2835 8.75 11.25C8.75 12.2165 9.5335 13 10.5 13Z\"\n        fill=\"currentColor\"\n      ></path>\n    </svg>\n  );\n};\n\nexport const UserIcon = () => {\n  return (\n    <svg\n      data-testid=\"geist-icon\"\n      height=\"16\"\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M7.75 0C5.95507 0 4.5 1.45507 4.5 3.25V3.75C4.5 5.54493 5.95507 7 7.75 7H8.25C10.0449 7 11.5 5.54493 11.5 3.75V3.25C11.5 1.45507 10.0449 0 8.25 0H7.75ZM6 3.25C6 2.2835 6.7835 1.5 7.75 1.5H8.25C9.2165 1.5 10 2.2835 10 3.25V3.75C10 4.7165 9.2165 5.5 8.25 5.5H7.75C6.7835 5.5 6 4.7165 6 3.75V3.25ZM2.5 14.5V13.1709C3.31958 11.5377 4.99308 10.5 6.82945 10.5H9.17055C11.0069 10.5 12.6804 11.5377 13.5 13.1709V14.5H2.5ZM6.82945 9C4.35483 9 2.10604 10.4388 1.06903 12.6857L1 12.8353V13V15.25V16H1.75H14.25H15V15.25V13V12.8353L14.931 12.6857C13.894 10.4388 11.6452 9 9.17055 9H6.82945Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const AttachmentIcon = () => {\n  return (\n    <svg\n      height=\"16\"\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M14.5 6.5V13.5C14.5 14.8807 13.3807 16 12 16H4C2.61929 16 1.5 14.8807 1.5 13.5V1.5V0H3H8H9.08579C9.351 0 9.60536 0.105357 9.79289 0.292893L14.2071 4.70711C14.3946 4.89464 14.5 5.149 14.5 5.41421V6.5ZM13 6.5V13.5C13 14.0523 12.5523 14.5 12 14.5H4C3.44772 14.5 3 14.0523 3 13.5V1.5H8V5V6.5H9.5H13ZM9.5 2.12132V5H12.3787L9.5 2.12132Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const VercelIcon = ({ size = 17 }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path clipRule=\"evenodd\" d=\"M8 1L16 15H0L8 1Z\" fill=\"currentColor\" fillRule=\"evenodd\" />\n    </svg>\n  );\n};\n\nexport const GitIcon = () => {\n  return (\n    <svg\n      height=\"16\"\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <g clipPath=\"url(#clip0_872_3147)\">\n        <path\n          clipRule=\"evenodd\"\n          d=\"M8 0C3.58 0 0 3.57879 0 7.99729C0 11.5361 2.29 14.5251 5.47 15.5847C5.87 15.6547 6.02 15.4148 6.02 15.2049C6.02 15.0149 6.01 14.3851 6.01 13.7154C4 14.0852 3.48 13.2255 3.32 12.7757C3.23 12.5458 2.84 11.836 2.5 11.6461C2.22 11.4961 1.82 11.1262 2.49 11.1162C3.12 11.1062 3.57 11.696 3.72 11.936C4.44 13.1455 5.59 12.8057 6.05 12.5957C6.12 12.0759 6.33 11.726 6.56 11.5261C4.78 11.3262 2.92 10.6364 2.92 7.57743C2.92 6.70773 3.23 5.98797 3.74 5.42816C3.66 5.22823 3.38 4.40851 3.82 3.30888C3.82 3.30888 4.49 3.09895 6.02 4.1286C6.66 3.94866 7.34 3.85869 8.02 3.85869C8.7 3.85869 9.38 3.94866 10.02 4.1286C11.55 3.08895 12.22 3.30888 12.22 3.30888C12.66 4.40851 12.38 5.22823 12.3 5.42816C12.81 5.98797 13.12 6.69773 13.12 7.57743C13.12 10.6464 11.25 11.3262 9.47 11.5261C9.76 11.776 10.01 12.2558 10.01 13.0056C10.01 14.0752 10 14.9349 10 15.2049C10 15.4148 10.15 15.6647 10.55 15.5847C12.1381 15.0488 13.5182 14.0284 14.4958 12.6673C15.4735 11.3062 15.9996 9.67293 16 7.99729C16 3.57879 12.42 0 8 0Z\"\n          fill=\"currentColor\"\n          fillRule=\"evenodd\"\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_872_3147\">\n          <rect fill=\"white\" height=\"16\" width=\"16\" />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport const BoxIcon = ({ size = 16 }: { size: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M8 0.154663L8.34601 0.334591L14.596 3.58459L15 3.79466V4.25V11.75V12.2053L14.596 12.4154L8.34601 15.6654L8 15.8453L7.65399 15.6654L1.40399 12.4154L1 12.2053V11.75V4.25V3.79466L1.40399 3.58459L7.65399 0.334591L8 0.154663ZM2.5 11.2947V5.44058L7.25 7.81559V13.7647L2.5 11.2947ZM8.75 13.7647L13.5 11.2947V5.44056L8.75 7.81556V13.7647ZM8 1.84534L12.5766 4.22519L7.99998 6.51352L3.42335 4.2252L8 1.84534Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const HomeIcon = ({ size = 16 }: { size: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M12.5 6.56062L8.00001 2.06062L3.50001 6.56062V13.5L6.00001 13.5V11C6.00001 9.89539 6.89544 8.99996 8.00001 8.99996C9.10458 8.99996 10 9.89539 10 11V13.5L12.5 13.5V6.56062ZM13.78 5.71933L8.70711 0.646409C8.31659 0.255886 7.68342 0.255883 7.2929 0.646409L2.21987 5.71944C2.21974 5.71957 2.21961 5.7197 2.21949 5.71982L0.469676 7.46963L-0.0606537 7.99996L1.00001 9.06062L1.53034 8.53029L2.00001 8.06062V14.25V15H2.75001L6.00001 15H7.50001H8.50001H10L13.25 15H14V14.25V8.06062L14.4697 8.53029L15 9.06062L16.0607 7.99996L15.5303 7.46963L13.7806 5.71993C13.7804 5.71973 13.7802 5.71953 13.78 5.71933ZM8.50001 11V13.5H7.50001V11C7.50001 10.7238 7.72386 10.5 8.00001 10.5C8.27615 10.5 8.50001 10.7238 8.50001 11Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const GPSIcon = ({ size = 16 }: { size: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        d=\"M1 6L15 1L10 15L7.65955 8.91482C7.55797 8.65073 7.34927 8.44203 7.08518 8.34045L1 6Z\"\n        fill=\"transparent\"\n        stroke=\"currentColor\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"bevel\"\n        strokeWidth=\"1.5\"\n      />\n    </svg>\n  );\n};\n\nexport const InvoiceIcon = ({ size = 16 }: { size: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M13 15.1L12 14.5L10.1524 15.8857C10.0621 15.9534 9.93791 15.9534 9.8476 15.8857L8 14.5L6.14377 15.8922C6.05761 15.9568 5.94008 15.9601 5.85047 15.9003L3.75 14.5L3 15L2.83257 15.1116L1.83633 15.7758L1.68656 15.8756C1.60682 15.9288 1.5 15.8716 1.5 15.7758V15.5958V14.3985V14.1972V1.5V0H3H8H9.08579C9.351 0 9.60536 0.105357 9.79289 0.292893L14.2071 4.70711C14.3946 4.89464 14.5 5.149 14.5 5.41421V6.5V14.2507V14.411V15.5881V15.7881C14.5 15.8813 14.3982 15.9389 14.3183 15.891L14.1468 15.7881L13.1375 15.1825L13 15.1ZM12.3787 5L9.5 2.12132V5H12.3787ZM8 1.5V5V6.5H9.5H13V13.3507L12.7717 13.2138L11.9069 12.6948L11.1 13.3L10 14.125L8.9 13.3L8 12.625L7.1 13.3L5.94902 14.1632L4.58205 13.2519L3.75 12.6972L3 13.1972V1.5H8Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const LogoOpenAI = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        d=\"M14.9449 6.54871C15.3128 5.45919 15.1861 4.26567 14.5978 3.27464C13.7131 1.75461 11.9345 0.972595 10.1974 1.3406C9.42464 0.481584 8.3144 -0.00692594 7.15045 7.42132e-05C5.37487 -0.00392587 3.79946 1.1241 3.2532 2.79113C2.11256 3.02164 1.12799 3.72615 0.551837 4.72468C-0.339497 6.24071 -0.1363 8.15175 1.05451 9.45178C0.686626 10.5413 0.813308 11.7348 1.40162 12.7258C2.28637 14.2459 4.06498 15.0279 5.80204 14.6599C6.5743 15.5189 7.68504 16.0074 8.849 15.9999C10.6256 16.0044 12.2015 14.8754 12.7478 13.2069C13.8884 12.9764 14.873 12.2718 15.4491 11.2733C16.3394 9.75728 16.1357 7.84774 14.9454 6.54771L14.9449 6.54871ZM8.85001 14.9544C8.13907 14.9554 7.45043 14.7099 6.90468 14.2604C6.92951 14.2474 6.97259 14.2239 7.00046 14.2069L10.2293 12.3668C10.3945 12.2743 10.4959 12.1008 10.4949 11.9133V7.42173L11.8595 8.19925C11.8742 8.20625 11.8838 8.22025 11.8858 8.23625V11.9558C11.8838 13.6099 10.5263 14.9509 8.85001 14.9544ZM2.32133 12.2028C1.9651 11.5958 1.8369 10.8843 1.95902 10.1938C1.98284 10.2078 2.02489 10.2333 2.05479 10.2503L5.28366 12.0903C5.44733 12.1848 5.65003 12.1848 5.81421 12.0903L9.75604 9.84429V11.3993C9.75705 11.4153 9.74945 11.4308 9.73678 11.4408L6.47295 13.3004C5.01915 14.1264 3.1625 13.6354 2.32184 12.2028H2.32133ZM1.47155 5.24819C1.82626 4.64017 2.38619 4.17516 3.05305 3.93366C3.05305 3.96116 3.05152 4.00966 3.05152 4.04366V7.72424C3.05051 7.91124 3.15186 8.08475 3.31654 8.17725L7.25838 10.4228L5.89376 11.2003C5.88008 11.2093 5.86285 11.2108 5.84765 11.2043L2.58331 9.34327C1.13255 8.51426 0.63494 6.68272 1.47104 5.24869L1.47155 5.24819ZM12.6834 7.82274L8.74157 5.57669L10.1062 4.79968C10.1199 4.79068 10.1371 4.78918 10.1523 4.79568L13.4166 6.65522C14.8699 7.48373 15.3681 9.31827 14.5284 10.7523C14.1732 11.3593 13.6138 11.8243 12.9474 12.0663V8.27575C12.9489 8.08875 12.8481 7.91574 12.6839 7.82274H12.6834ZM14.0414 5.8057C14.0176 5.7912 13.9756 5.7662 13.9457 5.7492L10.7168 3.90916C10.5531 3.81466 10.3504 3.81466 10.1863 3.90916L6.24442 6.15521V4.60017C6.2434 4.58417 6.251 4.56867 6.26367 4.55867L9.52751 2.70063C10.9813 1.87311 12.84 2.36563 13.6781 3.80066C14.0323 4.40667 14.1605 5.11618 14.0404 5.8057H14.0414ZM5.50257 8.57726L4.13744 7.79974C4.12275 7.79274 4.11312 7.77874 4.11109 7.76274V4.04316C4.11211 2.38713 5.47368 1.0451 7.15197 1.0461C7.86189 1.0461 8.54902 1.2921 9.09476 1.74011C9.06993 1.75311 9.02737 1.77661 8.99899 1.79361L5.77012 3.63365C5.60493 3.72615 5.50358 3.89916 5.50459 4.08666L5.50257 8.57626V8.57726ZM6.24391 7.00022L7.99972 5.9997L9.75553 6.99972V9.00027L7.99972 10.0003L6.24391 9.00027V7.00022Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nexport const LogoGoogle = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      data-testid=\"geist-icon\"\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        d=\"M8.15991 6.54543V9.64362H12.4654C12.2763 10.64 11.709 11.4837 10.8581 12.0509L13.4544 14.0655C14.9671 12.6692 15.8399 10.6182 15.8399 8.18188C15.8399 7.61461 15.789 7.06911 15.6944 6.54552L8.15991 6.54543Z\"\n        fill=\"#4285F4\"\n      />\n      <path\n        d=\"M3.6764 9.52268L3.09083 9.97093L1.01807 11.5855C2.33443 14.1963 5.03241 16 8.15966 16C10.3196 16 12.1305 15.2873 13.4542 14.0655L10.8578 12.0509C10.1451 12.5309 9.23598 12.8219 8.15966 12.8219C6.07967 12.8219 4.31245 11.4182 3.67967 9.5273L3.6764 9.52268Z\"\n        fill=\"#34A853\"\n      />\n      <path\n        d=\"M1.01803 4.41455C0.472607 5.49087 0.159912 6.70543 0.159912 7.99995C0.159912 9.29447 0.472607 10.509 1.01803 11.5854C1.01803 11.5926 3.6799 9.51991 3.6799 9.51991C3.5199 9.03991 3.42532 8.53085 3.42532 7.99987C3.42532 7.46889 3.5199 6.95983 3.6799 6.47983L1.01803 4.41455Z\"\n        fill=\"#FBBC05\"\n      />\n      <path\n        d=\"M8.15982 3.18545C9.33802 3.18545 10.3853 3.59271 11.2216 4.37818L13.5125 2.0873C12.1234 0.792777 10.3199 0 8.15982 0C5.03257 0 2.33443 1.79636 1.01807 4.41455L3.67985 6.48001C4.31254 4.58908 6.07983 3.18545 8.15982 3.18545Z\"\n        fill=\"#EA4335\"\n      />\n    </svg>\n  );\n};\n\nexport const LogoAnthropic = () => {\n  return (\n    <svg\n      height=\"18px\"\n      style={{ color: 'currentcolor', fill: 'currentcolor' }}\n      viewBox=\"0 0 92.2 65\"\n      width=\"18px\"\n      x=\"0px\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      y=\"0px\"\n    >\n      <path\n        d=\"M66.5,0H52.4l25.7,65h14.1L66.5,0z M25.7,0L0,65h14.4l5.3-13.6h26.9L51.8,65h14.4L40.5,0C40.5,0,25.7,0,25.7,0z\n\t\tM24.3,39.3l8.8-22.8l8.8,22.8H24.3z\"\n      />\n    </svg>\n  );\n};\n\nexport const RouteIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M7.53033 0.719661L7 0.189331L5.93934 1.24999L6.46967 1.78032L6.68934 1.99999H3.375C1.51104 1.99999 0 3.51103 0 5.37499C0 7.23895 1.51104 8.74999 3.375 8.74999H12.625C13.6605 8.74999 14.5 9.58946 14.5 10.625C14.5 11.6605 13.6605 12.5 12.625 12.5H4.88555C4.56698 11.4857 3.61941 10.75 2.5 10.75C1.11929 10.75 0 11.8693 0 13.25C0 14.6307 1.11929 15.75 2.5 15.75C3.61941 15.75 4.56698 15.0143 4.88555 14H12.625C14.489 14 16 12.489 16 10.625C16 8.76103 14.489 7.24999 12.625 7.24999H3.375C2.33947 7.24999 1.5 6.41052 1.5 5.37499C1.5 4.33946 2.33947 3.49999 3.375 3.49999H6.68934L6.46967 3.71966L5.93934 4.24999L7 5.31065L7.53033 4.78032L8.85355 3.4571C9.24408 3.06657 9.24408 2.43341 8.85355 2.04288L7.53033 0.719661ZM2.5 14.25C3.05228 14.25 3.5 13.8023 3.5 13.25C3.5 12.6977 3.05228 12.25 2.5 12.25C1.94772 12.25 1.5 12.6977 1.5 13.25C1.5 13.8023 1.94772 14.25 2.5 14.25ZM14.5 2.74999C14.5 3.30228 14.0523 3.74999 13.5 3.74999C12.9477 3.74999 12.5 3.30228 12.5 2.74999C12.5 2.19771 12.9477 1.74999 13.5 1.74999C14.0523 1.74999 14.5 2.19771 14.5 2.74999ZM16 2.74999C16 4.1307 14.8807 5.24999 13.5 5.24999C12.1193 5.24999 11 4.1307 11 2.74999C11 1.36928 12.1193 0.249991 13.5 0.249991C14.8807 0.249991 16 1.36928 16 2.74999Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const FileIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M14.5 13.5V6.5V5.41421C14.5 5.149 14.3946 4.89464 14.2071 4.70711L9.79289 0.292893C9.60536 0.105357 9.351 0 9.08579 0H8H3H1.5V1.5V13.5C1.5 14.8807 2.61929 16 4 16H12C13.3807 16 14.5 14.8807 14.5 13.5ZM13 13.5V6.5H9.5H8V5V1.5H3V13.5C3 14.0523 3.44772 14.5 4 14.5H12C12.5523 14.5 13 14.0523 13 13.5ZM9.5 5V2.12132L12.3787 5H9.5ZM5.13 5.00062H4.505V6.25062H5.13H6H6.625V5.00062H6H5.13ZM4.505 8H5.13H11H11.625V9.25H11H5.13H4.505V8ZM5.13 11H4.505V12.25H5.13H11H11.625V11H11H5.13Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const LoaderIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <g clipPath=\"url(#clip0_2393_1490)\">\n        <path d=\"M8 0V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n        <path d=\"M8 16V12\" opacity=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n        <path\n          d=\"M3.29773 1.52783L5.64887 4.7639\"\n          opacity=\"0.9\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M12.7023 1.52783L10.3511 4.7639\"\n          opacity=\"0.1\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M12.7023 14.472L10.3511 11.236\"\n          opacity=\"0.4\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M3.29773 14.472L5.64887 11.236\"\n          opacity=\"0.6\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M15.6085 5.52783L11.8043 6.7639\"\n          opacity=\"0.2\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M0.391602 10.472L4.19583 9.23598\"\n          opacity=\"0.7\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M15.6085 10.4722L11.8043 9.2361\"\n          opacity=\"0.3\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n        <path\n          d=\"M0.391602 5.52783L4.19583 6.7639\"\n          opacity=\"0.8\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_2393_1490\">\n          <rect fill=\"white\" height=\"16\" width=\"16\" />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport const UploadIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      data-testid=\"geist-icon\"\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M1.5 4.875C1.5 3.01104 3.01104 1.5 4.875 1.5C6.20018 1.5 7.34838 2.26364 7.901 3.37829C8.1902 3.96162 8.79547 4.5 9.60112 4.5H12.25C13.4926 4.5 14.5 5.50736 14.5 6.75C14.5 7.42688 14.202 8.03329 13.7276 8.44689L13.1622 8.93972L14.1479 10.0704L14.7133 9.57758C15.5006 8.89123 16 7.8785 16 6.75C16 4.67893 14.3211 3 12.25 3H9.60112C9.51183 3 9.35322 2.93049 9.2449 2.71201C8.44888 1.1064 6.79184 0 4.875 0C2.18261 0 0 2.18261 0 4.875V6.40385C0 7.69502 0.598275 8.84699 1.52982 9.59656L2.11415 10.0667L3.0545 8.89808L2.47018 8.42791C1.87727 7.95083 1.5 7.22166 1.5 6.40385V4.875ZM7.29289 7.39645C7.68342 7.00592 8.31658 7.00592 8.70711 7.39645L11.7803 10.4697L12.3107 11L11.25 12.0607L10.7197 11.5303L8.75 9.56066V15.25V16H7.25V15.25V9.56066L5.28033 11.5303L4.75 12.0607L3.68934 11L4.21967 10.4697L7.29289 7.39645Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const MenuIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M1 2H1.75H14.25H15V3.5H14.25H1.75H1V2ZM1 12.5H1.75H14.25H15V14H14.25H1.75H1V12.5ZM1.75 7.25H1V8.75H1.75H14.25H15V7.25H14.25H1.75Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const PencilEditIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M11.75 0.189331L12.2803 0.719661L15.2803 3.71966L15.8107 4.24999L15.2803 4.78032L5.15901 14.9016C4.45575 15.6049 3.50192 16 2.50736 16H0.75H0V15.25V13.4926C0 12.4981 0.395088 11.5442 1.09835 10.841L11.2197 0.719661L11.75 0.189331ZM11.75 2.31065L9.81066 4.24999L11.75 6.18933L13.6893 4.24999L11.75 2.31065ZM2.15901 11.9016L8.75 5.31065L10.6893 7.24999L4.09835 13.841C3.67639 14.2629 3.1041 14.5 2.50736 14.5H1.5V13.4926C1.5 12.8959 1.73705 12.3236 2.15901 11.9016ZM9 16H16V14.5H9V16Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const CheckedSquare = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M15 16H1C0.447715 16 0 15.5523 0 15V1C0 0.447715 0.447716 0 1 0L15 8.17435e-06C15.5523 8.47532e-06 16 0.447724 16 1.00001V15C16 15.5523 15.5523 16 15 16ZM11.7803 6.28033L12.3107 5.75L11.25 4.68934L10.7197 5.21967L6.5 9.43935L5.28033 8.21967L4.75001 7.68934L3.68934 8.74999L4.21967 9.28033L5.96967 11.0303C6.11032 11.171 6.30109 11.25 6.5 11.25C6.69891 11.25 6.88968 11.171 7.03033 11.0303L11.7803 6.28033Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const UncheckedSquare = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <rect\n        fill=\"none\"\n        height=\"14\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        width=\"14\"\n        x=\"1\"\n        y=\"1\"\n      />\n    </svg>\n  );\n};\n\nexport const MoreIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M8 4C7.17157 4 6.5 3.32843 6.5 2.5C6.5 1.67157 7.17157 1 8 1C8.82843 1 9.5 1.67157 9.5 2.5C9.5 3.32843 8.82843 4 8 4ZM8 9.5C7.17157 9.5 6.5 8.82843 6.5 8C6.5 7.17157 7.17157 6.5 8 6.5C8.82843 6.5 9.5 7.17157 9.5 8C9.5 8.82843 8.82843 9.5 8 9.5ZM6.5 13.5C6.5 14.3284 7.17157 15 8 15C8.82843 15 9.5 14.3284 9.5 13.5C9.5 12.6716 8.82843 12 8 12C7.17157 12 6.5 12.6716 6.5 13.5Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const TrashIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M6.75 2.75C6.75 2.05964 7.30964 1.5 8 1.5C8.69036 1.5 9.25 2.05964 9.25 2.75V3H6.75V2.75ZM5.25 3V2.75C5.25 1.23122 6.48122 0 8 0C9.51878 0 10.75 1.23122 10.75 2.75V3H12.9201H14.25H15V4.5H14.25H13.8846L13.1776 13.6917C13.0774 14.9942 11.9913 16 10.6849 16H5.31508C4.00874 16 2.92263 14.9942 2.82244 13.6917L2.11538 4.5H1.75H1V3H1.75H3.07988H5.25ZM4.31802 13.5767L3.61982 4.5H12.3802L11.682 13.5767C11.6419 14.0977 11.2075 14.5 10.6849 14.5H5.31508C4.79254 14.5 4.3581 14.0977 4.31802 13.5767Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const InfoIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM6.25002 7H7.00002H7.75C8.30229 7 8.75 7.44772 8.75 8V11.5V12.25H7.25V11.5V8.5H7.00002H6.25002V7ZM8 6C8.55229 6 9 5.55228 9 5C9 4.44772 8.55229 4 8 4C7.44772 4 7 4.44772 7 5C7 5.55228 7.44772 6 8 6Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const ArrowUpIcon = ({\n  size = 16,\n  ...props\n}: { size?: number } & React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor', ...props.style }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n      {...props}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M8.70711 1.39644C8.31659 1.00592 7.68342 1.00592 7.2929 1.39644L2.21968 6.46966L1.68935 6.99999L2.75001 8.06065L3.28034 7.53032L7.25001 3.56065V14.25V15H8.75001V14.25V3.56065L12.7197 7.53032L13.25 8.06065L14.3107 6.99999L13.7803 6.46966L8.70711 1.39644Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const StopIcon = ({\n  size = 16,\n  ...props\n}: { size?: number } & React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      height={size}\n      style={{ color: 'currentcolor', ...props.style }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n      {...props}\n    >\n      <path clipRule=\"evenodd\" d=\"M3 3H13V13H3V3Z\" fill=\"currentColor\" fillRule=\"evenodd\" />\n    </svg>\n  );\n};\n\nexport const PaperclipIcon = ({\n  size = 16,\n  ...props\n}: { size?: number } & React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      className=\"-rotate-45\"\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor', ...props.style }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n      {...props}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M10.8591 1.70735C10.3257 1.70735 9.81417 1.91925 9.437 2.29643L3.19455 8.53886C2.56246 9.17095 2.20735 10.0282 2.20735 10.9222C2.20735 11.8161 2.56246 12.6734 3.19455 13.3055C3.82665 13.9376 4.68395 14.2927 5.57786 14.2927C6.47178 14.2927 7.32908 13.9376 7.96117 13.3055L14.2036 7.06304L14.7038 6.56287L15.7041 7.56321L15.204 8.06337L8.96151 14.3058C8.06411 15.2032 6.84698 15.7074 5.57786 15.7074C4.30875 15.7074 3.09162 15.2032 2.19422 14.3058C1.29682 13.4084 0.792664 12.1913 0.792664 10.9222C0.792664 9.65305 1.29682 8.43592 2.19422 7.53852L8.43666 1.29609C9.07914 0.653606 9.95054 0.292664 10.8591 0.292664C11.7678 0.292664 12.6392 0.653606 13.2816 1.29609C13.9241 1.93857 14.2851 2.80997 14.2851 3.71857C14.2851 4.62718 13.9241 5.49858 13.2816 6.14106L13.2814 6.14133L7.0324 12.3835C7.03231 12.3836 7.03222 12.3837 7.03213 12.3838C6.64459 12.7712 6.11905 12.9888 5.57107 12.9888C5.02297 12.9888 4.49731 12.7711 4.10974 12.3835C3.72217 11.9959 3.50444 11.4703 3.50444 10.9222C3.50444 10.3741 3.72217 9.8484 4.10974 9.46084L4.11004 9.46054L9.877 3.70039L10.3775 3.20051L11.3772 4.20144L10.8767 4.70131L5.11008 10.4612C5.11005 10.4612 5.11003 10.4612 5.11 10.4613C4.98779 10.5835 4.91913 10.7493 4.91913 10.9222C4.91913 11.0951 4.98782 11.2609 5.11008 11.3832C5.23234 11.5054 5.39817 11.5741 5.57107 11.5741C5.74398 11.5741 5.9098 11.5054 6.03206 11.3832L6.03233 11.3829L12.2813 5.14072C12.2814 5.14063 12.2815 5.14054 12.2816 5.14045C12.6586 4.7633 12.8704 4.25185 12.8704 3.71857C12.8704 3.18516 12.6585 2.6736 12.2813 2.29643C11.9041 1.91925 11.3926 1.70735 10.8591 1.70735Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const MoreHorizontalIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M4 8C4 8.82843 3.32843 9.5 2.5 9.5C1.67157 9.5 1 8.82843 1 8C1 7.17157 1.67157 6.5 2.5 6.5C3.32843 6.5 4 7.17157 4 8ZM9.5 8C9.5 8.82843 8.82843 9.5 8 9.5C7.17157 9.5 6.5 8.82843 6.5 8C6.5 7.17157 7.17157 6.5 8 6.5C8.82843 6.5 9.5 7.17157 9.5 8ZM13.5 9.5C14.3284 9.5 15 8.82843 15 8C15 7.17157 14.3284 6.5 13.5 6.5C12.6716 6.5 12 7.17157 12 8C12 8.82843 12.6716 9.5 13.5 9.5Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const MessageIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M2.8914 10.4028L2.98327 10.6318C3.22909 11.2445 3.5 12.1045 3.5 13C3.5 13.3588 3.4564 13.7131 3.38773 14.0495C3.69637 13.9446 4.01409 13.8159 4.32918 13.6584C4.87888 13.3835 5.33961 13.0611 5.70994 12.7521L6.22471 12.3226L6.88809 12.4196C7.24851 12.4724 7.61994 12.5 8 12.5C11.7843 12.5 14.5 9.85569 14.5 7C14.5 4.14431 11.7843 1.5 8 1.5C4.21574 1.5 1.5 4.14431 1.5 7C1.5 8.18175 1.94229 9.29322 2.73103 10.2153L2.8914 10.4028ZM2.8135 15.7653C1.76096 16 1 16 1 16C1 16 1.43322 15.3097 1.72937 14.4367C1.88317 13.9834 2 13.4808 2 13C2 12.3826 1.80733 11.7292 1.59114 11.1903C0.591845 10.0221 0 8.57152 0 7C0 3.13401 3.58172 0 8 0C12.4183 0 16 3.13401 16 7C16 10.866 12.4183 14 8 14C7.54721 14 7.10321 13.9671 6.67094 13.9038C6.22579 14.2753 5.66881 14.6656 5 15C4.23366 15.3832 3.46733 15.6195 2.8135 15.7653Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const CrossIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const CrossSmallIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M9.96966 11.0303L10.5 11.5607L11.5607 10.5L11.0303 9.96966L9.06065 7.99999L11.0303 6.03032L11.5607 5.49999L10.5 4.43933L9.96966 4.96966L7.99999 6.93933L6.03032 4.96966L5.49999 4.43933L4.43933 5.49999L4.96966 6.03032L6.93933 7.99999L4.96966 9.96966L4.43933 10.5L5.49999 11.5607L6.03032 11.0303L7.99999 9.06065L9.96966 11.0303Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const UndoIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M13.5 8C13.5 4.96643 11.0257 2.5 7.96452 2.5C5.42843 2.5 3.29365 4.19393 2.63724 6.5H5.25H6V8H5.25H0.75C0.335787 8 0 7.66421 0 7.25V2.75V2H1.5V2.75V5.23347C2.57851 2.74164 5.06835 1 7.96452 1C11.8461 1 15 4.13001 15 8C15 11.87 11.8461 15 7.96452 15C5.62368 15 3.54872 13.8617 2.27046 12.1122L1.828 11.5066L3.03915 10.6217L3.48161 11.2273C4.48831 12.6051 6.12055 13.5 7.96452 13.5C11.0257 13.5 13.5 11.0336 13.5 8Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const RedoIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M2.5 8C2.5 4.96643 4.97431 2.5 8.03548 2.5C10.5716 2.5 12.7064 4.19393 13.3628 6.5H10.75H10V8H10.75H15.25C15.6642 8 16 7.66421 16 7.25V2.75V2H14.5V2.75V5.23347C13.4215 2.74164 10.9316 1 8.03548 1C4.1539 1 1 4.13001 1 8C1 11.87 4.1539 15 8.03548 15C10.3763 15 12.4513 13.8617 13.7295 12.1122L14.172 11.5066L12.9609 10.6217L12.5184 11.2273C11.5117 12.6051 9.87945 13.5 8.03548 13.5C4.97431 13.5 2.5 11.0336 2.5 8Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const DeltaIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M2.67705 15H1L1.75 13.5L6.16147 4.67705L6.15836 4.67082L6.16667 4.66667L7.16147 2.67705L8 1L8.83853 2.67705L14.25 13.5L15 15H13.3229H2.67705ZM7 6.3541L10.5729 13.5H3.42705L7 6.3541Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const CpuIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    fill=\"none\"\n    height={size}\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 24 24\"\n    width={size}\n  >\n    <path\n      d=\"M4 12C4 8.22876 4 6.34315 5.17157 5.17157C6.34315 4 8.22876 4 12 4C15.7712 4 17.6569 4 18.8284 5.17157C20 6.34315 20 8.22876 20 12C20 15.7712 20 17.6569 18.8284 18.8284C17.6569 20 15.7712 20 12 20C8.22876 20 6.34315 20 5.17157 18.8284C4 17.6569 4 15.7712 4 12Z\"\n      strokeLinejoin=\"round\"\n    />\n    <path d=\"M9.5 2V4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M14.5 2V4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M9.5 20V22\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M14.5 20V22\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M13 9L9 13\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M15 13L13 15\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M22 14.5L20 14.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M4 9.5L2 9.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M4 14.5L2 14.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M22 9.5L20 9.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nexport const PenIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M8.75 0.189331L9.28033 0.719661L15.2803 6.71966L15.8107 7.24999L15.2803 7.78032L13.7374 9.32322C13.1911 9.8696 12.3733 9.97916 11.718 9.65188L9.54863 13.5568C8.71088 15.0648 7.12143 16 5.39639 16H0.75H0V15.25V10.6036C0 8.87856 0.935237 7.28911 2.4432 6.45136L6.34811 4.28196C6.02084 3.62674 6.13039 2.80894 6.67678 2.26255L8.21967 0.719661L8.75 0.189331ZM7.3697 5.43035L10.5696 8.63029L8.2374 12.8283C7.6642 13.8601 6.57668 14.5 5.39639 14.5H2.56066L5.53033 11.5303L4.46967 10.4697L1.5 13.4393V10.6036C1.5 9.42331 2.1399 8.33579 3.17166 7.76259L7.3697 5.43035ZM12.6768 8.26256C12.5791 8.36019 12.4209 8.36019 12.3232 8.26255L12.0303 7.96966L8.03033 3.96966L7.73744 3.67677C7.63981 3.57914 7.63981 3.42085 7.73744 3.32321L8.75 2.31065L13.6893 7.24999L12.6768 8.26256Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const SummarizeIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M1.75 12H1V10.5H1.75H5.25H6V12H5.25H1.75ZM1.75 7.75H1V6.25H1.75H4.25H5V7.75H4.25H1.75ZM1.75 3.5H1V2H1.75H7.25H8V3.5H7.25H1.75ZM12.5303 14.7803C12.2374 15.0732 11.7626 15.0732 11.4697 14.7803L9.21967 12.5303L8.68934 12L9.75 10.9393L10.2803 11.4697L11.25 12.4393V2.75V2H12.75V2.75V12.4393L13.7197 11.4697L14.25 10.9393L15.3107 12L14.7803 12.5303L12.5303 14.7803Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const SidebarLeftIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M6.245 2.5H14.5V12.5C14.5 13.0523 14.0523 13.5 13.5 13.5H6.245V2.5ZM4.995 2.5H1.5V12.5C1.5 13.0523 1.94772 13.5 2.5 13.5H4.995V2.5ZM0 1H1.5H14.5H16V2.5V12.5C16 13.8807 14.8807 15 13.5 15H2.5C1.11929 15 0 13.8807 0 12.5V2.5V1Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const PlusIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M 8.75,1 H7.25 V7.25 H1.5 V8.75 H7.25 V15 H8.75 V8.75 H14.5 V7.25 H8.75 V1.75 Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const CopyIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const ThumbUpIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M6.89531 2.23972C6.72984 2.12153 6.5 2.23981 6.5 2.44315V5.25001C6.5 6.21651 5.7165 7.00001 4.75 7.00001H2.5V13.5H12.1884C12.762 13.5 13.262 13.1096 13.4011 12.5532L14.4011 8.55318C14.5984 7.76425 14.0017 7.00001 13.1884 7.00001H9.25H8.5V6.25001V3.51458C8.5 3.43384 8.46101 3.35807 8.39531 3.31114L6.89531 2.23972ZM5 2.44315C5 1.01975 6.6089 0.191779 7.76717 1.01912L9.26717 2.09054C9.72706 2.41904 10 2.94941 10 3.51458V5.50001H13.1884C14.9775 5.50001 16.2903 7.18133 15.8563 8.91698L14.8563 12.917C14.5503 14.1412 13.4503 15 12.1884 15H1.75H1V14.25V6.25001V5.50001H1.75H4.75C4.88807 5.50001 5 5.38808 5 5.25001V2.44315Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const ThumbDownIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M6.89531 13.7603C6.72984 13.8785 6.5 13.7602 6.5 13.5569V10.75C6.5 9.7835 5.7165 9 4.75 9H2.5V2.5H12.1884C12.762 2.5 13.262 2.89037 13.4011 3.44683L14.4011 7.44683C14.5984 8.23576 14.0017 9 13.1884 9H9.25H8.5V9.75V12.4854C8.5 12.5662 8.46101 12.6419 8.39531 12.6889L6.89531 13.7603ZM5 13.5569C5 14.9803 6.6089 15.8082 7.76717 14.9809L9.26717 13.9095C9.72706 13.581 10 13.0506 10 12.4854V10.5H13.1884C14.9775 10.5 16.2903 8.81868 15.8563 7.08303L14.8563 3.08303C14.5503 1.85882 13.4503 1 12.1884 1H1.75H1V1.75V9.75V10.5H1.75H4.75C4.88807 10.5 5 10.6119 5 10.75V13.5569Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const ChevronDownIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M12.0607 6.74999L11.5303 7.28032L8.7071 10.1035C8.31657 10.4941 7.68341 10.4941 7.29288 10.1035L4.46966 7.28032L3.93933 6.74999L4.99999 5.68933L5.53032 6.21966L7.99999 8.68933L10.4697 6.21966L11 5.68933L12.0607 6.74999Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const ChevronRightIcon = ({ size = 16 }: { size?: number }) => (\n  <svg data-testid=\"geist-icon\" height={size} stroke-linejoin=\"round\" viewBox=\"0 0 16 16\" width={size}>\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M6.74999 3.93933L7.28032 4.46966L10.1035 7.29288C10.4941 7.68341 10.4941 8.31657 10.1035 8.7071L7.28032 11.5303L6.74999 12.0607L5.68933 11L6.21966 10.4697L8.68933 7.99999L6.21966 5.53032L5.68933 4.99999L6.74999 3.93933Z\"\n      fill=\"currentColor\"\n    ></path>\n  </svg>\n);\n\nexport const SparklesIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      d=\"M2.5 0.5V0H3.5V0.5C3.5 1.60457 4.39543 2.5 5.5 2.5H6V3V3.5H5.5C4.39543 3.5 3.5 4.39543 3.5 5.5V6H3H2.5V5.5C2.5 4.39543 1.60457 3.5 0.5 3.5H0V3V2.5H0.5C1.60457 2.5 2.5 1.60457 2.5 0.5Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M14.5 4.5V5H13.5V4.5C13.5 3.94772 13.0523 3.5 12.5 3.5H12V3V2.5H12.5C13.0523 2.5 13.5 2.05228 13.5 1.5V1H14H14.5V1.5C14.5 2.05228 14.9477 2.5 15.5 2.5H16V3V3.5H15.5C14.9477 3.5 14.5 3.94772 14.5 4.5Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M8.40706 4.92939L8.5 4H9.5L9.59294 4.92939C9.82973 7.29734 11.7027 9.17027 14.0706 9.40706L15 9.5V10.5L14.0706 10.5929C11.7027 10.8297 9.82973 12.7027 9.59294 15.0706L9.5 16H8.5L8.40706 15.0706C8.17027 12.7027 6.29734 10.8297 3.92939 10.5929L3 10.5V9.5L3.92939 9.40706C6.29734 9.17027 8.17027 7.29734 8.40706 4.92939Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const CheckCircleFillIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM11.5303 6.53033L12.0607 6L11 4.93934L10.4697 5.46967L6.5 9.43934L5.53033 8.46967L5 7.93934L3.93934 9L4.46967 9.53033L5.96967 11.0303C6.26256 11.3232 6.73744 11.3232 7.03033 11.0303L11.5303 6.53033Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const GlobeIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M10.268 14.0934C11.9051 13.4838 13.2303 12.2333 13.9384 10.6469C13.1192 10.7941 12.2138 10.9111 11.2469 10.9925C11.0336 12.2005 10.695 13.2621 10.268 14.0934ZM8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM8.48347 14.4823C8.32384 14.494 8.16262 14.5 8 14.5C7.83738 14.5 7.67616 14.494 7.51654 14.4823C7.5132 14.4791 7.50984 14.4759 7.50647 14.4726C7.2415 14.2165 6.94578 13.7854 6.67032 13.1558C6.41594 12.5744 6.19979 11.8714 6.04101 11.0778C6.67605 11.1088 7.33104 11.125 8 11.125C8.66896 11.125 9.32395 11.1088 9.95899 11.0778C9.80021 11.8714 9.58406 12.5744 9.32968 13.1558C9.05422 13.7854 8.7585 14.2165 8.49353 14.4726C8.49016 14.4759 8.4868 14.4791 8.48347 14.4823ZM11.4187 9.72246C12.5137 9.62096 13.5116 9.47245 14.3724 9.28806C14.4561 8.87172 14.5 8.44099 14.5 8C14.5 7.55901 14.4561 7.12828 14.3724 6.71194C13.5116 6.52755 12.5137 6.37904 11.4187 6.27753C11.4719 6.83232 11.5 7.40867 11.5 8C11.5 8.59133 11.4719 9.16768 11.4187 9.72246ZM10.1525 6.18401C10.2157 6.75982 10.25 7.36805 10.25 8C10.25 8.63195 10.2157 9.24018 10.1525 9.81598C9.46123 9.85455 8.7409 9.875 8 9.875C7.25909 9.875 6.53877 9.85455 5.84749 9.81598C5.7843 9.24018 5.75 8.63195 5.75 8C5.75 7.36805 5.7843 6.75982 5.84749 6.18401C6.53877 6.14545 7.25909 6.125 8 6.125C8.74091 6.125 9.46123 6.14545 10.1525 6.18401ZM11.2469 5.00748C12.2138 5.08891 13.1191 5.20593 13.9384 5.35306C13.2303 3.7667 11.9051 2.51622 10.268 1.90662C10.695 2.73788 11.0336 3.79953 11.2469 5.00748ZM8.48347 1.51771C8.4868 1.52089 8.49016 1.52411 8.49353 1.52737C8.7585 1.78353 9.05422 2.21456 9.32968 2.84417C9.58406 3.42562 9.80021 4.12856 9.95899 4.92219C9.32395 4.89118 8.66896 4.875 8 4.875C7.33104 4.875 6.67605 4.89118 6.04101 4.92219C6.19978 4.12856 6.41594 3.42562 6.67032 2.84417C6.94578 2.21456 7.2415 1.78353 7.50647 1.52737C7.50984 1.52411 7.51319 1.52089 7.51653 1.51771C7.67615 1.50597 7.83738 1.5 8 1.5C8.16262 1.5 8.32384 1.50597 8.48347 1.51771ZM5.73202 1.90663C4.0949 2.51622 2.76975 3.7667 2.06159 5.35306C2.88085 5.20593 3.78617 5.08891 4.75309 5.00748C4.96639 3.79953 5.30497 2.73788 5.73202 1.90663ZM4.58133 6.27753C3.48633 6.37904 2.48837 6.52755 1.62761 6.71194C1.54392 7.12828 1.5 7.55901 1.5 8C1.5 8.44099 1.54392 8.87172 1.62761 9.28806C2.48837 9.47245 3.48633 9.62096 4.58133 9.72246C4.52807 9.16768 4.5 8.59133 4.5 8C4.5 7.40867 4.52807 6.83232 4.58133 6.27753ZM4.75309 10.9925C3.78617 10.9111 2.88085 10.7941 2.06159 10.6469C2.76975 12.2333 4.0949 13.4838 5.73202 14.0934C5.30497 13.2621 4.96639 12.2005 4.75309 10.9925Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const LockIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M10 4.5V6H6V4.5C6 3.39543 6.89543 2.5 8 2.5C9.10457 2.5 10 3.39543 10 4.5ZM4.5 6V4.5C4.5 2.567 6.067 1 8 1C9.933 1 11.5 2.567 11.5 4.5V6H12.5H14V7.5V12.5C14 13.8807 12.8807 15 11.5 15H4.5C3.11929 15 2 13.8807 2 12.5V7.5V6H3.5H4.5ZM11.5 7.5H10H6H4.5H3.5V12.5C3.5 13.0523 3.94772 13.5 4.5 13.5H11.5C12.0523 13.5 12.5 13.0523 12.5 12.5V7.5H11.5Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const EyeIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M4.02168 4.76932C6.11619 2.33698 9.88374 2.33698 11.9783 4.76932L14.7602 7.99999L11.9783 11.2307C9.88374 13.663 6.1162 13.663 4.02168 11.2307L1.23971 7.99999L4.02168 4.76932ZM13.1149 3.79054C10.422 0.663244 5.57797 0.663247 2.88503 3.79054L-0.318359 7.5106V8.48938L2.88503 12.2094C5.57797 15.3367 10.422 15.3367 13.1149 12.2094L16.3183 8.48938V7.5106L13.1149 3.79054ZM6.49997 7.99999C6.49997 7.17157 7.17154 6.49999 7.99997 6.49999C8.82839 6.49999 9.49997 7.17157 9.49997 7.99999C9.49997 8.82842 8.82839 9.49999 7.99997 9.49999C7.17154 9.49999 6.49997 8.82842 6.49997 7.99999ZM7.99997 4.99999C6.34311 4.99999 4.99997 6.34314 4.99997 7.99999C4.99997 9.65685 6.34311 11 7.99997 11C9.65682 11 11 9.65685 11 7.99999C11 6.34314 9.65682 4.99999 7.99997 4.99999Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const ShareIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M15 11.25V10.5H13.5V11.25V12.75C13.5 13.1642 13.1642 13.5 12.75 13.5H3.25C2.83579 13.5 2.5 13.1642 2.5 12.75L2.5 3.25C2.5 2.83579 2.83579 2.5 3.25 2.5H5.75H6.5V1H5.75H3.25C2.00736 1 1 2.00736 1 3.25V12.75C1 13.9926 2.00736 15 3.25 15H12.75C13.9926 15 15 13.9926 15 12.75V11.25ZM15 5.5L10.5 1V4C7.46243 4 5 6.46243 5 9.5V10L5.05855 9.91218C6.27146 8.09281 8.31339 7 10.5 7V10L15 5.5Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const CodeIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M4.21969 12.5303L4.75002 13.0607L5.81068 12L5.28035 11.4697L1.81068 7.99999L5.28035 4.53032L5.81068 3.99999L4.75002 2.93933L4.21969 3.46966L0.39647 7.29289C0.00594562 7.68341 0.00594562 8.31658 0.39647 8.7071L4.21969 12.5303ZM11.7804 12.5303L11.25 13.0607L10.1894 12L10.7197 11.4697L14.1894 7.99999L10.7197 4.53032L10.1894 3.99999L11.25 2.93933L11.7804 3.46966L15.6036 7.29289C15.9941 7.68341 15.9941 8.31658 15.6036 8.7071L11.7804 12.5303Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const PlayIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M13.4549 7.22745L13.3229 7.16146L2.5 1.74999L2.4583 1.72914L1.80902 1.4045L1.3618 1.18089C1.19558 1.09778 1 1.21865 1 1.4045L1 1.9045L1 2.63041L1 2.67704L1 13.3229L1 13.3696L1 14.0955L1 14.5955C1 14.7813 1.19558 14.9022 1.3618 14.8191L1.80902 14.5955L2.4583 14.2708L2.5 14.25L13.3229 8.83852L13.4549 8.77253L14.2546 8.37267L14.5528 8.2236C14.737 8.13147 14.737 7.86851 14.5528 7.77638L14.2546 7.62731L13.4549 7.22745ZM11.6459 7.99999L2.5 3.42704L2.5 12.5729L11.6459 7.99999Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const PythonIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        d=\"M7.90474 0.00013087C7.24499 0.00316291 6.61494 0.0588153 6.06057 0.15584C4.42745 0.441207 4.13094 1.0385 4.13094 2.14002V3.59479H7.9902V4.07971H4.13094H2.68259C1.56099 4.07971 0.578874 4.7465 0.271682 6.01496C-0.0826597 7.4689 -0.0983767 8.37619 0.271682 9.89434C0.546012 11.0244 1.20115 11.8296 2.32276 11.8296H3.64966V10.0856C3.64966 8.82574 4.75179 7.71441 6.06057 7.71441H9.91533C10.9884 7.71441 11.845 6.84056 11.845 5.77472V2.14002C11.845 1.10556 10.9626 0.328487 9.91533 0.15584C9.25237 0.046687 8.56448 -0.00290121 7.90474 0.00013087ZM5.81768 1.17017C6.21631 1.17017 6.54185 1.49742 6.54185 1.89978C6.54185 2.30072 6.21631 2.62494 5.81768 2.62494C5.41761 2.62494 5.09351 2.30072 5.09351 1.89978C5.09351 1.49742 5.41761 1.17017 5.81768 1.17017Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M12.3262 4.07971V5.77472C12.3262 7.08883 11.1997 8.19488 9.91525 8.19488H6.06049C5.0046 8.19488 4.13086 9.0887 4.13086 10.1346V13.7693C4.13086 14.8037 5.04033 15.4122 6.06049 15.709C7.28211 16.0642 8.45359 16.1285 9.91525 15.709C10.8868 15.4307 11.8449 14.8708 11.8449 13.7693V12.3145H7.99012V11.8296H11.8449H13.7745C14.8961 11.8296 15.3141 11.0558 15.7041 9.89434C16.1071 8.69865 16.0899 7.5488 15.7041 6.01495C15.4269 4.91058 14.8975 4.07971 13.7745 4.07971H12.3262ZM10.1581 13.2843C10.5582 13.2843 10.8823 13.6086 10.8823 14.0095C10.8823 14.4119 10.5582 14.7391 10.1581 14.7391C9.7595 14.7391 9.43397 14.4119 9.43397 14.0095C9.43397 13.6086 9.7595 13.2843 10.1581 13.2843Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nexport const TerminalWindowIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M1.5 2.5H14.5V12.5C14.5 13.0523 14.0523 13.5 13.5 13.5H2.5C1.94772 13.5 1.5 13.0523 1.5 12.5V2.5ZM0 1H1.5H14.5H16V2.5V12.5C16 13.8807 14.8807 15 13.5 15H2.5C1.11929 15 0 13.8807 0 12.5V2.5V1ZM4 11.1339L4.44194 10.6919L6.51516 8.61872C6.85687 8.27701 6.85687 7.72299 6.51517 7.38128L4.44194 5.30806L4 4.86612L3.11612 5.75L3.55806 6.19194L5.36612 8L3.55806 9.80806L3.11612 10.25L4 11.1339ZM8 9.75494H8.6225H11.75H12.3725V10.9999H11.75H8.6225H8V9.75494Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const BrainIcon = () => {\n  return (\n    <svg\n      data-testid=\"geist-icon\"\n      height=\"16\"\n      stroke-linejoin=\"round\"\n      viewBox=\"0 0 16 16\"\n      width=\"16\"\n    >\n      <path\n        d=\"M10 0C11.268 0 12.3324 0.859091 12.6504 2.02637C14.118 2.22209 15.25 3.4789 15.25 5C15.25 5.58891 15.0791 6.13812 14.7861 6.60156C15.529 7.24324 16 8.19094 16 9.25C15.9999 10.332 15.5087 11.2994 14.7373 11.9414C14.7456 12.0433 14.75 12.1462 14.75 12.25C14.75 14.3211 13.0711 16 11 16C9.7732 16 8.68416 15.4108 8 14.5C7.31584 15.4108 6.2268 16 5 16C2.92893 16 1.25 14.3211 1.25 12.25C1.25 12.1462 1.25341 12.0433 1.26172 11.9414C0.490629 11.2994 0.000127702 10.3317 0 9.25C0 8.1912 0.470336 7.24323 1.21289 6.60156C0.92009 6.13821 0.75 5.58873 0.75 5C0.75 3.47923 1.88154 2.22251 3.34863 2.02637C3.6665 0.858965 4.73188 0 6 0C6.78898 0 7.49851 0.333987 8 0.866211C8.50149 0.333987 9.21102 0 10 0ZM10 1.5C9.30964 1.5 8.75 2.05964 8.75 2.75V5C8.75 7.07107 7.07107 8.75 5 8.75V7.25C6.24264 7.25 7.25 6.24264 7.25 5V2.75C7.25 2.05964 6.69036 1.5 6 1.5C5.30964 1.5 4.75 2.05964 4.75 2.75C4.75 2.97883 4.81116 3.19098 4.91699 3.37402C5.12435 3.73249 5.00191 4.19194 4.64355 4.39941C4.28509 4.60678 3.82564 4.48434 3.61816 4.12598C3.51401 3.94592 3.43065 3.75258 3.36914 3.5498C2.72528 3.71844 2.25 4.30326 2.25 5C2.25 5.33086 2.35641 5.63645 2.53809 5.88477C2.64489 5.85428 2.75355 5.82796 2.86426 5.80762C3.27156 5.7328 3.66233 6.00195 3.7373 6.40918C3.81212 6.81648 3.54297 7.20726 3.13574 7.28223C2.20525 7.45314 1.5 8.27042 1.5 9.25C1.50023 10.3544 2.39557 11.25 3.5 11.25C3.62499 11.25 3.74669 11.2384 3.86426 11.2168C4.27151 11.142 4.66228 11.4112 4.7373 11.8184C4.81212 12.2256 4.54296 12.6164 4.13574 12.6914C3.92912 12.7294 3.71641 12.75 3.5 12.75C3.2574 12.75 3.02069 12.7247 2.79199 12.6777C2.99188 13.7157 3.90371 14.5 5 14.5C6.24264 14.5 7.25 13.4926 7.25 12.25V12C7.25 9.92893 8.92893 8.25 11 8.25V9.75C9.75736 9.75 8.75 10.7574 8.75 12V12.25C8.75 13.4926 9.75736 14.5 11 14.5C12.0962 14.5 13.0071 13.7156 13.207 12.6777C12.9786 12.7246 12.7423 12.75 12.5 12.75C12.2836 12.75 12.0709 12.7294 11.8643 12.6914C11.457 12.6164 11.1879 12.2256 11.2627 11.8184C11.3377 11.4112 11.7285 11.142 12.1357 11.2168C12.2533 11.2384 12.375 11.25 12.5 11.25C13.6044 11.25 14.4998 10.3544 14.5 9.25C14.5 8.27042 13.7947 7.45314 12.8643 7.28223C12.457 7.20726 12.1879 6.81648 12.2627 6.40918C12.3377 6.00195 12.7284 5.7328 13.1357 5.80762C13.2461 5.82791 13.3544 5.85439 13.4609 5.88477C13.6428 5.63637 13.75 5.33107 13.75 5C13.75 4.30293 13.2742 3.71812 12.6299 3.5498C12.5684 3.75249 12.4859 3.946 12.3818 4.12598C12.1744 4.48434 11.7149 4.60678 11.3564 4.39941C10.9981 4.19194 10.8756 3.73249 11.083 3.37402C11.1888 3.19098 11.25 2.97883 11.25 2.75C11.25 2.05964 10.6904 1.5 10 1.5Z\"\n        fill=\"currentColor\"\n      ></path>\n    </svg>\n  );\n};\n\nexport const TerminalIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M1.53035 12.7804L1.00002 13.3108L-0.0606384 12.2501L0.469692 11.7198L4.18936 8.00011L0.469692 4.28044L-0.0606384 3.75011L1.00002 2.68945L1.53035 3.21978L5.60358 7.29301C5.9941 7.68353 5.9941 8.3167 5.60357 8.70722L1.53035 12.7804ZM8.75002 12.5001H8.00002V14.0001H8.75002H15.25H16V12.5001H15.25H8.75002Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const ClockRewind = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M7.96452 2.5C11.0257 2.5 13.5 4.96643 13.5 8C13.5 11.0336 11.0257 13.5 7.96452 13.5C6.12055 13.5 4.48831 12.6051 3.48161 11.2273L3.03915 10.6217L1.828 11.5066L2.27046 12.1122C3.54872 13.8617 5.62368 15 7.96452 15C11.8461 15 15 11.87 15 8C15 4.13001 11.8461 1 7.96452 1C5.06835 1 2.57851 2.74164 1.5 5.23347V3.75V3H0V3.75V7.25C0 7.66421 0.335786 8 0.75 8H3.75H4.5V6.5H3.75H2.63724C3.29365 4.19393 5.42843 2.5 7.96452 2.5ZM8.75 5.25V4.5H7.25V5.25V7.8662C7.25 8.20056 7.4171 8.51279 7.6953 8.69825L9.08397 9.62404L9.70801 10.0401L10.5401 8.79199L9.91603 8.37596L8.75 7.59861V5.25Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const LogsIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M9 2H9.75H14.25H15V3.5H14.25H9.75H9V2ZM9 12.5H9.75H14.25H15V14H14.25H9.75H9V12.5ZM9.75 7.25H9V8.75H9.75H14.25H15V7.25H14.25H9.75ZM1 12.5H1.75H2.25H3V14H2.25H1.75H1V12.5ZM1.75 2H1V3.5H1.75H2.25H3V2H2.25H1.75ZM1 7.25H1.75H2.25H3V8.75H2.25H1.75H1V7.25ZM5.75 12.5H5V14H5.75H6.25H7V12.5H6.25H5.75ZM5 2H5.75H6.25H7V3.5H6.25H5.75H5V2ZM5.75 7.25H5V8.75H5.75H6.25H7V7.25H6.25H5.75Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const ImageIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M14.5 2.5H1.5V9.18933L2.96966 7.71967L3.18933 7.5H3.49999H6.63001H6.93933L6.96966 7.46967L10.4697 3.96967L11.5303 3.96967L14.5 6.93934V2.5ZM8.00066 8.55999L9.53034 10.0897L10.0607 10.62L9.00001 11.6807L8.46968 11.1503L6.31935 9H3.81065L1.53032 11.2803L1.5 11.3106V12.5C1.5 13.0523 1.94772 13.5 2.5 13.5H13.5C14.0523 13.5 14.5 13.0523 14.5 12.5V9.06066L11 5.56066L8.03032 8.53033L8.00066 8.55999ZM4.05312e-06 10.8107V12.5C4.05312e-06 13.8807 1.11929 15 2.5 15H13.5C14.8807 15 16 13.8807 16 12.5V9.56066L16.5607 9L16.0303 8.46967L16 8.43934V2.5V1H14.5H1.5H4.05312e-06V2.5V10.6893L-0.0606689 10.75L4.05312e-06 10.8107Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n\nexport const FullscreenIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M1 5.25V6H2.5V5.25V2.5H5.25H6V1H5.25H2C1.44772 1 1 1.44772 1 2V5.25ZM5.25 14.9994H6V13.4994H5.25H2.5V10.7494V9.99939H1V10.7494V13.9994C1 14.5517 1.44772 14.9994 2 14.9994H5.25ZM15 10V10.75V14C15 14.5523 14.5523 15 14 15H10.75H10V13.5H10.75H13.5V10.75V10H15ZM10.75 1H10V2.5H10.75H13.5V5.25V6H15V5.25V2C15 1.44772 14.5523 1 14 1H10.75Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const DownloadIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M8.75 1V1.75V8.68934L10.7197 6.71967L11.25 6.18934L12.3107 7.25L11.7803 7.78033L8.70711 10.8536C8.31658 11.2441 7.68342 11.2441 7.29289 10.8536L4.21967 7.78033L3.68934 7.25L4.75 6.18934L5.28033 6.71967L7.25 8.68934V1.75V1H8.75ZM13.5 9.25V13.5H2.5V9.25V8.5H1V9.25V14C1 14.5523 1.44771 15 2 15H14C14.5523 15 15 14.5523 15 14V9.25V8.5H13.5V9.25Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const LineChartIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    style={{ color: 'currentcolor' }}\n    viewBox=\"0 0 16 16\"\n    width={size}\n  >\n    <path\n      clipRule=\"evenodd\"\n      d=\"M1 1v11.75A2.25 2.25 0 0 0 3.25 15H15v-1.5H3.25a.75.75 0 0 1-.75-.75V1H1Zm13.297 5.013.513-.547-1.094-1.026-.513.547-3.22 3.434-2.276-2.275a1 1 0 0 0-1.414 0L4.22 8.22l-.53.53 1.06 1.06.53-.53L7 7.56l2.287 2.287a1 1 0 0 0 1.437-.023l3.573-3.811Z\"\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n    />\n  </svg>\n);\n\nexport const WarningIcon = ({ size = 16 }: { size?: number }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      style={{ color: 'currentcolor' }}\n      viewBox=\"0 0 16 16\"\n      width={size}\n    >\n      <path\n        clipRule=\"evenodd\"\n        d=\"M8.55846 0.5C9.13413 0.5 9.65902 0.829456 9.90929 1.34788L15.8073 13.5653C16.1279 14.2293 15.6441 15 14.9068 15H1.09316C0.355835 15 -0.127943 14.2293 0.192608 13.5653L6.09065 1.34787C6.34092 0.829454 6.86581 0.5 7.44148 0.5H8.55846ZM8.74997 4.75V5.5V8V8.75H7.24997V8V5.5V4.75H8.74997ZM7.99997 12C8.55226 12 8.99997 11.5523 8.99997 11C8.99997 10.4477 8.55226 10 7.99997 10C7.44769 10 6.99997 10.4477 6.99997 11C6.99997 11.5523 7.44769 12 7.99997 12Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n};\n","import { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { useRef, useState, useEffect, useCallback, ComponentType } from 'react';\nimport { RemoveCircleIcon, XlsxIcon, CsvFileIcon, TxtFileIcon, UnknownFileIcon } from './bs-icons';\nimport { LoaderIcon } from './ui/icons';\n\nexport interface AttachmentItem {\n  id: string;\n  url: string;\n  alt?: string;\n  isLoading?: boolean;\n  /** MIME type, used to decide whether to show image or icon */\n  contentType?: string;\n}\n\nexport interface AttachmentsPreviewerProps {\n  attachments: AttachmentItem[];\n  className?: string;\n  imageSize?: number;\n  gap?: number;\n  onImageClick?: (attachment: AttachmentItem, index: number) => void;\n  onImageRemove?: (attachment: AttachmentItem, index: number) => void;\n}\n\ntype FileIconComponent = ComponentType;\n\ninterface FileTypeConfig {\n  icon: FileIconComponent;\n  /** Icon original size for scaling */\n  iconSize: number;\n}\n\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {\n    icon: XlsxIcon,\n    iconSize: 52,\n  },\n  'application/vnd.ms-excel': { icon: XlsxIcon, iconSize: 52 },\n  'text/csv': { icon: CsvFileIcon, iconSize: 16 },\n  'text/plain': { icon: TxtFileIcon, iconSize: 16 },\n  'application/octet-stream': { icon: TxtFileIcon, iconSize: 16 },\n};\n\nconst DEFAULT_FILE_CONFIG: FileTypeConfig = {\n  icon: UnknownFileIcon,\n  iconSize: 16,\n};\n\nconst isImageType = (mediaType?: string): boolean => Boolean(mediaType?.startsWith('image/'));\n\nconst getFileConfig = (mediaType?: string, fileName?: string): FileTypeConfig => {\n  if (mediaType && FILE_TYPE_MAP[mediaType]) {\n    return FILE_TYPE_MAP[mediaType];\n  }\n\n  if (fileName) {\n    const ext = fileName.split('.').pop()?.toLowerCase();\n    switch (ext) {\n      case 'xlsx':\n      case 'xls':\n        return FILE_TYPE_MAP['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\n      case 'csv':\n        return FILE_TYPE_MAP['text/csv'];\n      case 'txt':\n      case 'ts':\n      case 'tsx':\n      case 'js':\n      case 'jsx':\n      case 'json':\n      case 'md':\n        return FILE_TYPE_MAP['text/plain'];\n    }\n  }\n\n  return DEFAULT_FILE_CONFIG;\n};\n\nconst ChevronRightIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path\n      d=\"M9 6L15 12L9 18\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst ChevronLeftIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path\n      d=\"M15 6L9 12L15 18\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst NavButton = ({\n  direction,\n  onClick,\n  className,\n}: {\n  direction: 'left' | 'right';\n  onClick: () => void;\n  className?: string;\n}) => {\n  return (\n    <button\n      type=\"button\"\n      onClick={onClick}\n      className={cn(\n        'flex items-center justify-center',\n        'size-9 p-1 rounded-[18px]',\n        'bg-white shadow-[0px_0px_10px_0px_rgba(0,0,0,0.06)]',\n        'cursor-pointer',\n        'hover:bg-gray-50',\n        'text-gray-600',\n        transCls,\n        className\n      )}\n    >\n      {direction === 'left' ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n    </button>\n  );\n};\n\nconst GradientOverlay = ({\n  direction,\n  height,\n  visible,\n}: {\n  direction: 'left' | 'right';\n  height: number;\n  visible: boolean;\n}) => {\n  const isLeft = direction === 'left';\n  return (\n    <div\n      className={cn(\n        'absolute top-2 pointer-events-none z-5',\n        isLeft ? 'left-0' : 'right-0',\n        transCls,\n        visible ? 'opacity-100' : 'opacity-0'\n      )}\n      style={{ height: `${height}px`, width: '46px' }}\n    >\n      {/* Gradient layer - from white via white@63.57% to transparent */}\n      <div\n        className={cn(\n          'absolute inset-0',\n          isLeft\n            ? 'bg-linear-to-r from-white via-white via-[63.57%] to-transparent'\n            : 'bg-linear-to-l from-white via-white via-[63.57%] to-transparent'\n        )}\n      />\n      {/* Blur layer */}\n      <div className=\"absolute inset-0 bg-white blur-[7px]\" />\n    </div>\n  );\n};\n\nexport const AttachmentsPreviewer = ({\n  attachments,\n  className,\n  imageSize = 53,\n  gap = 10,\n  onImageClick,\n  onImageRemove,\n}: AttachmentsPreviewerProps) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const [showLeftNav, setShowLeftNav] = useState(false);\n  const [showRightNav, setShowRightNav] = useState(false);\n\n  const checkScroll = useCallback(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const { scrollLeft, scrollWidth, clientWidth } = el;\n    setShowLeftNav(scrollLeft > 0);\n    setShowRightNav(scrollLeft + clientWidth < scrollWidth - 1);\n  }, []);\n\n  useEffect(() => {\n    checkScroll();\n    const el = scrollRef.current;\n    if (!el) return;\n\n    el.addEventListener('scroll', checkScroll);\n    window.addEventListener('resize', checkScroll);\n\n    return () => {\n      el.removeEventListener('scroll', checkScroll);\n      window.removeEventListener('resize', checkScroll);\n    };\n  }, [checkScroll, attachments]);\n\n  const scroll = (direction: 'left' | 'right') => {\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const scrollAmount = imageSize + gap;\n    const newScrollLeft =\n      direction === 'left' ? el.scrollLeft - scrollAmount * 2 : el.scrollLeft + scrollAmount * 2;\n\n    el.scrollTo({\n      left: newScrollLeft,\n      behavior: 'smooth',\n    });\n  };\n\n  if (!attachments.length) {\n    return null;\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn('relative w-full', className)}\n      style={{ height: imageSize + 16 }}\n    >\n      {/* Scrollable images container */}\n      <div\n        ref={scrollRef}\n        className=\"flex overflow-x-auto scrollbar-hide py-2\"\n        style={{ gap, height: imageSize + 16 }}\n      >\n        {attachments.map((attachment, index) => {\n          const isImage = isImageType(attachment.contentType);\n          const { icon: Icon, iconSize } = getFileConfig(attachment.contentType, attachment.alt);\n          const scaledIconSize = (52 / 102) * imageSize;\n          const iconScale = scaledIconSize / iconSize;\n\n          return (\n            <div\n              key={attachment.id}\n              className={cn(\n                'relative shrink-0 cursor-pointer group border border-[#e0e0e0] rounded-lg',\n                transCls\n              )}\n              style={{ width: imageSize, height: imageSize }}\n              onClick={() => onImageClick?.(attachment, index)}\n            >\n              {isImage && attachment.url ? (\n                <img\n                  src={attachment.url}\n                  alt={attachment.alt || `Attachment ${index + 1}`}\n                  className=\"absolute inset-0 h-full w-full rounded-lg object-cover\"\n                />\n              ) : (\n                <div className=\"absolute inset-0 flex h-full w-full items-center justify-center rounded-lg bg-[#EFF0F6]\">\n                  <div\n                    className=\"shrink-0 flex items-center justify-center\"\n                    style={{ width: scaledIconSize, height: scaledIconSize }}\n                  >\n                    <div\n                      style={{\n                        transform: iconScale !== 1 ? `scale(${iconScale})` : undefined,\n                        transformOrigin: 'center',\n                      }}\n                    >\n                      <Icon />\n                    </div>\n                  </div>\n                </div>\n              )}\n\n              {attachment.isLoading && (\n                <div className=\"absolute inset-0 flex items-center justify-center rounded-lg bg-black/50 pointer-events-none\">\n                  <div className=\"inline-flex animate-spin items-center justify-center\">\n                    <LoaderIcon size={16} />\n                  </div>\n                </div>\n              )}\n\n              {onImageRemove /* && !attachment.isLoading*/ && (\n                <button\n                  className={cn(\n                    'absolute -top-1.5 -right-1.5',\n                    'flex items-center justify-center',\n                    'opacity-0 group-hover:opacity-100 cursor-pointer',\n                    transCls\n                  )}\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    onImageRemove(attachment, index);\n                  }}\n                >\n                  <RemoveCircleIcon />\n                </button>\n              )}\n            </div>\n          );\n        })}\n      </div>\n\n      {/* Left navigation */}\n      <GradientOverlay direction=\"left\" height={imageSize} visible={showLeftNav} />\n      <NavButton\n        direction=\"left\"\n        onClick={() => scroll('left')}\n        className={cn(\n          'absolute left-0 top-1/2 -translate-y-1/2 z-10',\n          showLeftNav ? 'opacity-100' : 'opacity-0 pointer-events-none'\n        )}\n      />\n\n      {/* Right navigation */}\n      <GradientOverlay direction=\"right\" height={imageSize} visible={showRightNav} />\n      <NavButton\n        direction=\"right\"\n        onClick={() => scroll('right')}\n        className={cn(\n          'absolute right-0 top-1/2 -translate-y-1/2 z-10',\n          showRightNav ? 'opacity-100' : 'opacity-0 pointer-events-none'\n        )}\n      />\n    </div>\n  );\n};\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { BsTooltip } from './tooltip';\n\nexport interface BaseButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  icon?: ReactNode;\n  tooltip?: string;\n  hoverTextCls?: string;\n}\n\nexport const BaseButton = forwardRef<HTMLButtonElement, BaseButtonProps>(\n  ({ className, children, hoverTextCls, tooltip, icon, type, ...rest }, ref) => {\n    const btn = (\n      <button\n        ref={ref}\n        type={type ?? 'button'}\n        className={cn(\n          'group inline-flex items-center gap-[6px] px-[16px] rounded-[4px] h-[34px]',\n          'border border-solid border-[#E0E0E0] bg-transparent',\n          'text-[14px] font-[400] leading-[normal] text-[#030303]',\n          'hover:bg-[#EFF0F6] hover:border-transparent',\n          'cursor-pointer',\n          {\n            'hover:text-[#0265FF]': !hoverTextCls,\n            [`hover:${hoverTextCls}`]: hoverTextCls,\n          },\n          transCls,\n          className\n        )}\n        {...rest}\n      >\n        {icon ? <span className=\"shrink-0\">{icon}</span> : null}\n        {children ? (\n          <span className=\"whitespace-nowrap\">{children}</span>\n        ) : null}\n      </button>\n    );\n\n    if (tooltip) {\n      return <BsTooltip content={tooltip}>{btn}</BsTooltip>;\n    }\n\n    return btn;\n  }\n);\n\nBaseButton.displayName = 'BaseButton';\n","import type { IAppDetail, IEntryAliasItem, IEntryDetail, IEntryRef } from '@baishuyun/types';\nimport type { EntryTreeItem, BsEntrySelectChangeResult } from './types';\nimport { FormSelectItem } from '../agent-helper/form-select';\n\nexport const DEPTH_PADDING: Record<number, string> = {\n  0: 'pl-[10px]',\n  1: 'pl-[32px]',\n  2: 'pl-[32px]',\n  3: 'pl-[54px]',\n  4: 'pl-[78px]',\n  5: 'pl-[102px]',\n};\n\nexport function getDepthPadding(depth: number): string {\n  return DEPTH_PADDING[Math.min(depth, 5)] ?? DEPTH_PADDING[5];\n}\n\nexport function getEntryIconClass(entry: IEntryDetail): string {\n  const isNew = entry.icon >= 25;\n  const newStr = isNew ? '-new' : '';\n  return `node-icon icon-bsy-form${newStr}  icon${newStr}-bsy-form-${entry.icon}`;\n}\n\nexport function buildEntryTreeFromAliasMap(\n  appDetail: IAppDetail,\n  searchQuery: string\n): EntryTreeItem[] {\n  const { entryIdAliasMap: originMap, entryMap, entryList } = appDetail;\n\n  const formIdWhiteList = new Set(flattenEntryList(entryList).map((e) => e.id));\n\n  const entryIdAliasMap: Record<string, IEntryAliasItem> = {\n    // ...originMap,\n  };\n\n  for (const [_, v] of Object.entries(originMap ?? {})) {\n    if (formIdWhiteList.has(v.formId)) {\n      entryIdAliasMap[v.formId as string] = v;\n    }\n  }\n\n  const aliasKeys = Object.keys(entryIdAliasMap);\n  if (aliasKeys.length === 0) return [];\n\n  const childrenByParent = new Map<string, string[]>();\n  for (const id of aliasKeys) {\n    const aliasItem = entryIdAliasMap[id];\n    const parentKey = aliasItem.parent || '0';\n    if (!childrenByParent.has(parentKey)) {\n      childrenByParent.set(parentKey, []);\n    }\n    childrenByParent.get(parentKey)!.push(aliasItem.formId);\n  }\n\n  // Root parents: any parent value that is not itself a key in entryIdAliasMap.\n  // Also include the sentinel '0' for entries with empty/falsy parent.\n  const allParentValues = new Set(childrenByParent.keys());\n  const rootParents = Array.from(allParentValues).filter((p) => p === '0' || !entryIdAliasMap[p]);\n\n  const lowerQuery = searchQuery.toLowerCase().trim();\n\n  function buildRecursive(parentId: string, depth: number): EntryTreeItem[] {\n    const childIds = childrenByParent.get(parentId) || [];\n    const nodes: EntryTreeItem[] = [];\n\n    for (const id of childIds) {\n      const aliasItem = entryIdAliasMap[id];\n      const entryDetail = entryMap[id] || null;\n      const name = entryDetail?.name || id;\n      const icon = entryDetail?.icon || 0;\n      const isGroup = aliasItem.type === 'group';\n\n      const children = buildRecursive(id, depth + 1);\n      const selfMatch = !lowerQuery || name?.toLowerCase().includes(lowerQuery);\n\n      if (isGroup) {\n        if (selfMatch || children.length > 0) {\n          nodes.push({\n            id,\n            name,\n            icon,\n            type: 'group',\n            children,\n            depth,\n            isSelectable: false,\n            entry: entryDetail,\n          });\n        }\n      } else {\n        if (selfMatch) {\n          nodes.push({\n            id,\n            name,\n            icon,\n            type: aliasItem.type,\n            children: [],\n            depth,\n            isSelectable: true,\n            entry: entryDetail,\n          });\n        }\n      }\n    }\n\n    return nodes;\n  }\n\n  // Build from each root parent, all at depth 0\n  const result: EntryTreeItem[] = [];\n  for (const rootId of rootParents) {\n    result.push(...buildRecursive(rootId, 0));\n  }\n  return result;\n}\n\nconst flattenFormEntries = (entries: IEntryDetail[]): FormSelectItem[] => {\n  const result: FormSelectItem[] = [];\n  for (const entry of entries) {\n    result.push({\n      id: entry.entryId,\n      name: entry?.name || entry.entryId,\n      icon: entry?.icon || 0,\n      type: entry.type,\n      parent: entry.parent || undefined,\n      itemType: entry.type === 'group' ? 'group' : 'form',\n    });\n    if (entry.child?.length) {\n      for (const child of flattenFormEntries(entry.child)) {\n        result.push({ ...child, parent: entry.entryId });\n      }\n    }\n  }\n  return result;\n};\n\ninterface IEntryItem {\n  id: string;\n}\n\nconst flattenEntryList = (entryList: IEntryRef[]): Array<IEntryItem> => {\n  const items: IEntryItem[] = [];\n\n  for (const entry of entryList) {\n    items.push({\n      id: entry.id,\n    });\n\n    if (entry.child?.length) {\n      for (const c of flattenEntryList(entry.child)) {\n        items.push({\n          id: c.id,\n        });\n      }\n    }\n  }\n\n  return items;\n};\n\nexport const getEntries = (appDetail: IAppDetail): FormSelectItem[] => {\n  const { entryIdAliasMap, entryMap, entryList } = appDetail;\n  const whiteList = new Set(flattenEntryList(entryList).map((e) => e.id));\n  const aliasKeys = Object.keys(entryIdAliasMap).filter((k) => whiteList.has(k));\n\n  if (aliasKeys.length === 0) {\n    return [];\n  }\n\n  const entries = aliasKeys\n    .map((id) => {\n      return entryMap[id] as IEntryDetail;\n    })\n    .filter(Boolean);\n\n  return flattenFormEntries(entries);\n};\n\nexport function filterTreeBySearch(nodes: EntryTreeItem[], searchQuery: string): EntryTreeItem[] {\n  const lowerQuery = searchQuery.toLowerCase().trim();\n  if (!lowerQuery) return nodes;\n\n  const result: EntryTreeItem[] = [];\n  for (const node of nodes) {\n    const nameMatch = node?.name.toLowerCase().includes(lowerQuery);\n    const filteredChildren = filterTreeBySearch(node.children, searchQuery);\n\n    if (!node.isSelectable) {\n      if (nameMatch || filteredChildren.length > 0) {\n        result.push({ ...node, children: filteredChildren });\n      }\n    } else {\n      if (nameMatch) {\n        result.push(node);\n      }\n    }\n  }\n  return result;\n}\n\nexport function findSelected(\n  appDetails: Record<string, IAppDetail>,\n  entryId: string,\n  currentAppId?: string\n): BsEntrySelectChangeResult | null {\n  for (const [appId, detail] of Object.entries(appDetails)) {\n    if (detail.entryMap[entryId]) {\n      return {\n        entry: detail.entryMap[entryId],\n        appId,\n        section: appId === currentAppId ? 'current' : 'other',\n      };\n    }\n  }\n  return null;\n}\n","import { cn } from '../../../lib/utils';\nimport { SearchIcon } from '../../bs-icons';\n\nexport interface SearchInputProps {\n  value?: string;\n  onChange?: (value: string) => void;\n  placeholder?: string;\n  className?: string;\n}\n\nexport const SearchInput = ({\n  value,\n  onChange,\n  placeholder = '',\n  className,\n}: SearchInputProps) => {\n  return (\n    <div\n      className={cn(\n        'content-stretch flex items-center gap-[6px] border border-[#e0e0e0] border-solid rounded-[4px] px-[10px] h-[34px]',\n        'group hover:border-[#0265ff] focus-within:border-[#0265ff]',\n        className,\n      )}\n    >\n      <SearchIcon className=\"shrink-0 text-[#999] group-hover:text-[#0265ff] group-focus-within:text-[#0265ff]\" />\n      <input\n        type=\"text\"\n        value={value || ''}\n        onChange={(e) => onChange?.(e.target.value)}\n        placeholder={placeholder}\n        className=\"flex-1 outline-none text-[14px] placeholder:text-[#999] bg-transparent min-w-0 text-[#030303] leading-[normal]\"\n      />\n    </div>\n  );\n};\n","import { SearchInput as BaseSearch, type SearchInputProps} from '../agent-helper/search-input';\n\nexport type { SearchInputProps };\n\nexport const SearchInput = (props: SearchInputProps) => <BaseSearch {...props} placeholder=\"搜索表单\"  />;","import { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { getDepthPadding, getEntryIconClass } from './build-tree';\nimport type { EntryTreeItem } from './types';\n\nexport function EntryItem({\n  item,\n  depth,\n  isSelected,\n  onClick,\n}: {\n  item: EntryTreeItem;\n  depth: number;\n  isSelected: boolean;\n  onClick: () => void;\n}) {\n  return (\n    <div\n      className={cn(\n        'flex items-center justify-between h-[34px] px-[10px] cursor-pointer rounded-[4px] shrink-0',\n        getDepthPadding(depth),\n        'hover:bg-[#EFF0F6]',\n        isSelected && 'bg-[#EFF0F6]',\n        transCls,\n      )}\n      onClick={onClick}\n    >\n      <span className=\"flex items-center gap-[6px] min-w-0 flex-1\">\n        <i\n          className={\n            item.entry\n              ? getEntryIconClass(item.entry)\n              : 'node-icon icon-bsy-form icon-new-bsy-form-25'\n          }\n          style={{ fontSize: 16, lineHeight: 1 }}\n        />\n        <span className=\"text-[14px] text-[#030303] truncate\">\n          {item.name}\n        </span>\n      </span>\n    </div>\n  );\n}\n","import { useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { getDepthPadding } from './build-tree';\nimport { EntryItem } from './entry-item';\nimport type { EntryTreeItem, BsEntrySelectChangeResult } from './types';\nimport { SolidArrowDownIcon } from '../bs-icons';\n\nconst ChevronRightIcon = ({ size }: { size?: number }) => (\n  <SolidArrowDownIcon className=\"-rotate-90\" size={size} />\n);\n\nexport function TreeItemNode({\n  item,\n  selectedEntryId,\n  appId,\n  section,\n  onSelect,\n}: {\n  item: EntryTreeItem;\n  selectedEntryId: string | undefined;\n  appId: string;\n  section: 'current' | 'other';\n  onSelect: (result: BsEntrySelectChangeResult) => void;\n}) {\n  const [expanded, setExpanded] = useState(true);\n\n  if (item.type === 'group') {\n    return (\n      <div>\n        <div\n          className={cn(\n            'flex items-center gap-[6px] h-[34px] px-[10px] cursor-pointer rounded-[4px]',\n            getDepthPadding(item.depth),\n            'hover:bg-[#EFF0F6]',\n            transCls,\n          )}\n          onClick={() => setExpanded(!expanded)}\n        >\n          <span\n            className={cn(\n              'shrink-0 flex items-center justify-center w-[16px] h-[16px]',\n              transCls,\n              expanded && 'rotate-90',\n            )}\n          >\n            <ChevronRightIcon size={16} />\n          </span>\n          <i\n            className=\"icon-bsy-folder-close\"\n            style={{ fontSize: 16, lineHeight: 1 }}\n          />\n          <span className=\"text-[14px] text-[#030303] truncate\">\n            {item.name}\n          </span>\n        </div>\n        {expanded &&\n          item.children.map((child) => (\n            <TreeItemNode\n              key={child.id}\n              item={child}\n              selectedEntryId={selectedEntryId}\n              appId={appId}\n              section={section}\n              onSelect={onSelect}\n            />\n          ))}\n      </div>\n    );\n  }\n\n  return (\n    <EntryItem\n      item={item}\n      depth={item.depth}\n      isSelected={selectedEntryId === item.id}\n      onClick={() => {\n        if (item.entry) {\n          onSelect({ entry: item.entry, appId, section });\n        }\n      }}\n    />\n  );\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { IconBtn } from '../icon-btn';\nimport { LeftArrowIcon, SolidArrowDownIcon } from '../bs-icons';\nimport {\n  buildEntryTreeFromAliasMap,\n  getEntryIconClass,\n  filterTreeBySearch,\n} from './build-tree';\nimport { SearchInput } from './search-input';\nimport { TreeItemNode } from './tree-item-node';\nimport type { IAppDetail } from '@baishuyun/types';\nimport type {\n  EntryTreeItem,\n  BsEntrySelectChangeResult,\n  BsEntrySelectSliderVariant,\n} from './types';\nimport classNames from 'classnames';\n\nconst ChevronRightIcon = ({ size }: { size?: number }) => (\n  <SolidArrowDownIcon className=\"-rotate-90\" size={size} />\n);\n\ninterface FlatNode {\n  node: EntryTreeItem;\n  appId: string;\n  section: 'current' | 'other';\n}\n\nexport function ScrollSlider({\n  appDetails,\n  currentAppId,\n  selectedEntryId,\n  onSelect,\n  onOverflowChange,\n  showCurrentAppEntriesOnly = false,\n  variant = 'default',\n}: {\n  appDetails: Record<string, IAppDetail>;\n  currentAppId?: string;\n  selectedEntryId?: string;\n  onSelect: (result: BsEntrySelectChangeResult) => void;\n  onOverflowChange?: (hasOverflow: boolean) => void;\n  showCurrentAppEntriesOnly?: boolean;\n  variant?: BsEntrySelectSliderVariant;\n}) {\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(false);\n\n  // Group popover state\n  const [activeGroup, setActiveGroup] = useState<FlatNode | null>(null);\n  const [groupSearchQuery, setGroupSearchQuery] = useState('');\n  const [popoverStyle, setPopoverStyle] = useState<React.CSSProperties>({});\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const groupPillRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n  const [groupPortalContainer, setGroupPortalContainer] = useState<HTMLElement | null>(null);\n\n  const isTabs = variant === 'tabs';\n\n  // Build first-level nodes from all apps (no search filter)\n  const flatNodes = useMemo<FlatNode[]>(() => {\n    const appIds = Object.keys(appDetails);\n    const currentFirst: FlatNode[] = [];\n    const otherNodes: FlatNode[] = [];\n\n    for (const appId of appIds) {\n      const detail = appDetails[appId];\n      const tree = buildEntryTreeFromAliasMap(detail, '');\n      const section = appId === currentAppId ? 'current' as const : 'other' as const;\n      const mapped = tree.map((node) => ({ node, appId, section }));\n      if (section === 'current') {\n        currentFirst.push(...mapped);\n      } else {\n        otherNodes.push(...mapped);\n      }\n    }\n\n    const merged = [...currentFirst, ...otherNodes];\n    return showCurrentAppEntriesOnly ? currentFirst : merged;\n  }, [\n    appDetails,\n    currentAppId,\n    showCurrentAppEntriesOnly,\n    Object.keys(appDetails)\n      .map((id) => (appDetails[id]?.entryList?.length ?? 0))\n      .join(','),\n  ]);\n\n  // Filtered tree for the active group popover\n  const filteredGroupTree = useMemo(() => {\n    if (!activeGroup) return [];\n    return filterTreeBySearch(activeGroup.node.children, groupSearchQuery);\n  }, [activeGroup, groupSearchQuery]);\n\n  const checkScroll = useCallback(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n    const canLeft = el.scrollLeft > 0;\n    const canRight = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n    setCanScrollLeft(canLeft);\n    setCanScrollRight(canRight);\n  }, []);\n\n  const hasOverflow = canScrollLeft || canScrollRight;\n\n  useEffect(() => {\n    onOverflowChange?.(hasOverflow);\n  }, [hasOverflow, onOverflowChange]);\n\n  // Map from descendant entry ID to the group pill node ID\n  const descendantToGroupId = useMemo(() => {\n    const map = new Map<string, string>();\n    function collectDescendants(node: EntryTreeItem, groupId: string) {\n      if (node.isSelectable) {\n        map.set(node.id, groupId);\n      }\n      for (const child of node.children) {\n        collectDescendants(child, groupId);\n      }\n    }\n    for (const { node } of flatNodes) {\n      if (!node.isSelectable) {\n        for (const child of node.children) {\n          collectDescendants(child, node.id);\n        }\n      }\n    }\n    return map;\n  }, [flatNodes]);\n\n  // Auto-scroll selected pill into view\n  useEffect(() => {\n    if (!selectedEntryId || !scrollRef.current) return;\n    // Try direct match first (leaf pill)\n    let targetId = selectedEntryId;\n    let pill = scrollRef.current.querySelector(\n      `[data-entry-id=\"${targetId}\"]`,\n    ) as HTMLElement | null;\n    // Fall back to ancestor group pill\n    if (!pill) {\n      targetId = descendantToGroupId.get(selectedEntryId) || '';\n      if (targetId) {\n        pill = scrollRef.current.querySelector(\n          `[data-entry-id=\"${targetId}\"]`,\n        ) as HTMLElement | null;\n      }\n    }\n    if (pill) {\n      pill.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\n    }\n  }, [selectedEntryId, descendantToGroupId]);\n\n  useEffect(() => {\n    checkScroll();\n    const el = scrollRef.current;\n    if (!el) return;\n\n    const observer = new ResizeObserver(checkScroll);\n    observer.observe(el);\n    el.addEventListener('scroll', checkScroll, { passive: true });\n    return () => {\n      observer.disconnect();\n      el.removeEventListener('scroll', checkScroll);\n    };\n  }, [flatNodes, checkScroll]);\n\n  const scroll = useCallback((direction: 'left' | 'right') => {\n    const el = scrollRef.current;\n    if (!el) return;\n    el.scrollBy({\n      left: direction === 'left' ? -150 : 150,\n      behavior: 'smooth',\n    });\n  }, []);\n\n  const updatePopoverPosition = useCallback(() => {\n    if (!activeGroup) return;\n    const triggerEl = groupPillRefs.current.get(activeGroup.node.id);\n    if (!triggerEl) return;\n    const rect = triggerEl.getBoundingClientRect();\n    setPopoverStyle({\n      position: 'fixed',\n      top: rect.bottom + 4,\n      left: rect.left,\n      minWidth: Math.max(rect.width, 240),\n      zIndex: 9999,\n    });\n  }, [activeGroup]);\n\n  const closeGroupPopover = useCallback(() => {\n    setActiveGroup(null);\n    setGroupSearchQuery('');\n  }, []);\n\n  const openGroupPopover = useCallback((flatNode: FlatNode, event: React.MouseEvent) => {\n    event.stopPropagation();\n    if (activeGroup?.node.id === flatNode.node.id) {\n      setActiveGroup(null);\n      setGroupSearchQuery('');\n      return;\n    }\n    setGroupSearchQuery('');\n    setActiveGroup(flatNode);\n\n    // Check Shadow DOM portal\n    const triggerEl = groupPillRefs.current.get(flatNode.node.id);\n    if (triggerEl) {\n      const rootNode = triggerEl.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        const existing = rootNode.querySelector<HTMLElement>(\n          '[data-bs-entry-select-group-portal]',\n        );\n        if (existing) {\n          setGroupPortalContainer(existing);\n        } else {\n          const container = document.createElement('div');\n          container.setAttribute('data-bs-entry-select-group-portal', 'true');\n          rootNode.appendChild(container);\n          setGroupPortalContainer(container);\n        }\n      } else {\n        setGroupPortalContainer(null);\n      }\n    }\n\n    // Position the popover after the next frame\n    const groupId = flatNode.node.id;\n    requestAnimationFrame(() => {\n      const el = groupPillRefs.current.get(groupId);\n      if (el) {\n        const rect = el.getBoundingClientRect();\n        setPopoverStyle({\n          position: 'fixed',\n          top: rect.bottom + 4,\n          left: rect.left,\n          minWidth: Math.max(rect.width, 240),\n          zIndex: 9999,\n        });\n      }\n    });\n  }, [activeGroup]);\n\n  const handleGroupPopoverSelect = useCallback(\n    (result: BsEntrySelectChangeResult) => {\n      onSelect(result);\n      closeGroupPopover();\n    },\n    [onSelect, closeGroupPopover],\n  );\n\n  // Click outside for group popover\n  useEffect(() => {\n    if (!activeGroup) return;\n\n    const handleClickOutside = (e: MouseEvent) => {\n      const path = e.composedPath();\n      if (popoverRef.current && path.includes(popoverRef.current)) return;\n      const triggerEl = groupPillRefs.current.get(activeGroup.node.id);\n      if (triggerEl && path.includes(triggerEl)) return;\n      closeGroupPopover();\n    };\n\n    const handleScroll = () => updatePopoverPosition();\n\n    document.addEventListener('mousedown', handleClickOutside);\n    window.addEventListener('scroll', handleScroll, true);\n    window.addEventListener('resize', handleScroll);\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      window.removeEventListener('scroll', handleScroll, true);\n      window.removeEventListener('resize', handleScroll);\n    };\n  }, [activeGroup, closeGroupPopover, updatePopoverPosition]);\n\n  // Keyboard escape\n  useEffect(() => {\n    if (!activeGroup) return;\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape') closeGroupPopover();\n    };\n    document.addEventListener('keydown', handleEscape);\n    return () => document.removeEventListener('keydown', handleEscape);\n  }, [activeGroup, closeGroupPopover]);\n\n  if (flatNodes.length === 0) return null;\n\n  const hasGroupSearch = groupSearchQuery.trim().length > 0;\n\n  const sliderBody = (\n    <>\n      {/* Left arrow: always in DOM, width transition */}\n      <span\n        className={cn(\n          transCls,\n          'inline-flex overflow-hidden items-center',\n          canScrollLeft ? 'w-[26px] opacity-100 mr-2.5' : 'w-0 opacity-0 mr-0',\n        )}\n      >\n        <IconBtn\n          rounded\n          icon={<LeftArrowIcon />}\n          onClick={() => scroll('left')}\n        />\n      </span>\n\n      <div\n        ref={scrollRef}\n        className={cn(\n          'flex-1 overflow-x-auto scrollbar-hide flex min-w-0',\n          isTabs\n            ? 'items-end gap-0 overflow-y-hidden border-b-[#e0e0e0] before:content-[\"\"] before:absolute before:bottom-[0px] before:left-[-200px] before:right-0 before:h-[1px] before:w-[100vw] before:bg-[#e0e0e0] h-full'\n            : 'items-center gap-2.5',\n        )}\n      >\n        {flatNodes.map((flatNode) => {\n          const { node, appId, section } = flatNode;\n          const isLeaf = node.isSelectable;\n          const isSelected = isLeaf && selectedEntryId === node.id;\n          const isGroupActive = activeGroup?.node.id === node.id\n            || node?.children.findIndex(c => c.id === selectedEntryId) >= 0;\n\n          const setPillRef = (el: HTMLButtonElement | null) => {\n            if (el) {\n              groupPillRefs.current.set(node.id, el);\n            } else {\n              groupPillRefs.current.delete(node.id);\n            }\n          };\n\n          if (isLeaf) {\n            return (\n              <button\n                key={node.id}\n                data-entry-id={node.id}\n                type=\"button\"\n                onClick={() => {\n                  if (node.entry) {\n                    onSelect({ entry: node.entry, appId, section });\n                  }\n                }}\n                className={cn(\n                  'flex items-center gap-[6px] shrink-0 max-w-[240px]',\n                  transCls,\n                  isTabs\n                    ? [\n                        'px-[16px] py-[8px] relative z-10 border-b-none h-full',\n                        isSelected\n                          ? 'border-r border-t border-l border-[#e0e0e0] bg-[#f6f7fa] text-[#0265FF] rounded-t-[10px] rounded-b-none '\n                          : 'text-[#030303] hover:bg-[#F0F6FF] rounded-t-[8px]',\n                      ]\n                    : [\n                        'px-[10px] py-[7px] rounded-[4px]',\n                        isSelected\n                          ? 'border border-[#F0F6FF] bg-[#F0F6FF] text-[#0265FF]'\n                          : 'border border-[#E0E0E0] text-[#030303] hover:bg-[#F0F6FF]',\n                      ],\n                )}\n              >\n                <i\n                  className={\n                    node.entry\n                      ? getEntryIconClass(node.entry)\n                      : 'node-icon icon-bsy-form icon-new-bsy-form-25'\n                  }\n                  style={{ fontSize: 16, lineHeight: 1 }}\n                />\n                <span className=\"text-[14px] leading-[normal] truncate\">\n                  {node.name}\n                </span>\n              </button>\n            );\n          }\n\n          // Group pill (has descendants)\n          return (\n            <button\n              key={node.id}\n              data-entry-id={node.id}\n              ref={setPillRef}\n              type=\"button\"\n              onClick={(e) => openGroupPopover(flatNode, e)}\n              className={cn(\n                'flex items-center gap-[10px] shrink-0 max-w-[240px]',\n                transCls,\n                isTabs\n                  ? [\n                      'px-[16px] py-[8px] relative z-10 h-full',\n                      isGroupActive\n                          ? 'border-r border-t border-l border-[#e0e0e0] bg-[#f6f7fa] text-[#0265FF] rounded-t-[10px] rounded-b-none '\n                          : 'text-[#030303] hover:bg-[#F0F6FF] rounded-t-[8px]',\n                    ]\n                  : [\n                      'px-[10px] py-[7px] rounded-[4px]',\n                      isGroupActive\n                        ? 'border border-[#0265FF] text-[#030303]'\n                        : 'border border-[#E0E0E0] text-[#030303] hover:bg-[#F0F6FF]',\n                    ],\n              )}\n            >\n              <span className=\"flex items-center gap-[6px] min-w-0 flex-1\">\n                <i\n                  className=\"icon-bsy-folder-close\"\n                  style={{ fontSize: 16, lineHeight: 1 }}\n                />\n                <span className=\"text-[14px] leading-[normal] truncate\">\n                  {node.name}\n                </span>\n              </span>\n              <span\n                className={cn(\n                  'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n                  transCls,\n                  isGroupActive && 'rotate-90',\n                )}\n              >\n                <ChevronRightIcon size={16} />\n              </span>\n            </button>\n          );\n        })}\n      </div>\n\n      {/* Right arrow: always in DOM, width transition */}\n      <span\n        className={cn(\n          transCls,\n          'inline-flex overflow-hidden items-center',\n          canScrollRight ? 'w-[26px] opacity-100 ml-2.5' : 'w-0 opacity-0 ml-0',\n        )}\n      >\n        <IconBtn\n          rounded\n          icon={\n            <span className=\"rotate-180 inline-flex\">\n              <LeftArrowIcon />\n            </span>\n          }\n          onClick={() => scroll('right')}\n        />\n      </span>\n    </>\n  );\n\n  const tabCls = isTabs ? 'h-full px-[10px] items-end' : \"items-center\"\n\n  return (\n    <div className={classNames(\"flex flex-1 min-w-0\", tabCls)}>\n      {isTabs ? (\n        <div className=\"relative flex items-stretch flex-1 min-w-0 h-full\">\n          {sliderBody}\n        </div>\n      ) : (\n        sliderBody\n      )}\n\n      {/* Group subtree popover */}\n      {activeGroup &&\n        (() => {\n          const content = (\n            <div\n              ref={popoverRef}\n              style={popoverStyle}\n              className={cn(\n                'bg-white rounded-[10px] shadow-[0px_0px_10px_0px_rgba(0,0,0,0.04)] p-[4px]',\n                'flex flex-col gap-[4px]',\n                transCls,\n              )}\n            >\n              <SearchInput\n                placeholder='搜索表单名称'\n                value={groupSearchQuery}\n                onChange={setGroupSearchQuery}\n              />\n              <div className=\"flex flex-col gap-[4px] max-h-[300px] overflow-y-auto\">\n                {filteredGroupTree.length > 0 ? (\n                  filteredGroupTree.map((child) => (\n                    <TreeItemNode\n                      key={child.id}\n                      item={child}\n                      selectedEntryId={selectedEntryId}\n                      appId={activeGroup.appId}\n                      section={activeGroup.section}\n                      onSelect={handleGroupPopoverSelect}\n                    />\n                  ))\n                ) : hasGroupSearch ? (\n                  <div className=\"text-[12px] text-[#999999] py-[8px] text-center\">\n                    无匹配结果\n                  </div>\n                ) : (\n                  <div className=\"text-[12px] text-[#999999] py-[8px] text-center\">\n                    暂无表单\n                  </div>\n                )}\n              </div>\n            </div>\n          );\n\n          return createPortal(content, groupPortalContainer || document.body);\n        })()}\n    </div>\n  );\n}\n","import { useState, useEffect } from 'react';\nimport { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { SolidArrowDownIcon } from '../bs-icons';\n\nconst ChevronRightIcon = ({ size }: { size?: number }) => (\n  <SolidArrowDownIcon className=\"-rotate-90\" size={size} />\n);\n\nexport function AppGroupFolder({\n  label,\n  searchQuery,\n  children,\n}: {\n  label: string;\n  searchQuery: string;\n  children: React.ReactNode;\n}) {\n  const [expanded, setExpanded] = useState(true);\n  const hasSearch = searchQuery.trim().length > 0;\n\n  useEffect(() => {\n    if (hasSearch) {\n      setExpanded(true);\n    }\n  }, [hasSearch]);\n\n  return (\n    <div>\n      <div\n        className={cn(\n          'flex items-center gap-[6px] h-[32px] cursor-pointer rounded-[4px] pr-[10px]',\n          'hover:bg-[#EFF0F6]',\n          'border-b border-[#E0E0E0]',\n          'rounded-b-none',\n          transCls,\n        )}\n        style={{ paddingLeft: 10, paddingTop: 9 }}\n        onClick={() => setExpanded(!expanded)}\n      >\n        <span\n          className={cn(\n            'shrink-0 flex items-center justify-center w-[16px] h-[16px]',\n            transCls,\n            expanded && 'rotate-90',\n          )}\n        >\n          <ChevronRightIcon size={16} />\n        </span>\n        <i\n          className=\"icon-bsy-folder-close\"\n          style={{ fontSize: 16, lineHeight: 1 }}\n        />\n        <span className=\"text-[12px] text-[#666666]\">{label}</span>\n      </div>\n      {expanded && (\n        <div className=\"flex flex-col\">{children}</div>\n      )}\n    </div>\n  );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { buildEntryTreeFromAliasMap } from './build-tree';\nimport { TreeItemNode } from './tree-item-node';\nimport type { IAppDetail } from '@baishuyun/types';\nimport type { BsEntrySelectChangeResult } from './types';\nimport { SolidArrowDownIcon } from '../bs-icons';\n\nconst ChevronRightIcon = ({ size }: { size?: number }) => (\n  <SolidArrowDownIcon className=\"-rotate-90\" size={size} />\n);\n\nexport function OtherAppSection({\n  appId,\n  appDetail,\n  searchQuery,\n  selectedEntryId,\n  section,\n  onSelect,\n}: {\n  appId: string;\n  appDetail: IAppDetail;\n  searchQuery: string;\n  selectedEntryId: string | undefined;\n  section: 'current' | 'other';\n  onSelect: (result: BsEntrySelectChangeResult) => void;\n}) {\n  const [expanded, setExpanded] = useState(true);\n  const hasSearch = searchQuery.trim().length > 0;\n\n  useEffect(() => {\n    if (hasSearch) {\n      setExpanded(true);\n    }\n  }, [hasSearch]);\n\n  const tree = useMemo(() => {\n    return buildEntryTreeFromAliasMap(appDetail, searchQuery);\n  }, [appDetail, searchQuery, appDetail?.entryList?.length]);\n\n  return (\n    <div>\n      <div\n        className={cn(\n          'flex items-center gap-[6px] h-[32px] cursor-pointer rounded-[4px] pr-[10px]',\n          'hover:bg-[#EFF0F6]',\n          transCls,\n        )}\n        style={{ paddingLeft: 15 }}\n        onClick={() => setExpanded(!expanded)}\n      >\n        <span\n          className={cn(\n            'shrink-0 flex items-center justify-center w-[18px] h-[18px]',\n            transCls,\n            expanded && 'rotate-90',\n          )}\n        >\n          <ChevronRightIcon size={18} />\n        </span>\n        <i\n          className=\"node-icon icon-bsy-form icon-new-bsy-form-0\"\n          style={{ fontSize: 16, lineHeight: 1 }}\n        />\n        <span className=\"text-[14px] text-[#030303] truncate\">\n          {appDetail.name}\n        </span>\n      </div>\n      {expanded && tree.length > 0 && (\n        <div className=\"flex flex-col\" style={{ paddingLeft: 15 }}>\n          {tree.map((node) => (\n            <TreeItemNode\n              key={node.id}\n              item={node}\n              selectedEntryId={selectedEntryId}\n              appId={appId}\n              section={section}\n              onSelect={onSelect}\n            />\n          ))}\n        </div>\n      )}\n      {expanded && tree.length === 0 && hasSearch && (\n        <div className=\"text-[12px] text-[#999999] py-[8px] pl-[32px]\">\n          无匹配结果\n        </div>\n      )}\n      {expanded && tree.length === 0 && !hasSearch && (\n        <div className=\"text-[12px] text-[#999999] py-[8px] pl-[32px]\">\n          暂无表单\n        </div>\n      )}\n    </div>\n  );\n}\n","import { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { SearchInput } from '../agent-helper/search-input';\nimport { TreeItemNode } from './tree-item-node';\nimport { AppGroupFolder } from './app-group-folder';\nimport { OtherAppSection } from './other-app-section';\nimport type { IAppDetail } from '@baishuyun/types';\nimport type { EntryTreeItem, BsEntrySelectChangeResult } from './types';\n\nexport function EntryPopover({\n  searchQuery,\n  onSearchChange,\n  currentAppTree,\n  currentAppId,\n  otherAppIds,\n  appDetails,\n  selectedEntryId,\n  hasCurrentApp,\n  hasOtherApps,\n  hasAnyContent,\n  hasSearch,\n  showCurrentAppEntriesOnly = false,\n  onSelect,\n}: {\n  searchQuery: string;\n  onSearchChange: (v: string) => void;\n  currentAppTree: EntryTreeItem[];\n  currentAppId: string | undefined;\n  otherAppIds: string[];\n  appDetails: Record<string, IAppDetail>;\n  selectedEntryId: string | undefined;\n  hasCurrentApp: boolean;\n  hasOtherApps: boolean;\n  hasAnyContent: boolean;\n  hasSearch: boolean;\n  showCurrentAppEntriesOnly?: boolean;\n  onSelect: (result: BsEntrySelectChangeResult) => void;\n}) {\n  return (\n    <div\n      className={cn(\n        'bg-white rounded-[10px] shadow-[0px_0px_10px_0px_rgba(0,0,0,0.04)] p-[4px]',\n        'flex flex-col gap-[4px]',\n        transCls,\n      )}\n    >\n      <SearchInput value={searchQuery} onChange={onSearchChange} placeholder='搜索表单名称' />\n\n      <div className=\"flex flex-col gap-0 max-h-[400px] overflow-y-auto\">\n        {hasCurrentApp && (\n          <AppGroupFolder label=\"当前应用表单\" searchQuery={searchQuery}>\n            {currentAppTree.length > 0 ? (\n              currentAppTree.map((node) => (\n                <TreeItemNode\n                  key={node.id}\n                  item={node}\n                  selectedEntryId={selectedEntryId}\n                  appId={currentAppId!}\n                  section=\"current\"\n                  onSelect={onSelect}\n                />\n              ))\n            ) : hasSearch ? (\n              <div className=\"text-[12px] text-[#999999] py-[8px] pl-[22px]\">\n                无匹配结果\n              </div>\n            ) : (\n              <div className=\"text-[12px] text-[#999999] py-[8px] pl-[22px]\">\n                暂无表单\n              </div>\n            )}\n          </AppGroupFolder>\n        )}\n\n        {hasOtherApps && !showCurrentAppEntriesOnly && (\n          <AppGroupFolder label=\"其他应用表单\" searchQuery={searchQuery}>\n            {otherAppIds.map((appId) => (\n              <OtherAppSection\n                key={appId}\n                appId={appId}\n                appDetail={appDetails[appId]}\n                searchQuery={searchQuery}\n                selectedEntryId={selectedEntryId}\n                section=\"other\"\n                onSelect={onSelect}\n              />\n            ))}\n          </AppGroupFolder>\n        )}\n\n        {!hasAnyContent && (\n          <div className=\"text-[14px] text-[#999999] py-[12px] text-center\">\n            暂无应用\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n","import {\n  forwardRef,\n  useState,\n  useRef,\n  useEffect,\n  useMemo,\n  useCallback,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { transCls } from '../../const/ui';\nimport { ScrollSlider } from './scroll-slider';\nimport { EntryPopover } from './entry-popover';\nimport { buildEntryTreeFromAliasMap } from './build-tree';\nimport type { BsEntrySelectProps, BsEntrySelectChangeResult } from './types';\nimport { MenuLinesIcon } from '../bs-icons';\n\nexport type { BsEntrySelectProps, BsEntrySelectChangeResult };\n\nexport const BsEntrySelect = forwardRef<HTMLDivElement, BsEntrySelectProps>(\n  (\n    {\n      appDetails,\n      currentAppId,\n      value: controlledValue,\n      defaultValue,\n      onChange,\n      placeholder: _placeholder = '请选择',\n      disabled = false,\n      className,\n      showSlider = true,\n      showCurrentAppEntriesOnly = false,\n      sliderVariant = 'default',\n    },\n    ref,\n  ) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [searchQuery, setSearchQuery] = useState('');\n    const [internalValue, setInternalValue] = useState<string | undefined>(\n      defaultValue,\n    );\n    const triggerRef = useRef<HTMLDivElement>(null);\n    const popoverRef = useRef<HTMLDivElement>(null);\n    const [popoverStyle, setPopoverStyle] = useState<React.CSSProperties>({});\n    const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n    const [sliderHasOverflow, setSliderHasOverflow] = useState(false);\n\n    const handleOverflowChange = useCallback((hasOverflow: boolean) => {\n      setSliderHasOverflow(hasOverflow);\n    }, []);\n\n    const selectedEntryId = controlledValue ?? internalValue;\n\n    const otherAppIds = useMemo(() => {\n      return Object.keys(appDetails).filter((id) => id !== currentAppId);\n    }, [appDetails, currentAppId]);\n\n    const updatePopoverPosition = useCallback(() => {\n      if (!triggerRef.current) return;\n      const rect = triggerRef.current.getBoundingClientRect();\n      setPopoverStyle({\n        position: 'fixed',\n        top: rect.bottom + 4,\n        left: rect.left,\n        minWidth: Math.max(rect.width, 240),\n        zIndex: 9999,\n      });\n    }, []);\n\n    const setTriggerRef = useCallback((node: HTMLDivElement | null) => {\n      (triggerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n      if (!node) {\n        setPortalContainer(null);\n        return;\n      }\n      const rootNode = node.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        const existing = rootNode.querySelector<HTMLElement>(\n          '[data-bs-entry-select-portal]',\n        );\n        if (existing) {\n          setPortalContainer(existing);\n          return;\n        }\n        const container = document.createElement('div');\n        container.setAttribute('data-bs-entry-select-portal', 'true');\n        rootNode.appendChild(container);\n        setPortalContainer(container);\n        return;\n      }\n      setPortalContainer(null);\n    }, []);\n\n    const handleClose = useCallback(() => {\n      setIsOpen(false);\n      setSearchQuery('');\n      if (triggerRef.current) {\n        triggerRef.current.style.backgroundColor = '';\n      }\n    }, []);\n\n    const handleToggle = useCallback(() => {\n      if (disabled) return;\n      if (isOpen) {\n        handleClose();\n      } else {\n        setIsOpen(true);\n        updatePopoverPosition();\n      }\n    }, [disabled, isOpen, handleClose, updatePopoverPosition]);\n\n    const handleSelect = useCallback(\n      (result: BsEntrySelectChangeResult) => {\n        setInternalValue(result.entry.entryId);\n        onChange?.(result);\n        handleClose();\n      },\n      [onChange, handleClose],\n    );\n\n    // Event listeners for popover (click outside, scroll, resize)\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const handleClickOutside = (e: MouseEvent) => {\n        const path = e.composedPath();\n        if (\n          (popoverRef.current && path.includes(popoverRef.current)) ||\n          (triggerRef.current && path.includes(triggerRef.current))\n        ) {\n          return;\n        }\n        handleClose();\n      };\n\n      const handleScroll = () => {\n        updatePopoverPosition();\n      };\n\n      const handleResize = () => {\n        updatePopoverPosition();\n      };\n\n      document.addEventListener('mousedown', handleClickOutside);\n      window.addEventListener('scroll', handleScroll, true);\n      window.addEventListener('resize', handleResize);\n\n      return () => {\n        document.removeEventListener('mousedown', handleClickOutside);\n        window.removeEventListener('scroll', handleScroll, true);\n        window.removeEventListener('resize', handleResize);\n      };\n    }, [isOpen, handleClose, updatePopoverPosition]);\n\n    // Keyboard escape listener\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const handleEscape = (e: KeyboardEvent) => {\n        if (e.key === 'Escape') {\n          handleClose();\n        }\n      };\n\n      document.addEventListener('keydown', handleEscape);\n      return () => document.removeEventListener('keydown', handleEscape);\n    }, [isOpen, handleClose]);\n\n    const hasCurrentApp = Boolean(currentAppId && appDetails[currentAppId]);\n    const hasOtherApps = otherAppIds.length > 0;\n    const hasAnyContent = hasCurrentApp || hasOtherApps;\n\n    const currentAppTree = useMemo(() => {\n      if (!currentAppId || !appDetails[currentAppId]) return [];\n      return buildEntryTreeFromAliasMap(appDetails[currentAppId], searchQuery);\n    }, [\n      appDetails,\n      currentAppId,\n      searchQuery,\n      currentAppId != null ? (appDetails[currentAppId]?.entryList?.length ?? 0) : 0,\n    ]);\n\n    const hasSearch = searchQuery.trim().length > 0;\n\n    const isTabMode = sliderVariant === 'tabs';\n\n    const tabCls = isTabMode ? \"h-full\" : \"\"\n\n    return (\n      <div ref={ref} className={cn('relative inline-flex items-center gap-[10px] min-w-0', tabCls ,className)}>\n        {/* Scroll slider — greedy width */}\n        {showSlider && (\n          <ScrollSlider\n            appDetails={appDetails}\n            currentAppId={currentAppId}\n            selectedEntryId={selectedEntryId}\n            onSelect={handleSelect}\n            onOverflowChange={handleOverflowChange}\n            showCurrentAppEntriesOnly={showCurrentAppEntriesOnly}\n            variant={sliderVariant}\n          />\n        )}\n\n        {/* Trigger — hidden when slider shows all nodes without overflow */}\n        {(!showSlider || sliderHasOverflow) && (\n          <div\n            ref={setTriggerRef}\n            className={cn(\n              'flex items-center gap-[10px] px-[10px] py-[7px] rounded-[4px] cursor-pointer select-none shrink-0',\n              transCls,\n              isOpen && 'bg-[#EFF0F6]',\n              disabled && 'opacity-50 cursor-not-allowed',\n            )}\n            onClick={handleToggle}\n          onMouseEnter={(e) => {\n            if (!isOpen && !disabled) {\n              (e.currentTarget as HTMLElement).style.backgroundColor =\n                '#EFF0F6';\n            }\n          }}\n          onMouseLeave={(e) => {\n            if (!isOpen) {\n              (e.currentTarget as HTMLElement).style.backgroundColor = '';\n            }\n          }}\n        >\n          <span className=\"flex items-center gap-[10px] min-w-0 flex-1\">\n            <MenuLinesIcon />\n            <span>全部</span>\n            {/* {selectedResult ? (\n              <>\n                <i\n                  className={getEntryIconClass(selectedResult.entry)}\n                  style={{ fontSize: 16, lineHeight: 1 }}\n                />\n                <span className=\"text-[14px] text-[#030303] truncate\">\n                  {selectedResult.entry.name}\n                </span>\n              </>\n            ) : (\n              <span className=\"text-[14px] text-[#999999] truncate\">\n                {placeholder}\n              </span>\n            )} */}\n          </span>\n          {/* <span\n            className={cn(\n              'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n              transCls,\n              isOpen && 'rotate-180',\n            )}\n          >\n            <ChevronDownIcon size={16} />\n          </span> */}\n        </div>\n        )}\n\n        {/* Popover */}\n        {isOpen &&\n          createPortal(\n            <div ref={popoverRef} style={popoverStyle}>\n              <EntryPopover\n                searchQuery={searchQuery}\n                onSearchChange={setSearchQuery}\n                currentAppTree={currentAppTree}\n                currentAppId={currentAppId}\n                otherAppIds={otherAppIds}\n                appDetails={appDetails}\n                selectedEntryId={selectedEntryId}\n                hasCurrentApp={hasCurrentApp}\n                hasOtherApps={hasOtherApps}\n                hasAnyContent={hasAnyContent}\n                hasSearch={hasSearch}\n                showCurrentAppEntriesOnly={showCurrentAppEntriesOnly}\n                onSelect={handleSelect}\n              />\n            </div>,\n            portalContainer || document.body,\n          )}\n      </div>\n    );\n  },\n);\n\nBsEntrySelect.displayName = 'BsEntrySelect';\n","import React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface BorderAnimationProps {\n  children?: React.ReactNode;\n  className?: string;\n  /** Duration of one full animation cycle in seconds @default 2 */\n  duration?: number;\n  /** Border radius in pixels @default 4 */\n  borderRadius?: number;\n  /** Width of the animated beam in pixels @default 30 */\n  beamWidth?: number;\n  /** Height of the animated beam in pixels @default 4 */\n  beamHeight?: number;\n  /** Gradient for the animated beam */\n  gradient?: string;\n  height?: string | number;\n  /** Border width in pixels @default 1.5 */\n  borderWidth?: number;\n  /** Default border color @default '#E5E5E5' */\n  borderColor?: string;\n}\n\nconst defaultGradient = `linear-gradient(90deg, \n  rgba(132, 180, 255, 0) 0%, \n  rgba(132, 180, 255, 0.5) 10%, \n  rgba(132, 180, 255, 1) 25%, \n  rgb(2, 101, 255) 50%, \n  rgba(177, 250, 255, 1) 75%, \n  rgba(177, 250, 255, 0.5) 90%, \n  rgba(177, 250, 255, 0) 100%\n)`;\n\nexport const BorderAnimation: React.FC<BorderAnimationProps> = ({\n  children,\n  className,\n  duration = 2,\n  borderRadius = 4,\n  beamWidth = 170,\n  beamHeight = 4,\n//   gradient = 'linear-gradient(180deg, #84B4FF 0%, #0265FF 50%, #B1FAFF 100%)',\n//   gradient = 'linear-gradient(90deg, rgb(132, 180, 255) 0%, rgb(2, 101, 255) 50%, rgb(177, 250, 255) 100%)',\n  gradient = defaultGradient,\n  borderWidth = 1,\n  height,\n  borderColor = 'transparent',\n}) => {\n    const pseudoCls = \"gradient-border\"\n  return (\n    <div\n      className={cn('relative w-full overflow-hidden', className, pseudoCls)}\n      style={{\n        borderRadius: `${borderRadius}px`,\n        border: `${borderWidth}px solid ${borderColor}`,\n        ...(height ? { height } : {}),\n      }}\n    >\n      {children}\n      {/* Animated border overlay */}\n      <div\n        style={{\n          position: 'absolute',\n        //   inset: `${-borderWidth}px`,\n          inset: 0,\n          pointerEvents: 'none',\n          border: `${borderWidth}px solid transparent`,\n          borderRadius: 'inherit',\n        //   contain: 'layout style paint',\n          maskImage:\n            'linear-gradient(transparent, transparent), linear-gradient(white, white)',\n          WebkitMaskImage:\n            'linear-gradient(transparent, transparent), linear-gradient(white, white)',\n          maskOrigin: 'border-box, border-box',\n          WebkitMaskOrigin: 'border-box, border-box',\n          maskClip: 'padding-box, border-box',\n          WebkitMaskClip: 'padding-box, border-box',\n          maskComposite: 'intersect',\n          WebkitMaskComposite: 'source-in',\n        }}\n      >\n        {/* Traveling beam */}\n        <div\n          style={{\n            position: 'absolute',\n            aspectRatio: '1 / 1',\n            width: `${beamWidth}px`,\n            height: `${beamHeight}px`,\n            background: gradient,\n            offsetPath: `rect(0px auto auto 0px round ${borderRadius}px)`,\n            animation: `bs-border-travel ${duration}s linear infinite`,\n            willChange: 'offset-distance',\n            transform: 'translateZ(0)',\n            backfaceVisibility: 'hidden',\n          }}\n        />\n      </div>\n      <style>{`\n        @keyframes bs-border-travel {\n          0% { offset-distance: 0%; }\n          100% { offset-distance: 100%; }\n        }\n      `}</style>\n    </div>\n  );\n};\n\nexport default BorderAnimation;\n","export const BorderColorAnimation = ({\n  children,\n  width,\n  height,\n  padding,\n  borderWidth = 2,\n  borderRadius = 12,\n  bgInset,\n  style,\n}: {\n  children?: React.ReactNode;\n  width?: string | number;\n  height?: string | number;\n  borderWidth?: number;\n  padding?: number;\n  borderRadius?: number;\n  bgInset?: number;\n  style?: React.CSSProperties;\n}) => {\n  const isNumSize = typeof width === 'number' && typeof height === 'number';\n  const safeSize = isNumSize ? Math.max(width ?? 0, height ?? 0) : 0;\n  const safeInset = isNumSize ? -1 * safeSize * 1.5 : '-150%'; // ensure the background covers the whole area during rotation\n  return (\n    <div\n      style={{\n        position: 'relative',\n        width: width ?? '100%',\n        height: height ?? '100%',\n        borderRadius,\n        overflow: 'hidden',\n      }}\n    >\n      <div\n        style={{\n          position: 'absolute',\n          inset: bgInset !== undefined ? -bgInset : safeInset,\n          background: 'conic-gradient(from 0deg, #0265FF, #00D4FF, #0265FF, #00D4FF, #0265FF)',\n          animation: 'borderRotate 4s linear infinite',\n        }}\n      />\n      <div\n        style={{\n          ...style,\n          position: 'absolute',\n          inset: borderWidth,\n          borderRadius: borderRadius - 2,\n          background: 'white',\n          zIndex: 1,\n          padding: padding || 0,\n        }}\n      >\n        {children}\n      </div>\n      <style>{`\n        @keyframes borderRotate {\n          0% {\n            transform: rotate(0deg);\n          }\n          100% {\n            transform: rotate(360deg);\n          }\n        }\n      `}</style>\n    </div>\n  );\n};\n","import { BotImgUrl } from \"../const/ui\";\n\nexport const BotIcon = ({\n  size = 30,\n  className,\n}: {\n  size?: number;\n  className?: string;\n}) => {\n  return (\n    <div\n      className={className}\n      style={{\n        backgroundImage: `${BotImgUrl}`,\n        backgroundRepeat: \"no-repeat\",\n        backgroundSize: \"cover\",\n        width: size,\n        height: size,\n        aspectRatio: \"1/1\",\n      }}\n    />\n  );\n};\n","import { BotIcon } from './bot-icon';\n\nexport const BotAvatarAndName = ({\n  name,\n  icon,\n  variant = 'default',\n}: {\n  name?: string;\n  icon?: React.ReactNode | string;\n  variant?: 'default' | 'active';\n}) => {\n  const size = variant === 'default' ? 20 : 24;\n\n  if (!name) {\n    return null;\n  }\n\n  const variantStyles = {\n    default: 'text-[#999] text-[14px] font-[400]',\n    active: 'text-[#0265FF] text-[14px] font-[700]',\n  };\n\n  const isUrl = typeof icon === 'string' && /^https?:\\/\\//.test(icon);\n  const iconJsx = isUrl ? (\n    <img src={icon as string} alt=\"\" className=\"rounded-full\" width={size} height={size} />\n  ) : (\n    icon || <BotIcon size={size} />\n  );\n\n  return (\n    <div className=\"flex items-center gap-1.5\">\n      {iconJsx}\n      <div className={variantStyles[variant]}>{name}</div>\n    </div>\n  );\n};\n","import { cn } from '../lib/utils';\nimport { ReactNode } from 'react';\n\nexport interface CardFieldProps {\n  label: string;\n  children?: ReactNode;\n  className?: string;\n}\n\nexport const CardField = ({ label, children, className }: CardFieldProps) => {\n  return (\n    <div className={cn('flex gap-2 items-start w-full', className)}>\n      <div className=\"w-[100px] shrink-0 text-[#666] text-sm leading-normal truncate\">{label}</div>\n      <div className=\"flex-1 min-w-0 text-sm leading-normal whitespace-pre-wrap break-words\">\n        {children ?? <span className=\"text-[#666]\">无</span>}\n      </div>\n    </div>\n  );\n};\n\nexport const CardFieldsWrapper = ({ children }: { children: ReactNode }) => {\n  return <div className=\"flex flex-col gap-[10px] w-full\">{children}</div>;\n};\n","import { transCls } from '../const/ui';\nimport { cn } from '../lib/utils';\nimport { ReactNode } from 'react';\n\nexport interface CardProps {\n  title: string;\n  desc?: string;\n  index?: number;\n  icon?: ReactNode;\n  iconCode?: string;\n  onClick?: (title: string, iconCode?: string) => void;\n}\n\nexport const Card = ({ title, desc, index, icon, onClick, iconCode }: CardProps) => {\n  return (\n    <div\n      className={cn(\n        'bs-card group flex flex-col cursor-pointer p-2.5 gap-2.5 rounded-lg max-w-[350px] border border-[#e0e0e0] bg-white',\n        {\n          transCls,\n        }\n      )}\n      onClick={() => {\n        onClick?.(title, iconCode);\n      }}\n    >\n      <div className=\"px-2.5 flex items-center gap-1.5 rounded-[4px] h-[34px]  bg-white\">\n        {index === undefined ? null : <div>{index}</div>}\n        {icon === undefined ? null : <div className=\"text-[#0265FF]\">{icon}</div>}\n        {/* make title text ellipsis */}\n        <div className=\"truncate !text-[#12111] group-hover:text-[#0265FF]\">{title}</div>\n      </div>\n      <div className=\"text-[#666] leading-5 text-[12px]\">{desc}</div>\n    </div>\n  );\n};\n","import { ReactNode } from 'react';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\n\nexport interface IconCardProps {\n  icon: ReactNode;\n  iconBgColor: string;\n  title: string;\n  description: string;\n  height?: number;\n  selected?: boolean;\n  badge?: string;\n  onClick: () => void;\n}\n\nexport const IconCard = ({\n  icon,\n  iconBgColor,\n  title,\n  description,\n  height,\n  selected,\n  badge,\n  onClick,\n}: IconCardProps) => {\n  return (\n    <div\n      className={cn(\n        'flex flex-col p-[10px] rounded-[4px] cursor-pointer',\n        'border',\n        {\n          'bg-[#EFF0F6] border-[#EFF0F6]': selected,\n          'bg-white border-[#E0E0E0]': !selected,\n        },\n        transCls\n      )}\n      style={{ height }}\n      onClick={onClick}\n    >\n      <div className=\"flex items-start gap-[12px] w-full\">\n        <div\n          className=\"shrink-0 size-[42px] rounded-[23px] flex items-center justify-center p-[7px]\"\n          style={{ backgroundColor: iconBgColor }}\n        >\n          <div className=\"size-[28px] flex items-center justify-center\">\n            {icon}\n          </div>\n        </div>\n        <div className=\"flex flex-col gap-[6px] min-w-0 flex-1\">\n          <div className=\"flex items-center justify-between w-full\">\n            <p className=\"text-[14px] font-bold text-[#030303] truncate\">\n              {title}\n            </p>\n            {badge && (\n              <span className=\"shrink-0 bg-[#4ACCC1] text-white text-[12px] leading-[normal] px-[6px] h-[20px] rounded-[4px] flex items-center justify-center ml-[8px]\">\n                {badge}\n              </span>\n            )}\n          </div>\n          <p className=\"text-[12px] text-[#999] w-full\">\n            {description}\n          </p>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import { cn } from '../../../lib/utils';\nimport { IAgentInfo } from '@baishuyun/types';\n\nexport interface AgentTagProps {\n  agent: IAgentInfo;\n  className?: string;\n}\n\nexport const AgentTag = ({ agent, className }: AgentTagProps) => {\n  return (\n    <div\n      className={cn(\n        'bg-[#e5e6eb] content-stretch flex gap-[4px] items-center px-[6px] rounded-[100px] w-fit h-[26px]',\n        className,\n      )}\n    >\n      <div className=\"relative rounded-[3.5px] shrink-0 size-[14px]\">\n        <img\n          alt=\"\"\n          className=\"absolute inset-0 max-w-none object-cover pointer-events-none rounded-[3.5px] size-full\"\n          src={agent.icon}\n        />\n      </div>\n      <p className=\"leading-[normal] shrink-0 text-[#030303] text-[12px] whitespace-nowrap\">\n        {agent.name}\n      </p>\n    </div>\n  );\n};\n","import type { triggerType } from '@baishuyun/types';\nimport { CommonTypeIcon, GoToFormIcon, FlowNodeTypeIcon, ScheduleTypeIcon, FormFieldIcon, FormTypeIcon } from '../../bs-icons';\nimport { IconCard, type IconCardProps } from '../../icon-card';\n\nexport type TriggerCardConfig = Pick<\n  IconCardProps,\n  'title' | 'description' | 'icon' | 'iconBgColor' | 'badge'\n> & {\n  triggerType: triggerType;\n  minIcon?: React.ReactNode;\n};\n\nexport const TriggerConfigList: Array<TriggerCardConfig> = [\n  {\n    triggerType: 'universal',\n    title: '通用型',\n    description: '开箱即用，无需触发即可直接使用',\n    icon: <CommonTypeIcon fill=\"#4ACCC1\" />,\n    minIcon: <CommonTypeIcon fill=\"#4ACCC1\" size={12} />,\n    iconBgColor: 'rgba(74, 204, 193, 0.1)',\n    badge: '通用',\n  },\n  {\n    triggerType: 'form_field',\n    title: '表单字段触发',\n    description: '表单中数据发生变化时，触发自动化操作',\n    icon: <FormFieldIcon />,\n    minIcon: <FormFieldIcon size={12} />,\n    iconBgColor: 'rgba(77, 96, 159, 0.1)',\n  },\n  {\n    triggerType: 'form_action',\n    title: '表单动作触发',\n    description: '表单中数据发生变化时，触发自动化操作',\n    icon: (\n      <div className=\"text-[#0265FF]\">\n        <GoToFormIcon />\n      </div>\n    ),\n    minIcon: <FormTypeIcon size={12} />,\n    iconBgColor: 'rgba(2, 101, 255, 0.1)',\n  },\n  {\n    triggerType: 'form_flow_node',\n    title: '表单流程节点触发',\n    description: '表单中数据发生变化时，触发自动化操作',\n    icon: (\n      <div className=\"text-[#FF9921]\">\n        <FlowNodeTypeIcon />\n      </div>\n    ),\n    minIcon: <FlowNodeTypeIcon size={12} />,\n    iconBgColor: 'rgba(255, 153, 33, 0.1)',\n  },\n  // {\n  //   triggerType: 'scheduler',\n  //   title: '计划任务触发',\n  //   description: '表单中数据发生变化时，触发自动化操作',\n  //   icon: (\n  //     <div className=\"text-[#F06648]\">\n  //       <ScheduleTypeIcon />\n  //     </div>\n  //   ),\n  //   minIcon: <ScheduleTypeIcon size={12} />,\n  //   iconBgColor: 'rgba(240, 102, 72, 0.1)',\n  // },\n];\n\nexport interface ITriggerSelectProps {\n  value?: triggerType;\n  onChange?: (value: triggerType) => void;\n  configList?: TriggerCardConfig[];\n}\n\nexport const TriggerTypeIcon = ({\n  triggerType,\n}: {\n  triggerType: triggerType;\n  size?: number;\n}) => {\n  const config = TriggerConfigList.find((c) => c.triggerType === triggerType);\n  if (!config) {\n    return null;\n  }\n\n  const {minIcon, iconBgColor } = config;\n\n  return (\n    <div\n      className={`shrink-0 rounded-full flex items-center justify-center p-[7px]`}\n      style={{ backgroundColor: iconBgColor, width: 18, height: 18 }}\n    >\n      <div className={`flex items-center justify-center`}>\n          {minIcon}\n      </div>\n    </div>\n  )\n}\n\nexport const TriggerSelect = ({\n  value,\n  onChange,\n  configList = TriggerConfigList,\n}: ITriggerSelectProps) => {\n  return (\n    <div className=\"grid grid-cols-3 gap-5\">\n      {configList.map((config) => (\n        <IconCard\n          key={config.triggerType}\n          icon={config.icon}\n          iconBgColor={config.iconBgColor}\n          title={config.title}\n          description={config.description}\n          badge={config.badge}\n          selected={value === config.triggerType}\n          onClick={() => onChange?.(config.triggerType)}\n        />\n      ))}\n    </div>\n  );\n};\n","\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeCollapsible,\n      open: openProp,\n      defaultOpen,\n      disabled,\n      onOpenChange,\n      ...collapsibleProps\n    } = props;\n    const [open, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen ?? false,\n      onChange: onOpenChange,\n      caller: COLLAPSIBLE_NAME\n    });\n    return /* @__PURE__ */ jsx(\n      CollapsibleProvider,\n      {\n        scope: __scopeCollapsible,\n        disabled,\n        contentId: useId(),\n        open,\n        onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            \"data-state\": getState(open),\n            \"data-disabled\": disabled ? \"\" : void 0,\n            ...collapsibleProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeCollapsible, ...triggerProps } = props;\n    const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"aria-expanded\": context.open || false,\n        \"data-state\": getState(context.open),\n        \"data-disabled\": context.disabled ? \"\" : void 0,\n        disabled: context.disabled,\n        ...triggerProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n  }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const { forceMount, ...contentProps } = props;\n    const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n  }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n  const { __scopeCollapsible, present, children, ...contentProps } = props;\n  const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n  const [isPresent, setIsPresent] = React.useState(present);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const heightRef = React.useRef(0);\n  const height = heightRef.current;\n  const widthRef = React.useRef(0);\n  const width = widthRef.current;\n  const isOpen = context.open || isPresent;\n  const isMountAnimationPreventedRef = React.useRef(isOpen);\n  const originalStylesRef = React.useRef(void 0);\n  React.useEffect(() => {\n    const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n    return () => cancelAnimationFrame(rAF);\n  }, []);\n  useLayoutEffect(() => {\n    const node = ref.current;\n    if (node) {\n      originalStylesRef.current = originalStylesRef.current || {\n        transitionDuration: node.style.transitionDuration,\n        animationName: node.style.animationName\n      };\n      node.style.transitionDuration = \"0s\";\n      node.style.animationName = \"none\";\n      const rect = node.getBoundingClientRect();\n      heightRef.current = rect.height;\n      widthRef.current = rect.width;\n      if (!isMountAnimationPreventedRef.current) {\n        node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n        node.style.animationName = originalStylesRef.current.animationName;\n      }\n      setIsPresent(present);\n    }\n  }, [context.open, present]);\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"data-state\": getState(context.open),\n      \"data-disabled\": context.disabled ? \"\" : void 0,\n      id: context.contentId,\n      hidden: !isOpen,\n      ...contentProps,\n      ref: composedRefs,\n      style: {\n        [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n        [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n        ...props.style\n      },\n      children: isOpen && children\n    }\n  );\n});\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n  Content,\n  Root,\n  Trigger,\n  createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n  const {\n    __scopeCheckbox,\n    checked: checkedProp,\n    children,\n    defaultChecked,\n    disabled,\n    form,\n    name,\n    onCheckedChange,\n    required,\n    value = \"on\",\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const [checked, setChecked] = useControllableState({\n    prop: checkedProp,\n    defaultProp: defaultChecked ?? false,\n    onChange: onCheckedChange,\n    caller: CHECKBOX_NAME\n  });\n  const [control, setControl] = React.useState(null);\n  const [bubbleInput, setBubbleInput] = React.useState(null);\n  const hasConsumerStoppedPropagationRef = React.useRef(false);\n  const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    true\n  );\n  const context = {\n    checked,\n    disabled,\n    setChecked,\n    control,\n    setControl,\n    name,\n    form,\n    value,\n    hasConsumerStoppedPropagationRef,\n    required,\n    defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n    isFormControl,\n    bubbleInput,\n    setBubbleInput\n  };\n  return /* @__PURE__ */ jsx(\n    CheckboxProviderImpl,\n    {\n      scope: __scopeCheckbox,\n      ...context,\n      children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n    }\n  );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n  ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n    const {\n      control,\n      value,\n      disabled,\n      checked,\n      required,\n      setControl,\n      setChecked,\n      hasConsumerStoppedPropagationRef,\n      isFormControl,\n      bubbleInput\n    } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n    const initialCheckedStateRef = React.useRef(checked);\n    React.useEffect(() => {\n      const form = control?.form;\n      if (form) {\n        const reset = () => setChecked(initialCheckedStateRef.current);\n        form.addEventListener(\"reset\", reset);\n        return () => form.removeEventListener(\"reset\", reset);\n      }\n    }, [control, setChecked]);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"checkbox\",\n        \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n        \"aria-required\": required,\n        \"data-state\": getState(checked),\n        \"data-disabled\": disabled ? \"\" : void 0,\n        disabled,\n        value,\n        ...checkboxProps,\n        ref: composedRefs,\n        onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n          if (event.key === \"Enter\") event.preventDefault();\n        }),\n        onClick: composeEventHandlers(onClick, (event) => {\n          setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n          if (bubbleInput && isFormControl) {\n            hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n            if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n          }\n        })\n      }\n    );\n  }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeCheckbox,\n      name,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      value,\n      onCheckedChange,\n      form,\n      ...checkboxProps\n    } = props;\n    return /* @__PURE__ */ jsx(\n      CheckboxProvider,\n      {\n        __scopeCheckbox,\n        checked,\n        defaultChecked,\n        disabled,\n        required,\n        onCheckedChange,\n        name,\n        form,\n        value,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n          /* @__PURE__ */ jsx(\n            CheckboxTrigger,\n            {\n              ...checkboxProps,\n              ref: forwardedRef,\n              __scopeCheckbox\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx(\n            CheckboxBubbleInput,\n            {\n              __scopeCheckbox\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n    const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n    return /* @__PURE__ */ jsx(\n      Presence,\n      {\n        present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n        children: /* @__PURE__ */ jsx(\n          Primitive.span,\n          {\n            \"data-state\": getState(context.checked),\n            \"data-disabled\": context.disabled ? \"\" : void 0,\n            ...indicatorProps,\n            ref: forwardedRef,\n            style: { pointerEvents: \"none\", ...props.style }\n          }\n        )\n      }\n    );\n  }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n  ({ __scopeCheckbox, ...props }, forwardedRef) => {\n    const {\n      control,\n      hasConsumerStoppedPropagationRef,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      name,\n      value,\n      form,\n      bubbleInput,\n      setBubbleInput\n    } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n    const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n    const prevChecked = usePrevious(checked);\n    const controlSize = useSize(control);\n    React.useEffect(() => {\n      const input = bubbleInput;\n      if (!input) return;\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        inputProto,\n        \"checked\"\n      );\n      const setChecked = descriptor.set;\n      const bubbles = !hasConsumerStoppedPropagationRef.current;\n      if (prevChecked !== checked && setChecked) {\n        const event = new Event(\"click\", { bubbles });\n        input.indeterminate = isIndeterminate(checked);\n        setChecked.call(input, isIndeterminate(checked) ? false : checked);\n        input.dispatchEvent(event);\n      }\n    }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n    const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n    return /* @__PURE__ */ jsx(\n      Primitive.input,\n      {\n        type: \"checkbox\",\n        \"aria-hidden\": true,\n        defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n        required,\n        disabled,\n        name,\n        value,\n        form,\n        ...props,\n        tabIndex: -1,\n        ref: composedRefs,\n        style: {\n          ...props.style,\n          ...controlSize,\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0,\n          // We transform because the input is absolutely positioned but we have\n          // rendered it **after** the button. This pulls it back to sit on top\n          // of the button.\n          transform: \"translateX(-100%)\"\n        }\n      }\n    );\n  }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n  return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n  return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n  Checkbox,\n  CheckboxIndicator,\n  CheckboxIndicator as Indicator,\n  Checkbox as Root,\n  createCheckboxScope,\n  CheckboxBubbleInput as unstable_BubbleInput,\n  CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n  CheckboxProvider as unstable_CheckboxProvider,\n  CheckboxTrigger as unstable_CheckboxTrigger,\n  CheckboxProvider as unstable_Provider,\n  CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n  GROUP_NAME,\n  [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n  }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n  const {\n    __scopeRovingFocusGroup,\n    orientation,\n    loop = false,\n    dir,\n    currentTabStopId: currentTabStopIdProp,\n    defaultCurrentTabStopId,\n    onCurrentTabStopIdChange,\n    onEntryFocus,\n    preventScrollOnEntryFocus = false,\n    ...groupProps\n  } = props;\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const direction = useDirection(dir);\n  const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n    prop: currentTabStopIdProp,\n    defaultProp: defaultCurrentTabStopId ?? null,\n    onChange: onCurrentTabStopIdChange,\n    caller: GROUP_NAME\n  });\n  const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n  const handleEntryFocus = useCallbackRef(onEntryFocus);\n  const getItems = useCollection(__scopeRovingFocusGroup);\n  const isClickFocusRef = React.useRef(false);\n  const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n      return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n    }\n  }, [handleEntryFocus]);\n  return /* @__PURE__ */ jsx(\n    RovingFocusProvider,\n    {\n      scope: __scopeRovingFocusGroup,\n      orientation,\n      dir: direction,\n      loop,\n      currentTabStopId,\n      onItemFocus: React.useCallback(\n        (tabStopId) => setCurrentTabStopId(tabStopId),\n        [setCurrentTabStopId]\n      ),\n      onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n      onFocusableItemAdd: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount + 1),\n        []\n      ),\n      onFocusableItemRemove: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount - 1),\n        []\n      ),\n      children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n          \"data-orientation\": orientation,\n          ...groupProps,\n          ref: composedRefs,\n          style: { outline: \"none\", ...props.style },\n          onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n            isClickFocusRef.current = true;\n          }),\n          onFocus: composeEventHandlers(props.onFocus, (event) => {\n            const isKeyboardFocus = !isClickFocusRef.current;\n            if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n              const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n              event.currentTarget.dispatchEvent(entryFocusEvent);\n              if (!entryFocusEvent.defaultPrevented) {\n                const items = getItems().filter((item) => item.focusable);\n                const activeItem = items.find((item) => item.active);\n                const currentItem = items.find((item) => item.id === currentTabStopId);\n                const candidateItems = [activeItem, currentItem, ...items].filter(\n                  Boolean\n                );\n                const candidateNodes = candidateItems.map((item) => item.ref.current);\n                focusFirst(candidateNodes, preventScrollOnEntryFocus);\n              }\n            }\n            isClickFocusRef.current = false;\n          }),\n          onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n        }\n      )\n    }\n  );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeRovingFocusGroup,\n      focusable = true,\n      active = false,\n      tabStopId,\n      children,\n      ...itemProps\n    } = props;\n    const autoId = useId();\n    const id = tabStopId || autoId;\n    const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n    const isCurrentTabStop = context.currentTabStopId === id;\n    const getItems = useCollection(__scopeRovingFocusGroup);\n    const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n    React.useEffect(() => {\n      if (focusable) {\n        onFocusableItemAdd();\n        return () => onFocusableItemRemove();\n      }\n    }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n    return /* @__PURE__ */ jsx(\n      Collection.ItemSlot,\n      {\n        scope: __scopeRovingFocusGroup,\n        id,\n        focusable,\n        active,\n        children: /* @__PURE__ */ jsx(\n          Primitive.span,\n          {\n            tabIndex: isCurrentTabStop ? 0 : -1,\n            \"data-orientation\": context.orientation,\n            ...itemProps,\n            ref: forwardedRef,\n            onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n              if (!focusable) event.preventDefault();\n              else context.onItemFocus(id);\n            }),\n            onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n            onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n              if (event.key === \"Tab\" && event.shiftKey) {\n                context.onItemShiftTab();\n                return;\n              }\n              if (event.target !== event.currentTarget) return;\n              const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n              if (focusIntent !== void 0) {\n                if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n                event.preventDefault();\n                const items = getItems().filter((item) => item.focusable);\n                let candidateNodes = items.map((item) => item.ref.current);\n                if (focusIntent === \"last\") candidateNodes.reverse();\n                else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n                  if (focusIntent === \"prev\") candidateNodes.reverse();\n                  const currentIndex = candidateNodes.indexOf(event.currentTarget);\n                  candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n                }\n                setTimeout(() => focusFirst(candidateNodes));\n              }\n            }),\n            children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n          }\n        )\n      }\n    );\n  }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n  ArrowLeft: \"prev\",\n  ArrowUp: \"prev\",\n  ArrowRight: \"next\",\n  ArrowDown: \"next\",\n  PageUp: \"first\",\n  Home: \"first\",\n  PageDown: \"last\",\n  End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n  if (dir !== \"rtl\") return key;\n  return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n  const key = getDirectionAwareKey(event.key, dir);\n  if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n  if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n  return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n  const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n  for (const candidate of candidates) {\n    if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n    candidate.focus({ preventScroll });\n    if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n  }\n}\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n  Item,\n  Root,\n  RovingFocusGroup,\n  RovingFocusGroupItem,\n  createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/radio-group.tsx\nimport * as React2 from \"react\";\nimport { composeEventHandlers as composeEventHandlers2 } from \"@radix-ui/primitive\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { Primitive as Primitive2 } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\n\n// src/radio.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar RADIO_NAME = \"Radio\";\nvar [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\nvar [RadioProviderImpl, useRadioContext] = createRadioContext(RADIO_NAME);\nfunction RadioProvider(props) {\n  const {\n    __scopeRadio,\n    checked = false,\n    children,\n    disabled,\n    form,\n    name,\n    onCheck,\n    required,\n    value = \"on\",\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const [control, setControl] = React.useState(null);\n  const [bubbleInput, setBubbleInput] = React.useState(null);\n  const hasConsumerStoppedPropagationRef = React.useRef(false);\n  const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    true\n  );\n  const context = {\n    checked,\n    disabled,\n    required,\n    name,\n    form,\n    value,\n    control,\n    setControl,\n    hasConsumerStoppedPropagationRef,\n    isFormControl,\n    bubbleInput,\n    setBubbleInput,\n    onCheck: () => onCheck?.()\n  };\n  return /* @__PURE__ */ jsx(RadioProviderImpl, { scope: __scopeRadio, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"RadioTrigger\";\nvar RadioTrigger = React.forwardRef(\n  ({ __scopeRadio, onClick, ...radioProps }, forwardedRef) => {\n    const {\n      checked,\n      disabled,\n      value,\n      setControl,\n      onCheck,\n      hasConsumerStoppedPropagationRef,\n      isFormControl,\n      bubbleInput\n    } = useRadioContext(TRIGGER_NAME, __scopeRadio);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"radio\",\n        \"aria-checked\": checked,\n        \"data-state\": getState(checked),\n        \"data-disabled\": disabled ? \"\" : void 0,\n        disabled,\n        value,\n        ...radioProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(onClick, (event) => {\n          if (!checked) onCheck();\n          if (bubbleInput && isFormControl) {\n            hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n            if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n          }\n        })\n      }\n    );\n  }\n);\nRadioTrigger.displayName = TRIGGER_NAME;\nvar Radio = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeRadio, name, checked, required, disabled, value, onCheck, form, ...radioProps } = props;\n    return /* @__PURE__ */ jsx(\n      RadioProvider,\n      {\n        __scopeRadio,\n        checked,\n        disabled,\n        required,\n        onCheck,\n        name,\n        form,\n        value,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n          /* @__PURE__ */ jsx(\n            RadioTrigger,\n            {\n              ...radioProps,\n              ref: forwardedRef,\n              __scopeRadio\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx(\n            RadioBubbleInput,\n            {\n              __scopeRadio\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nRadio.displayName = RADIO_NAME;\nvar INDICATOR_NAME = \"RadioIndicator\";\nvar RadioIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeRadio, forceMount, ...indicatorProps } = props;\n    const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.checked, children: /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        \"data-state\": getState(context.checked),\n        \"data-disabled\": context.disabled ? \"\" : void 0,\n        ...indicatorProps,\n        ref: forwardedRef\n      }\n    ) });\n  }\n);\nRadioIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"RadioBubbleInput\";\nvar RadioBubbleInput = React.forwardRef(\n  ({ __scopeRadio, ...props }, forwardedRef) => {\n    const {\n      control,\n      checked,\n      required,\n      disabled,\n      name,\n      value,\n      form,\n      bubbleInput,\n      setBubbleInput,\n      hasConsumerStoppedPropagationRef\n    } = useRadioContext(BUBBLE_INPUT_NAME, __scopeRadio);\n    const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n    const prevChecked = usePrevious(checked);\n    const controlSize = useSize(control);\n    React.useEffect(() => {\n      const input = bubbleInput;\n      if (!input) return;\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        inputProto,\n        \"checked\"\n      );\n      const setChecked = descriptor.set;\n      const bubbles = !hasConsumerStoppedPropagationRef.current;\n      if (prevChecked !== checked && setChecked) {\n        const event = new Event(\"click\", { bubbles });\n        setChecked.call(input, checked);\n        input.dispatchEvent(event);\n      }\n    }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n    const defaultCheckedRef = React.useRef(checked);\n    return /* @__PURE__ */ jsx(\n      Primitive.input,\n      {\n        type: \"radio\",\n        \"aria-hidden\": true,\n        defaultChecked: defaultCheckedRef.current,\n        required,\n        disabled,\n        name,\n        value,\n        form,\n        ...props,\n        tabIndex: -1,\n        ref: composedRefs,\n        style: {\n          ...props.style,\n          ...controlSize,\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0,\n          // We transform because the input is absolutely positioned but we have\n          // rendered it **after** the button. This pulls it back to sit on top\n          // of the button.\n          transform: \"translateX(-100%)\"\n        }\n      }\n    );\n  }\n);\nRadioBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction getState(checked) {\n  return checked ? \"checked\" : \"unchecked\";\n}\n\n// src/radio-group.tsx\nimport { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from \"react/jsx-runtime\";\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar RADIO_GROUP_NAME = \"RadioGroup\";\nvar [createRadioGroupContext, createRadioGroupScope] = createContextScope2(RADIO_GROUP_NAME, [\n  createRovingFocusGroupScope,\n  createRadioScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar useRadioScope = createRadioScope();\nvar [RadioGroupProvider, useRadioGroupContext] = createRadioGroupContext(RADIO_GROUP_NAME);\nvar RadioGroup = React2.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeRadioGroup,\n      name,\n      defaultValue,\n      value: valueProp,\n      required = false,\n      disabled = false,\n      orientation,\n      dir,\n      loop = true,\n      onValueChange,\n      ...groupProps\n    } = props;\n    const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n    const direction = useDirection(dir);\n    const [value, setValue] = useControllableState({\n      prop: valueProp,\n      defaultProp: defaultValue ?? null,\n      onChange: onValueChange,\n      caller: RADIO_GROUP_NAME\n    });\n    return /* @__PURE__ */ jsx2(\n      RadioGroupProvider,\n      {\n        scope: __scopeRadioGroup,\n        name,\n        required,\n        disabled,\n        value,\n        onValueChange: setValue,\n        children: /* @__PURE__ */ jsx2(\n          RovingFocusGroup.Root,\n          {\n            asChild: true,\n            ...rovingFocusGroupScope,\n            orientation,\n            dir: direction,\n            loop,\n            children: /* @__PURE__ */ jsx2(\n              Primitive2.div,\n              {\n                role: \"radiogroup\",\n                \"aria-required\": required,\n                \"aria-orientation\": orientation,\n                \"data-disabled\": disabled ? \"\" : void 0,\n                dir: direction,\n                ...groupProps,\n                ref: forwardedRef\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nRadioGroup.displayName = RADIO_GROUP_NAME;\nvar ITEM_NAME = \"RadioGroupItem\";\nvar ITEM_PROVIDER_NAME = \"RadioGroupItemProvider\";\nvar ITEM_TRIGGER_NAME = \"RadioGroupItemTrigger\";\nvar ITEM_BUBBLE_INPUT_NAME = \"RadioGroupItemBubbleInput\";\nfunction RadioGroupItemProvider(props) {\n  const {\n    __scopeRadioGroup,\n    value,\n    disabled,\n    children,\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const context = useRadioGroupContext(ITEM_PROVIDER_NAME, __scopeRadioGroup);\n  const radioScope = useRadioScope(__scopeRadioGroup);\n  const isDisabled = context.disabled || disabled;\n  return /* @__PURE__ */ jsx2(\n    RadioProvider,\n    {\n      ...radioScope,\n      checked: context.value === value,\n      disabled: isDisabled,\n      required: context.required,\n      name: context.name,\n      value,\n      onCheck: () => context.onValueChange(value),\n      internal_do_not_use_render,\n      children\n    }\n  );\n}\nvar RadioGroupItemTrigger = React2.forwardRef((props, forwardedRef) => {\n  const { __scopeRadioGroup, ...triggerProps } = props;\n  const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n  const radioScope = useRadioScope(__scopeRadioGroup);\n  const { checked, disabled } = useRadioContext(ITEM_TRIGGER_NAME, radioScope.__scopeRadio);\n  const ref = React2.useRef(null);\n  const composedRefs = useComposedRefs2(forwardedRef, ref);\n  const isArrowKeyPressedRef = React2.useRef(false);\n  React2.useEffect(() => {\n    const handleKeyDown = (event) => {\n      if (ARROW_KEYS.includes(event.key)) {\n        isArrowKeyPressedRef.current = true;\n      }\n    };\n    const handleKeyUp = () => isArrowKeyPressedRef.current = false;\n    document.addEventListener(\"keydown\", handleKeyDown);\n    document.addEventListener(\"keyup\", handleKeyUp);\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"keyup\", handleKeyUp);\n    };\n  }, []);\n  return /* @__PURE__ */ jsx2(\n    RovingFocusGroup.Item,\n    {\n      asChild: true,\n      ...rovingFocusGroupScope,\n      focusable: !disabled,\n      active: checked,\n      children: /* @__PURE__ */ jsx2(\n        RadioTrigger,\n        {\n          ...radioScope,\n          ...triggerProps,\n          ref: composedRefs,\n          onKeyDown: composeEventHandlers2(triggerProps.onKeyDown, (event) => {\n            if (event.key === \"Enter\") event.preventDefault();\n          }),\n          onFocus: composeEventHandlers2(triggerProps.onFocus, () => {\n            if (isArrowKeyPressedRef.current) {\n              ref.current?.click();\n            }\n          })\n        }\n      )\n    }\n  );\n});\nRadioGroupItemTrigger.displayName = ITEM_TRIGGER_NAME;\nvar RadioGroupItem = React2.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeRadioGroup, value, disabled, ...itemProps } = props;\n    return /* @__PURE__ */ jsx2(\n      RadioGroupItemProvider,\n      {\n        __scopeRadioGroup,\n        value,\n        disabled,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs2(Fragment2, { children: [\n          /* @__PURE__ */ jsx2(\n            RadioGroupItemTrigger,\n            {\n              ...itemProps,\n              ref: forwardedRef,\n              __scopeRadioGroup\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx2(\n            RadioGroupItemBubbleInput,\n            {\n              __scopeRadioGroup\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nRadioGroupItem.displayName = ITEM_NAME;\nvar RadioGroupItemBubbleInput = React2.forwardRef((props, forwardedRef) => {\n  const { __scopeRadioGroup, ...bubbleProps } = props;\n  const radioScope = useRadioScope(__scopeRadioGroup);\n  return /* @__PURE__ */ jsx2(RadioBubbleInput, { ...radioScope, ...bubbleProps, ref: forwardedRef });\n});\nRadioGroupItemBubbleInput.displayName = ITEM_BUBBLE_INPUT_NAME;\nvar INDICATOR_NAME2 = \"RadioGroupIndicator\";\nvar RadioGroupIndicator = React2.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeRadioGroup, ...indicatorProps } = props;\n    const radioScope = useRadioScope(__scopeRadioGroup);\n    return /* @__PURE__ */ jsx2(RadioIndicator, { ...radioScope, ...indicatorProps, ref: forwardedRef });\n  }\n);\nRadioGroupIndicator.displayName = INDICATOR_NAME2;\nexport {\n  RadioGroupIndicator as Indicator,\n  RadioGroupItem as Item,\n  RadioGroup,\n  RadioGroupIndicator,\n  RadioGroupItem,\n  RadioGroup as Root,\n  createRadioGroupScope,\n  RadioGroupItemBubbleInput as unstable_ItemBubbleInput,\n  RadioGroupItemProvider as unstable_ItemProvider,\n  RadioGroupItemTrigger as unstable_ItemTrigger,\n  RadioGroupItemBubbleInput as unstable_RadioGroupItemBubbleInput,\n  RadioGroupItemProvider as unstable_RadioGroupItemProvider,\n  RadioGroupItemTrigger as unstable_RadioGroupItemTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n  const {\n    __scopeSwitch,\n    checked: checkedProp,\n    children,\n    defaultChecked,\n    disabled,\n    form,\n    name,\n    onCheckedChange,\n    required,\n    value = \"on\",\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const [checked, setChecked] = useControllableState({\n    prop: checkedProp,\n    defaultProp: defaultChecked ?? false,\n    onChange: onCheckedChange,\n    caller: SWITCH_NAME\n  });\n  const [control, setControl] = React.useState(null);\n  const [bubbleInput, setBubbleInput] = React.useState(null);\n  const hasConsumerStoppedPropagationRef = React.useRef(false);\n  const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    true\n  );\n  const context = {\n    checked,\n    setChecked,\n    disabled,\n    control,\n    setControl,\n    name,\n    form,\n    value,\n    hasConsumerStoppedPropagationRef,\n    required,\n    defaultChecked,\n    isFormControl,\n    bubbleInput,\n    setBubbleInput\n  };\n  return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n  ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n    const {\n      value,\n      disabled,\n      checked,\n      required,\n      setControl,\n      setChecked,\n      hasConsumerStoppedPropagationRef,\n      isFormControl,\n      bubbleInput\n    } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"switch\",\n        \"aria-checked\": checked,\n        \"aria-required\": required,\n        \"data-state\": getState(checked),\n        \"data-disabled\": disabled ? \"\" : void 0,\n        disabled,\n        value,\n        ...switchProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(onClick, (event) => {\n          setChecked((prevChecked) => !prevChecked);\n          if (bubbleInput && isFormControl) {\n            hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n            if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n          }\n        })\n      }\n    );\n  }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSwitch,\n      name,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      value,\n      onCheckedChange,\n      form,\n      ...switchProps\n    } = props;\n    return /* @__PURE__ */ jsx(\n      SwitchProvider,\n      {\n        __scopeSwitch,\n        checked,\n        defaultChecked,\n        disabled,\n        required,\n        onCheckedChange,\n        name,\n        form,\n        value,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n          /* @__PURE__ */ jsx(\n            SwitchTrigger,\n            {\n              ...switchProps,\n              ref: forwardedRef,\n              __scopeSwitch\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx(\n            SwitchBubbleInput,\n            {\n              __scopeSwitch\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSwitch, ...thumbProps } = props;\n    const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        \"data-state\": getState(context.checked),\n        \"data-disabled\": context.disabled ? \"\" : void 0,\n        ...thumbProps,\n        ref: forwardedRef\n      }\n    );\n  }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n  ({ __scopeSwitch, ...props }, forwardedRef) => {\n    const {\n      control,\n      hasConsumerStoppedPropagationRef,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      name,\n      value,\n      form,\n      bubbleInput,\n      setBubbleInput\n    } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n    const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n    const prevChecked = usePrevious(checked);\n    const controlSize = useSize(control);\n    React.useEffect(() => {\n      const input = bubbleInput;\n      if (!input) return;\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        inputProto,\n        \"checked\"\n      );\n      const setChecked = descriptor.set;\n      const bubbles = !hasConsumerStoppedPropagationRef.current;\n      if (prevChecked !== checked && setChecked) {\n        const event = new Event(\"click\", { bubbles });\n        setChecked.call(input, checked);\n        input.dispatchEvent(event);\n      }\n    }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n    const defaultCheckedRef = React.useRef(checked);\n    return /* @__PURE__ */ jsx(\n      Primitive.input,\n      {\n        type: \"checkbox\",\n        \"aria-hidden\": true,\n        defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n        required,\n        disabled,\n        name,\n        value,\n        form,\n        ...props,\n        tabIndex: -1,\n        ref: composedRefs,\n        style: {\n          ...props.style,\n          ...controlSize,\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0,\n          // We transform because the input is absolutely positioned but we have\n          // rendered it **after** the button. This pulls it back to sit on top\n          // of the button.\n          transform: \"translateX(-100%)\"\n        }\n      }\n    );\n  }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction getState(checked) {\n  return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n  Switch as Root,\n  Switch,\n  SwitchThumb,\n  SwitchThumb as Thumb,\n  createSwitchScope,\n  SwitchBubbleInput as unstable_BubbleInput,\n  SwitchProvider as unstable_Provider,\n  SwitchBubbleInput as unstable_SwitchBubbleInput,\n  SwitchProvider as unstable_SwitchProvider,\n  SwitchTrigger as unstable_SwitchTrigger,\n  SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n  createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTabs,\n      value: valueProp,\n      onValueChange,\n      defaultValue,\n      orientation = \"horizontal\",\n      dir,\n      activationMode = \"automatic\",\n      ...tabsProps\n    } = props;\n    const direction = useDirection(dir);\n    const [value, setValue] = useControllableState({\n      prop: valueProp,\n      onChange: onValueChange,\n      defaultProp: defaultValue ?? \"\",\n      caller: TABS_NAME\n    });\n    return /* @__PURE__ */ jsx(\n      TabsProvider,\n      {\n        scope: __scopeTabs,\n        baseId: useId(),\n        value,\n        onValueChange: setValue,\n        orientation,\n        dir: direction,\n        activationMode,\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            dir: direction,\n            \"data-orientation\": orientation,\n            ...tabsProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, loop = true, ...listProps } = props;\n    const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n    const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n    return /* @__PURE__ */ jsx(\n      RovingFocusGroup.Root,\n      {\n        asChild: true,\n        ...rovingFocusGroupScope,\n        orientation: context.orientation,\n        dir: context.dir,\n        loop,\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            role: \"tablist\",\n            \"aria-orientation\": context.orientation,\n            ...listProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n    const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n    const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n    const triggerId = makeTriggerId(context.baseId, value);\n    const contentId = makeContentId(context.baseId, value);\n    const isSelected = value === context.value;\n    return /* @__PURE__ */ jsx(\n      RovingFocusGroup.Item,\n      {\n        asChild: true,\n        ...rovingFocusGroupScope,\n        focusable: !disabled,\n        active: isSelected,\n        children: /* @__PURE__ */ jsx(\n          Primitive.button,\n          {\n            type: \"button\",\n            role: \"tab\",\n            \"aria-selected\": isSelected,\n            \"aria-controls\": contentId,\n            \"data-state\": isSelected ? \"active\" : \"inactive\",\n            \"data-disabled\": disabled ? \"\" : void 0,\n            disabled,\n            id: triggerId,\n            ...triggerProps,\n            ref: forwardedRef,\n            onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n              if (!disabled && event.button === 0 && event.ctrlKey === false) {\n                context.onValueChange(value);\n              } else {\n                event.preventDefault();\n              }\n            }),\n            onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n              if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n            }),\n            onFocus: composeEventHandlers(props.onFocus, () => {\n              const isAutomaticActivation = context.activationMode !== \"manual\";\n              if (!isSelected && !disabled && isAutomaticActivation) {\n                context.onValueChange(value);\n              }\n            })\n          }\n        )\n      }\n    );\n  }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n    const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n    const triggerId = makeTriggerId(context.baseId, value);\n    const contentId = makeContentId(context.baseId, value);\n    const isSelected = value === context.value;\n    const isMountAnimationPreventedRef = React.useRef(isSelected);\n    React.useEffect(() => {\n      const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n      return () => cancelAnimationFrame(rAF);\n    }, []);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        \"data-state\": isSelected ? \"active\" : \"inactive\",\n        \"data-orientation\": context.orientation,\n        role: \"tabpanel\",\n        \"aria-labelledby\": triggerId,\n        hidden: !present,\n        id: contentId,\n        tabIndex: 0,\n        ...contentProps,\n        ref: forwardedRef,\n        style: {\n          ...props.style,\n          animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n        },\n        children: present && children\n      }\n    ) });\n  }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n  return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n  return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n  Content,\n  List,\n  Root2 as Root,\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n  Trigger,\n  createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Switch({\n  className,\n  size = \"default\",\n  ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n  size?: \"sm\" | \"default\"\n}) {\n  return (\n    <SwitchPrimitive.Root\n      data-slot=\"switch\"\n      data-size={size}\n      className={cn(\n        \"peer group/switch inline-flex shrink-0 items-center rounded-full transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-[#4ACC8C]/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[20px] data-[size=default]:w-[40px] data-[size=sm]:h-[14px] data-[size=sm]:w-[28px] data-[state=checked]:bg-[#4ACC8C] data-[state=unchecked]:bg-[#ccc]\",\n        className\n      )}\n      {...props}\n    >\n      <SwitchPrimitive.Thumb\n        data-slot=\"switch-thumb\"\n        className={cn(\n          \"pointer-events-none block rounded-full bg-white transition-transform group-data-[size=default]/switch:size-[16px] group-data-[size=sm]/switch:size-[10px] data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-[2px]\"\n        )}\n      />\n    </SwitchPrimitive.Root>\n  )\n}\n\nexport { Switch }\n","import { cn } from '../../../lib/utils';\nimport { TriggerTypeIcon } from '../trigger-select';\nimport { AgentTag } from '../agent-tag';\nimport { IconBtn } from '../../icon-btn';\nimport { Switch } from '../../ui/switch';\nimport { EditIcon, CopyIcon, TrashIcon } from '../../bs-icons';\nimport type { IAgentHelper, IAgentInfo, IBsFormService, IEntry } from '@baishuyun/types';\nimport { useEffect, useMemo, useState } from 'react';\n\nconst FORM_ACTION_LABELS: Record<string, string> = {\n  submit: '提交数据',\n  edit: '编辑数据',\n  delete: '删除数据',\n  init: '表单初始化',\n  edit_init: '表单编辑初始化',\n};\n\nconst FLOW_NODE_ACTION_LABELS: Record<string, string> = {\n  flow_end: '流程结束',\n  flow_node: '流程节点',\n};\n\nfunction useTriggerDescription(helper: IAgentHelper, formService?: IBsFormService): string {\n  const [entryInfo, setEntryInfo] = useState<IEntry | undefined>(undefined);\n\n  const fetchEntryInfo = async (appId: string, entryId: string) => {\n    const entryInfo = await formService?.getEntry({ appId, entryId });\n    setEntryInfo(entryInfo);\n  }\n\n  useEffect(() => {\n    if (!helper.appId || !helper.formId) {\n      return;\n    }\n\n    fetchEntryInfo(helper.appId, helper.formId);\n  }, [helper.appId, helper.formId])\n\n  const formName = entryInfo ? entryInfo.name : helper.formId;\n  const fieldDict = useMemo(() => {\n    const ret: Record<string, string> = {};\n    for (const i of (entryInfo?.content?.items ?? [])) {\n      const key = i.widget?.widgetName ?? \"\";\n      if (!key) {\n        continue;\n      }\n\n      ret[key] = i.label;\n    }\n    return ret;\n  }, [entryInfo?.content?.items])\n\n  const widgetName = fieldDict[helper.triggerFieldWidgetName ?? \"\"] ?? helper.triggerFieldWidgetName;\n\n  switch (helper.triggerType) {\n    case 'form_action': {\n      const actions =\n        helper.formActionTriggerType\n          ?.map((a) => FORM_ACTION_LABELS[a] || a)\n          .join('/') || '';\n      return actions ? `${formName}\\n${actions}` : formName;\n    }\n    case 'form_flow_node': {\n      const nodes =\n        helper.flowNodeTriggerType\n          ?.map((n) => FLOW_NODE_ACTION_LABELS[n] || n)\n          .join('/') || '';\n      return nodes ? `${formName}\\n${nodes}` : formName\n    }\n    case 'form_field': {\n      return helper.triggerFieldWidgetName\n        ? `${formName} / ${widgetName}`\n        : formName;\n    }\n    case 'universal':\n      return '开箱即用，无需触发';\n    case 'scheduler':\n      return '按计划时间触发';\n    default:\n      return '';\n  }\n}\n\nfunction buildAgentInfo(agentName?: string, agentIcon?: string): IAgentInfo | undefined {\n  if (!agentName && !agentIcon) {\n    return undefined;\n  }\n  return {\n    id: '',\n    name: agentName || '',\n    icon: agentIcon || '',\n  };\n}\n\nexport interface AgentHelperCardProps {\n  helper: IAgentHelper;\n  agentName?: string;\n  agentIcon?: string;\n  className?: string;\n  onEnabledChange?: (enabled: boolean) => void;\n  onViewLogs?: () => void;\n  onEdit?: () => void;\n  onCopy?: () => void;\n  onDelete?: () => void;\n\n  formService?: IBsFormService;\n}\n\nexport const AgentHelperCard = ({\n  helper,\n  agentName,\n  agentIcon,\n  className,\n  onEnabledChange,\n  onViewLogs,\n  onEdit,\n  onCopy,\n  onDelete,\n  formService,\n}: AgentHelperCardProps) => {\n  const description = useTriggerDescription(helper, formService);\n  const agent = buildAgentInfo(agentName, agentIcon);\n\n  return (\n    <div\n      className={cn(\n        'bg-white border border-[#e0e0e0] border-solid content-stretch flex flex-col items-start rounded-[10px] w-full group min-w-[335px]',\n        className,\n      )}\n    >\n      {/* Header */}\n      <div className=\"grid-rows-[max-content] inline-grid leading-[0] place-items-start shrink-0 w-full\">\n        <div className=\"col-1 content-stretch flex h-[42px] items-center justify-between ml-0 mt-0 px-[12px] row-1 w-full\">\n          <div className=\"content-stretch flex gap-[6px] items-center shrink-0 min-w-0\">\n            <TriggerTypeIcon triggerType={helper.triggerType} size={18} />\n            <p className=\"leading-[normal] shrink-0 text-[#030303] text-[14px] truncate\">\n              {helper.helperName}\n            </p>\n          </div>\n          <div className=\"content-stretch flex gap-[10px] items-center opacity-0 group-hover:opacity-100 transition-opacity shrink-0\">\n            {onEdit && (\n              <IconBtn icon={<EditIcon />} rounded onClick={onEdit} />\n            )}\n            {onCopy && (\n              <IconBtn icon={<CopyIcon />} rounded onClick={onCopy} />\n            )}\n            {onDelete && (\n              <IconBtn icon={<TrashIcon />} rounded onClick={onDelete} />\n            )}\n          </div>\n        </div>\n        <div className=\"col-1 h-0 ml-0 mt-[42px] row-1 w-full border-b border-[#e0e0e0]\" />\n      </div>\n\n      {/* Content */}\n      <div className=\"content-stretch flex flex-col h-[172px] items-start justify-between p-[12px] shrink-0 w-full\">\n        <div className=\"content-stretch flex flex-col gap-[6px] items-start shrink-0 text-[14px] w-full\">\n          <p className=\"min-w-full shrink-0 text-[#666] w-[min-content]\">\n            触发：\n          </p>\n          {description.split('\\n').map((line, i) => (\n            <p\n              key={i}\n              className=\"shrink-0 text-[#030303] whitespace-nowrap overflow-hidden text-ellipsis max-w-full\"\n            >\n              {line}\n            </p>\n          ))}\n        </div>\n        {agent && <AgentTag agent={agent} />}\n      </div>\n\n      {/* Footer */}\n      <div className=\"grid-rows-[max-content] inline-grid leading-[0] place-items-start shrink-0 w-full\">\n        <div className=\"col-1 h-0 ml-0 mt-0 row-1 w-full border-t border-[#e0e0e0]\" />\n        <div className=\"col-1 content-stretch flex h-[42px] items-center justify-between ml-0 mt-0 px-[12px] row-1 w-full\">\n          <Switch checked={helper.enabled} onCheckedChange={onEnabledChange} />\n          {onViewLogs && (\n            <button\n              className=\"leading-[normal] shrink-0 text-[#0265ff] text-[12px] whitespace-nowrap hover:underline\"\n              onClick={onViewLogs}\n            >\n              查看执行日志\n            </button>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n","import { cn } from '../../../lib/utils';\nimport { AgentHelperCard } from '../agent-helper-card';\nimport type { IAgentHelper, IBsFormService } from '@baishuyun/types';\n\nexport interface AgentHelperCardListProps {\n  items: Array<IAgentHelper>;\n  className?: string;\n  getAgentName?: (agentId: string) => string | undefined;\n  getAgentIcon?: (agentId: string) => string | undefined;\n  onEnabledChange?: (helperId: string, enabled: boolean) => void;\n  onViewLogs?: (helperId: string) => void;\n  onEdit?: (helperId: string) => void;\n  onCopy?: (helperId: string) => void;\n  onDelete?: (helperId: string) => void;\n  formService?: IBsFormService;\n}\n\nexport const AgentHelperCardList = ({\n  items,\n  className,\n  getAgentName,\n  getAgentIcon,\n  onEnabledChange,\n  onViewLogs,\n  onEdit,\n  onCopy,\n  onDelete,\n  formService,\n}: AgentHelperCardListProps) => {\n  return (\n    <div\n      className={cn(\n        'content-start flex flex-wrap gap-[20px] items-start',\n        className,\n      )}\n    >\n      {items.map((helper) => (\n        <AgentHelperCard\n          formService={formService}\n          key={helper.id}\n          helper={helper}\n          agentName={getAgentName?.(helper.agentId)}\n          agentIcon={getAgentIcon?.(helper.agentId)}\n          className=\"w-[335px] shrink-0\"\n          onEnabledChange={\n            onEnabledChange\n              ? (enabled) => onEnabledChange(helper.id, enabled)\n              : undefined\n          }\n          onViewLogs={\n            onViewLogs ? () => onViewLogs(helper.id) : undefined\n          }\n          onEdit={onEdit ? () => onEdit(helper.id) : undefined}\n          onCopy={onCopy ? () => onCopy(helper.id) : undefined}\n          onDelete={onDelete ? () => onDelete(helper.id) : undefined}\n        />\n      ))}\n    </div>\n  );\n};\n","import { cn } from '../../../lib/utils';\nimport { EmptyCardIcon } from '../../bs-icons';\n\nconst PlusIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    className=\"shrink-0\"\n  >\n    <path\n      d=\"M8 3.333v9.334M3.333 8h9.334\"\n      stroke=\"white\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n    />\n  </svg>\n);\n\nexport interface PlaceholderCardProps {\n  description: string;\n  detailAddress: string;\n  btnLabel?: string;\n  onCreateClick: () => void;\n  className?: string;\n}\n\nexport const PlaceholderCard = ({\n  description,\n  detailAddress,\n  btnLabel = '新建智能体助手',\n  onCreateClick,\n  className,\n}: PlaceholderCardProps) => {\n  return (\n    <div\n      className={cn(\n        'content-stretch flex flex-col items-center justify-center py-[40px] px-[20px] w-full',\n        className,\n      )}\n    >\n      <EmptyCardIcon />\n\n      <div className=\"mt-[16px] text-center text-[#999] text-[14px] leading-[normal]\">\n        <p className=\"mb-0\">{description}</p>\n        {\n          detailAddress ? (\n            <p>\n              <a\n                href={detailAddress}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"text-[#0265ff] underline [text-decoration-skip-ink:none] decoration-solid\"\n              >\n                了解详情\n              </a>\n            </p>\n          ) : null\n        }\n      </div>\n\n      <button\n        onClick={onCreateClick}\n        className=\"mt-[12px] bg-[#0265ff] content-stretch flex gap-[6px] items-center pl-[16px] pr-[20px] py-[7px] rounded-[4px] cursor-pointer border-none\"\n      >\n        <PlusIcon />\n        <span className=\"text-[14px] text-white whitespace-nowrap leading-[normal]\">\n          {btnLabel}\n        </span>\n      </button>\n    </div>\n  );\n};\n","import { transCls } from '../../../const/ui';\nimport { cn } from '../../../lib/utils';\nimport type { IAgentInfo } from '@baishuyun/types';\n\nexport interface AgentEntryCardProps {\n  agent: IAgentInfo;\n  className?: string;\n  onSelect: () => void;\n  onLogClick: () => void;\n}\n\nexport const AgentEntryCard = ({\n  agent,\n  className,\n  onSelect,\n  onLogClick,\n}: AgentEntryCardProps) => {\n  return (\n    <div\n      className={cn(\n        'bg-white border border-[#e0e0e0] border-solid content-stretch flex flex-col items-start p-[16px] rounded-[10px] w-full drop-shadow-[0px_0px_5px_rgba(0,0,0,0.04)] hover:drop-shadow-[0px_0px_8px_rgba(0,0,0,0.1)]',\n        transCls,\n        className,\n      )}\n\n      onClick={onSelect}\n    >\n      <div className=\"content-stretch flex flex-col gap-[12px] items-start w-full\">\n        {/* 顶部 */}\n        <div className=\"content-stretch flex items-center justify-between w-full\">\n          {/* 左 */}\n          <div className=\"content-stretch flex gap-[10px] items-center min-w-0\">\n            <img\n              alt={agent.name}\n              className=\"rounded-[10px] shrink-0 size-[40px] object-cover\"\n              src={agent.icon}\n            />\n            <p className=\"font-bold leading-[normal] overflow-hidden shrink-0 text-[#030303] text-[18px] text-ellipsis whitespace-nowrap\">\n              {agent.name}\n            </p>\n            {agent.installCount != null && agent.installCount > 0 && (\n              <div className=\"bg-[#f5f7fa] content-stretch flex h-[26px] items-center justify-center px-[6px] py-[10px] rounded-[100px] shrink-0\">\n                <p className=\"leading-[normal] shrink-0 text-[#4d609f] text-[12px] whitespace-nowrap\">\n                  安装次数：{agent.installCount.toLocaleString()}\n                </p>\n              </div>\n            )}\n          </div>\n\n          {/* 右上角 */}\n          <div className=\"content-stretch flex gap-[10px] items-center shrink-0\">\n            {agent.version && (\n              <>\n                <p className=\"leading-[normal] shrink-0 text-[#999] text-[12px] whitespace-nowrap\">\n                  版本：{agent.version}\n                </p>\n                <div className=\"h-[14px] shrink-0 w-[1px] bg-[#e0e0e0]\" />\n              </>\n            )}\n            {!!agent.lastUpdated && (\n              <>\n                <p className=\"leading-[normal] shrink-0 text-[#999] text-[12px] whitespace-nowrap\">\n                  {agent.lastUpdated}\n                </p>\n                <div className=\"h-[14px] shrink-0 w-[1px] bg-[#e0e0e0]\" />\n              </>\n            )}\n            {/* <button\n              className=\"leading-[normal] shrink-0 text-[#0265ff] text-[14px] whitespace-nowrap hover:text-[rgba(2,101,255,0.8)] cursor-pointer bg-transparent border-none p-0\"\n              onClick={onLogClick}\n            >\n              更新日志\n            </button> */}\n            <button\n              className=\"bg-[#eff0f6] content-stretch flex flex-col h-[30px] items-center justify-center px-[16px] py-[7px] rounded-[4px] shrink-0 cursor-pointer border-none hover:bg-[#f0f6ff] group/select\"\n              onClick={onSelect}\n            >\n              <span className=\"leading-[normal] shrink-0 text-[#030303] text-[14px] whitespace-nowrap group-hover/select:text-[#0265ff]\">\n                选择\n              </span>\n            </button>\n          </div>\n        </div>\n\n        {/* 描述 */}\n        {agent.description && (\n          <p className=\"leading-[normal] shrink-0 text-[#666] text-[14px] w-full line-clamp-2\">\n            {agent.description}\n          </p>\n        )}\n      </div>\n    </div>\n  );\n};\n","export const GridsIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M6.5 8.5C7.05228 8.5 7.5 8.94772 7.5 9.5V14C7.5 14.5177 7.10667 14.9438 6.60254 14.9951L6.5 15H2L1.89746 14.9951C1.42703 14.9472 1.05278 14.573 1.00488 14.1025L1 14V9.5C1 8.94772 1.44772 8.5 2 8.5H6.5ZM14 8.5C14.5523 8.5 15 8.94772 15 9.5V14C15 14.5177 14.6067 14.9438 14.1025 14.9951L14 15H9.5L9.39746 14.9951C8.92703 14.9472 8.55278 14.573 8.50488 14.1025L8.5 14V9.5C8.5 8.94772 8.94772 8.5 9.5 8.5H14ZM9.5 14H14V9.5H9.5V14ZM2 14H6.5V9.5H2V14ZM6.5 1C7.05228 1 7.5 1.44772 7.5 2V6.5C7.5 7.01768 7.10667 7.44379 6.60254 7.49512L6.5 7.5H2L1.89746 7.49512C1.42703 7.44722 1.05278 7.07297 1.00488 6.60254L1 6.5V2C1 1.44772 1.44772 1 2 1H6.5ZM14 1C14.5523 1 15 1.44772 15 2V6.5C15 7.01768 14.6067 7.44379 14.1025 7.49512L14 7.5H9.5L9.39746 7.49512C8.92703 7.44722 8.55278 7.07297 8.50488 6.60254L8.5 6.5V2C8.5 1.44772 8.94772 1 9.5 1H14ZM2 6.5H6.5V2H2V6.5ZM9.5 6.5H14V2H9.5V6.5Z\" fill=\"#666666\"/>\n  </svg>\n);\n","import type { AgentCategory } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { EditIcon } from '../../bs-icons';\nimport { GridsIcon } from '../../icons/grids-icon';\n\nexport interface AgentCategorySelectMenuProps {\n  value?: AgentCategory;\n  onChange?: (value: AgentCategory) => void;\n  className?: string;\n}\n\nconst CATEGORY_ITEMS: { id: AgentCategory; label: string; icon?: React.ReactNode }[] = [\n  { id: 'all-agent', label: '全部' },\n  { id: 'system-agent', label: '系统智能体', icon: <GridsIcon /> },\n  { id: 'custom-agent', label: '自定义智能体', icon: <EditIcon /> },\n];\n\nexport const AgentCategorySelectMenu = ({\n  value,\n  onChange,\n  className,\n}: AgentCategorySelectMenuProps) => {\n  return (\n    <div className={cn('flex flex-col', className)}>\n      {CATEGORY_ITEMS.map((item) => {\n        const isActive = value === item.id;\n        return (\n          <button\n            key={item.id}\n            type=\"button\"\n            onClick={() => onChange?.(item.id)}\n            className={cn(\n              'flex items-center gap-[6px] w-full h-[34px] px-[10px] rounded-[4px] text-left',\n              isActive ? 'bg-[#EFF0F6]' : 'hover:bg-[#EFF0F6]',\n              transCls\n            )}\n          >\n            {item.icon && (\n              <span className=\"shrink-0 size-[16px] flex items-center justify-center text-[#666666]\">\n                {item.icon}\n              </span>\n            )}\n            <span\n              className={cn(\n                'text-[14px] text-[#030303] leading-[normal] whitespace-nowrap',\n                isActive ? 'font-bold' : 'font-normal'\n              )}\n            >\n              {item.label}\n            </span>\n          </button>\n        );\n      })}\n    </div>\n  );\n};\n","import { useCallback, useState } from 'react';\n\nexport const usePortalContainer = (portalName: string) => {\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const setTriggerRef = useCallback((node: HTMLElement | null) => {\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>(`[${portalName}]`);\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute(portalName, 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  return { portalContainer, setTriggerRef };\n};\n","const d = (e) => {\n  if ((e == null ? void 0 : e.type) !== \"text\" || !e.providerMetadata || !e.providerMetadata.raw || !e.providerMetadata.raw.data)\n    return null;\n  if (typeof e.providerMetadata.raw.data != \"string\")\n    return e.providerMetadata.raw.data;\n  let t;\n  try {\n    t = JSON.parse(e.providerMetadata.raw.data);\n  } catch (r) {\n    console.error(\"invalid raw data\");\n  }\n  return t || e.providerMetadata.raw.data;\n}, k = (e) => {\n  if ((e == null ? void 0 : e.type) === \"error\")\n    return !0;\n  const t = d(e);\n  return (t == null ? void 0 : t.type) === \"agent-error\";\n}, ce = (e) => {\n  const t = d(e);\n  return (t == null ? void 0 : t.type) === \"agent-fake-msg\";\n}, ge = (e) => (e == null ? void 0 : e.type) === \"file\", me = (e) => {\n  const t = d(e);\n  return (t == null ? void 0 : t.type) === \"query-stream-parsed-info\";\n}, pe = (e) => {\n  const t = d(e);\n  if ((t == null ? void 0 : t.type) !== \"query-stream-parsed-info\")\n    return null;\n  const r = t.result;\n  console.log(\"query result raw data:\", r);\n  try {\n    return JSON.parse(r);\n  } catch (n) {\n    return console.error(\"invalid query result data\"), null;\n  }\n}, fe = (e) => {\n  if (!Array.isArray(e))\n    return !1;\n  for (const t of e)\n    if ((t == null ? void 0 : t.type) === \"file\")\n      return !0;\n  return !1;\n}, be = (e) => {\n  const t = d(e);\n  return (t == null ? void 0 : t.type) === \"agent-loading\";\n}, we = (e) => {\n  const t = d(e);\n  return (t == null ? void 0 : t.type) !== \"agent-loading\" ? \"\" : (t == null ? void 0 : t.label) || \"加载中\";\n}, ye = (e) => {\n  if (!k(e))\n    return \"\";\n  if (e != null && e.errorText)\n    return e.errorText;\n  const t = d(e);\n  return (t == null ? void 0 : t.error) || \"未知错误\";\n}, he = (e) => {\n  if (e != null && e.errorText)\n    return e.errorText;\n  const t = d(e);\n  return (t == null ? void 0 : t.error) || \"未知错误\";\n}, b = \"data-shadow-slot-injected\", ve = (e, t) => {\n  if (e.querySelector(`[${b}]`)) return;\n  const r = (a) => {\n    const l = a.cloneNode(!0);\n    l.setAttribute(b, \"\"), e.appendChild(l);\n  };\n  document.head.querySelectorAll(\"style\").forEach(r), document.head.querySelectorAll('link[rel=\"stylesheet\"]').forEach(r);\n  let n = t.parentNode;\n  for (; n; )\n    n instanceof ShadowRoot && (n.querySelectorAll(\"style\").forEach(r), n.querySelectorAll('link[rel=\"stylesheet\"]').forEach(r)), n = n.parentNode;\n};\nfunction C(e) {\n  return Array.isArray(e) ? e.every((t) => typeof t == \"string\") : !1;\n}\nfunction N(e) {\n  return Array.isArray(e) ? e.every(\n    (t) => typeof t == \"object\" && t !== null && \"label\" in t && \"value\" in t && typeof t.label == \"string\" && typeof t.value == \"string\"\n  ) : !1;\n}\nconst Se = (e) => C(e) ? e.join(\", \") : N(e) ? e.map((r) => r.value).join(\", \") : e, x = /* @__PURE__ */ new Set([\n  \"password\",\n  \"textarea\",\n  \"datetime\",\n  \"text\",\n  \"radiogroup\",\n  \"radio\",\n  \"combo\",\n  \"combocheck\",\n  \"checkboxgroup\",\n  \"number\"\n]), Ae = (e) => Array.isArray(e) ? e.filter((t) => t.widget ? x.has(t.widget.type) : !1) : [], M = (e) => (t) => {\n  const r = d(t);\n  return (r == null ? void 0 : r.type) === e;\n}, _e = (e) => (t) => {\n  const r = t, n = r == null ? void 0 : r.part;\n  return M(e)(n);\n}, ke = (e) => (t) => {\n  const r = d(t);\n  return (r == null ? void 0 : r.type) !== e ? null : (r == null ? void 0 : r.field) || null;\n}, Ce = (e) => (t) => Array.isArray(t) && t.length > 0 ? t.filter(e) : e(t) ? [t] : [], Ne = (e) => {\n  try {\n    return JSON.parse(e);\n  } catch (t) {\n    return console.info(\"[safeParseJson] Failed to parse JSON:\", t), null;\n  }\n}, q = (e = \"_widget_\") => {\n  const t = Date.now(), r = String(t), n = r.length, a = r.slice(0, n - 5), l = String(Math.floor(Math.random() * 1e5)).padStart(5, \"0\");\n  return `${e}${a}${l}`;\n}, xe = 10, Me = (e, t = \"image/png\") => new Promise((r) => {\n  const n = new Image();\n  n.crossOrigin = \"anonymous\", n.onload = () => {\n    const a = document.createElement(\"canvas\");\n    a.width = n.naturalWidth, a.height = n.naturalHeight, a.getContext(\"2d\").drawImage(n, 0, 0), r(a.toDataURL(t));\n  }, n.onerror = () => r(e), n.src = e;\n}), qe = {\n  eq: \"等于\",\n  neq: \"不等于\",\n  gt: \"大于\",\n  lt: \"小于\",\n  gte: \"大于等于\",\n  lte: \"小于等于\",\n  contains: \"包含\",\n  not_contains: \"不包含\",\n  in: \"等于任意\",\n  nin: \"不等于任意\",\n  all: \"包含所有\",\n  empty: \"为空\",\n  not_empty: \"不为空\",\n  range: \"范围\"\n}, F = {\n  // Text-like: equality, fuzzy, empty checks\n  text: [\"eq\", \"neq\", \"in\", \"nin\", \"contains\", \"not_contains\", \"empty\", \"not_empty\"],\n  password: [\"eq\", \"neq\", \"contains\", \"not_contains\", \"empty\", \"not_empty\"],\n  radiogroup: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  radio: [\"eq\", \"neq\", \"empty\", \"not_empty\"],\n  combo: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  sn: [\"eq\", \"neq\", \"in\", \"nin\", \"contains\", \"not_contains\", \"empty\", \"not_empty\"],\n  // Textarea: fuzzy matching\n  textarea: [\"contains\", \"not_contains\", \"empty\", \"not_empty\"],\n  // Number: comparison operators\n  number: [\"eq\", \"neq\", \"gt\", \"gte\", \"lt\", \"lte\", \"range\", \"empty\", \"not_empty\"],\n  // DateTime: comparison operators\n  datetime: [\"eq\", \"neq\", \"gte\", \"lte\", \"range\", \"empty\", \"not_empty\"],\n  // Multi-select: membership, intersection\n  checkboxgroup: [\"in\", \"all\", \"eq\", \"empty\", \"not_empty\"],\n  combocheck: [\"in\", \"all\", \"eq\", \"empty\", \"not_empty\"],\n  // User/Dept: equality and membership\n  user: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  dept: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  // Groups: membership, intersection, empty\n  usergroup: [\"in\", \"all\", \"eq\", \"empty\", \"not_empty\"],\n  deptgroup: [\"in\", \"all\", \"eq\", \"empty\", \"not_empty\"],\n  // Address/Location: intersection\n  address: [\"in\", \"nin\", \"empty\", \"not_empty\"],\n  location: [\"in\", \"nin\", \"empty\", \"not_empty\"],\n  // Files: empty checks\n  upload: [\"empty\", \"not_empty\"],\n  image: [\"empty\", \"not_empty\"],\n  signature: [\"empty\", \"not_empty\"],\n  // Flow state\n  flowState: [\"eq\", \"neq\", \"empty\"],\n  flowstate: [\"eq\", \"neq\", \"empty\"],\n  // Link data: combo-like\n  linkdata: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  linkquery: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  dataload: [\"eq\", \"neq\", \"in\", \"nin\", \"empty\", \"not_empty\"],\n  // Formula\n  formula: [\"eq\", \"neq\", \"empty\", \"not_empty\"],\n  // Display-only: no meaningful operators\n  separator: [],\n  button: [],\n  subform: [],\n  unknown: []\n}, E = {\n  text: \"eq\",\n  password: \"eq\",\n  radiogroup: \"eq\",\n  radio: \"eq\",\n  combo: \"eq\",\n  sn: \"eq\",\n  textarea: \"contains\",\n  number: \"range\",\n  datetime: \"range\",\n  checkboxgroup: \"all\",\n  combocheck: \"all\",\n  user: \"eq\",\n  dept: \"eq\",\n  usergroup: \"all\",\n  deptgroup: \"all\",\n  address: \"all\",\n  location: \"all\",\n  upload: \"not_empty\",\n  image: \"not_empty\",\n  signature: \"not_empty\",\n  flowState: \"eq\",\n  flowstate: \"eq\",\n  linkdata: \"eq\",\n  linkquery: \"eq\",\n  dataload: \"eq\",\n  formula: \"eq\"\n};\nfunction Fe(e) {\n  var t;\n  return e ? (t = F[e]) != null ? t : [] : [];\n}\nfunction Ee(e) {\n  var t;\n  return e && (t = E[e]) != null ? t : \"eq\";\n}\nfunction m(e) {\n  return typeof e == \"object\" && e !== null && !Array.isArray(e);\n}\nfunction A(e) {\n  return m(e) ? e : null;\n}\nfunction w(e) {\n  return !!(e == null || e === \"\" || Array.isArray(e) && e.length === 0);\n}\nfunction y(e, t) {\n  if (Array.isArray(e) && Array.isArray(t)) {\n    if (e.length !== t.length) return !1;\n    const r = e.map(String).sort(), n = t.map(String).sort();\n    return r.every((a, l) => a === n[l]);\n  }\n  if (m(e) && m(t)) {\n    const r = Object.keys(e), n = Object.keys(t);\n    return r.length !== n.length ? !1 : r.every((a) => String(e[a]) === String(t[a]));\n  }\n  return String(e) === String(t);\n}\nfunction h(e, t) {\n  if (m(t)) {\n    const n = A(e);\n    return !(!n || t.province !== void 0 && String(n.province) !== String(t.province) || t.city !== void 0 && String(n.city) !== String(t.city) || t.district !== void 0 && String(n.district) !== String(t.district));\n  }\n  const r = Array.isArray(t) ? t.map(String) : [];\n  return Array.isArray(e) ? e.some((n) => r.includes(String(n))) : r.includes(String(e));\n}\nfunction D(e, t) {\n  const r = Array.isArray(t) ? t.map(String) : [];\n  if (r.length === 0) return !1;\n  const n = Array.isArray(e) ? e.map(String) : [];\n  return r.every((a) => n.includes(a));\n}\nfunction P(e, t) {\n  const r = A(t);\n  if (!r) return !1;\n  const n = Number(e);\n  return !(isNaN(n) || r.min !== void 0 && r.min !== null && n < Number(r.min) || r.max !== void 0 && r.max !== null && n > Number(r.max));\n}\nfunction R(e, t) {\n  var i;\n  const r = (i = e.field.widget) == null ? void 0 : i.widgetName;\n  if (!r) return !1;\n  const n = t[r], { operator: a, value: l } = e;\n  switch (a) {\n    case \"empty\":\n      return w(n);\n    case \"not_empty\":\n      return !w(n);\n    case \"eq\":\n      return y(n, l);\n    case \"neq\":\n      return !y(n, l);\n    case \"contains\":\n      return String(n).includes(String(l));\n    case \"not_contains\":\n      return !String(n).includes(String(l));\n    case \"gt\":\n      return Number(n) > Number(l);\n    case \"gte\":\n      return Number(n) >= Number(l);\n    case \"lt\":\n      return Number(n) < Number(l);\n    case \"lte\":\n      return Number(n) <= Number(l);\n    case \"in\":\n      return h(n, l);\n    case \"nin\":\n      return !h(n, l);\n    case \"all\":\n      return D(n, l);\n    case \"range\":\n      return P(n, l);\n    default:\n      return !1;\n  }\n}\nfunction De(e, t) {\n  if (!e.enabled)\n    return !1;\n  const r = e.triggerCondition;\n  if (!r) return !0;\n  const { items: n, quantifier: a } = r;\n  if (!n || n.length === 0) return !0;\n  const l = n.map((i) => R(i, t));\n  return a === \"any\" ? l.some((i) => i) : l.every((i) => i);\n}\nconst Pe = (e, t) => e === null || t === null ? !1 : e.formId ? t.type === \"form\" && t.params.formId === e.formId : e.appId ? (t.type === \"app\" || t.type === \"form\") && t.params.appId === e.appId : t.type === \"global\", W = {\n  eq: \"eq\",\n  neq: \"ne\",\n  gt: \"gt\",\n  gte: \"gte\",\n  lt: \"lt\",\n  lte: \"lte\",\n  contains: \"like\",\n  not_contains: \"unlike\",\n  in: \"in\",\n  nin: \"nin\",\n  all: \"all\",\n  empty: \"empty\",\n  not_empty: \"not_empty\",\n  range: \"range\"\n}, T = {\n  eq: \"eq\",\n  ne: \"neq\",\n  gt: \"gt\",\n  gte: \"gte\",\n  lt: \"lt\",\n  lte: \"lte\",\n  like: \"contains\",\n  unlike: \"not_contains\",\n  in: \"in\",\n  nin: \"nin\",\n  all: \"all\",\n  empty: \"empty\",\n  not_empty: \"not_empty\",\n  range: \"range\"\n};\nfunction Re(e) {\n  const t = e.quantifier === \"any\" ? \"or\" : \"and\", r = e.items.map((n) => {\n    var i, s, u, c, p, f;\n    const a = (i = W[n.operator]) != null ? i : \"eq\";\n    let l;\n    return n.operator === \"range\" && m(n.value) ? l = [n.value.min, n.value.max] : Array.isArray(n.value) ? l = n.value : l = [n.value], {\n      field: (c = (u = (s = n.field) == null ? void 0 : s.widget) == null ? void 0 : u.widgetName) != null ? c : \"\",\n      method: a,\n      value: l,\n      type: (f = (p = n.field) == null ? void 0 : p.widget) == null ? void 0 : f.type\n    };\n  });\n  return JSON.stringify({ rel: t, cond: r });\n}\nfunction We(e) {\n  const t = JSON.parse(e), r = t.rel === \"or\" ? \"any\" : \"all\", n = t.cond.map((a, l) => {\n    var u, c;\n    const i = (u = T[a.method]) != null ? u : \"eq\";\n    let s = a.value;\n    return i === \"range\" ? s = { min: a.value[0], max: a.value[1] } : [\"eq\", \"neq\", \"contains\", \"not_contains\", \"gt\", \"gte\", \"lt\", \"lte\"].includes(i) && (s = a.value[0]), {\n      id: `${a.field}_${l}`,\n      field: {\n        label: a.field,\n        widget: {\n          widgetName: a.field,\n          type: (c = a.type) != null ? c : \"unknown\",\n          value: void 0\n        }\n      },\n      operator: i,\n      value: s\n    };\n  });\n  return { targetName: \"\", quantifier: r, items: n };\n}\nfunction Te(e, t, r = 1) {\n  const n = [], a = [];\n  for (const l of e)\n    t(l) ? a.push(l) : (a.length > 0 && (n.push(a.length >= r ? [...a] : a[0]), a.length = 0), n.push(l));\n  return a.length > 0 && n.push(a.length >= 2 ? [...a] : a[0]), n;\n}\nfunction _(e) {\n  const t = [];\n  for (const r of e)\n    Array.isArray(r) ? t.push(..._(r)) : t.push(r);\n  return t;\n}\nconst B = {\n  projectdevelopment: \"e914\",\n  resourcelibrary: \"e915\",\n  Plugin2: \"e90e\",\n  Plugin: \"e90f\",\n  JSON: \"e910\",\n  Dropdown: \"e911\",\n  Batchprocessing: \"e912\",\n  \"Image-text\": \"e916\",\n  Newaddition: \"e917\",\n  reportforms: \"e918\",\n  AddFola: \"e919\",\n  delete: \"e91a\",\n  AddImage: \"e91b\",\n  Send: \"e91c\",\n  text: \"e91d\",\n  image: \"e91e\",\n  Star1: \"e91f\",\n  Ellipse: \"e920\",\n  \"Ellipse-Copy\": \"e921\",\n  Shape: \"e922\",\n  \"Shape-Copy\": \"e923\",\n  \"right-line\": \"e924\",\n  \"right-arrow\": \"e925\",\n  \"double-right-arrow\": \"e926\",\n  ellipse: \"e927\",\n  Rectangle: \"e928\",\n  \"Rectangle-Copy\": \"e929\",\n  \"Rectangle-Copy-2\": \"e92a\",\n  CombinedShape: \"e92b\",\n  Line: \"e92c\",\n  time: \"e92d\",\n  calendar: \"e92e\",\n  richsinglelinetext: \"e92f\",\n  singlelinetext: \"e930\",\n  multilinetext: \"e931\",\n  number: \"e932\",\n  RichText: \"e933\",\n  image1: \"e934\",\n  Attachment: \"e935\",\n  Phone: \"e936\",\n  Email: \"e937\",\n  date: \"e938\",\n  \"Multiple-choice\": \"e939\",\n  Checkbox: \"e93a\",\n  \"Drop-down\": \"e93b\",\n  positioning: \"e93c\",\n  Description: \"e93d\",\n  AutoNumber: \"e93e\",\n  Address: \"e93f\",\n  Staff: \"e940\",\n  Department: \"e941\",\n  Switch: \"e942\",\n  Slider: \"e943\",\n  Currentdate: \"e944\",\n  Grade: \"e945\",\n  Barcode: \"e946\",\n  Subtable: \"e947\",\n  associatedtable: \"e948\",\n  Associatedapplication: \"e949\",\n  Referencefield: \"e94a\",\n  Uppercasing: \"e94b\",\n  nodata: \"e94c\",\n  \"X-mark\": \"e94d\",\n  Copy: \"e94e\",\n  Correct: \"e94f\",\n  Save: \"e950\",\n  Printer: \"e951\",\n  search: \"e952\",\n  filter: \"e953\",\n  Export: \"e954\",\n  Import: \"e955\",\n  Customprint: \"e956\",\n  refresh: \"e957\",\n  Helpcenter: \"e958\",\n  Tutorial: \"e959\",\n  Release: \"e95a\",\n  more: \"e95b\",\n  Setup: \"e95c\",\n  sort: \"e95d\",\n  Back: \"e95e\",\n  show: \"e95f\",\n  hide: \"e960\",\n  Preview: \"e961\",\n  Click: \"e962\",\n  Allcheck: \"e963\",\n  Cancelcheck: \"e964\",\n  Likespot: \"e965\",\n  Favoritespot: \"e966\",\n  Followspot: \"e967\",\n  Commentspot: \"e968\",\n  At: \"e969\",\n  Pin: \"e96a\",\n  edit: \"e96b\",\n  Top: \"e96c\",\n  Movein: \"e96d\",\n  Moveout: \"e96e\",\n  Forward: \"e96f\",\n  Revoke: \"e970\",\n  Return: \"e971\",\n  Link: \"e972\",\n  Unlink: \"e973\",\n  Download: \"e974\",\n  Upload: \"e975\",\n  Download2: \"e976\",\n  Upload2: \"e977\",\n  Comment: \"e978\",\n  Remind: \"e979\",\n  Notice: \"e97a\",\n  Permission: \"e97b\",\n  SMS: \"e97c\",\n  QRcode: \"e97d\",\n  Website: \"e97e\",\n  Monitoring: \"e97f\",\n  Api: \"e980\",\n  Webhook: \"e981\",\n  Synchronous: \"e982\",\n  Automation: \"e983\",\n  Trigger: \"e984\",\n  Condition: \"e985\",\n  Success: \"e986\",\n  Failure: \"e987\",\n  countdown: \"e988\",\n  Waiting: \"e989\",\n  Flow: \"e98a\",\n  Connection: \"e98b\",\n  Dashboard: \"e98c\",\n  chart: \"e98d\",\n  Piechart: \"e98e\",\n  BarChart: \"e98f\",\n  DoubleBarChart: \"e991\",\n  StackedBarChart: \"e992\",\n  PercentageStackedBarChart: \"e993\",\n  LineChart: \"e994\",\n  areachart: \"e990\",\n  combinationchart: \"e995\",\n  Scatterplot: \"e996\",\n  FunnelChart: \"e997\",\n  wordcloud: \"e998\",\n  RadarChart: \"e999\",\n  PivotTable: \"e99a\",\n  NumberChart: \"e99b\",\n  map: \"e99c\",\n  Timeline: \"e99d\",\n  Album: \"e99e\",\n  Kanban: \"e99f\",\n  Ganttchart: \"e9a0\",\n  Circle: \"e9a8\",\n  linesurface: \"e9a1\",\n  IconStyle: \"e9a2\",\n  Backgroundcolor: \"e9a3\",\n  DeleteDe: \"e9a4\",\n  AlignLeft: \"e9a5\",\n  AlignCenter: \"e9a6\",\n  AlignRight: \"e9a7\",\n  Column: \"e9a9\",\n  Component: \"e9aa\",\n  Customcomponent: \"e9ab\",\n  Title: \"e9ac\",\n  RichText1: \"e9ad\",\n  Carousel: \"e9ae\",\n  PageTab: \"e9af\",\n  Buriedpoint: \"e9b0\",\n  Container: \"e9b1\",\n  QuickStart: \"e9b2\",\n  Group: \"e9b3\",\n  Ungroup: \"e9b4\",\n  Front: \"e9b5\",\n  Back1: \"e9b6\",\n  Lock: \"e9b7\",\n  Unlock: \"e9b8\",\n  Association: \"e9b9\",\n  CancelAssociation: \"e9ba\",\n  Quotation: \"e9bb\",\n  ViewSet: \"e9bc\",\n  AutoScale: \"e9bd\",\n  waterfall: \"e9be\",\n  watermark: \"e9bf\",\n  history: \"e9c0\",\n  Setting: \"e9c1\",\n  Draftbox: \"e9c2\",\n  SQL: \"e9c3\",\n  Workflow: \"e9c4\",\n  Workflow2: \"e9c5\",\n  Addone: \"e9c6\",\n  Formula: \"e9c7\",\n  Dictionary: \"e9c8\",\n  statistical: \"e9c9\",\n  Recycle: \"e9ca\",\n  Mistake: \"e9cb\",\n  Tag: \"e9cc\",\n  Pendingapproval: \"e9cd\",\n  MyApplication: \"e9ce\",\n  ApplicationApproval: \"e9cf\",\n  Initiatedbyme: \"e9d0\",\n  Copiedtome: \"e9d1\",\n  Approvalnode: \"e9d2\",\n  Fillnode: \"e9d3\",\n  cc: \"e9d4\",\n  Image1: \"e9d5\",\n  Open: \"e9d6\",\n  Color: \"e9d7\",\n  Right: \"e9d8\",\n  Backward: \"e9d9\",\n  dataanalysis: \"e9da\",\n  Filter2: \"e9db\",\n  Freefilter: \"e9dc\",\n  Conditionfilter: \"e9dd\",\n  Quickfilter: \"e9de\",\n  Export1: \"e9df\",\n  Attachmentpreview: \"e9e0\",\n  BulkEdit: \"e9e1\",\n  Calculationrows: \"e9e2\",\n  SingleSelect: \"e9e3\",\n  dataview: \"e9e4\",\n  Dataid: \"e9e5\",\n  Divide: \"e9e6\",\n  Progress: \"e9e7\",\n  Star: \"e9e8\",\n  Contacts: \"e9e9\",\n  Activity: \"e9ea\",\n  Minus: \"e9eb\",\n  Plussign: \"e9ec\",\n  \"Plussign-Copy\": \"e9ed\",\n  Increased: \"e9ee\",\n  Decline: \"e9ef\",\n  indeterminate: \"e9f0\",\n  Decline1: \"e9f1\",\n  personal: \"e9f2\",\n  Warning: \"e9f3\",\n  Warning2: \"e9f4\",\n  Prompt: \"e9f5\",\n  info: \"e9f6\",\n  Cancel: \"e9f7\",\n  question1: \"e9f8\",\n  Question: \"e9f9\",\n  exclamation: \"e9fa\",\n  Warning1: \"e9fb\",\n  True: \"e9fc\",\n  Suspended: \"e9fd\",\n  Suspended1: \"e9fe\",\n  Suspended2: \"e9ff\",\n  Error: \"ea00\",\n  CombinedShape2: \"ea01\",\n  Delete1: \"ea02\",\n  Circle1: \"ea03\",\n  Decline2: \"ea04\",\n  Decline3: \"ea05\",\n  add: \"ea06\",\n  Addto: \"ea07\",\n  Reduce: \"ea08\",\n  Subtract: \"ea09\",\n  Addition: \"ea0a\",\n  Multiplication: \"ea0b\",\n  Division: \"ea0c\",\n  Bracket: \"ea0d\",\n  Reduce1: \"ea0e\",\n  Search: \"ea0f\",\n  Favorites: \"ea10\",\n  Annotation: \"ea11\",\n  Application: \"ea12\",\n  Application2: \"ea13\",\n  Applicationsview: \"ea14\",\n  Publish: \"ea15\",\n  Deploy: \"ea16\",\n  Sidetoplowerside: \"ea17\",\n  Narrow: \"ea18\",\n  Backtothenavigation: \"ea19\",\n  Forwardtothenavigation: \"ea1a\",\n  Return1: \"ea1b\",\n  Transfer: \"ea1c\",\n  Log: \"ea1d\",\n  table: \"ea1e\",\n  Form: \"ea1f\",\n  Openfield: \"ea20\",\n  Closefield: \"ea21\",\n  Receive: \"ea22\",\n  Fill: \"ea23\",\n  Fill1: \"ea24\",\n  fillet: \"ea25\",\n  rightangle: \"ea26\",\n  round: \"ea27\",\n  Send1: \"ea28\",\n  Map: \"ea29\",\n  Upward: \"ea2a\",\n  Move: \"ea2b\",\n  Downward: \"ea2c\",\n  drag: \"ea2d\",\n  TextIcon: \"ea2e\",\n  Narrow1: \"ea2f\",\n  Enlarge: \"ea30\",\n  Enlarge2: \"ea31\",\n  Cancel1: \"ea32\",\n  Retract: \"ea33\",\n  Expand: \"ea34\",\n  Retract1: \"ea35\",\n  Expand1: \"ea36\",\n  Retract2: \"ea37\",\n  Expand2: \"ea38\",\n  Switch1: \"ea39\",\n  Fullscreen: \"ea3a\",\n  Offscreen: \"ea3b\",\n  Notvisible: \"ea3c\",\n  Visible: \"ea3d\",\n  Adjust: \"ea3e\",\n  PC: \"ea3f\",\n  Mobile: \"ea40\",\n  Pad: \"ea41\",\n  Scanthecode: \"ea42\",\n  Scan: \"ea43\",\n  Screenshot: \"ea44\",\n  Rotation: \"ea45\",\n  voice: \"ea46\",\n  Video: \"ea47\",\n  Location: \"ea48\",\n  Clock: \"ea49\",\n  Print: \"ea4a\",\n  Member: \"ea4b\",\n  WorkWeChat: \"ea4c\",\n  DingTalk: \"ea4d\",\n  EnterpriseWeChat2: \"ea4e\",\n  Groupmanagement: \"ea4f\",\n  Feishu: \"ea50\",\n  Stationletter: \"ea51\",\n  Email1: \"ea52\",\n  WeChat: \"ea53\",\n  ServiceAccount: \"ea54\",\n  Subscribed: \"ea55\",\n  Dingtalk: \"ea56\",\n  Information: \"ea57\",\n  Assistant: \"ea58\",\n  ai: \"ea59\",\n  Inquireabout: \"ea5a\",\n  IFrame: \"ea5b\",\n  Integratio: \"ea5c\",\n  close: \"ea5d\",\n  Close: \"ea5e\",\n  Addgroup: \"ea5f\",\n  deletegroup: \"ea60\",\n  Relateddata: \"ea61\",\n  Enlarge1: \"ea62\",\n  Narrow2: \"ea63\",\n  \"map-search\": \"ea64\",\n  Corner: \"ea65\",\n  text1: \"ea66\",\n  Onlinemap: \"ea67\",\n  Maptile: \"ea68\",\n  Dataexport: \"ea69\",\n  Word: \"ea6a\",\n  Excel: \"ea6b\",\n  PPT: \"ea6c\",\n  PDF: \"ea6d\",\n  Video1: \"ea6e\",\n  Audio: \"ea6f\",\n  Txt: \"ea70\",\n  Zip: \"ea71\",\n  file: \"ea72\",\n  richtext: \"ea73\",\n  Onlinemap1: \"ea74\",\n  Maptile1: \"ea75\",\n  Ai2: \"ea76\",\n  Guide: \"ea77\",\n  Button: \"ea78\",\n  Menus: \"ea79\",\n  \"richtext-Copy\": \"ea7a\",\n  \"richtext-Copy-2\": \"ea7b\",\n  \"richtext-Copy-3\": \"ea7c\",\n  \"richtext-Copy-4\": \"ea7d\",\n  Split: \"ea7e\",\n  AI: \"ea7f\",\n  Form1: \"ea80\",\n  Fields: \"ea81\",\n  Project: \"ea82\",\n  More1: \"ea83\",\n  Notstarted: \"ea84\",\n  Inprocess: \"ea85\",\n  Completed: \"ea86\",\n  Completed1: \"ea87\",\n  More2: \"ea88\",\n  AIoffice: \"ea89\",\n  statistics: \"ea8a\",\n  Expand3: \"ea8b\",\n  list: \"ea8c\",\n  \"list-Copy\": \"ea8d\",\n  Grid: \"ea8e\",\n  Calendar: \"ea8f\",\n  Schedule: \"ea90\",\n  tableview: \"ea91\",\n  Gallery: \"ea92\",\n  Copy1: \"ea93\",\n  Mailbox: \"ea94\",\n  Automation1: \"ea95\",\n  Avatar: \"ea96\"\n};\nfunction Be(e) {\n  const t = B[e];\n  return t ? `&#x${t};` : void 0;\n}\nconst Oe = (e, t, r) => {\n  if (!r)\n    return {\n      translated: \"\"\n    };\n  const n = new Map(t.map((i) => [i.widget.widgetName, i.label]));\n  for (const i of t)\n    if (i.widget.type === \"subform\" && i.widget.items) {\n      for (const s of i.widget.items)\n        if (\"widget\" in s && !(\"options\" in s)) {\n          const u = `${i.widget.widgetName}.${s.widget.widgetName}`;\n          n.set(u, s.label);\n        }\n    }\n  const a = [], l = e.replace(\n    /\\$\\{(_widget_\\d+(?:\\._widget_\\d+)?)\\}/g,\n    (i, s) => {\n      const { translated: u, meta: c } = r(s);\n      return c && a.push(c), u;\n    }\n  );\n  return {\n    meta: a.length ? _(a) : null,\n    translated: (l != null ? l : \"\").trim()\n  };\n}, O = {\n  手机号码: \"^((\\\\(\\\\d{2,3}\\\\))|(\\\\d{3}\\\\-))?1\\\\d{10}$\",\n  电话号码: \"^(0[0-9]{2,3}\\\\-)?([2-9][0-9]{6,7})+(\\\\-[0-9]{1,4})?$\",\n  邮政编码: \"^\\\\d{6}$\",\n  身份证号码: \"(^\\\\d{15}$)|(^\\\\d{18}$)|(^\\\\d{17}(\\\\d|X|x)$)\",\n  邮箱: \"^([a-zA-Z0-9_\\\\.\\\\-])+\\\\@(([a-zA-Z0-9\\\\-])+\\\\.)+([a-zA-Z0-9]{2,4})+$\",\n  时分: \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n  时分秒: \"(^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$)\",\n  图片链接: \"imageurl\",\n  二维码图片: \"qrcode\",\n  条形码图片: \"barcode\",\n  自定义: \"custom\"\n}, v = (e) => {\n  const { widget: t, labelStyle: r, label: n, ...a } = e || {}, l = O[r] || \"\";\n  return {\n    widget: {\n      widgetName: `_widget_${Date.now()}`,\n      widgetNameAlias: \"\",\n      // triggerEvent: 0,\n      customCls: null,\n      height: 34,\n      width: 350,\n      text: null,\n      value: \"\",\n      //默认值 没有默认值的话 整个value不存在\n      enable: !0,\n      visible: !0,\n      // hint: placeholder,\n      allowBlank: !0,\n      rely: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      // regex, //格式  ^((\\(\\d{2,3}\\))|(\\d{3}\\-))?1\\d{10}$ 手机号码  ^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$  电话号码  ^\\d{6}$ 邮政编码  (^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$) 身份证号码   ^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$ 邮箱   (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分  (^[0-1]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[2]{1}[0-3]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$|^[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$) 时分秒  imageurl 图片链接    qrcode 二维码图片  barcode 条形码图片  custom 自定义\n      noRepeat: !0,\n      scan: null,\n      // textMode,\n      generateQR: !1,\n      eventAlert: !0,\n      alertinfo: {\n        icon: \"error\"\n        // tip: placeholder,\n        // msg: placeholder,\n      },\n      enterClearText: !0,\n      ...t,\n      regex: l,\n      type: \"text\",\n      labelStyle: n\n    },\n    // description,\n    label: n,\n    lineWidth: 6,\n    tab: null,\n    ...a\n  };\n}, o = (e = \"_widget\", t) => {\n  const r = `${e}_${Date.now()}`;\n  if (t === void 0)\n    return r;\n  const n = t.toString().length;\n  return `${r.slice(0, -n)}${t}`;\n}, I = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"number\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      triggerEvent: !1,\n      customCls: null,\n      height: 34,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      // regex,\n      // hint: placeholder,\n      noRepeat: !1,\n      alertinfo: {\n        icon: \"success\",\n        tip: \"请设置提示内容\"\n      },\n      allowDecimals: !0,\n      //允许小数，默认值 true，已废弃\n      allowNegative: !0,\n      //允许负数，默认值 true ，已废弃\n      // maxNumber: max, //限定数值范围 最大值\n      // minNumber: min, //限定数值范围 最小值\n      displayMode: \"percent\",\n      // 新的格式， percent 百分比  number 数值\n      precision: null,\n      //保留小数位数\n      thousandsSeparator: !1,\n      //显示千分符\n      notround: !0,\n      //不四舍五入\n      format: \"\",\n      //旧的格式，新的由多个属性来控制，前端代码会用其他几个参数拼接出正确的这个值。 其中结尾有% 代表百分比 ，没有%代表数字 ，然后小数点后面的0的个数代表 保留的小数位数，如果小数点后面没有0代表（如0.%），代表没有设置 保留小数位数，保留用户输入的所有小数\n      afterSuffix: {\n        //单位\n        zh_cn: \"\",\n        //中文的\n        en_us: \"\",\n        //英文的\n        zh_tw: \"\"\n        //繁体的\n      },\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, L = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"combo\",\n      height: 34,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      mode: 1,\n      allowAddLinkData: !1,\n      // items: options,\n      widgetName: `_widget_${Date.now()}`,\n      widgetNameAlias: \"\",\n      customCls: null,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      colorEnable: !0,\n      //颜色 是否开启颜色\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, S = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      // items: options,\n      layout: \"vertical\",\n      stopCancel: !1,\n      widgetName: `_widget_${Date.now()}`,\n      widgetNameAlias: \"\",\n      customCls: null,\n      value: null,\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      colorEnable: !0,\n      //颜色 是否开启颜色\n      ...t,\n      type: \"radiogroup\"\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n,\n    labelStyle: r\n  };\n}, $ = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"datetime\",\n      height: 34,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      widgetName: `_widget_${Date.now()}`,\n      widgetNameAlias: \"\",\n      customCls: null,\n      value: \"today\",\n      //默认值， today 填写当前时间 ，如果是数字，如 1762957800000 ，是自定义的时间，为所选时间的时间戳的毫秒级，\n      rely: null,\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      hint: \"\",\n      dateLimit: {\n        //日期范围\n        week: {\n          //可选择星期\n          enable: !1,\n          //是否开启可选择星期\n          value: [\n            //星期  星期一到天，用1-7代表\n            1,\n            2,\n            6\n          ]\n        },\n        start: {\n          //最早可选时间\n          enable: !1,\n          //是否开启最早可选时间\n          mode: \"dynamic\",\n          //模式：   dynamic 动态 static 固定值  fieldValue 字段值\n          value: \"yesterday\"\n          //限定的值： today 今天 yesterday 昨天 tomorrow 明天 7day_before 七天前  7day_after 七天后 30day_before 30天前  30day_after 30天后\n        },\n        end: {\n          //最晚可选时间\n          enable: !1,\n          //是否开启最晚可选时间\n          mode: \"static\",\n          //模式：   dynamic 动态 static 固定值  fieldValue 字段值\n          value: 17620938e5\n          //限定的值：这种数字的为 选择的固定值，时间的时间戳，毫秒级别  ，如果为  _widget_1762154537014 这种，为字段的值，这个字段需要也是日期字段，和当前这个字段是同一个 format的\n        }\n      },\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, g = (e) => e, G = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"deptgroup\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: \"34\",\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      noRepeat: !1,\n      limit: {},\n      valueOption: 0,\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, U = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"sn\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      triggerEvent: 0,\n      customCls: null,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      // rules: rules,\n      importMode: 1,\n      //导入模式   1 excel末尾递增  2 excel最大值递增  3 excel/表单最大值比较递增\n      ...t,\n      rules: [\n        {\n          chars: \"sn-\",\n          type: \"fixedChars\"\n        },\n        {\n          digitsNum: 5,\n          fixedLength: !0,\n          resetDuration: \"none\",\n          startValue: 1,\n          type: \"incNumber\"\n        }\n      ],\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, j = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"dept\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: \"34\",\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      noRepeat: !1,\n      limit: {},\n      valueOption: 0,\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, H = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"usergroup\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: \"34\",\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      noRepeat: !1,\n      limit: {},\n      limitWidget: null,\n      //可选范围 由部门字段确定，如果有值 是 _widget_1762226067008 这种，另一个部门字段的id。和limit互斥，limit将为[]\n      valueOption: 0,\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, Q = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      rely: {\n        widgets: []\n      },\n      linkFilter: {},\n      allowAdd: !0,\n      //允许新增关联表数据\n      refType: \"form\",\n      //关联表的类型，只能是form\n      ...t,\n      linkFields: [],\n      labelStyle: r,\n      type: \"linkdata\"\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, z = (e) => !e || !e.length ? e : e.map((t, r) => ({\n  id: r,\n  // name: \"_widget_1761976674767\",\n  // form: \"a2f34ef882158a3e97da4ef7\",\n  // tag: buildWidgetName(\"f_\", index),\n  title: t.field,\n  text: t.field,\n  icon: `icon-widget-${t.type}`,\n  type: t.type,\n  isEditable: !0,\n  group: \"dimension,filter,select\",\n  formula: \"\"\n})), Z = (e) => !e || !e.length ? e : e.map((t) => ({\n  mode: \"depend\",\n  ...t\n})), X = (e) => {\n  var a, l, i;\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"dataload\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      width: 350,\n      text: r,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      allowAddData: !0,\n      // 允许新增数据源数据\n      ...t,\n      mode: \"list\",\n      //一直是 list 应该是废弃的\n      loaddataconfig: {\n        extendSet: {\n          sort: [\"datahelp\", \"module\", \"formEvent\"],\n          status: !0,\n          triggerField: \"\",\n          triggerFieldMode: \"none\"\n        },\n        dataloadmode: [\"add\", \"cover\"],\n        filter: {\n          cond: [],\n          rel: \"and\"\n        },\n        defaultSort: [],\n        treeFields: {},\n        mode: \"list\",\n        selectFields: [],\n        triggerControl: null,\n        triggerWidget: null,\n        triggerFieldMode: \"none\",\n        triggerField: null,\n        forms: (a = t == null ? void 0 : t.loaddataconfig) == null ? void 0 : a.forms,\n        selectArg: [],\n        selectRel: \"and\",\n        fields: z((l = t == null ? void 0 : t.loaddataconfig) == null ? void 0 : l.mapFields),\n        mapFields: Z((i = t == null ? void 0 : t.loaddataconfig) == null ? void 0 : i.mapFields)\n      },\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, Y = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"user\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: \"34\",\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      noRepeat: !1,\n      limit: {},\n      limitWidget: null,\n      //可选范围 由部门字段确定，如果有值 是 _widget_1762226067008 这种，另一个部门字段的id。和limit互斥，limit将为[]\n      valueOption: 0,\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, K = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"signature\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: 34,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      rely: null,\n      ...t,\n      labelStyle: r\n    },\n    description: null,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, V = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"image\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: 100,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      download: !0,\n      //打包下载\n      is_file_down: !0,\n      //操作权限 可下载\n      check_image_exif: !0,\n      //照片支持查看EXIF扩展信息\n      online_edit: !1,\n      online_edit_record: !1,\n      fileType: [\n        //支持上传的类型，默认，不可以设置\n        \"jpg\",\n        \"jpeg\",\n        \"png\",\n        \"gif\",\n        \"bmp\",\n        \"tif\"\n      ],\n      compressed: !0,\n      //三方图片压缩\n      wxOriginalComponent: !0,\n      //微信/企业微信原生拍照模式\n      onlyCamera: !1,\n      //仅允许拍照上传\n      preview: !0,\n      //是否可以预览 默认 不可以设置\n      watermarkSwitch: !0,\n      //水印属性\n      watermarkPosition: \"center\",\n      //水印位置\n      watermarkFieldTitle: !0,\n      //是否显示水印字段标题\n      watermarkSize: \"14\",\n      //水印字体大小 不可以设置\n      watermarkFixedField: {},\n      previewWidth: 450,\n      //预览的宽 默认 不可以设置\n      previewHeight: 450,\n      //预览的高 默认 不可以设置\n      browserCompress: !0,\n      //浏览器图片压缩\n      quality: 0.7,\n      //压缩图片比例，开启 浏览器图片压缩 后才能设置\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, J = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"upload\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      maxFileCount: 50,\n      //允许多文件上传  1为不可以 50为可以\n      download: !0,\n      //打包下载\n      is_file_down: !0,\n      //操作权限 可下载\n      check_image_exif: !0,\n      //照片支持查看EXIF扩展信息\n      online_edit: !0,\n      //允许文档在线编辑\n      online_edit_record: !0,\n      //是否查看协作记录\n      fileSizeLimit: 10485760,\n      //设置单个文件大小上限，单位是字节，范围 1M-20M\n      // fileType,\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, ee = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"checkboxgroup\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      colorEnable: !0,\n      //颜色 是否开启颜色\n      layout: \"vertical\",\n      allowAddOptions: !1,\n      //允许成员填写时添加新选项\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, te = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"separator\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 12,\n    tab: null,\n    ...n\n  };\n}, re = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"combocheck\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      height: 34,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      colorEnable: !0,\n      //颜色 是否开启颜色\n      mode: \"\",\n      allowAddOptions: !1,\n      //允许成员填写时添加新选项\n      allowAddLinkData: !1,\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, ne = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"location\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      adjustable: !0,\n      //允许移动端微调\n      lnglatVisible: !0,\n      //显示经纬度坐标\n      autoLocation: !0,\n      //移动端自动触发定位\n      enablePcLocation: !0,\n      //允许PC端定位并选择位置\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, ae = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      type: \"textarea\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      triggerEvent: !1,\n      customCls: null,\n      height: 140,\n      width: 734,\n      value: \"\",\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      noRepeat: !1,\n      alertinfo: {\n        icon: \"success\",\n        tip: \"请设置提示内容\"\n      },\n      autoHeight: !0,\n      //根据内容自适应高度\n      maxLength: 5e3,\n      //限制输入最大字符数 不限制的话，整个maxLength不存在\n      ...t,\n      labelStyle: r\n    },\n    // description,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, le = (e = {}) => {\n  const { widget: t, label: r, ...n } = e;\n  return {\n    widget: {\n      type: \"button\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      triggerEvent: 0,\n      customCls: null,\n      height: 36,\n      width: 350,\n      enable: !0,\n      visible: !0,\n      allowBlank: !1,\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        funMode: \"popupreport\"\n      },\n      background: {\n        //颜色\n        mode: \"color\",\n        position: \"center\"\n      },\n      mode: \"all\",\n      //模式  all 扩展  popupreport 弹出报表  popupform 弹出表单  print 页面打印  popuppage 弹出外部网页\n      theme: \"default\",\n      //风格  default 默认，有边框有底色  style1 有边框无底色  none 无边框无底色\n      eventAlert: !1,\n      //是否显示提醒框\n      alertinfo: {\n        icon: \"success\",\n        tip: \"请设置提示内容\"\n      },\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, ie = (e = {}) => {\n  const { widget: t, label: r, ...n } = e;\n  return {\n    widget: {\n      type: \"address\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      width: 720,\n      enable: !0,\n      visible: !0,\n      funMode: \"module\",\n      module: null,\n      libs: [],\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      needDetail: !0,\n      eventMode: 1,\n      //公式联动触发模式  1  默认，省市县/详细地址内容改变都触发   2  只有省市县改变才触发  3  只有详细地址改变才触发\n      seleceMapAddress: !0,\n      //开启经纬度定位\n      ...t,\n      labelStyle: r\n    },\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, oe = (e = {}) => {\n  const { widget: t, label: r, ...n } = e;\n  return {\n    widget: {\n      type: \"subform\",\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      labelStyle: r,\n      extendSet: {\n        sort: [\"datahelp\", \"module\", \"formEvent\"],\n        status: !0,\n        triggerField: \"\",\n        triggerFieldMode: \"none\",\n        version: 1\n      },\n      items: (t.items || []).map((a, l) => {\n        const i = ue(a, !0);\n        return i.widget.widgetName = o(\"_widget\", l), i;\n      }),\n      sortable: !0,\n      //启用子表单数据排序\n      allowImportV2: !1,\n      //从excel导入数据\n      sticky_column: {\n        //PC端冻结前 n 列\n        limit: 2,\n        //多少列  范围 1-3\n        enable: !0\n        //是否开启\n      },\n      sticky_column_mobile: {\n        //移动端冻结前 n 列\n        limit: 1,\n        //多少列  范围 1-3\n        enable: !0\n        //是否开启\n      },\n      mobileStyle: \"table\",\n      //移动端显示样式  list 纵向展开 table 横向表格\n      subform_create: !0,\n      //可新增记录\n      subform_insert: !0,\n      //可插入记录\n      subform_edit: !0,\n      //可编辑已有记录\n      subform_delete: !0,\n      //可删除已有记录\n      subform_fill: !0,\n      //允许填报数据\n      subform_import: !0,\n      //允许导入数据\n      subform_dataload: !0,\n      //允许数据加载\n      loaddataconfig: {\n        //数据加载设置\n        mode: \"tree\",\n        extendSet: {\n          sort: [\"datahelp\", \"module\", \"formEvent\"],\n          status: !0,\n          triggerField: \"\",\n          triggerFieldMode: \"none\"\n        }\n      },\n      allowLoadData: !1,\n      //是否开启数据加载\n      allowAddData: !0,\n      //允许新增数据源数据\n      subformloaddataTitle: \"数据加载\",\n      //数据加载显示的标题\n      subFieldShowRules: [],\n      //子字段显隐规则\n      quick_fill: !0\n      //从excel填报数据\n    },\n    description: null,\n    label: r,\n    lineWidth: 12,\n    tab: null\n  };\n}, se = (e) => {\n  const { widget: t, label: r, ...n } = e || {};\n  return {\n    widget: {\n      widgetName: o(),\n      widgetNameAlias: \"\",\n      customCls: null,\n      enable: !0,\n      visible: !0,\n      allowBlank: !0,\n      linkFilter: {},\n      rely: {\n        widgets: []\n      },\n      showMode: \"one\",\n      //显示数据条数   one 一条  many 多条\n      allowAdd: !0,\n      //允许新增关联表数据，只有 refType 为 form才可以选择true\n      refType: \"form\",\n      //关联表的类型，根据 linkForm 表的类型决定的。  form 表单   etl_table 视图   aggregate_table 聚合表\n      showType: \"none\",\n      //数据显示模式   none 默认  label 标题\n      addExtendSet: [],\n      ...t,\n      linkFields: [],\n      labelStyle: r,\n      type: \"linkquery\"\n    },\n    description: null,\n    label: r,\n    lineWidth: 6,\n    tab: null,\n    ...n\n  };\n}, de = {\n  address: ie,\n  button: le,\n  textarea: ae,\n  datetime: $,\n  text: v,\n  password: v,\n  location: ne,\n  radiogroup: S,\n  radio: S,\n  combo: L,\n  combocheck: re,\n  separator: te,\n  checkboxgroup: ee,\n  upload: J,\n  number: I,\n  image: V,\n  signature: K,\n  user: Y,\n  dataload: X,\n  linkdata: Q,\n  linkquery: se,\n  usergroup: H,\n  subform: oe,\n  dept: j,\n  sn: U,\n  deptgroup: G,\n  flowState: g,\n  flowstate: g,\n  formula: g,\n  unknown: g\n}, ue = (e, t = !1) => {\n  var l, i;\n  if (!e || !e.widget || !e.widget.type)\n    return e;\n  const r = e.widget.type || \"unknown\";\n  return t && r === \"subform\" ? g(e) : (((i = (l = e == null ? void 0 : e.widget) == null ? void 0 : l.widgetName) != null ? i : \"\").startsWith(\"_widget_\") || (e.widget.widgetName = q()), (de[r] || g)(e));\n};\nexport {\n  xe as DATA_COUNT_PER_BATCH,\n  F as FIELD_TYPE_OPERATOR_MAP,\n  we as GetLoadingMsg,\n  ye as GetPartErrMsg,\n  pe as GetQueryResult,\n  Ae as GetSafeFormStructure,\n  k as IsErrorPart,\n  ce as IsFakeMsgPart,\n  fe as IsFileGroupPart,\n  ge as IsFilePart,\n  be as IsLoadingPart,\n  me as IsQueryResultPart,\n  qe as OPERATOR_LABEL_MAP,\n  x as WHITE_LIST_FIELDS_SET,\n  We as bsConditionParse2Condition,\n  Re as conditionStringify2bsCondition,\n  Ce as createFieldPartsExtractor,\n  ke as createGetFieldJsonInfo,\n  M as createPartTypeChecker,\n  _e as createPayloadTypeChecker,\n  d as extractTextPartMeta,\n  _ as flatArr,\n  Fe as getAvailableOperators,\n  Ee as getDefaultOperator,\n  Be as getIconUnicode,\n  he as getMetaErrorMsg,\n  Me as imageUrlToBase64,\n  ve as injectHostStylesIntoShadow,\n  Pe as isCtxMatch,\n  De as isHelperCondMet,\n  Te as mergeConsecutiveTargets,\n  Oe as promptParser,\n  ue as rebuildFieldsJsonStructure,\n  Ne as safeParseJson,\n  Se as valueNormalizer\n};\n//# sourceMappingURL=ai-feat-utils.js.map\n","import { getIconUnicode } from \"@baishuyun/ai-feat-utils\";\n\nfunction getFormIconClass(icon: number): string {\n  const isNew = icon >= 25;\n  const newStr = isNew ? '-new' : '';\n  return `node-icon icon-bsy-form${newStr} icon${newStr}-bsy-form-${icon}`;\n}\n\nexport const AppIcon = ({\n  name\n}: {\n  name: number | string;\n}) => {\n  return (\n    <div className={\"imgbg-bsy-app imgbg-bsy-app-\" + name}/>\n  );\n}\n\nexport const FontIcon = ({\n  code,\n  name,\n  className,\n  style,\n  color,\n}: {\n  code?: string;\n  name?: number;\n  className?: string;\n  style?: React.CSSProperties;\n  color?: string;\n}) => {\n  if (!code && !name) {\n    return null;\n  }\n\n  if (code) {\n    return (\n      <i\n        className={`sdk-icon ${className || ''}`}\n        style={{ ...style, color }}\n        dangerouslySetInnerHTML={{ __html: code }}\n      />\n    );\n  }\n\n  const iconCode = code || getIconUnicode(name?.toString() || '');\n  if (!iconCode) {\n    return (\n      <i\n        className={getFormIconClass(name!)}\n        style={{ fontSize: 16, lineHeight: 1 }}\n      />\n    )\n  }\n\n  return (\n    <i\n      className={`sdk-icon ${className || ''}`}\n      style={{ ...style, color }}\n      dangerouslySetInnerHTML={{ __html: iconCode }}\n    />\n  );\n};\n","import { useState } from 'react';\nimport { Check } from 'lucide-react';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { usePortalContainer } from '../../../hooks/use-portal-container';\nimport { FontIcon } from '../../../components/font-icon';\n\nexport type SortOrder = 'newest' | 'oldest';\n\nexport interface AgentSortSelectProps {\n  value?: SortOrder;\n  onChange?: (value: SortOrder) => void;\n  className?: string;\n}\n\nconst SORT_OPTIONS: { id: SortOrder; label: string }[] = [\n  { id: 'newest', label: '最新' },\n  { id: 'oldest', label: '最早' },\n];\n\nexport const AgentSortSelect = ({\n  value = 'newest',\n  onChange,\n  className,\n}: AgentSortSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const currentLabel = SORT_OPTIONS.find((o) => o.id === value)?.label ?? '最新';\n\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-weekdays-select-portal');\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <button\n          type=\"button\"\n          ref={setTriggerRef}\n          className={cn(\n            'flex items-center gap-[6px] px-[10px] h-[34px] rounded-[4px] bg-transparent',\n            'text-[14px] text-[#030303] leading-[normal] whitespace-nowrap',\n            'hover:bg-[#EFF0F6]',\n            open && 'bg-[#EFF0F6]',\n            transCls,\n            className,\n          )}\n        >\n          <FontIcon code=\"&#xe86b;\" className='text-[16px]' />\n          <span>{currentLabel}</span>\n        </button>\n      </PopoverTrigger>\n      <PopoverContent\n        align=\"start\"\n        sideOffset={4}\n        className=\"w-auto min-w-[100px] rounded-[4px] bg-white p-[4px] shadow-[0px_0px_8px_rgba(0,0,0,0.1)]\"\n        portalContainer={portalContainer}\n      >\n        {SORT_OPTIONS.map((option) => {\n          const isSelected = value === option.id;\n          return (\n            <button\n              key={option.id}\n              type=\"button\"\n              onClick={() => {\n                onChange?.(option.id);\n                setOpen(false);\n              }}\n              className={cn(\n                'flex items-center justify-between w-full h-[34px] px-[10px] rounded-[4px] text-left',\n                isSelected ? 'bg-[#EFF0F6] text-[#0265FF]' : 'bg-white text-[#030303] hover:bg-[#EFF0F6]',\n                transCls,\n              )}\n            >\n              <span className=\"text-[14px] leading-[normal] whitespace-nowrap\">\n                {option.label}\n              </span>\n              <Check\n                size={16}\n                className={cn(\n                  'shrink-0',\n                  isSelected ? 'opacity-100' : 'opacity-0',\n                )}\n              />\n            </button>\n          );\n        })}\n      </PopoverContent>\n    </Popover>\n  );\n};\n","import {\n  forwardRef,\n  useState,\n  useRef,\n  useEffect,\n  useMemo,\n  useCallback,\n  useLayoutEffect,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { SolidArrowDownIcon, SearchIcon } from '../../bs-icons';\n\nconst FolderIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n    <path d=\"M13.9004 15H2.65039C2.25257 15 1.87104 14.842 1.58973 14.5607C1.30843 14.2794 1.15039 13.8978 1.15039 13.5V4.5C1.15039 4.10218 1.30843 3.72064 1.58973 3.43934C1.87104 3.15804 2.25257 3 2.65039 3H7.15039L8.65039 4.5H13.9004C14.0974 4.5 14.2924 4.5388 14.4744 4.61418C14.6564 4.68956 14.8218 4.80005 14.9611 4.93934C15.1003 5.07863 15.2108 5.24399 15.2862 5.42597C15.3616 5.60796 15.4004 5.80302 15.4004 6H2.65039V13.5L4.25539 7.5H16.0754C16.1927 7.49595 16.3093 7.51947 16.4158 7.56867C16.5223 7.61788 16.6158 7.69139 16.6888 7.78331C16.7617 7.87523 16.8121 7.98298 16.8358 8.0979C16.8595 8.21282 16.856 8.33171 16.8254 8.445L15.3704 13.875C15.2865 14.1999 15.0961 14.4873 14.8296 14.6913C14.5631 14.8952 14.2359 15.0039 13.9004 15Z\" fill=\"#6F81BD\"/>\n  </svg>\n);\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport interface FormSelectItem {\n  id: string;\n  name: string;\n  icon?: number;\n  type?: string;\n  parent?: string;\n  itemType?: 'form' | 'group';\n}\n\nexport interface FormSelectChangeResult {\n  form: FormSelectItem;\n}\n\nexport interface FormSelectProps {\n  items: FormSelectItem[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (result: FormSelectChangeResult) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\n// ── Tree types ────────────────────────────────────────────────────\n\ninterface FormTreeItem {\n  id: string;\n  name: string;\n  icon: number;\n  type: string;\n  itemType: 'form' | 'group';\n  children: FormTreeItem[];\n  depth: number;\n  form: FormSelectItem | null;\n}\n\n// ── Depth padding ─────────────────────────────────────────────────\n\nconst DEPTH_PADDING: Record<number, string> = {\n  0: 'pl-[10px]',\n  1: 'pl-[32px]',\n  2: 'pl-[54px]',\n  3: 'pl-[76px]',\n};\n\nfunction getDepthPadding(depth: number): string {\n  return DEPTH_PADDING[Math.min(depth, 3)] ?? DEPTH_PADDING[3];\n}\n\n// ── Tree builder ──────────────────────────────────────────────────\n\nfunction buildFormTree(items: FormSelectItem[], searchQuery: string): FormTreeItem[] {\n  const lowerQuery = searchQuery.toLowerCase().trim();\n\n  // Build parent → children map\n  const childrenByParent = new Map<string, FormSelectItem[]>();\n  for (const item of items) {\n    const parentKey = item.parent || '0';\n    if (!childrenByParent.has(parentKey)) {\n      childrenByParent.set(parentKey, []);\n    }\n    childrenByParent.get(parentKey)!.push(item);\n  }\n\n  // Root parents: any parent key that is '0' or not in items\n  const allItemIds = new Set(items.map((i) => i.id));\n  const allParentKeys = new Set(childrenByParent.keys());\n  const rootParents = Array.from(allParentKeys).filter(\n    (p) => p === '0' || !allItemIds.has(p),\n  );\n\n  function buildRecursive(parentId: string, depth: number): FormTreeItem[] {\n    const childItems = childrenByParent.get(parentId) || [];\n    const nodes: FormTreeItem[] = [];\n\n    for (const item of childItems) {\n      const isGroup = item.itemType === 'group';\n      const children = buildRecursive(item.id, depth + 1);\n      const nameMatch = !lowerQuery || item?.name?.toLowerCase().includes(lowerQuery);\n\n      if (isGroup) {\n        if (nameMatch || children.length > 0) {\n          nodes.push({\n            id: item.id,\n            name: item.name,\n            icon: item.icon ?? 0,\n            type: item.type ?? 'group',\n            itemType: 'group',\n            children,\n            depth,\n            form: item,\n          });\n        }\n      } else {\n        if (nameMatch) {\n          nodes.push({\n            id: item.id,\n            name: item.name,\n            icon: item.icon ?? 0,\n            type: item.type ?? 'form',\n            itemType: 'form',\n            children: [],\n            depth,\n            form: item,\n          });\n        }\n      }\n    }\n\n    return nodes;\n  }\n\n  const result: FormTreeItem[] = [];\n  for (const rootId of rootParents) {\n    result.push(...buildRecursive(rootId, 0));\n  }\n  return result;\n}\n\n// ── Form Icon ─────────────────────────────────────────────────────\n\nfunction getFormIconClass(icon: number): string {\n  const isNew = icon >= 25;\n  const newStr = isNew ? '-new' : '';\n  return `node-icon icon-bsy-form${newStr} icon${newStr}-bsy-form-${icon}`;\n}\n\n// ── Entry Item ────────────────────────────────────────────────────\n\nfunction FormEntryItem({\n  item,\n  depth,\n  isSelected,\n  onClick,\n}: {\n  item: FormTreeItem;\n  depth: number;\n  isSelected: boolean;\n  onClick: () => void;\n}) {\n  return (\n    <div\n      className={cn(\n        'flex items-center justify-between h-[34px] px-[10px] cursor-pointer rounded-[4px] shrink-0',\n        getDepthPadding(depth),\n        isSelected ? 'bg-[#F0F6FF] text-[#0265FF]' : 'text-[#030303] hover:bg-[#EFF0F6]',\n        transCls,\n      )}\n      onClick={onClick}\n    >\n      <span className=\"flex items-center gap-[6px] min-w-0 flex-1\">\n        <i\n          className={getFormIconClass(item.icon)}\n          style={{ fontSize: 16, lineHeight: 1 }}\n        />\n        <span className=\"text-[14px] leading-[normal] truncate\">\n          {item.name}\n        </span>\n      </span>\n    </div>\n  );\n}\n\n// ── Tree Item Node ────────────────────────────────────────────────\n\nfunction FormTreeItemNode({\n  item,\n  selectedFormId,\n  onSelect,\n}: {\n  item: FormTreeItem;\n  selectedFormId: string | undefined;\n  onSelect: (result: FormSelectChangeResult) => void;\n}) {\n  const [expanded, setExpanded] = useState(true);\n\n  if (item.itemType === 'group') {\n    return (\n      <div>\n        <div\n          className={cn(\n            'flex items-center gap-[6px] h-[34px] px-[10px] cursor-pointer rounded-[4px]',\n            getDepthPadding(item.depth),\n            'hover:bg-[#EFF0F6]',\n            transCls,\n          )}\n          onClick={() => setExpanded(!expanded)}\n        >\n          <span\n            className={cn(\n              'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n              transCls,\n              expanded && 'rotate-90',\n            )}\n          >\n            <SolidArrowDownIcon className=\"-rotate-90\" size={16} />\n          </span>\n          <FolderIcon />\n          <span className=\"text-[14px] text-[#030303] truncate\">\n            {item.name}\n          </span>\n        </div>\n        {expanded &&\n          item.children.map((child) => (\n            <FormTreeItemNode\n              key={child.id}\n              item={child}\n              selectedFormId={selectedFormId}\n              onSelect={onSelect}\n            />\n          ))}\n      </div>\n    );\n  }\n\n  return (\n    <FormEntryItem\n      item={item}\n      depth={item.depth}\n      isSelected={selectedFormId === item.id}\n      onClick={() => {\n        if (item.form) {\n          onSelect({ form: item.form });\n        }\n      }}\n    />\n  );\n}\n\n// ── Popover ───────────────────────────────────────────────────────\n\nfunction FormPopover({\n  searchQuery,\n  onSearchChange,\n  tree,\n  selectedFormId,\n  onSelect,\n  hasSearch,\n}: {\n  searchQuery: string;\n  onSearchChange: (v: string) => void;\n  tree: FormTreeItem[];\n  selectedFormId: string | undefined;\n  onSelect: (result: FormSelectChangeResult) => void;\n  hasSearch: boolean;\n}) {\n  return (\n    <div\n      className={cn(\n        'bg-white rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[4px]',\n        'flex flex-col gap-[4px]',\n      )}\n    >\n      {/* Search input */}\n      <div className=\"flex items-center gap-[6px] border border-[#E0E0E0] rounded-[4px] h-[30px] px-[10px] py-[5px]\">\n        <SearchIcon />\n        <input\n          type=\"text\"\n          value={searchQuery}\n          onChange={(e) => onSearchChange(e.target.value)}\n          placeholder=\"输入表单名称来搜索\"\n          className=\"flex-1 outline-none text-[14px] placeholder:text-[#999999] bg-transparent min-w-0 text-[#030303]\"\n        />\n      </div>\n\n      {/* Form list */}\n      <div className=\"flex flex-col gap-0 max-h-[400px] overflow-y-auto\">\n        {tree.length > 0 ? (\n          tree.map((node) => (\n            <FormTreeItemNode\n              key={node.id}\n              item={node}\n              selectedFormId={selectedFormId}\n              onSelect={onSelect}\n            />\n          ))\n        ) : hasSearch ? (\n          <div className=\"text-[12px] text-[#999999] py-[8px] text-center\">\n            无匹配结果\n          </div>\n        ) : (\n          <div className=\"text-[12px] text-[#999999] py-[8px] text-center\">\n            暂无表单\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n\n// ── Main Component ────────────────────────────────────────────────\n\nexport const FormSelect = forwardRef<HTMLDivElement, FormSelectProps>(\n  (\n    {\n      items,\n      value: controlledValue,\n      defaultValue,\n      onChange,\n      placeholder = '请选择表单',\n      disabled = false,\n      className,\n    },\n    ref,\n  ) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [searchQuery, setSearchQuery] = useState('');\n    const [internalValue, setInternalValue] = useState<string | undefined>(\n      defaultValue,\n    );\n    const triggerRef = useRef<HTMLDivElement>(null);\n    const popoverRef = useRef<HTMLDivElement>(null);\n    const [popoverStyle, setPopoverStyle] = useState<React.CSSProperties>({});\n    const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n    const selectedFormId = controlledValue ?? internalValue;\n\n    // Build the form tree\n    const tree = useMemo(() => {\n      return buildFormTree(items, searchQuery);\n    }, [items, searchQuery]);\n\n    // Find selected form\n    const selectedForm = useMemo(() => {\n      if (!selectedFormId) return null;\n      return items.find((item) => item.id === selectedFormId && item.itemType !== 'group') ?? null;\n    }, [items, selectedFormId]);\n\n    const hasSearch = searchQuery.trim().length > 0;\n\n    // ── Position helpers ──────────────────────────────────────────\n\n    const updatePopoverPosition = useCallback(() => {\n      if (!triggerRef.current) return;\n      const rect = triggerRef.current.getBoundingClientRect();\n      setPopoverStyle({\n        position: 'fixed',\n        top: rect.bottom + 4,\n        left: rect.left,\n        minWidth: Math.max(rect.width, 240),\n        zIndex: 9999,\n        pointerEvents: 'auto',\n      });\n    }, []);\n\n    const setTriggerRef = useCallback((node: HTMLDivElement | null) => {\n      (triggerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n      if (!node) {\n        setPortalContainer(null);\n        return;\n      }\n      const rootNode = node.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        const existing = rootNode.querySelector<HTMLElement>(\n          '[data-bs-form-select-portal]',\n        );\n        if (existing) {\n          setPortalContainer(existing);\n          return;\n        }\n        // Append portal inside the React root container so React event\n        // delegation sees events from portal content. The React root is\n        // the element that ReactDOM.createRoot() was called on.\n        const reactRoot = rootNode.getElementById('ai-office-container') || rootNode;\n        const container = document.createElement('div');\n        container.setAttribute('data-bs-form-select-portal', 'true');\n        reactRoot.appendChild(container);\n        setPortalContainer(container);\n        return;\n      }\n      setPortalContainer(null);\n    }, []);\n\n    // ── Handlers ──────────────────────────────────────────────────\n\n    const handleClose = useCallback(() => {\n      setIsOpen(false);\n      setSearchQuery('');\n    }, []);\n\n    const handleToggle = useCallback(() => {\n      if (disabled) return;\n      if (isOpen) {\n        handleClose();\n      } else {\n        setIsOpen(true);\n        updatePopoverPosition();\n      }\n    }, [disabled, isOpen, handleClose, updatePopoverPosition]);\n\n    const handleSelect = useCallback(\n      (result: FormSelectChangeResult) => {\n        setInternalValue(result.form.id);\n        onChange?.(result);\n        handleClose();\n      },\n      [onChange, handleClose],\n    );\n\n    // ── Event listeners ───────────────────────────────────────────\n\n    // Click-outside: close popover when clicking outside both the trigger and popover.\n    // Uses native mousedown on the trigger's root node (ShadowRoot or document) so it\n    // works regardless of stacking contexts. Mousedown events on the popover itself are\n    // stopped from propagating, so this listener only sees external clicks.\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const rootNode = triggerRef.current?.getRootNode() as Document | ShadowRoot | undefined;\n      const eventTarget = rootNode ?? document;\n\n      const handleClickOutside = (e: Event) => {\n        const target = e.target as HTMLElement;\n        if (\n          (popoverRef.current && popoverRef.current.contains(target)) ||\n          (triggerRef.current && triggerRef.current.contains(target))\n        ) {\n          return;\n        }\n        handleClose();\n      };\n\n      eventTarget.addEventListener('mousedown', handleClickOutside);\n\n      return () => {\n        eventTarget.removeEventListener('mousedown', handleClickOutside);\n      };\n    }, [isOpen, handleClose]);\n\n    // Keep popover positioned correctly when the viewport resizes\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const handleResize = () => {\n        updatePopoverPosition();\n      };\n\n      window.addEventListener('resize', handleResize);\n      return () => window.removeEventListener('resize', handleResize);\n    }, [isOpen, updatePopoverPosition]);\n\n    // Poll popover position every frame to track scroll (scroll events aren't\n    // composed, so they don't cross shadow boundaries)\n    useLayoutEffect(() => {\n      if (!isOpen) return;\n\n      let rafId: number;\n      const poll = () => {\n        updatePopoverPosition();\n        rafId = requestAnimationFrame(poll);\n      };\n      rafId = requestAnimationFrame(poll);\n\n      return () => cancelAnimationFrame(rafId);\n    }, [isOpen, updatePopoverPosition]);\n\n    // Keyboard: close on Escape\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const handleEscape = (e: Event) => {\n        if ((e as KeyboardEvent).key === 'Escape') {\n          handleClose();\n        }\n      };\n\n      const rootNode = triggerRef.current?.getRootNode() as Document | ShadowRoot | undefined;\n      const eventTarget = rootNode ?? document;\n      eventTarget.addEventListener('keydown', handleEscape);\n      return () => eventTarget.removeEventListener('keydown', handleEscape);\n    }, [isOpen, handleClose]);\n\n    // Prevent native events inside the popover from bubbling to document-\n    // level listeners (e.g. Radix DismissableLayer, react-remove-scroll).\n    // Without this, a parent Drawer would: (a) close on click, (b) capture\n    // wheel events making the popover list unscrollable.\n    useEffect(() => {\n      if (!isOpen) return;\n      const el = popoverRef.current;\n      if (!el) return;\n\n      const blockEvents = (e: Event) => e.stopPropagation();\n      el.addEventListener('mousedown', blockEvents);\n      el.addEventListener('pointerdown', blockEvents);\n      el.addEventListener('wheel', blockEvents);\n      return () => {\n        el.removeEventListener('mousedown', blockEvents);\n        el.removeEventListener('pointerdown', blockEvents);\n        el.removeEventListener('wheel', blockEvents);\n      };\n    }, [isOpen]);\n\n    // ── Render ────────────────────────────────────────────────────\n\n    return (\n      <div ref={ref} className={cn('relative inline-flex min-w-0 w-full', className)}>\n        {/* Trigger */}\n        <div\n          ref={setTriggerRef}\n          className={cn(\n            'flex items-center gap-[10px] px-[10px] py-[7px] rounded-[4px] cursor-pointer select-none w-full',\n            'bg-white border',\n            isOpen\n              ? 'border-[#0265FF]'\n              : 'border-[#E0E0E0] hover:border-[#0265FF]',\n            transCls,\n            disabled && 'opacity-50 cursor-not-allowed',\n          )}\n          onClick={handleToggle}\n        >\n          <span className=\"flex items-center gap-[6px] min-w-0 flex-1\">\n            {selectedForm ? (\n              <>\n                <i\n                  className={getFormIconClass(selectedForm.icon ?? 0)}\n                  style={{ fontSize: 16, lineHeight: 1 }}\n                />\n                <span className=\"text-[14px] text-[#030303] leading-[normal] truncate\">\n                  {selectedForm.name}\n                </span>\n              </>\n            ) : (\n              <span className=\"text-[14px] text-[#999999] leading-[normal] truncate\">\n                {placeholder}\n              </span>\n            )}\n          </span>\n          <span\n            className={cn(\n              'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n              transCls,\n              isOpen && 'rotate-180',\n            )}\n          >\n            <SolidArrowDownIcon size={16} />\n          </span>\n        </div>\n\n        {/* Popover */}\n        {isOpen &&\n          createPortal(\n            <div ref={popoverRef} style={popoverStyle}>\n              <FormPopover\n                searchQuery={searchQuery}\n                onSearchChange={setSearchQuery}\n                tree={tree}\n                selectedFormId={selectedFormId}\n                onSelect={handleSelect}\n                hasSearch={hasSearch}\n              />\n            </div>,\n            portalContainer || document.body,\n          )}\n      </div>\n    );\n  },\n);\n\nFormSelect.displayName = 'FormSelect';\n","import * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { cn } from '../lib/utils';\nimport { CheckerInBoxIcon } from './bs-icons';\n\nconst SquareInBoxIcon = () => {\n  // size 8, border 1px svg\n  return (\n    <svg\n      width=\"8\"\n      height=\"8\"\n      viewBox=\"0 0 8 8\"\n      // fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <rect x=\"0.5\" y=\"0.5\" width=\"7\" height=\"7\" rx=\"1\" fill=\"#0265ff\" />\n    </svg>\n  );\n};\n\nexport type SquareCheckerProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n  /** Optional label rendered beside the checkbox */\n  children?: React.ReactNode;\n  readonly?: boolean;\n  intermediate?: boolean;\n};\n\nexport const SquareChecker = React.forwardRef<\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\n  SquareCheckerProps\n>(({ className, children, id, readonly, disabled, intermediate, ...props }, ref) => {\n  const generatedId = React.useId();\n  const checkboxId = id ?? generatedId;\n\n  return (\n    <label\n      htmlFor={checkboxId}\n      className={cn(\n        'inline-flex items-center gap-[6px] select-none text-[#121111] text-[14px]',\n        disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n        {\n          'pointer-events-none': readonly,\n        }\n      )}\n    >\n      <CheckboxPrimitive.Root\n        ref={ref}\n        id={checkboxId}\n        disabled={disabled}\n        className={cn(\n          // base layout\n          'inline-flex shrink-0 items-center justify-center',\n          'w-[16px] h-[16px] rounded-[2px] box-border border',\n          'transition-colors duration-200',\n          'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#0265FF] focus-visible:ring-offset-1',\n          // normal: gray border, white bg\n          'border-[#E0E0E0] bg-white',\n          // hover: blue border (browsers suppress hover on disabled <button>)\n          'hover:border-[#0265FF]',\n          // checked: blue fill\n          'data-[state=checked]:bg-[#0265FF] data-[state=checked]:border-[#0265FF]',\n          // disabled unchecked: gray bg + gray border\n          'disabled:cursor-not-allowed disabled:bg-[#F0F0F0] disabled:border-[#C2C2C2]',\n          // disabled checked: use muted gray fill\n          'disabled:data-[state=checked]:bg-[#C2C2C2] disabled:data-[state=checked]:border-[#C2C2C2]',\n          // indeterminate: blue fill\n          intermediate && 'bg-white border-[#0265FF] text-[#0265FF]',\n          className,\n          {\n            'opacity-50': readonly,\n          }\n        )}\n        {...props}\n      >\n        <CheckboxPrimitive.Indicator className=\"text-white\" forceMount={intermediate || undefined}>\n          {intermediate ? <SquareInBoxIcon /> : <CheckerInBoxIcon />}\n        </CheckboxPrimitive.Indicator>\n      </CheckboxPrimitive.Root>\n\n      {children != null && (\n        <span className={cn('text-sm leading-none', disabled && 'text-[#C2C2C2]')}>{children}</span>\n      )}\n    </label>\n  );\n});\n\nSquareChecker.displayName = 'SquareChecker';\n","import { useState, useCallback, useMemo, useRef } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { SquareChecker } from '../../square-checker';\nimport type { IAppGroup, IAppGroupItem } from '@baishuyun/types';\nimport { AppIcon } from '../../font-icon';\nimport { SearchIcon } from '../../bs-icons';\n\n// ── Tree Node Type ────────────────────────────────────────────────\n\nexport interface AppTreeNode {\n  id: string;\n  label: string;\n  type: 'group' | 'app' | 'item';\n  color?: string;\n  children?: AppTreeNode[];\n  /** Original app data (for leaf app nodes) */\n  data?: IAppGroupItem;\n}\n\n// ── Converter: IAppGroup[] → AppTreeNode[] ────────────────────────\n\nexport function groupsToAppTreeNodes(groups: IAppGroup[]): AppTreeNode[] {\n  return groups.map((group) => ({\n    id: group._id,\n    label: group.name,\n    type: 'group' as const,\n    children: group.apps.map((app) => ({\n      id: app._id,\n      label: app.appname,\n      type: 'app' as const,\n      color: String(app.style?.color || '#666666'),\n      data: app,\n    })),\n  }));\n}\n\n// ── Inline SVG Icons ──────────────────────────────────────────────\n\n/** Folder/group icon (16x16) */\nconst FolderIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n    <path d=\"M13.9004 15H2.65039C2.25257 15 1.87104 14.842 1.58973 14.5607C1.30843 14.2794 1.15039 13.8978 1.15039 13.5V4.5C1.15039 4.10218 1.30843 3.72064 1.58973 3.43934C1.87104 3.15804 2.25257 3 2.65039 3H7.15039L8.65039 4.5H13.9004C14.0974 4.5 14.2924 4.5388 14.4744 4.61418C14.6564 4.68956 14.8218 4.80005 14.9611 4.93934C15.1003 5.07863 15.2108 5.24399 15.2862 5.42597C15.3616 5.60796 15.4004 5.80302 15.4004 6H2.65039V13.5L4.25539 7.5H16.0754C16.1927 7.49595 16.3093 7.51947 16.4158 7.56867C16.5223 7.61788 16.6158 7.69139 16.6888 7.78331C16.7617 7.87523 16.8121 7.98298 16.8358 8.0979C16.8595 8.21282 16.856 8.33171 16.8254 8.445L15.3704 13.875C15.2865 14.1999 15.0961 14.4873 14.8296 14.6913C14.5631 14.8952 14.2359 15.0039 13.9004 15Z\" fill=\"#6F81BD\"/>\n  </svg>\n);\n\n/** App grid icon (16x16), colorized */\n// const AppGridIcon = ({ color }: { color?: string }) => {\n//   const c = color || '#666666';\n//   return (\n//     <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n//       <rect x=\"1.5\" y=\"1.5\" width=\"5\" height=\"5\" rx=\"1\" fill={c} opacity=\"0.2\" />\n//       <rect x=\"1.5\" y=\"1.5\" width=\"5\" height=\"5\" rx=\"1\" stroke={c} strokeWidth=\"1.2\" />\n//       <rect x=\"9.5\" y=\"1.5\" width=\"5\" height=\"5\" rx=\"1\" fill={c} opacity=\"0.2\" />\n//       <rect x=\"9.5\" y=\"1.5\" width=\"5\" height=\"5\" rx=\"1\" stroke={c} strokeWidth=\"1.2\" />\n//       <rect x=\"1.5\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"1\" fill={c} opacity=\"0.2\" />\n//       <rect x=\"1.5\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"1\" stroke={c} strokeWidth=\"1.2\" />\n//       <rect x=\"9.5\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"1\" fill={c} opacity=\"0.2\" />\n//       <rect x=\"9.5\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"1\" stroke={c} strokeWidth=\"1.2\" />\n//     </svg>\n//   );\n// };\n\n/** Generic item icon (16x16), colorized — used for leaf items */\n// const ItemIcon = ({ color }: { color?: string }) => (\n//   <AppGridIcon color={color} />\n// );\n\n/** Collapse/expand toggle (18x18) — shown on expandable parent nodes */\nconst ToggleIcon = ({ expanded }: { expanded: boolean }) => (\n  <svg\n    width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n  >\n    <path d=\"M6 8L9 11L12 8\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\n/** Close X icon (12x12) for chip dismiss */\nconst CloseIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\n/** More dots icon (12x12) for overflow chip */\nconst MoreIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <circle cx=\"2\" cy=\"6\" r=\"1\" fill=\"#999999\" />\n    <circle cx=\"6\" cy=\"6\" r=\"1\" fill=\"#999999\" />\n    <circle cx=\"10\" cy=\"6\" r=\"1\" fill=\"#999999\" />\n  </svg>\n);\n\n/** Dropdown chevron in trigger — matches Figma trigger icon */\nconst DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport const ALL_APPS_VALUE = '__all__';\n\nexport interface AppSelectProps {\n  /** Tree nodes to display. Use groupsToAppTreeNodes() to convert IAppGroup[] */\n  nodes: AppTreeNode[];\n  /** Selection mode */\n  mode?: 'single' | 'multiple';\n  /** Controlled value — selected node id(s) */\n  value?: string | string[];\n  /** Uncontrolled default value */\n  defaultValue?: string | string[];\n  /** Change handler — returns selected id(s) */\n  onChange?: (value: string | string[]) => void;\n  /** Placeholder when no selection */\n  placeholder?: string;\n  /** Search placeholder */\n  searchPlaceholder?: string;\n  /** Disable the control */\n  disabled?: boolean;\n  /** Max visible chips in multi-select trigger (default 4) */\n  maxVisibleChips?: number;\n  /** Additional className */\n  className?: string;\n  /** Show a \"全部应用\" (All Apps) item at the top. Only effective in single mode. */\n  showAll?: boolean;\n  popoverContentOnly?: boolean; // for testing: render only the popover content without the trigger\n}\n\n// ── Helpers ───────────────────────────────────────────────────────\n\n/** Flatten tree into a map of id → node */\nfunction flattenNodes(nodes: AppTreeNode[]): Map<string, AppTreeNode> {\n  const map = new Map<string, AppTreeNode>();\n  const walk = (list: AppTreeNode[]) => {\n    for (const n of list) {\n      map.set(n.id, n);\n      if (n.children) walk(n.children);\n    }\n  };\n  walk(nodes);\n  return map;\n}\n\n// ── Component ─────────────────────────────────────────────────────\n\nexport const AppSelect = ({\n  nodes,\n  mode = 'single',\n  popoverContentOnly,\n  showAll = false,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  placeholder = '请选择',\n  searchPlaceholder = '输入应用名称来搜索',\n  disabled = false,\n  maxVisibleChips = 4,\n  className,\n}: AppSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [searchQuery, setSearchQuery] = useState('');\n  const [internalValue, setInternalValue] = useState<string | string[]>(\n    defaultValue ?? (mode === 'multiple' ? [] : '')\n  );\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const [triggerWidth, setTriggerWidth] = useState<number>(0);\n  const triggerBtnRef = useRef<HTMLButtonElement | null>(null);\n\n  // Expanded node IDs (only nodes with children can be expanded)\n  const [expandedIds, setExpandedIds] = useState<Set<string>>(() => {\n    // Start with root nodes expanded\n    const s = new Set<string>();\n    const initExpand = (list: AppTreeNode[], depth: number) => {\n      for (const n of list) {\n        if (n.children && n.children.length > 0 && depth < 2) {\n          s.add(n.id);\n          initExpand(n.children, depth + 1);\n        }\n      }\n    };\n    initExpand(nodes, 0);\n    return s;\n  });\n\n  // Controlled vs uncontrolled value\n  const resolvedValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n  // Flat lookup\n  const nodeMap = useMemo(() => flattenNodes(nodes), [nodes]);\n\n  // Selected ids as Set\n  const selectedIds = useMemo(() => {\n    if (mode === 'multiple') {\n      return new Set(Array.isArray(resolvedValue) ? resolvedValue : []);\n    }\n    return new Set(typeof resolvedValue === 'string' && resolvedValue ? [resolvedValue] : []);\n  }, [resolvedValue, mode]);\n\n  // Selected labels for trigger\n  const selectedLabels = useMemo(() => {\n    const ids = Array.isArray(resolvedValue) ? resolvedValue : (resolvedValue ? [resolvedValue] : []);\n    return ids.map((id) => nodeMap.get(id)?.label ?? id);\n  }, [resolvedValue, nodeMap]);\n\n  const selectedAppLabel =\n    mode === 'single' && selectedLabels.length === 1\n      ? selectedLabels[0] === ALL_APPS_VALUE\n        ? '全部应用'\n        : selectedLabels[0]\n      : null;\n\n  // ── Tree filter by search ──────────────────────────────────────\n\n  const filteredNodes = useMemo(() => {\n    if (!searchQuery.trim()) return nodes;\n    const q = searchQuery.toLowerCase();\n\n    const filterTree = (list: AppTreeNode[]): AppTreeNode[] => {\n      const result: AppTreeNode[] = [];\n      for (const node of list) {\n        const labelMatch = node?.label?.toLowerCase().includes(q);\n        const filteredChildren = node.children ? filterTree(node.children) : [];\n        if (labelMatch || filteredChildren.length > 0) {\n          result.push({ ...node, children: filteredChildren.length > 0 ? filteredChildren : node.children });\n        }\n      }\n      return result;\n    };\n    return filterTree(nodes);\n  }, [nodes, searchQuery]);\n\n  // ── Shadow DOM portal ref ──────────────────────────────────────\n\n  const setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n    triggerBtnRef.current = node;\n    if (node) setTriggerWidth(node.offsetWidth);\n    if (!node) { setPortalContainer(null); return; }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-app-select-portal]');\n      if (existing) { setPortalContainer(existing); return; }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-app-select-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  // ── Handlers ────────────────────────────────────────────────────\n\n  const updateValue = useCallback(\n    (newValue: string | string[]) => {\n      if (controlledValue === undefined) setInternalValue(newValue);\n      onChange?.(newValue);\n    },\n    [controlledValue, onChange]\n  );\n\n  const toggleExpanded = useCallback((nodeId: string) => {\n    setExpandedIds((prev) => {\n      const next = new Set(prev);\n      if (next.has(nodeId)) next.delete(nodeId);\n      else next.add(nodeId);\n      return next;\n    });\n  }, []);\n\n  const handleSelect = useCallback(\n    (nodeId: string, node: AppTreeNode) => {\n      // Groups toggle expand; never selectable\n      if (node.type === 'group' || (node.children && node.children.length > 0)) {\n        toggleExpanded(nodeId);\n        return;\n      }\n\n      // Leaf node selection\n      if (mode === 'single') {\n        updateValue(nodeId);\n        setOpen(false);\n      } else {\n        const currentIds = Array.isArray(resolvedValue) ? [...resolvedValue] : [];\n        const idx = currentIds.indexOf(nodeId);\n        if (idx >= 0) {\n          currentIds.splice(idx, 1);\n        } else {\n          currentIds.push(nodeId);\n        }\n        updateValue(currentIds);\n      }\n    },\n    [mode, resolvedValue, updateValue, toggleExpanded]\n  );\n\n  const handleRemoveChip = useCallback(\n    (nodeId: string, e: React.MouseEvent) => {\n      e.stopPropagation();\n      if (mode === 'multiple' && Array.isArray(resolvedValue)) {\n        updateValue(resolvedValue.filter((id) => id !== nodeId));\n      }\n    },\n    [mode, resolvedValue, updateValue]\n  );\n\n  const handleOpenChange = useCallback(\n    (nextOpen: boolean) => {\n      if (disabled) return;\n      setOpen(nextOpen);\n      if (nextOpen && triggerBtnRef.current) {\n        setTriggerWidth(triggerBtnRef.current.offsetWidth);\n      }\n      if (!nextOpen) setSearchQuery('');\n    },\n    [disabled]\n  );\n\n  // ── Chip visibility ─────────────────────────────────────────────\n\n  const multiSelectedLabels = mode === 'multiple' ? selectedLabels : [];\n  const visibleChips = multiSelectedLabels.slice(0, maxVisibleChips);\n  const overflowCount = multiSelectedLabels.length - visibleChips.length;\n\n  // ── Tree row rendering ──────────────────────────────────────────\n\n  const renderNodeRow = useCallback(\n    (node: AppTreeNode, depth: number) => {\n      const hasChildren = node.children && node.children.length > 0;\n      const isExpanded = expandedIds.has(node.id);\n      const isSelected = selectedIds.has(node.id);\n      const leftPad = depth * 22 + 10; // 10, 32, 54, 78, 102...\n\n      return (\n        <div key={node.id}>\n          <button\n            type=\"button\"\n            onClick={() => handleSelect(node.id, node)}\n            className={cn(\n              'flex items-center gap-[6px] w-full h-[34px] rounded-[4px] text-left',\n              'pr-[10px]',\n              transCls,\n              isSelected\n                ? 'bg-[#F0F6FF] text-[#0265FF]'\n                : 'text-[#030303] hover:bg-[#EFF0F6]'\n            )}\n            style={{ paddingLeft: `${leftPad}px`, paddingTop: '10px', paddingBottom: '10px' }}\n          >\n            {/* Left side: toggle icon for expandable nodes */}\n            {hasChildren && <ToggleIcon expanded={isExpanded} />}\n\n            {/* Node icon */}\n            {node.type === 'group' && !hasChildren && <FolderIcon />}\n            {node.type === 'group' && hasChildren && <FolderIcon />}\n            {node.type === 'app' && <AppIcon name={node.data?.style.icon!} />}\n            {/* {node.type === 'item' && <ItemIcon color={isSelected ? '#0265FF' : node.color} />} */}\n\n            {/* Label */}\n            <span className=\"text-[14px] truncate leading-[normal] flex-1 min-w-0\">\n              {node.label}\n            </span>\n\n            {/* SquareChecker for multi-select on leaf nodes — always visible */}\n            {mode === 'multiple' && !hasChildren && node.type !== 'group' && (\n              <span onClick={(e) => e.stopPropagation()} className='grid place-items-center'>\n                <SquareChecker\n                  checked={isSelected}\n                  onCheckedChange={() => handleSelect(node.id, node)}\n                  className=\"shrink-0\"\n                />\n              </span>\n            )}\n          </button>\n\n          {/* Children (when expanded) */}\n          {hasChildren && isExpanded && (\n            <div>\n              {node.children!.map((child) => renderNodeRow(child, depth + 1))}\n            </div>\n          )}\n        </div>\n      );\n    },\n    [expandedIds, selectedIds, mode, handleSelect]\n  );\n\n  // ── Render ──────────────────────────────────────────────────────\n\n  const hasMultiSelection = mode === 'multiple' && multiSelectedLabels.length > 0;\n\n  const popoverContent = (\n          <div className=\"flex flex-col gap-[4px]\">\n            {/* Search */}\n            <div className=\"flex items-center gap-[6px] border border-[#E0E0E0] rounded-[4px] h-[30px] px-[10px] py-[5px]\">\n              <SearchIcon />\n              <input\n                type=\"text\"\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                placeholder={searchPlaceholder}\n                className=\"flex-1 outline-none text-[14px] placeholder:text-[#999999] bg-transparent min-w-0 text-[#030303]\"\n              />\n            </div>\n\n            {/* \"全部应用\" item */}\n            {showAll && mode === 'single' && !searchQuery.trim() && (\n              <button\n                type=\"button\"\n                onClick={() => {\n                  updateValue(ALL_APPS_VALUE);\n                  setOpen(false);\n                }}\n                className={cn(\n                  'flex items-center w-full h-[34px] rounded-[4px] text-left',\n                  'px-[10px]',\n                  transCls,\n                  selectedIds.has(ALL_APPS_VALUE)\n                    ? 'bg-[#F0F6FF] text-[#0265FF]'\n                    : 'text-[#030303] hover:bg-[#EFF0F6]'\n                )}\n              >\n                <span className=\"text-[14px] leading-[normal]\">全部应用</span>\n              </button>\n            )}\n\n            {/* Tree */}\n            <div className=\"max-h-[400px] overflow-y-auto\">\n              {filteredNodes.length > 0 ? (\n                filteredNodes.map((node) => renderNodeRow(node, 0))\n              ) : (\n                <div className=\"flex items-center justify-center h-[60px] text-[12px] text-[#999999]\">\n                  {searchQuery.trim() ? '未找到相关应用' : '暂无应用'}\n                </div>\n              )}\n            </div>\n          </div>\n  );\n\n  if (popoverContentOnly) {\n    return popoverContent;\n  }\n\n  return (\n    <div className={cn('relative', className)}>\n      <Popover open={open} onOpenChange={handleOpenChange}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] gap-2.5',\n              'bg-white border border-[#E0E0E0] rounded-[4px]',\n              'py-[7px]',\n              hasMultiSelection ? 'pl-[4px] pr-[10px]' : 'px-[10px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open && 'border-[#0265FF]',\n              transCls\n            )}\n            // style={{ minHeight: '34px' }}\n          >\n            {hasMultiSelection ? (\n              <>\n                <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\">\n                  {visibleChips.map((label, i) => (\n                    <span\n                      key={i}\n                      className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0 max-w-[160px]\"\n                      onClick={(e) => {\n                        // stop propagation to prevent opening popover when clicking the chip, but still allow it when clicking the close icon\n                        e.stopPropagation();\n                        const ids = Array.isArray(resolvedValue) ? resolvedValue : [];\n                        if (ids[i]) handleRemoveChip(ids[i], e);\n                      }}\n                    >\n                      <span className=\"text-[14px] text-[#030303] truncate leading-[normal]\">\n                        {label}\n                      </span>\n                      <span\n                        className=\"cursor-pointer flex items-center shrink-0 hover:bg-[#EFF0F6]\"\n                      >\n                        <CloseIcon />\n                      </span>\n                    </span>\n                  ))}\n                  {overflowCount > 0 && (\n                    <span className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0\">\n                      <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                        +{overflowCount}\n                      </span>\n                      <MoreIcon />\n                    </span>\n                  )}\n                </div>\n                <DropdownChevron open={open} />\n              </>\n            ) : (\n              <>\n                <span\n                  className={cn(\n                    'text-[14px] leading-[normal] truncate',\n                    selectedAppLabel ? 'text-[#030303]' : 'text-[#999999]'\n                  )}\n                >\n                  {selectedAppLabel ?? placeholder}\n                </span>\n                <DropdownChevron open={open} />\n              </>\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[4px]\"\n          style={{ minWidth: triggerWidth || undefined }}\n        >\n          {popoverContent}\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import { useRef, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { SquareChecker, type SquareCheckerProps } from './square-checker';\n\nexport interface CheckCardProps extends SquareCheckerProps {\n  title: string;\n  description?: string;\n}\n\nexport const CheckCard = ({\n  defaultChecked = false,\n  checked: controlledChecked,\n  onCheckedChange,\n  title,\n  description,\n  disabled = false,\n  className,\n}: CheckCardProps) => {\n  const [internalChecked, setInternalChecked] = useState<boolean>(!!defaultChecked);\n\n  const isControlled = controlledChecked !== undefined;\n  const isChecked = isControlled ? !!controlledChecked : internalChecked;\n\n  const isCheckedRef = useRef(isChecked);\n  isCheckedRef.current = isChecked;\n\n  const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n    // if the target is not the card itself (e.g. clicking on a link inside the card), do not toggle\n    if (e.target !== e.currentTarget) {\n      return;\n    }\n\n    if (disabled) return;\n\n    const newChecked = !isCheckedRef.current;\n\n\n    if (!isControlled) {\n      setInternalChecked(newChecked);\n    }\n    onCheckedChange?.(newChecked);\n  };\n\n  return (\n    <div\n      role=\"button\"\n      tabIndex={disabled ? -1 : 0}\n      aria-checked={isChecked}\n      aria-disabled={disabled}\n      onClick={handleClick}\n      onKeyDown={(e) => {\n        if (e.key === 'Enter' || e.key === ' ') {\n          e.preventDefault();\n          handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n        }\n      }}\n      className={cn(\n        'flex flex-col gap-[6px] p-[10px] rounded-[4px] cursor-pointer select-none bg-white',\n        'border',\n        isChecked ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n        disabled && 'cursor-not-allowed opacity-50',\n        className\n      )}\n    >\n      <div className=\"inline-flex items-center gap-[6px] pointer-events-none\">\n          <SquareChecker\n            checked={isChecked}\n            disabled={disabled}\n          />\n        <span className=\"text-[#121111] text-[14px]\">{title}</span>\n      </div>\n      {description != null && (\n        <p className=\"text-[#666] text-[12px] pl-[22px] pointer-events-none\">{description}</p>\n      )}\n    </div>\n  );\n};\n","import type { FormActionType } from '@baishuyun/types';\nimport { CheckCard } from '../../check-card';\n\nexport const FORM_ACTION_CONFIG_LIST: Array<{\n  type: FormActionType;\n  title: string;\n}> = [\n  { type: 'submit', title: '表单提交数据' },\n  { type: 'edit', title: '表单编辑数据' },\n  { type: 'delete', title: '表单删除数据' },\n  { type: 'init', title: '表单初始化' },\n  { type: 'edit_init', title: '表单编辑初始化' },\n];\n\nexport interface IFormActionTriggerSelectProps {\n  multiple?: boolean;\n  value?: FormActionType | FormActionType[];\n  onChange?: (value: FormActionType | FormActionType[]) => void;\n}\n\nexport const FormActionTriggerSelect = ({\n  multiple = false,\n  value,\n  onChange,\n}: IFormActionTriggerSelectProps) => {\n  const selectedList = multiple\n    ? (Array.isArray(value) ? value : [])\n    : null;\n\n  return (\n    <div className=\"flex gap-[20px]\">\n      {FORM_ACTION_CONFIG_LIST.map((config) => {\n        const checked = multiple\n          ? selectedList!.includes(config.type)\n          : value === config.type;\n\n        return (\n          <CheckCard\n            key={config.type}\n            className=\"flex-[1_0_0] min-w-px\"\n            title={config.title}\n            checked={checked}\n            onCheckedChange={(v) => {\n              if (multiple) {\n                const next = v\n                  ? [...selectedList!, config.type]\n                  : selectedList!.filter((t) => t !== config.type);\n                onChange?.(next);\n              } else {\n                if (v) {\n                  onChange?.(config.type);\n                }\n              }\n            }}\n          />\n        );\n      })}\n    </div>\n  );\n};\n","import type { FlowNodeActionType } from '@baishuyun/types';\nimport { CheckCard } from '../../check-card';\n\nexport const FLOW_NODE_ACTION_CONFIG_LIST: Array<{\n  type: FlowNodeActionType;\n  title: string;\n}> = [\n  { type: 'flow_end', title: '流程结束' },\n  { type: 'flow_node', title: '流程节点' },\n];\n\nexport interface IFlowNodeActionTriggerSelectProps {\n  multiple?: boolean;\n  value?: FlowNodeActionType | FlowNodeActionType[];\n  onChange?: (value: FlowNodeActionType | FlowNodeActionType[]) => void;\n}\n\nexport const FlowNodeActionTriggerSelect = ({\n  multiple = false,\n  value,\n  onChange,\n}: IFlowNodeActionTriggerSelectProps) => {\n  const selectedList = multiple\n    ? (Array.isArray(value) ? value : [])\n    : null;\n\n  return (\n    <div className=\"flex gap-[20px]\">\n      {FLOW_NODE_ACTION_CONFIG_LIST.map((config) => {\n        const checked = multiple\n          ? selectedList!.includes(config.type)\n          : value === config.type;\n\n        return (\n          <CheckCard\n            key={config.type}\n            className=\"flex-[1_0_0] min-w-px max-w-[216px]\"\n            title={config.title}\n            checked={checked}\n            onCheckedChange={(v) => {\n              if (multiple) {\n                const next = v\n                  ? [...selectedList!, config.type]\n                  : selectedList!.filter((t) => t !== config.type);\n                onChange?.(next);\n              } else {\n                if (v) {\n                  onChange?.(config.type);\n                }\n              }\n            }}\n          />\n        );\n      })}\n    </div>\n  );\n};\n","import type { triggerTimeSourceType } from '@baishuyun/types';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../../ui/select';\n\nexport interface TriggerTimeSourceTypeOption {\n  value: triggerTimeSourceType;\n  label: string;\n}\n\nexport const TriggerTimeSourceTypeOptions: TriggerTimeSourceTypeOption[] = [\n  { value: 'custom', label: '自定义时间' },\n  { value: 'date_field', label: '根据表单日期时间字段' },\n];\n\nexport interface TriggerTimeSourceTypeSelectProps {\n  value?: triggerTimeSourceType;\n  onChange?: (value: triggerTimeSourceType) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const TriggerTimeSourceTypeSelect = ({\n  value,\n  onChange,\n  placeholder = '请选择时间来源类型',\n  disabled = false,\n  className,\n}: TriggerTimeSourceTypeSelectProps) => {\n  return (\n    <Select\n      value={value}\n      onValueChange={(v) => onChange?.(v as triggerTimeSourceType)}\n      disabled={disabled}\n    >\n      <SelectTrigger className={className}>\n        <SelectValue placeholder={placeholder} />\n      </SelectTrigger>\n      <SelectContent>\n        {TriggerTimeSourceTypeOptions.map((option) => (\n          <SelectItem key={option.value} value={option.value}>\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","import type { TimeObj } from './types';\n\nexport const MIN_YEAR = 1000;\nexport const MAX_YEAR = 2999;\n\nexport const MONTH_NAMES = [\n  '一月',\n  '二月',\n  '三月',\n  '四月',\n  '五月',\n  '六月',\n  '七月',\n  '八月',\n  '九月',\n  '十月',\n  '十一月',\n  '十二月',\n];\n\nexport const WEEK_NAMES = ['一', '二', '三', '四', '五', '六', '日'];\n\nexport function getFirstMondayOfMonth(year: number, month: number): Date {\n  const firstDay = new Date(year, month, 1);\n  const dayOfWeek = firstDay.getDay();\n  const daysToSubtract = (dayOfWeek - 1 + 7) % 7;\n  return new Date(year, month, 1 - daysToSubtract);\n}\n\nexport function getDaysInMonth(year: number, month: number): number {\n  return new Date(year, month + 1, 0).getDate();\n}\n\nexport function checkTimeValidate(current: TimeObj, start: TimeObj, end: TimeObj): boolean {\n  const curTotal = current.h * 3600000 + current.m * 60000 + current.s * 1000 + current.ms;\n  const startTotal = start.h * 3600000 + start.m * 60000 + start.s * 1000 + start.ms;\n  const endTotal = end.h * 3600000 + end.m * 60000 + end.s * 1000 + end.ms;\n  return curTotal >= startTotal && curTotal <= endTotal;\n}\n\nexport function checkDateValidate(\n  d: Date,\n  minDate: Date,\n  maxDate: Date,\n  week: number[],\n  mode: 'day' | 'month' | 'year' = 'day'\n): boolean {\n  if (mode === 'year') {\n    const year = d.getFullYear();\n    return year >= minDate.getFullYear() && year <= maxDate.getFullYear();\n  }\n  if (mode === 'month') {\n    const y = d.getFullYear();\n    const m = d.getMonth();\n    const minY = minDate.getFullYear();\n    const minM = minDate.getMonth();\n    const maxY = maxDate.getFullYear();\n    const maxM = maxDate.getMonth();\n    if (y < minY || y > maxY) return false;\n    if (y === minY && m < minM) return false;\n    if (y === maxY && m > maxM) return false;\n    return true;\n  }\n  d.setHours(0, 0, 0, 0);\n  const min = new Date(minDate);\n  min.setHours(0, 0, 0, 0);\n  const max = new Date(maxDate);\n  max.setHours(0, 0, 0, 0);\n  if (d < min || d > max) return false;\n  if (week && week.length > 0 && !week.includes(d.getDay())) return false;\n  return true;\n}\n\nexport function getCloserDate(target: Date, min: Date, max: Date): Date {\n  const t = target.getTime();\n  const mn = min.getTime();\n  const mx = max.getTime();\n  if (t < mn) return new Date(min);\n  if (t > mx) return new Date(max);\n  return new Date(target);\n}\n\nexport function checkBeforeMenuClick(date: Date, minDate: Date, mode: 'month' | 'year'): boolean {\n  if (mode === 'year') {\n    return date.getFullYear() > minDate.getFullYear();\n  }\n  const y = date.getFullYear();\n  const m = date.getMonth();\n  const minY = minDate.getFullYear();\n  const minM = minDate.getMonth();\n  return y > minY || (y === minY && m > minM);\n}\n\nexport function checkAfterMenuClick(date: Date, maxDate: Date, mode: 'month' | 'year'): boolean {\n  if (mode === 'year') {\n    return date.getFullYear() < maxDate.getFullYear();\n  }\n  const y = date.getFullYear();\n  const m = date.getMonth();\n  const maxY = maxDate.getFullYear();\n  const maxM = maxDate.getMonth();\n  return y < maxY || (y === maxY && m < maxM);\n}\n\nexport function formatDateByFormat(date: Date, format: string): string {\n  const y = date.getFullYear();\n  const m = String(date.getMonth() + 1).padStart(2, '0');\n  const d = String(date.getDate()).padStart(2, '0');\n  const h = String(date.getHours()).padStart(2, '0');\n  const min = String(date.getMinutes()).padStart(2, '0');\n  const s = String(date.getSeconds()).padStart(2, '0');\n\n  if (format === 'yyyy-MM-dd') return `${y}-${m}-${d}`;\n  if (format === 'yyyy-MM-dd HH:mm:ss') return `${y}-${m}-${d} ${h}:${min}:${s}`;\n  if (format === 'yyyy-MM-dd HH:mm') return `${y}-${m}-${d} ${h}:${min}`;\n  if (format === 'HH:mm:ss') return `${h}:${min}:${s}`;\n  if (format === 'HH:mm') return `${h}:${min}`;\n  if (format === 'yyyy-MM') return `${y}-${m}`;\n  if (format === 'yyyy') return `${y}`;\n  return `${y}-${m}-${d}`;\n}\n","import { useMemo } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { MONTH_NAMES, WEEK_NAMES, getFirstMondayOfMonth, checkDateValidate, checkBeforeMenuClick, checkAfterMenuClick } from './utils';\n\ninterface CalendarPanelProps {\n  year: number;\n  month: number;\n  day: number;\n  format: string;\n  minDate: Date;\n  maxDate: Date;\n  week: number[];\n  onYearReduce: () => void;\n  onYearAdd: () => void;\n  onMonthReduce: () => void;\n  onMonthAdd: () => void;\n  onMonthMenu: () => void;\n  onYearMenu: () => void;\n  onChangeDay: (d: number, m: number, y: number, css: string) => void;\n}\n\nconst tdBase = 'text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px]';\nconst tdDisabled = 'text-[#999] relative pointer-events-none before:absolute before:left-0 before:right-0 before:top-1 before:h-[28px] before:bg-[#f3f3f3] before:opacity-60 before:content-[\"\"]';\n\nexport function CalendarPanel({\n  year,\n  month,\n  day,\n  format,\n  minDate,\n  maxDate,\n  week,\n  onYearReduce,\n  onYearAdd,\n  onMonthReduce,\n  onMonthAdd,\n  onMonthMenu,\n  onYearMenu,\n  onChangeDay,\n}: CalendarPanelProps) {\n  const hasDayPart = format.includes('dd');\n\n  const calendarData = useMemo(() => {\n    const firstMonday = getFirstMondayOfMonth(year, month);\n    const today = new Date();\n    const todayStr = `${today.getFullYear()}-${today.getMonth()}-${today.getDate()}`;\n\n    const rows: Array<Array<{ day: number; month: number; year: number; css: string; key: string }>> = [];\n    const cursor = new Date(firstMonday);\n\n    for (let r = 0; r < 6; r++) {\n      const row: (typeof rows)[0] = [];\n      for (let w = 0; w < 7; w++) {\n        const d = cursor.getDate();\n        const m = cursor.getMonth();\n        const y = cursor.getFullYear();\n\n        let css = checkDateValidate(new Date(y, m, d, 0, 0, 0, 0), minDate, maxDate, week, 'day') ? '' : 'disabled';\n\n        if (!css) {\n          if (month !== m) {\n            css = 'oday';\n          } else {\n            css = 'day';\n            if (w === 5 || w === 6) css += ' weekend';\n            if (`${y}-${m}-${d}` === todayStr) css += ' today';\n            if (day === d && month === m) css += ' selected';\n          }\n        }\n\n        row.push({ day: d, month: m, year: y, css, key: `d${y}-${m}-${d}` });\n        cursor.setDate(cursor.getDate() + 1);\n      }\n      rows.push(row);\n    }\n\n    while (rows.length > 4 && rows[rows.length - 1].every((cell) => cell.month !== month)) {\n      rows.pop();\n    }\n\n    return rows;\n  }, [year, month, day, minDate, maxDate, week]);\n\n  if (!hasDayPart) return null;\n\n  return (\n    <>\n      <thead>\n        <tr>\n          <td\n            className={cn(tdBase, 'btn prevm hover:text-[#0265ff]', !checkBeforeMenuClick(new Date(year, month, 1), minDate, 'year') && 'disabled ' + tdDisabled)}\n            colSpan={1}\n            onClick={onYearReduce}\n          >\n            <ChevronsLeft size={14} />\n          </td>\n          <td\n            className={cn(tdBase, 'btn prevm hover:text-[#0265ff]', !checkBeforeMenuClick(new Date(year, month, 1), minDate, 'month') && 'disabled ' + tdDisabled)}\n            colSpan={1}\n            onClick={onMonthReduce}\n          >\n            <ChevronLeft size={14} />\n          </td>\n          <td className={cn(tdBase, 'title font-bold p-0.5')} colSpan={3}>\n            <span className=\"title-month mr-1.5 hover:text-[#0265ff] cursor-pointer\" onClick={onMonthMenu}>{MONTH_NAMES[month]}</span>\n            <span>, </span>\n            <span className=\"title-year hover:text-[#0265ff] cursor-pointer\" onClick={onYearMenu}>{year}</span>\n          </td>\n          <td\n            className={cn(tdBase, 'btn nextm hover:text-[#0265ff]', !checkAfterMenuClick(new Date(year, month, 1), maxDate, 'month') && 'disabled ' + tdDisabled)}\n            colSpan={1}\n            onClick={onMonthAdd}\n          >\n            <ChevronRight size={14} />\n          </td>\n          <td\n            className={cn(tdBase, 'btn nextm hover:text-[#0265ff]', !checkAfterMenuClick(new Date(year, month, 1), maxDate, 'year') && 'disabled ' + tdDisabled)}\n            colSpan={1}\n            onClick={onYearAdd}\n          >\n            <ChevronsRight size={14} />\n          </td>\n        </tr>\n        <tr>\n          {WEEK_NAMES.map((name, i) => (\n            <td key={name} className={cn(tdBase, 'day name week font-bold hover:bg-transparent hover:p-0 hover:border-none', (i === 5 || i === 6) && 'text-[#e34d59]')}>{name}</td>\n          ))}\n        </tr>\n      </thead>\n      <tbody>\n        {calendarData.slice(0, 6).map((row, ri) => (\n          <tr key={ri}>\n            {row.map((cell) => {\n              const isDisabled = cell.css.includes('disabled');\n              const isOday = cell.css.includes('oday');\n              const isToday = cell.css.includes('today');\n              const isSelected = cell.css.includes('selected');\n              const isWeekend = cell.css.includes('weekend');\n\n              return (\n                <td\n                  key={cell.key}\n                  className={cn(\n                    tdBase,\n                    isDisabled && tdDisabled,\n                    isOday && 'text-[#e0e0e0] hover:bg-[rgba(2,101,255,0.08)]',\n                    !isDisabled && !isOday && 'hover:bg-[rgba(2,101,255,0.08)]',\n                    isToday && 'font-bold text-[#0265ff]',\n                    isWeekend && 'text-[#e34d59]',\n                    isSelected && 'font-bold p-[1px] text-white border border-[#0265ff] bg-[#0265ff] hover:border-[#0265ff] hover:bg-[#0265ff]'\n                  )}\n                  onClick={() => onChangeDay(cell.day, cell.month, cell.year, cell.css)}\n                >\n                  <div className=\"day-wrapper\"><div className=\"day-item\">{cell.day}</div></div>\n                </td>\n              );\n            })}\n          </tr>\n        ))}\n      </tbody>\n    </>\n  );\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { MONTH_NAMES, checkDateValidate } from './utils';\n\ninterface MonthPanelProps {\n  year: number;\n  month: number;\n  showYear: boolean;\n  position: 'absolute' | 'relative';\n  minDate: Date;\n  maxDate: Date;\n  week: number[];\n  onYearReduce: () => void;\n  onYearAdd: () => void;\n  onYearMenu: () => void;\n  onMountOk: (m: number) => void;\n}\n\nconst tdBase = 'text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px]';\nconst tdDisabled = 'text-[#999] relative pointer-events-none before:absolute before:left-0 before:right-0 before:top-[20px] before:h-[28px] before:bg-[#f3f3f3] before:opacity-60 before:content-[\"\"]';\n\nexport function MonthPanel({\n  year,\n  month,\n  showYear,\n  position,\n  minDate,\n  maxDate,\n  week,\n  onYearReduce,\n  onYearAdd,\n  onYearMenu,\n  onMountOk,\n}: MonthPanelProps) {\n  const checkValidate = (d: Date) => checkDateValidate(d, minDate, maxDate, week, 'month');\n\n  return (\n    <table cellSpacing={0} cellPadding={0} className=\"mt bg-white rounded-[4px]\" style={{ position }}>\n      <thead>\n        <tr>\n          <td className={cn(tdBase, 'btn prevy hover:text-[#0265ff]')} colSpan={1} onClick={onYearReduce}>\n            <ChevronLeft size={14} />\n          </td>\n          <td className={cn(tdBase, 'year title font-bold p-0.5')} colSpan={1}>\n            <span className=\"title-year hover:text-[#0265ff] cursor-pointer\" onClick={onYearMenu}>{year}</span>\n          </td>\n          <td className={cn(tdBase, 'btn nexty hover:text-[#0265ff]')} colSpan={1} onClick={onYearAdd}>\n            <ChevronRight size={14} />\n          </td>\n        </tr>\n      </thead>\n      <tbody>\n        {[0, 1, 2, 3].map((rowIdx) => (\n          <tr key={rowIdx}>\n            {[0, 1, 2].map((colIdx) => {\n              const m = rowIdx * 3 + colIdx;\n              if (m > 11) return <td key={m} className={tdBase} />;\n              const valid = checkValidate(new Date(year, m, 1));\n              const isSelected = month === m && !showYear;\n              const isDisabled = !valid;\n\n              return (\n                <td\n                  key={m}\n                  className={cn(\n                    tdBase,\n                    'month w-[58px] h-[38px] hover:bg-[rgba(2,101,255,0.08)]',\n                    isSelected && 'font-bold p-[1px] text-white border border-[#0265ff] bg-[#0265ff] hover:border-[#0265ff] hover:bg-[#0265ff]',\n                    isDisabled && tdDisabled\n                  )}\n                  onClick={() => { if (!isDisabled) onMountOk(m); }}\n                >\n                  {MONTH_NAMES[m]}\n                </td>\n              );\n            })}\n          </tr>\n        ))}\n      </tbody>\n    </table>\n  );\n}\n","import { useMemo } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { checkDateValidate } from './utils';\n\ninterface YearPanelProps {\n  year: number;\n  position: 'absolute' | 'relative';\n  showYearLabel?: boolean;\n  minDate: Date;\n  maxDate: Date;\n  week: number[];\n  onYearFReduce: () => void;\n  onYearFAdd: () => void;\n  onSelectYear: (y: number) => void;\n}\n\nconst tdBase = 'text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px]';\nconst tdDisabled = 'text-[#999] relative pointer-events-none before:absolute before:left-0 before:right-0 before:top-[14px] before:h-[28px] before:bg-[#f3f3f3] before:opacity-60 before:content-[\"\"]';\n\nexport function YearPanel({\n  year,\n  position,\n  showYearLabel,\n  minDate,\n  maxDate,\n  week,\n  onYearFReduce,\n  onYearFAdd,\n  onSelectYear,\n}: YearPanelProps) {\n  const startYear = year - 9;\n  const endYear = year + 10;\n\n  const yearGrid = useMemo(() => {\n    const rows: Array<Array<{ year: number; isSelected: boolean; isDisabled: boolean }>> = [];\n    for (let r = 0; r < 5; r++) {\n      const row: (typeof rows)[0] = [];\n      for (let c = 0; c < 4; c++) {\n        const y = startYear + r * 4 + c;\n        const valid = checkDateValidate(new Date(y, 0, 1), minDate, maxDate, week, 'year');\n        row.push({ year: y, isSelected: year === y, isDisabled: !valid });\n      }\n      rows.push(row);\n    }\n    return rows;\n  }, [startYear, year, minDate, maxDate, week]);\n\n  return (\n    <table cellSpacing={0} cellPadding={0} className=\"yt bg-white rounded-[4px] w-full h-full\" style={{ position }}>\n      <thead>\n        <tr>\n          <td className={cn(tdBase, 'btn prevy hover:text-[#0265ff] grid place-content-center')} colSpan={1} onClick={onYearFReduce}>\n            <ChevronLeft size={14} />\n          </td>\n          <td className={cn(tdBase, 'year title font-bold p-0.5')} colSpan={2}>\n            {showYearLabel ? `${startYear}年 - ${endYear}年` : `${startYear} - ${endYear}`}\n          </td>\n          <td className={cn(tdBase, 'btn nexty hover:text-[#0265ff] grid place-content-center')} colSpan={1} onClick={onYearFAdd}>\n            <ChevronRight size={14} />\n          </td>\n        </tr>\n      </thead>\n      <tbody>\n        {yearGrid.map((row, ri) => (\n          <tr key={ri}>\n            {row.map((cell) => (\n              <td\n                key={cell.year}\n                className={cn(\n                  tdBase,\n                  'year',\n                  cell.isSelected && 'font-bold p-[1px] text-white border border-[#0265ff] bg-[#0265ff] hover:border-[#0265ff] hover:bg-[#0265ff]',\n                  cell.isDisabled && tdDisabled\n                )}\n                onClick={() => { if (!cell.isDisabled) onSelectYear(cell.year); }}\n              >\n                {cell.year}\n              </td>\n            ))}\n          </tr>\n        ))}\n      </tbody>\n    </table>\n  );\n}\n","import { cn } from '../../../lib/utils';\nimport { checkTimeValidate } from './utils';\nimport type { TimeObj } from './types';\n\ninterface TimePanelProps {\n  hours: number;\n  minutes: number;\n  seconds: number;\n  year: number;\n  month: number;\n  day: number;\n  format: string;\n  minDate: Date;\n  maxDate: Date;\n  startTime: TimeObj;\n  endTime: TimeObj;\n  onHoursChange: (v: number) => void;\n  onMinutesChange: (v: number) => void;\n  onSecondsChange: (v: number) => void;\n}\n\nconst colItemBase = 'h-[32px] leading-[32px] text-center cursor-pointer rounded-[4px] hover:bg-[rgba(2,101,255,0.08)]';\n\nexport function TimePanel({\n  hours,\n  minutes,\n  seconds,\n  year,\n  month,\n  day,\n  format,\n  minDate,\n  maxDate,\n  startTime,\n  endTime,\n  onHoursChange,\n  onMinutesChange,\n  onSecondsChange,\n}: TimePanelProps) {\n  const hasMinutePart = format.includes('mm');\n  const hasSecondPart = format.includes('ss');\n\n  const renderColumn = (type: 'hours' | 'minutes' | 'seconds') => {\n    const colLen = type === 'hours' ? 24 : 60;\n    const labels: Record<string, string> = { hours: '时', minutes: '分', seconds: '秒' };\n    const currentVal = type === 'hours' ? hours : type === 'minutes' ? minutes : seconds;\n    const onChange = type === 'hours' ? onHoursChange : type === 'minutes' ? onMinutesChange : onSecondsChange;\n\n    return (\n      <div className={cn('col flex-1 border-l border-[#e0e0e0]', type)}>\n        <div className=\"label h-[32px] leading-[32px] text-center\">{labels[type]}</div>\n        <div className=\"col-list h-[200px] overflow-auto\">\n          {Array.from({ length: colLen }, (_, index) => {\n            const isSelected = currentVal === index;\n            let isDisabled = false;\n\n            const isMinBoundary = minDate.getFullYear() === year && minDate.getMonth() === month && minDate.getDate() === day;\n            const isMaxBoundary = maxDate.getFullYear() === year && maxDate.getMonth() === month && maxDate.getDate() === day;\n\n            if (isMinBoundary) {\n              const current: TimeObj = {\n                h: type === 'hours' ? index : hours,\n                m: type === 'minutes' ? index : minutes,\n                s: type === 'seconds' ? index : seconds,\n                ms: 0,\n              };\n              isDisabled = !checkTimeValidate(current, startTime, { h: 23, m: 59, s: 59, ms: 999 });\n            }\n            if (isMaxBoundary && !isDisabled) {\n              const current: TimeObj = {\n                h: type === 'hours' ? index : hours,\n                m: type === 'minutes' ? index : minutes,\n                s: type === 'seconds' ? index : seconds,\n                ms: 0,\n              };\n              isDisabled = !checkTimeValidate(current, { h: 0, m: 0, s: 0, ms: 0 }, endTime);\n            }\n\n            return (\n              <div\n                key={index}\n                className={cn(\n                  colItemBase,\n                  isSelected && !isDisabled && 'select bg-[rgba(2,101,255,0.2)]',\n                  isDisabled && 'text-[#999] pointer-events-none opacity-80'\n                )}\n                onClick={() => { if (!isDisabled) onChange(index); }}\n              >\n                {index > 9 ? index : `0${index}`}\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"time-range w-[180px]\">\n      <div className=\"time-input flex h-[40px] border-l border-[#e0e0e0]\">\n        <input\n          type=\"number\"\n          value={hours}\n          className=\"h-[24px] w-[38px] my-[10px] mx-[10px] mt-[10px] text-center pl-[5px] flex-1\"\n          onChange={(e) => {\n            const v = Math.min(23, Math.max(0, parseInt(e.target.value) || 0));\n            onHoursChange(v);\n          }}\n        />\n        {hasMinutePart && (\n          <>\n            <span className=\"leading-[40px]\">:</span>\n            <input\n              type=\"number\"\n              value={minutes}\n              className=\"h-[24px] w-[38px] my-[10px] mx-[10px] mt-[10px] text-center pl-[5px] flex-1\"\n              onChange={(e) => {\n                const v = Math.min(59, Math.max(0, parseInt(e.target.value) || 0));\n                onMinutesChange(v);\n              }}\n            />\n          </>\n        )}\n        {hasSecondPart && (\n          <>\n            <span className=\"leading-[40px]\">:</span>\n            <input\n              type=\"number\"\n              value={seconds}\n              className=\"h-[24px] w-[38px] my-[10px] mx-[10px] mt-[10px] text-center pl-[5px] flex-1\"\n              onChange={(e) => {\n                const v = Math.min(59, Math.max(0, parseInt(e.target.value) || 0));\n                onSecondsChange(v);\n              }}\n            />\n          </>\n        )}\n      </div>\n      <div className=\"time-select-range flex border-t border-[#e0e0e0]\" style={{ height: 'calc(100% - 40px)' }}>\n        {renderColumn('hours')}\n        {hasMinutePart && renderColumn('minutes')}\n        {hasSecondPart && renderColumn('seconds')}\n      </div>\n    </div>\n  );\n}\n","import { cn } from '../../../lib/utils';\n\ninterface FooterPanelProps {\n  hasTime: boolean;\n  hasDay: boolean;\n  todayCls: string;\n  onToday: () => void;\n  onOk: () => void;\n}\n\nexport function FooterPanel({\n  hasTime,\n  hasDay,\n  todayCls,\n  onToday,\n  onOk,\n}: FooterPanelProps) {\n  if (!hasTime && !hasDay) return null;\n\n  return (\n    <div className=\"footer h-[40px] leading-[40px] text-center border-t border-[#e0e0e0]\">\n      <div className=\"hms px-[10px]\">\n        <div\n          className={cn(\n            'btn cursor-pointer px-[5px] mx-[5px]',\n            hasTime ? 'current-time float-left text-[#0265ff] ml-0 pl-0 text-center' : 'today float-left text-[#0265ff] ml-0 pl-0 text-center',\n            todayCls === 'disabled' && 'text-[#999] pointer-events-none opacity-80'\n          )}\n          onClick={onToday}\n        >\n          {hasTime ? '当前时间' : '今天'}\n        </div>\n        {hasTime && (\n          <div\n            className=\"btn ok mr-0 text-white bg-[#0265ff] rounded-[4px] h-[24px] leading-[24px] mt-[8px] float-right cursor-pointer px-[5px] hover:opacity-80\"\n            onClick={onOk}\n          >\n            确定\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n","import { useState, useCallback, useMemo, useEffect } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { CalendarPanel } from './calendar-panel';\nimport { MonthPanel } from './month-panel';\nimport { YearPanel } from './year-panel';\nimport { TimePanel } from './time-panel';\nimport { FooterPanel } from './footer-panel';\nimport {\n  MIN_YEAR,\n  MAX_YEAR,\n  MONTH_NAMES,\n  getDaysInMonth,\n  checkDateValidate,\n  getCloserDate,\n} from './utils';\nimport type { DatePickerProps, TimeObj } from './types';\n\nexport type { DateFormat, DatePickerProps } from './types';\n\nexport function DatePicker({\n  value,\n  onChange,\n  format = 'yyyy-MM-dd',\n  minDate: minDateProp,\n  maxDate: maxDateProp,\n  week: weekProp,\n  className,\n}: DatePickerProps) {\n  const initialDate = value ? new Date(value) : new Date();\n\n  const [year, setYear] = useState(initialDate.getFullYear());\n  const [month, setMonth] = useState(initialDate.getMonth());\n  const [day, setDay] = useState(initialDate.getDate());\n  const [hours, setHours] = useState(initialDate.getHours());\n  const [minutes, setMinutes] = useState(initialDate.getMinutes());\n  const [seconds, setSeconds] = useState(initialDate.getSeconds());\n  const [showMonth, setShowMonth] = useState(false);\n  const [showYear, setShowYear] = useState(false);\n  const [showHms, setShowHms] = useState(format.includes('HH'));\n\n  const minDate = useMemo(\n    () => minDateProp ?? new Date(MIN_YEAR, 0, 1, 0, 0, 0, 0),\n    [minDateProp]\n  );\n  const maxDate = useMemo(\n    () => maxDateProp ?? new Date(MAX_YEAR, 11, 31, 23, 59, 59, 999),\n    [maxDateProp]\n  );\n  const week = useMemo(\n    () => (weekProp ? weekProp.map((i) => parseInt(String(i))) : []),\n    [weekProp]\n  );\n\n  const startTime = useMemo<TimeObj>(() => {\n    if (format === 'yyyy-MM-dd HH:mm:ss') {\n      return { h: minDate.getHours(), m: minDate.getMinutes(), s: minDate.getSeconds(), ms: minDate.getMilliseconds() };\n    }\n    return { h: 0, m: 0, s: 0, ms: 0 };\n  }, [format, minDate]);\n\n  const endTime = useMemo<TimeObj>(() => {\n    if (format === 'yyyy-MM-dd HH:mm:ss') {\n      return { h: maxDate.getHours(), m: maxDate.getMinutes(), s: maxDate.getSeconds(), ms: maxDate.getMilliseconds() };\n    }\n    return { h: 23, m: 59, s: 59, ms: 999 };\n  }, [format, maxDate]);\n\n  // Sync with external value\n  useEffect(() => {\n    if (value) {\n      setYear(value.getFullYear());\n      setMonth(value.getMonth());\n      setDay(value.getDate());\n      setHours(value.getHours());\n      setMinutes(value.getMinutes());\n      setSeconds(value.getSeconds());\n    }\n  }, [value]);\n\n  // Auto-select closer valid date on mount when value is null\n  useEffect(() => {\n    if (!value && checkDateValidate(new Date(), minDate, maxDate, week, 'day')) {\n      const closerDate = getCloserDate(new Date(), minDate, maxDate);\n      setYear(closerDate.getFullYear());\n      setMonth(closerDate.getMonth());\n      setDay(closerDate.getDate());\n    }\n  }, []);\n\n  const fireOnChange = useCallback(\n    (d: Date | null, closeFloat?: boolean) => onChange?.(d, closeFloat),\n    [onChange]\n  );\n\n  const checkValidate = useCallback(\n    (d: Date, mode: 'day' | 'month' | 'year' = 'day') =>\n      checkDateValidate(d, minDate, maxDate, week, mode),\n    [minDate, maxDate, week]\n  );\n\n  const onDateUpdate = useCallback(\n    (closeFloat?: boolean) => {\n      const d = new Date(year, month, day, hours, minutes, seconds);\n      fireOnChange(checkValidate(d) ? d : null, closeFloat);\n    },\n    [year, month, day, hours, minutes, seconds, checkValidate, fireOnChange]\n  );\n\n  const handleMonthReduce = useCallback(() => {\n    let newYear = year, newMonth = month, newDay = day;\n    if (month === 0) { newMonth = 11; newYear = year - 1; }\n    else { newMonth = month - 1; }\n    const dim = getDaysInMonth(newYear, newMonth);\n    if (newDay > dim) newDay = dim;\n    setYear(newYear); setMonth(newMonth); setDay(newDay);\n  }, [year, month, day]);\n\n  const handleMonthAdd = useCallback(() => {\n    let newYear = year, newMonth = month, newDay = day;\n    if (month === 11) { newMonth = 0; newYear = year + 1; }\n    else { newMonth = month + 1; }\n    const dim = getDaysInMonth(newYear, newMonth);\n    if (newDay > dim) newDay = dim;\n    setYear(newYear); setMonth(newMonth); setDay(newDay);\n  }, [year, month, day]);\n\n  const handleYearReduce = useCallback(() => { if (year > MIN_YEAR) setYear((y) => y - 1); }, [year]);\n  const handleYearAdd = useCallback(() => { if (year < MAX_YEAR) setYear((y) => y + 1); }, [year]);\n  const handleYearFReduce = useCallback(() => { if (year > MIN_YEAR) setYear((y) => y - 20); }, [year]);\n  const handleYearFAdd = useCallback(() => { if (year < MAX_YEAR) setYear((y) => y + 20); }, [year]);\n\n  const handleSelectYear = useCallback((selectedYear: number) => {\n    setYear(selectedYear);\n    setShowYear(false);\n    if (format === 'yyyy-MM') { setDay(1); setHours(0); setMinutes(0); setSeconds(0); setShowMonth(false); }\n    if (format === 'yyyy') {\n      const newDate = new Date(selectedYear, 0, 1, 0, 0, 0);\n      fireOnChange(checkValidate(newDate, 'year') ? newDate : null, true);\n    }\n    setShowHms(format.includes('HH'));\n  }, [format, checkValidate, fireOnChange]);\n\n  const handleMountOk = useCallback((m: number) => {\n    setMonth(m);\n    setShowMonth(false);\n    setShowYear(false);\n    if (format === 'yyyy-MM') {\n      setDay(1); setHours(0); setMinutes(0); setSeconds(0);\n      const newDate = new Date(year, m, 1, 0, 0, 0);\n      fireOnChange(checkValidate(newDate, 'month') ? newDate : null, true);\n    }\n    setShowHms(format.includes('HH'));\n  }, [format, year, checkValidate, fireOnChange]);\n\n  const handleChangeDay = useCallback((d: number, m: number, y: number, css: string) => {\n    if (css.includes('disabled')) return;\n    setYear(y); setMonth(m); setDay(d);\n    if (!['HH:mm:ss', 'yyyy-MM-dd HH:mm:ss', 'yyyy-MM-dd HH:mm', 'HH:mm'].includes(format)) {\n      const newDate = new Date(y, m, d, 0, 0, 0);\n      fireOnChange(checkValidate(newDate) ? newDate : null, true);\n    }\n  }, [format, checkValidate, fireOnChange]);\n\n  const handleToDay = useCallback(() => {\n    const today = new Date();\n    setYear(today.getFullYear()); setMonth(today.getMonth()); setDay(today.getDate());\n    setHours(today.getHours()); setMinutes(today.getMinutes()); setSeconds(today.getSeconds());\n    if (!['HH:mm:ss', 'yyyy-MM-dd HH:mm:ss', 'yyyy-MM-dd HH:mm', 'HH:mm'].includes(format)) {\n      const newDate = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0);\n      fireOnChange(checkValidate(newDate) ? newDate : null, true);\n    }\n  }, [format, checkValidate, fireOnChange]);\n\n  const handleOkDay = useCallback(() => onDateUpdate(true), [onDateUpdate]);\n\n  const checkValiToday = useCallback(\n    (date?: Date) => checkDateValidate(date ?? new Date(), minDate, maxDate, week, 'day') ? '' : 'disabled',\n    [minDate, maxDate, week]\n  );\n\n  const handleHoursChange = useCallback((v: number) => setHours(v), []);\n  const handleMinutesChange = useCallback((v: number) => setMinutes(v), []);\n  const handleSecondsChange = useCallback((v: number) => setSeconds(v), []);\n\n  const hasDatePart = format.includes('yyyy');\n  const hasTimePart = format.includes('HH');\n  const hasDayPart = format.includes('dd');\n  const isMonthOnly = format === 'yyyy-MM';\n  const isYearOnly = format === 'yyyy';\n  const todayCls = checkValiToday();\n\n  const openMonthMenu = useCallback(() => { setShowMonth(true); setShowYear(false); setShowHms(false); }, []);\n  const openYearMenu = useCallback(() => { setShowYear(true); setShowHms(false); }, []);\n\n  const dataRangeMinHeight = hasDayPart ? 'min-h-[270px]' : (isMonthOnly ? 'min-h-[180px]' : 'min-h-[270px]');\n\n  return (\n    <div className={cn('relative inline-block text-sm text-[#333] bg-white rounded-[4px] leading-none border-none', format, className)}>\n      <div className=\"flex\">\n        {hasDatePart && (\n          <div className={cn('data-range', dataRangeMinHeight)} style={{ minWidth: isYearOnly ? 220 : 270 }}>\n            {/* Calendar with day grid, OR month-only picker */}\n            {!isYearOnly && (\n              <div className=\"relative\">\n                <table cellSpacing={0} cellPadding={0} className=\"dt p-[3px] rounded-[4px]\" style={{ width: isMonthOnly ? '100%' : 270 }}>\n                  {/* Month-only: show month picker with year header */}\n                  {isMonthOnly && !showYear && (\n                    <>\n                      <thead>\n                        <tr>\n                          <td className=\"text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px] btn prevy hover:text-[#0265ff] grid place-content-center\" colSpan={1} onClick={handleYearReduce}>\n                            <ChevronLeft size={14} className=\"inline\" />\n                          </td>\n                          <td className=\"text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px] year title font-bold\" colSpan={1}>\n                            <span className=\"title-year hover:text-[#0265ff] cursor-pointer\" onClick={openYearMenu}>{year}</span>\n                          </td>\n                          <td className=\"text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px] btn nexty hover:text-[#0265ff] grid place-content-center\" colSpan={1} onClick={handleYearAdd}>\n                            <ChevronRight size={14} className=\"inline\" />\n                          </td>\n                        </tr>\n                      </thead>\n                      <tbody>\n                        {[0, 1, 2].map((rowIdx) => (\n                          <tr key={rowIdx}>\n                            {[0, 1, 2].map((colIdx) => {\n                              const m = rowIdx * 3 + colIdx;\n                              const valid = checkValidate(new Date(year, m, 1), 'month');\n                              const isSelected = month === m;\n                              const isDisabled = !valid;\n                              return (\n                                <td\n                                  key={m}\n                                  className={cn(\n                                    'text-center p-0.5 min-w-[36px] h-[36px] cursor-pointer align-middle rounded-[4px] month hover:bg-[rgba(2,101,255,0.08)]',\n                                    isSelected && 'font-bold p-[1px] text-white border border-[#0265ff] bg-[#0265ff] hover:border-[#0265ff] hover:bg-[#0265ff]',\n                                    isDisabled && 'text-[#999] relative pointer-events-none before:absolute before:left-0 before:right-0 before:top-[14px] before:h-[28px] before:bg-[#f3f3f3] before:opacity-60 before:content-[\"\"]'\n                                  )}\n                                  onClick={() => { if (!isDisabled) handleMountOk(m); }}\n                                >\n                                  {MONTH_NAMES[m]}\n                                </td>\n                              );\n                            })}\n                          </tr>\n                        ))}\n                      </tbody>\n                    </>\n                  )}\n\n                  {/* Day grid: full calendar */}\n                  {hasDayPart && (\n                    <CalendarPanel\n                      year={year} month={month} day={day}\n                      format={format} minDate={minDate} maxDate={maxDate} week={week}\n                      onYearReduce={handleYearReduce} onYearAdd={handleYearAdd}\n                      onMonthReduce={handleMonthReduce} onMonthAdd={handleMonthAdd}\n                      onMonthMenu={openMonthMenu} onYearMenu={openYearMenu}\n                      onChangeDay={handleChangeDay}\n                    />\n                  )}\n                </table>\n\n                {/* Month picker overlay (for day formats) */}\n                {hasDayPart && !isMonthOnly && showMonth && !showYear && (\n                  <div className=\"absolute inset-0 z-[1]\">\n                    <MonthPanel\n                      year={year} month={month} showYear={showYear}\n                      position=\"absolute\" minDate={minDate} maxDate={maxDate} week={week}\n                      onYearReduce={handleYearReduce} onYearAdd={handleYearAdd}\n                      onYearMenu={openYearMenu} onMountOk={handleMountOk}\n                    />\n                  </div>\n                )}\n\n                {/* Year picker overlay (for day/month formats) */}\n                {!isYearOnly && showYear && (\n                  <div className={cn(isMonthOnly ? 'relative' : 'absolute inset-0 z-[1]')}>\n                    <YearPanel\n                      year={year} position={isMonthOnly ? 'relative' : 'absolute'}\n                      showYearLabel={isMonthOnly}\n                      minDate={minDate} maxDate={maxDate} week={week}\n                      onYearFReduce={handleYearFReduce} onYearFAdd={handleYearFAdd}\n                      onSelectYear={handleSelectYear}\n                    />\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* Year-only mode */}\n            {isYearOnly && (\n              <YearPanel\n                year={year} position=\"relative\" showYearLabel\n                minDate={minDate} maxDate={maxDate} week={week}\n                onYearFReduce={handleYearFReduce} onYearFAdd={handleYearFAdd}\n                onSelectYear={handleSelectYear}\n              />\n            )}\n          </div>\n        )}\n\n        {/* Time picker */}\n        {showHms && hasTimePart && (\n          <TimePanel\n            hours={hours} minutes={minutes} seconds={seconds}\n            year={year} month={month} day={day}\n            format={format} minDate={minDate} maxDate={maxDate}\n            startTime={startTime} endTime={endTime}\n            onHoursChange={handleHoursChange}\n            onMinutesChange={handleMinutesChange}\n            onSecondsChange={handleSecondsChange}\n          />\n        )}\n      </div>\n\n      {/* Footer */}\n      <FooterPanel\n        hasTime={hasTimePart}\n        hasDay={hasDayPart}\n        todayCls={todayCls}\n        onToday={handleToDay}\n        onOk={handleOkDay}\n      />\n    </div>\n  );\n}\n","import { useState, useCallback } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { CalendarIcon } from '../../icons/calendar-icon';\nimport { DatePicker } from './date-picker';\nimport { formatDateByFormat } from './utils';\nimport type { DateInputProps } from './types';\nimport { usePortalContainer } from '../../../hooks/use-portal-container';\n\nexport type { DateInputProps } from './types';\n\nexport function DateInput({\n  value,\n  onChange,\n  format = 'yyyy-MM-dd',\n  minDate,\n  maxDate,\n  week,\n  placeholder,\n  disabled,\n  className,\n}: DateInputProps) {\n  const [open, setOpen] = useState(false);\n\n  const handleChange = useCallback(\n    (date: Date | null, closeFloat?: boolean) => {\n      onChange?.(date);\n      if (closeFloat) {\n        setOpen(false);\n      }\n    },\n    [onChange]\n  );\n\n  const displayText = value ? formatDateByFormat(value, format) : '';\n  const defaultPlaceholder = placeholder ?? getPlaceholderByFormat(format);\n\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-date-input-portal');\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild disabled={disabled}>\n        <div\n          className={cn(\n            'flex items-center h-[34px] rounded-[4px] bg-white border border-[#e0e0e0] pl-[2px] pr-[10px] py-[2px] cursor-pointer',\n            'hover:border-[#0265FF]',\n            open && 'border-[#0265FF]',\n            disabled && 'opacity-50 cursor-not-allowed',\n            className\n          )}\n          ref={setTriggerRef}\n        >\n          <div className=\"flex-1 flex items-center justify-center h-[30px] px-[10px] py-[7px] rounded-[4px] min-w-0\">\n            <span\n              className={cn(\n                'flex-1 text-[14px] leading-[normal] truncate',\n                value ? 'text-[#030303]' : 'text-[#999999]'\n              )}\n            >\n              {displayText || defaultPlaceholder}\n            </span>\n          </div>\n          <CalendarIcon className=\"shrink-0 size-[16px] text-[#999999]\" />\n        </div>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-auto p-0\" align=\"start\" portalContainer={portalContainer}>\n        <DatePicker\n          value={value}\n          onChange={handleChange}\n          format={format}\n          minDate={minDate}\n          maxDate={maxDate}\n          week={week}\n        />\n      </PopoverContent>\n    </Popover>\n  );\n}\n\nfunction getPlaceholderByFormat(format: string): string {\n  switch (format) {\n    case 'yyyy-MM-dd': return '请选择日期';\n    case 'yyyy-MM-dd HH:mm:ss': return '请选择日期时间';\n    case 'yyyy-MM-dd HH:mm': return '请选择日期时间';\n    case 'HH:mm:ss': return '请选择时间';\n    case 'HH:mm': return '请选择时间';\n    case 'yyyy-MM': return '请选择月份';\n    case 'yyyy': return '请选择年份';\n    default: return '请选择日期';\n  }\n}\n","import { useState, useCallback, useMemo, useRef } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport type { IField, FieldType, ISubformField } from '@baishuyun/types';\nimport { SearchIcon } from '../../bs-icons';\n\nconst ToggleIcon = ({ expanded }: { expanded: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n  >\n    <path d=\"M5 7L8 10L11 7\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nconst DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\n// ── FieldType → Badge Mapping ─────────────────────────────────────\n\ninterface BadgeStyle { label: string; bgColor: string; textColor: string }\n\nconst FIELD_TYPE_BADGE_MAP: Partial<Record<FieldType, BadgeStyle>> = {};\n\nconst textTypes: FieldType[] = [\n  'text', 'textarea', 'password', 'radio', 'radiogroup', 'combo', 'combocheck',\n  'checkboxgroup', 'address', 'location', 'button', 'separator', 'user',\n  'usergroup', 'dept', 'deptgroup', 'sn', 'formula', 'flowState', 'flowstate',\n  'subform', 'unknown',\n];\nconst numberTypes: FieldType[] = ['number'];\nconst datetimeTypes: FieldType[] = ['datetime'];\nconst fileTypes: FieldType[] = ['upload', 'image', 'linkdata', 'linkquery', 'dataload', 'signature'];\n\nfor (const t of textTypes) {\n  FIELD_TYPE_BADGE_MAP[t] = { label: '文本', bgColor: '#F0F6FF', textColor: '#0265FF' };\n}\nfor (const t of numberTypes) {\n  FIELD_TYPE_BADGE_MAP[t] = { label: '数字', bgColor: '#FDF4D9', textColor: '#F4B700' };\n}\nfor (const t of datetimeTypes) {\n  FIELD_TYPE_BADGE_MAP[t] = { label: '日期', bgColor: '#EEDEFE', textColor: '#8E24F9' };\n}\nfor (const t of fileTypes) {\n  FIELD_TYPE_BADGE_MAP[t] = { label: '附件', bgColor: '#DDF6DD', textColor: '#1EC31E' };\n}\n\n// ── Type Badge Component ──────────────────────────────────────────\n\nfunction TypeBadge({ style }: { style: BadgeStyle }) {\n  return (\n    <span\n      className=\"text-[12px] rounded-[100px] h-[20px] px-[6px] flex items-center justify-center shrink-0 leading-[normal]\"\n      style={{ backgroundColor: style.bgColor, color: style.textColor }}\n    >\n      {style.label}\n    </span>\n  );\n}\n\n// ── Tree Node Type ────────────────────────────────────────────────\n\ninterface FieldTreeNode {\n  key: string;\n  label: string;\n  field: IField | null;\n  fieldType?: FieldType;\n  depth: number;\n  children: FieldTreeNode[];\n  isExpandable?: boolean;\n  widgetName?: string;\n}\n\n// ── Tree Builder ──────────────────────────────────────────────────\n\nfunction buildNodeKey(field: IField, index: number): string {\n  return field.widget?.widgetName || String(index);\n}\n\nfunction buildItemNodeKey(parentKey: string, item: { widget?: { widgetName?: string }; value?: unknown; text?: string }, index: number): string {\n  return (item as { widget?: { widgetName?: string } }).widget?.widgetName || `${parentKey}-${index}`;\n}\n\nfunction buildFieldTree(fields: IField[], searchQuery: string): FieldTreeNode[] {\n  const q = searchQuery.toLowerCase().trim();\n\n  const nodes: FieldTreeNode[] = [];\n\n  for (let i = 0; i < fields.length; i++) {\n    const field = fields[i];\n    const label = field.label;\n    const parentWidgetName = field.widget?.widgetName;\n\n    // Only items with a 'widget' property (ISubformField) are expandable sub-fields\n    const items = field.widget?.items;\n    const subformItems = items?.filter(\n      (item): item is ISubformField => 'widget' in item\n    );\n    const hasItems = subformItems && subformItems.length > 0;\n    const rootKey = parentWidgetName || buildNodeKey(field, i);\n\n    const children: FieldTreeNode[] = [];\n    if (hasItems) {\n      for (let j = 0; j < subformItems!.length; j++) {\n        const item = subformItems![j];\n        const childWidgetName = item.widget?.widgetName || `${rootKey}-item-${j}`;\n        const fullWidgetName = `${parentWidgetName}.${childWidgetName}`;\n        children.push({\n          key: fullWidgetName,\n          label: item.label || `选项 ${j + 1}`,\n          field: field,\n          fieldType: item.widget?.type,\n          depth: 1,\n          children: [],\n          isExpandable: false,\n          widgetName: fullWidgetName,\n        });\n      }\n    }\n\n    const labelMatch = !q || label.toLowerCase().includes(q);\n    const childMatch = children.some((c) => c?.label?.toLowerCase().includes(q));\n\n    if (labelMatch || childMatch) {\n      nodes.push({\n        key: rootKey,\n        label,\n        field,\n        fieldType: field.widget?.type,\n        depth: 0,\n        children,\n        isExpandable: hasItems,\n        widgetName: parentWidgetName,\n      });\n    }\n  }\n\n  return nodes;\n}\n\n// ── FieldSelectPopover ────────────────────────────────────────────\n\nexport interface FieldSelectPopoverProps {\n  fields: IField[];\n  selectedKey?: string;\n  onSelect: (field: IField, nodeKey: string) => void;\n  searchPlaceholder?: string;\n  showTypeBadge?: boolean;\n  width?: number;\n  className?: string;\n}\n\nexport const FieldSelectPopover = ({\n  fields,\n  selectedKey,\n  onSelect,\n  searchPlaceholder = '搜索',\n  showTypeBadge = false,\n  width,\n  className,\n}: FieldSelectPopoverProps) => {\n  const [searchQuery, setSearchQuery] = useState('');\n  const [expandedKeys, setExpandedKeys] = useState<Set<string>>(() => {\n    const s = new Set<string>();\n    for (let i = 0; i < fields.length; i++) {\n      if (fields[i].widget?.items?.length) {\n        s.add(buildNodeKey(fields[i], i));\n      }\n    }\n    return s;\n  });\n\n  const tree = useMemo(\n    () => buildFieldTree(fields, searchQuery),\n    [fields, searchQuery]\n  );\n\n  const toggleExpanded = useCallback((key: string) => {\n    setExpandedKeys((prev) => {\n      const next = new Set(prev);\n      if (next.has(key)) next.delete(key);\n      else next.add(key);\n      return next;\n    });\n  }, []);\n\n  const handleSelect = useCallback(\n    (node: FieldTreeNode) => {\n      if (node.isExpandable) return;\n      if (node.field) {\n        onSelect(node.field, node.key);\n      }\n    },\n    [onSelect]\n  );\n\n  const renderNodeRow = useCallback(\n    (node: FieldTreeNode): JSX.Element => {\n      const isExpanded = expandedKeys.has(node.key);\n      const isSelected = selectedKey != null && node.key === selectedKey;\n      const paddingLeft = node.depth * 22 + 10;\n      const badge = node.fieldType && showTypeBadge\n        ? FIELD_TYPE_BADGE_MAP[node.fieldType]\n        : undefined;\n\n      const handleRowClick = () => {\n        if (node.isExpandable) {\n          toggleExpanded(node.key);\n        } else {\n          handleSelect(node);\n        }\n      };\n\n      const handleToggleClick = (e: React.MouseEvent) => {\n        e.stopPropagation();\n        toggleExpanded(node.key);\n      };\n\n      return (\n        <div key={node.key}>\n          <button\n            type=\"button\"\n            onClick={handleRowClick}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] rounded-[4px] text-left',\n              'pr-[10px]',\n              transCls,\n              isSelected\n                ? 'bg-[#F0F6FF] text-[#0265FF]'\n                : 'text-[#030303] hover:bg-[#EFF0F6]'\n            )}\n            style={{ paddingLeft: `${paddingLeft}px`, paddingTop: 7, paddingBottom: 7 }}\n          >\n            <div className=\"flex items-center gap-[8px] min-w-0 flex-1\">\n              {/* Toggle arrow or spacer */}\n              {node.isExpandable ? (\n                <span onClick={handleToggleClick} className=\"flex items-center cursor-pointer\">\n                  <ToggleIcon expanded={isExpanded} />\n                </span>\n              ) : node.depth > 0 ? (\n                <span className=\"w-[16px] h-[16px] shrink-0\" />\n              ) : null}\n\n              <span className=\"text-[14px] truncate leading-[normal]\">\n                {node.label}\n              </span>\n            </div>\n\n            {badge && <TypeBadge style={badge} />}\n          </button>\n\n          {/* Children when expanded */}\n          {node.isExpandable && isExpanded && (\n            <div>\n              {node.children.map((child) => renderNodeRow(child))}\n            </div>\n          )}\n        </div>\n      );\n    },\n    [expandedKeys, selectedKey, showTypeBadge, handleSelect, toggleExpanded]\n  );\n\n  return (\n    <div\n      className={cn(\n        'bg-white drop-shadow-[0px_0px_8px_rgba(0,0,0,0.1)] rounded-[4px] p-[4px]',\n        'flex flex-col gap-[4px]',\n        className\n      )}\n      style={width ? { width } : undefined}\n    >\n      {/* Search input */}\n      <div className=\"flex items-center gap-[6px] border border-[#E0E0E0] rounded-[4px] h-[34px] px-[10px] py-[7px] shrink-0\">\n        <SearchIcon />\n        <input\n          type=\"text\"\n          value={searchQuery}\n          onChange={(e) => setSearchQuery(e.target.value)}\n          placeholder={searchPlaceholder}\n          className=\"flex-1 outline-none text-[14px] placeholder:text-[#999999] bg-transparent min-w-0 text-[#030303]\"\n        />\n      </div>\n\n      {/* Field list */}\n      <div className=\"max-h-[400px] overflow-y-auto flex flex-col\">\n        {tree.length > 0 ? (\n          tree.map((node) => renderNodeRow(node))\n        ) : (\n          <div className=\"flex items-center justify-center h-[60px] text-[12px] text-[#999999]\">\n            {searchQuery.trim() ? '未找到相关字段' : '暂无字段'}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\n// ── Key → Label Lookup ───────────────────────────────────────────\n\nfunction buildKeyLabelMap(fields: IField[]): Map<string, string> {\n  const map = new Map<string, string>();\n  for (let i = 0; i < fields.length; i++) {\n    const field = fields[i];\n    const rootKey = buildNodeKey(field, i);\n    map.set(rootKey, field.label);\n    const items = field.widget?.items;\n    if (items) {\n      for (let j = 0; j < items.length; j++) {\n        const item = items[j];\n        // For ISubformField items, use dot-joined widgetName as key\n        if ('widget' in item) {\n          const fullKey = `${field.widget?.widgetName}.${item.widget?.widgetName}`;\n          map.set(fullKey, item.label || `选项 ${j + 1}`);\n        } else {\n          const childKey = buildItemNodeKey(rootKey, item, j);\n          map.set(childKey, item.text || `选项 ${j + 1}`);\n        }\n      }\n    }\n  }\n  return map;\n}\n\nfunction getLabelByKey(fields: IField[], key: string | undefined): string | null {\n  if (!key) return null;\n  return buildKeyLabelMap(fields).get(key) ?? null;\n}\n\n// ── FieldSelect ───────────────────────────────────────────────────\n\nexport interface FieldSelectProps {\n  fields: IField[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (field: IField, nodeKey: string) => void;\n  placeholder?: string;\n  searchPlaceholder?: string;\n  disabled?: boolean;\n  showTypeBadge?: boolean;\n  className?: string;\n}\n\nexport const FieldSelect = ({\n  fields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  placeholder = '请选择字段',\n  searchPlaceholder = '输入字段名称来搜索',\n  disabled = false,\n  showTypeBadge = true,\n  className,\n}: FieldSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [internalSelectedKey, setInternalSelectedKey] = useState<string | undefined>(defaultValue);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const [triggerWidth, setTriggerWidth] = useState<number>(0);\n  const triggerBtnRef = useRef<HTMLButtonElement | null>(null);\n\n  const selectedKey = controlledValue !== undefined ? controlledValue : internalSelectedKey;\n  const displayLabel = useMemo(\n    () => getLabelByKey(fields, selectedKey),\n    [fields, selectedKey]\n  );\n\n  const handleSelect = useCallback(\n    (field: IField, nodeKey: string) => {\n      if (controlledValue === undefined) {\n        setInternalSelectedKey(nodeKey);\n      }\n      onChange?.(field, nodeKey);\n      setOpen(false);\n    },\n    [controlledValue, onChange]\n  );\n\n  const handleOpenChange = useCallback(\n    (nextOpen: boolean) => {\n      if (disabled) return;\n      setOpen(nextOpen);\n      if (nextOpen && triggerBtnRef.current) {\n        setTriggerWidth(triggerBtnRef.current.offsetWidth);\n      }\n    },\n    [disabled]\n  );\n\n  const setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n    triggerBtnRef.current = node;\n    if (node) setTriggerWidth(node.offsetWidth);\n    if (!node) { setPortalContainer(null); return; }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-field-select-portal]');\n      if (existing) { setPortalContainer(existing); return; }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-field-select-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  return (\n    <div className={cn('relative', className)}>\n      <Popover open={open} onOpenChange={handleOpenChange}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px]',\n              'bg-white border rounded-[4px]',\n              'px-[10px] py-[7px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n              transCls\n            )}\n          >\n            <span\n              className={cn(\n                'text-[14px] leading-[normal] truncate',\n                displayLabel ? 'text-[#030303]' : 'text-[#999999]'\n              )}\n            >\n              {displayLabel ?? placeholder}\n            </span>\n            <DropdownChevron open={open} />\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 !p-0\"\n          style={{ minWidth: triggerWidth || undefined }}\n        >\n          <FieldSelectPopover\n            fields={fields}\n            selectedKey={selectedKey}\n            onSelect={handleSelect}\n            searchPlaceholder={searchPlaceholder}\n            showTypeBadge={showTypeBadge}\n          />\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import type { offsetType, DateFieldType } from '@baishuyun/types';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../../ui/select';\n\nexport interface OffsetTypeOption {\n  value: offsetType;\n  label: string;\n}\n\nexport const OffsetTypeOptions: OffsetTypeOption[] = [\n  { value: 'before', label: '之前' },\n  { value: 'after', label: '之后' },\n  { value: 'day', label: '当天' },\n  { value: 'time', label: '当时' },\n];\n\nexport function getOffsetTypeOptions(dateFieldType: DateFieldType): OffsetTypeOption[] {\n  if (dateFieldType === 'date') {\n    return OffsetTypeOptions.filter((opt) => opt.value !== 'time');\n  }\n  return OffsetTypeOptions.filter((opt) => opt.value !== 'day');\n}\n\nexport interface OffsetTypeSelectProps {\n  value?: offsetType;\n  onChange?: (value: offsetType) => void;\n  dateFieldType: DateFieldType;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const OffsetTypeSelect = ({\n  value,\n  onChange,\n  dateFieldType,\n  placeholder = '请选择偏移类型',\n  disabled = false,\n  className,\n}: OffsetTypeSelectProps) => {\n  const options = getOffsetTypeOptions(dateFieldType);\n\n  return (\n    <Select\n      value={value}\n      onValueChange={(v) => onChange?.(v as offsetType)}\n      disabled={disabled}\n    >\n      <SelectTrigger className={className}>\n        <SelectValue placeholder={placeholder} />\n      </SelectTrigger>\n      <SelectContent>\n        {options.map((option) => (\n          <SelectItem key={option.value} value={option.value}>\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","import type { offsetUnit } from '@baishuyun/types';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../../ui/select';\n\nexport interface OffsetUnitOption {\n  value: offsetUnit;\n  label: string;\n}\n\nexport const OffsetUnitOptions: OffsetUnitOption[] = [\n  { value: 'minute', label: '分钟' },\n  { value: 'hour', label: '小时' },\n  { value: 'day', label: '天' },\n];\n\nexport interface OffsetUnitSelectProps {\n  value?: offsetUnit;\n  onChange?: (value: offsetUnit) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const OffsetUnitSelect = ({\n  value,\n  onChange,\n  placeholder = '请选择偏移单位',\n  disabled = false,\n  className,\n}: OffsetUnitSelectProps) => {\n  return (\n    <Select\n      value={value}\n      onValueChange={(v) => onChange?.(v as offsetUnit)}\n      disabled={disabled}\n    >\n      <SelectTrigger className={className}>\n        <SelectValue placeholder={placeholder} />\n      </SelectTrigger>\n      <SelectContent>\n        {OffsetUnitOptions.map((option) => (\n          <SelectItem key={option.value} value={option.value}>\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { OffsetTypeSelect } from '../offset-type-select';\nimport { OffsetUnitSelect } from '../offset-unit-select';\nimport { DateInput } from '../date-picker/date-input';\nimport type {\n  IOffsetPreference,\n  DateFieldType,\n  offsetType,\n  offsetUnit,\n} from '@baishuyun/types';\n\nexport interface OffsetPreferenceSelectProps {\n  value?: IOffsetPreference;\n  onChange?: (value: IOffsetPreference) => void;\n  dateFieldType: DateFieldType;\n  disabled?: boolean;\n  className?: string;\n}\n\nconst MINUTES_PER_DAY = 1440;\n\nconst NUMBER_INPUT_CLASSES = cn(\n  'h-[34px] px-[10px] py-[7px] rounded-[4px] bg-white border border-[#e0e0e0]',\n  'text-[14px] text-[#030303] placeholder:text-[#999999]',\n  'focus:outline-none focus:border-[#0265FF]',\n  'disabled:bg-[#EFF0F6] disabled:cursor-not-allowed',\n  '[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none'\n);\n\nfunction getDefaults(dateFieldType: DateFieldType): IOffsetPreference {\n  return dateFieldType === 'date'\n    ? { dateFieldType: 'date', offsetType: 'day', offsetValue: 0, offsetUnit: 'minute' }\n    : { dateFieldType: 'datetime', offsetType: 'time', offsetValue: 0, offsetUnit: 'minute' };\n}\n\nfunction validOffsetType(type: offsetType, dateFieldType: DateFieldType): offsetType {\n  if (dateFieldType === 'date' && type === 'time') return 'day';\n  if (dateFieldType === 'datetime' && type === 'day') return 'time';\n  return type;\n}\n\nfunction minutesToTimeDate(minutes: number): Date {\n  const clamped = Math.max(0, Math.floor(minutes)) % MINUTES_PER_DAY;\n  const d = new Date(2024, 0, 1);\n  d.setHours(Math.floor(clamped / 60), clamped % 60, 0, 0);\n  return d;\n}\n\nfunction timeDateToMinutes(date: Date): number {\n  return date.getHours() * 60 + date.getMinutes();\n}\n\nexport function OffsetPreferenceSelect({\n  value,\n  onChange,\n  dateFieldType,\n  disabled = false,\n  className,\n}: OffsetPreferenceSelectProps) {\n  const isControlled = value !== undefined;\n\n  const [internalValue, setInternalValue] = useState<IOffsetPreference>(\n    () => value ?? getDefaults(dateFieldType)\n  );\n\n  const prevValue = useRef(value);\n  useEffect(() => {\n    if (value !== undefined) {\n      setInternalValue(value);\n    }\n    prevValue.current = value;\n  }, [value]);\n\n  const current: IOffsetPreference = value ?? internalValue;\n\n  const setValue = useCallback(\n    (newValue: IOffsetPreference) => {\n      if (!isControlled) setInternalValue(newValue);\n      onChange?.(newValue);\n    },\n    [isControlled, onChange]\n  );\n\n  const effectiveType = validOffsetType(current.offsetType, dateFieldType);\n\n  const showDaysInput = dateFieldType === 'date' && (effectiveType === 'before' || effectiveType === 'after');\n  const showNumberInput = dateFieldType === 'datetime' && (effectiveType === 'before' || effectiveType === 'after');\n  const showTimeInput = dateFieldType === 'date';\n  const showUnitSelect = dateFieldType === 'datetime' && (effectiveType === 'before' || effectiveType === 'after');\n\n  const timeInMinutes = dateFieldType === 'date'\n    ? (showDaysInput\n        ? current.offsetValue % MINUTES_PER_DAY\n        : current.offsetValue)\n    : 0;\n  const timeDate = minutesToTimeDate(timeInMinutes);\n\n  const daysCount = showDaysInput\n    ? Math.max(0, Math.floor(current.offsetValue / MINUTES_PER_DAY))\n    : 1;\n\n  const numberValue = showNumberInput ? current.offsetValue : 0;\n\n  const handleOffsetTypeChange = useCallback(\n    (newOffsetType: offsetType) => {\n      const valid = validOffsetType(newOffsetType, dateFieldType);\n\n      const timeInMin = current.offsetValue % MINUTES_PER_DAY;\n\n      if (dateFieldType === 'date') {\n        if (valid === 'day') {\n          setValue({\n            dateFieldType: 'date',\n            offsetType: 'day',\n            offsetValue: timeInMin,\n            offsetUnit: 'minute',\n          });\n        } else {\n          setValue({\n            dateFieldType: 'date',\n            offsetType: valid,\n            offsetValue: timeInMin,\n            offsetUnit: 'minute',\n          });\n        }\n      } else {\n        if (valid === 'time') {\n          setValue({\n            dateFieldType: 'datetime',\n            offsetType: 'time',\n            offsetValue: 0,\n            offsetUnit: 'minute',\n          });\n        } else {\n          setValue({\n            dateFieldType: 'datetime',\n            offsetType: valid,\n            offsetValue: current.offsetValue,\n            offsetUnit: current.offsetUnit,\n          });\n        }\n      }\n    },\n    [dateFieldType, current.offsetValue, current.offsetUnit, setValue]\n  );\n\n  const handleTimeChange = useCallback(\n    (date: Date | null) => {\n      if (!date) return;\n      const mins = timeDateToMinutes(date);\n\n      if (dateFieldType === 'date') {\n        if (effectiveType === 'day') {\n          setValue({\n            dateFieldType: 'date',\n            offsetType: 'day',\n            offsetValue: mins,\n            offsetUnit: 'minute',\n          });\n        } else {\n          const days = Math.max(0, Math.floor(current.offsetValue / MINUTES_PER_DAY));\n          setValue({\n            dateFieldType: 'date',\n            offsetType: effectiveType,\n            offsetValue: days * MINUTES_PER_DAY + mins,\n            offsetUnit: 'minute',\n          });\n        }\n      }\n    },\n    [dateFieldType, effectiveType, current.offsetValue, setValue]\n  );\n\n  const handleDaysChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const raw = parseInt(e.target.value, 10);\n      const days = isNaN(raw) ? 0 : Math.max(0, raw);\n      const mins = current.offsetValue % MINUTES_PER_DAY;\n\n      setValue({\n        dateFieldType: 'date',\n        offsetType: effectiveType,\n        offsetValue: days * MINUTES_PER_DAY + mins,\n        offsetUnit: 'minute',\n      });\n    },\n    [effectiveType, current.offsetValue, setValue]\n  );\n\n  const handleNumberChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const raw = parseInt(e.target.value, 10);\n      const val = isNaN(raw) ? 0 : Math.max(0, raw);\n\n      setValue({\n        dateFieldType: 'datetime',\n        offsetType: effectiveType,\n        offsetValue: val,\n        offsetUnit: current.offsetUnit,\n      });\n    },\n    [effectiveType, current.offsetUnit, setValue]\n  );\n\n  const handleUnitChange = useCallback(\n    (newUnit: offsetUnit) => {\n      setValue({\n        dateFieldType: 'datetime',\n        offsetType: effectiveType,\n        offsetValue: current.offsetValue,\n        offsetUnit: newUnit,\n      });\n    },\n    [effectiveType, current.offsetValue, setValue]\n  );\n\n  return (\n    <div className={cn('flex items-center gap-[10px]', className)}>\n      <OffsetTypeSelect\n        value={effectiveType}\n        onChange={handleOffsetTypeChange}\n        dateFieldType={dateFieldType}\n        disabled={disabled}\n      />\n      {showDaysInput && (\n        <input\n          type=\"number\"\n          value={daysCount}\n          onChange={handleDaysChange}\n          disabled={disabled}\n          min={0}\n          step={1}\n          className={cn(NUMBER_INPUT_CLASSES, 'w-[60px]')}\n        />\n      )}\n      {showDaysInput && (\n        <span className=\"text-[14px] text-[#030303] shrink-0\">天</span>\n      )}\n      {showNumberInput && (\n        <input\n          type=\"number\"\n          value={numberValue}\n          onChange={handleNumberChange}\n          disabled={disabled}\n          min={0}\n          step={1}\n          className={cn(NUMBER_INPUT_CLASSES, 'w-[80px]')}\n        />\n      )}\n      {showUnitSelect && (\n        <OffsetUnitSelect\n          value={current.offsetUnit}\n          onChange={handleUnitChange}\n          disabled={disabled}\n        />\n      )}\n      {showTimeInput && (\n        <DateInput\n          value={timeDate}\n          onChange={handleTimeChange}\n          format=\"HH:mm\"\n          disabled={disabled}\n        />\n      )}\n    </div>\n  );\n}\n","import { useCallback } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { TriggerTimeSourceTypeSelect } from '../trigger-time-source-type-select';\nimport { DateInput } from '../date-picker/date-input';\nimport { FormSelect } from '../form-select';\nimport type { FormSelectItem, FormSelectChangeResult } from '../form-select';\nimport { FieldSelect } from '../field-select';\nimport { OffsetPreferenceSelect } from '../offset-preference-select';\nimport type {\n  ITriggerTimePreference,\n  IDateFieldTriggerTimePayload,\n  triggerTimeSourceType,\n  IField,\n  IOffsetPreference,\n} from '@baishuyun/types';\nimport type { DateFormat } from '../date-picker/types';\n\nexport interface TriggerTimePreferenceSelectProps {\n  value?: ITriggerTimePreference;\n  onChange?: (value: ITriggerTimePreference) => void;\n  forms?: FormSelectItem[];\n  fields?: IField[];\n  dateFormat?: DateFormat;\n  disabled?: boolean;\n  className?: string;\n}\n\nfunction isDateFieldPayload(\n  payload: unknown,\n): payload is IDateFieldTriggerTimePayload {\n  return (\n    typeof payload === 'object' && payload !== null && 'formId' in payload\n  );\n}\n\nfunction buildDateFieldPayload(\n  overrides: Partial<IDateFieldTriggerTimePayload>,\n  existing?: IDateFieldTriggerTimePayload,\n): IDateFieldTriggerTimePayload {\n  return {\n    dateFieldType: 'datetime',\n    offsetType: 'time',\n    offsetValue: 0,\n    offsetUnit: 'minute',\n    ...existing,\n    ...overrides,\n    formId: overrides.formId ?? existing?.formId ?? '',\n    fieldId: overrides.fieldId ?? existing?.fieldId ?? '',\n  };\n}\n\nfunction parseDateFromPayload(payload: unknown): Date | undefined {\n  if (typeof payload === 'string' || typeof payload === 'number') {\n    const d = new Date(payload);\n    return isNaN(d.getTime()) ? undefined : d;\n  }\n  return undefined;\n}\n\nexport function TriggerTimePreferenceSelect({\n  value,\n  onChange,\n  forms = [],\n  fields = [],\n  dateFormat = 'yyyy-MM-dd',\n  disabled = false,\n  className,\n}: TriggerTimePreferenceSelectProps) {\n  const selectedType = value?.type;\n\n  const dateFieldPayload = isDateFieldPayload(value?.customTriggerTimePayload)\n    ? value.customTriggerTimePayload\n    : undefined;\n\n  const handleTypeChange = useCallback(\n    (type: triggerTimeSourceType) => {\n      onChange?.({ type });\n    },\n    [onChange],\n  );\n\n  const handleDateChange = useCallback(\n    (date: Date | null) => {\n      onChange?.({\n        type: 'custom',\n        customTriggerTimePayload: date ? date.toISOString() : undefined,\n      });\n    },\n    [onChange],\n  );\n\n  const handleFormChange = useCallback(\n    (result: FormSelectChangeResult) => {\n      const payload = buildDateFieldPayload(\n        { formId: result.form.id },\n        dateFieldPayload,\n      );\n      onChange?.({ type: 'date_field', customTriggerTimePayload: payload });\n    },\n    [onChange, dateFieldPayload],\n  );\n\n  const handleFieldChange = useCallback(\n    (_field: IField, nodeKey: string) => {\n      const payload = buildDateFieldPayload(\n        { fieldId: nodeKey },\n        dateFieldPayload,\n      );\n      onChange?.({ type: 'date_field', customTriggerTimePayload: payload });\n    },\n    [onChange, dateFieldPayload],\n  );\n\n  const handleOffsetPreferenceChange = useCallback(\n    (offsetPref: IOffsetPreference) => {\n      const payload = buildDateFieldPayload(\n        {\n          dateFieldType: offsetPref.dateFieldType,\n          offsetType: offsetPref.offsetType,\n          offsetValue: offsetPref.offsetValue,\n          offsetUnit: offsetPref.offsetUnit,\n        },\n        dateFieldPayload,\n      );\n      onChange?.({ type: 'date_field', customTriggerTimePayload: payload });\n    },\n    [onChange, dateFieldPayload],\n  );\n\n  return (\n    <div className={cn('flex flex-col gap-[10px]', className)}>\n      {/* Row 1 */}\n      <div className=\"flex gap-[22px] items-start w-full\">\n        <TriggerTimeSourceTypeSelect\n          className=\"flex-1 min-w-0\"\n          value={selectedType}\n          onChange={handleTypeChange}\n          disabled={disabled}\n        />\n\n        {selectedType === 'custom' && (\n          <DateInput\n            className=\"flex-1 min-w-0\"\n            value={parseDateFromPayload(value?.customTriggerTimePayload)}\n            onChange={handleDateChange}\n            format={dateFormat}\n            disabled={disabled}\n          />\n        )}\n\n        {selectedType === 'date_field' && (\n          <FormSelect\n            className=\"flex-1 min-w-0\"\n            items={forms}\n            value={dateFieldPayload?.formId}\n            onChange={handleFormChange}\n            disabled={disabled}\n          />\n        )}\n      </div>\n\n      {/* Row 2 - field select + offset preference, only for date_field */}\n      {selectedType === 'date_field' && (\n        <div className=\"flex items-start gap-[10px] w-full\">\n          <FieldSelect\n            className=\"w-[300px]\"\n            fields={fields}\n            value={dateFieldPayload?.fieldId}\n            onChange={handleFieldChange}\n            disabled={disabled}\n          />\n          {dateFieldPayload && (\n            <OffsetPreferenceSelect\n              value={{\n                dateFieldType: dateFieldPayload.dateFieldType,\n                offsetType: dateFieldPayload.offsetType,\n                offsetValue: dateFieldPayload.offsetValue,\n                offsetUnit: dateFieldPayload.offsetUnit,\n              }}\n              onChange={handleOffsetPreferenceChange}\n              dateFieldType={dateFieldPayload.dateFieldType}\n              disabled={disabled}\n            />\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n","import type { repeatPreferenceType } from '@baishuyun/types';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../../ui/select';\n\nexport interface RepeatPreferenceTypeOption {\n  value: repeatPreferenceType;\n  label: string;\n}\n\nexport const RepeatPreferenceTypeOptions: RepeatPreferenceTypeOption[] = [\n  { value: 'none', label: '不重复触发' },\n  { value: 'daily', label: '每天触发一次' },\n  { value: 'weekly', label: '每周触发一次' },\n  { value: 'everyTwoWeeks', label: '每两周触发一次' },\n  { value: 'monthly', label: '每月触发一次' },\n  { value: 'yearly', label: '每年触发一次' },\n  { value: 'custom', label: '自定义重复' },\n];\n\nexport interface RepeatPreferenceTypeSelectProps {\n  value?: repeatPreferenceType;\n  onChange?: (value: repeatPreferenceType) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const RepeatPreferenceTypeSelect = ({\n  value,\n  onChange,\n  placeholder = '请选择重复类型',\n  disabled = false,\n  className,\n}: RepeatPreferenceTypeSelectProps) => {\n  return (\n    <Select\n      value={value}\n      onValueChange={(v) => onChange?.(v as repeatPreferenceType)}\n      disabled={disabled}\n    >\n      <SelectTrigger className={className}>\n        <SelectValue placeholder={placeholder} />\n      </SelectTrigger>\n      <SelectContent>\n        {RepeatPreferenceTypeOptions.map((option) => (\n          <SelectItem key={option.value} value={option.value}>\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","export const ClearAllIcon = ({ className }: { className?: string }) => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className={className}>\n    <path d=\"M7 0C7.91925 -1.93718e-08 8.8295 0.18106 9.67878 0.532843C10.5281 0.884626 11.2997 1.40024 11.9497 2.05025C12.5998 2.70026 13.1154 3.47194 13.4672 4.32122C13.8189 5.17049 14 6.08075 14 7C14 7.91925 13.8189 8.8295 13.4672 9.67878C13.1154 10.5281 12.5998 11.2997 11.9497 11.9497C11.2997 12.5998 10.5281 13.1154 9.67878 13.4672C8.8295 13.8189 7.91925 14 7 14C3.13372 14 1.39103e-08 10.8658 0 7C0 3.13372 3.13372 1.39103e-08 7 0ZM10.1495 3.85C10.0301 3.7308 9.86825 3.66386 9.69953 3.66386C9.53081 3.66386 9.36898 3.7308 9.24956 3.85L7 6.10058L4.74993 3.85C4.6295 3.73566 4.46918 3.67288 4.30313 3.67503C4.13708 3.67718 3.97844 3.7441 3.86102 3.86153C3.7436 3.97895 3.67668 4.13759 3.67452 4.30364C3.67237 4.46968 3.73515 4.63001 3.84949 4.75044L6.10109 7L3.85 9.24956C3.73566 9.36999 3.67288 9.53031 3.67503 9.69636C3.67718 9.86241 3.7441 10.021 3.86153 10.1385C3.97895 10.2559 4.13759 10.3228 4.30364 10.325C4.46969 10.3271 4.63001 10.2643 4.75044 10.15L7 7.8984L9.24956 10.1495C9.37027 10.2621 9.52995 10.3234 9.69497 10.3205C9.85999 10.3177 10.0175 10.2509 10.1342 10.1342C10.2509 10.0175 10.3178 9.86008 10.3208 9.69507C10.3237 9.53005 10.2625 9.37033 10.15 9.24956L7.8984 7L10.1495 4.74993C10.2688 4.63049 10.3359 4.46856 10.3359 4.29971C10.3359 4.13086 10.2688 3.96892 10.1495 3.84949V3.85Z\" fill=\"#666666\"/>\n  </svg>\n);\n","import { useState, useCallback } from 'react';\nimport type { repeatByWeekDetail } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { SquareChecker } from '../../square-checker';\nimport { ClearAllIcon } from '../../icons/clear-all-icon';\nimport { usePortalContainer } from '../../../hooks/use-portal-container';\n\nexport interface WeekdaysOption {\n  value: repeatByWeekDetail;\n  label: string;\n}\n\nexport const WeekdaysOptions: WeekdaysOption[] = [\n  { value: 'mon', label: '星期一' },\n  { value: 'tue', label: '星期二' },\n  { value: 'wed', label: '星期三' },\n  { value: 'thu', label: '星期四' },\n  { value: 'fri', label: '星期五' },\n  { value: 'sat', label: '星期六' },\n  { value: 'sun', label: '星期日' },\n];\n\nexport interface WeekdaysSelectProps {\n  value?: repeatByWeekDetail[];\n  onChange?: (value: repeatByWeekDetail[]) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nconst CloseIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nconst DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nexport const WeekdaysSelect = ({\n  value = [],\n  onChange,\n  placeholder = '请选择工作日',\n  disabled = false,\n  className,\n}: WeekdaysSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [isHovering, setIsHovering] = useState(false);\n\n  const allSelected = value.length === WeekdaysOptions.length;\n  const someSelected = value.length > 0 && value.length < WeekdaysOptions.length;\n\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-weekdays-select-portal');\n\n  const handleToggle = useCallback(\n    (weekday: repeatByWeekDetail) => {\n      const next = value.includes(weekday)\n        ? value.filter((v) => v !== weekday)\n        : [...value, weekday];\n      onChange?.(next);\n    },\n    [value, onChange]\n  );\n\n  const handleSelectAll = useCallback(() => {\n    if (allSelected) {\n      onChange?.([]);\n    } else {\n      onChange?.(WeekdaysOptions.map((opt) => opt.value));\n    }\n  }, [allSelected, onChange]);\n\n  const handleClearAll = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.([]);\n    },\n    [onChange]\n  );\n\n  const handleRemove = useCallback(\n    (weekday: repeatByWeekDetail, e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.(value.filter((v) => v !== weekday));\n    },\n    [value, onChange]\n  );\n\n  const handleOpenChange = useCallback(\n    (nextOpen: boolean) => {\n      if (disabled) return;\n      setOpen(nextOpen);\n    },\n    [disabled]\n  );\n\n  const hasSelection = value.length > 0;\n  const showClear = hasSelection && isHovering;\n\n  return (\n    <div className={cn('relative', className)}>\n      <Popover open={open} onOpenChange={handleOpenChange}>\n        <PopoverTrigger asChild>\n          <button\n            type=\"button\"\n            disabled={disabled}\n            onMouseEnter={() => setIsHovering(true)}\n            onMouseLeave={() => setIsHovering(false)}\n            ref={setTriggerRef}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] gap-2.5',\n              'bg-white border border-[#E0E0E0] rounded-[4px]',\n              'py-[7px]',\n              hasSelection ? 'pl-[4px] pr-[10px]' : 'px-[10px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open && 'border-[#0265FF]',\n              transCls\n            )}\n          >\n            {hasSelection ? (\n              <>\n                <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\">\n                  {value.map((weekday) => {\n                    const opt = WeekdaysOptions.find((o) => o.value === weekday);\n                    return (\n                      <span\n                        key={weekday}\n                        className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0\"\n                      >\n                        <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                          {opt?.label}\n                        </span>\n                        <span\n                          className=\"cursor-pointer flex items-center shrink-0\"\n                          onClick={(e) => handleRemove(weekday, e)}\n                        >\n                          <CloseIcon />\n                        </span>\n                      </span>\n                    );\n                  })}\n                </div>\n                {showClear ? (\n                  <span\n                    className=\"cursor-pointer flex items-center shrink-0\"\n                    onClick={handleClearAll}\n                  >\n                    <ClearAllIcon />\n                  </span>\n                ) : (\n                  <DropdownChevron open={open} />\n                )}\n              </>\n            ) : (\n              <>\n                <span className=\"text-[14px] text-[#999999] leading-[normal] truncate\">\n                  {placeholder}\n                </span>\n                <DropdownChevron open={open} />\n              </>\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          className=\"!border-0 rounded-[8px] shadow-[0px_6px_16px_rgba(0,0,0,0.06)] p-[4px]\"\n          portalContainer={portalContainer}\n        >\n          <div className=\"flex flex-col\">\n            <button\n              type=\"button\"\n              onClick={handleSelectAll}\n              className={cn(\n                'flex items-center gap-[6px] h-[34px] px-[10px] py-[7px] rounded-[4px] text-left',\n                'hover:bg-[#EFF0F6]',\n                transCls\n              )}\n            >\n              <SquareChecker\n                checked={allSelected}\n                intermediate={someSelected}\n                onCheckedChange={handleSelectAll}\n                className=\"shrink-0\"\n              />\n              <span className=\"text-[14px] font-bold text-[#0265FF] leading-[normal]\">\n                全选\n              </span>\n            </button>\n            {WeekdaysOptions.map((option) => {\n              const isSelected = value.includes(option.value);\n              return (\n                <button\n                  key={option.value}\n                  type=\"button\"\n                  onClick={() => handleToggle(option.value)}\n                  className={cn(\n                    'flex items-center gap-[6px] h-[34px] px-[10px] py-[7px] rounded-[4px] text-left',\n                    'hover:bg-[#EFF0F6]',\n                    transCls\n                  )}\n                >\n                  <SquareChecker\n                    checked={isSelected}\n                    onCheckedChange={() => handleToggle(option.value)}\n                    className=\"shrink-0\"\n                  />\n                  <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                    {option.label}\n                  </span>\n                </button>\n              );\n            })}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '../../lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.List>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.List\n    ref={ref}\n    className={cn(\n      'inline-flex items-center w-full gap-[2px] p-[2px] bg-[#EFF0F6] rounded-[4px]',\n      className\n    )}\n    {...props}\n  />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      'inline-flex items-center justify-center w-full h-[30px]',\n      'px-[10px] py-[7px] rounded-[4px]',\n      'text-[14px] text-[#121111] leading-normal',\n      'bg-transparent border border-solid border-[#EFF0F6]',\n      'transition-all duration-200 ease-out',\n      'outline-none cursor-pointer',\n      'hover:text-[#121111] hover:border-[#E0E0E0] hover:bg-white',\n      'data-[state=active]:text-[#0265FF] data-[state=active]:border-[#E0E0E0] data-[state=active]:bg-white',\n      'focus-visible:ring-2 focus-visible:ring-[#0265FF] focus-visible:ring-offset-1',\n      className\n    )}\n    {...props}\n  />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={cn(\n      'mt-2 outline-none',\n      'data-[state=inactive]:hidden',\n      className\n    )}\n    {...props}\n  />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useState, useCallback, useMemo } from 'react';\nimport type { repeatByMonthDetail } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../../ui/tabs';\nimport { SquareChecker } from '../../square-checker';\nimport { ClearAllIcon } from '../../icons/clear-all-icon';\nimport { usePortalContainer } from '../../../hooks/use-portal-container';\n\nexport interface MonthdaysOption {\n  value: repeatByMonthDetail;\n  label: string;\n}\n\nexport const MonthdaysOptions: MonthdaysOption[] = [\n  { value: 1, label: '1' },\n  { value: 2, label: '2' },\n  { value: 3, label: '3' },\n  { value: 4, label: '4' },\n  { value: 5, label: '5' },\n  { value: 6, label: '6' },\n  { value: 7, label: '7' },\n  { value: 8, label: '8' },\n  { value: 9, label: '9' },\n  { value: 10, label: '10' },\n  { value: 11, label: '11' },\n  { value: 12, label: '12' },\n  { value: 13, label: '13' },\n  { value: 14, label: '14' },\n  { value: 15, label: '15' },\n  { value: 16, label: '16' },\n  { value: 17, label: '17' },\n  { value: 18, label: '18' },\n  { value: 19, label: '19' },\n  { value: 20, label: '20' },\n  { value: 21, label: '21' },\n  { value: 22, label: '22' },\n  { value: 23, label: '23' },\n  { value: 24, label: '24' },\n  { value: 25, label: '25' },\n  { value: 26, label: '26' },\n  { value: 27, label: '27' },\n  { value: 28, label: '28' },\n  { value: 29, label: '29' },\n  { value: 30, label: '30' },\n  { value: 31, label: '31' },\n];\n\nconst LAST_DAY_OPTION: MonthdaysOption = { value: 'last', label: '最后一个自然日' };\n\nconst DAYS_PER_ROW = 7;\n\nexport interface MonthdaysSelectProps {\n  value?: repeatByMonthDetail[];\n  onChange?: (value: repeatByMonthDetail[]) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nconst CloseIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nconst DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nexport const MonthdaysSelect = ({\n  value = [],\n  onChange,\n  placeholder = '请选择日期',\n  disabled = false,\n  className,\n}: MonthdaysSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [isHovering, setIsHovering] = useState(false);\n  const [draftValue, setDraftValue] = useState<repeatByMonthDetail[]>(value);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-weekdays-select-portal');\n\n  const displayValue = open ? draftValue : value;\n\n  const numericSelected = useMemo(\n    () => displayValue.filter((v) => v !== 'last') as number[],\n    [displayValue]\n  );\n  const hasLast = useMemo(\n    () => displayValue.includes('last'),\n    [displayValue]\n  );\n\n  const allDaysSelected = numericSelected.length === 31;\n\n  const handleToggleDay = useCallback(\n    (day: repeatByMonthDetail) => {\n      setDraftValue((prev) =>\n        prev.includes(day) ? prev.filter((v) => v !== day) : [...prev, day]\n      );\n    },\n    []\n  );\n\n  const handleSelectAllDays = useCallback(() => {\n    setDraftValue((prev) => {\n      const prevNumeric = prev.filter((v) => v !== 'last') as number[];\n      if (prevNumeric.length === 31) {\n        return prev.filter((v) => v === 'last');\n      }\n      const allDays = MonthdaysOptions.map((o) => o.value);\n      const lastPart = prev.includes('last') ? (['last'] as const) : [];\n      return [...allDays, ...lastPart];\n    });\n  }, []);\n\n  const handleSelectToday = useCallback(() => {\n    const today = new Date().getDate();\n    setDraftValue((prev) => {\n      if (prev.includes(today as repeatByMonthDetail)) return prev;\n      return [...prev, today as repeatByMonthDetail];\n    });\n  }, []);\n\n  const handleToggleLast = useCallback(() => {\n    setDraftValue((prev) =>\n      prev.includes('last') ? prev.filter((v) => v !== 'last') : [...prev, 'last']\n    );\n  }, []);\n\n  const handleConfirm = useCallback(() => {\n    onChange?.(draftValue);\n    setOpen(false);\n  }, [draftValue, onChange]);\n\n  const handleOpenChange = useCallback(\n    (nextOpen: boolean) => {\n      if (disabled) return;\n      if (nextOpen) {\n        setDraftValue([...value]);\n      }\n      setOpen(nextOpen);\n    },\n    [disabled, value]\n  );\n\n  const handleClearAll = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.([]);\n    },\n    [onChange]\n  );\n\n  const handleRemove = useCallback(\n    (day: repeatByMonthDetail, e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.(value.filter((v) => v !== day));\n    },\n    [value, onChange]\n  );\n\n  const hasSelection = value.length > 0;\n  const showClear = hasSelection && isHovering;\n\n  const displayLabel = useCallback((v: repeatByMonthDetail) => {\n    if (v === 'last') return '最后一天';\n    return `${v}日`;\n  }, []);\n\n  const dayRows = useMemo(() => {\n    const rows: MonthdaysOption[][] = [];\n    for (let i = 0; i < MonthdaysOptions.length; i += DAYS_PER_ROW) {\n      rows.push(MonthdaysOptions.slice(i, i + DAYS_PER_ROW));\n    }\n    return rows;\n  }, []);\n\n  return (\n    <div className={cn('relative', className)}>\n      <Popover open={open} onOpenChange={handleOpenChange}>\n        <PopoverTrigger asChild>\n          <button\n            type=\"button\"\n            ref={setTriggerRef}\n            disabled={disabled}\n            onMouseEnter={() => setIsHovering(true)}\n            onMouseLeave={() => setIsHovering(false)}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] gap-2.5',\n              'bg-white border border-[#E0E0E0] rounded-[4px]',\n              'py-[7px]',\n              hasSelection ? 'pl-[4px] pr-[10px]' : 'px-[10px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open && 'border-[#0265FF]',\n              transCls\n            )}\n          >\n            {hasSelection ? (\n              <>\n                <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\">\n                  {value.map((day) => (\n                    <span\n                      key={day}\n                      className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0\"\n                    >\n                      <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                        {displayLabel(day)}\n                      </span>\n                      <span\n                        className=\"cursor-pointer flex items-center shrink-0\"\n                        onClick={(e) => handleRemove(day, e)}\n                      >\n                        <CloseIcon />\n                      </span>\n                    </span>\n                  ))}\n                </div>\n                {showClear ? (\n                  <span\n                    className=\"cursor-pointer flex items-center shrink-0\"\n                    onClick={handleClearAll}\n                  >\n                    <ClearAllIcon />\n                  </span>\n                ) : (\n                  <DropdownChevron open={open} />\n                )}\n              </>\n            ) : (\n              <>\n                <span className=\"text-[14px] text-[#999999] leading-[normal] truncate\">\n                  {placeholder}\n                </span>\n                <DropdownChevron open={open} />\n              </>\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[8px] shadow-[0px_6px_16px_rgba(0,0,0,0.06)] p-0\"\n          style={{ width: '310px' }}\n        >\n          <Tabs defaultValue=\"specific\">\n            <div className=\"px-[4px] pt-[4px] flex justify-center\">\n              <TabsList>\n                <TabsTrigger value=\"specific\">指定日期</TabsTrigger>\n                <TabsTrigger value=\"relative\">相对日期</TabsTrigger>\n              </TabsList>\n            </div>\n\n            <TabsContent value=\"specific\" className=\"mt-0\">\n              <div className=\"px-[8px] pt-[8px] pb-[4px]\">\n                <button\n                  type=\"button\"\n                  onClick={handleSelectAllDays}\n                  className={cn(\n                    'flex items-center gap-[6px] w-full h-[34px] px-[10px] py-[7px] rounded-[4px] text-left mb-[4px]',\n                    'hover:bg-[#EFF0F6]',\n                    transCls\n                  )}\n                >\n                  <SquareChecker\n                    checked={allDaysSelected}\n                    intermediate={numericSelected.length > 0 && !allDaysSelected}\n                    onCheckedChange={handleSelectAllDays}\n                    className=\"shrink-0\"\n                  />\n                  <span className=\"text-[14px] font-bold text-[#0265FF] leading-[normal]\">\n                    全选\n                  </span>\n                </button>\n                <div className=\"flex flex-col gap-[2px]\">\n                  {dayRows.map((row, rowIdx) => (\n                    <div key={rowIdx} className=\"flex gap-[4px]\">\n                      {row.map((option) => {\n                        const isSelected = numericSelected.includes(option.value as number);\n                        return (\n                          <button\n                            key={option.value}\n                            type=\"button\"\n                            onClick={() => handleToggleDay(option.value)}\n                            className={cn(\n                              'flex items-center justify-center w-[36px] h-[30px] rounded-[4px]',\n                              'text-[14px] leading-[normal]',\n                              'transition-all duration-200 ease-out',\n                              isSelected\n                                ? 'bg-[#0265FF] text-white'\n                                : 'text-[#030303] hover:bg-[#EFF0F6]'\n                            )}\n                          >\n                            {option.label}\n                          </button>\n                        );\n                      })}\n                    </div>\n                  ))}\n                </div>\n              </div>\n              <div className=\"flex items-center justify-between px-[12px] py-[8px] border-t border-[#E0E0E0] mt-[4px]\">\n                <button\n                  type=\"button\"\n                  onClick={handleSelectToday}\n                  className={cn(\n                    'h-[28px] px-[12px] rounded-[4px] text-[14px]',\n                    'text-[#0265FF] hover:bg-[#EFF0F6]',\n                    transCls\n                  )}\n                >\n                  今天\n                </button>\n                <button\n                  type=\"button\"\n                  onClick={handleConfirm}\n                  className={cn(\n                    'h-[28px] px-[16px] rounded-[4px] text-[14px]',\n                    'bg-[#0265FF] text-white hover:bg-[#0255DD]',\n                    transCls\n                  )}\n                >\n                  确认\n                </button>\n              </div>\n            </TabsContent>\n\n            <TabsContent value=\"relative\" className=\"mt-0\">\n              <div className=\"px-[8px] pt-[8px] pb-[4px]\">\n                <button\n                  type=\"button\"\n                  onClick={handleToggleLast}\n                  className={cn(\n                    'flex items-center gap-[6px] w-full h-[34px] px-[10px] py-[7px] rounded-[4px] text-left',\n                    'hover:bg-[#EFF0F6]',\n                    transCls\n                  )}\n                >\n                  <SquareChecker\n                    checked={hasLast}\n                    onCheckedChange={handleToggleLast}\n                    className=\"shrink-0\"\n                  />\n                  <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                    {LAST_DAY_OPTION.label}\n                  </span>\n                </button>\n              </div>\n              <div className=\"flex items-center justify-center px-[12px] py-[8px] border-t border-[#E0E0E0] mt-[4px]\">\n                <button\n                  type=\"button\"\n                  onClick={handleConfirm}\n                  className={cn(\n                    'h-[28px] px-[16px] rounded-[4px] text-[14px]',\n                    'bg-[#0265FF] text-white hover:bg-[#0255DD]',\n                    transCls\n                  )}\n                >\n                  确认\n                </button>\n              </div>\n            </TabsContent>\n          </Tabs>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import type { repeatByType } from '@baishuyun/types';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../../ui/select';\n\nexport interface RepeatByTypeOption {\n  value: repeatByType;\n  label: string;\n}\n\nexport const RepeatByTypeOptions: RepeatByTypeOption[] = [\n  { value: 'week', label: '按周重复' },\n  { value: 'month', label: '按月重复' },\n];\n\nexport interface RepeatByTypeSelectProps {\n  value?: repeatByType;\n  onChange?: (value: repeatByType) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const RepeatByTypeSelect = ({\n  value,\n  onChange,\n  placeholder = '请选择重复方式',\n  disabled = false,\n  className,\n}: RepeatByTypeSelectProps) => {\n  return (\n    <Select\n      value={value}\n      onValueChange={(v) => onChange?.(v as repeatByType)}\n      disabled={disabled}\n    >\n      <SelectTrigger className={className}>\n        <SelectValue placeholder={placeholder} />\n      </SelectTrigger>\n      <SelectContent>\n        {RepeatByTypeOptions.map((option) => (\n          <SelectItem key={option.value} value={option.value}>\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n","import { useCallback } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { RepeatPreferenceTypeSelect } from '../repeat-preference-type-select';\nimport { RepeatByTypeSelect } from '../repeat-by-type-select';\nimport { WeekdaysSelect } from '../weekdays-select';\nimport { MonthdaysSelect } from '../monthdays-select';\nimport type {\n  IRepeatPreference,\n  customRepeatPreference,\n  repeatPreferenceType,\n  repeatByType,\n  repeatByWeekDetail,\n  repeatByMonthDetail,\n} from '@baishuyun/types';\n\nexport interface RepeatPreferenceSelectProps {\n  value?: IRepeatPreference;\n  onChange?: (value: IRepeatPreference) => void;\n  disabled?: boolean;\n  className?: string;\n}\n\nconst NUMBER_INPUT_CLASSES = cn(\n  'h-[34px] px-[10px] py-[7px] rounded-[4px] bg-white border border-[#e0e0e0]',\n  'text-[14px] text-[#030303] placeholder:text-[#999999]',\n  'focus:outline-none focus:border-[#0265FF]',\n  'disabled:bg-[#EFF0F6] disabled:cursor-not-allowed',\n  '[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n  'w-[60px]',\n);\n\nfunction defaultCustomRepeatPreference(): customRepeatPreference {\n  return { repeatBy: 'week', interval: 1, repeatDetailDates: [] };\n}\n\nexport function RepeatPreferenceSelect({\n  value,\n  onChange,\n  disabled = false,\n  className,\n}: RepeatPreferenceSelectProps) {\n  const selectedType = value?.type;\n  const customPref = value?.customRepeatPreference;\n  const repeatBy = customPref?.repeatBy;\n\n  const handleTypeChange = useCallback(\n    (type: repeatPreferenceType) => {\n      if (type === 'custom') {\n        onChange?.({\n          type: 'custom',\n          customRepeatPreference: customPref ?? defaultCustomRepeatPreference(),\n        });\n      } else {\n        onChange?.({ type });\n      }\n    },\n    [onChange, customPref],\n  );\n\n  const handleRepeatByChange = useCallback(\n    (newRepeatBy: repeatByType) => {\n      if (!customPref) return;\n      onChange?.({\n        type: 'custom',\n        customRepeatPreference: {\n          ...customPref,\n          repeatBy: newRepeatBy,\n          repeatDetailDates: [],\n        },\n      });\n    },\n    [onChange, customPref],\n  );\n\n  const handleIntervalChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      if (!customPref) return;\n      const raw = parseInt(e.target.value, 10);\n      const interval = isNaN(raw) ? 1 : Math.max(1, raw);\n      onChange?.({\n        type: 'custom',\n        customRepeatPreference: { ...customPref, interval },\n      });\n    },\n    [onChange, customPref],\n  );\n\n  const handleWeekdaysChange = useCallback(\n    (days: repeatByWeekDetail[]) => {\n      if (!customPref) return;\n      onChange?.({\n        type: 'custom',\n        customRepeatPreference: { ...customPref, repeatDetailDates: days },\n      });\n    },\n    [onChange, customPref],\n  );\n\n  const handleMonthdaysChange = useCallback(\n    (days: repeatByMonthDetail[]) => {\n      if (!customPref) return;\n      onChange?.({\n        type: 'custom',\n        customRepeatPreference: { ...customPref, repeatDetailDates: days },\n      });\n    },\n    [onChange, customPref],\n  );\n\n  const weekdaysValue = (customPref?.repeatDetailDates ?? []) as repeatByWeekDetail[];\n  const monthdaysValue = (customPref?.repeatDetailDates ?? []) as repeatByMonthDetail[];\n\n  return (\n    <div className={cn('flex flex-col gap-[10px]', className)}>\n      <RepeatPreferenceTypeSelect\n        value={selectedType}\n        onChange={handleTypeChange}\n        disabled={disabled}\n      />\n\n      {selectedType === 'custom' && (\n        <div className=\"flex items-start gap-[10px] w-full\">\n          <RepeatByTypeSelect\n            className=\"w-[200px] shrink-0\"\n            value={repeatBy}\n            onChange={handleRepeatByChange}\n            disabled={disabled}\n          />\n          <span className=\"text-[14px] text-[#030303] leading-[34px] shrink-0\">每</span>\n          <input\n            type=\"number\"\n            value={customPref?.interval ?? 1}\n            onChange={handleIntervalChange}\n            disabled={disabled}\n            min={1}\n            step={1}\n            className={NUMBER_INPUT_CLASSES}\n          />\n          <span className=\"text-[14px] text-[#030303] leading-[34px] shrink-0\">\n            {repeatBy === 'month' ? '月' : '周'}\n          </span>\n          {repeatBy === 'week' && (\n            <WeekdaysSelect\n              className=\"flex-1 min-w-0\"\n              value={weekdaysValue}\n              onChange={handleWeekdaysChange}\n              disabled={disabled}\n            />\n          )}\n          {repeatBy === 'month' && (\n            <MonthdaysSelect\n              className=\"flex-1 min-w-0\"\n              value={monthdaysValue}\n              onChange={handleMonthdaysChange}\n              disabled={disabled}\n            />\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FormDividerProps {\n  children?: ReactNode;\n  className?: string;\n}\n\nconst DecorativeLine = ({ flipped }: { flipped?: boolean }) => (\n  <svg\n    width=\"40\"\n    height=\"4\"\n    viewBox=\"0 0 40 4\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    style={{ display: 'block', flexShrink: 0 }}\n  >\n    {flipped ? (\n      <>\n        <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#D9D9D9\" />\n        <path d=\"M10 2H40\" stroke=\"#E0E0E0\" />\n      </>\n    ) : (\n      <>\n        <path d=\"M0 2H30\" stroke=\"#E0E0E0\" />\n        <circle cx=\"38\" cy=\"2\" r=\"2\" fill=\"#D9D9D9\" />\n      </>\n    )}\n  </svg>\n);\n\nexport const FormDivider = ({ children, className }: FormDividerProps) => {\n  return (\n    <div className={cn('flex items-center justify-center gap-[10px]', className)}>\n      <DecorativeLine />\n      {children != null && (\n        <span className=\"text-[#999] text-[14px] whitespace-nowrap leading-[normal] shrink-0\">\n          {children}\n        </span>\n      )}\n      <DecorativeLine flipped />\n    </div>\n  );\n};\n","import { useState, useCallback, useMemo } from 'react';\nimport type { relationalOperator } from '@baishuyun/types';\nimport { OPERATOR_LABEL_MAP } from '@baishuyun/ai-feat-utils';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\n\nconst ALL_OPTIONS: Array<{ value: relationalOperator; label: string }> = [\n  { value: 'eq', label: OPERATOR_LABEL_MAP.eq },\n  { value: 'neq', label: OPERATOR_LABEL_MAP.neq },\n  { value: 'gt', label: OPERATOR_LABEL_MAP.gt },\n  { value: 'lt', label: OPERATOR_LABEL_MAP.lt },\n  { value: 'gte', label: OPERATOR_LABEL_MAP.gte },\n  { value: 'lte', label: OPERATOR_LABEL_MAP.lte },\n  { value: 'contains', label: OPERATOR_LABEL_MAP.contains },\n  { value: 'not_contains', label: OPERATOR_LABEL_MAP.not_contains },\n  { value: 'in', label: OPERATOR_LABEL_MAP.in },\n  { value: 'nin', label: OPERATOR_LABEL_MAP.nin },\n  { value: 'all', label: OPERATOR_LABEL_MAP.all },\n  { value: 'empty', label: OPERATOR_LABEL_MAP.empty },\n  { value: 'not_empty', label: OPERATOR_LABEL_MAP.not_empty },\n  { value: 'range', label: OPERATOR_LABEL_MAP.range },\n];\n\nexport interface IRelationalOperatorSelectProps {\n  value?: relationalOperator;\n  defaultValue?: relationalOperator;\n  onChange?: (value: relationalOperator) => void;\n  operators?: relationalOperator[];\n  borderless?: boolean;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const RelationalOperatorSelect = ({\n  value: controlledValue,\n  defaultValue = 'eq',\n  onChange,\n  operators,\n  borderless = false,\n  disabled = false,\n  className,\n}: IRelationalOperatorSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [internalValue, setInternalValue] = useState<relationalOperator>(defaultValue);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  const options = useMemo(() => {\n    if (!operators || operators.length === 0) return ALL_OPTIONS;\n    const set = new Set(operators);\n    return ALL_OPTIONS.filter((o) => set.has(o.value));\n  }, [operators]);\n\n  const resolvedValue = (() => {\n    const v = controlledValue !== undefined ? controlledValue : internalValue;\n    if (options.length > 0 && !options.find((o) => o.value === v)) {\n      return options[0].value;\n    }\n    return v;\n  })();\n\n  const selectedLabel = options.find((o) => o.value === resolvedValue)?.label ?? '';\n\n  const handleSelect = useCallback(\n    (v: relationalOperator) => {\n      if (controlledValue === undefined) setInternalValue(v);\n      onChange?.(v);\n      setOpen(false);\n    },\n    [controlledValue, onChange],\n  );\n\n  const setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>(\n        '[data-bs-relational-operator-select-portal]',\n      );\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-relational-operator-select-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  return (\n    <div className={cn('relative inline-flex', className)}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              'min-w-[82px] px-[10px] w-full',\n              'text-left cursor-pointer',\n              borderless\n                ? 'h-[34px] bg-transparent'\n                : cn(\n                    'h-[31px] bg-white border rounded-[4px]',\n                    open\n                      ? 'border-[#0265FF]'\n                      : 'border-[#E0E0E0] hover:border-[#0265FF]',\n                  ),\n              disabled &&\n                'opacity-50 cursor-not-allowed',\n              !disabled && !borderless && 'hover:border-[#0265FF]',\n              transCls,\n            )}\n          >\n            <span className=\"text-[14px] leading-[normal] text-[#030303] truncate\">\n              {selectedLabel}\n            </span>\n            <span\n              className={cn(\n                'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n                transCls,\n                open && 'rotate-180',\n              )}\n            >\n              <svg\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n              >\n                <path\n                  d=\"M4 6L8 10L12 6\"\n                  stroke=\"#666666\"\n                  strokeWidth=\"1.2\"\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                />\n              </svg>\n            </span>\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[4px] min-w-[82px]\"\n        >\n          <div className=\"flex flex-col gap-0 max-h-[320px] overflow-y-auto\">\n            {options.map((opt) => (\n              <button\n                key={opt.value}\n                type=\"button\"\n                onClick={() => handleSelect(opt.value)}\n                className={cn(\n                  'h-[34px] px-[10px] rounded-[4px] text-left text-[14px] leading-[normal] whitespace-nowrap shrink-0',\n                  resolvedValue === opt.value\n                    ? 'bg-[#F0F6FF] text-[#0265FF]'\n                    : 'text-[#030303] hover:bg-[#EFF0F6]',\n                  transCls,\n                )}\n              >\n                {opt.label}\n              </button>\n            ))}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import { useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { CheckerInBoxIcon } from './bs-icons';\n\nexport interface CircleCheckerProps {\n  defaultChecked?: boolean;\n  checked?: boolean;\n  onCheckedChange?: (checked: boolean) => void;\n  children?: React.ReactNode;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const CircleChecker = ({\n  defaultChecked = false,\n  checked: controlledChecked,\n  onCheckedChange,\n  children,\n  disabled = false,\n  className,\n}: CircleCheckerProps) => {\n  const [internalChecked, setInternalChecked] = useState(defaultChecked);\n\n  const isControlled = controlledChecked !== undefined;\n  const isChecked = isControlled ? controlledChecked : internalChecked;\n\n  const handleClick = () => {\n    if (disabled) return;\n\n    const newChecked = !isChecked;\n    if (!isControlled) {\n      setInternalChecked(newChecked);\n    }\n    onCheckedChange?.(newChecked);\n  };\n\n  return (\n    <button\n      type=\"button\"\n      role=\"checkbox\"\n      aria-checked={isChecked}\n      disabled={disabled}\n      onClick={handleClick}\n      className={cn(\n        'inline-flex items-center gap-[6px] cursor-pointer select-none',\n        'text-[#121111] text-[14px]',\n        disabled && 'cursor-not-allowed opacity-50',\n        className\n      )}\n    >\n      <span\n        className={cn(\n          'inline-flex items-center justify-center w-4 h-4 rounded-full transition-colors duration-200 box-border border',\n          isChecked ? 'bg-[#2E60FF] border-transparent' : 'bg-white border-[#e0e0e0]'\n        )}\n      >\n        {isChecked && (\n          <span className=\"text-white\">\n            <CheckerInBoxIcon />\n          </span>\n        )}\n      </span>\n      {children && <span className=\"text-sm\">{children}</span>}\n    </button>\n  );\n};\n","import { ReactNode, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { AnalysisIcon, ChevronIcon } from './bs-icons';\n\nexport interface CollapsibleTxtMsgProps {\n  title: string;\n  content?: string;\n  icon?: ReactNode;\n  defaultOpen?: boolean;\n  children?: ReactNode;\n\n  disableExpand?: boolean;\n}\n\nexport const CollapsibleTxtMsg = ({\n  title,\n  content,\n  icon,\n  disableExpand,\n  children,\n  defaultOpen,\n}: CollapsibleTxtMsgProps) => {\n  const [isOpen, setIsOpen] = useState(defaultOpen);\n\n  return (\n    <div className=\"bg-[#fafafa] border border-[#e0e0e0] border-solid flex flex-col gap-2.5 p-2.5 rounded-lg w-full\">\n      <div\n        className={cn('flex items-center justify-between w-full', {\n          'cursor-pointer': !disableExpand,\n        })}\n        onClick={() => {\n          if (disableExpand) return;\n\n          setIsOpen(!isOpen);\n        }}\n      >\n        <div className=\"flex gap-2.5 items-center\">\n          <div className=\"w-4 h-4 shrink-0 flex items-center\">{icon || <AnalysisIcon />}</div>\n          <p className=\"text-[#666] text-[14px] leading-normal\">{title}</p>\n        </div>\n        <button\n          onClick={() => {\n            if (disableExpand) return;\n            setIsOpen(!isOpen);\n          }}\n          className={cn(\n            'flex items-center justify-center w-5 h-5 rounded-[4px] cursor-pointer hover:bg-[#EFF0F6]',\n            transCls,\n            {\n              'pointer-events-none opacity-0': disableExpand,\n            }\n          )}\n        >\n          <ChevronIcon isOpen={isOpen} />\n        </button>\n      </div>\n      {isOpen && !disableExpand && (\n        <div className=\"text-[#121111] text-[14px] word-wrap\">{content || children}</div>\n      )}\n    </div>\n  );\n};\n","import {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from './ui/dialog';\nimport { QuestionIcon } from './bs-icons';\nimport { cn } from '../lib/utils';\nimport { BaseButton } from './base-button';\n\nexport interface ConfirmDialogProps {\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  title: string;\n  description?: string;\n  /** Text for the left link button */\n  linkText?: string;\n  /** Callback when link button is clicked */\n  onLinkClick?: () => void;\n  /** Text for the cancel button */\n  cancelText?: string;\n  /** Callback when cancel button is clicked */\n  onCancel?: () => void;\n  /** Text for the confirm button */\n  confirmText?: string;\n  /** Callback when confirm button is clicked */\n  onConfirm?: () => void;\n  /** Whether to show the link button */\n  showLink?: boolean;\n  /** Whether to show the cancel button */\n  showCancel?: boolean;\n  /** Container element for the dialog portal */\n  container?: HTMLElement;\n}\n\nexport function ConfirmDialog({\n  open,\n  onOpenChange,\n  title,\n  description,\n  linkText = '留在此页',\n  onLinkClick,\n  cancelText = '不保存',\n  onCancel,\n  confirmText = '保存并继续',\n  onConfirm,\n  container,\n  showLink = true,\n  showCancel = true,\n}: ConfirmDialogProps) {\n  const btnStyle = {\n    borderRadius: 4,\n    padding: '6px 20px',\n  };\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent\n        container={container}\n        className={cn(\n          'w-[480px] max-w-[480px] p-0 gap-0 rounded-[10px] border-none',\n          'shadow-[0px_0px_10px_0px_rgba(0,0,0,0.04)]',\n          '[&>button]:hidden'\n        )}\n      >\n        <DialogHeader className=\"flex flex-row items-start gap-[10px] p-9 pb-0\">\n          <div className=\"size-[30px] shrink-0 text-[#0265FF]\">\n            <QuestionIcon />\n          </div>\n          <div className=\"flex flex-col gap-2\">\n            <DialogTitle className=\"text-[16px] font-[700] text-[#030303] leading-normal\">\n              {title}\n            </DialogTitle>\n            {description && (\n              <DialogDescription className=\"text-[14px] text-[#666] leading-normal\">\n                {description}\n              </DialogDescription>\n            )}\n          </div>\n        </DialogHeader>\n\n        <DialogFooter className=\"flex flex-row items-center !justify-between p-9 pt-6\">\n          {showLink ? (\n            <button\n              type=\"button\"\n              className=\"text-[14px] text-[#0265ff] hover:text-[#0265ff]/80 bg-transparent border-none cursor-pointer\"\n              onClick={onLinkClick || (() => {\n                console.log('Link clicked');\n\n                onOpenChange?.(false);\n              })}\n            >\n              {linkText}\n            </button>\n          ) : (\n            <div />\n          )}\n\n          <div className=\"flex items-center gap-3\">\n            {showCancel && (\n              <BaseButton\n                className=\"hover:text-[#121111]\"\n                onClick={onCancel}\n              >\n                {cancelText}\n              </BaseButton>\n              // <button\n              //   type=\"button\"\n              //   onClick={onCancel}\n              //   style={btnStyle}\n              //   className={cn(\n              //     'h-8 px-5 py-1.5 rounded border border-[#e0e0e0]',\n              //     'text-[14px] text-[#030303] bg-white',\n              //     'hover:bg-gray-50 cursor-pointer'\n              //   )}\n              // >\n              //   {cancelText}\n              // </button>\n            )}\n            <button\n              type=\"button\"\n              onClick={onConfirm}\n              style={btnStyle}\n              className={cn(\n                // 'h-8 px-5 py-1.5 rounded',\n                'text-[14px] text-white bg-[#0265ff]',\n                'hover:bg-[#0265ff]/80 cursor-pointer border-none'\n              )}\n            >\n              {confirmText}\n            </button>\n          </div>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n}\n","import { useState, useCallback, useMemo } from 'react';\nimport { IFieldDesignInfo } from '@baishuyun/types';\nimport { cn } from '../lib/utils';\nimport { ChevronIcon } from './bs-icons';\n\ninterface FieldsDesignInfoTableProps {\n  fields: IFieldDesignInfo[];\n}\n\n/** Group fields into top-level items and subform groups */\nfunction groupFields(fields: IFieldDesignInfo[]) {\n  const groups: Array<\n    | { kind: 'field'; field: IFieldDesignInfo }\n    | { kind: 'subform'; parent: IFieldDesignInfo; children: IFieldDesignInfo[] }\n  > = [];\n\n  let i = 0;\n  while (i < fields.length) {\n    const f = fields[i];\n    if (f.isSubForm) {\n      const children: IFieldDesignInfo[] = [];\n      let j = i + 1;\n      while (\n        j < fields.length &&\n        fields[j].isFieldInSubForm &&\n        fields[j].parentFormName === f.fieldName\n      ) {\n        children.push(fields[j]);\n        j++;\n      }\n      groups.push({ kind: 'subform', parent: f, children });\n      i = j;\n    } else {\n      groups.push({ kind: 'field', field: f });\n      i++;\n    }\n  }\n  return groups;\n}\n\nconst cellCls = 'flex items-center px-1.5 py-2.5 text-xs leading-normal';\n\nfunction FieldRow({\n  field,\n  isSubFormChild = false,\n}: {\n  field: IFieldDesignInfo;\n  isSubFormChild?: boolean;\n}) {\n  return (\n    <div className=\"flex items-center w-full\">\n      {/* 名称 */}\n      <div className={cn(cellCls, 'w-20 shrink-0 min-h-[34px]')}>\n        {isSubFormChild && (\n          <span className=\"inline-flex items-center justify-center shrink-0 w-5 h-5 opacity-0\">\n            <ChevronIcon />\n          </span>\n        )}\n        <span>{field.fieldName}</span>\n      </div>\n      {/* 类型 */}\n      <div className={cn(cellCls, 'w-[72px] shrink-0 min-h-[34px]')}>\n        {field.type}\n      </div>\n      {/* 必填 */}\n      <div className={cn(cellCls, 'w-9 shrink-0 min-h-[34px]')}>\n        {field.required ? '是' : '否'}\n      </div>\n      {/* 说明 */}\n      <div className={cn(cellCls, 'flex-1 min-w-0 min-h-[34px]')}>\n        <span className=\"break-words min-w-0\">{field.description}</span>\n      </div>\n    </div>\n  );\n}\n\nfunction SubFormGroup({\n  parent,\n  children,\n}: {\n  parent: IFieldDesignInfo;\n  children: IFieldDesignInfo[];\n}) {\n  const [isOpen, setIsOpen] = useState(true);\n  const toggle = useCallback(() => setIsOpen((v) => !v), []);\n\n  return (\n    <>\n      {/* 子表单 parent row */}\n      <div className=\"flex items-center w-full\">\n        {/* 名称 */}\n        <div className={cn(cellCls, 'w-20 shrink-0 min-h-[34px]')}>\n          <button\n            type=\"button\"\n            onClick={toggle}\n            className=\"inline-flex items-center justify-center shrink-0 w-5 h-5 rounded cursor-pointer text-[#666] relative -left-[2px]\"\n          >\n            <ChevronIcon isOpen={isOpen} />\n          </button>\n          <span>{parent.fieldName}</span>\n        </div>\n        {/* 类型 */}\n        <div className={cn(cellCls, 'w-[72px] shrink-0 min-h-[34px] ')}>\n          {parent.type}\n        </div>\n        {/* 必填 */}\n        <div className={cn(cellCls, 'w-9 shrink-0 min-h-[34px]')}>\n          {parent.required ? '是' : '否'}\n        </div>\n        {/* 说明 */}\n        <div className={cn(cellCls, 'flex-1 min-w-0 min-h-[34px]')}>\n          <span className=\"break-words min-w-0\">{parent.description}</span>\n        </div>\n      </div>\n\n      {/* 子表单 children */}\n      {isOpen && children.map((child, idx) => <FieldRow key={idx} field={child} isSubFormChild />)}\n    </>\n  );\n}\n\nexport function FieldsDesignInfoTable({ fields }: FieldsDesignInfoTableProps) {\n  const groups = useMemo(() => groupFields(fields), [fields]);\n\n  return (\n    <div className=\"flex flex-col items-start w-full bg-white rounded-[10px] overflow-hidden text-black my-[10px] border border-[#E0E0E0]\">\n      {/* 表头 */}\n      <div className=\"flex items-center w-full shrink-0 bg-[#E5E6EB] rounded-t-[10px] border-b border-[#E0E0E0]\">\n        <div className={cn(cellCls, 'w-20 shrink-0 h-[34px] font-bold')}>\n          名称\n        </div>\n        <div className={cn(cellCls, 'w-[72px] shrink-0 h-[34px] font-bold')}>\n          类型\n        </div>\n        <div\n          className={cn(\n            cellCls,\n            'w-9 shrink-0 h-[34px] font-bold justify-center'\n          )}\n        >\n          必填\n        </div>\n        <div className={cn(cellCls, 'flex-1 min-w-0 h-[34px] font-bold')}>\n          说明\n        </div>\n      </div>\n\n      {/* 表体 */}\n      <div className=\"flex flex-col items-start w-full\">\n        {groups.map((g, idx) =>\n          g.kind === 'field' ? (\n            <FieldRow key={idx} field={g.field} />\n          ) : (\n            <SubFormGroup key={idx} parent={g.parent} children={g.children} />\n          )\n        )}\n      </div>\n    </div>\n  );\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { BorderColorAnimation } from './border-color-animation';\nimport { MagicIcon } from './bs-icons';\n\nexport const DotAnimation = () => {\n  return (\n    <>\n      <div className=\"flex gap-[2px] flex-shrink-0 relative -left-[4px] top-[3px]\">\n        <div\n          className=\"w-[2px] h-[2px] rounded-full bg-[#0265FF] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.4s ease-in-out infinite',\n            animationDelay: '0s',\n            marginRight: '2px',\n          }}\n        />\n        <div\n          className=\"w-[2px] h-[2px] rounded-full bg-[#0265FF] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.4s ease-in-out infinite',\n            animationDelay: '0.2s',\n            marginRight: '2px',\n          }}\n        />\n        <div\n          className=\"w-[2px] h-[2px] rounded-full bg-[#0265FF] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.4s ease-in-out infinite',\n            animationDelay: '0.4s',\n          }}\n        />\n      </div>\n      <style>{`\n        @keyframes pulse {\n          0%, 60%, 100% {\n            opacity: 0.3;\n            transform: scale(1);\n          }\n          30% {\n            opacity: 1;\n            transform: scale(1.2);\n          }\n        }\n      `}</style>\n    </>\n  );\n};\n\nexport const FieldsGeneratingIndicator = ({\n  children,\n  loading = true,\n}: {\n  children?: React.ReactNode;\n  loading?: boolean;\n}) => {\n  const paddingAndGap = 16 * 2 + 6; // padding + gap\n  const animationWidth = loading ? 14 : 0;\n  const magicIconWidth = 16;\n  const textRef = useRef<HTMLSpanElement>(null);\n  const [textWidth, setWidth] = useState(0);\n\n  // get text width + padding + gap\n  const fullWidth = textWidth + paddingAndGap + animationWidth + magicIconWidth;\n\n  // when text changes, update width\n  useLayoutEffect(() => {\n    if (textRef.current) {\n      const rect = textRef.current.getBoundingClientRect();\n      setWidth(rect.width);\n    }\n  }, [children]);\n\n  // when text not change, get init width\n  useEffect(() => {\n    if (textRef.current) {\n      const rect = textRef.current.getBoundingClientRect();\n      console.log('rect.width', rect.width);\n      setWidth(rect.width);\n    }\n  }, []);\n\n  return (\n    <BorderColorAnimation borderRadius={100} width={fullWidth} height={34} borderWidth={1}>\n      <div className=\"flex items-center gap-[6px] h-[31px] ml-[16px]\">\n        <div className=\"shrink-0\">\n          <MagicIcon />\n        </div>\n        <span className=\"text-[14px] text-[#0265FF] shrink-0\" ref={textRef}>\n          {children || '字段生成中'}\n        </span>\n        {loading && <DotAnimation />}\n      </div>\n    </BorderColorAnimation>\n  );\n};\n","import { HTMLAttributes } from 'react';\nimport { cn } from '../lib/utils';\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement> & {\n  compact?: boolean;\n};\n\nexport const MessageContent = ({ children, className, ...props }: MessageContentProps) => (\n  <div\n    className={cn(\n      'flex flex-col gap-2.5 overflow-hidden p-0 text-foreground text-[14px]',\n      'group-[.is-user]:bg-primary group-[.is-user]:text-primary-foreground',\n      'group-[.is-assistant]:bg-secondary group-[.is-assistant]:text-foreground',\n      'is-user:dark overflow-visible',\n      className\n    )}\n    {...props}\n  >\n    {children}\n  </div>\n);\n","import { ReactNode } from 'react';\nimport { MessageContent } from './message-content';\nimport { cn } from '../lib/utils';\n\nexport const FakeBotMessage = ({\n  children,\n  headless,\n  className,\n}: {\n  children: ReactNode;\n  headless?: boolean;\n  offset?: boolean;\n  className?: string;\n}) => {\n  if (headless) {\n    return (\n      <div>\n        <MessageContent\n          className={cn(\n            'w-fit wrap-break-words rounded-2 bg-transparent px-0 py-0 text-left',\n            className\n          )}\n          data-testid=\"message-content\"\n        >\n          {children}\n        </MessageContent>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn('group/message w-full')}\n      data-role=\"assistant\"\n      data-testid={`message-assistant`}\n    >\n      <div className=\"flex w-full flex-col items-start justify-start gap-2.5\">\n        <div className=\"flex flex-col min-w-0 grow gap-2.5 w-full\">\n          <MessageContent\n            className=\"w-full wrap-break-words rounded-2 bg-transparent px-0 py-0 text-left\"\n            data-testid=\"message-content\"\n          >\n            {children}\n          </MessageContent>\n        </div>\n      </div>\n    </div>\n  );\n};\n","export const LinearGradientColorBgAnimation = ({ \n  children,\n  width,\n  height,\n  style,\n  childrenContainerStyle,\n}: { \n  children?: React.ReactNode;\n  width?: string | number;\n  height?: string | number;\n  style?: React.CSSProperties;\n  childrenContainerStyle?: React.CSSProperties;\n}) => {\n  return (\n    <div\n      style={{\n        position: 'relative',\n        width: width ?? '100%',\n        height: height ?? '100%',\n        overflow: 'hidden',\n        borderRadius: '10px 10px 0 0',\n        ...style,\n      }}\n    >\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          top: 0,\n          left: 0,\n          background: '#F4FFFC',\n        }}\n      />\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          top: 0,\n          left: 0,\n          background: 'radial-gradient(circle at 25% -15%, #EEFFCE 0%, transparent 55%)',\n          filter: 'blur(70px)',\n          animation: 'floatCircle1 4s ease-in-out infinite',\n        }}\n      />\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          top: 0,\n          left: 0,\n          background: 'radial-gradient(circle at 80% 200%, #CEFFFB 0%, transparent 45%)',\n          filter: 'blur(70px)',\n          animation: 'floatCircle2 5s ease-in-out infinite 0.5s',\n        }}\n      />\n      <div style={{ position: 'relative', zIndex: 1, width: '100%', height: '100%', ...childrenContainerStyle }}>\n        {children}\n      </div>\n      <style>{`\n        @keyframes floatCircle1 {\n          0%, 100% {\n            transform: translate(0%, 0%) scale(1.2);\n            opacity: 1;\n          }\n          25% {\n            transform: translate(-15%, 20%) scale(1.6);\n            opacity: 0.95;\n          }\n          50% {\n            transform: translate(12%, -15%) scale(0.9);\n            opacity: 1;\n          }\n          75% {\n            transform: translate(-10%, 10%) scale(1.4);\n            opacity: 0.9;\n          }\n        }\n        \n        @keyframes floatCircle2 {\n          0%, 100% {\n            transform: translate(0%, 0%) scale(1.1);\n            opacity: 1;\n          }\n          30% {\n            transform: translate(18%, -12%) scale(1.5);\n            opacity: 1;\n          }\n          60% {\n            transform: translate(-12%, 15%) scale(0.85);\n            opacity: 0.95;\n          }\n          85% {\n            transform: translate(14%, -8%) scale(1.3);\n            opacity: 0.9;\n          }\n        }\n      `}</style>\n    </div>\n  );\n};\n","import { useState, useCallback } from 'react';\nimport classNames from 'classnames';\nimport { IconBtn } from './icon-btn';\nimport { BackIcon, InfoIcon } from './bs-icons';\nimport { LinearGradientColorBgAnimation } from './linear-gradient-color-bg-animation';\nimport { ConfirmDialog } from './confirm-dialog';\nimport { Spinner } from './ui/spinner';\nimport { BaseButton } from './base-button';\nimport { BrushIcon } from './bs-icons';\nimport { cn } from '../lib/utils';\n\nexport interface PreviewerHeaderProps {\n  title: string;\n  tips?: string;\n  active?: boolean;\n  className?: string;\n  onBackClick?: () => void;\n  onSave?: (isConfirm?: boolean) => void;\n  onCancel?: () => void;\n  onClear?: () => void;\n  style?: React.CSSProperties;\n\n  confirmTitle?: string;\n  confirmContent?: string;\n  dialogContainer?: HTMLElement;\n  variant?: 'fields-previewer' | 'data-previewer';\n  closeBtnLabel?: string;\n\n  disableConfirm?: boolean;\n\n  disableOperation?: boolean;\n\n  customOperationElement?: React.ReactNode;\n\n}\n\nexport const PreviewerHeader = ({\n  title,\n  tips,\n  style,\n  confirmContent,\n  confirmTitle,\n  className,\n  active,\n  onBackClick,\n  onSave,\n  closeBtnLabel,\n  onCancel,\n  onClear,\n  variant = 'fields-previewer',\n  dialogContainer,\n  disableConfirm,\n  disableOperation,\n  customOperationElement,\n}: PreviewerHeaderProps) => {\n  const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n\n  const [loading, setLoading] = useState(false);\n\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  const setRootRef = useCallback((node: HTMLElement | null) => {\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-dialog-portal]');\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-dialog-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  const btnResetStyle = classNames(\n    'w-[94px] h-[34px] flex items-center justify-center rounded-[4px]'\n  );\n\n  const isData = variant === 'data-previewer';\n  const isFields = variant === 'fields-previewer';\n\n  const titleCls = classNames('font-[700]', {\n    'text-[16px]': isFields,\n    'text-[18px]': isData,\n  });\n\n  const effectiveContainer = dialogContainer || portalContainer || undefined;\n\n  const operations = customOperationElement ? (\n    customOperationElement\n  ) : (\n      <div className=\"flex items-center gap-[10px]\">\n        {onClear && (\n          <BaseButton\n            className={cn('w-[34px] h-[34px] text-[#8d8d8d] p-0 flex items-center justify-center hover:border-[#e0e0e0] hover:text-[#8d8d8d] border border-solid border-[#e0e0e0] ', {\n                'pointer-events-none opacity-50': disableOperation || loading,\n            })}\n            tooltip='清除全部'\n            icon={<BrushIcon />}\n            onClick={() => {\n              onClear?.();\n            }}\n          />\n        )}\n\n        {onSave && (\n          <button\n            onClick={async () => {\n              setLoading(true);\n              try {\n                await onSave();\n              } catch (error) {\n                console.error('Save failed:', error);\n              } finally {\n                setLoading(false);\n              }\n            }}\n            className={classNames(\n              btnResetStyle,\n              'flex items-center gap-[6px]',\n              'bg-[#0265FF] hover:opacity-90 text-white text-[14px]',\n              {\n                'w-[115px]': isData,\n                'pointer-events-none opacity-50': disableOperation || loading,\n              }\n            )}\n          >\n            {loading ? <Spinner /> : null}\n            {isFields ? '保存' : '添加到表单'}\n          </button>\n        )}\n        {onCancel && (\n          <button\n            onClick={() => {\n              // if (disableOperation) {\n              //   return;\n              // }\n\n              if (disableConfirm) {\n                onCancel?.();\n                onBackClick?.();\n                return;\n              }\n\n              setShowConfirmDialog(true);\n            }}\n            className={classNames(\n              btnResetStyle,\n              'text-[#121111] text-[14px] bg-[#fff] border border-solid border-[#e0e0e0] hover:bg-[#f0f0f0]',\n              {\n                'pointer-events-none opacity-50': loading,\n              }\n            )}\n          >\n            {closeBtnLabel || '取消'}\n          </button>\n        )}\n      </div>\n  )\n\n  const contentJsx = (\n    <>\n      <div className=\"flex items-center gap-3\">\n        {isData ? null : (\n          <IconBtn\n            icon={<BackIcon />}\n            onClick={() => {\n              // if (disableOperation) {\n              //   return;\n              // }\n\n              if (disableConfirm) {\n                onCancel?.();\n                onBackClick?.();\n                return;\n              }\n\n              setShowConfirmDialog(true);\n            }}\n            className=\"text-[#0265FF] hover:text-[#0265FF]\"\n          />\n        )}\n        <span className={titleCls}>{title}</span>\n        {tips && active && (\n          <div className=\"flex items-center gap-[6px] text-[#999999] text-[12px]\">\n            <InfoIcon />\n            {tips}\n          </div>\n        )}\n      </div>\n      {operations}\n      <ConfirmDialog\n        container={effectiveContainer}\n        open={showConfirmDialog}\n        onOpenChange={setShowConfirmDialog}\n        title={confirmTitle || 'AI表单搭建有修改，是否保存？'}\n        description={confirmContent || '您修改了AI表单搭建但没有保存，是否需要保存并继续？'}\n        onLinkClick={() => setShowConfirmDialog(false)}\n        onCancel={() => {\n          setShowConfirmDialog(false);\n          onCancel?.();\n          onBackClick?.();\n        }}\n        onConfirm={async () => {\n          setShowConfirmDialog(false);\n          setLoading(true);\n          try {\n            await onSave?.(true);\n          } catch (error) {\n            console.error('Save failed:', error);\n          } finally {\n            setLoading(false);\n          }\n        }}\n      />\n    </>\n  );\n\n  const borderCls = classNames({\n    'border-b border-solid border-[#e0e0e0]': !active && isFields,\n    'border-none': isData,\n  });\n\n  if (active) {\n    return (\n      <div ref={setRootRef}>\n        <LinearGradientColorBgAnimation\n          height={52}\n          style={style}\n          childrenContainerStyle={{\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n            padding: '0 20px',\n          }}\n        >\n          {contentJsx}\n        </LinearGradientColorBgAnimation>\n      </div>\n    );\n  }\n\n  const paddingCls = classNames({\n    'px-[20px]': isFields,\n    'px-[10px]': isData,\n  });\n\n  return (\n    <div\n      ref={setRootRef}\n      style={style}\n      className={classNames(\n        'w-full h-[52px] flex items-center justify-between',\n        paddingCls,\n        className,\n        borderCls\n      )}\n    >\n      {contentJsx}\n    </div>\n  );\n};\n","import classNames from 'classnames';\nimport { forwardRef, useState } from 'react';\nimport { AbsFullscreenGradientBg } from './abs-fullscreen-gradient-bg';\nimport { BorderColorAnimation } from './border-color-animation';\nimport { FieldsGeneratingIndicator } from './fields-generating-indicator';\nimport { PreviewerHeader, PreviewerHeaderProps } from './previewer-header';\nimport { useShadow } from '../hooks/use-shadow';\nimport { TooltipProvider } from './ui/tooltip';\n\nexport interface FieldsPreviewerProps extends PreviewerHeaderProps {\n  fullscreen?: boolean;\n\n  rightSpaceWidth?: number;\n  rightSpaceRef?: (right: HTMLDivElement) => void;\n  rightElement?: React.ReactNode;\n\n  // generating fields\n  streaming?: boolean;\n  streamingText?: string;\n\n  empty?: boolean;\n\n  zIndex?: number;\n\n  padding?: number;\n\n  containerStyle?: string;\n\n  fullContent?: boolean;\n\n  // children means the content inside the previewer, not the right side components\n  children?: React.ReactNode;\n\n  readonly?: boolean;\n\n  disableShadowContainer?: boolean;\n}\n\nconst PlaceholderDashedBox = () => {\n  return (\n    <div\n      style={{\n        borderRadius: 10,\n        width: '100%',\n        height: '100%',\n        border: '1px dashed var(---e0e0e0, #E0E0E0)',\n      }}\n    />\n  );\n};\n\nexport const FieldsPreviewer = forwardRef<HTMLDivElement, FieldsPreviewerProps>(\n  ({\n    zIndex = 1,\n    children,\n    title,\n    tips,\n    active,\n    fullscreen,\n    padding = 10,\n    className,\n    empty,\n    rightSpaceWidth,\n    rightSpaceRef,\n    rightElement,\n    streaming,\n    streamingText,\n    onBackClick,\n    dialogContainer,\n    disableShadowContainer,\n    variant = 'fields-previewer',\n    onSave,\n    onCancel,\n    onClear,\n    style,\n    confirmContent,\n    fullContent,\n    confirmTitle,\n    containerStyle,\n    readonly,\n\n    closeBtnLabel,\n    disableOperation,\n    disableConfirm,\n\n    customOperationElement,\n  }: FieldsPreviewerProps, _) => {\n    const p = fullscreen ? 0 : padding;\n    const pr = fullscreen ? 0 : rightSpaceWidth;\n\n    // const absWrapperRef = useRef<HTMLDivElement>(null);\n    const [absContainer, setAbsContainer] = useState<HTMLDivElement | null>(null);\n\n    const isFields = variant === 'fields-previewer';\n    const isData = variant === 'data-previewer';\n\n    const contentCls = classNames({\n      'm-[20px]': isFields,\n      'mx-[12px] mb-[10px]': isData,\n      'p-[10px]': isFields,\n      'p-0': isData,\n      'opacity-60': streaming && isFields,\n      'w-[calc(100%-40px)] h-[calc(100%-90px)] relative overflow-x-hidden overflow-y-auto':\n        isFields,\n      'w-[calc(100%-24px)] h-[calc(100%-62px)] relative overflow-x-hidden overflow-y-auto': isData,\n      'rounded-[4px] bg-white': isData,\n    });\n\n    const fullContentStyle = fullContent\n      ? {\n          width: '100%',\n          height: '100%',\n          padding: 0,\n          margin: 0,\n        }\n      : {};\n\n    const { shadowContainer } = useShadow({\n      id: 'dialog-container',\n      rootEl: dialogContainer,\n      style: containerStyle,\n      wrapperStyle: {\n        zIndex: Date.now(),\n        position: 'absolute',\n        width: '100%',\n        height: '100%',\n        pointerEvents: 'none',\n      },\n    });\n\n    const contentJsx = (\n      <>\n        <PreviewerHeader\n          title={title}\n          tips={tips}\n          active={active}\n          variant={variant}\n          className={className}\n          onBackClick={onBackClick}\n          onSave={streaming ? undefined : onSave}\n          onCancel={streaming ? undefined : onCancel}\n          style={style}\n          dialogContainer={disableShadowContainer ? absContainer! : (shadowContainer || absContainer!)}\n          confirmTitle={confirmTitle}\n          confirmContent={confirmContent}\n          closeBtnLabel={closeBtnLabel}\n          disableOperation={disableOperation}\n          disableConfirm={disableConfirm}\n          onClear={onClear}\n          customOperationElement={customOperationElement}\n        />\n        <div className={contentCls} style={fullContentStyle}>\n          {empty && isFields ? <PlaceholderDashedBox /> : children}\n          {readonly && <div className=\"absolute inset-0 z-50 cursor-not-allowed\" />}\n        </div>\n        {streaming && (\n          // abs center\n          <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\">\n            <FieldsGeneratingIndicator>{streamingText}</FieldsGeneratingIndicator>\n          </div>\n        )}\n      </>\n    );\n\n    const content = isFields ? (\n      <BorderColorAnimation\n        width={pr ? `calc(100% - ${pr}px)` : '100%'}\n        style={{ overflow: 'hidden' }}\n      >\n        {contentJsx}\n      </BorderColorAnimation>\n    ) : (\n      <div className=\"h-full\" style={{ width: pr ? `calc(100% - ${pr}px)` : '100%' }}>\n        {contentJsx}\n      </div>\n    );\n\n    const rightArea = (\n      <div\n        style={{\n          width: fullscreen ? 0 : rightSpaceWidth,\n          position: 'absolute',\n          top: 0,\n          right: 0,\n          pointerEvents: fullscreen ? 'none' : 'auto',\n        }}\n        className=\"h-full\"\n        ref={(n) => {\n          if (n) {\n            rightSpaceRef?.(n);\n          }\n        }}\n      >\n        {rightElement}\n      </div>\n    );\n\n    return (\n      <TooltipProvider\n        delayDuration={100}\n        zIndex={zIndex}\n      >\n        <AbsFullscreenGradientBg\n          zIndex={zIndex}\n          padding={isFields ? p : 0}\n          disableGradient={fullscreen || !isFields}\n          bgColor={isFields ? '#fff' : '#F5F7FA'}\n          ref={setAbsContainer}\n        >\n          {fullscreen ? contentJsx : content}\n          {rightArea}\n        </AbsFullscreenGradientBg>\n      </TooltipProvider>\n    );\n  }\n);\n","import { Button, ButtonProps } from './ui/button';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\n\nexport interface PrimaryConfirmBtnProps extends ButtonProps {\n  text?: string;\n  prefixDesc?: string;\n  icon?: React.ReactNode;\n  disabledWithInfo?: boolean;\n  light?: boolean;\n}\n\nexport const PrimaryConfirmBtn = ({\n  text = '确认',\n  prefixDesc,\n  className,\n  disabled,\n  light,\n  icon,\n  children,\n  ...rest\n}: PrimaryConfirmBtnProps) => {\n  const btn = (\n    <Button\n      {...rest}\n      variant=\"default\"\n      disabled={disabled}\n      className={cn(\n        'px-[10px] py-0 rounded-[100px] text-[14px] leading-normal h-[34px] min-w-[100px] cursor-pointer w-full disabled:opacity-100 gap-[6px] shadow-none',\n        disabled\n          ? 'bg-[#f0f0f0] text-[#999] cursor-not-allowed shadow-none'\n          : light\n            ? 'bg-[#F0F6FF] text-[#0265FF] hover:bg-[#0265FF] hover:text-white'\n            : 'bg-[#0265ff] text-white hover:bg-[#0265ff]/80',\n\n        transCls,\n        {\n          '!bg-[#E5E6EB] !text-[#121111] shadow-none font-[400]': rest.disabledWithInfo,\n        },\n        className\n      )}\n    >\n      {icon}\n      {children || text}\n    </Button>\n  );\n\n  if (!prefixDesc) {\n    return btn;\n  }\n\n  return (\n    <div className=\"flex flex-col items-start gap-2.5\">\n      <p className=\"text-[#4D609F]\">{prefixDesc}</p>\n      {btn}\n    </div>\n  );\n};\n","import { cn } from '../lib/utils';\nimport { FORM_ICON_OPTIONS, transCls } from '../const/ui';\nimport { useState, memo, useEffect } from 'react';\nimport { ChevronDownIcon } from './ui/icons';\nimport { PrimaryConfirmBtn } from './primary-confirm-btn';\nimport { EditIcon } from './bs-icons';\nimport { FontIcon } from './font-icon';\nimport { FormIconOption } from '../types';\n\nexport type { FormIconOption };\n\n// Form icon component with blue background - dynamically shows selected icon\nconst FormIcon = ({\n  size = 36,\n  code,\n  style,\n}: {\n  size?: number;\n  code?: string;\n  style?: React.CSSProperties;\n}) => {\n  const borderRadius = size * 0.238; // ~8.57px for 36px container\n  const fontSize = size * 0.6875; // Icon font size relative to container\n\n  return (\n    <div\n      className=\"relative flex items-center justify-center bg-[#0265ff] flex-shrink-0 text-white\"\n      style={{\n        width: size,\n        height: size,\n        borderRadius,\n        fontSize: fontSize,\n        ...style,\n      }}\n    >\n      <FontIcon code={code || FORM_ICON_OPTIONS[0].code} style={{ fontSize }} />\n    </div>\n  );\n};\n\nexport interface FormInfoEditorProps {\n  /** Form name */\n  name: string;\n  /** Callback when name changes */\n  onNameChange?: (name: string) => void;\n  /** Currently selected icon option */\n  selectedIcon?: FormIconOption;\n  /** Available icon options */\n  iconOptions?: FormIconOption[];\n  /** Callback when icon changes */\n  onIconChange?: (icon: FormIconOption) => void;\n  /** Callback when confirm button is clicked */\n  onConfirm?: (name: string, iconVal: number) => void;\n  /** Whether the editor is in expanded mode */\n  expanded?: boolean;\n  /** Callback when expanded state changes */\n  onExpandedChange?: (expanded: boolean) => void;\n  /** Custom class name */\n  className?: string;\n  onMount?: () => void;\n  readonly?: boolean;\n}\n\n/**\n * Form Info Editor Component\n * Displays form name and icon with an expandable editor interface\n */\nexport const FormInfoEditor = memo(\n  ({\n    name,\n    onNameChange,\n    onMount,\n    selectedIcon = FORM_ICON_OPTIONS[0],\n    iconOptions = [],\n    onIconChange,\n    readonly,\n    onConfirm,\n    expanded: controlledExpanded,\n    onExpandedChange,\n    className,\n  }: FormInfoEditorProps) => {\n    const [internalExpanded, setInternalExpanded] = useState(false);\n    const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n    const expanded = controlledExpanded ?? internalExpanded;\n    const setExpanded = (value: boolean) => {\n      setInternalExpanded(value);\n      onExpandedChange?.(value);\n    };\n\n    const [nameVal, setNameVal] = useState(name);\n    const [iconOpt, setIconOpt] = useState(selectedIcon);\n\n    useEffect(() => {\n      onMount?.();\n    }, []);\n\n    // Default Status (Collapsed)\n    if (!expanded || readonly) {\n      return (\n        <div\n          className={cn(\n            'bg-white hover:bg-[#fafafa] border border-[#e0e0e0] rounded-[10px] px-[10px] py-0 flex items-center justify-between h-[56px] cursor-pointer',\n            transCls,\n            className,\n            'duration-100'\n          )}\n          onClick={() => {\n            if (readonly) return;\n            setExpanded(true);\n          }}\n        >\n          {/* Left side: Form icon and name */}\n          <div className=\"flex items-center gap-[10px] min-w-0 flex-1 mr-[10px]\">\n            <FormIcon size={36} code={iconOpt?.code} />\n            <p className=\"text-[14px] text-black leading-normal truncate\">{nameVal}</p>\n          </div>\n\n          <button\n            onClick={() => {\n              if (readonly) return;\n              setExpanded(true);\n            }}\n            className={cn(\n              'w-[16px] h-[16px] flex items-center justify-center cursor-pointer hover:text-[#0265ff]',\n              transCls,\n              {\n                'pointer-events-none opacity-0': readonly,\n              }\n            )}\n          >\n            <EditIcon />\n          </button>\n        </div>\n      );\n    }\n\n    // Expanded Status (Edit mode)\n    return (\n      <div\n        className={cn(\n          'bg-[#fafafa] border border-[#e0e0e0] rounded-[10px] p-[12px] flex flex-col gap-[22px]',\n          transCls,\n          className,\n          'duration-100'\n        )}\n      >\n        {/* Name field */}\n        <div className=\"flex flex-col gap-[10px] w-full\">\n          <p className=\"text-[14px] text-[#030303] font-bold leading-normal\">名称</p>\n          <input\n            type=\"text\"\n            value={nameVal}\n            onChange={(e) => {\n              setNameVal(e.target.value);\n            }}\n            onBlur={() => {\n              onNameChange?.(nameVal);\n            }}\n            className={cn(\n              'bg-white border border-[#e0e0e0] rounded-[4px] h-[34px] px-[10px] py-[7px] w-full',\n              'text-[14px] text-[#030303] leading-normal outline-none',\n              'focus:border-[#0265ff]',\n              'hover:border-[#0265ff]',\n              transCls\n            )}\n          />\n        </div>\n\n        {/* Icon field */}\n        <div className=\"flex flex-col gap-[10px] w-full\">\n          <p className=\"text-[14px] text-[#030303] font-bold leading-normal\">图标</p>\n          <div className=\"relative\" style={{ zIndex: 10 }}>\n            <button\n              onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n              className={cn(\n                'bg-white border border-[#e0e0e0] rounded-[4px] h-[34px] px-[10px] py-[7px] w-full',\n                'flex items-center justify-between cursor-pointer',\n                'hover:border-[#0265ff]',\n                transCls\n              )}\n            >\n              {/* Selected icon */}\n              <div className=\"flex items-center\">\n                <FormIcon size={16} code={iconOpt?.code} />\n              </div>\n\n              {/* Dropdown arrow */}\n              <div className={cn('text-[#666]', transCls, isDropdownOpen && 'rotate-180')}>\n                <ChevronDownIcon size={16} />\n              </div>\n            </button>\n\n            {/* Dropdown menu - Grid layout matching Figma design */}\n            {isDropdownOpen && iconOptions.length > 0 && (\n              <div\n                className={cn(\n                  'absolute top-full left-0 mt-[4px] bg-white rounded-[10px] shadow-md z-10 p-[12px]',\n                  transCls\n                )}\n              >\n                <div className=\"grid grid-cols-6 gap-[8px]\">\n                  {iconOptions.map((option) => (\n                    <button\n                      key={option.id}\n                      onClick={() => {\n                        onIconChange?.(option);\n                        setIconOpt(option);\n                        setIsDropdownOpen(false);\n                      }}\n                      className={cn(\n                        'aspect-square rounded-[9.5px] border flex items-center justify-center cursor-pointer overflow-hidden',\n                        iconOpt?.id === option.id\n                          ? 'border-[#0265ff] border-2'\n                          : 'border-[#e0e0e0] hover:bg-[#eff0f6]',\n                        transCls\n                      )}\n                      title={option.label}\n                    >\n                      <FormIcon\n                        code={option.code}\n                        style={{ background: 'transparent', color: '#0265ff' }}\n                      />\n                    </button>\n                  ))}\n                </div>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Confirm button */}\n        <PrimaryConfirmBtn\n          text=\"确认\"\n          onClick={() => {\n            onConfirm?.(nameVal, iconOpt?.value || 25);\n            setExpanded(false);\n          }}\n        />\n      </div>\n    );\n  },\n  (p1, p2) => {\n    return (\n      p1.name === p2.name &&\n      p1.selectedIcon?.id === p2.selectedIcon?.id &&\n      p1.expanded === p2.expanded &&\n      p1.iconOptions === p2.iconOptions\n    );\n  }\n);\n\nexport default FormInfoEditor;\n","/** number 类型字段可用的统计方式 */\nexport const NUMBER_FORMULA_OPS = [\n    'countDistinct',\n    'count',\n    'sum',\n    'max',\n    'min',\n    'average',\n];\n/** 非 number 类型字段可用的统计方式 */\nexport const DEFAULT_FORMULA_OPS = ['countDistinct', 'count'];\n/** 统计方式 → 中文标签 */\nexport const FORMULA_OP_LABEL = {\n    countDistinct: '去重计数',\n    count: '计数',\n    sum: '求和',\n    max: '最大值',\n    min: '最小值',\n    average: '平均',\n};\n","export var FreezeMode;\n(function (FreezeMode) {\n    FreezeMode[\"NONE\"] = \"none\";\n    FreezeMode[\"SHALLOW\"] = \"shallow\";\n    FreezeMode[\"DEEP\"] = \"deep\";\n})(FreezeMode || (FreezeMode = {}));\nexport class ChatAreaPlugin {\n    constructor(context) {\n        this.Context = context;\n    }\n}\nexport * from './query.js';\n","import { cn } from '../lib/utils';\nimport { type FormulaOp, FORMULA_OP_LABEL } from '@baishuyun/types';\n\n/** 统计方式 → 背景色 */\nconst FORMULA_OP_COLOR: Record<FormulaOp, string> = {\n  sum: '#3767F1',\n  max: '#F06648',\n  min: '#4ACC8C',\n  average: '#4AC0EC',\n  count: '#9362CE',\n  countDistinct: '#F168B6',\n};\n\nexport interface FormulaTagProps {\n  /** 统计方式 */\n  type: FormulaOp;\n  className?: string;\n}\n\nexport const FormulaTag = ({ type, className }: FormulaTagProps) => {\n  return (\n    <span\n      className={cn(\n        'inline-flex items-center justify-center rounded-[100px] px-[6px] text-[14px] leading-[20px] text-white',\n        className\n      )}\n      style={{ backgroundColor: FORMULA_OP_COLOR[type] }}\n    >\n      {FORMULA_OP_LABEL[type]}\n    </span>\n  );\n};\n","import classNames from \"classnames\";\n\nexport const GenerateAnimation = (props: { children?: React.ReactNode, className?: string }) => {\n  return (\n    <div className={classNames(\"flex items-center gap-[6px]\", props.className)}>\n      <div className=\"flex gap-[2px] flex-shrink-0\" style={{ marginRight: '6px' }}>\n        <div\n          className=\"w-[5px] h-[5px] rounded-full bg-[#999] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.0s ease-in-out infinite',\n            animationDelay: '0s',\n            width: '5px',\n            height: '5px',\n            background: '#999',\n            marginRight: '3px',\n          }}\n        />\n        <div\n          className=\"w-[5px] h-[5px] rounded-full bg-[#999] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.0s ease-in-out infinite',\n            width: '5px',\n            height: '5px',\n            background: '#999',\n            animationDelay: '0.2s',\n            marginRight: '3px',\n          }}\n        />\n        <div\n          className=\"w-[5px] h-[5px] rounded-full bg-[#999] flex-shrink-0\"\n          style={{\n            animation: 'pulse 1.0s ease-in-out infinite',\n            width: '5px',\n            height: '5px',\n            marginRight: '3px',\n            background: '#999',\n            animationDelay: '0.4s',\n          }}\n        />\n      </div>\n      <span className=\"text-[14px] text-[#999]\">{props.children || '生成中'}</span>\n      <style>{`\n        @keyframes pulse {\n          0%, 60%, 100% {\n            opacity: 0.3;\n            transform: scale(1);\n          }\n          30% {\n            opacity: 1;\n            transform: scale(1.2);\n          }\n        }\n      `}</style>\n    </div>\n  );\n};\n","import React, { CSSProperties, useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { cn } from '../lib/utils';\nimport { CheckerIcon } from './bs-icons';\nimport { SquareChecker } from './square-checker';\n\nexport interface LineCheckerProps {\n  defaultChecked?: boolean;\n  checked?: boolean;\n  disabled?: boolean;\n  onCheckedChange?: (checked: boolean) => void;\n\n  icon?: React.ReactNode;\n  title: string;\n  shortDesc?: string;\n  className?: string;\n  extra?: React.ReactNode;\n\n  style?: CSSProperties;\n  streaming?: boolean;\n  confirmed?: boolean;\n  readonly?: boolean;\n}\n\nexport const LineChecker: React.FC<LineCheckerProps> = ({\n  defaultChecked = false,\n  checked: checkedProp,\n  disabled = false,\n  onCheckedChange,\n  icon,\n  className,\n  title,\n  extra,\n  style,\n  streaming,\n  confirmed,\n  readonly,\n  shortDesc,\n}) => {\n  const [checked, setChecked] = useState(defaultChecked);\n\n  useEffect(() => {\n    if (checkedProp !== undefined) {\n      setChecked(checkedProp);\n    }\n  }, [checkedProp]);\n\n  const handleClick = () => {\n    if (streaming || disabled) return;\n\n    const newChecked = !checked;\n    setChecked(newChecked);\n    onCheckedChange?.(newChecked);\n  };\n\n  const hasExtra = Boolean(extra);\n\n  const checker =\n    confirmed && checked ? (\n      <CheckerIcon className=\"grow-0 shrink-0 text-[#0265ff]\" />\n    ) : (\n      <SquareChecker\n        className={classNames('outline-none grow-0 shrink-0 cursor-pointer', {\n          'mt-[2px]': hasExtra,\n          'opacity-80 cursor-not-allowed': disabled,\n          'opacity-50': streaming,\n          'pointer-events-none': streaming,\n        })}\n        id={title}\n        checked={checked}\n        disabled={disabled || confirmed}\n        onCheckedChange={handleClick}\n      />\n    );\n\n  return (\n    <div\n      className={cn(\n        'flex items-center gap-[10px] px-4 py-[10px] rounded-[4px]',\n        'w-full transition-colors cursor-pointer',\n        {\n          'cursor-not-allowed': disabled,\n          'hover:bg-[#EFF0F6]': !disabled,\n          'items-start': hasExtra,\n          'items-center': !hasExtra,\n          'pointer-events-none': streaming || disabled || readonly || confirmed,\n        },\n        className\n      )}\n      style={style}\n      onClick={() => {\n        handleClick();\n      }}\n    >\n      {readonly ? null : checker}\n\n      <div\n        className={classNames('flex flex-col flex-1 min-w-0', {\n          'gap-2.5': hasExtra,\n        })}\n      >\n        <div\n          className={classNames('flex items-center justify-between w-full', {\n            'gap-1.5': !!icon,\n            'gap-2.5': !icon,\n          })}\n        >\n          <div\n            className={classNames('flex items-center gap-[6px] min-w-0', {\n              'flex-1': !!icon,\n              'w-[100px] flex-shrink-0': !icon,\n            })}\n          >\n            {/* Icon */}\n            {icon && (\n              <div className=\"w-4 h-4 flex-shrink-0 text-[#6F829E] leading-[16px]\">{icon}</div>\n            )}\n\n            {/* Title - truncates */}\n            <p\n              className={classNames(' min-w-0 text-sm text-[#121111] truncate text-[12px]', {\n                'flex-1': !!icon,\n                'flex-grow-1 flex-shrink-0': !icon,\n                '!text-[#666]': readonly,\n              })}\n            >\n              {title}\n            </p>\n          </div>\n\n          {shortDesc && (\n            <p\n              className={classNames('text-sm text-[#666] text-[12px]', {\n                'whitespace-nowrap flex-shrink-0': !!icon,\n                anywhere: !icon,\n                '!text-[#121111]': readonly,\n              })}\n            >\n              {shortDesc}\n            </p>\n          )}\n        </div>\n        {hasExtra ? (\n          <div\n            className={cn(\n              'overflow-x-auto whitespace-nowrap no-scrollbar flex items-center gap-2',\n              {\n                '!overflow-x-hidden': disabled || readonly || confirmed,\n              }\n            )}\n          >\n            {extra}\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n};\n\nexport default LineChecker;\n","/**\n * marked v17.0.1 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function Z(u){T=u}var C={exec:()=>null};function k(u,e=\"\"){let t=typeof u==\"string\"?u:u.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var me=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Te=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,N=/(?:[*+-]|\\d{1,9}[.)])/,re=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,se=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Oe=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),Q=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,F=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=k(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",F).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=k(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,N).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",j=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=k(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",j).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ie=k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ie).getRegex(),U={blockquote:$e,code:be,def:ye,fences:Re,heading:Te,hr:I,html:Se,lheading:se,list:Pe,newline:xe,paragraph:ie,table:C,text:we},te=k(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...U,lheading:Oe,table:te,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",te).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...U,html:k(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",j).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:C,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",se).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,oe=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,K=/[\\s\\p{P}\\p{S}]/u,ae=/[^\\s\\p{P}\\p{S}]/u,Ce=k(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,K).getRegex(),le=/(?!~)[\\p{P}\\p{S}]/u,Ie=/(?!~)[\\s\\p{P}\\p{S}]/u,Ee=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=k(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",me?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ue=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=k(ue,\"u\").replace(/punct/g,D).getRegex(),ve=k(ue,\"u\").replace(/punct/g,le).getRegex(),pe=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=k(pe,\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,D).getRegex(),He=k(pe,\"gu\").replace(/notPunctSpace/g,Ee).replace(/punctSpace/g,Ie).replace(/punct/g,le).getRegex(),Ze=k(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,D).getRegex(),Ge=k(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=k(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=k(j).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=k(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,je=k(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),ce=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",F).getRegex(),he=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",F).getRegex(),Ue=k(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",ce).replace(\"nolink\",he).getRegex(),ne=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,W={_backpedal:C,anyPunctuation:Ge,autolink:Ne,blockSkip:Be,br:oe,code:ze,del:C,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ze,escape:Me,link:je,nolink:he,punctuation:Ce,reflink:ce,reflinkSearch:Ue,tag:Fe,text:Ae,url:C},Ke={...W,link:k(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:k(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},G={...W,emStrongRDelimAst:He,emStrongLDelim:ve,url:k(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",ne).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",ne).getRegex()},We={...G,br:k(oe).replace(\"{2,}\",\"*\").getRegex(),text:k(G.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},E={normal:U,gfm:_e,pedantic:Le},M={normal:W,gfm:G,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=u=>Xe[u];function w(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,ke);return u}function X(u){try{u=encodeURI(u).replace(m.percentDecode,\"%\")}catch{return null}return u}function J(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(u,e,t){let n=u.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function de(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]===\"\\\\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function ge(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:u[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Je(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))o.push(n[l]),a=!0;else if(!a)o.push(n[l]);else break;n=n.slice(l);let p=o.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let g=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,O=>\" \".repeat(3*O.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(p+=h+`\n`,e=e.substring(h.length+1),l=!0),!l){let O=this.rules.other.nextBulletRegex(f),V=this.rules.other.hrRegex(f),Y=this.rules.other.fencesBeginRegex(f),ee=this.rules.other.headingBeginRegex(f),fe=this.rules.other.htmlBeginRegex(f);for(;e;){let H=e.split(`\n`,1)[0],A;if(h=H,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\"  \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\"    \"),Y.test(h)||ee.test(h)||fe.test(h)||O.test(h)||V.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||Y.test(g)||ee.test(g)||V.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),p+=H+`\n`,e=e.substring(H.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:\"list_item\",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0]?.type===\"text\"||l.tokens[0]?.type===\"paragraph\"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,\"\");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,\"\");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};l.checked=c.checked,i.loose?l.tokens[0]&&[\"paragraph\",\"text\"].includes(l.tokens[0].type)&&\"tokens\"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:\"paragraph\",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(g=>g.type===\"space\"),c=p.length>0&&p.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type===\"text\"&&(p.type=\"paragraph\")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=J(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(J(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=de(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),ge(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return ge(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:E.normal,inline:M.normal};this.options.pedantic?(t.block=E.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=E.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:E,inline:M}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(l=>{o=l.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type===\"text\"&&p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(p=Math.min(p,g))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=X(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=X(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}checkbox({raw:e}){return e}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(s.type)){t+=a||\"\";continue}}let i=r;switch(i.type){case\"space\":{t+=this.renderer.space(i);break}case\"hr\":{t+=this.renderer.hr(i);break}case\"heading\":{t+=this.renderer.heading(i);break}case\"code\":{t+=this.renderer.code(i);break}case\"table\":{t+=this.renderer.table(i);break}case\"blockquote\":{t+=this.renderer.blockquote(i);break}case\"list\":{t+=this.renderer.list(i);break}case\"checkbox\":{t+=this.renderer.checkbox(i);break}case\"html\":{t+=this.renderer.html(i);break}case\"def\":{t+=this.renderer.def(i);break}case\"paragraph\":{t+=this.renderer.paragraph(i);break}case\"text\":{t+=this.renderer.text(i);break}default:{let s='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(s),\"\";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"checkbox\":{n+=t.checkbox(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];S.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,p);return l.call(i,g)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,p);return g===!1&&(g=await l.apply(i,p)),g})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(u,e){return _.parse(u,e)}d.options=d.setOptions=function(u){return _.setOptions(u),d.defaults=_.defaults,Z(d.defaults),d};d.getDefaults=L;d.defaults=T;d.use=function(...u){return _.use(...u),d.defaults=_.defaults,Z(d.defaults),d};d.walkTokens=function(u,e){return _.walkTokens(u,e)};d.parseInline=_.parseInline;d.Parser=b;d.parser=b.parse;d.Renderer=P;d.TextRenderer=$;d.Lexer=x;d.lexer=x.lex;d.Tokenizer=y;d.Hooks=S;d.parse=d;var Dt=d.options,Ht=d.setOptions,Zt=d.use,Gt=d.walkTokens,Nt=d.parseInline,Qt=d,Ft=b.parse,jt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,jt as lexer,d as marked,Dt as options,Qt as parse,Nt as parseInline,Ft as parser,Ht as setOptions,Zt as use,Gt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","export function deprecate(fn) {\n  return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n  /**\n   * @param {SchemaType['property']} property\n   *   Property.\n   * @param {SchemaType['normal']} normal\n   *   Normal.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Schema.\n   */\n  constructor(property, normal, space) {\n    this.normal = normal\n    this.property = property\n\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n *   Definitions.\n * @param {Space | undefined} [space]\n *   Space.\n * @returns {Schema}\n *   Schema.\n */\nexport function merge(definitions, space) {\n  /** @type {Record<string, Info>} */\n  const property = {}\n  /** @type {Record<string, string>} */\n  const normal = {}\n\n  for (const definition of definitions) {\n    Object.assign(property, definition.property)\n    Object.assign(normal, definition.normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n *   An attribute-like or property-like name.\n * @returns {string}\n *   Value that can be used to look up the properly cased property on a\n *   `Schema`.\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n  /**\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute) {\n    this.attribute = attribute\n    this.property = property\n  }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n  Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @param {number | null | undefined} [mask]\n   *   Mask.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n *   Key type.\n * @param {DefinedInfo} values\n *   Info.\n * @param {Key} key\n *   Key.\n * @param {DefinedInfo[Key]} value\n *   Value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction mark(values, key, value) {\n  if (value) {\n    values[key] = value\n  }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n *   Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n *   Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n *   Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n *   Property names to their types.\n * @property {Space | undefined} [space]\n *   Space.\n * @property {Transform} transform\n *   Transform a property name.\n */\n\n/**\n * @callback Transform\n *   Transform.\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n *   Definition.\n * @returns {Schema}\n *   Schema.\n */\nexport function create(definition) {\n  /** @type {Record<string, Info>} */\n  const properties = {}\n  /** @type {Record<string, string>} */\n  const normals = {}\n\n  for (const [property, value] of Object.entries(definition.properties)) {\n    const info = new DefinedInfo(\n      property,\n      definition.transform(definition.attributes || {}, property),\n      value,\n      definition.space\n    )\n\n    if (\n      definition.mustUseProperty &&\n      definition.mustUseProperty.includes(property)\n    ) {\n      info.mustUseProperty = true\n    }\n\n    properties[property] = info\n\n    normals[normalize(property)] = property\n    normals[normalize(info.attribute)] = property\n  }\n\n  return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  },\n  transform(_, property) {\n    return property === 'role'\n      ? property\n      : 'aria-' + property.slice(4).toLowerCase()\n  }\n})\n","/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} attribute\n *   Attribute.\n * @returns {string}\n *   Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  booleanish,\n  boolean,\n  commaSeparated,\n  number,\n  overloadedBoolean,\n  spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: overloadedBoolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  },\n  space: 'html',\n  transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  boolean,\n  commaOrSpaceSeparated,\n  commaSeparated,\n  number,\n  spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  },\n  space: 'svg',\n  transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  },\n  space: 'xlink',\n  transform(_, property) {\n    return 'xlink:' + property.slice(5).toLowerCase()\n  }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  properties: {xmlnsXLink: null, xmlns: null},\n  space: 'xmlns',\n  transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n  space: 'xml',\n  transform(_, property) {\n    return 'xml:' + property.slice(3).toLowerCase()\n  }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n *   Schema;\n *   either the `html` or `svg` export.\n * @param {string} value\n *   An attribute-like or property-like name;\n *   it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n *   Info.\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let property = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Kebab.\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Camel.\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","'use strict';\n\n// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nfunction index (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) ; else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n}\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n\nmodule.exports = index;\n//# sourceMappingURL=index.js.map\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nconst inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    let styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    const declarations = (0, inline_style_parser_1.default)(style);\n    const hasIterator = typeof iterator === 'function';\n    declarations.forEach((declaration) => {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        const { property, value } = declaration;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        // for non-React, remove first hyphen so vendor prefix is not capitalized\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file = ''\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual = undefined\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected = undefined\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note = undefined\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url = undefined\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JsxElement}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  try {\n    return styleToJs(value, {reactCompat: true})\n  } catch (error) {\n    if (state.ignoreInvalidStyle) {\n      return {}\n    }\n\n    const cause = /** @type {Error} */ (error)\n    const message = new VFileMessage('Cannot parse `style` attribute', {\n      ancestors: state.ancestors,\n      cause,\n      ruleId: 'style',\n      source: 'hast-util-to-jsx-runtime'\n    })\n    message.file = state.filePath || undefined\n    message.url = docs + '#cannot-parse-style-attribute'\n\n    throw message\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {string | number} */ (result.value)\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const character = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  if (\n    character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n    value !== 'semi'\n  ) {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  return character === characterReference ? false : character\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  let tokenizer = token._tokenizer;\n  if (!tokenizer) {\n    tokenizer = context.parser[token.contentType](token.start);\n    if (token._contentTypeTextTrailing) {\n      tokenizer._contentTypeTextTrailing = true;\n    }\n  }\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[content][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n\n      // Allow final trailing whitespace.\n      if (context._contentTypeTextTrailing && eventIndex === events.length) {\n        size = 0;\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n        /* c8 ignore next 4 -- used to be used, no longer */\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n  // Someone can write `js&#x20;python&#x9;ruby`.\n  const language = node.lang ? node.lang.split(/\\s+/) : []\n\n  // GH/CM still drop the non-first languages.\n  if (language.length > 0) {\n    properties.className = ['language-' + language[0]]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test)\n          ? anyFactory(test)\n          : // Cast because `ReadonlyArray` goes into the above but `isArray`\n            // narrows to `Array`.\n            propertiesFactory(/** @type {Props} */ (test))\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return d\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends ReadonlyArray<infer T>\n *   ? MatchesOne<Value, T>\n *   : Check extends Array<infer T>\n *   ? MatchesOne<Value, T>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n            typeof value.name === 'string'\n            ? value.name\n            : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n *   runs the (rehype) plugins used on it with a hast tree,\n *   then discards the result (*bridge mode*)\n * * otherwise,\n *   returns a hast tree,\n *   the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n *   output the raw HTML.\n *   This is typically discouraged as noted by the option name but is useful if\n *   you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *   into standard hast nodes (`element`, `text`, etc);\n *   this is a heavy task as it needs a full HTML parser,\n *   but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n *   (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n *   see later),\n *   create a hast `text` node\n * * otherwise,\n *   create a `<div>` element (which could be changed with `data.hName`),\n *   with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given,\n *   configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @import {Element, Nodes, Parents, Root} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {ComponentType, JSX, ReactElement, ReactNode} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList, Processor} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in keyof JSX.IntrinsicElements]?: ComponentType<JSX.IntrinsicElements[Key] & ExtraProps> | keyof JSX.IntrinsicElements\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @typedef HooksOptionsOnly\n *   Configuration specifically for {@linkcode MarkdownHooks}.\n * @property {ReactNode | null | undefined} [fallback]\n *   Content to render while the processor processing the markdown (optional).\n */\n\n/**\n * @typedef {Options & HooksOptionsOnly} HooksOptions\n *   Configuration for {@linkcode MarkdownHooks};\n *   extends the regular {@linkcode Options} with a `fallback` prop.\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport {useEffect, useState} from 'react'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {from: 'className', id: 'remove-classname'},\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * This is a synchronous component.\n * When using async plugins,\n * see {@linkcode MarkdownAsync} or {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  return post(processor.runSync(processor.parse(file), file), options)\n}\n\n/**\n * Component to render markdown with support for async plugins\n * through async/await.\n *\n * Components returning promises are supported on the server.\n * For async support on the client,\n * see {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Promise<ReactElement>}\n *   Promise to a React element.\n */\nexport async function MarkdownAsync(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  const tree = await processor.run(processor.parse(file), file)\n  return post(tree, options)\n}\n\n/**\n * Component to render markdown with support for async plugins through hooks.\n *\n * This uses `useEffect` and `useState` hooks.\n * Hooks run on the client and do not immediately render something.\n * For async support on the server,\n * see {@linkcode MarkdownAsync}.\n *\n * @param {Readonly<HooksOptions>} options\n *   Props.\n * @returns {ReactNode}\n *   React node.\n */\nexport function MarkdownHooks(options) {\n  const processor = createProcessor(options)\n  const [error, setError] = useState(\n    /** @type {Error | undefined} */ (undefined)\n  )\n  const [tree, setTree] = useState(/** @type {Root | undefined} */ (undefined))\n\n  useEffect(\n    function () {\n      let cancelled = false\n      const file = createFile(options)\n\n      processor.run(processor.parse(file), file, function (error, tree) {\n        if (!cancelled) {\n          setError(error)\n          setTree(tree)\n        }\n      })\n\n      /**\n       * @returns {undefined}\n       *   Nothing.\n       */\n      return function () {\n        cancelled = true\n      }\n    },\n    [\n      options.children,\n      options.rehypePlugins,\n      options.remarkPlugins,\n      options.remarkRehypeOptions\n    ]\n  )\n\n  if (error) throw error\n\n  return tree ? post(tree, options) : options.fallback\n}\n\n/**\n * Set up the `unified` processor.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Processor<MdastRoot, MdastRoot, Root, undefined, undefined>}\n *   Result.\n */\nfunction createProcessor(options) {\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  return processor\n}\n\n/**\n * Set up the virtual file.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {VFile}\n *   Result.\n */\nfunction createFile(options) {\n  const children = options.children || ''\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  return file\n}\n\n/**\n * Process the result from unified some more.\n *\n * @param {Nodes} tree\n *   Tree.\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nfunction post(tree, options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  visit(tree, transform)\n\n  return toJsxRuntime(tree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","import { marked } from \"marked\";\nimport { memo, useMemo } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\n\nfunction parseMarkdownIntoBlocks(markdown: string): string[] {\n  const tokens = marked.lexer(markdown);\n  return tokens.map((token) => token.raw);\n}\n\nconst MemoizedMarkdownBlock = memo(\n  ({ content }: { content: string }) => {\n    return <ReactMarkdown>{content}</ReactMarkdown>;\n  },\n  (prevProps, nextProps) => {\n    if (prevProps.content !== nextProps.content) return false;\n    return true;\n  },\n);\n\nMemoizedMarkdownBlock.displayName = \"MemoizedMarkdownBlock\";\n\nexport const MemoizedMarkdown = memo(\n  ({ content, id }: { content: string; id: string }) => {\n    const blocks = useMemo(() => parseMarkdownIntoBlocks(content), [content]);\n\n    return blocks.map((block, index) => (\n      <MemoizedMarkdownBlock content={block} key={`${id}-block_${index}`} />\n    ));\n  },\n);\n\nMemoizedMarkdown.displayName = \"MemoizedMarkdown\";\n","import { ReactNode } from \"react\";\n\nexport interface OptionItemProps {\n    bgColor?: string;\n    color?: string;\n    label?: ReactNode;\n    children?: ReactNode;\n}\n\nexport const OptionItem = ({\n    bgColor = \"#E8F4FF\",\n    color = \"#0265FF\",\n    label,\n    children,\n}: OptionItemProps\n) => {\n    return (\n        <div\n            className=\"flex items-center justify-center gap-1.5 px-1.5 h-[26px] rounded-[100px] text-[13px]\"\n            style={{\n                backgroundColor: bgColor,\n                color: color,\n            }}\n        >\n            {label || children}\n        </div>\n    )\n}","import { useState, useCallback } from 'react';\nimport type { FieldType, IAgentHelperOutputConfig, OutputParam, IField, ISubformField } from '@baishuyun/types';\nimport { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { TrashIcon, SearchIcon } from '../components/bs-icons';\nimport { Popover, PopoverTrigger, PopoverContent } from './ui/popover';\nimport { usePortalContainer } from '../hooks/use-portal-container';\n\nconst PlusIcon = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M8 3.5v9M3.5 8h9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nconst CaretIcon = ({ className }: { className?: string }) => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n    <path d=\"M3 4.5l3 3 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nconst ExpandArrowIcon = ({ className }: { className?: string }) => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n    <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\ninterface OutputFieldOption {\n  fieldName: string;\n  fieldDesc: string;\n  type: FieldType | '';\n  children?: OutputFieldOption[];\n}\n\ntype DropdownTarget = { index: number; field: 'source' | 'target' } | null;\n\nexport interface OutputConfigEditorProps {\n  value: Array<IAgentHelperOutputConfig>;\n  onChange?: (value: Array<IAgentHelperOutputConfig>) => void;\n\n  sourceFields?: OutputParam[];\n  targetFields?: IField[];\n  className?: string;\n}\n\nfunction outputParamsToOptions(params: OutputParam[]): OutputFieldOption[] {\n  return params.map(p => ({\n    fieldName: p.name,\n    fieldDesc: p.description || p.name,\n    type: p.type,\n    children: p.subformParams?.map(s => ({\n      fieldName: s.name,\n      fieldDesc: s.name,\n      type: s.type,\n    })),\n  }));\n}\n\nfunction fieldsToOptions(fields: IField[]): OutputFieldOption[] {\n  return fields.map(f => {\n    const subformItems = f.widget.items?.filter(\n      (item): item is ISubformField => 'widget' in item\n    );\n    return {\n      fieldName: f.widget.widgetName,\n      fieldDesc: f.label,\n      type: f.widget.type,\n      children: subformItems?.length ? subformItems.map(s => ({\n        fieldName: `${f.widget.widgetName}.${s.widget.widgetName}`,\n        fieldDesc: `${s.label}`,\n        type: s.widget.type,\n      })) : undefined,\n    };\n  });\n}\n\nfunction flattenSourceFields(fields: OutputFieldOption[]): OutputFieldOption[] {\n  const result: OutputFieldOption[] = [];\n  for (const field of fields) {\n    result.push(field);\n    if (field.children) {\n      for (const child of field.children) {\n        result.push({\n          ...child,\n          fieldName: `${field.fieldName}.${child.fieldName}`,\n          fieldDesc: `${field.fieldDesc}.${child.fieldDesc}`,\n        });\n      }\n    }\n  }\n  return result;\n}\n\nfunction findFieldByName(fields: OutputFieldOption[], fieldName: string): OutputFieldOption | undefined {\n  for (const f of fields) {\n    if (f.fieldName === fieldName) return f;\n    if (f.children) {\n      const found = findFieldByName(f.children, fieldName);\n      if (found) return found;\n    }\n  }\n  return undefined;\n}\n\n\nconst VALID_TYPE_MAP: Partial<Record<FieldType, Set<FieldType>>> = {\n  'text': new Set(['text', 'textarea']),\n  'number': new Set(['text', 'textarea']),\n}\n\nconst EMPTY_SET = new Set();\n\nfunction filterFieldsByType(fields: OutputFieldOption[], targetType: FieldType | ''): OutputFieldOption[] {\n  return fields.reduce<OutputFieldOption[]>((acc, f) => {\n    const selfMatches = f.type === targetType;\n    const validTypeSet = VALID_TYPE_MAP[targetType as FieldType] ?? EMPTY_SET;\n    const generalMatches = validTypeSet.has(f.type);\n\n    const filteredChildren = f.children ? filterFieldsByType(f.children, targetType) : [];\n    if (selfMatches || generalMatches || filteredChildren.length > 0) {\n      acc.push({ ...f, children: filteredChildren.length > 0 ? filteredChildren : f.children });\n    }\n    return acc;\n  }, []);\n}\n\nexport function OutputConfigEditor({ value, onChange, sourceFields, targetFields, className }: OutputConfigEditorProps) {\n  const [dropdownTarget, setDropdownTarget] = useState<DropdownTarget>(null);\n  const [searchText, setSearchText] = useState('');\n  const [collapsedParents, setCollapsedParents] = useState<Set<string>>(new Set());\n\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-output-config-portal');\n\n  const sourceOptions = sourceFields ? outputParamsToOptions(sourceFields) : [];\n  const targetOptions = targetFields ? fieldsToOptions(targetFields) : [];\n\n  const handleDropdownOpenChange = useCallback((index: number, field: 'source' | 'target', open: boolean) => {\n    if (open) {\n      setDropdownTarget({ index, field });\n      setSearchText('');\n      setCollapsedParents(new Set());\n    } else {\n      setDropdownTarget(null);\n      setSearchText('');\n      setCollapsedParents(new Set());\n    }\n  }, []);\n\n  const handleAdd = useCallback(() => {\n    onChange?.([...value, { sourceField: { fieldName: '', fieldDesc: '' }, targetField: { fieldName: '', fieldDesc: '' } }]);\n  }, [value, onChange]);\n\n  const handleDelete = useCallback((index: number) => {\n    onChange?.(value.filter((_, i) => i !== index));\n  }, [value, onChange]);\n\n  const handleSelectSourceField = useCallback((index: number, field: OutputFieldOption) => {\n    const newValue = [...value];\n    const newItem = { ...newValue[index], sourceField: { fieldName: field.fieldName, fieldDesc: field.fieldDesc } };\n    if (newItem.targetField.fieldName) {\n      const targetOption = findFieldByName(targetOptions, newItem.targetField.fieldName);\n      if (targetOption && targetOption.type !== field.type) {\n        newItem.targetField = { fieldName: '', fieldDesc: '' };\n      }\n    }\n    newValue[index] = newItem;\n    onChange?.(newValue);\n    setDropdownTarget(null);\n    setSearchText('');\n  }, [value, onChange, targetOptions]);\n\n  const handleSelectTargetField = useCallback((index: number, field: OutputFieldOption) => {\n    const newValue = [...value];\n    newValue[index] = { ...newValue[index], targetField: { fieldName: field.fieldName, fieldDesc: field.fieldDesc } };\n    onChange?.(newValue);\n    setDropdownTarget(null);\n    setSearchText('');\n  }, [value, onChange]);\n\n  const toggleParent = useCallback((fieldName: string) => {\n    setCollapsedParents(prev => {\n      const next = new Set(prev);\n      if (next.has(fieldName)) {\n        next.delete(fieldName);\n      } else {\n        next.add(fieldName);\n      }\n      return next;\n    });\n  }, []);\n\n  const matchSearch = (text: string) =>\n    !searchText || text?.toLowerCase().includes(searchText.toLowerCase());\n\n  const filterFields = (fields: OutputFieldOption[]): OutputFieldOption[] =>\n    fields.reduce<OutputFieldOption[]>((acc, f) => {\n      const selfMatches = matchSearch(f.fieldDesc) || matchSearch(f.fieldName);\n      const filteredChildren = f.children ? filterFields(f.children) : [];\n      if (selfMatches || filteredChildren.length > 0) {\n        acc.push({ ...f, children: filteredChildren.length > 0 ? filteredChildren : f.children });\n      }\n      return acc;\n    }, []);\n\n  const flatSourceFields = flattenSourceFields(sourceOptions);\n  const filteredSourceFields = flatSourceFields.filter(\n    (f) => (matchSearch(f.fieldDesc) || matchSearch(f.fieldName)) && f.type !== 'subform'\n  );\n\n  const searchedTargetFields = filterFields(targetOptions);\n\n  const fieldRowCls = cn(\n    'bg-white border border-[#e0e0e0] rounded-[4px] h-[34px] px-[10px] py-[7px]',\n    'flex items-center min-w-0',\n    'text-[14px] text-[#030303] leading-normal',\n    'hover:border-[#0265ff]',\n    transCls,\n  );\n\n  const isDropdownOpen = (index: number, field: 'source' | 'target') =>\n    dropdownTarget?.index === index && dropdownTarget?.field === field;\n\n  if (value.length === 0) {\n    return (\n      <div className={className}>\n        <button\n          type=\"button\"\n          onClick={handleAdd}\n          className={cn(\n            'inline-flex items-center gap-[6px]',\n            'bg-transparent border-0 cursor-pointer p-0',\n            'text-[#0265ff] text-[14px] leading-normal',\n            'hover:opacity-80',\n            transCls,\n          )}\n        >\n          <PlusIcon />\n          <span>添加出参名称</span>\n        </button>\n      </div>\n    );\n  }\n\n  return (\n    <div ref={setTriggerRef} className={cn(\n      'bg-[#f5f5f5] border border-[#e0e0e0] border-dashed rounded-[4px] p-[10px]',\n      'flex flex-col gap-[10px]',\n      className,\n    )}>\n      {value.map((item, index) => {\n        const selectedSourceType = item.sourceField.fieldName\n          ? flatSourceFields.find(f => f.fieldName === item.sourceField.fieldName)?.type\n          : undefined;\n        const rowTargetFields = selectedSourceType\n          ? filterFieldsByType(searchedTargetFields, selectedSourceType)\n          : searchedTargetFields;\n        return (\n        <div key={index} className=\"flex gap-[10px] items-center\">\n          {/* Source field selector (JSON output field) */}\n          <Popover open={isDropdownOpen(index, 'source')} onOpenChange={(open) => handleDropdownOpenChange(index, 'source', open)}>\n            <PopoverTrigger asChild>\n              <button\n                type=\"button\"\n                className={cn(\n                  fieldRowCls,\n                  'w-full justify-between cursor-pointer',\n                  isDropdownOpen(index, 'source') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',\n                )}\n              >\n                <span className=\"text-[14px] text-[#030303] leading-normal truncate\">\n                  {item.sourceField.fieldDesc || <span className=\"text-[#999]\">请选择字段</span>}\n                </span>\n                <CaretIcon className={cn(\n                  'shrink-0 text-[#666]',\n                  isDropdownOpen(index, 'source') && 'rotate-180',\n                  transCls,\n                )} />\n              </button>\n            </PopoverTrigger>\n            <PopoverContent\n              align=\"start\"\n              sideOffset={4}\n              portalContainer={portalContainer}\n              className=\"w-[216px] rounded-[4px] p-[4px] shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]\"\n            >\n              <div className=\"relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]\">\n                <span className=\"absolute left-[10px] top-1/2 -translate-y-1/2\">\n                  <SearchIcon />\n                </span>\n                <input\n                  type=\"text\"\n                  value={searchText}\n                  onChange={e => setSearchText(e.target.value)}\n                  placeholder=\"搜索\"\n                  className={cn(\n                    'w-full h-[34px] pl-[32px] pr-[10px]',\n                    'text-[14px] text-[#030303] leading-normal outline-none',\n                    'bg-transparent border-0 rounded-[4px]',\n                    'placeholder:text-[#999]',\n                  )}\n                />\n              </div>\n              <div className=\"max-h-[210px] overflow-auto\">\n                {filteredSourceFields.map((field) => (\n                  <button\n                    key={field.fieldName}\n                    type=\"button\"\n                    onClick={() => handleSelectSourceField(index, field)}\n                    className={cn(\n                      'flex items-center w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',\n                      'text-[14px] text-[#030303] leading-normal',\n                      'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',\n                      item.sourceField.fieldDesc === field.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',\n                      transCls,\n                    )}\n                  >\n                    <span className=\"truncate\">{field.fieldDesc}</span>\n                  </button>\n                ))}\n                {filteredSourceFields.length === 0 && (\n                  <div className=\"px-[10px] py-[7px] text-[14px] text-[#999] leading-normal\">\n                    无匹配结果\n                  </div>\n                )}\n              </div>\n            </PopoverContent>\n          </Popover>\n\n          {/* \"设置为\" label */}\n          <div className=\"bg-[#d9d9d9] rounded-[4px] h-[34px] w-[98px] shrink-0 flex items-center justify-center\">\n            <span className=\"text-[14px] text-[#030303] leading-normal whitespace-nowrap\">设置为</span>\n          </div>\n\n          {/* Target field selector (Form field) */}\n          <Popover open={isDropdownOpen(index, 'target')} onOpenChange={(open) => handleDropdownOpenChange(index, 'target', open)}>\n            <PopoverTrigger asChild>\n              <button\n                type=\"button\"\n                className={cn(\n                  fieldRowCls,\n                  'w-full justify-between cursor-pointer',\n                  isDropdownOpen(index, 'target') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',\n                )}\n              >\n                <span className=\"text-[14px] text-[#030303] leading-normal truncate\">\n                  {item.targetField.fieldDesc || <span className=\"text-[#999]\">请选择表单字段</span>}\n                </span>\n                <CaretIcon className={cn(\n                  'shrink-0 text-[#666]',\n                  isDropdownOpen(index, 'target') && 'rotate-180',\n                  transCls,\n                )} />\n              </button>\n            </PopoverTrigger>\n            <PopoverContent\n              align=\"start\"\n              sideOffset={4}\n              portalContainer={portalContainer}\n              className=\"w-[216px] rounded-[4px] p-[4px] shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]\"\n            >\n              <div className=\"relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]\">\n                <span className=\"absolute left-[10px] top-1/2 -translate-y-1/2\">\n                  <SearchIcon />\n                </span>\n                <input\n                  type=\"text\"\n                  value={searchText}\n                  onChange={e => setSearchText(e.target.value)}\n                  placeholder=\"搜索\"\n                  className={cn(\n                    'w-full h-[34px] pl-[32px] pr-[10px]',\n                    'text-[14px] text-[#030303] leading-normal outline-none',\n                    'bg-transparent border-0 rounded-[4px]',\n                    'placeholder:text-[#999]',\n                  )}\n                />\n              </div>\n              <div className=\"max-h-[210px] overflow-auto\">\n                {rowTargetFields.map((field) => {\n                  const isParent = field.children && field.children.length > 0;\n                  const isCollapsed = collapsedParents.has(field.fieldName);\n\n                  return (\n                    <div key={field.fieldName}>\n                      {isParent ? (\n                        <button\n                          type=\"button\"\n                          onClick={() => toggleParent(field.fieldName)}\n                          className={cn(\n                            'flex items-center gap-[6px] w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',\n                            'text-[14px] text-[#030303] leading-normal',\n                            'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',\n                            transCls,\n                          )}\n                        >\n                          <ExpandArrowIcon className={cn(\n                            'shrink-0 text-[#999]',\n                            !isCollapsed && 'rotate-90',\n                            transCls,\n                          )} />\n                          <span className=\"truncate\">{field.fieldDesc}</span>\n                        </button>\n                      ) : (\n                        <button\n                          type=\"button\"\n                          onClick={() => handleSelectTargetField(index, field)}\n                          className={cn(\n                            'flex items-center w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',\n                            'text-[14px] text-[#030303] leading-normal',\n                            'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',\n                            item.targetField.fieldName === field.fieldName && 'bg-[#EFF0F6] text-[#0265ff]',\n                            transCls,\n                          )}\n                        >\n                          <span className=\"truncate\">{field.fieldDesc}</span>\n                        </button>\n                      )}\n                      {isParent && !isCollapsed && field.children!.map((child) => (\n                        <button\n                          key={child.fieldName}\n                          type=\"button\"\n                          onClick={() => handleSelectTargetField(index, child)}\n                          className={cn(\n                            'flex items-center w-full pl-[34px] pr-[10px] py-[7px] h-[34px] rounded-[4px]',\n                            'text-[14px] text-[#030303] leading-normal',\n                            'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',\n                            item.targetField.fieldName === child.fieldName && 'bg-[#EFF0F6] text-[#0265ff]',\n                            transCls,\n                          )}\n                        >\n                          <span className=\"truncate\">{child.fieldDesc}</span>\n                        </button>\n                      ))}\n                    </div>\n                  );\n                })}\n                {rowTargetFields.length === 0 && (\n                  <div className=\"px-[10px] py-[7px] text-[14px] text-[#999] leading-normal\">\n                    无匹配结果\n                  </div>\n                )}\n              </div>\n            </PopoverContent>\n          </Popover>\n\n          {/* Delete button */}\n          <button\n            type=\"button\"\n            onClick={() => handleDelete(index)}\n            className=\"shrink-0 cursor-pointer bg-transparent border-0 p-0\"\n          >\n            <span className=\"inline-flex items-center justify-center size-[16px] text-[#666] hover:text-[#FF4D4F] [&_svg_path]:fill-[#666] [&_svg_path]:hover:fill-[#FF4D4F]\">\n              <TrashIcon />\n            </span>\n          </button>\n        </div>\n        );\n      })}\n\n      <button\n        type=\"button\"\n        onClick={handleAdd}\n        className={cn(\n          'inline-flex items-center gap-[6px] w-fit',\n          'bg-transparent border-0 cursor-pointer p-0',\n          'text-[#0265ff] text-[14px] leading-normal',\n          'hover:opacity-80',\n          transCls,\n        )}\n      >\n        <PlusIcon />\n        <span>添加出参名称</span>\n      </button>\n    </div>\n  );\n}\n","import { cn } from '../lib/utils';\nimport { transCls } from '../const/ui';\nimport { ScrollArrowDownIcon } from './bs-icons';\n\nexport interface ScrollToBottomProps {\n  onClick?: () => void;\n  className?: string;\n}\n\nexport const ScrollToBottomBtn = ({ onClick, className }: ScrollToBottomProps) => {\n  return (\n    <button\n      type=\"button\"\n      onClick={onClick}\n      className={cn(\n        'inline-flex items-center justify-center',\n        'w-[36px] h-[36px] rounded-full',\n        'bg-white text-[#666] shadow-[0px_0px_14px_0px_rgba(0,0,0,0.1)]',\n        'hover:shadow-[0px_14px_14px_0px_rgba(0,0,0,0.14)]',\n        'cursor-pointer hover:text-[#333] aspect-square',\n        transCls,\n        className\n      )}\n    >\n      <ScrollArrowDownIcon />\n    </button>\n  );\n};\n","import { cn } from '../lib/utils';\n\nexport interface SplitLineProps {\n  className?: string;\n}\n\nexport const SplitLine = ({ className }: SplitLineProps) => {\n  return <div className={cn('h-[1px] w-full bg-[#E0E0E0]', className)} />;\n};\n","import * as React from 'react';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\n\nimport { cn } from '../lib/utils';\nimport { BsTooltip } from './tooltip';\n\nexport interface TabRadioOption {\n  value: string;\n  label: React.ReactNode;\n  tooltips?: string;\n  className?: string;\n}\n\nexport interface TabRadioGroupProps extends Omit<\n  React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>,\n  'children'\n> {\n  options: TabRadioOption[];\n}\n\nconst TabRadioGroup = React.forwardRef<\n  React.ElementRef<typeof RadioGroupPrimitive.Root>,\n  TabRadioGroupProps\n>(({ className, options, ...props }, ref) => {\n  return (\n    <RadioGroupPrimitive.Root\n      ref={ref}\n      className={cn(\n        'flex flex-col items-start justify-center p-[2px] rounded-[4px] bg-[#EFF0F6]',\n        className\n      )}\n      {...props}\n    >\n      <div className=\"flex gap-[2px] items-center w-full\">\n        {options.map((option) => (\n          <TabRadioItem\n            key={option.value}\n            value={option.value}\n            tooltips={option.tooltips}\n            className={option.className}\n          >\n            {option.label}\n          </TabRadioItem>\n        ))}\n      </div>\n    </RadioGroupPrimitive.Root>\n  );\n});\nTabRadioGroup.displayName = 'TabRadioGroup';\n\ninterface TabRadioItemProps extends React.ComponentPropsWithoutRef<\n  typeof RadioGroupPrimitive.Item\n> {\n  children: React.ReactNode;\n  tooltips?: string;\n  className?: string;\n}\n\nconst TabRadioItem = React.forwardRef<\n  React.ElementRef<typeof RadioGroupPrimitive.Item>,\n  TabRadioItemProps\n>(({ className, children, tooltips, ...props }, ref) => {\n  return (\n    <RadioGroupPrimitive.Item\n      ref={ref}\n      className={cn(\n        'flex-1 h-[30px] flex items-center justify-center px-[10px] py-[7px] rounded-[4px] text-[14px] text-[#121111] cursor-pointer',\n        'border border-solid border-[#EFF0F6] bg-transparent',\n        'transition-all ease-out duration-200',\n        'outline-none',\n        'hover:text-[#121111] hover:border-[#E0E0E0] hover:bg-white',\n        'data-[state=checked]:text-[#0265FF] data-[state=checked]:border-[#E0E0E0] data-[state=checked]:bg-white',\n        className\n      )}\n      {...props}\n    >\n      {tooltips ? <BsTooltip content={tooltips}>{children}</BsTooltip> : children}\n    </RadioGroupPrimitive.Item>\n  );\n});\nTabRadioItem.displayName = 'TabRadioItem';\n\nexport { TabRadioGroup, TabRadioItem };\n","export interface UserTextMsgBubbleProps {\n  text?: string;\n  children?: string;\n}\n\nexport const UserTextMsgBubble = ({ text, children }: UserTextMsgBubbleProps) => {\n  return (\n    <div\n      className=\"px-2.5 py-[7px] text-[#0265FF] text-[14px] w-fit\"\n      style={{\n        borderRadius: `10px 0 10px 10px`,\n        wordWrap: 'break-word',\n        background: `linear-gradient(180deg, #DBE9FF 0%, #E9FFFD 100%)`,\n      }}\n    >\n      {text || children}\n    </div>\n  );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface UseResizableWidthOptions {\n  /** 宽度范围 [min, max]，单位 px */\n  range: [number, number];\n  /** 初始宽度，未指定时取 range 上限 */\n  initialWidth?: number;\n  /** 反转拖拽方向：拖拽鼠标向右时宽度减小而非增大 */\n  invertDrag?: boolean;\n  /** localStorage 键名，用于持久化用户拖拽偏好。提供后会在 mount 时读取、drag end 时保存 */\n  storageKey?: string;\n}\n\ninterface UseResizableWidthResult {\n  /** 当前宽度 */\n  width: number;\n  /** 拖拽手柄的 onMouseDown 处理器 */\n  handleMouseDown: (e: React.MouseEvent) => void;\n  /** 是否正在拖拽 */\n  isDragging: boolean;\n  /** 是否到达边缘（最小或最大值） */\n  isAtEdge: boolean;\n}\n\n/**\n * 支持通过拖拽调整宽度的 Hook\n * @param options 配置项：宽度范围、初始宽度\n * @returns 当前宽度、拖拽处理器、拖拽状态\n */\nexport const useResizableWidth = ({\n  range,\n  initialWidth,\n  invertDrag,\n  storageKey,\n}: UseResizableWidthOptions): UseResizableWidthResult => {\n  const [minWidth, maxWidth] = range;\n\n  const resolveInitialWidth = (): number => {\n    if (storageKey) {\n      try {\n        const stored = localStorage.getItem(storageKey);\n        if (stored !== null) {\n          const parsed = Number(stored);\n          if (!Number.isNaN(parsed) && parsed >= minWidth && parsed <= maxWidth) {\n            return parsed;\n          }\n        }\n      } catch { /* localStorage unavailable */ }\n    }\n    return initialWidth ?? maxWidth;\n  };\n\n  const [width, setWidth] = useState<number>(resolveInitialWidth);\n  const [isDragging, setIsDragging] = useState(false);\n\n  const stateRef = useRef({\n    startX: 0,\n    startWidth: 0,\n  });\n\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      const delta = e.clientX - stateRef.current.startX;\n      const adjustedDelta = invertDrag ? -delta : delta;\n      const newWidth = Math.min(\n        Math.max(stateRef.current.startWidth + adjustedDelta, minWidth),\n        maxWidth\n      );\n\n      setWidth(newWidth);\n    },\n    [minWidth, maxWidth, invertDrag]\n  );\n\n  const hasDraggedRef = useRef(false);\n\n  const handleMouseUp = useCallback(() => {\n    setIsDragging(false);\n    hasDraggedRef.current = true;\n    document.body.style.userSelect = '';\n    document.removeEventListener('mousemove', handleMouseMove);\n    document.removeEventListener('mouseup', handleMouseUp);\n\n    window.dispatchEvent(new Event('resize'));\n    document.body.style.cursor = '';\n  }, [handleMouseMove]);\n\n  // Persist width to localStorage after drag ends\n  useEffect(() => {\n    if (!isDragging && hasDraggedRef.current && storageKey) {\n      try { localStorage.setItem(storageKey, String(width)); } catch { /* unavailable */ }\n    }\n  }, [isDragging, storageKey, width]);\n\n  const handleMouseDown = useCallback(\n    (e: React.MouseEvent) => {\n      setIsDragging(true);\n      stateRef.current = {\n        startX: e.clientX,\n        startWidth: width,\n      };\n      document.body.style.userSelect = 'none';\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n\n      document.body.style.cursor = 'col-resize'; // 设置全局拖拽光标\n    },\n    [width, handleMouseMove, handleMouseUp]\n  );\n\n  useEffect(() => {\n    return () => {\n      document.removeEventListener('mousemove', handleMouseMove);\n      document.removeEventListener('mouseup', handleMouseUp);\n      document.body.style.userSelect = '';\n\n      document.body.style.cursor = ''; // 清理光标样式\n    };\n  }, [handleMouseMove, handleMouseUp]);\n\n  const isAtEdge = width === minWidth || width === maxWidth;\n\n  return {\n    width,\n    handleMouseDown,\n    isDragging,\n    isAtEdge,\n  };\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\nexport const TRANSITION = {\n  appearing: 'width 300ms cubic-bezier(0.4,0,0.2,1), opacity 250ms cubic-bezier(0.4,0,0.2,1) 100ms',\n  hiding: 'width 350ms cubic-bezier(0.4,0,0.2,1) 60ms, opacity 200ms ease-out',\n  neutral: 'width 350ms cubic-bezier(0.4,0,0.2,1), opacity 200ms ease-out',\n} as const;\n\n/** hiding 场景最长的 transition 耗时 (width 350ms + delay 60ms)，加少量余量用于 transitionend 兜底 */\nexport const TRANSITION_FALLBACK_MS = 500;\n\ninterface UseColumnAppearOptions {\n  /** 当前列是否处于隐藏状态 */\n  hidden: boolean;\n}\n\ninterface UseColumnAppearResult {\n  /** 列是否正在执行 appear (hidden→visible) 动画 */\n  appearing: boolean;\n  /** 附加到列最外层 DOM 元素的 ref，用于监听 transitionend */\n  colRef: React.RefObject<HTMLDivElement>;\n  /** 当前适用的 transition CSS 属性，直接展开到 style={} */\n  getTransitionStyle: React.CSSProperties;\n}\n\nexport const useColumnAppear = ({ hidden }: UseColumnAppearOptions): UseColumnAppearResult => {\n  const [appearing, setAppearing] = useState(false);\n  const prevHiddenRef = useRef<boolean | null>(null);\n  const colRef = useRef<HTMLDivElement>(null);\n\n  // 检测 hidden → visible 转换，触发 appearing\n  useLayoutEffect(() => {\n    if (prevHiddenRef.current === null) {\n      prevHiddenRef.current = hidden;\n      return;\n    }\n    if (prevHiddenRef.current && !hidden) {\n      setAppearing(true);\n    }\n    prevHiddenRef.current = hidden;\n  }, [hidden]);\n\n  // transitionend 监听 + 兜底 timeout 清除 appearing\n  useLayoutEffect(() => {\n    if (!appearing) return;\n    const el = colRef.current;\n    if (!el) return;\n\n    const onTransitionEnd = (e: TransitionEvent) => {\n      if (e.propertyName === 'width') {\n        setAppearing(false);\n      }\n\n      window.dispatchEvent(new Event('resize'));\n    };\n    el.addEventListener('transitionend', onTransitionEnd);\n\n    const fallback = setTimeout(() => setAppearing(false), TRANSITION_FALLBACK_MS);\n\n    return () => {\n      el.removeEventListener('transitionend', onTransitionEnd);\n      clearTimeout(fallback);\n    };\n  }, [appearing]);\n\n  // 计算当前适用的 transition 样式\n  const willChange = hidden || appearing ? ({ willChange: 'width, opacity' } as const) : {};\n  let transitionStyle: React.CSSProperties;\n  if (appearing) {\n    transitionStyle = { transition: TRANSITION.appearing, ...willChange };\n  } else if (hidden) {\n    transitionStyle = { transition: TRANSITION.hiding, ...willChange };\n  } else {\n    transitionStyle = { transition: TRANSITION.neutral };\n  }\n\n  return { appearing, colRef, getTransitionStyle: transitionStyle };\n};\n","import { FC, useCallback, useEffect, useRef } from 'react';\nimport { useResizableWidth } from '../hooks/use-resizable-width';\nimport { useColumnAppear } from '../hooks/use-column-appear';\nimport classNames from 'classnames';\n\nexport type FullScreenPart = 'leftCol' | 'rightCol' | 'none';\n\nexport interface IOfficeContainerProps {\n    headerHeight?: number;\n\n    hideLeftCol?: boolean;\n\n    leftColWidthRange?: [number, number];\n    rightColWidthRange?: [number, number];\n\n    leftColCls?: string;\n    rightColCls?: string;\n\n    leftColHeaderElement?: React.ReactNode;\n    leftColContentElement?: React.ReactNode;\n    rightColHeaderElement?: React.ReactNode;\n    rightColContentElement?: React.ReactNode;\n\n    fullscreenPart?: FullScreenPart;\n\n    children?: React.ReactNode;\n\n    onResize?: (leftColWid: number, rightColWid: number) => void;\n\n    /** localStorage 键名，用于持久化用户拖拽的列宽偏好 */\n    storageKey?: string;\n\n    className?: string;\n}\n\n\nexport const OfficeContainer: FC<IOfficeContainerProps> = ({\n    headerHeight = 64,\n    hideLeftCol = false,\n    leftColWidthRange = [340, 500],\n    rightColWidthRange,\n    leftColCls,\n    rightColCls,\n    children,\n    leftColHeaderElement,\n    leftColContentElement,\n    rightColHeaderElement,\n    rightColContentElement,\n    fullscreenPart = 'none',\n    className,\n    onResize,\n    storageKey,\n}) => {\n    const isRightResizable = !!rightColWidthRange;\n    const activeRange = rightColWidthRange ?? leftColWidthRange;\n\n    const transitioningRef = useRef(false);\n    const mountRef = useRef(true);\n\n    const { width, handleMouseDown, isDragging } = useResizableWidth({\n        range: activeRange,\n        initialWidth: activeRange[0],\n        invertDrag: isRightResizable,\n        storageKey,\n    });\n\n    const isLeftFullscreen = fullscreenPart === 'leftCol';\n    const isRightFullscreen = fullscreenPart === 'rightCol';\n    const isFullscreen = isLeftFullscreen || isRightFullscreen;\n\n    const leftHidden = hideLeftCol || isRightFullscreen;\n    const rightHidden = isLeftFullscreen;\n\n    // ---- column appear/hide animation ----\n\n    const {\n        colRef: leftColRef,\n        getTransitionStyle: leftTransitionStyle,\n    } = useColumnAppear({ hidden: leftHidden });\n\n    const {\n        colRef: rightColRef,\n        getTransitionStyle: rightTransitionStyle,\n    } = useColumnAppear({ hidden: rightHidden });\n\n    // ---- 列宽计算：始终返回明确像素值，避免 flex 计算宽与 transition 冲突 ----\n\n    const leftColInnerRef = useRef<HTMLDivElement>(null);\n    const rightColInnerRef = useRef<HTMLDivElement>(null);\n\n    const getColWidth = useCallback((col: 'left' | 'right'): number | string => {\n        if (col === 'left') {\n            if (hideLeftCol || isRightFullscreen) return 0;\n            if (isLeftFullscreen) return '100%';\n            if (isRightResizable) {\n                if (leftColInnerRef.current) return leftColInnerRef.current.offsetWidth;\n                return `calc(100% - ${width}px)`;\n            }\n            return width;\n        }\n        // right col\n        if (isLeftFullscreen) return 0;\n        if (isRightFullscreen) return '100%';\n        if (isRightResizable) return width;\n        if (rightColInnerRef.current) return rightColInnerRef.current.offsetWidth;\n        return `calc(100% - ${width}px)`;\n    }, [hideLeftCol, isLeftFullscreen, isRightFullscreen, isRightResizable, width]);\n\n    useEffect(() => {\n        if (!onResize || transitioningRef.current) return;\n        const raf = requestAnimationFrame(() => {\n            const leftW = leftColRef.current?.offsetWidth ?? 0;\n            const rightW = rightColRef.current?.offsetWidth ?? 0;\n            onResize(leftW, rightW);\n        });\n        return () => cancelAnimationFrame(raf);\n    }, [width, fullscreenPart, hideLeftCol, isRightResizable, onResize]);\n\n    // Set guard when fullscreen/hide triggers CSS transitions. Skip mount.\n    useEffect(() => {\n        if (mountRef.current) {\n            mountRef.current = false;\n            return;\n        }\n        transitioningRef.current = true;\n    }, [fullscreenPart, hideLeftCol]);\n\n    // Fire onResize after CSS width transitions complete\n    useEffect(() => {\n        if (!onResize) return;\n\n        let resolved = false;\n        const onWidthTransitionEnd = (e: TransitionEvent) => {\n            if (e.propertyName !== 'width' || resolved) return;\n            resolved = true;\n            transitioningRef.current = false;\n            const leftW = leftColRef.current?.offsetWidth ?? 0;\n            const rightW = rightColRef.current?.offsetWidth ?? 0;\n            onResize(leftW, rightW);\n        };\n\n        const leftEl = leftColRef.current;\n        const rightEl = rightColRef.current;\n\n        leftEl?.addEventListener('transitionend', onWidthTransitionEnd);\n        rightEl?.addEventListener('transitionend', onWidthTransitionEnd);\n\n        const fallback = setTimeout(() => {\n            if (resolved) return;\n            resolved = true;\n            transitioningRef.current = false;\n            const leftW = leftColRef.current?.offsetWidth ?? 0;\n            const rightW = rightColRef.current?.offsetWidth ?? 0;\n            onResize(leftW, rightW);\n        }, 500);\n\n        return () => {\n            leftEl?.removeEventListener('transitionend', onWidthTransitionEnd);\n            rightEl?.removeEventListener('transitionend', onWidthTransitionEnd);\n            clearTimeout(fallback);\n        };\n    }, [fullscreenPart, hideLeftCol, onResize]);\n\n    const borderColorCls = 'border-[#0265fc]';\n\n    // 全屏时补全 shrink-0，确保 width: 100% 或 width: 0 不会被 flex 容器挤压\n    const leftFlexCls = isFullscreen\n        ? 'shrink-0'\n        : isRightResizable\n            ? 'flex-1'\n            : 'shrink-0';\n    const rightFlexCls = isFullscreen\n        ? 'shrink-0'\n        : isRightResizable\n            ? 'shrink-0'\n            : 'flex-1';\n\n    // 滚动条使用 scrollbar-gutter: stable 预留空间，避免 overflow 切换时布局抖动\n    const contentCls = 'flex-1 min-h-0 overflow-auto w-full';\n    const contentStyle: React.CSSProperties = { /*scrollbarGutter: 'stable' */};\n\n    return (\n        <div className={classNames(\"relative h-full w-full flex overflow-hidden\", className)}>\n            {/* fullscreen overlay */}\n            {children && (\n                <div>\n                    {children}\n                </div>\n            )}\n\n            {/* left col */}\n            <div\n                ref={leftColRef}\n                className={classNames(\"h-full flex flex-col relative office-left-col\", leftColCls, leftFlexCls, {\n                    \"pointer-events-none\": hideLeftCol || isRightFullscreen,\n                    \"opacity-0\": hideLeftCol || isRightFullscreen,\n                    \"overflow-hidden\": /* isRightFullscreen */ true,\n                })}\n                style={{ ...leftTransitionStyle, width: getColWidth('left'), ...(isDragging ? { transition: 'none' } : {}) }}\n            >\n                <div\n                    ref={leftColInnerRef}\n                    className=\"shrink-0 w-full overflow-hidden\"\n                    style={{ height: headerHeight, background: '#fff' }}\n                >\n                    {leftColHeaderElement}\n                </div>\n                <div className={contentCls} style={contentStyle}>\n                    {leftColContentElement}\n                </div>\n                {/* resizer */}\n                {!isFullscreen && (\n                    <div\n                        className={classNames(`h-full w-5 cursor-col-resize z-10 flex justify-center group absolute top-0 right-0 hover:border-r hover:${borderColorCls}`, {\n                            [`border-r ${borderColorCls}`]: isDragging,\n                        })}\n                        onMouseDown={handleMouseDown}\n                    />\n                )}\n            </div>\n\n            {/* right col */}\n            <div\n                ref={rightColRef}\n                className={classNames(\"h-full flex flex-col min-w-0 office-right-col\", rightColCls, rightFlexCls, {\n                    \"pointer-events-none\": isLeftFullscreen,\n                    \"opacity-0\": isLeftFullscreen,\n                    \"overflow-hidden\": isLeftFullscreen,\n                })}\n                style={{ ...rightTransitionStyle, width: getColWidth('right'), ...(isDragging ? { transition: 'none' } : {}) }}\n            >\n                <div\n                    ref={rightColInnerRef}\n                    className=\"shrink-0 w-full\"\n                    style={{ height: headerHeight, background: \"#fff\" }}\n                >\n                    {rightColHeaderElement}\n                </div>\n                <div className={contentCls} style={contentStyle}>\n                    {rightColContentElement}\n                </div>\n            </div>\n        </div>\n    );\n};\n","import { cn } from '../lib/utils';\nimport { WarningImgUrl } from '../const/ui';\n\nexport interface WarningMessageProps {\n  message?: string;\n  className?: string;\n}\n\nexport const WarningMessage = ({\n  message = '程序错误，请刷新页面重试',\n  className,\n}: WarningMessageProps) => {\n  return (\n    <div className={cn('flex flex-col items-center gap-[10px]', className)}>\n      <div\n        className=\"bg-no-repeat bg-center\"\n        style={{\n          backgroundImage: WarningImgUrl,\n          backgroundSize: '100% 100%',\n          width: 120,\n          height: 77,\n        }}\n      />\n      <p className=\"text-[12px] text-[#999] leading-normal\">{message}</p>\n    </div>\n  );\n};\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import { FIELD_ICON_CODE_MAP } from '../const/ui';\nimport { FieldType } from '@baishuyun/types';\nimport { FontIcon } from './font-icon';\nimport { FormulasIcon } from './bs-icons';\n\nexport const FieldIcon = ({ type }: { type: FieldType }) => {\n  const code = FIELD_ICON_CODE_MAP[type] || 'unknown';\n  if (type === 'formula') {\n    return <FormulasIcon />;\n  }\n\n  return <FontIcon code={code} />;\n};\n","import { memo, useEffect, useRef, useState } from 'react';\nimport { type FieldType, IField, type IFieldOption as Option } from '@baishuyun/types';\nimport { FieldTypeNameMap } from '../const/ui';\nimport LineChecker from './line-checker';\nimport { OptionItem } from './option-item';\nimport { FieldIcon } from './field-icon';\n\ntype Field = IField;\n\nexport interface FieldCheckerProps {\n  field: IField;\n  isSubField?: boolean;\n  disabled?: boolean;\n  icon?: React.ReactNode;\n  onChange?: (checked: boolean, field: Field, parentFieldName?: string, index?: number) => void;\n  value?: unknown;\n  checked?: boolean;\n  streaming?: boolean;\n  confirmed?: boolean;\n  onLoaded?: (field: Field) => void;\n}\n\nexport const FieldChecker = memo(\n  ({\n    field,\n    disabled,\n    isSubField,\n    onChange,\n    onLoaded,\n    icon,\n    value,\n    checked,\n    streaming,\n    confirmed,\n  }: FieldCheckerProps) => {\n    const { widget, label } = field;\n    if (!widget) {\n      return null;\n    }\n\n    const { type } = widget;\n\n    const t = type as FieldType;\n\n    if (!FieldTypeNameMap.hasOwnProperty(type)) {\n      return null;\n    }\n\n    const typeDesc = FieldTypeNameMap[t] || FieldTypeNameMap.unknown;\n\n    const isSubForm = type === 'subform';\n\n    const items = isSubForm ? [] : (widget.items as Option[]) || [];\n\n    // --- subform sub-field state management ---\n    const subFields = isSubForm ? (widget.items as Field[]) : [];\n    const [subCheckedMap, setSubCheckedMap] = useState<Record<number, boolean>>(() => {\n      const result: Record<number, boolean> = {};\n      subFields.forEach((_, i) => {\n        result[i] = true;\n      });\n      return result;\n    });\n\n    // When parent checked prop changes from outside, sync all sub-fields\n    const prevChecked = useRef(checked);\n    useEffect(() => {\n      if (isSubForm && checked !== prevChecked.current) {\n        prevChecked.current = checked;\n        if (checked !== undefined) {\n          const result: Record<number, boolean> = {};\n          subFields.forEach((_, i) => {\n            result[i] = checked;\n          });\n          setSubCheckedMap(result);\n        }\n      }\n    }, [checked, isSubForm, subFields.length]);\n\n    const handleSubFieldChange = (subChecked: boolean, subField: Field, index: number) => {\n      setSubCheckedMap((prev) => {\n        const next = { ...prev, [index]: subChecked };\n        // If all sub-fields are now unchecked, uncheck the parent subform\n        const allChecked = Object.values(next).every(Boolean);\n        if (allChecked) {\n          onChange?.(true, field);\n        }\n\n        const allUnchecked = Object.values(next).every((v) => v === false);\n        if (allUnchecked) {\n          onChange?.(false, field);\n        }\n\n        return next;\n      });\n      onChange?.(subChecked, subField, field.widget?.widgetName, index);\n    };\n    // --- end subform state management ---\n\n    useEffect(() => {\n      onLoaded?.(field);\n    }, []);\n\n    const handleCheck = (newChecked: boolean) => {\n      onChange?.(newChecked, field);\n    };\n\n    const extraPadding = isSubField ? 'pl-[38px]' : '';\n\n    // 表单填充\n    if (value) {\n      return (\n        <LineChecker\n          title={label}\n          disabled={disabled}\n          checked={checked}\n          defaultChecked={true}\n          onCheckedChange={handleCheck}\n          icon={icon}\n          className={extraPadding}\n          shortDesc={value as string}\n        />\n      );\n    }\n\n    return (\n      <>\n        <LineChecker\n          streaming={streaming}\n          confirmed={confirmed}\n          title={label}\n          disabled={disabled}\n          checked={checked}\n          defaultChecked={true}\n          onCheckedChange={handleCheck}\n          icon={icon}\n          shortDesc={typeDesc}\n          className={extraPadding}\n          extra={\n            items.length ? (\n              <>\n                {items.map(({ value, text, color }) => (\n                  <OptionItem key={value} color={color ? 'white' : undefined} bgColor={color}>\n                    {text}\n                  </OptionItem>\n                ))}\n              </>\n            ) : null\n          }\n        />\n        {isSubForm\n          ? subFields.map((subField: Field, index: number) => (\n              <FieldChecker\n                confirmed={confirmed}\n                streaming={streaming}\n                key={subField.label}\n                isSubField={true}\n                disabled={disabled}\n                checked={subCheckedMap[index]}\n                field={subField}\n                icon={<FieldIcon type={subField.widget?.type!} />}\n                onChange={(subChecked) => {\n                  handleSubFieldChange(subChecked, subField, index);\n                }}\n              />\n            ))\n          : null}\n      </>\n    );\n  },\n  (p1, p2) => {\n    return (\n      p1.field?.label === p2.field?.label &&\n      p1.disabled === p2.disabled &&\n      p1.checked === p2.checked &&\n      p1.confirmed === p2.confirmed &&\n      p1.streaming === p2.streaming\n    );\n  }\n);\n","import { memo, useCallback, useEffect, useState } from 'react';\nimport { FieldType, IField } from '@baishuyun/types';\nimport { FieldTypeNameMap } from '../const/ui';\nimport { toHumanReadable } from '../lib/utils';\nimport { Collapsible, CollapsibleContent } from './collapsible';\nimport LineChecker from './line-checker';\n\nconst Checker = ({\n  disabled,\n  onCheckedChange,\n\n  label,\n  val,\n  streaming,\n  readonly,\n}: {\n  label: string;\n  val: string;\n  onCheckedChange: (v: boolean) => void;\n  disabled?: boolean;\n  desc: string;\n  readonly?: boolean;\n  streaming?: boolean;\n}) => {\n  return (\n    <LineChecker\n      streaming={streaming}\n      readonly={readonly}\n      title={label}\n      disabled={disabled}\n      defaultChecked={true}\n      onCheckedChange={onCheckedChange}\n      className=\"pl-9\"\n      shortDesc={val}\n    />\n  );\n};\n\nconst SubFieldChecker = memo(\n  ({\n    field,\n    readonly,\n    onCheckedChange,\n    streaming,\n  }: {\n    onCheckedChange: (\n      checked: boolean,\n      field: IField,\n    ) => void;\n    readonly?: boolean;\n    streaming?: boolean;\n    field: IField;\n  }) => {\n    const { widget, label } = field;\n    if (!widget) {\n      return null;\n    }\n\n    const { type, value: v } = widget;\n    const t = type as FieldType;\n    if (!FieldTypeNameMap.hasOwnProperty(t)) {\n      return null;\n    }\n\n    const value = toHumanReadable(v, t);\n\n    const typeDesc = FieldTypeNameMap[t] || FieldTypeNameMap.unknown;\n\n    const handleCheckChange = useCallback(\n      (v: boolean) => {\n        onCheckedChange(v, field);\n      },\n      [field]\n    );\n\n    useEffect(() => {\n      // 默认勾选上\n      handleCheckChange(true);\n    }, []);\n\n    return (\n      <Checker\n        streaming={streaming}\n        readonly={readonly}\n        desc={typeDesc}\n        label={label}\n        val={value as string}\n        onCheckedChange={handleCheckChange}\n      />\n    );\n  },\n  (p1, p2) => {\n    const isNameEqual =\n      p1.field.widget?.widgetName === p2.field.widget?.widgetName &&\n      p1.readonly === p2.readonly &&\n      p1.streaming === p2.streaming;\n    return isNameEqual;\n  }\n);\n\ntype F = IField;\n\ninterface generatedField {\n  label: string;\n  fieldName: string;\n  fieldType: FieldType;\n  value: any;\n}\n\ntype onSubformFieldChangeParam = {\n  checked: boolean;\n  field: F;\n  parentFieldName: string;\n  row?: number;\n  col?: number;\n};\n\n/**\n * 专门渲染子表单下的字段勾选\n */\nexport const SubformFieldsValueChecker = ({\n  subformField,\n  onChange,\n  streaming,\n  readonly,\n}: {\n  onChange: (p: onSubformFieldChangeParam) => void;\n  subformField: IField;\n  streaming?: boolean;\n  readonly?: boolean;\n}) => {\n  const subformValue = subformField.widget?.value;\n  if (!Array.isArray(subformValue) || subformValue.length === 0) {\n    return null;\n  }\n\n  const subformRecords = subformValue as generatedField[][];\n\n  // 默认展开\n  const [openAll, setOpenAll] = useState(true);\n\n  return (\n    <Collapsible open={openAll} onOpenChange={setOpenAll}>\n      <CollapsibleContent>\n        {subformRecords.map((rowData: generatedField[], row: number) => {\n          if (!rowData || !rowData.length) {\n            return null;\n          }\n          return (\n            <Collapsible defaultOpen={true} key={row}>\n              <CollapsibleContent>\n                {rowData.map((fData: generatedField, col: number) => {\n                  return (\n                    <SubFieldChecker\n                      readonly={readonly}\n                      streaming={streaming}\n                      field={{\n                        label: fData.label,\n                        widget: {\n                          widgetName: fData.fieldName,\n                          type: fData.fieldType,\n                          value: fData.value,\n                        },\n                      }}\n                      onCheckedChange={(checked: boolean, field: F) => {\n                        onChange({\n                          checked,\n                          field,\n                          row,\n                          col,\n                          parentFieldName: subformField.widget?.widgetName ?? \"\",\n                        });\n                      }}\n                    />\n                  );\n                })}\n              </CollapsibleContent>\n            </Collapsible>\n          );\n        })}\n      </CollapsibleContent>\n    </Collapsible>\n  );\n};\n","import { memo, useEffect } from 'react';\nimport { FieldType, IField } from '@baishuyun/types';\nimport { FieldTypeNameMap } from '../const/ui';\nimport { isSubformFieldEqual, toHumanReadable } from '../lib/utils';\nimport { SubformFieldsValueChecker } from './subform-fields-value-checker';\nimport LineChecker from './line-checker';\n\ntype Field = IField;\n\nexport interface FieldValueCheckerProps {\n  field: IField;\n  isSubField?: boolean;\n  disabled?: boolean;\n  readonly?: boolean;\n  onChange?: (checked: boolean, field: Field, parentFieldName?: string, index?: number) => void;\n  onLoaded?: (field: Field) => void;\n  streaming?: boolean;\n}\n\nexport const FieldValueChecker = memo(\n  ({\n    field,\n    disabled,\n    isSubField,\n    readonly,\n    streaming,\n    onChange,\n    onLoaded,\n  }: FieldValueCheckerProps) => {\n    const { widget, label } = field;\n    if (!widget) {\n      return null;\n    }\n\n    const { type, value: v } = widget;\n\n    const t = type as FieldType;\n\n    const value = toHumanReadable(v, t);\n\n    if (!FieldTypeNameMap.hasOwnProperty(type)) {\n      return null;\n    }\n\n    const isSubForm = type === 'subform';\n\n    useEffect(() => {\n      onLoaded?.(field);\n    }, []);\n\n    const handleCheck = (checked: boolean) => {\n      onChange?.(checked, field);\n    };\n\n    const extraPadding = isSubField ? 'pl-6' : '';\n\n    return (\n      <>\n        <LineChecker\n          streaming={streaming}\n          title={label}\n          disabled={disabled}\n          defaultChecked={true}\n          onCheckedChange={handleCheck}\n          className={extraPadding}\n          readonly={readonly}\n          shortDesc={isSubForm ? '' : (value as string)}\n        />\n        {isSubForm && (\n          <SubformFieldsValueChecker\n            readonly={readonly}\n            subformField={field}\n            onChange={(detail) => {\n              onChange?.(detail.checked, detail.field, detail.parentFieldName, detail.row);\n            }}\n            streaming={streaming}\n          />\n        )}\n      </>\n    );\n  },\n  (p1, p2) => {\n    // 标签一致\n    const isLabelEqual = p1.field?.label === p2.field?.label;\n    if (!isLabelEqual) {\n      return false;\n    }\n\n    // id 一致\n    const isFieldNameEqual = p1.field?.widget?.widgetName === p2.field?.widget?.widgetName;\n    if (!isFieldNameEqual) {\n      return false;\n    }\n\n    // 禁用状态一致\n    const isDisabledEqual = p1.disabled === p2.disabled;\n    if (!isDisabledEqual) {\n      return false;\n    }\n\n    // 只读状态一致\n    const isReadonlyEqual = p1.readonly === p2.readonly;\n    if (!isReadonlyEqual) {\n      return false;\n    }\n\n    // 流式状态一致\n    const isStreamingEqual = p1.streaming === p2.streaming;\n    if (!isStreamingEqual) {\n      return false;\n    }\n\n    // 进一步比较子表单下的字段\n    return isSubformFieldEqual(p1?.field, p2?.field);\n  }\n);\n","import {\n  forwardRef,\n  memo,\n  ReactNode,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useState,\n} from 'react';\nimport { CollapsibleTxtMsg } from './collapsible-txt-msg';\nimport { FieldChecker, FieldCheckerProps } from './field-checker';\nimport { EditIcon, LetterAIcon } from './bs-icons';\nimport { FieldValueChecker, FieldValueCheckerProps } from './field-value-checker';\nimport { SquareChecker } from './square-checker';\nimport { cn } from '../lib/utils';\n\nexport interface FieldCheckerListMsgRef {\n  getCheckedFieldsLength: () => number;\n}\n\nexport const FieldCheckerListMsg = memo(\n  forwardRef<\n    FieldCheckerListMsgRef,\n    {\n      fields: Array<FieldCheckerProps>;\n      children?: ReactNode;\n      streaming: boolean;\n      confirmed?: boolean;\n    }\n  >(({ fields, children, streaming, confirmed }, ref) => {\n    // Track individual field checked states (all default to true)\n    const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>(() => {\n      const map: Record<string, boolean> = {};\n      fields.forEach((f) => {\n        map[f.field?.label ?? ''] = true;\n      });\n      return map;\n    });\n\n    const allChecked = useMemo(\n      () => fields.length > 0 && fields.every((f) => checkedMap[f.field?.label ?? ''] !== false),\n      [checkedMap, fields]\n    );\n\n    const someChecked = useMemo(\n      () => fields.some((f) => checkedMap[f.field?.label ?? ''] !== false),\n      [checkedMap, fields]\n    );\n\n    const intermediate = streaming || (!allChecked && someChecked);\n\n    useImperativeHandle(\n      ref,\n      () => ({\n        getCheckedFieldsLength: () =>\n          fields.filter((f) => checkedMap[f.field?.label ?? ''] !== false).length,\n      }),\n      [checkedMap, fields]\n    );\n\n    const handleToggleAll = useCallback(\n      (checked: boolean | 'indeterminate') => {\n        const value = checked === true;\n        const newMap: Record<string, boolean> = {};\n        fields.forEach((f) => {\n          newMap[f.field?.label ?? ''] = value;\n        });\n        setCheckedMap(newMap);\n        fields.forEach((f) => f.onChange?.(value, f.field));\n      },\n      [fields]\n    );\n\n    return (\n      <CollapsibleTxtMsg title=\"字段生成\" icon={<LetterAIcon />} defaultOpen>\n        {\n          <div\n            className={cn(\n              'flex gap-2.5 px-4 py-2.5 rounded-[4px] w-full transition-colors cursor-pointer hover:bg-[#EFF0F6] items-center',\n              {\n                'pointer-events-none': confirmed || streaming,\n              }\n            )}\n            onClick={() => {\n              if (confirmed) {\n                return;\n              }\n\n              const newChecked = !allChecked;\n              handleToggleAll(newChecked);\n            }}\n          >\n            <SquareChecker\n              readonly={confirmed || streaming}\n              checked={allChecked && !streaming}\n              onCheckedChange={handleToggleAll}\n              intermediate={intermediate}\n            >\n              <span className=\"text-[#0265ff]! font-bold!\">全选</span>\n            </SquareChecker>\n          </div>\n        }\n        {fields.map((f) => (\n          <FieldChecker\n            {...f}\n            key={f.field?.label}\n            checked={checkedMap[f.field?.label ?? '']}\n            streaming={streaming}\n            confirmed={confirmed}\n            onChange={(checked, field, parentFieldName, index) => {\n              const isSubField = index !== undefined && parentFieldName !== undefined;\n              if (!isSubField) {\n                setCheckedMap((prev) => ({ ...prev, [f.field?.label ?? '']: checked }));\n              }\n              f.onChange?.(checked, field, parentFieldName, index);\n            }}\n          />\n        ))}\n        {children}\n      </CollapsibleTxtMsg>\n    );\n  })\n);\n\nexport const FieldValueCheckerListMsg = memo(\n  ({\n    props,\n    readonly,\n    children,\n    streaming,\n  }: {\n    props: Array<FieldValueCheckerProps>;\n    children?: ReactNode;\n    readonly?: boolean;\n    streaming?: boolean;\n  }) => {\n    return (\n      <CollapsibleTxtMsg title=\"字段填写\" icon={<EditIcon />} defaultOpen>\n        {props.map((f) => (\n          <FieldValueChecker {...f} readonly={readonly} streaming={streaming} />\n        ))}\n        {children}\n      </CollapsibleTxtMsg>\n    );\n  }\n);\n","import { cn } from '../../../lib/utils';\n\n// ── Shared SVG Icons for FieldValueInput ────────────────────────────\n\nexport const DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0 transition-transform duration-200')}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\nexport const ClearIcon = () => (\n  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L11 11M11 3L3 11\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nexport const UploadIcon = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M8 10.5V2M4 6L8 2L12 6\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    <path d=\"M2 11V12.5C2 13.3284 2.67157 14 3.5 14H12.5C13.3284 14 14 13.3284 14 12.5V11\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nexport const CloseIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nexport const CheckIcon = () => (\n  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M2 7L5.5 10.5L12 3.5\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n","import { useState, useRef, useCallback } from 'react';\nimport type { FieldValueInputProps } from './index';\nimport { FieldWrapper } from './index';\nimport { UploadIcon } from './icons';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { DateInput } from '../date-picker/date-input';\nimport type { DateFormat } from '../date-picker/types';\nimport { formatDateByFormat } from '../date-picker/utils';\n\nconst inputBaseCls =\n  'h-[34px] px-[10px] py-[7px] rounded-[4px] bg-white border text-[14px] text-[#030303] placeholder:text-[#999999] focus:outline-none focus:border-[#0265FF] w-full disabled:bg-[#EFF0F6] disabled:cursor-not-allowed';\n\n// ── TextInput ───────────────────────────────────────────────────────\n\nexport function TextInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <input\n        type=\"text\"\n        value={typeof value === 'string' ? value : ''}\n        onChange={(e) => onChange?.(e.target.value)}\n        disabled={disabled}\n        placeholder={field.description ?? `请输入${field.label}`}\n        className={inputBaseCls}\n      />\n    </FieldWrapper>\n  );\n}\n\n// ── NumberInput ─────────────────────────────────────────────────────\n\nexport function NumberInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <input\n        type=\"number\"\n        value={typeof value === 'number' || typeof value === 'string' ? value : ''}\n        onChange={(e) => {\n          const v = e.target.value;\n          onChange?.(v === '' ? '' : Number(v));\n        }}\n        disabled={disabled}\n        placeholder={field.description ?? `请输入${field.label}`}\n        className={inputBaseCls}\n      />\n    </FieldWrapper>\n  );\n}\n\n// ── TextareaInput ───────────────────────────────────────────────────\n\nexport function TextareaInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <textarea\n        value={typeof value === 'string' ? value : ''}\n        onChange={(e) => onChange?.(e.target.value)}\n        disabled={disabled}\n        placeholder={field.description ?? `请输入${field.label}`}\n        rows={3}\n        className={cn(inputBaseCls, 'h-auto min-h-[68px] resize-y')}\n      />\n    </FieldWrapper>\n  );\n}\n\n// ── PasswordInput ───────────────────────────────────────────────────\n\nexport function PasswordInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  const [show, setShow] = useState(false);\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <div className=\"relative\">\n        <input\n          type={show ? 'text' : 'password'}\n          value={typeof value === 'string' ? value : ''}\n          onChange={(e) => onChange?.(e.target.value)}\n          disabled={disabled}\n          placeholder={field.description ?? `请输入${field.label}`}\n          className={cn(inputBaseCls, 'pr-[36px]')}\n        />\n        <button\n          type=\"button\"\n          onClick={() => setShow(!show)}\n          className=\"absolute right-[8px] top-1/2 -translate-y-1/2 text-[#999999] text-[12px] hover:text-[#666666]\"\n        >\n          {show ? '隐藏' : '显示'}\n        </button>\n      </div>\n    </FieldWrapper>\n  );\n}\n\n// ── DateTimeInput ───────────────────────────────────────────────────\n\nexport function DateTimeInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  const format: DateFormat = ((field.widget as unknown as Record<string, unknown> | undefined))?.format as DateFormat || 'yyyy-MM-dd';\n  const dateValue = typeof value === 'string' && value ? new Date(value) : undefined;\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <DateInput\n        value={dateValue}\n        onChange={(date) => onChange?.(date ? formatDateByFormat(date,  field?.widget?.format ?? 'yyyy-MM-dd HH:mm:ss') /* date.toISOString() */ : '')}\n        format={format}\n        disabled={disabled}\n      />\n    </FieldWrapper>\n  );\n}\n\n// ── RangeNumberInput ─────────────────────────────────────────────────\n\nexport function RangeNumberInput({ value, onChange, disabled }: FieldValueInputProps) {\n  const rangeValue = (value && typeof value === 'object' && !Array.isArray(value)\n    ? value\n    : { min: undefined, max: undefined }) as { min?: number; max?: number };\n\n  return (\n    <div className=\"flex items-center gap-[8px]\">\n      <input\n        type=\"number\"\n        value={rangeValue.min != null ? rangeValue.min : ''}\n        onChange={(e) => {\n          const v = e.target.value;\n          onChange?.({ ...rangeValue, min: v === '' ? undefined : Number(v) });\n        }}\n        disabled={disabled}\n        placeholder=\"最小值\"\n        className={cn(inputBaseCls, 'flex-1')}\n      />\n      <span className=\"text-[#999] text-[14px] shrink-0\">~</span>\n      <input\n        type=\"number\"\n        value={rangeValue.max != null ? rangeValue.max : ''}\n        onChange={(e) => {\n          const v = e.target.value;\n          onChange?.({ ...rangeValue, max: v === '' ? undefined : Number(v) });\n        }}\n        disabled={disabled}\n        placeholder=\"最大值\"\n        className={cn(inputBaseCls, 'flex-1')}\n      />\n    </div>\n  );\n}\n\n// ── RangeDateTimeInput ───────────────────────────────────────────────\n\nexport function RangeDateTimeInput({ value, onChange, disabled }: FieldValueInputProps) {\n  const rangeValue = (value && typeof value === 'object' && !Array.isArray(value)\n    ? value\n    : { min: undefined, max: undefined }) as { min?: string; max?: string };\n\n  const minDate = rangeValue.min ? new Date(rangeValue.min) : undefined;\n  const maxDate = rangeValue.max ? new Date(rangeValue.max) : undefined;\n\n  return (\n    <div className=\"flex items-center gap-[8px]\">\n      <DateInput\n        value={minDate}\n        onChange={(date) => onChange?.({ ...rangeValue, min: date ? date.toISOString() : undefined })}\n        format=\"yyyy-MM-dd\"\n        placeholder=\"开始日期\"\n        disabled={disabled}\n        className=\"flex-1\"\n      />\n      <span className=\"text-[#999] text-[14px] shrink-0\">~</span>\n      <DateInput\n        value={maxDate}\n        onChange={(date) => onChange?.({ ...rangeValue, max: date ? date.toISOString() : undefined })}\n        format=\"yyyy-MM-dd\"\n        placeholder=\"结束日期\"\n        disabled={disabled}\n        className=\"flex-1\"\n      />\n    </div>\n  );\n}\n\n// ── UploadInput ─────────────────────────────────────────────────────\n\nexport function UploadInput({ field, value, onChange, disabled, service, showLabel, showDescription }: FieldValueInputProps) {\n  const [uploading, setUploading] = useState(false);\n  const fileRef = useRef<HTMLInputElement>(null);\n\n  const handleFileChange = useCallback(\n    async (e: React.ChangeEvent<HTMLInputElement>) => {\n      const file = e.target.files?.[0];\n      if (!file) return;\n      if (service?.uploadFile) {\n        setUploading(true);\n        try {\n          const result = await service.uploadFile(file);\n          onChange?.({ url: result.url, name: result.name });\n        } finally {\n          setUploading(false);\n        }\n      } else {\n        onChange?.(file);\n      }\n    },\n    [onChange, service],\n  );\n\n  const currentFileName =\n    value && typeof value === 'object' && 'name' in (value as Record<string, unknown>)\n      ? (value as { name: string }).name\n      : value instanceof File\n        ? value.name\n        : null;\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <div className=\"flex items-center gap-[8px]\">\n        <button\n          type=\"button\"\n          disabled={disabled || uploading}\n          onClick={() => fileRef.current?.click()}\n          className={cn(\n            'inline-flex items-center gap-[6px] h-[34px] px-[14px] rounded-[4px] text-[14px]',\n            'bg-[#F0F6FF] text-[#0265FF] border border-[#0265FF]',\n            transCls,\n            'hover:bg-[#E0EEFF]',\n            (disabled || uploading) && 'opacity-50 cursor-not-allowed',\n          )}\n        >\n          <UploadIcon />\n          {uploading ? '上传中...' : '上传文件'}\n        </button>\n        {currentFileName && (\n          <span className=\"text-[14px] text-[#030303] truncate\">{currentFileName}</span>\n        )}\n        <input\n          ref={fileRef}\n          type=\"file\"\n          onChange={handleFileChange}\n          className=\"hidden\"\n          accept={field.widget?.type === 'image' ? 'image/*' : undefined}\n        />\n      </div>\n    </FieldWrapper>\n  );\n}\n","// Auto-generated from china.js CDN data\n// Type: Record<province, Record<city, district[]>>\nexport const chinaAddressData: Record<string, Record<string, string[]>> = {\n  \"北京市\": {\n    \"北京市\": [\n      \"东城区\",\n      \"西城区\",\n      \"朝阳区\",\n      \"丰台区\",\n      \"石景山区\",\n      \"海淀区\",\n      \"门头沟区\",\n      \"房山区\",\n      \"通州区\",\n      \"顺义区\",\n      \"昌平区\",\n      \"大兴区\",\n      \"怀柔区\",\n      \"平谷区\",\n      \"密云区\",\n      \"延庆区\"\n    ]\n  },\n  \"天津市\": {\n    \"天津市\": [\n      \"和平区\",\n      \"河东区\",\n      \"河西区\",\n      \"南开区\",\n      \"河北区\",\n      \"红桥区\",\n      \"东丽区\",\n      \"西青区\",\n      \"津南区\",\n      \"北辰区\",\n      \"武清区\",\n      \"宝坻区\",\n      \"滨海新区\",\n      \"宁河区\",\n      \"静海区\",\n      \"蓟州区\"\n    ]\n  },\n  \"河北省\": {\n    \"石家庄市\": [\n      \"长安区\",\n      \"桥西区\",\n      \"新华区\",\n      \"井陉矿区\",\n      \"裕华区\",\n      \"藁城区\",\n      \"鹿泉区\",\n      \"栾城区\",\n      \"井陉县\",\n      \"正定县\",\n      \"行唐县\",\n      \"灵寿县\",\n      \"高邑县\",\n      \"深泽县\",\n      \"赞皇县\",\n      \"无极县\",\n      \"平山县\",\n      \"元氏县\",\n      \"赵县\",\n      \"辛集市\",\n      \"晋州市\",\n      \"新乐市\"\n    ],\n    \"唐山市\": [\n      \"路南区\",\n      \"路北区\",\n      \"古冶区\",\n      \"开平区\",\n      \"丰南区\",\n      \"丰润区\",\n      \"曹妃甸区\",\n      \"滦南县\",\n      \"乐亭县\",\n      \"迁西县\",\n      \"玉田县\",\n      \"遵化市\",\n      \"迁安市\",\n      \"滦州市\"\n    ],\n    \"秦皇岛市\": [\n      \"海港区\",\n      \"山海关区\",\n      \"北戴河区\",\n      \"抚宁区\",\n      \"青龙满族自治县\",\n      \"昌黎县\",\n      \"卢龙县\"\n    ],\n    \"邯郸市\": [\n      \"邯山区\",\n      \"丛台区\",\n      \"复兴区\",\n      \"峰峰矿区\",\n      \"肥乡区\",\n      \"永年区\",\n      \"临漳县\",\n      \"成安县\",\n      \"大名县\",\n      \"涉县\",\n      \"磁县\",\n      \"邱县\",\n      \"鸡泽县\",\n      \"广平县\",\n      \"馆陶县\",\n      \"魏县\",\n      \"曲周县\",\n      \"武安市\",\n      \"邯郸经济技术开发区\",\n      \"邯郸冀南新区\"\n    ],\n    \"邢台市\": [\n      \"桥东区\",\n      \"桥西区\",\n      \"邢台县\",\n      \"临城县\",\n      \"内丘县\",\n      \"柏乡县\",\n      \"隆尧县\",\n      \"任县\",\n      \"南和县\",\n      \"宁晋县\",\n      \"巨鹿县\",\n      \"新河县\",\n      \"广宗县\",\n      \"平乡县\",\n      \"威县\",\n      \"清河县\",\n      \"临西县\",\n      \"南宫市\",\n      \"沙河市\"\n    ],\n    \"保定市\": [\n      \"竞秀区\",\n      \"莲池区\",\n      \"满城区\",\n      \"清苑区\",\n      \"徐水区\",\n      \"涞水县\",\n      \"阜平县\",\n      \"定兴县\",\n      \"唐县\",\n      \"高阳县\",\n      \"容城县\",\n      \"涞源县\",\n      \"望都县\",\n      \"安新县\",\n      \"易县\",\n      \"曲阳县\",\n      \"蠡县\",\n      \"顺平县\",\n      \"博野县\",\n      \"雄县\",\n      \"涿州市\",\n      \"定州市\",\n      \"安国市\",\n      \"高碑店市\"\n    ],\n    \"张家口市\": [\n      \"桥东区\",\n      \"桥西区\",\n      \"宣化区\",\n      \"下花园区\",\n      \"万全区\",\n      \"崇礼区\",\n      \"张北县\",\n      \"康保县\",\n      \"沽源县\",\n      \"尚义县\",\n      \"蔚县\",\n      \"阳原县\",\n      \"怀安县\",\n      \"怀来县\",\n      \"涿鹿县\",\n      \"赤城县\"\n    ],\n    \"承德市\": [\n      \"双桥区\",\n      \"双滦区\",\n      \"鹰手营子矿区\",\n      \"承德县\",\n      \"兴隆县\",\n      \"滦平县\",\n      \"隆化县\",\n      \"丰宁满族自治县\",\n      \"宽城满族自治县\",\n      \"围场满族蒙古族自治县\",\n      \"平泉市\"\n    ],\n    \"沧州市\": [\n      \"新华区\",\n      \"运河区\",\n      \"沧县\",\n      \"青县\",\n      \"东光县\",\n      \"海兴县\",\n      \"盐山县\",\n      \"肃宁县\",\n      \"南皮县\",\n      \"吴桥县\",\n      \"献县\",\n      \"孟村回族自治县\",\n      \"泊头市\",\n      \"任丘市\",\n      \"黄骅市\",\n      \"河间市\"\n    ],\n    \"廊坊市\": [\n      \"安次区\",\n      \"广阳区\",\n      \"固安县\",\n      \"永清县\",\n      \"香河县\",\n      \"大城县\",\n      \"文安县\",\n      \"大厂回族自治县\",\n      \"霸州市\",\n      \"三河市\",\n      \"廊坊经济技术开发区\"\n    ],\n    \"衡水市\": [\n      \"桃城区\",\n      \"冀州区\",\n      \"枣强县\",\n      \"武邑县\",\n      \"武强县\",\n      \"饶阳县\",\n      \"安平县\",\n      \"故城县\",\n      \"景县\",\n      \"阜城县\",\n      \"深州市\"\n    ]\n  },\n  \"山西省\": {\n    \"太原市\": [\n      \"小店区\",\n      \"迎泽区\",\n      \"杏花岭区\",\n      \"尖草坪区\",\n      \"万柏林区\",\n      \"晋源区\",\n      \"清徐县\",\n      \"阳曲县\",\n      \"娄烦县\",\n      \"古交市\"\n    ],\n    \"大同市\": [\n      \"新荣区\",\n      \"平城区\",\n      \"云冈区\",\n      \"云州区\",\n      \"阳高县\",\n      \"天镇县\",\n      \"广灵县\",\n      \"灵丘县\",\n      \"浑源县\",\n      \"左云县\"\n    ],\n    \"阳泉市\": [\n      \"城区\",\n      \"矿区\",\n      \"郊区\",\n      \"平定县\",\n      \"盂县\"\n    ],\n    \"长治市\": [\n      \"潞州区\",\n      \"上党区\",\n      \"屯留区\",\n      \"潞城区\",\n      \"襄垣县\",\n      \"平顺县\",\n      \"黎城县\",\n      \"壶关县\",\n      \"长子县\",\n      \"武乡县\",\n      \"沁县\",\n      \"沁源县\"\n    ],\n    \"晋城市\": [\n      \"城区\",\n      \"沁水县\",\n      \"阳城县\",\n      \"陵川县\",\n      \"泽州县\",\n      \"高平市\"\n    ],\n    \"朔州市\": [\n      \"朔城区\",\n      \"平鲁区\",\n      \"山阴县\",\n      \"应县\",\n      \"右玉县\",\n      \"怀仁市\"\n    ],\n    \"晋中市\": [\n      \"榆次区\",\n      \"太谷区\",\n      \"榆社县\",\n      \"左权县\",\n      \"和顺县\",\n      \"昔阳县\",\n      \"寿阳县\",\n      \"祁县\",\n      \"平遥县\",\n      \"灵石县\",\n      \"介休市\"\n    ],\n    \"运城市\": [\n      \"盐湖区\",\n      \"临猗县\",\n      \"万荣县\",\n      \"闻喜县\",\n      \"稷山县\",\n      \"新绛县\",\n      \"绛县\",\n      \"垣曲县\",\n      \"夏县\",\n      \"平陆县\",\n      \"芮城县\",\n      \"永济市\",\n      \"河津市\"\n    ],\n    \"忻州市\": [\n      \"忻府区\",\n      \"定襄县\",\n      \"五台县\",\n      \"代县\",\n      \"繁峙县\",\n      \"宁武县\",\n      \"静乐县\",\n      \"神池县\",\n      \"五寨县\",\n      \"岢岚县\",\n      \"河曲县\",\n      \"保德县\",\n      \"偏关县\",\n      \"原平市\"\n    ],\n    \"临汾市\": [\n      \"尧都区\",\n      \"曲沃县\",\n      \"翼城县\",\n      \"襄汾县\",\n      \"洪洞县\",\n      \"古县\",\n      \"安泽县\",\n      \"浮山县\",\n      \"吉县\",\n      \"乡宁县\",\n      \"大宁县\",\n      \"隰县\",\n      \"永和县\",\n      \"蒲县\",\n      \"汾西县\",\n      \"侯马市\",\n      \"霍州市\"\n    ],\n    \"吕梁市\": [\n      \"离石区\",\n      \"文水县\",\n      \"交城县\",\n      \"兴县\",\n      \"临县\",\n      \"柳林县\",\n      \"石楼县\",\n      \"岚县\",\n      \"方山县\",\n      \"中阳县\",\n      \"交口县\",\n      \"孝义市\",\n      \"汾阳市\"\n    ]\n  },\n  \"内蒙古自治区\": {\n    \"呼和浩特市\": [\n      \"新城区\",\n      \"回民区\",\n      \"玉泉区\",\n      \"赛罕区\",\n      \"土默特左旗\",\n      \"托克托县\",\n      \"和林格尔县\",\n      \"清水河县\",\n      \"武川县\"\n    ],\n    \"包头市\": [\n      \"东河区\",\n      \"昆都仑区\",\n      \"青山区\",\n      \"石拐区\",\n      \"白云鄂博矿区\",\n      \"九原区\",\n      \"土默特右旗\",\n      \"固阳县\",\n      \"达尔罕茂明安联合旗\"\n    ],\n    \"乌海市\": [\n      \"海勃湾区\",\n      \"海南区\",\n      \"乌达区\"\n    ],\n    \"赤峰市\": [\n      \"红山区\",\n      \"元宝山区\",\n      \"松山区\",\n      \"阿鲁科尔沁旗\",\n      \"巴林左旗\",\n      \"巴林右旗\",\n      \"林西县\",\n      \"克什克腾旗\",\n      \"翁牛特旗\",\n      \"喀喇沁旗\",\n      \"宁城县\",\n      \"敖汉旗\"\n    ],\n    \"通辽市\": [\n      \"科尔沁区\",\n      \"科尔沁左翼中旗\",\n      \"科尔沁左翼后旗\",\n      \"开鲁县\",\n      \"库伦旗\",\n      \"奈曼旗\",\n      \"扎鲁特旗\",\n      \"霍林郭勒市\"\n    ],\n    \"鄂尔多斯市\": [\n      \"东胜区\",\n      \"康巴什区\",\n      \"达拉特旗\",\n      \"准格尔旗\",\n      \"鄂托克前旗\",\n      \"鄂托克旗\",\n      \"杭锦旗\",\n      \"乌审旗\",\n      \"伊金霍洛旗\"\n    ],\n    \"呼伦贝尔市\": [\n      \"海拉尔区\",\n      \"扎赉诺尔区\",\n      \"阿荣旗\",\n      \"莫力达瓦达斡尔族自治旗\",\n      \"鄂伦春自治旗\",\n      \"鄂温克族自治旗\",\n      \"陈巴尔虎旗\",\n      \"新巴尔虎左旗\",\n      \"新巴尔虎右旗\",\n      \"满洲里市\",\n      \"牙克石市\",\n      \"扎兰屯市\",\n      \"额尔古纳市\",\n      \"根河市\"\n    ],\n    \"巴彦淖尔市\": [\n      \"临河区\",\n      \"五原县\",\n      \"磴口县\",\n      \"乌拉特前旗\",\n      \"乌拉特中旗\",\n      \"乌拉特后旗\",\n      \"杭锦后旗\"\n    ],\n    \"乌兰察布市\": [\n      \"集宁区\",\n      \"卓资县\",\n      \"化德县\",\n      \"商都县\",\n      \"兴和县\",\n      \"凉城县\",\n      \"察哈尔右翼前旗\",\n      \"察哈尔右翼中旗\",\n      \"察哈尔右翼后旗\",\n      \"四子王旗\",\n      \"丰镇市\"\n    ],\n    \"兴安盟\": [\n      \"乌兰浩特市\",\n      \"阿尔山市\",\n      \"科尔沁右翼前旗\",\n      \"科尔沁右翼中旗\",\n      \"扎赉特旗\",\n      \"突泉县\"\n    ],\n    \"锡林郭勒盟\": [\n      \"二连浩特市\",\n      \"锡林浩特市\",\n      \"阿巴嘎旗\",\n      \"苏尼特左旗\",\n      \"苏尼特右旗\",\n      \"东乌珠穆沁旗\",\n      \"西乌珠穆沁旗\",\n      \"太仆寺旗\",\n      \"镶黄旗\",\n      \"正镶白旗\",\n      \"正蓝旗\",\n      \"多伦县\",\n      \"乌拉盖管委会\"\n    ],\n    \"阿拉善盟\": [\n      \"阿拉善左旗\",\n      \"阿拉善右旗\",\n      \"额济纳旗\"\n    ]\n  },\n  \"辽宁省\": {\n    \"沈阳市\": [\n      \"和平区\",\n      \"沈河区\",\n      \"大东区\",\n      \"皇姑区\",\n      \"铁西区\",\n      \"苏家屯区\",\n      \"浑南区\",\n      \"沈北新区\",\n      \"于洪区\",\n      \"辽中区\",\n      \"康平县\",\n      \"法库县\",\n      \"新民市\"\n    ],\n    \"大连市\": [\n      \"中山区\",\n      \"西岗区\",\n      \"沙河口区\",\n      \"甘井子区\",\n      \"旅顺口区\",\n      \"金州区\",\n      \"普兰店区\",\n      \"长海县\",\n      \"瓦房店市\",\n      \"庄河市\"\n    ],\n    \"鞍山市\": [\n      \"铁东区\",\n      \"铁西区\",\n      \"立山区\",\n      \"千山区\",\n      \"台安县\",\n      \"岫岩满族自治县\",\n      \"海城市\"\n    ],\n    \"抚顺市\": [\n      \"新抚区\",\n      \"东洲区\",\n      \"望花区\",\n      \"顺城区\",\n      \"抚顺县\",\n      \"新宾满族自治县\",\n      \"清原满族自治县\"\n    ],\n    \"本溪市\": [\n      \"平山区\",\n      \"溪湖区\",\n      \"明山区\",\n      \"南芬区\",\n      \"本溪满族自治县\",\n      \"桓仁满族自治县\"\n    ],\n    \"丹东市\": [\n      \"元宝区\",\n      \"振兴区\",\n      \"振安区\",\n      \"宽甸满族自治县\",\n      \"东港市\",\n      \"凤城市\"\n    ],\n    \"锦州市\": [\n      \"古塔区\",\n      \"凌河区\",\n      \"太和区\",\n      \"黑山县\",\n      \"义县\",\n      \"凌海市\",\n      \"北镇市\"\n    ],\n    \"营口市\": [\n      \"站前区\",\n      \"西市区\",\n      \"鲅鱼圈区\",\n      \"老边区\",\n      \"盖州市\",\n      \"大石桥市\"\n    ],\n    \"阜新市\": [\n      \"海州区\",\n      \"新邱区\",\n      \"太平区\",\n      \"清河门区\",\n      \"细河区\",\n      \"阜新蒙古族自治县\",\n      \"彰武县\"\n    ],\n    \"辽阳市\": [\n      \"白塔区\",\n      \"文圣区\",\n      \"宏伟区\",\n      \"弓长岭区\",\n      \"太子河区\",\n      \"辽阳县\",\n      \"灯塔市\"\n    ],\n    \"盘锦市\": [\n      \"双台子区\",\n      \"兴隆台区\",\n      \"大洼区\",\n      \"盘山县\"\n    ],\n    \"铁岭市\": [\n      \"银州区\",\n      \"清河区\",\n      \"铁岭县\",\n      \"西丰县\",\n      \"昌图县\",\n      \"调兵山市\",\n      \"开原市\"\n    ],\n    \"朝阳市\": [\n      \"双塔区\",\n      \"龙城区\",\n      \"朝阳县\",\n      \"建平县\",\n      \"喀喇沁左翼蒙古族自治县\",\n      \"北票市\",\n      \"凌源市\"\n    ],\n    \"葫芦岛市\": [\n      \"连山区\",\n      \"龙港区\",\n      \"南票区\",\n      \"绥中县\",\n      \"建昌县\",\n      \"兴城市\"\n    ]\n  },\n  \"吉林省\": {\n    \"长春市\": [\n      \"南关区\",\n      \"宽城区\",\n      \"朝阳区\",\n      \"二道区\",\n      \"绿园区\",\n      \"双阳区\",\n      \"九台区\",\n      \"农安县\",\n      \"榆树市\",\n      \"德惠市\",\n      \"公主岭市\"\n    ],\n    \"吉林市\": [\n      \"昌邑区\",\n      \"龙潭区\",\n      \"船营区\",\n      \"丰满区\",\n      \"永吉县\",\n      \"蛟河市\",\n      \"桦甸市\",\n      \"舒兰市\",\n      \"磐石市\"\n    ],\n    \"四平市\": [\n      \"铁西区\",\n      \"铁东区\",\n      \"梨树县\",\n      \"伊通满族自治县\",\n      \"双辽市\"\n    ],\n    \"辽源市\": [\n      \"龙山区\",\n      \"西安区\",\n      \"东丰县\",\n      \"东辽县\"\n    ],\n    \"通化市\": [\n      \"东昌区\",\n      \"二道江区\",\n      \"通化县\",\n      \"辉南县\",\n      \"柳河县\",\n      \"梅河口市\",\n      \"集安市\"\n    ],\n    \"白山市\": [\n      \"浑江区\",\n      \"江源区\",\n      \"抚松县\",\n      \"靖宇县\",\n      \"长白朝鲜族自治县\",\n      \"临江市\"\n    ],\n    \"松原市\": [\n      \"宁江区\",\n      \"前郭尔罗斯蒙古族自治县\",\n      \"长岭县\",\n      \"乾安县\",\n      \"扶余市\"\n    ],\n    \"白城市\": [\n      \"洮北区\",\n      \"镇赉县\",\n      \"通榆县\",\n      \"洮南市\",\n      \"大安市\"\n    ],\n    \"延边朝鲜族自治州\": [\n      \"延吉市\",\n      \"图们市\",\n      \"敦化市\",\n      \"珲春市\",\n      \"龙井市\",\n      \"和龙市\",\n      \"汪清县\",\n      \"安图县\"\n    ]\n  },\n  \"黑龙江省\": {\n    \"哈尔滨市\": [\n      \"道里区\",\n      \"南岗区\",\n      \"道外区\",\n      \"平房区\",\n      \"松北区\",\n      \"香坊区\",\n      \"呼兰区\",\n      \"阿城区\",\n      \"双城区\",\n      \"依兰县\",\n      \"方正县\",\n      \"宾县\",\n      \"巴彦县\",\n      \"木兰县\",\n      \"通河县\",\n      \"延寿县\",\n      \"尚志市\",\n      \"五常市\"\n    ],\n    \"齐齐哈尔市\": [\n      \"龙沙区\",\n      \"建华区\",\n      \"铁锋区\",\n      \"昂昂溪区\",\n      \"富拉尔基区\",\n      \"碾子山区\",\n      \"梅里斯达斡尔族区\",\n      \"龙江县\",\n      \"依安县\",\n      \"泰来县\",\n      \"甘南县\",\n      \"富裕县\",\n      \"克山县\",\n      \"克东县\",\n      \"拜泉县\",\n      \"讷河市\"\n    ],\n    \"鸡西市\": [\n      \"鸡冠区\",\n      \"恒山区\",\n      \"滴道区\",\n      \"梨树区\",\n      \"城子河区\",\n      \"麻山区\",\n      \"鸡东县\",\n      \"虎林市\",\n      \"密山市\"\n    ],\n    \"鹤岗市\": [\n      \"向阳区\",\n      \"工农区\",\n      \"南山区\",\n      \"兴安区\",\n      \"东山区\",\n      \"兴山区\",\n      \"萝北县\",\n      \"绥滨县\"\n    ],\n    \"双鸭山市\": [\n      \"尖山区\",\n      \"岭东区\",\n      \"四方台区\",\n      \"宝山区\",\n      \"集贤县\",\n      \"友谊县\",\n      \"宝清县\",\n      \"饶河县\"\n    ],\n    \"大庆市\": [\n      \"萨尔图区\",\n      \"龙凤区\",\n      \"让胡路区\",\n      \"红岗区\",\n      \"大同区\",\n      \"肇州县\",\n      \"肇源县\",\n      \"林甸县\",\n      \"杜尔伯特蒙古族自治县\"\n    ],\n    \"伊春市\": [\n      \"伊美区\",\n      \"乌翠区\",\n      \"友好区\",\n      \"嘉荫县\",\n      \"汤旺县\",\n      \"丰林县\",\n      \"大箐山县\",\n      \"南岔县\",\n      \"金林区\",\n      \"铁力市\"\n    ],\n    \"佳木斯市\": [\n      \"向阳区\",\n      \"前进区\",\n      \"东风区\",\n      \"郊区\",\n      \"桦南县\",\n      \"桦川县\",\n      \"汤原县\",\n      \"同江市\",\n      \"富锦市\",\n      \"抚远市\"\n    ],\n    \"七台河市\": [\n      \"新兴区\",\n      \"桃山区\",\n      \"茄子河区\",\n      \"勃利县\"\n    ],\n    \"牡丹江市\": [\n      \"东安区\",\n      \"阳明区\",\n      \"爱民区\",\n      \"西安区\",\n      \"林口县\",\n      \"绥芬河市\",\n      \"海林市\",\n      \"宁安市\",\n      \"穆棱市\",\n      \"东宁市\"\n    ],\n    \"黑河市\": [\n      \"爱辉区\",\n      \"逊克县\",\n      \"孙吴县\",\n      \"北安市\",\n      \"五大连池市\",\n      \"嫩江市\"\n    ],\n    \"绥化市\": [\n      \"北林区\",\n      \"望奎县\",\n      \"兰西县\",\n      \"青冈县\",\n      \"庆安县\",\n      \"明水县\",\n      \"绥棱县\",\n      \"安达市\",\n      \"肇东市\",\n      \"海伦市\"\n    ],\n    \"大兴安岭地区\": [\n      \"漠河市\",\n      \"加格达奇区\",\n      \"呼玛县\",\n      \"塔河县\"\n    ]\n  },\n  \"上海市\": {\n    \"上海市\": [\n      \"黄浦区\",\n      \"徐汇区\",\n      \"长宁区\",\n      \"静安区\",\n      \"普陀区\",\n      \"虹口区\",\n      \"杨浦区\",\n      \"闵行区\",\n      \"宝山区\",\n      \"嘉定区\",\n      \"浦东新区\",\n      \"金山区\",\n      \"松江区\",\n      \"青浦区\",\n      \"奉贤区\",\n      \"崇明区\"\n    ]\n  },\n  \"江苏省\": {\n    \"南京市\": [\n      \"玄武区\",\n      \"秦淮区\",\n      \"建邺区\",\n      \"鼓楼区\",\n      \"浦口区\",\n      \"栖霞区\",\n      \"雨花台区\",\n      \"江宁区\",\n      \"六合区\",\n      \"溧水区\",\n      \"高淳区\"\n    ],\n    \"无锡市\": [\n      \"锡山区\",\n      \"惠山区\",\n      \"滨湖区\",\n      \"梁溪区\",\n      \"新吴区\",\n      \"江阴市\",\n      \"宜兴市\"\n    ],\n    \"徐州市\": [\n      \"鼓楼区\",\n      \"云龙区\",\n      \"贾汪区\",\n      \"泉山区\",\n      \"铜山区\",\n      \"丰县\",\n      \"沛县\",\n      \"睢宁县\",\n      \"新沂市\",\n      \"邳州市\"\n    ],\n    \"常州市\": [\n      \"天宁区\",\n      \"钟楼区\",\n      \"新北区\",\n      \"武进区\",\n      \"金坛区\",\n      \"溧阳市\"\n    ],\n    \"苏州市\": [\n      \"虎丘区\",\n      \"吴中区\",\n      \"相城区\",\n      \"姑苏区\",\n      \"吴江区\",\n      \"常熟市\",\n      \"张家港市\",\n      \"昆山市\",\n      \"太仓市\",\n      \"苏州工业园区\"\n    ],\n    \"南通市\": [\n      \"通州区\",\n      \"崇川区\",\n      \"海门区\",\n      \"如东县\",\n      \"启东市\",\n      \"如皋市\",\n      \"海安市\"\n    ],\n    \"连云港市\": [\n      \"连云区\",\n      \"海州区\",\n      \"赣榆区\",\n      \"东海县\",\n      \"灌云县\",\n      \"灌南县\"\n    ],\n    \"淮安市\": [\n      \"淮安区\",\n      \"淮阴区\",\n      \"清江浦区\",\n      \"洪泽区\",\n      \"涟水县\",\n      \"盱眙县\",\n      \"金湖县\"\n    ],\n    \"盐城市\": [\n      \"亭湖区\",\n      \"盐都区\",\n      \"大丰区\",\n      \"响水县\",\n      \"滨海县\",\n      \"阜宁县\",\n      \"射阳县\",\n      \"建湖县\",\n      \"东台市\"\n    ],\n    \"扬州市\": [\n      \"广陵区\",\n      \"邗江区\",\n      \"江都区\",\n      \"宝应县\",\n      \"仪征市\",\n      \"高邮市\"\n    ],\n    \"镇江市\": [\n      \"京口区\",\n      \"润州区\",\n      \"丹徒区\",\n      \"丹阳市\",\n      \"扬中市\",\n      \"句容市\"\n    ],\n    \"泰州市\": [\n      \"海陵区\",\n      \"高港区\",\n      \"姜堰区\",\n      \"兴化市\",\n      \"靖江市\",\n      \"泰兴市\"\n    ],\n    \"宿迁市\": [\n      \"宿城区\",\n      \"宿豫区\",\n      \"沭阳县\",\n      \"泗阳县\",\n      \"泗洪县\"\n    ]\n  },\n  \"浙江省\": {\n    \"杭州市\": [\n      \"上城区\",\n      \"拱墅区\",\n      \"西湖区\",\n      \"滨江区\",\n      \"萧山区\",\n      \"余杭区\",\n      \"富阳区\",\n      \"临安区\",\n      \"临平区\",\n      \"钱塘区\",\n      \"桐庐县\",\n      \"淳安县\",\n      \"建德市\"\n    ],\n    \"宁波市\": [\n      \"海曙区\",\n      \"江北区\",\n      \"北仑区\",\n      \"镇海区\",\n      \"鄞州区\",\n      \"奉化区\",\n      \"象山县\",\n      \"宁海县\",\n      \"余姚市\",\n      \"慈溪市\"\n    ],\n    \"温州市\": [\n      \"鹿城区\",\n      \"龙湾区\",\n      \"瓯海区\",\n      \"洞头区\",\n      \"永嘉县\",\n      \"平阳县\",\n      \"苍南县\",\n      \"文成县\",\n      \"泰顺县\",\n      \"瑞安市\",\n      \"乐清市\",\n      \"龙港市\"\n    ],\n    \"嘉兴市\": [\n      \"南湖区\",\n      \"秀洲区\",\n      \"嘉善县\",\n      \"海盐县\",\n      \"海宁市\",\n      \"平湖市\",\n      \"桐乡市\"\n    ],\n    \"湖州市\": [\n      \"吴兴区\",\n      \"南浔区\",\n      \"德清县\",\n      \"长兴县\",\n      \"安吉县\"\n    ],\n    \"绍兴市\": [\n      \"越城区\",\n      \"柯桥区\",\n      \"上虞区\",\n      \"新昌县\",\n      \"诸暨市\",\n      \"嵊州市\"\n    ],\n    \"金华市\": [\n      \"婺城区\",\n      \"金东区\",\n      \"武义县\",\n      \"浦江县\",\n      \"磐安县\",\n      \"兰溪市\",\n      \"义乌市\",\n      \"东阳市\",\n      \"永康市\"\n    ],\n    \"衢州市\": [\n      \"柯城区\",\n      \"衢江区\",\n      \"常山县\",\n      \"开化县\",\n      \"龙游县\",\n      \"江山市\"\n    ],\n    \"舟山市\": [\n      \"定海区\",\n      \"普陀区\",\n      \"岱山县\",\n      \"嵊泗县\"\n    ],\n    \"台州市\": [\n      \"椒江区\",\n      \"黄岩区\",\n      \"路桥区\",\n      \"三门县\",\n      \"天台县\",\n      \"仙居县\",\n      \"温岭市\",\n      \"临海市\",\n      \"玉环市\"\n    ],\n    \"丽水市\": [\n      \"莲都区\",\n      \"青田县\",\n      \"缙云县\",\n      \"遂昌县\",\n      \"松阳县\",\n      \"云和县\",\n      \"庆元县\",\n      \"景宁畲族自治县\",\n      \"龙泉市\"\n    ]\n  },\n  \"安徽省\": {\n    \"合肥市\": [\n      \"瑶海区\",\n      \"庐阳区\",\n      \"蜀山区\",\n      \"包河区\",\n      \"长丰县\",\n      \"肥东县\",\n      \"肥西县\",\n      \"庐江县\",\n      \"巢湖市\"\n    ],\n    \"芜湖市\": [\n      \"镜湖区\",\n      \"鸠江区\",\n      \"弋江区\",\n      \"湾沚区\",\n      \"繁昌区\",\n      \"南陵县\",\n      \"无为市\"\n    ],\n    \"蚌埠市\": [\n      \"龙子湖区\",\n      \"蚌山区\",\n      \"禹会区\",\n      \"淮上区\",\n      \"怀远县\",\n      \"五河县\",\n      \"固镇县\"\n    ],\n    \"淮南市\": [\n      \"大通区\",\n      \"田家庵区\",\n      \"谢家集区\",\n      \"八公山区\",\n      \"潘集区\",\n      \"凤台县\",\n      \"寿县\"\n    ],\n    \"马鞍山市\": [\n      \"花山区\",\n      \"雨山区\",\n      \"博望区\",\n      \"当涂县\",\n      \"含山县\",\n      \"和县\"\n    ],\n    \"淮北市\": [\n      \"杜集区\",\n      \"相山区\",\n      \"烈山区\",\n      \"濉溪县\"\n    ],\n    \"铜陵市\": [\n      \"铜官区\",\n      \"义安区\",\n      \"郊区\",\n      \"枞阳县\"\n    ],\n    \"安庆市\": [\n      \"迎江区\",\n      \"大观区\",\n      \"宜秀区\",\n      \"怀宁县\",\n      \"太湖县\",\n      \"宿松县\",\n      \"望江县\",\n      \"岳西县\",\n      \"桐城市\",\n      \"潜山市\"\n    ],\n    \"黄山市\": [\n      \"屯溪区\",\n      \"黄山区\",\n      \"徽州区\",\n      \"歙县\",\n      \"休宁县\",\n      \"黟县\",\n      \"祁门县\"\n    ],\n    \"滁州市\": [\n      \"琅琊区\",\n      \"南谯区\",\n      \"来安县\",\n      \"全椒县\",\n      \"定远县\",\n      \"凤阳县\",\n      \"天长市\",\n      \"明光市\"\n    ],\n    \"阜阳市\": [\n      \"颍州区\",\n      \"颍东区\",\n      \"颍泉区\",\n      \"临泉县\",\n      \"太和县\",\n      \"阜南县\",\n      \"颍上县\",\n      \"界首市\"\n    ],\n    \"宿州市\": [\n      \"埇桥区\",\n      \"砀山县\",\n      \"萧县\",\n      \"灵璧县\",\n      \"泗县\"\n    ],\n    \"六安市\": [\n      \"金安区\",\n      \"裕安区\",\n      \"叶集区\",\n      \"霍邱县\",\n      \"舒城县\",\n      \"金寨县\",\n      \"霍山县\"\n    ],\n    \"亳州市\": [\n      \"谯城区\",\n      \"涡阳县\",\n      \"蒙城县\",\n      \"利辛县\"\n    ],\n    \"池州市\": [\n      \"贵池区\",\n      \"东至县\",\n      \"石台县\",\n      \"青阳县\"\n    ],\n    \"宣城市\": [\n      \"宣州区\",\n      \"郎溪县\",\n      \"泾县\",\n      \"绩溪县\",\n      \"旌德县\",\n      \"宁国市\",\n      \"广德市\"\n    ]\n  },\n  \"福建省\": {\n    \"福州市\": [\n      \"鼓楼区\",\n      \"台江区\",\n      \"仓山区\",\n      \"马尾区\",\n      \"晋安区\",\n      \"长乐区\",\n      \"闽侯县\",\n      \"连江县\",\n      \"罗源县\",\n      \"闽清县\",\n      \"永泰县\",\n      \"平潭县\",\n      \"福清市\"\n    ],\n    \"厦门市\": [\n      \"思明区\",\n      \"海沧区\",\n      \"湖里区\",\n      \"集美区\",\n      \"同安区\",\n      \"翔安区\"\n    ],\n    \"莆田市\": [\n      \"城厢区\",\n      \"涵江区\",\n      \"荔城区\",\n      \"秀屿区\",\n      \"仙游县\"\n    ],\n    \"三明市\": [\n      \"三元区\",\n      \"明溪县\",\n      \"清流县\",\n      \"宁化县\",\n      \"大田县\",\n      \"尤溪县\",\n      \"沙县区\",\n      \"将乐县\",\n      \"泰宁县\",\n      \"建宁县\",\n      \"永安市\"\n    ],\n    \"泉州市\": [\n      \"鲤城区\",\n      \"丰泽区\",\n      \"洛江区\",\n      \"泉港区\",\n      \"惠安县\",\n      \"安溪县\",\n      \"永春县\",\n      \"德化县\",\n      \"金门县\",\n      \"石狮市\",\n      \"晋江市\",\n      \"南安市\"\n    ],\n    \"漳州市\": [\n      \"芗城区\",\n      \"龙文区\",\n      \"云霄县\",\n      \"漳浦县\",\n      \"诏安县\",\n      \"长泰区\",\n      \"东山县\",\n      \"南靖县\",\n      \"平和县\",\n      \"华安县\",\n      \"龙海区\"\n    ],\n    \"南平市\": [\n      \"延平区\",\n      \"建阳区\",\n      \"顺昌县\",\n      \"浦城县\",\n      \"光泽县\",\n      \"松溪县\",\n      \"政和县\",\n      \"邵武市\",\n      \"武夷山市\",\n      \"建瓯市\"\n    ],\n    \"龙岩市\": [\n      \"新罗区\",\n      \"永定区\",\n      \"长汀县\",\n      \"上杭县\",\n      \"武平县\",\n      \"连城县\",\n      \"漳平市\"\n    ],\n    \"宁德市\": [\n      \"蕉城区\",\n      \"霞浦县\",\n      \"古田县\",\n      \"屏南县\",\n      \"寿宁县\",\n      \"周宁县\",\n      \"柘荣县\",\n      \"福安市\",\n      \"福鼎市\"\n    ]\n  },\n  \"江西省\": {\n    \"南昌市\": [\n      \"东湖区\",\n      \"西湖区\",\n      \"青云谱区\",\n      \"青山湖区\",\n      \"新建区\",\n      \"红谷滩区\",\n      \"南昌县\",\n      \"安义县\",\n      \"进贤县\"\n    ],\n    \"景德镇市\": [\n      \"昌江区\",\n      \"珠山区\",\n      \"浮梁县\",\n      \"乐平市\"\n    ],\n    \"萍乡市\": [\n      \"安源区\",\n      \"湘东区\",\n      \"莲花县\",\n      \"上栗县\",\n      \"芦溪县\"\n    ],\n    \"九江市\": [\n      \"濂溪区\",\n      \"浔阳区\",\n      \"柴桑区\",\n      \"武宁县\",\n      \"修水县\",\n      \"永修县\",\n      \"德安县\",\n      \"都昌县\",\n      \"湖口县\",\n      \"彭泽县\",\n      \"瑞昌市\",\n      \"共青城市\",\n      \"庐山市\"\n    ],\n    \"新余市\": [\n      \"渝水区\",\n      \"分宜县\"\n    ],\n    \"鹰潭市\": [\n      \"月湖区\",\n      \"余江区\",\n      \"贵溪市\"\n    ],\n    \"赣州市\": [\n      \"章贡区\",\n      \"南康区\",\n      \"赣县区\",\n      \"信丰县\",\n      \"大余县\",\n      \"上犹县\",\n      \"崇义县\",\n      \"安远县\",\n      \"定南县\",\n      \"全南县\",\n      \"宁都县\",\n      \"于都县\",\n      \"兴国县\",\n      \"会昌县\",\n      \"寻乌县\",\n      \"石城县\",\n      \"瑞金市\",\n      \"龙南市\"\n    ],\n    \"吉安市\": [\n      \"吉州区\",\n      \"青原区\",\n      \"吉安县\",\n      \"吉水县\",\n      \"峡江县\",\n      \"新干县\",\n      \"永丰县\",\n      \"泰和县\",\n      \"遂川县\",\n      \"万安县\",\n      \"安福县\",\n      \"永新县\",\n      \"井冈山市\"\n    ],\n    \"宜春市\": [\n      \"袁州区\",\n      \"奉新县\",\n      \"万载县\",\n      \"上高县\",\n      \"宜丰县\",\n      \"靖安县\",\n      \"铜鼓县\",\n      \"丰城市\",\n      \"樟树市\",\n      \"高安市\"\n    ],\n    \"抚州市\": [\n      \"临川区\",\n      \"东乡区\",\n      \"南城县\",\n      \"黎川县\",\n      \"南丰县\",\n      \"崇仁县\",\n      \"乐安县\",\n      \"宜黄县\",\n      \"金溪县\",\n      \"资溪县\",\n      \"广昌县\"\n    ],\n    \"上饶市\": [\n      \"信州区\",\n      \"广丰区\",\n      \"广信区\",\n      \"玉山县\",\n      \"铅山县\",\n      \"横峰县\",\n      \"弋阳县\",\n      \"余干县\",\n      \"鄱阳县\",\n      \"万年县\",\n      \"婺源县\",\n      \"德兴市\"\n    ]\n  },\n  \"山东省\": {\n    \"济南市\": [\n      \"历下区\",\n      \"市中区\",\n      \"槐荫区\",\n      \"天桥区\",\n      \"历城区\",\n      \"长清区\",\n      \"章丘区\",\n      \"济阳区\",\n      \"莱芜区\",\n      \"钢城区\",\n      \"平阴县\",\n      \"商河县\"\n    ],\n    \"青岛市\": [\n      \"市南区\",\n      \"市北区\",\n      \"黄岛区\",\n      \"崂山区\",\n      \"李沧区\",\n      \"城阳区\",\n      \"即墨区\",\n      \"胶州市\",\n      \"平度市\",\n      \"莱西市\"\n    ],\n    \"淄博市\": [\n      \"淄川区\",\n      \"张店区\",\n      \"博山区\",\n      \"临淄区\",\n      \"周村区\",\n      \"桓台县\",\n      \"高青县\",\n      \"沂源县\"\n    ],\n    \"枣庄市\": [\n      \"市中区\",\n      \"薛城区\",\n      \"峄城区\",\n      \"台儿庄区\",\n      \"山亭区\",\n      \"滕州市\"\n    ],\n    \"东营市\": [\n      \"东营区\",\n      \"河口区\",\n      \"垦利区\",\n      \"利津县\",\n      \"广饶县\"\n    ],\n    \"烟台市\": [\n      \"芝罘区\",\n      \"福山区\",\n      \"牟平区\",\n      \"莱山区\",\n      \"蓬莱区\",\n      \"龙口市\",\n      \"莱阳市\",\n      \"莱州市\",\n      \"招远市\",\n      \"栖霞市\",\n      \"海阳市\"\n    ],\n    \"潍坊市\": [\n      \"潍城区\",\n      \"寒亭区\",\n      \"坊子区\",\n      \"奎文区\",\n      \"临朐县\",\n      \"昌乐县\",\n      \"青州市\",\n      \"诸城市\",\n      \"寿光市\",\n      \"安丘市\",\n      \"高密市\",\n      \"昌邑市\"\n    ],\n    \"济宁市\": [\n      \"任城区\",\n      \"兖州区\",\n      \"微山县\",\n      \"鱼台县\",\n      \"金乡县\",\n      \"嘉祥县\",\n      \"汶上县\",\n      \"泗水县\",\n      \"梁山县\",\n      \"曲阜市\",\n      \"邹城市\"\n    ],\n    \"泰安市\": [\n      \"泰山区\",\n      \"岱岳区\",\n      \"宁阳县\",\n      \"东平县\",\n      \"新泰市\",\n      \"肥城市\"\n    ],\n    \"威海市\": [\n      \"环翠区\",\n      \"文登区\",\n      \"荣成市\",\n      \"乳山市\"\n    ],\n    \"日照市\": [\n      \"东港区\",\n      \"岚山区\",\n      \"五莲县\",\n      \"莒县\"\n    ],\n    \"临沂市\": [\n      \"兰山区\",\n      \"罗庄区\",\n      \"河东区\",\n      \"沂南县\",\n      \"郯城县\",\n      \"沂水县\",\n      \"兰陵县\",\n      \"费县\",\n      \"平邑县\",\n      \"莒南县\",\n      \"蒙阴县\",\n      \"临沭县\"\n    ],\n    \"德州市\": [\n      \"德城区\",\n      \"陵城区\",\n      \"宁津县\",\n      \"庆云县\",\n      \"临邑县\",\n      \"齐河县\",\n      \"平原县\",\n      \"夏津县\",\n      \"武城县\",\n      \"乐陵市\",\n      \"禹城市\"\n    ],\n    \"聊城市\": [\n      \"东昌府区\",\n      \"茌平区\",\n      \"阳谷县\",\n      \"莘县\",\n      \"东阿县\",\n      \"冠县\",\n      \"高唐县\",\n      \"临清市\"\n    ],\n    \"滨州市\": [\n      \"滨城区\",\n      \"沾化区\",\n      \"惠民县\",\n      \"阳信县\",\n      \"无棣县\",\n      \"博兴县\",\n      \"邹平市\"\n    ],\n    \"菏泽市\": [\n      \"牡丹区\",\n      \"定陶区\",\n      \"曹县\",\n      \"单县\",\n      \"成武县\",\n      \"巨野县\",\n      \"郓城县\",\n      \"鄄城县\",\n      \"东明县\"\n    ]\n  },\n  \"河南省\": {\n    \"郑州市\": [\n      \"中原区\",\n      \"二七区\",\n      \"管城回族区\",\n      \"金水区\",\n      \"上街区\",\n      \"惠济区\",\n      \"中牟县\",\n      \"巩义市\",\n      \"荥阳市\",\n      \"新密市\",\n      \"新郑市\",\n      \"登封市\",\n      \"郑州经济技术开发区\",\n      \"郑州高新技术产业开发区\",\n      \"郑州航空港经济综合实验区\"\n    ],\n    \"开封市\": [\n      \"龙亭区\",\n      \"顺河回族区\",\n      \"鼓楼区\",\n      \"禹王台区\",\n      \"祥符区\",\n      \"杞县\",\n      \"通许县\",\n      \"尉氏县\",\n      \"兰考县\"\n    ],\n    \"洛阳市\": [\n      \"老城区\",\n      \"西工区\",\n      \"瀍河回族区\",\n      \"涧西区\",\n      \"孟津区\",\n      \"洛龙区\",\n      \"新安县\",\n      \"栾川县\",\n      \"嵩县\",\n      \"汝阳县\",\n      \"宜阳县\",\n      \"洛宁县\",\n      \"伊川县\",\n      \"偃师区\"\n    ],\n    \"平顶山市\": [\n      \"新华区\",\n      \"卫东区\",\n      \"石龙区\",\n      \"湛河区\",\n      \"宝丰县\",\n      \"叶县\",\n      \"鲁山县\",\n      \"郏县\",\n      \"舞钢市\",\n      \"汝州市\"\n    ],\n    \"安阳市\": [\n      \"文峰区\",\n      \"北关区\",\n      \"殷都区\",\n      \"龙安区\",\n      \"安阳县\",\n      \"汤阴县\",\n      \"滑县\",\n      \"内黄县\",\n      \"林州市\"\n    ],\n    \"鹤壁市\": [\n      \"鹤山区\",\n      \"山城区\",\n      \"淇滨区\",\n      \"浚县\",\n      \"淇县\"\n    ],\n    \"新乡市\": [\n      \"红旗区\",\n      \"卫滨区\",\n      \"凤泉区\",\n      \"牧野区\",\n      \"新乡县\",\n      \"获嘉县\",\n      \"原阳县\",\n      \"延津县\",\n      \"封丘县\",\n      \"卫辉市\",\n      \"辉县市\",\n      \"长垣市\"\n    ],\n    \"焦作市\": [\n      \"解放区\",\n      \"中站区\",\n      \"马村区\",\n      \"山阳区\",\n      \"修武县\",\n      \"博爱县\",\n      \"武陟县\",\n      \"温县\",\n      \"沁阳市\",\n      \"孟州市\"\n    ],\n    \"濮阳市\": [\n      \"华龙区\",\n      \"清丰县\",\n      \"南乐县\",\n      \"范县\",\n      \"台前县\",\n      \"濮阳县\"\n    ],\n    \"许昌市\": [\n      \"魏都区\",\n      \"建安区\",\n      \"鄢陵县\",\n      \"襄城县\",\n      \"禹州市\",\n      \"长葛市\"\n    ],\n    \"漯河市\": [\n      \"源汇区\",\n      \"郾城区\",\n      \"召陵区\",\n      \"舞阳县\",\n      \"临颍县\"\n    ],\n    \"三门峡市\": [\n      \"湖滨区\",\n      \"陕州区\",\n      \"渑池县\",\n      \"卢氏县\",\n      \"义马市\",\n      \"灵宝市\"\n    ],\n    \"南阳市\": [\n      \"宛城区\",\n      \"卧龙区\",\n      \"南召县\",\n      \"方城县\",\n      \"西峡县\",\n      \"镇平县\",\n      \"内乡县\",\n      \"淅川县\",\n      \"社旗县\",\n      \"唐河县\",\n      \"新野县\",\n      \"桐柏县\",\n      \"邓州市\"\n    ],\n    \"商丘市\": [\n      \"梁园区\",\n      \"睢阳区\",\n      \"民权县\",\n      \"睢县\",\n      \"宁陵县\",\n      \"柘城县\",\n      \"虞城县\",\n      \"夏邑县\",\n      \"永城市\"\n    ],\n    \"信阳市\": [\n      \"浉河区\",\n      \"平桥区\",\n      \"罗山县\",\n      \"光山县\",\n      \"新县\",\n      \"商城县\",\n      \"固始县\",\n      \"潢川县\",\n      \"淮滨县\",\n      \"息县\"\n    ],\n    \"周口市\": [\n      \"川汇区\",\n      \"淮阳区\",\n      \"扶沟县\",\n      \"西华县\",\n      \"商水县\",\n      \"沈丘县\",\n      \"郸城县\",\n      \"太康县\",\n      \"鹿邑县\",\n      \"项城市\"\n    ],\n    \"驻马店市\": [\n      \"驿城区\",\n      \"西平县\",\n      \"上蔡县\",\n      \"平舆县\",\n      \"正阳县\",\n      \"确山县\",\n      \"泌阳县\",\n      \"汝南县\",\n      \"遂平县\",\n      \"新蔡县\"\n    ],\n    \"济源市\": [\n      \"济源市\"\n    ]\n  },\n  \"湖北省\": {\n    \"武汉市\": [\n      \"江岸区\",\n      \"江汉区\",\n      \"硚口区\",\n      \"汉阳区\",\n      \"武昌区\",\n      \"青山区\",\n      \"洪山区\",\n      \"东西湖区\",\n      \"汉南区\",\n      \"蔡甸区\",\n      \"江夏区\",\n      \"黄陂区\",\n      \"新洲区\"\n    ],\n    \"黄石市\": [\n      \"黄石港区\",\n      \"西塞山区\",\n      \"下陆区\",\n      \"铁山区\",\n      \"阳新县\",\n      \"大冶市\"\n    ],\n    \"十堰市\": [\n      \"茅箭区\",\n      \"张湾区\",\n      \"郧阳区\",\n      \"郧西县\",\n      \"竹山县\",\n      \"竹溪县\",\n      \"房县\",\n      \"丹江口市\"\n    ],\n    \"宜昌市\": [\n      \"西陵区\",\n      \"伍家岗区\",\n      \"点军区\",\n      \"猇亭区\",\n      \"夷陵区\",\n      \"远安县\",\n      \"兴山县\",\n      \"秭归县\",\n      \"长阳土家族自治县\",\n      \"五峰土家族自治县\",\n      \"宜都市\",\n      \"当阳市\",\n      \"枝江市\"\n    ],\n    \"襄阳市\": [\n      \"襄城区\",\n      \"樊城区\",\n      \"襄州区\",\n      \"南漳县\",\n      \"谷城县\",\n      \"保康县\",\n      \"老河口市\",\n      \"枣阳市\",\n      \"宜城市\"\n    ],\n    \"鄂州市\": [\n      \"梁子湖区\",\n      \"华容区\",\n      \"鄂城区\"\n    ],\n    \"荆门市\": [\n      \"东宝区\",\n      \"掇刀区\",\n      \"沙洋县\",\n      \"钟祥市\",\n      \"京山市\"\n    ],\n    \"孝感市\": [\n      \"孝南区\",\n      \"孝昌县\",\n      \"大悟县\",\n      \"云梦县\",\n      \"应城市\",\n      \"安陆市\",\n      \"汉川市\"\n    ],\n    \"荆州市\": [\n      \"沙市区\",\n      \"荆州区\",\n      \"公安县\",\n      \"江陵县\",\n      \"石首市\",\n      \"洪湖市\",\n      \"松滋市\",\n      \"监利市\"\n    ],\n    \"黄冈市\": [\n      \"黄州区\",\n      \"团风县\",\n      \"红安县\",\n      \"罗田县\",\n      \"英山县\",\n      \"浠水县\",\n      \"蕲春县\",\n      \"黄梅县\",\n      \"麻城市\",\n      \"武穴市\"\n    ],\n    \"咸宁市\": [\n      \"咸安区\",\n      \"嘉鱼县\",\n      \"通城县\",\n      \"崇阳县\",\n      \"通山县\",\n      \"赤壁市\"\n    ],\n    \"随州市\": [\n      \"曾都区\",\n      \"随县\",\n      \"广水市\"\n    ],\n    \"恩施土家族苗族自治州\": [\n      \"恩施市\",\n      \"利川市\",\n      \"建始县\",\n      \"巴东县\",\n      \"宣恩县\",\n      \"咸丰县\",\n      \"来凤县\",\n      \"鹤峰县\"\n    ],\n    \"仙桃市\": [\n      \"仙桃市\"\n    ],\n    \"潜江市\": [\n      \"潜江市\"\n    ],\n    \"天门市\": [\n      \"天门市\"\n    ],\n    \"神农架林区\": [\n      \"神农架林区\"\n    ]\n  },\n  \"湖南省\": {\n    \"长沙市\": [\n      \"芙蓉区\",\n      \"天心区\",\n      \"岳麓区\",\n      \"开福区\",\n      \"雨花区\",\n      \"望城区\",\n      \"长沙县\",\n      \"浏阳市\",\n      \"宁乡市\"\n    ],\n    \"株洲市\": [\n      \"荷塘区\",\n      \"芦淞区\",\n      \"石峰区\",\n      \"天元区\",\n      \"渌口区\",\n      \"攸县\",\n      \"茶陵县\",\n      \"炎陵县\",\n      \"醴陵市\"\n    ],\n    \"湘潭市\": [\n      \"雨湖区\",\n      \"岳塘区\",\n      \"湘潭县\",\n      \"湘乡市\",\n      \"韶山市\"\n    ],\n    \"衡阳市\": [\n      \"珠晖区\",\n      \"雁峰区\",\n      \"石鼓区\",\n      \"蒸湘区\",\n      \"南岳区\",\n      \"衡阳县\",\n      \"衡南县\",\n      \"衡山县\",\n      \"衡东县\",\n      \"祁东县\",\n      \"耒阳市\",\n      \"常宁市\"\n    ],\n    \"邵阳市\": [\n      \"双清区\",\n      \"大祥区\",\n      \"北塔区\",\n      \"新邵县\",\n      \"邵阳县\",\n      \"隆回县\",\n      \"洞口县\",\n      \"绥宁县\",\n      \"新宁县\",\n      \"城步苗族自治县\",\n      \"武冈市\",\n      \"邵东市\"\n    ],\n    \"岳阳市\": [\n      \"岳阳楼区\",\n      \"云溪区\",\n      \"君山区\",\n      \"岳阳县\",\n      \"华容县\",\n      \"湘阴县\",\n      \"平江县\",\n      \"汨罗市\",\n      \"临湘市\"\n    ],\n    \"常德市\": [\n      \"武陵区\",\n      \"鼎城区\",\n      \"安乡县\",\n      \"汉寿县\",\n      \"澧县\",\n      \"临澧县\",\n      \"桃源县\",\n      \"石门县\",\n      \"津市市\"\n    ],\n    \"张家界市\": [\n      \"永定区\",\n      \"武陵源区\",\n      \"慈利县\",\n      \"桑植县\"\n    ],\n    \"益阳市\": [\n      \"资阳区\",\n      \"赫山区\",\n      \"南县\",\n      \"桃江县\",\n      \"安化县\",\n      \"沅江市\"\n    ],\n    \"郴州市\": [\n      \"北湖区\",\n      \"苏仙区\",\n      \"桂阳县\",\n      \"宜章县\",\n      \"永兴县\",\n      \"嘉禾县\",\n      \"临武县\",\n      \"汝城县\",\n      \"桂东县\",\n      \"安仁县\",\n      \"资兴市\"\n    ],\n    \"永州市\": [\n      \"零陵区\",\n      \"冷水滩区\",\n      \"祁阳市\",\n      \"东安县\",\n      \"双牌县\",\n      \"道县\",\n      \"江永县\",\n      \"宁远县\",\n      \"蓝山县\",\n      \"新田县\",\n      \"江华瑶族自治县\"\n    ],\n    \"怀化市\": [\n      \"鹤城区\",\n      \"中方县\",\n      \"沅陵县\",\n      \"辰溪县\",\n      \"溆浦县\",\n      \"会同县\",\n      \"麻阳苗族自治县\",\n      \"新晃侗族自治县\",\n      \"芷江侗族自治县\",\n      \"靖州苗族侗族自治县\",\n      \"通道侗族自治县\",\n      \"洪江市\"\n    ],\n    \"娄底市\": [\n      \"娄星区\",\n      \"双峰县\",\n      \"新化县\",\n      \"冷水江市\",\n      \"涟源市\"\n    ],\n    \"湘西土家族苗族自治州\": [\n      \"吉首市\",\n      \"泸溪县\",\n      \"凤凰县\",\n      \"花垣县\",\n      \"保靖县\",\n      \"古丈县\",\n      \"永顺县\",\n      \"龙山县\"\n    ]\n  },\n  \"广东省\": {\n    \"广州市\": [\n      \"荔湾区\",\n      \"越秀区\",\n      \"海珠区\",\n      \"天河区\",\n      \"白云区\",\n      \"黄埔区\",\n      \"番禺区\",\n      \"花都区\",\n      \"南沙区\",\n      \"从化区\",\n      \"增城区\"\n    ],\n    \"韶关市\": [\n      \"武江区\",\n      \"浈江区\",\n      \"曲江区\",\n      \"始兴县\",\n      \"仁化县\",\n      \"翁源县\",\n      \"乳源瑶族自治县\",\n      \"新丰县\",\n      \"乐昌市\",\n      \"南雄市\"\n    ],\n    \"深圳市\": [\n      \"罗湖区\",\n      \"福田区\",\n      \"南山区\",\n      \"宝安区\",\n      \"龙岗区\",\n      \"盐田区\",\n      \"龙华区\",\n      \"坪山区\",\n      \"光明区\"\n    ],\n    \"珠海市\": [\n      \"香洲区\",\n      \"斗门区\",\n      \"金湾区\"\n    ],\n    \"汕头市\": [\n      \"龙湖区\",\n      \"金平区\",\n      \"濠江区\",\n      \"潮阳区\",\n      \"潮南区\",\n      \"澄海区\",\n      \"南澳县\"\n    ],\n    \"佛山市\": [\n      \"禅城区\",\n      \"南海区\",\n      \"顺德区\",\n      \"三水区\",\n      \"高明区\"\n    ],\n    \"江门市\": [\n      \"蓬江区\",\n      \"江海区\",\n      \"新会区\",\n      \"台山市\",\n      \"开平市\",\n      \"鹤山市\",\n      \"恩平市\"\n    ],\n    \"湛江市\": [\n      \"赤坎区\",\n      \"霞山区\",\n      \"坡头区\",\n      \"麻章区\",\n      \"遂溪县\",\n      \"徐闻县\",\n      \"廉江市\",\n      \"雷州市\",\n      \"吴川市\"\n    ],\n    \"茂名市\": [\n      \"茂南区\",\n      \"电白区\",\n      \"高州市\",\n      \"化州市\",\n      \"信宜市\"\n    ],\n    \"肇庆市\": [\n      \"端州区\",\n      \"鼎湖区\",\n      \"高要区\",\n      \"广宁县\",\n      \"怀集县\",\n      \"封开县\",\n      \"德庆县\",\n      \"四会市\"\n    ],\n    \"惠州市\": [\n      \"惠城区\",\n      \"惠阳区\",\n      \"博罗县\",\n      \"惠东县\",\n      \"龙门县\"\n    ],\n    \"梅州市\": [\n      \"梅江区\",\n      \"梅县区\",\n      \"大埔县\",\n      \"丰顺县\",\n      \"五华县\",\n      \"平远县\",\n      \"蕉岭县\",\n      \"兴宁市\"\n    ],\n    \"汕尾市\": [\n      \"城区\",\n      \"海丰县\",\n      \"陆河县\",\n      \"陆丰市\"\n    ],\n    \"河源市\": [\n      \"源城区\",\n      \"紫金县\",\n      \"龙川县\",\n      \"连平县\",\n      \"和平县\",\n      \"东源县\"\n    ],\n    \"阳江市\": [\n      \"江城区\",\n      \"阳东区\",\n      \"阳西县\",\n      \"阳春市\"\n    ],\n    \"清远市\": [\n      \"清城区\",\n      \"清新区\",\n      \"佛冈县\",\n      \"阳山县\",\n      \"连山壮族瑶族自治县\",\n      \"连南瑶族自治县\",\n      \"英德市\",\n      \"连州市\"\n    ],\n    \"东莞市\": [\n      \"东莞市\"\n    ],\n    \"中山市\": [\n      \"中山市\"\n    ],\n    \"潮州市\": [\n      \"湘桥区\",\n      \"潮安区\",\n      \"饶平县\"\n    ],\n    \"揭阳市\": [\n      \"榕城区\",\n      \"揭东区\",\n      \"揭西县\",\n      \"惠来县\",\n      \"普宁市\"\n    ],\n    \"云浮市\": [\n      \"云城区\",\n      \"云安区\",\n      \"新兴县\",\n      \"郁南县\",\n      \"罗定市\"\n    ]\n  },\n  \"广西壮族自治区\": {\n    \"南宁市\": [\n      \"兴宁区\",\n      \"青秀区\",\n      \"江南区\",\n      \"西乡塘区\",\n      \"良庆区\",\n      \"邕宁区\",\n      \"武鸣区\",\n      \"隆安县\",\n      \"马山县\",\n      \"上林县\",\n      \"宾阳县\",\n      \"横州市\"\n    ],\n    \"柳州市\": [\n      \"城中区\",\n      \"鱼峰区\",\n      \"柳南区\",\n      \"柳北区\",\n      \"柳江区\",\n      \"柳城县\",\n      \"鹿寨县\",\n      \"融安县\",\n      \"融水苗族自治县\",\n      \"三江侗族自治县\"\n    ],\n    \"桂林市\": [\n      \"秀峰区\",\n      \"叠彩区\",\n      \"象山区\",\n      \"七星区\",\n      \"雁山区\",\n      \"临桂区\",\n      \"阳朔县\",\n      \"灵川县\",\n      \"全州县\",\n      \"兴安县\",\n      \"永福县\",\n      \"灌阳县\",\n      \"龙胜各族自治县\",\n      \"资源县\",\n      \"平乐县\",\n      \"恭城瑶族自治县\",\n      \"荔浦市\"\n    ],\n    \"梧州市\": [\n      \"万秀区\",\n      \"长洲区\",\n      \"龙圩区\",\n      \"苍梧县\",\n      \"藤县\",\n      \"蒙山县\",\n      \"岑溪市\"\n    ],\n    \"北海市\": [\n      \"海城区\",\n      \"银海区\",\n      \"铁山港区\",\n      \"合浦县\"\n    ],\n    \"防城港市\": [\n      \"港口区\",\n      \"防城区\",\n      \"上思县\",\n      \"东兴市\"\n    ],\n    \"钦州市\": [\n      \"钦南区\",\n      \"钦北区\",\n      \"灵山县\",\n      \"浦北县\"\n    ],\n    \"贵港市\": [\n      \"港北区\",\n      \"港南区\",\n      \"覃塘区\",\n      \"平南县\",\n      \"桂平市\"\n    ],\n    \"玉林市\": [\n      \"玉州区\",\n      \"福绵区\",\n      \"容县\",\n      \"陆川县\",\n      \"博白县\",\n      \"兴业县\",\n      \"北流市\"\n    ],\n    \"百色市\": [\n      \"右江区\",\n      \"田阳区\",\n      \"田东县\",\n      \"德保县\",\n      \"那坡县\",\n      \"凌云县\",\n      \"乐业县\",\n      \"田林县\",\n      \"西林县\",\n      \"隆林各族自治县\",\n      \"靖西市\",\n      \"平果市\"\n    ],\n    \"贺州市\": [\n      \"八步区\",\n      \"平桂区\",\n      \"昭平县\",\n      \"钟山县\",\n      \"富川瑶族自治县\"\n    ],\n    \"河池市\": [\n      \"金城江区\",\n      \"宜州区\",\n      \"南丹县\",\n      \"天峨县\",\n      \"凤山县\",\n      \"东兰县\",\n      \"罗城仫佬族自治县\",\n      \"环江毛南族自治县\",\n      \"巴马瑶族自治县\",\n      \"都安瑶族自治县\",\n      \"大化瑶族自治县\"\n    ],\n    \"来宾市\": [\n      \"兴宾区\",\n      \"忻城县\",\n      \"象州县\",\n      \"武宣县\",\n      \"金秀瑶族自治县\",\n      \"合山市\"\n    ],\n    \"崇左市\": [\n      \"江州区\",\n      \"扶绥县\",\n      \"宁明县\",\n      \"龙州县\",\n      \"大新县\",\n      \"天等县\",\n      \"凭祥市\"\n    ]\n  },\n  \"海南省\": {\n    \"海口市\": [\n      \"秀英区\",\n      \"龙华区\",\n      \"琼山区\",\n      \"美兰区\"\n    ],\n    \"三亚市\": [\n      \"海棠区\",\n      \"吉阳区\",\n      \"天涯区\",\n      \"崖州区\"\n    ],\n    \"三沙市\": [\n      \"西沙区\",\n      \"南沙区\"\n    ],\n    \"儋州市\": [\n      \"儋州市\"\n    ],\n    \"五指山市\": [\n      \"五指山市\"\n    ],\n    \"琼海市\": [\n      \"琼海市\"\n    ],\n    \"文昌市\": [\n      \"文昌市\"\n    ],\n    \"万宁市\": [\n      \"万宁市\"\n    ],\n    \"东方市\": [\n      \"东方市\"\n    ],\n    \"定安县\": [\n      \"定安县\"\n    ],\n    \"屯昌县\": [\n      \"屯昌县\"\n    ],\n    \"澄迈县\": [\n      \"澄迈县\"\n    ],\n    \"临高县\": [\n      \"临高县\"\n    ],\n    \"白沙黎族自治县\": [\n      \"白沙黎族自治县\"\n    ],\n    \"昌江黎族自治县\": [\n      \"昌江黎族自治县\"\n    ],\n    \"乐东黎族自治县\": [\n      \"乐东黎族自治县\"\n    ],\n    \"陵水黎族自治县\": [\n      \"陵水黎族自治县\"\n    ],\n    \"保亭黎族苗族自治县\": [\n      \"保亭黎族苗族自治县\"\n    ],\n    \"琼中黎族苗族自治县\": [\n      \"琼中黎族苗族自治县\"\n    ]\n  },\n  \"重庆市\": {\n    \"重庆市\": [\n      \"万州区\",\n      \"涪陵区\",\n      \"渝中区\",\n      \"大渡口区\",\n      \"江北区\",\n      \"沙坪坝区\",\n      \"九龙坡区\",\n      \"南岸区\",\n      \"北碚区\",\n      \"綦江区\",\n      \"大足区\",\n      \"渝北区\",\n      \"巴南区\",\n      \"黔江区\",\n      \"长寿区\",\n      \"江津区\",\n      \"合川区\",\n      \"永川区\",\n      \"南川区\",\n      \"璧山区\",\n      \"铜梁区\",\n      \"潼南区\",\n      \"荣昌区\",\n      \"开州区\",\n      \"梁平区\",\n      \"武隆区\",\n      \"城口县\",\n      \"丰都县\",\n      \"垫江县\",\n      \"忠县\",\n      \"云阳县\",\n      \"奉节县\",\n      \"巫山县\",\n      \"巫溪县\",\n      \"石柱土家族自治县\",\n      \"秀山土家族苗族自治县\",\n      \"酉阳土家族苗族自治县\",\n      \"彭水苗族土家族自治县\"\n    ]\n  },\n  \"四川省\": {\n    \"成都市\": [\n      \"锦江区\",\n      \"青羊区\",\n      \"金牛区\",\n      \"武侯区\",\n      \"成华区\",\n      \"龙泉驿区\",\n      \"青白江区\",\n      \"新都区\",\n      \"温江区\",\n      \"双流区\",\n      \"郫都区\",\n      \"新津区\",\n      \"金堂县\",\n      \"大邑县\",\n      \"蒲江县\",\n      \"都江堰市\",\n      \"彭州市\",\n      \"邛崃市\",\n      \"崇州市\",\n      \"简阳市\"\n    ],\n    \"自贡市\": [\n      \"自流井区\",\n      \"贡井区\",\n      \"大安区\",\n      \"沿滩区\",\n      \"荣县\",\n      \"富顺县\"\n    ],\n    \"攀枝花市\": [\n      \"东区\",\n      \"西区\",\n      \"仁和区\",\n      \"米易县\",\n      \"盐边县\"\n    ],\n    \"泸州市\": [\n      \"江阳区\",\n      \"纳溪区\",\n      \"龙马潭区\",\n      \"泸县\",\n      \"合江县\",\n      \"叙永县\",\n      \"古蔺县\"\n    ],\n    \"德阳市\": [\n      \"旌阳区\",\n      \"罗江区\",\n      \"中江县\",\n      \"广汉市\",\n      \"什邡市\",\n      \"绵竹市\"\n    ],\n    \"绵阳市\": [\n      \"涪城区\",\n      \"游仙区\",\n      \"安州区\",\n      \"三台县\",\n      \"盐亭县\",\n      \"梓潼县\",\n      \"北川羌族自治县\",\n      \"平武县\",\n      \"江油市\"\n    ],\n    \"广元市\": [\n      \"利州区\",\n      \"昭化区\",\n      \"朝天区\",\n      \"旺苍县\",\n      \"青川县\",\n      \"剑阁县\",\n      \"苍溪县\"\n    ],\n    \"遂宁市\": [\n      \"船山区\",\n      \"安居区\",\n      \"蓬溪县\",\n      \"大英县\",\n      \"射洪市\"\n    ],\n    \"内江市\": [\n      \"市中区\",\n      \"东兴区\",\n      \"威远县\",\n      \"资中县\",\n      \"隆昌市\"\n    ],\n    \"乐山市\": [\n      \"市中区\",\n      \"沙湾区\",\n      \"五通桥区\",\n      \"金口河区\",\n      \"犍为县\",\n      \"井研县\",\n      \"夹江县\",\n      \"沐川县\",\n      \"峨边彝族自治县\",\n      \"马边彝族自治县\",\n      \"峨眉山市\"\n    ],\n    \"南充市\": [\n      \"顺庆区\",\n      \"高坪区\",\n      \"嘉陵区\",\n      \"南部县\",\n      \"营山县\",\n      \"蓬安县\",\n      \"仪陇县\",\n      \"西充县\",\n      \"阆中市\"\n    ],\n    \"眉山市\": [\n      \"东坡区\",\n      \"彭山区\",\n      \"仁寿县\",\n      \"洪雅县\",\n      \"丹棱县\",\n      \"青神县\"\n    ],\n    \"宜宾市\": [\n      \"翠屏区\",\n      \"南溪区\",\n      \"叙州区\",\n      \"江安县\",\n      \"长宁县\",\n      \"高县\",\n      \"珙县\",\n      \"筠连县\",\n      \"兴文县\",\n      \"屏山县\"\n    ],\n    \"广安市\": [\n      \"广安区\",\n      \"前锋区\",\n      \"岳池县\",\n      \"武胜县\",\n      \"邻水县\",\n      \"华蓥市\"\n    ],\n    \"达州市\": [\n      \"通川区\",\n      \"达川区\",\n      \"宣汉县\",\n      \"开江县\",\n      \"大竹县\",\n      \"渠县\",\n      \"万源市\"\n    ],\n    \"雅安市\": [\n      \"雨城区\",\n      \"名山区\",\n      \"荥经县\",\n      \"汉源县\",\n      \"石棉县\",\n      \"天全县\",\n      \"芦山县\",\n      \"宝兴县\"\n    ],\n    \"巴中市\": [\n      \"巴州区\",\n      \"恩阳区\",\n      \"通江县\",\n      \"南江县\",\n      \"平昌县\"\n    ],\n    \"资阳市\": [\n      \"雁江区\",\n      \"安岳县\",\n      \"乐至县\"\n    ],\n    \"阿坝藏族羌族自治州\": [\n      \"马尔康市\",\n      \"汶川县\",\n      \"理县\",\n      \"茂县\",\n      \"松潘县\",\n      \"九寨沟县\",\n      \"金川县\",\n      \"小金县\",\n      \"黑水县\",\n      \"壤塘县\",\n      \"阿坝县\",\n      \"若尔盖县\",\n      \"红原县\"\n    ],\n    \"甘孜藏族自治州\": [\n      \"康定市\",\n      \"泸定县\",\n      \"丹巴县\",\n      \"九龙县\",\n      \"雅江县\",\n      \"道孚县\",\n      \"炉霍县\",\n      \"甘孜县\",\n      \"新龙县\",\n      \"德格县\",\n      \"白玉县\",\n      \"石渠县\",\n      \"色达县\",\n      \"理塘县\",\n      \"巴塘县\",\n      \"乡城县\",\n      \"稻城县\",\n      \"得荣县\"\n    ],\n    \"凉山彝族自治州\": [\n      \"西昌市\",\n      \"木里藏族自治县\",\n      \"盐源县\",\n      \"德昌县\",\n      \"会理市\",\n      \"会东县\",\n      \"宁南县\",\n      \"普格县\",\n      \"布拖县\",\n      \"金阳县\",\n      \"昭觉县\",\n      \"喜德县\",\n      \"冕宁县\",\n      \"越西县\",\n      \"甘洛县\",\n      \"美姑县\",\n      \"雷波县\"\n    ]\n  },\n  \"贵州省\": {\n    \"贵阳市\": [\n      \"南明区\",\n      \"云岩区\",\n      \"花溪区\",\n      \"乌当区\",\n      \"白云区\",\n      \"观山湖区\",\n      \"开阳县\",\n      \"息烽县\",\n      \"修文县\",\n      \"清镇市\"\n    ],\n    \"六盘水市\": [\n      \"钟山区\",\n      \"六枝特区\",\n      \"水城区\",\n      \"盘州市\"\n    ],\n    \"遵义市\": [\n      \"红花岗区\",\n      \"汇川区\",\n      \"播州区\",\n      \"桐梓县\",\n      \"绥阳县\",\n      \"正安县\",\n      \"道真仡佬族苗族自治县\",\n      \"务川仡佬族苗族自治县\",\n      \"凤冈县\",\n      \"湄潭县\",\n      \"余庆县\",\n      \"习水县\",\n      \"赤水市\",\n      \"仁怀市\"\n    ],\n    \"安顺市\": [\n      \"西秀区\",\n      \"平坝区\",\n      \"普定县\",\n      \"镇宁布依族苗族自治县\",\n      \"关岭布依族苗族自治县\",\n      \"紫云苗族布依族自治县\"\n    ],\n    \"毕节市\": [\n      \"七星关区\",\n      \"大方县\",\n      \"黔西市\",\n      \"金沙县\",\n      \"织金县\",\n      \"纳雍县\",\n      \"威宁彝族回族苗族自治县\",\n      \"赫章县\"\n    ],\n    \"铜仁市\": [\n      \"碧江区\",\n      \"万山区\",\n      \"江口县\",\n      \"玉屏侗族自治县\",\n      \"石阡县\",\n      \"思南县\",\n      \"印江土家族苗族自治县\",\n      \"德江县\",\n      \"沿河土家族自治县\",\n      \"松桃苗族自治县\"\n    ],\n    \"黔西南布依族苗族自治州\": [\n      \"兴义市\",\n      \"兴仁市\",\n      \"普安县\",\n      \"晴隆县\",\n      \"贞丰县\",\n      \"望谟县\",\n      \"册亨县\",\n      \"安龙县\"\n    ],\n    \"黔东南苗族侗族自治州\": [\n      \"凯里市\",\n      \"黄平县\",\n      \"施秉县\",\n      \"三穗县\",\n      \"镇远县\",\n      \"岑巩县\",\n      \"天柱县\",\n      \"锦屏县\",\n      \"剑河县\",\n      \"台江县\",\n      \"黎平县\",\n      \"榕江县\",\n      \"从江县\",\n      \"雷山县\",\n      \"麻江县\",\n      \"丹寨县\"\n    ],\n    \"黔南布依族苗族自治州\": [\n      \"都匀市\",\n      \"福泉市\",\n      \"荔波县\",\n      \"贵定县\",\n      \"瓮安县\",\n      \"独山县\",\n      \"平塘县\",\n      \"罗甸县\",\n      \"长顺县\",\n      \"龙里县\",\n      \"惠水县\",\n      \"三都水族自治县\"\n    ]\n  },\n  \"云南省\": {\n    \"昆明市\": [\n      \"五华区\",\n      \"盘龙区\",\n      \"官渡区\",\n      \"西山区\",\n      \"东川区\",\n      \"呈贡区\",\n      \"晋宁区\",\n      \"富民县\",\n      \"宜良县\",\n      \"石林彝族自治县\",\n      \"嵩明县\",\n      \"禄劝彝族苗族自治县\",\n      \"寻甸回族彝族自治县\",\n      \"安宁市\"\n    ],\n    \"曲靖市\": [\n      \"麒麟区\",\n      \"沾益区\",\n      \"马龙区\",\n      \"陆良县\",\n      \"师宗县\",\n      \"罗平县\",\n      \"富源县\",\n      \"会泽县\",\n      \"宣威市\"\n    ],\n    \"玉溪市\": [\n      \"红塔区\",\n      \"江川区\",\n      \"通海县\",\n      \"华宁县\",\n      \"易门县\",\n      \"峨山彝族自治县\",\n      \"新平彝族傣族自治县\",\n      \"元江哈尼族彝族傣族自治县\",\n      \"澄江市\"\n    ],\n    \"保山市\": [\n      \"隆阳区\",\n      \"施甸县\",\n      \"龙陵县\",\n      \"昌宁县\",\n      \"腾冲市\"\n    ],\n    \"昭通市\": [\n      \"昭阳区\",\n      \"鲁甸县\",\n      \"巧家县\",\n      \"盐津县\",\n      \"大关县\",\n      \"永善县\",\n      \"绥江县\",\n      \"镇雄县\",\n      \"彝良县\",\n      \"威信县\",\n      \"水富市\"\n    ],\n    \"丽江市\": [\n      \"古城区\",\n      \"玉龙纳西族自治县\",\n      \"永胜县\",\n      \"华坪县\",\n      \"宁蒗彝族自治县\"\n    ],\n    \"普洱市\": [\n      \"思茅区\",\n      \"宁洱哈尼族彝族自治县\",\n      \"墨江哈尼族自治县\",\n      \"景东彝族自治县\",\n      \"景谷傣族彝族自治县\",\n      \"镇沅彝族哈尼族拉祜族自治县\",\n      \"江城哈尼族彝族自治县\",\n      \"孟连傣族拉祜族佤族自治县\",\n      \"澜沧拉祜族自治县\",\n      \"西盟佤族自治县\"\n    ],\n    \"临沧市\": [\n      \"临翔区\",\n      \"凤庆县\",\n      \"云县\",\n      \"永德县\",\n      \"镇康县\",\n      \"双江拉祜族佤族布朗族傣族自治县\",\n      \"耿马傣族佤族自治县\",\n      \"沧源佤族自治县\"\n    ],\n    \"楚雄彝族自治州\": [\n      \"楚雄市\",\n      \"双柏县\",\n      \"牟定县\",\n      \"南华县\",\n      \"姚安县\",\n      \"大姚县\",\n      \"永仁县\",\n      \"元谋县\",\n      \"武定县\",\n      \"禄丰市\"\n    ],\n    \"红河哈尼族彝族自治州\": [\n      \"个旧市\",\n      \"开远市\",\n      \"蒙自市\",\n      \"弥勒市\",\n      \"屏边苗族自治县\",\n      \"建水县\",\n      \"石屏县\",\n      \"泸西县\",\n      \"元阳县\",\n      \"红河县\",\n      \"金平苗族瑶族傣族自治县\",\n      \"绿春县\",\n      \"河口瑶族自治县\"\n    ],\n    \"文山壮族苗族自治州\": [\n      \"文山市\",\n      \"砚山县\",\n      \"西畴县\",\n      \"麻栗坡县\",\n      \"马关县\",\n      \"丘北县\",\n      \"广南县\",\n      \"富宁县\"\n    ],\n    \"西双版纳傣族自治州\": [\n      \"景洪市\",\n      \"勐海县\",\n      \"勐腊县\"\n    ],\n    \"大理白族自治州\": [\n      \"大理市\",\n      \"漾濞彝族自治县\",\n      \"祥云县\",\n      \"宾川县\",\n      \"弥渡县\",\n      \"南涧彝族自治县\",\n      \"巍山彝族回族自治县\",\n      \"永平县\",\n      \"云龙县\",\n      \"洱源县\",\n      \"剑川县\",\n      \"鹤庆县\"\n    ],\n    \"德宏傣族景颇族自治州\": [\n      \"瑞丽市\",\n      \"芒市\",\n      \"梁河县\",\n      \"盈江县\",\n      \"陇川县\"\n    ],\n    \"怒江傈僳族自治州\": [\n      \"泸水市\",\n      \"福贡县\",\n      \"贡山独龙族怒族自治县\",\n      \"兰坪白族普米族自治县\"\n    ],\n    \"迪庆藏族自治州\": [\n      \"香格里拉市\",\n      \"德钦县\",\n      \"维西傈僳族自治县\"\n    ]\n  },\n  \"西藏自治区\": {\n    \"拉萨市\": [\n      \"城关区\",\n      \"堆龙德庆区\",\n      \"达孜区\",\n      \"林周县\",\n      \"当雄县\",\n      \"尼木县\",\n      \"曲水县\",\n      \"墨竹工卡县\"\n    ],\n    \"日喀则市\": [\n      \"桑珠孜区\",\n      \"南木林县\",\n      \"江孜县\",\n      \"定日县\",\n      \"萨迦县\",\n      \"拉孜县\",\n      \"昂仁县\",\n      \"谢通门县\",\n      \"白朗县\",\n      \"仁布县\",\n      \"康马县\",\n      \"定结县\",\n      \"仲巴县\",\n      \"亚东县\",\n      \"吉隆县\",\n      \"聂拉木县\",\n      \"萨嘎县\",\n      \"岗巴县\"\n    ],\n    \"昌都市\": [\n      \"卡若区\",\n      \"江达县\",\n      \"贡觉县\",\n      \"类乌齐县\",\n      \"丁青县\",\n      \"察雅县\",\n      \"八宿县\",\n      \"左贡县\",\n      \"芒康县\",\n      \"洛隆县\",\n      \"边坝县\"\n    ],\n    \"林芝市\": [\n      \"巴宜区\",\n      \"工布江达县\",\n      \"米林县\",\n      \"墨脱县\",\n      \"波密县\",\n      \"察隅县\",\n      \"朗县\"\n    ],\n    \"山南市\": [\n      \"乃东区\",\n      \"扎囊县\",\n      \"贡嘎县\",\n      \"桑日县\",\n      \"琼结县\",\n      \"曲松县\",\n      \"措美县\",\n      \"洛扎县\",\n      \"加查县\",\n      \"隆子县\",\n      \"错那县\",\n      \"浪卡子县\"\n    ],\n    \"那曲市\": [\n      \"色尼区\",\n      \"嘉黎县\",\n      \"比如县\",\n      \"聂荣县\",\n      \"安多县\",\n      \"申扎县\",\n      \"索县\",\n      \"班戈县\",\n      \"巴青县\",\n      \"尼玛县\",\n      \"双湖县\"\n    ],\n    \"阿里地区\": [\n      \"普兰县\",\n      \"札达县\",\n      \"噶尔县\",\n      \"日土县\",\n      \"革吉县\",\n      \"改则县\",\n      \"措勤县\"\n    ]\n  },\n  \"陕西省\": {\n    \"西安市\": [\n      \"新城区\",\n      \"碑林区\",\n      \"莲湖区\",\n      \"灞桥区\",\n      \"未央区\",\n      \"雁塔区\",\n      \"阎良区\",\n      \"临潼区\",\n      \"长安区\",\n      \"高陵区\",\n      \"鄠邑区\",\n      \"蓝田县\",\n      \"周至县\"\n    ],\n    \"铜川市\": [\n      \"王益区\",\n      \"印台区\",\n      \"耀州区\",\n      \"宜君县\"\n    ],\n    \"宝鸡市\": [\n      \"渭滨区\",\n      \"金台区\",\n      \"陈仓区\",\n      \"凤翔区\",\n      \"岐山县\",\n      \"扶风县\",\n      \"眉县\",\n      \"陇县\",\n      \"千阳县\",\n      \"麟游县\",\n      \"凤县\",\n      \"太白县\"\n    ],\n    \"咸阳市\": [\n      \"秦都区\",\n      \"杨陵区\",\n      \"渭城区\",\n      \"三原县\",\n      \"泾阳县\",\n      \"乾县\",\n      \"礼泉县\",\n      \"永寿县\",\n      \"长武县\",\n      \"旬邑县\",\n      \"淳化县\",\n      \"武功县\",\n      \"兴平市\",\n      \"彬州市\"\n    ],\n    \"渭南市\": [\n      \"临渭区\",\n      \"华州区\",\n      \"潼关县\",\n      \"大荔县\",\n      \"合阳县\",\n      \"澄城县\",\n      \"蒲城县\",\n      \"白水县\",\n      \"富平县\",\n      \"韩城市\",\n      \"华阴市\"\n    ],\n    \"延安市\": [\n      \"宝塔区\",\n      \"安塞区\",\n      \"延长县\",\n      \"延川县\",\n      \"志丹县\",\n      \"吴起县\",\n      \"甘泉县\",\n      \"富县\",\n      \"洛川县\",\n      \"宜川县\",\n      \"黄龙县\",\n      \"黄陵县\",\n      \"子长市\"\n    ],\n    \"汉中市\": [\n      \"汉台区\",\n      \"南郑区\",\n      \"城固县\",\n      \"洋县\",\n      \"西乡县\",\n      \"勉县\",\n      \"宁强县\",\n      \"略阳县\",\n      \"镇巴县\",\n      \"留坝县\",\n      \"佛坪县\"\n    ],\n    \"榆林市\": [\n      \"榆阳区\",\n      \"横山区\",\n      \"府谷县\",\n      \"靖边县\",\n      \"定边县\",\n      \"绥德县\",\n      \"米脂县\",\n      \"佳县\",\n      \"吴堡县\",\n      \"清涧县\",\n      \"子洲县\",\n      \"神木市\"\n    ],\n    \"安康市\": [\n      \"汉滨区\",\n      \"汉阴县\",\n      \"石泉县\",\n      \"宁陕县\",\n      \"紫阳县\",\n      \"岚皋县\",\n      \"平利县\",\n      \"镇坪县\",\n      \"旬阳市\",\n      \"白河县\"\n    ],\n    \"商洛市\": [\n      \"商州区\",\n      \"洛南县\",\n      \"丹凤县\",\n      \"商南县\",\n      \"山阳县\",\n      \"镇安县\",\n      \"柞水县\"\n    ]\n  },\n  \"甘肃省\": {\n    \"兰州市\": [\n      \"城关区\",\n      \"七里河区\",\n      \"西固区\",\n      \"安宁区\",\n      \"红古区\",\n      \"永登县\",\n      \"皋兰县\",\n      \"榆中县\"\n    ],\n    \"嘉峪关市\": [\n      \"嘉峪关市\"\n    ],\n    \"金昌市\": [\n      \"金川区\",\n      \"永昌县\"\n    ],\n    \"白银市\": [\n      \"白银区\",\n      \"平川区\",\n      \"靖远县\",\n      \"会宁县\",\n      \"景泰县\"\n    ],\n    \"天水市\": [\n      \"秦州区\",\n      \"麦积区\",\n      \"清水县\",\n      \"秦安县\",\n      \"甘谷县\",\n      \"武山县\",\n      \"张家川回族自治县\"\n    ],\n    \"武威市\": [\n      \"凉州区\",\n      \"民勤县\",\n      \"古浪县\",\n      \"天祝藏族自治县\"\n    ],\n    \"张掖市\": [\n      \"甘州区\",\n      \"肃南裕固族自治县\",\n      \"民乐县\",\n      \"临泽县\",\n      \"高台县\",\n      \"山丹县\"\n    ],\n    \"平凉市\": [\n      \"崆峒区\",\n      \"泾川县\",\n      \"灵台县\",\n      \"崇信县\",\n      \"庄浪县\",\n      \"静宁县\",\n      \"华亭市\"\n    ],\n    \"酒泉市\": [\n      \"肃州区\",\n      \"金塔县\",\n      \"瓜州县\",\n      \"肃北蒙古族自治县\",\n      \"阿克塞哈萨克族自治县\",\n      \"玉门市\",\n      \"敦煌市\"\n    ],\n    \"庆阳市\": [\n      \"西峰区\",\n      \"庆城县\",\n      \"环县\",\n      \"华池县\",\n      \"合水县\",\n      \"正宁县\",\n      \"宁县\",\n      \"镇原县\"\n    ],\n    \"定西市\": [\n      \"安定区\",\n      \"通渭县\",\n      \"陇西县\",\n      \"渭源县\",\n      \"临洮县\",\n      \"漳县\",\n      \"岷县\"\n    ],\n    \"陇南市\": [\n      \"武都区\",\n      \"成县\",\n      \"文县\",\n      \"宕昌县\",\n      \"康县\",\n      \"西和县\",\n      \"礼县\",\n      \"徽县\",\n      \"两当县\"\n    ],\n    \"临夏回族自治州\": [\n      \"临夏市\",\n      \"临夏县\",\n      \"康乐县\",\n      \"永靖县\",\n      \"广河县\",\n      \"和政县\",\n      \"东乡族自治县\",\n      \"积石山保安族东乡族撒拉族自治县\"\n    ],\n    \"甘南藏族自治州\": [\n      \"合作市\",\n      \"临潭县\",\n      \"卓尼县\",\n      \"舟曲县\",\n      \"迭部县\",\n      \"玛曲县\",\n      \"碌曲县\",\n      \"夏河县\"\n    ]\n  },\n  \"青海省\": {\n    \"西宁市\": [\n      \"城东区\",\n      \"城中区\",\n      \"城西区\",\n      \"城北区\",\n      \"湟中区\",\n      \"大通回族土族自治县\",\n      \"湟源县\"\n    ],\n    \"海东市\": [\n      \"乐都区\",\n      \"平安区\",\n      \"民和回族土族自治县\",\n      \"互助土族自治县\",\n      \"化隆回族自治县\",\n      \"循化撒拉族自治县\"\n    ],\n    \"海北藏族自治州\": [\n      \"门源回族自治县\",\n      \"祁连县\",\n      \"海晏县\",\n      \"刚察县\"\n    ],\n    \"黄南藏族自治州\": [\n      \"同仁市\",\n      \"尖扎县\",\n      \"泽库县\",\n      \"河南蒙古族自治县\"\n    ],\n    \"海南藏族自治州\": [\n      \"共和县\",\n      \"同德县\",\n      \"贵德县\",\n      \"兴海县\",\n      \"贵南县\"\n    ],\n    \"果洛藏族自治州\": [\n      \"玛沁县\",\n      \"班玛县\",\n      \"甘德县\",\n      \"达日县\",\n      \"久治县\",\n      \"玛多县\"\n    ],\n    \"玉树藏族自治州\": [\n      \"玉树市\",\n      \"杂多县\",\n      \"称多县\",\n      \"治多县\",\n      \"囊谦县\",\n      \"曲麻莱县\"\n    ],\n    \"海西蒙古族藏族自治州\": [\n      \"格尔木市\",\n      \"德令哈市\",\n      \"茫崖市\",\n      \"乌兰县\",\n      \"都兰县\",\n      \"天峻县\",\n      \"海西蒙古族藏族自治州直辖\"\n    ]\n  },\n  \"宁夏回族自治区\": {\n    \"银川市\": [\n      \"兴庆区\",\n      \"西夏区\",\n      \"金凤区\",\n      \"永宁县\",\n      \"贺兰县\",\n      \"灵武市\"\n    ],\n    \"石嘴山市\": [\n      \"大武口区\",\n      \"惠农区\",\n      \"平罗县\"\n    ],\n    \"吴忠市\": [\n      \"利通区\",\n      \"红寺堡区\",\n      \"盐池县\",\n      \"同心县\",\n      \"青铜峡市\"\n    ],\n    \"固原市\": [\n      \"原州区\",\n      \"西吉县\",\n      \"隆德县\",\n      \"泾源县\",\n      \"彭阳县\"\n    ],\n    \"中卫市\": [\n      \"沙坡头区\",\n      \"中宁县\",\n      \"海原县\"\n    ]\n  },\n  \"新疆维吾尔自治区\": {\n    \"乌鲁木齐市\": [\n      \"天山区\",\n      \"沙依巴克区\",\n      \"新市区\",\n      \"水磨沟区\",\n      \"头屯河区\",\n      \"达坂城区\",\n      \"米东区\",\n      \"乌鲁木齐县\"\n    ],\n    \"克拉玛依市\": [\n      \"独山子区\",\n      \"克拉玛依区\",\n      \"白碱滩区\",\n      \"乌尔禾区\"\n    ],\n    \"吐鲁番市\": [\n      \"高昌区\",\n      \"鄯善县\",\n      \"托克逊县\"\n    ],\n    \"哈密市\": [\n      \"伊州区\",\n      \"巴里坤哈萨克自治县\",\n      \"伊吾县\"\n    ],\n    \"昌吉回族自治州\": [\n      \"昌吉市\",\n      \"阜康市\",\n      \"呼图壁县\",\n      \"玛纳斯县\",\n      \"奇台县\",\n      \"吉木萨尔县\",\n      \"木垒哈萨克自治县\"\n    ],\n    \"博尔塔拉蒙古自治州\": [\n      \"博乐市\",\n      \"阿拉山口市\",\n      \"精河县\",\n      \"温泉县\"\n    ],\n    \"巴音郭楞蒙古自治州\": [\n      \"库尔勒市\",\n      \"轮台县\",\n      \"尉犁县\",\n      \"若羌县\",\n      \"且末县\",\n      \"焉耆回族自治县\",\n      \"和静县\",\n      \"和硕县\",\n      \"博湖县\"\n    ],\n    \"阿克苏地区\": [\n      \"阿克苏市\",\n      \"库车市\",\n      \"温宿县\",\n      \"沙雅县\",\n      \"新和县\",\n      \"拜城县\",\n      \"乌什县\",\n      \"阿瓦提县\",\n      \"柯坪县\"\n    ],\n    \"克孜勒苏柯尔克孜自治州\": [\n      \"阿图什市\",\n      \"阿克陶县\",\n      \"阿合奇县\",\n      \"乌恰县\"\n    ],\n    \"喀什地区\": [\n      \"喀什市\",\n      \"疏附县\",\n      \"疏勒县\",\n      \"英吉沙县\",\n      \"泽普县\",\n      \"莎车县\",\n      \"叶城县\",\n      \"麦盖提县\",\n      \"岳普湖县\",\n      \"伽师县\",\n      \"巴楚县\",\n      \"塔什库尔干塔吉克自治县\"\n    ],\n    \"和田地区\": [\n      \"和田市\",\n      \"和田县\",\n      \"墨玉县\",\n      \"皮山县\",\n      \"洛浦县\",\n      \"策勒县\",\n      \"于田县\",\n      \"民丰县\"\n    ],\n    \"伊犁哈萨克自治州\": [\n      \"伊宁市\",\n      \"奎屯市\",\n      \"霍尔果斯市\",\n      \"伊宁县\",\n      \"察布查尔锡伯自治县\",\n      \"霍城县\",\n      \"巩留县\",\n      \"新源县\",\n      \"昭苏县\",\n      \"特克斯县\",\n      \"尼勒克县\"\n    ],\n    \"塔城地区\": [\n      \"塔城市\",\n      \"乌苏市\",\n      \"额敏县\",\n      \"沙湾市\",\n      \"托里县\",\n      \"裕民县\",\n      \"和布克赛尔蒙古自治县\"\n    ],\n    \"阿勒泰地区\": [\n      \"阿勒泰市\",\n      \"布尔津县\",\n      \"富蕴县\",\n      \"福海县\",\n      \"哈巴河县\",\n      \"青河县\",\n      \"吉木乃县\"\n    ],\n    \"石河子市\": [\n      \"石河子市\"\n    ],\n    \"阿拉尔市\": [\n      \"阿拉尔市\"\n    ],\n    \"图木舒克市\": [\n      \"图木舒克市\"\n    ],\n    \"五家渠市\": [\n      \"五家渠市\"\n    ],\n    \"北屯市\": [\n      \"北屯市\"\n    ],\n    \"铁门关市\": [\n      \"铁门关市\"\n    ],\n    \"双河市\": [\n      \"双河市\"\n    ],\n    \"可克达拉市\": [\n      \"可克达拉市\"\n    ],\n    \"昆玉市\": [\n      \"昆玉市\"\n    ],\n    \"胡杨河市\": [\n      \"胡杨河市\"\n    ],\n    \"新星市\": [\n      \"新星市\"\n    ]\n  },\n  \"台湾省\": {\n    \"台北市\": [\n      \"大安区\",\n      \"大同区\",\n      \"内湖区\",\n      \"南港区\",\n      \"松山区\",\n      \"万华区\",\n      \"文山区\",\n      \"信义区\",\n      \"中山区\",\n      \"中正区\",\n      \"北投区\",\n      \"士林区\"\n    ],\n    \"新北市\": [\n      \"林口区\",\n      \"莺歌区\",\n      \"八里区\",\n      \"板桥区\",\n      \"淡水区\",\n      \"芦洲区\",\n      \"三重区\",\n      \"深坑区\",\n      \"树林区\",\n      \"泰山区\",\n      \"土城区\",\n      \"五股区\",\n      \"新庄区\",\n      \"永和区\",\n      \"中和区\",\n      \"万里区\",\n      \"金山区\",\n      \"石碇区\",\n      \"瑞芳区\",\n      \"贡寮区\",\n      \"坪林区\",\n      \"乌来区\",\n      \"三芝区\",\n      \"石门区\",\n      \"平溪区\",\n      \"双溪区\",\n      \"三峡区\",\n      \"汐止区\",\n      \"新店区\"\n    ],\n    \"台中市\": [\n      \"北区\",\n      \"北屯区\",\n      \"大安区\",\n      \"大肚区\",\n      \"大甲区\",\n      \"大里区\",\n      \"大雅区\",\n      \"东区\",\n      \"丰原区\",\n      \"后里区\",\n      \"龙井区\",\n      \"南区\",\n      \"南屯区\",\n      \"清水区\",\n      \"三义乡\",\n      \"沙鹿区\",\n      \"神冈区\",\n      \"石冈区\",\n      \"潭子区\",\n      \"通宵镇\",\n      \"外埔区\",\n      \"乌日区\",\n      \"梧栖区\",\n      \"西区\",\n      \"西屯区\",\n      \"苑里镇\",\n      \"中区\",\n      \"太平区\",\n      \"雾峰区\",\n      \"东势镇\",\n      \"和平乡\",\n      \"新社乡\"\n    ],\n    \"台南市\": [\n      \"安定区\",\n      \"安南区\",\n      \"安平区\",\n      \"北区\",\n      \"东区\",\n      \"永康区\",\n      \"归仁区\",\n      \"仁德区\",\n      \"关庙区\",\n      \"官田区\",\n      \"佳里区\",\n      \"六甲区\",\n      \"麻豆区\",\n      \"南区山\",\n      \"上区\",\n      \"善化区\",\n      \"西港区\",\n      \"西区\",\n      \"新市区\",\n      \"中区\",\n      \"新化区\",\n      \"新营区\",\n      \"左镇区\",\n      \"玉井区\",\n      \"南化区\",\n      \"楠西区\",\n      \"龙崎区\",\n      \"七股区\",\n      \"将军区\",\n      \"学甲区\",\n      \"北门区\",\n      \"后壁区\",\n      \"白河区\",\n      \"东山区\",\n      \"下营区\",\n      \"柳营区\",\n      \"盐水区\",\n      \"大内区\"\n    ],\n    \"高雄市\": [\n      \"阿莲区\",\n      \"大寮区\",\n      \"大社区\",\n      \"大树区\",\n      \"凤山区\",\n      \"冈山区\",\n      \"鼓山区\",\n      \"湖内区\",\n      \"林园区\",\n      \"苓雅区\",\n      \"路竹区\",\n      \"楠梓区\",\n      \"鸟松区\",\n      \"旗津区\",\n      \"前金区\",\n      \"前镇区\",\n      \"桥头区\",\n      \"仁武区\",\n      \"三民区\",\n      \"小港区\",\n      \"新兴区\",\n      \"盐埕区\",\n      \"燕巢区\",\n      \"永安区\",\n      \"梓官区\",\n      \"左营区\",\n      \"田寮乡\",\n      \"六龟乡\",\n      \"内门乡\",\n      \"茂林乡\",\n      \"桃源乡\",\n      \"甲仙乡\",\n      \"弥陀乡\",\n      \"旗山镇\",\n      \"美浓镇\",\n      \"那玛夏乡\",\n      \"茄萣乡\",\n      \"杉林乡\"\n    ],\n    \"基隆市\": [\n      \"七堵区\",\n      \"中山区\",\n      \"中正区\",\n      \"仁爱区\",\n      \"信义区\",\n      \"安乐区\",\n      \"暖暖区\"\n    ],\n    \"新竹市\": [\n      \"东区\",\n      \"北区\",\n      \"香山区\"\n    ],\n    \"嘉义市\": [\n      \"东区\",\n      \"西区\"\n    ],\n    \"桃园县\": [\n      \"桃园市\",\n      \"中坜市\",\n      \"平镇市\",\n      \"八德市\",\n      \"大溪镇\",\n      \"大园乡\",\n      \"观音乡\",\n      \"龟山乡\",\n      \"复兴乡\",\n      \"龙潭乡\",\n      \"芦竹乡\",\n      \"新屋乡\",\n      \"杨梅市\"\n    ],\n    \"新竹县\": [\n      \"竹北市\",\n      \"湖口乡\",\n      \"新丰乡\",\n      \"新埔镇\",\n      \"关西镇\",\n      \"芎林乡\",\n      \"竹东镇\",\n      \"峨眉乡\",\n      \"宝山乡\",\n      \"五峰乡\",\n      \"横山乡\",\n      \"北埔乡\",\n      \"尖石乡\"\n    ],\n    \"苗栗县\": [\n      \"竹南镇\",\n      \"头份镇\",\n      \"三湾乡\",\n      \"后龙镇\",\n      \"通霄镇\",\n      \"苑里镇\",\n      \"苗栗市\",\n      \"造桥乡\",\n      \"头屋乡\",\n      \"公馆乡\",\n      \"铜锣乡\",\n      \"三义乡\",\n      \"西湖乡\",\n      \"南庄乡\",\n      \"狮潭乡\",\n      \"大湖乡\",\n      \"泰安乡\",\n      \"卓兰镇\"\n    ],\n    \"彰化县\": [\n      \"北斗镇\",\n      \"草屯镇\",\n      \"大村乡\",\n      \"二水乡\",\n      \"芳苑乡\",\n      \"芬园乡\",\n      \"福兴乡\",\n      \"和美镇\",\n      \"花坛乡\",\n      \"鹿港镇\",\n      \"南投市\",\n      \"埤头乡\",\n      \"埔心乡\",\n      \"埔盐乡\",\n      \"社头乡\",\n      \"伸港乡\",\n      \"田尾乡\",\n      \"田中镇\",\n      \"溪湖镇\",\n      \"线西乡\",\n      \"秀水乡\",\n      \"永靖乡\",\n      \"员林镇\",\n      \"彰化市\",\n      \"二林镇\",\n      \"大城乡\",\n      \"竹塘乡\",\n      \"溪州乡\"\n    ],\n    \"南投县\": [\n      \"埔里镇\",\n      \"竹山镇\",\n      \"集集镇\",\n      \"名间乡\",\n      \"鹿谷乡\",\n      \"中寮乡\",\n      \"鱼池乡\",\n      \"国姓乡\",\n      \"水里乡\",\n      \"信义乡\",\n      \"仁爱乡\",\n      \"南投巿\",\n      \"草屯镇\",\n      \"琉球乡\"\n    ],\n    \"云林县\": [\n      \"大埤乡\",\n      \"土库镇\",\n      \"林内乡\",\n      \"莿桐乡\",\n      \"西螺镇\",\n      \"仑背乡\",\n      \"古坑乡\",\n      \"褒忠乡\",\n      \"东势乡\",\n      \"台西乡\",\n      \"麦寮乡\",\n      \"二仑乡\",\n      \"北港镇\",\n      \"水林乡\",\n      \"口湖乡\",\n      \"四湖乡\",\n      \"元长乡\",\n      \"斗六市\",\n      \"斗南镇\",\n      \"虎尾镇\"\n    ],\n    \"嘉义县\": [\n      \"竹崎乡\",\n      \"番路乡\",\n      \"梅山乡\",\n      \"阿里山乡\",\n      \"东石乡\",\n      \"大埔乡\",\n      \"溪口乡\",\n      \"义竹乡\",\n      \"布袋镇\",\n      \"大林镇\",\n      \"六脚乡\",\n      \"鹿草乡\",\n      \"民雄乡\",\n      \"朴子市\",\n      \"水上乡\",\n      \"太保市\",\n      \"新港乡\",\n      \"中埔乡\"\n    ],\n    \"屏东县\": [\n      \"屏东市\",\n      \"万丹乡\",\n      \"长治乡\",\n      \"内埔乡\",\n      \"潮州镇\",\n      \"三地门乡\",\n      \"来义乡\",\n      \"狮子乡\",\n      \"牡丹乡\",\n      \"高树乡\",\n      \"满州乡\",\n      \"万峦乡\",\n      \"春日乡\",\n      \"雾台乡\",\n      \"泰武乡\",\n      \"玛家乡\",\n      \"恒春镇\",\n      \"枋寮乡\",\n      \"东港镇\",\n      \"林边乡\",\n      \"枋山乡\",\n      \"里港乡\",\n      \"车城乡\",\n      \"盐埔乡\",\n      \"九如乡\",\n      \"新园乡\",\n      \"新埤乡\",\n      \"佳冬乡\",\n      \"竹田乡\",\n      \"南州乡\",\n      \"崁顶乡\",\n      \"麟洛乡\"\n    ],\n    \"宜兰县\": [\n      \"头城镇\",\n      \"宜兰市\",\n      \"礁溪乡\",\n      \"壮围乡\",\n      \"五结乡\",\n      \"罗东镇\",\n      \"员山乡\",\n      \"南澳乡\",\n      \"冬山乡\",\n      \"大同乡\",\n      \"三星乡\",\n      \"苏澳镇\"\n    ],\n    \"花莲县\": [\n      \"花莲巿\",\n      \"光复乡\",\n      \"玉里镇\",\n      \"新城乡\",\n      \"吉安乡\",\n      \"寿丰乡\",\n      \"凤林镇\",\n      \"丰滨乡\",\n      \"瑞穗乡\",\n      \"富里乡\",\n      \"秀林乡\",\n      \"万荣乡\",\n      \"卓溪乡\"\n    ],\n    \"台东县\": [\n      \"台东巿\",\n      \"成功镇\",\n      \"关山镇\",\n      \"卑南乡\",\n      \"大武乡\",\n      \"太麻里乡\",\n      \"东河乡\",\n      \"长滨乡\",\n      \"鹿野乡\",\n      \"池上乡\",\n      \"延平乡\",\n      \"海端乡\",\n      \"达仁乡\",\n      \"金峰乡\"\n    ],\n    \"澎湖县\": [\n      \"马公市\",\n      \"湖西乡\",\n      \"白沙乡\",\n      \"西屿乡\",\n      \"望安乡\",\n      \"七美乡\"\n    ],\n    \"金门县\": [\n      \"金城镇\",\n      \"金湖镇\",\n      \"金沙镇\",\n      \"金宁乡\",\n      \"烈屿乡\",\n      \"乌丘乡\"\n    ],\n    \"连江县\": [\n      \"南竿乡\",\n      \"北竿乡\",\n      \"莒光乡\",\n      \"东引乡\"\n    ]\n  },\n  \"香港特别行政区\": {\n    \"香港特别行政区\": [\n      \"中西區\",\n      \"灣仔區\",\n      \"東區\",\n      \"南區\",\n      \"油尖旺區\",\n      \"深水埗區\",\n      \"九龍城區\",\n      \"黃大仙區\",\n      \"觀塘區\",\n      \"荃灣區\",\n      \"屯門區\",\n      \"元朗區\",\n      \"北區\",\n      \"大埔區\",\n      \"西貢區\",\n      \"沙田區\",\n      \"葵青區\",\n      \"離島區\"\n    ]\n  },\n  \"澳门特别行政区\": {\n    \"澳门特别行政区\": [\n      \"花地瑪堂區\",\n      \"花王堂區\",\n      \"望德堂區\",\n      \"大堂區\",\n      \"風順堂區\",\n      \"嘉模堂區\",\n      \"路氹填海區\",\n      \"聖方濟各堂區\"\n    ]\n  },\n  \"海外\": {\n    \"其它\": [\n      \"其它\"\n    ]\n  }\n};\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport type {\n  IFieldValueService,\n  IUserOption,\n  IDeptOption,\n  ILinkDataOption,\n  IAddressOption,\n  ILocationOption,\n} from '@baishuyun/types';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { FieldWrapper, type FieldValueInputProps } from './index';\nimport { DropdownChevron, ClearIcon, CloseIcon, CheckIcon } from './icons';\nimport { SearchIcon } from '../../bs-icons';\nimport { ClearAllIcon } from '../../icons/clear-all-icon';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { chinaAddressData } from './china-address-data';\n\nconst inputBaseCls =\n  'h-[34px] px-[10px] py-[7px] rounded-[4px] bg-white border text-[14px] text-[#030303] placeholder:text-[#999999] focus:outline-none focus:border-[#0265FF] w-full disabled:bg-[#EFF0F6] disabled:cursor-not-allowed';\n\ninterface WidgetItem {\n  label: string;\n  value: string | number;\n}\n\nfunction getItems(field: FieldValueInputProps['field']): WidgetItem[] {\n  return field.widget?.items?.filter((it) => typeof it.label === 'string') as WidgetItem[] ?? [];\n}\n\nfunction usePortalContainer(attr: string) {\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const setTriggerRef = useCallback(\n    (node: HTMLButtonElement | null) => {\n      if (!node) { setPortalContainer(null); return; }\n      const rootNode = node.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        const existing = rootNode.querySelector<HTMLElement>(`[${attr}]`);\n        if (existing) { setPortalContainer(existing); return; }\n        const container = document.createElement('div');\n        container.setAttribute(attr, 'true');\n        rootNode.appendChild(container);\n        setPortalContainer(container);\n      } else {\n        setPortalContainer(null);\n      }\n    },\n    [attr],\n  );\n  return { portalContainer, setTriggerRef };\n}\n\n// ── ComboInput (combo / linkdata / linkquery) ───────────────────────\n\nexport function ComboInput({ field, value, onChange, disabled, service, showLabel, showDescription }: FieldValueInputProps) {\n  const [open, setOpen] = useState(false);\n  const [asyncItems, setAsyncItems] = useState<ILinkDataOption[]>([]);\n  const [loading, setLoading] = useState(false);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-input-portal');\n\n  const staticItems = getItems(field);\n  const hasAsync = !!(field.widget?.type === 'linkdata' || field.widget?.type === 'linkquery');\n\n  const selectedLabel =\n    staticItems.find((it) => it.value === value)?.label ??\n    asyncItems.find((it) => it.value === value)?.label ??\n    '';\n\n  useEffect(() => {\n    if (hasAsync && open && service?.fetchLinkData) {\n      setLoading(true);\n      service.fetchLinkData(field.widget?.widgetName ?? '').then((data) => {\n        setAsyncItems(data);\n        setLoading(false);\n      });\n    }\n  }, [hasAsync, open, field.widget?.widgetName, service]);\n\n  const displayItems = hasAsync ? asyncItems : staticItems;\n\n  const handleSelect = useCallback(\n    (v: string | number) => {\n      onChange?.(v);\n      setOpen(false);\n    },\n    [onChange],\n  );\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              inputBaseCls,\n              'text-left cursor-pointer',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0] hover:border-[#0265FF]',\n            )}\n          >\n            <span className={cn('truncate', !selectedLabel && 'text-[#999999]')}>\n              {selectedLabel || (field.description ?? `请选择${field.label}`)}\n            </span>\n            <DropdownChevron open={open} />\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[4px]\"\n          style={{ width: 'var(--radix-popover-trigger-width)' }}\n        >\n          {loading ? (\n            <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">加载中...</div>\n          ) : displayItems.length === 0 ? (\n            <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">暂无数据</div>\n          ) : (\n            <div className=\"flex flex-col gap-0 max-h-[240px] overflow-y-auto\">\n              {displayItems.map((item) => (\n                <button\n                  key={item.value}\n                  type=\"button\"\n                  onClick={() => handleSelect(item.value)}\n                  className={cn(\n                    'h-[34px] px-[10px] rounded-[4px] text-left text-[14px] leading-[normal]',\n                    value === item.value\n                      ? 'bg-[#F0F6FF] text-[#0265FF]'\n                      : 'text-[#030303] hover:bg-[#EFF0F6]',\n                    transCls,\n                  )}\n                >\n                  {item.label}\n                </button>\n              ))}\n            </div>\n          )}\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n\n// ── CheckboxGroupInput ──────────────────────────────────────────────\n\nexport function CheckboxGroupInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  const items = getItems(field);\n  const selectedValues: string[] = Array.isArray(value) ? value.map(String) : [];\n\n  const toggle = useCallback(\n    (itemValue: string) => {\n      const next = selectedValues.includes(itemValue)\n        ? selectedValues.filter((v) => v !== itemValue)\n        : [...selectedValues, itemValue];\n      onChange?.(next);\n    },\n    [selectedValues, onChange],\n  );\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <div className=\"flex flex-col gap-[8px]\">\n        {items.map((item) => {\n          const checked = selectedValues.includes(String(item.value));\n          return (\n            <label\n              key={item.value}\n              className={cn(\n                'flex items-center gap-[8px] cursor-pointer text-[14px] text-[#030303]',\n                disabled && 'cursor-not-allowed opacity-50',\n              )}\n            >\n              <div\n                className={cn(\n                  'w-[16px] h-[16px] rounded-[2px] flex items-center justify-center shrink-0 border',\n                  transCls,\n                  checked ? 'bg-[#0265FF] border-[#0265FF]' : 'bg-white border-[#CCCCCC]',\n                  !disabled && 'hover:border-[#0265FF]',\n                )}\n              >\n                {checked && <CheckIcon />}\n              </div>\n              <input\n                type=\"checkbox\"\n                checked={checked}\n                onChange={() => toggle(String(item.value))}\n                disabled={disabled}\n                className=\"sr-only\"\n              />\n              {item.label}\n            </label>\n          );\n        })}\n      </div>\n    </FieldWrapper>\n  );\n}\n\n// ── RadioGroupInput ─────────────────────────────────────────────────\n\nexport function RadioGroupInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  const items = getItems(field);\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <div className=\"flex flex-col gap-[8px]\">\n        {items.map((item) => {\n          const checked = String(value) === String(item.value);\n          return (\n            <label\n              key={item.value}\n              className={cn(\n                'flex items-center gap-[8px] cursor-pointer text-[14px] text-[#030303]',\n                disabled && 'cursor-not-allowed opacity-50',\n              )}\n            >\n              <div\n                className={cn(\n                  'w-[16px] h-[16px] rounded-full flex items-center justify-center shrink-0 border',\n                  transCls,\n                  checked ? 'border-[#0265FF]' : 'border-[#CCCCCC]',\n                  !disabled && 'hover:border-[#0265FF]',\n                )}\n              >\n                {checked && <div className=\"w-[8px] h-[8px] rounded-full bg-[#0265FF]\" />}\n              </div>\n              <input\n                type=\"radio\"\n                checked={checked}\n                onChange={() => onChange?.(item.value)}\n                disabled={disabled}\n                className=\"sr-only\"\n              />\n              {item.label}\n            </label>\n          );\n        })}\n      </div>\n    </FieldWrapper>\n  );\n}\n\n// ── AsyncPicker (user / dept / usergroup / deptgroup) ──────────────\n\ntype PickerKind = 'user' | 'dept' | 'usergroup' | 'deptgroup';\n\ninterface AsyncPickerProps extends FieldValueInputProps {\n  kind: PickerKind;\n  multiple?: boolean;\n}\n\nfunction getSearchFn(kind: PickerKind, service?: IFieldValueService) {\n  switch (kind) {\n    case 'user': return service?.searchUsers;\n    case 'dept': return service?.searchDepts;\n    case 'usergroup': return service?.searchUserGroups;\n    case 'deptgroup': return service?.searchDeptGroups;\n  }\n}\n\nexport function AsyncPicker({ field, value, onChange, disabled, service, kind, multiple = false, showLabel, showDescription }: AsyncPickerProps) {\n  const [open, setOpen] = useState(false);\n  const [keyword, setKeyword] = useState('');\n  const [options, setOptions] = useState<Array<IUserOption | IDeptOption>>([]);\n  const [loading, setLoading] = useState(false);\n  const [selectedLabel, setSelectedLabel] = useState('');\n  const [nameMap, setNameMap] = useState<Record<string, string>>({});\n  const [isHovering, setIsHovering] = useState(false);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-picker-portal');\n\n  const searchFn = getSearchFn(kind, service);\n\n  const selectedIds: string[] = multiple\n    ? (Array.isArray(value) ? value.map(String) : [])\n    : [];\n  const selectedIdSet = new Set(selectedIds);\n\n  // Resolve labels for existing values\n  useEffect(() => {\n    if (multiple) {\n      if (!Array.isArray(value) || value.length === 0) {\n        setNameMap({});\n        return;\n      }\n      if (service?.searchUsers && kind === 'user') {\n        service.searchUsers('', { field: fieldName }).then((users) => {\n          const map: Record<string, string> = {};\n          users.forEach((u) => {\n            if (value.includes(u.id)) map[u.id] = u.name;\n          });\n          setNameMap(map);\n        });\n      }\n    } else {\n      if (!value || value === '') {\n        setSelectedLabel('');\n        return;\n      }\n      if (service?.searchUsers && kind === 'user') {\n        service.searchUsers('', { field: fieldName }).then((users) => {\n          const found = users.find((u) => u.id === value);\n          if (found) setSelectedLabel(found.name);\n        });\n      }\n    }\n  }, [value, service, kind, multiple]);\n\n  const fieldName = field.widget?.widgetName || \"\";\n  const doSearch = useCallback(\n    async (kw: string) => {\n      if (!searchFn) return;\n      setLoading(true);\n      try {\n        const results = await searchFn(kw, { field: fieldName });\n        setOptions(results);\n      } finally {\n        setLoading(false);\n      }\n    },\n    [searchFn],\n  );\n\n  useEffect(() => {\n    if (open) doSearch(keyword);\n  }, [open, keyword, doSearch]);\n\n  const handleSelect = useCallback(\n    (opt: IUserOption | IDeptOption) => {\n      if (multiple) {\n        const next = selectedIdSet.has(opt.id)\n          ? selectedIds.filter((id) => id !== opt.id)\n          : [...selectedIds, opt.id];\n        onChange?.(next);\n        setNameMap((prev) => {\n          if (selectedIdSet.has(opt.id)) {\n            const nextMap = { ...prev };\n            delete nextMap[opt.id];\n            return nextMap;\n          }\n          return { ...prev, [opt.id]: opt.name };\n        });\n      } else {\n        onChange?.(opt.id);\n        setSelectedLabel(opt.name);\n        setOpen(false);\n        setKeyword('');\n      }\n    },\n    [onChange, multiple, selectedIds, selectedIdSet],\n  );\n\n  const handleClear = useCallback(() => {\n    if (multiple) {\n      onChange?.([]);\n      setNameMap({});\n    } else {\n      onChange?.('');\n      setSelectedLabel('');\n    }\n  }, [onChange, multiple]);\n\n  const handleRemoveMultiple = useCallback(\n    (id: string, e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.(selectedIds.filter((v) => v !== id));\n      setNameMap((prev) => {\n        const next = { ...prev };\n        delete next[id];\n        return next;\n      });\n    },\n    [selectedIds, onChange],\n  );\n\n  const handleClearAllMultiple = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.([]);\n      setNameMap({});\n    },\n    [onChange],\n  );\n\n  const hasSelectionMulti = multiple && selectedIds.length > 0;\n  const showClearMulti = hasSelectionMulti && isHovering;\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            onMouseEnter={() => setIsHovering(true)}\n            onMouseLeave={() => setIsHovering(false)}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] gap-2.5',\n              'bg-white border rounded-[4px]',\n              'py-[7px]',\n              (multiple ? hasSelectionMulti : !!selectedLabel) ? 'pl-[4px] pr-[10px]' : 'px-[10px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n              transCls,\n            )}\n          >\n            {multiple ? (\n              hasSelectionMulti ? (\n                <>\n                  <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\">\n                    {selectedIds.map((id) => (\n                      <span\n                        key={id}\n                        className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0\"\n                      >\n                        <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                          {nameMap[id] || id}\n                        </span>\n                        <span\n                          className=\"cursor-pointer flex items-center shrink-0\"\n                          onClick={(e) => handleRemoveMultiple(id, e)}\n                        >\n                          <CloseIcon />\n                        </span>\n                      </span>\n                    ))}\n                  </div>\n                  {showClearMulti ? (\n                    <span className=\"cursor-pointer flex items-center shrink-0\" onClick={handleClearAllMultiple}>\n                      <ClearAllIcon />\n                    </span>\n                  ) : (\n                    <DropdownChevron open={open} />\n                  )}\n                </>\n              ) : (\n                <>\n                  <span className=\"text-[14px] text-[#999999] leading-[normal] truncate\">\n                    {field.description ?? `请选择${field.label}`}\n                  </span>\n                  <DropdownChevron open={open} />\n                </>\n              )\n            ) : (\n              <>\n                <span className={cn('truncate', !selectedLabel && 'text-[#999999]')}>\n                  {selectedLabel || (field.description ?? `请选择${field.label}`)}\n                </span>\n                <div className=\"flex items-center gap-[4px] shrink-0\">\n                  {!!selectedLabel && (\n                    <span\n                      role=\"button\"\n                      tabIndex={-1}\n                      onClick={(e) => { e.stopPropagation(); handleClear(); }}\n                      className=\"flex items-center justify-center w-[18px] h-[18px] hover:bg-[#EFF0F6] rounded-full\"\n                    >\n                      <ClearIcon />\n                    </span>\n                  )}\n                  <DropdownChevron open={open} />\n                </div>\n              </>\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[8px]\"\n          style={{ width: 'var(--radix-popover-trigger-width)' }}\n        >\n          <div className=\"flex items-center gap-[8px] px-[6px] mb-[4px] h-[34px] bg-[#F6F7FA] rounded-[4px]\">\n            <SearchIcon />\n            <input\n              type=\"text\"\n              value={keyword}\n              onChange={(e) => setKeyword(e.target.value)}\n              placeholder={`搜索${field.label}`}\n              className=\"flex-1 bg-transparent text-[14px] text-[#030303] placeholder:text-[#999999] outline-none border-none\"\n              autoFocus\n            />\n          </div>\n          <div className=\"flex flex-col gap-0 max-h-[200px] overflow-y-auto\">\n            {loading ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">搜索中...</div>\n            ) : options.length === 0 ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">暂无数据</div>\n            ) : (\n              options.map((opt) => {\n                const isSelected = multiple ? selectedIdSet.has(opt.id) : value === opt.id;\n                return (\n                <button\n                  key={opt.id}\n                  type=\"button\"\n                  onClick={() => handleSelect(opt)}\n                  className={cn(\n                    'flex items-center gap-[10px] h-[34px] px-[10px] rounded-[4px] text-left',\n                    isSelected\n                      ? 'bg-[#F0F6FF] text-[#0265FF]'\n                      : 'text-[#030303] hover:bg-[#EFF0F6]',\n                    transCls,\n                  )}\n                >\n                  {multiple && (\n                    <div\n                      className={cn(\n                        'w-[14px] h-[14px] rounded-[2px] flex items-center justify-center shrink-0 border',\n                        isSelected ? 'bg-[#0265FF] border-[#0265FF]' : 'bg-white border-[#CCCCCC]',\n                      )}\n                    >\n                      {isSelected && <CheckIcon />}\n                    </div>\n                  )}\n                  {'avatar' in opt && opt.avatar && (\n                    <img src={opt.avatar} alt=\"\" className=\"w-[20px] h-[20px] rounded-full\" />\n                  )}\n                  <span className=\"text-[14px]\">{opt.name}</span>\n                </button>\n                );\n              })\n            )}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n\n// ── TextMultiSelect (in/nin operators for text fields) ───────────────\n\nexport function TextMultiSelect({ field, value, onChange, disabled, service, showLabel, showDescription }: FieldValueInputProps) {\n  const [open, setOpen] = useState(false);\n  const [keyword, setKeyword] = useState('');\n  const [options, setOptions] = useState<ILinkDataOption[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [labelMap, setLabelMap] = useState<Record<string, string>>({});\n  const [isHovering, setIsHovering] = useState(false);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-picker-portal');\n\n  const selectedValues: string[] = Array.isArray(value) ? value.map(String) : [];\n  const selectedSet = new Set(selectedValues);\n\n  useEffect(() => {\n    if (open && service?.searchDistinctValues) {\n      setLoading(true);\n      service.searchDistinctValues(field, keyword).then((data) => {\n        setOptions(data);\n        const map: Record<string, string> = {};\n        data.forEach((opt) => { map[opt.value] = opt.label; });\n        setLabelMap(map);\n        setLoading(false);\n      });\n    }\n  }, [open, keyword, field, service]);\n\n  const handleToggle = useCallback(\n    (opt: ILinkDataOption) => {\n      const next = selectedSet.has(opt.value)\n        ? selectedValues.filter((v) => v !== opt.value)\n        : [...selectedValues, opt.value];\n      onChange?.(next);\n    },\n    [selectedValues, selectedSet, onChange],\n  );\n\n  const handleClearAll = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.([]);\n    },\n    [onChange],\n  );\n\n  const handleRemove = useCallback(\n    (val: string, e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.(selectedValues.filter((v) => v !== val));\n    },\n    [selectedValues, onChange],\n  );\n\n  const hasSelection = selectedValues.length > 0;\n  const showClear = hasSelection && isHovering;\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            onMouseEnter={() => setIsHovering(true)}\n            onMouseLeave={() => setIsHovering(false)}\n            className={cn(\n              'flex items-center justify-between w-full h-[34px] gap-2.5',\n              'bg-white border rounded-[4px]',\n              'py-[7px]',\n              hasSelection ? 'pl-[4px] pr-[10px]' : 'px-[10px]',\n              'text-left cursor-pointer',\n              'hover:border-[#0265FF]',\n              disabled && 'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n              transCls,\n            )}\n          >\n            {hasSelection ? (\n              <>\n                <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\">\n                  {selectedValues.map((val) => (\n                    <span\n                      key={val}\n                      className=\"flex items-center gap-[4px] bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px] shrink-0\"\n                    >\n                      <span className=\"text-[14px] text-[#030303] leading-[normal]\">\n                        {labelMap[val] || val}\n                      </span>\n                      <span\n                        className=\"cursor-pointer flex items-center shrink-0\"\n                        onClick={(e) => handleRemove(val, e)}\n                      >\n                        <CloseIcon />\n                      </span>\n                    </span>\n                  ))}\n                </div>\n                {showClear ? (\n                  <span className=\"cursor-pointer flex items-center shrink-0\" onClick={handleClearAll}>\n                    <ClearAllIcon />\n                  </span>\n                ) : (\n                  <DropdownChevron open={open} />\n                )}\n              </>\n            ) : (\n              <>\n                <span className=\"text-[14px] text-[#999999] leading-[normal] truncate\">\n                  {field.description ?? `请输入${field.label}`}\n                </span>\n                <DropdownChevron open={open} />\n              </>\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[8px]\"\n          style={{ width: 'var(--radix-popover-trigger-width)' }}\n        >\n          <div className=\"flex items-center gap-[8px] px-[6px] mb-[4px] h-[34px] bg-[#F6F7FA] rounded-[4px]\">\n            <SearchIcon />\n            <input\n              type=\"text\"\n              value={keyword}\n              onChange={(e) => setKeyword(e.target.value)}\n              placeholder=\"输入关键字搜索\"\n              className=\"flex-1 bg-transparent text-[14px] text-[#030303] placeholder:text-[#999999] outline-none border-none\"\n              autoFocus\n            />\n          </div>\n          <div className=\"flex flex-col gap-0 max-h-[200px] overflow-y-auto\">\n            {loading ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">搜索中...</div>\n            ) : options.length === 0 ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">暂无数据</div>\n            ) : (\n              options.map((opt) => {\n                const checked = selectedSet.has(opt.value);\n                return (\n                  <button\n                    key={opt.value}\n                    type=\"button\"\n                    onClick={() => handleToggle(opt)}\n                    className={cn(\n                      'flex items-center gap-[10px] h-[34px] px-[10px] rounded-[4px] text-left',\n                      checked\n                        ? 'bg-[#F0F6FF] text-[#0265FF]'\n                        : 'text-[#030303] hover:bg-[#EFF0F6]',\n                      transCls,\n                    )}\n                  >\n                    <div\n                      className={cn(\n                        'w-[14px] h-[14px] rounded-[2px] flex items-center justify-center shrink-0 border',\n                        checked ? 'bg-[#0265FF] border-[#0265FF]' : 'bg-white border-[#CCCCCC]',\n                      )}\n                    >\n                      {checked && <CheckIcon />}\n                    </div>\n                    <span className=\"text-[14px]\">{opt.label}</span>\n                  </button>\n                );\n              })\n            )}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n\n// ── CascadingAddressInput (province → city → district) ──────────────\n\nconst provinceList = Object.keys(chinaAddressData);\n\ninterface AddressValue {\n  province?: string;\n  city?: string;\n  district?: string;\n}\n\nexport function CascadingAddressInput({ field, value, onChange, disabled, showLabel, showDescription }: FieldValueInputProps) {\n  const [open, setOpen] = useState(false);\n  const [isHovering, setIsHovering] = useState(false);\n  const provinceRef = useRef<HTMLDivElement>(null);\n  const cityRef = useRef<HTMLDivElement>(null);\n  const districtRef = useRef<HTMLDivElement>(null);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-picker-portal');\n\n  const addrValue: AddressValue =\n    value && typeof value === 'object' && !Array.isArray(value)\n      ? (value as AddressValue)\n      : {};\n\n  const selectedProvince = addrValue.province || '';\n  const selectedCity = addrValue.city || '';\n  const selectedDistrict = addrValue.district || '';\n\n  const cityList = selectedProvince && chinaAddressData[selectedProvince]\n    ? Object.keys(chinaAddressData[selectedProvince])\n    : [];\n  const districtList = selectedProvince && selectedCity && chinaAddressData[selectedProvince]?.[selectedCity]\n    ? chinaAddressData[selectedProvince][selectedCity]\n    : [];\n\n  const displayText =\n    selectedProvince\n      ? `${selectedProvince}${selectedCity ? ` ${selectedCity}` : ''}${selectedDistrict ? ` ${selectedDistrict}` : ''}`\n      : '';\n\n  const handleSelectProvince = useCallback(\n    (province: string) => {\n      if (province === selectedProvince) return;\n      onChange?.({ province, city: undefined, district: undefined });\n      setTimeout(() => {\n        const el = cityRef.current;\n        if (el) el.scrollTop = 0;\n      }, 0);\n    },\n    [onChange, selectedProvince],\n  );\n\n  const handleSelectCity = useCallback(\n    (city: string) => {\n      if (city === selectedCity) return;\n      onChange?.({ province: selectedProvince, city, district: undefined });\n      setTimeout(() => {\n        const el = districtRef.current;\n        if (el) el.scrollTop = 0;\n      }, 0);\n    },\n    [onChange, selectedProvince, selectedCity],\n  );\n\n  const handleSelectDistrict = useCallback(\n    (district: string) => {\n      onChange?.({ province: selectedProvince, city: selectedCity, district });\n      setOpen(false);\n    },\n    [onChange, selectedProvince, selectedCity],\n  );\n\n  const handleClear = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onChange?.({});\n    },\n    [onChange],\n  );\n\n  const scrollToSelected = useCallback(() => {\n    if (provinceRef.current) {\n      const idx = provinceList.indexOf(selectedProvince);\n      if (idx >= 0) provinceRef.current.scrollTop = idx * 32;\n    }\n    if (cityRef.current) {\n      const idx = cityList.indexOf(selectedCity);\n      if (idx >= 0) cityRef.current.scrollTop = idx * 32;\n    }\n    if (districtRef.current) {\n      const idx = districtList.indexOf(selectedDistrict);\n      if (idx >= 0) districtRef.current.scrollTop = idx * 32;\n    }\n  }, [selectedProvince, selectedCity, selectedDistrict, cityList, districtList]);\n\n  useEffect(() => {\n    if (open) scrollToSelected();\n  }, [open, scrollToSelected]);\n\n  const hasValue = !!displayText;\n  const showClear = hasValue && isHovering;\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            onMouseEnter={() => setIsHovering(true)}\n            onMouseLeave={() => setIsHovering(false)}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              inputBaseCls,\n              'text-left cursor-pointer',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0] hover:border-[#0265FF]',\n            )}\n          >\n            <span className={cn('truncate', !displayText && 'text-[#999999]')}>\n              {displayText || (field.description ?? `请选择${field.label}`)}\n            </span>\n            {showClear ? (\n              <span className=\"cursor-pointer flex items-center shrink-0\" onClick={handleClear}>\n                <ClearAllIcon />\n              </span>\n            ) : (\n              <DropdownChevron open={open} />\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-0\"\n          style={{ width: '520px' }}\n        >\n          <div className=\"flex h-[280px]\">\n            {/* Province Column */}\n            <div className=\"flex-1 border-r border-[#F0F0F0] flex flex-col min-w-0\">\n              <div className=\"h-[34px] px-[12px] flex items-center text-[12px] text-[#999999] bg-[#FAFAFA] shrink-0 border-b border-[#F0F0F0]\">\n                省份\n              </div>\n              <div ref={provinceRef} className=\"flex-1 overflow-y-auto\">\n                {provinceList.map((province) => (\n                  <button\n                    key={province}\n                    type=\"button\"\n                    onClick={() => handleSelectProvince(province)}\n                    className={cn(\n                      'w-full h-[32px] px-[12px] flex items-center justify-between text-left text-[14px]',\n                      transCls,\n                      province === selectedProvince\n                        ? 'bg-[#F0F6FF] text-[#0265FF]'\n                        : 'text-[#030303] hover:bg-[#EFF0F6]',\n                    )}\n                  >\n                    <span className=\"truncate\">{province}</span>\n                    {chinaAddressData[province] && (\n                      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0 ml-[4px]\">\n                        <path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke={province === selectedProvince ? '#0265FF' : '#999999'} strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n                      </svg>\n                    )}\n                  </button>\n                ))}\n              </div>\n            </div>\n            {/* City Column */}\n            <div className=\"flex-1 border-r border-[#F0F0F0] flex flex-col min-w-0\">\n              <div className=\"h-[34px] px-[12px] flex items-center text-[12px] text-[#999999] bg-[#FAFAFA] shrink-0 border-b border-[#F0F0F0]\">\n                城市\n              </div>\n              <div ref={cityRef} className=\"flex-1 overflow-y-auto\">\n                {cityList.length === 0 ? (\n                  <div className=\"px-[12px] py-[16px] text-[14px] text-[#999999] text-center\">请选择省份</div>\n                ) : (\n                  cityList.map((city) => (\n                    <button\n                      key={city}\n                      type=\"button\"\n                      onClick={() => handleSelectCity(city)}\n                      className={cn(\n                        'w-full h-[32px] px-[12px] flex items-center justify-between text-left text-[14px]',\n                        transCls,\n                        city === selectedCity\n                          ? 'bg-[#F0F6FF] text-[#0265FF]'\n                          : 'text-[#030303] hover:bg-[#EFF0F6]',\n                      )}\n                    >\n                      <span className=\"truncate\">{city}</span>\n                      {selectedProvince && chinaAddressData[selectedProvince]?.[city] && (\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0 ml-[4px]\">\n                          <path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke={city === selectedCity ? '#0265FF' : '#999999'} strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n                        </svg>\n                      )}\n                    </button>\n                  ))\n                )}\n              </div>\n            </div>\n            {/* District Column */}\n            <div className=\"flex-1 flex flex-col min-w-0\">\n              <div className=\"h-[34px] px-[12px] flex items-center text-[12px] text-[#999999] bg-[#FAFAFA] shrink-0 border-b border-[#F0F0F0]\">\n                区/县\n              </div>\n              <div ref={districtRef} className=\"flex-1 overflow-y-auto\">\n                {districtList.length === 0 ? (\n                  <div className=\"px-[12px] py-[16px] text-[14px] text-[#999999] text-center\">请选择城市</div>\n                ) : (\n                  districtList.map((district) => (\n                    <button\n                      key={district}\n                      type=\"button\"\n                      onClick={() => handleSelectDistrict(district)}\n                      className={cn(\n                        'w-full h-[32px] px-[12px] flex items-center text-left text-[14px]',\n                        transCls,\n                        district === selectedDistrict\n                          ? 'bg-[#F0F6FF] text-[#0265FF]'\n                          : 'text-[#030303] hover:bg-[#EFF0F6]',\n                      )}\n                    >\n                      <span className=\"truncate\">{district}</span>\n                    </button>\n                  ))\n                )}\n              </div>\n            </div>\n          </div>\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n\n// ── AddressInput ────────────────────────────────────────────────────\n\nexport function AddressInput({ field, value, onChange, disabled, service, showLabel, showDescription }: FieldValueInputProps) {\n  const [open, setOpen] = useState(false);\n  const [keyword, setKeyword] = useState('');\n  const [options, setOptions] = useState<IAddressOption[]>([]);\n  const [loading, setLoading] = useState(false);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-picker-portal');\n\n  const selectedLabel =\n    value && typeof value === 'object' && 'province' in (value as Record<string, unknown>)\n      ? `${(value as IAddressOption).province}${(value as IAddressOption).city}${(value as IAddressOption).district}`\n      : typeof value === 'string'\n        ? value\n        : '';\n\n  useEffect(() => {\n    if (open && service?.searchAddress) {\n      setLoading(true);\n      service.searchAddress(keyword).then((data) => {\n        setOptions(data);\n        setLoading(false);\n      });\n    }\n  }, [open, keyword, service]);\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              inputBaseCls,\n              'text-left cursor-pointer',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0] hover:border-[#0265FF]',\n            )}\n          >\n            <span className={cn('truncate', !selectedLabel && 'text-[#999999]')}>\n              {selectedLabel || (field.description ?? `请选择${field.label}`)}\n            </span>\n            <DropdownChevron open={open} />\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[8px]\"\n          style={{ width: 'var(--radix-popover-trigger-width)' }}\n        >\n          <div className=\"flex items-center gap-[8px] px-[6px] mb-[4px] h-[34px] bg-[#F6F7FA] rounded-[4px]\">\n            <SearchIcon />\n            <input\n              type=\"text\"\n              value={keyword}\n              onChange={(e) => setKeyword(e.target.value)}\n              placeholder={`搜索${field.label}`}\n              className=\"flex-1 bg-transparent text-[14px] text-[#030303] placeholder:text-[#999999] outline-none border-none\"\n              autoFocus\n            />\n          </div>\n          <div className=\"flex flex-col gap-0 max-h-[200px] overflow-y-auto\">\n            {loading ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">搜索中...</div>\n            ) : options.length === 0 ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">暂无数据</div>\n            ) : (\n              options.map((opt, i) => (\n                <button\n                  key={i}\n                  type=\"button\"\n                  onClick={() => {\n                    onChange?.(opt);\n                    setOpen(false);\n                    setKeyword('');\n                  }}\n                  className={cn(\n                    'h-[34px] px-[10px] rounded-[4px] text-left text-[14px] leading-[normal]',\n                    'text-[#030303] hover:bg-[#EFF0F6]',\n                    transCls,\n                  )}\n                >\n                  {opt.province}{opt.city}{opt.district}\n                </button>\n              ))\n            )}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n\n// ── LocationInput ───────────────────────────────────────────────────\n\nexport function LocationInput({ field, value, onChange, disabled, service, showLabel, showDescription }: FieldValueInputProps) {\n  const [open, setOpen] = useState(false);\n  const [keyword, setKeyword] = useState('');\n  const [options, setOptions] = useState<ILocationOption[]>([]);\n  const [loading, setLoading] = useState(false);\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-field-value-picker-portal');\n\n  const selectedLabel =\n    value && typeof value === 'object' && 'detail' in (value as Record<string, unknown>)\n      ? (value as ILocationOption).detail\n      : typeof value === 'string'\n        ? value\n        : '';\n\n  useEffect(() => {\n    if (open && service?.searchLocation) {\n      setLoading(true);\n      service.searchLocation(keyword).then((data) => {\n        setOptions(data);\n        setLoading(false);\n      });\n    }\n  }, [open, keyword, service]);\n\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              inputBaseCls,\n              'text-left cursor-pointer',\n              open ? 'border-[#0265FF]' : 'border-[#E0E0E0] hover:border-[#0265FF]',\n            )}\n          >\n            <span className={cn('truncate', !selectedLabel && 'text-[#999999]')}>\n              {selectedLabel || (field.description ?? `请选择${field.label}`)}\n            </span>\n            <DropdownChevron open={open} />\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[8px]\"\n          style={{ width: 'var(--radix-popover-trigger-width)' }}\n        >\n          <div className=\"flex items-center gap-[8px] px-[6px] mb-[4px] h-[34px] bg-[#F6F7FA] rounded-[4px]\">\n            <SearchIcon />\n            <input\n              type=\"text\"\n              value={keyword}\n              onChange={(e) => setKeyword(e.target.value)}\n              placeholder={`搜索${field.label}`}\n              className=\"flex-1 bg-transparent text-[14px] text-[#030303] placeholder:text-[#999999] outline-none border-none\"\n              autoFocus\n            />\n          </div>\n          <div className=\"flex flex-col gap-0 max-h-[200px] overflow-y-auto\">\n            {loading ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">搜索中...</div>\n            ) : options.length === 0 ? (\n              <div className=\"px-[10px] py-[8px] text-[14px] text-[#999999]\">暂无数据</div>\n            ) : (\n              options.map((opt, i) => (\n                <button\n                  key={i}\n                  type=\"button\"\n                  onClick={() => {\n                    onChange?.(opt);\n                    setOpen(false);\n                    setKeyword('');\n                  }}\n                  className={cn(\n                    'h-[34px] px-[10px] rounded-[4px] text-left text-[14px] leading-[normal]',\n                    'text-[#030303] hover:bg-[#EFF0F6]',\n                    transCls,\n                  )}\n                >\n                  {opt.province}{opt.city}{opt.district} {opt.detail}\n                </button>\n              ))\n            )}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </FieldWrapper>\n  );\n}\n","import type { IField } from '@baishuyun/types';\nimport { FieldWrapper } from './index';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\n\n// ── SeparatorDisplay ────────────────────────────────────────────────\n\nexport function SeparatorDisplay({ field }: { field: IField }) {\n  return (\n    <div className=\"flex items-center gap-[8px] py-[8px]\">\n      <div className=\"flex-1 h-px bg-[#E0E0E0]\" />\n      {field.label && (\n        <span className=\"text-[12px] text-[#999999] shrink-0\">{field.label}</span>\n      )}\n      <div className=\"flex-1 h-px bg-[#E0E0E0]\" />\n    </div>\n  );\n}\n\n// ── SerialNumberDisplay ─────────────────────────────────────────────\n\nexport function SerialNumberDisplay({ field, value, showLabel, showDescription }: {\n  field: IField;\n  value?: unknown;\n  showLabel?: boolean;\n  showDescription?: boolean;\n}) {\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <span className=\"text-[14px] text-[#999999] leading-[34px]\">\n        {typeof value === 'string' ? value : '系统自动生成'}\n      </span>\n    </FieldWrapper>\n  );\n}\n\n// ── ButtonDisplay ───────────────────────────────────────────────────\n\nexport function ButtonDisplay({ field }: { field: IField }) {\n  return (\n    <div className=\"pt-[20px]\">\n      <button\n        type=\"button\"\n        className={cn(\n          'inline-flex items-center justify-center h-[34px] px-[20px] rounded-[4px]',\n          'bg-[#0265FF] text-[14px] text-white',\n          'hover:bg-[#0255DF]',\n          transCls,\n        )}\n      >\n        {field.label}\n      </button>\n    </div>\n  );\n}\n\n// ── SubformPlaceholder ──────────────────────────────────────────────\n\nexport function SubformPlaceholder({ field, showLabel, showDescription }: {\n  field: IField;\n  showLabel?: boolean;\n  showDescription?: boolean;\n}) {\n  return (\n    <FieldWrapper field={field} showLabel={showLabel} showDescription={showDescription}>\n      <div className=\"h-[34px] px-[10px] rounded-[4px] bg-[#F6F7FA] border border-dashed border-[#CCCCCC] text-[14px] text-[#999999] leading-[34px] text-center\">\n        子表单字段（{field.widget?.widgetName ?? field.label}）\n      </div>\n    </FieldWrapper>\n  );\n}\n","import type { IField, IFieldValueService, relationalOperator } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\n\n// ── Sub-component imports ───────────────────────────────────────────\n\nimport { TextInput, NumberInput, TextareaInput, PasswordInput, DateTimeInput, UploadInput, RangeNumberInput, RangeDateTimeInput } from './inputs';\nimport { ComboInput, CheckboxGroupInput, RadioGroupInput, AsyncPicker, CascadingAddressInput, TextMultiSelect } from './picker-inputs';\nimport { SeparatorDisplay, ButtonDisplay, SubformPlaceholder } from './display';\n\n// ── Props ───────────────────────────────────────────────────────────\n\nexport interface FieldValueInputProps {\n  field: IField;\n  value?: unknown;\n  onChange?: (value: unknown) => void;\n  service?: IFieldValueService;\n  operator?: relationalOperator;\n  disabled?: boolean;\n  showLabel?: boolean;\n  showDescription?: boolean;\n  className?: string;\n}\n\n// ── Shared styles ───────────────────────────────────────────────────\n\nconst labelCls = 'text-[14px] font-bold text-[#030303] leading-[20px]';\nconst descriptionCls = 'text-[12px] text-[#999999] leading-[18px]';\nconst requiredCls = 'text-[#FF5631]';\n\n// ── Utility ─────────────────────────────────────────────────────────\n\nfunction isRequired(field: IField): boolean {\n  return field.widget?.allowBlank === false;\n}\n\n// ── Shared sub-components ───────────────────────────────────────────\n\nfunction FieldLabel({ field }: { field: IField }) {\n  return (\n    <label className={cn(labelCls, 'block mb-[4px]')}>\n      {isRequired(field) && <span className={requiredCls}>*</span>}\n      {field.label}\n    </label>\n  );\n}\n\nfunction FieldDescription({ field }: { field: IField }) {\n  if (!field.description) return null;\n  return <p className={cn(descriptionCls, 'mb-[6px]')}>{field.description}</p>;\n}\n\nexport function FieldWrapper({\n  field,\n  showLabel = false,\n  showDescription = false,\n  className,\n  children,\n}: {\n  field: IField;\n  showLabel?: boolean;\n  showDescription?: boolean;\n  className?: string;\n  children: React.ReactNode;\n}) {\n  return (\n    <div className={cn('flex flex-col', className)}>\n      {showLabel && <FieldLabel field={field} />}\n      {showDescription && <FieldDescription field={field} />}\n      {children}\n    </div>\n  );\n}\n\n// ── Main Component ──────────────────────────────────────────────────\n\nexport const FieldValueInput = (props: FieldValueInputProps) => {\n  const { field, operator } = props;\n  const widgetType = field.widget?.type;\n\n  switch (widgetType) {\n    // ── text / sn: in/nin → multi-select, otherwise → text input ──\n    case 'text':\n    case 'sn':\n      if (operator && (operator === 'in' || operator === 'nin')) {\n        return <TextMultiSelect {...props} />;\n      }\n      return <TextInput {...props} />;\n\n    // ── number: range → min/max, otherwise → single number input ──\n    case 'number':\n      if (operator === 'range') {\n        return <RangeNumberInput {...props} />;\n      }\n      return <NumberInput {...props} />;\n\n    // ── datetime: range → min/max, otherwise → single datetime input ──\n    case 'datetime':\n      if (operator === 'range') {\n        return <RangeDateTimeInput {...props} />;\n      }\n      return <DateTimeInput {...props} />;\n\n    // ── user / dept / usergroup / deptgroup: multi-op → multi-select ──\n    case 'user':\n      return <AsyncPicker {...props} kind=\"user\" multiple={operator === 'in' || operator === 'nin'} />;\n    case 'dept':\n      return <AsyncPicker {...props} kind=\"dept\" multiple={operator === 'in' || operator === 'nin'} />;\n    case 'usergroup':\n      return <AsyncPicker {...props} kind=\"usergroup\" multiple={operator === 'in' || operator === 'nin' || operator === 'all'} />;\n    case 'deptgroup':\n      return <AsyncPicker {...props} kind=\"deptgroup\" multiple={operator === 'in' || operator === 'nin' || operator === 'all'} />;\n\n    // ── Combo / linkdata / linkquery ──\n    case 'combo':\n    case 'linkdata':\n    case 'linkquery':\n      return <ComboInput {...props} />;\n    case 'combocheck':\n    case 'checkboxgroup':\n      return <CheckboxGroupInput {...props} />;\n    case 'radiogroup':\n      return <RadioGroupInput {...props} />;\n    case 'textarea':\n      return <TextareaInput {...props} />;\n    case 'password':\n      return <PasswordInput {...props} />;\n    case 'upload':\n    case 'image':\n      return <UploadInput {...props} />;\n    case 'address':\n    case 'location':\n      return <CascadingAddressInput {...props} />;\n    case 'separator':\n      return <SeparatorDisplay field={field} />;\n    case 'button':\n      return <ButtonDisplay field={field} />;\n    case 'subform':\n      return <SubformPlaceholder field={field} showLabel={props.showLabel} showDescription={props.showDescription} />;\n    default:\n      return <TextInput {...props} />;\n  }\n};\n\nFieldValueInput.displayName = 'FieldValueInput';\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\/(\\d+)/.exec(userAgent);\n  var chrome_version = chrome && +chrome[1];\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt(rootNode) {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var doc = rootNode.ownerDocument || rootNode;\n    var activeElement;\n    try {\n      activeElement = rootNode.activeElement;\n    } catch(e) {\n      activeElement = doc.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function doc(cm) { return cm.display.wrapper.ownerDocument }\n\n  function root(cm) {\n    return rootNode(cm.display.wrapper)\n  }\n\n  function rootNode(element) {\n    // Detect modern browsers (2017+).\n    return element.getRootNode ? element.getRootNode() : element.ownerDocument\n  }\n\n  function win(cm) { return doc(cm).defaultView }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (Object.prototype.hasOwnProperty.call(obj, prop) && (overwrite !== false || !Object.prototype.hasOwnProperty.call(target, prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n\n  // Add a span to a line.\n  function addMarkedSpan(line, span, op) {\n    var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n    if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {\n      line.markedSpans.push(span);\n    } else {\n      line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n      if (inThisOp) { inThisOp.add(line.markedSpans); }\n    }\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    if (lineView.rest) {\n      for (var i = 0; i < lineView.rest.length; i++)\n        { if (lineView.rest[i] == line)\n          { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n      for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n        { if (lineNo(lineView.rest[i$1]) > lineN)\n          { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n    }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX(doc) {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) }\n    return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft\n  }\n  function pageScrollY(doc) {\n    if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) }\n    return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var ref = visualLine(lineObj);\n    var widgets = ref.widgets;\n    var height = 0;\n    if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n      { height += widgetHeight(widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX(doc(cm));\n      top -= pageScrollY(doc(cm));\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    var customCursor = cm.options.$customCursor;\n    if (customCursor) { primary = true; }\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (customCursor) {\n        var head = customCursor(cm, range);\n        if (head) { drawSelectionCursor(cm, head, curFragment); }\n      } else if (collapsed || cm.options.showCursorWhenSelecting) {\n        drawSelectionCursor(cm, range.head, curFragment);\n      }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n      var charPos = charCoords(cm, head, \"div\", null, null);\n      var width = charPos.right - charPos.left;\n      cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n    }\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.hasFocus()) {\n      cm.display.input.focus();\n      if (!cm.state.focused) { onFocus(cm); }\n    }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      if (cm.state.focused) { onBlur(cm); }\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n    var oldHeight = display.lineDiv.getBoundingClientRect().top;\n    var mustScroll = 0;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      oldHeight += cur.line.height;\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        if (oldHeight < viewTop) { mustScroll -= diff; }\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n    if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    var doc = display.wrapper.ownerDocument;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.scrollTop = 0;\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.visibility = this.vert.style.visibility = \"hidden\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.visibility = \"\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.visibility = \"hidden\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId,          // Unique ID\n      markArrays: null         // Used by addMarkedSpan\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt(root(cm));\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt(root(cm));\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = win(cm).getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var doc = snapshot.activeElt.ownerDocument;\n      var sel = doc.defaultView.getSelection(), range = doc.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n    // Send an event to consumers responding to changes in gutter width.\n    signalLater(display, \"gutterChanged\", display);\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n    // See #6982. FIXME remove when this has been fixed for a while in Chrome\n    if (chrome && chrome_version === 105) { d.wrapper.style.clipPath = \"inset(0px)\"; }\n\n    // This attribute is respected by automatic translation systems such as Google Translate,\n    // and may also be respected by tools used by human translators.\n    d.wrapper.setAttribute('translate', 'no');\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    // On Chrome 102, viewport updates somehow stop wheel-based\n    // scrolling. Turning off pointer events during the scroll seems\n    // to avoid the issue.\n    if (chrome && chrome_version == 102) {\n      if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = \"none\"; }\n      else { clearTimeout(cm.display.chromeScrollHack); }\n      cm.display.chromeScrollHack = setTimeout(function () {\n        cm.display.chromeScrollHack = null;\n        cm.display.sizer.style.pointerEvents = \"\";\n      }, 100);\n    }\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n    var pixelsPerUnit = wheelPixelsPerUnit;\n    if (e.deltaMode === 0) {\n      dx = e.deltaX;\n      dy = e.deltaY;\n      pixelsPerUnit = 1;\n    }\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && pixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && pixelsPerUnit != null) {\n      var pixels = dy * pixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20 && e.deltaMode !== 0) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    cm.options.direction = doc.direction;\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(prev) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = prev ? prev.undoDepth : Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      if (lineSep === '') { return lines.join('') }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head || ranges[i].anchor)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n    \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n    \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt(root(cm));\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    win(cm).focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(root(cm)); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      if (cm.state.delayingBlurEvent) {\n        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n        else { delayBlurEvent(cm); }\n      }\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { return display.input.focus(); }, 20);\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    if (ie) { delayBlurEvent(cm); }\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt(root(cm));\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus())\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"on\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"on\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){win(this).focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt(root(this)) },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n        if (isNaN(ch)) {\n          next = null;\n        } else {\n          var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n          next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n        }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    div.contentEditable = true;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      disableBrowserMagic(te);\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = activeElt(rootNode(div));\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = activeElt(rootNode(this.div)) == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n      var this$1 = this;\n\n    var input = this;\n    if (this.selectionInEditor())\n      { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n    this.resetting = false;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n    var opts = this.cm.options;\n    disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing && typing) { return }\n    var cm = this.cm;\n    this.resetting = true;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n    this.resetting = false;\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || this.resetting || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt(rootNode(textarea));\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.65.21\";\n\n  return CodeMirror;\n\n})));\n","import { useEffect, useRef, useState, useCallback } from 'react';\nimport CodeMirror from 'codemirror';\nimport { cn } from '../../../lib/utils';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { FieldSelectPopover } from '../field-select';\nimport type { IField, ISubformField } from '@baishuyun/types';\n\n// ── Create a DOM node for the field tag (used inside CodeMirror) ────\n\nfunction createFieldTagDom(label: string): HTMLSpanElement {\n  const wrapper = document.createElement('span');\n  wrapper.className = 'prompt-field-tag';\n\n  const iconSpan = document.createElement('span');\n  iconSpan.className = 'prompt-field-tag-icon';\n  iconSpan.innerHTML =\n    '<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"2\" y=\"2\" width=\"10\" height=\"10\" rx=\"2\" stroke=\"#6F829E\" stroke-width=\"1.2\"/><path d=\"M5 5.5H9M5 7.5H8\" stroke=\"#6F829E\" stroke-width=\"1.2\" stroke-linecap=\"round\"/></svg>';\n\n  const textSpan = document.createElement('span');\n  textSpan.textContent = label;\n\n  wrapper.appendChild(iconSpan);\n  wrapper.appendChild(textSpan);\n  return wrapper;\n}\n\n// ── CodeMirror Helpers ──────────────────────────────────────────────\n\nfunction resolveFieldWidgetInfo(\n  fields: IField[],\n  key: string,\n): { widgetName: string; label: string } | undefined {\n  const dotIndex = key.indexOf('.');\n  if (dotIndex > 0) {\n    const parentName = key.substring(0, dotIndex);\n    const childName = key.substring(dotIndex + 1);\n    const parent = fields.find((f) => f.widget?.widgetName === parentName);\n    if (parent?.widget?.items) {\n      const child = parent.widget.items.find(\n        (item): item is ISubformField =>\n          'widget' in item && item.widget?.widgetName === childName,\n      );\n      if (child) {\n        return { widgetName: key, label: child.label };\n      }\n    }\n  } else {\n    const field = fields.find((f) => f.widget?.widgetName === key);\n    if (field) {\n      return { widgetName: key, label: field.label };\n    }\n  }\n  return undefined;\n}\n\nfunction addFieldToCM(\n  cm: CodeMirror.Editor,\n  widgetName: string,\n  displayLabel: string,\n): void {\n  const from = cm.getCursor('from');\n\n  cm.replaceSelection('${' + widgetName + '}');\n  const to = cm.getCursor();\n\n  const tagNode = createFieldTagDom(displayLabel);\n  tagNode.setAttribute('data-field-key', widgetName);\n\n  cm.markText(from, to, {\n    handleMouseEvents: true,\n    atomic: true,\n    replacedWith: tagNode,\n  });\n}\n\nfunction getTemplateFromCM(cm: CodeMirror.Editor): string {\n  const wrapper = cm.getWrapperElement();\n  const lineElements = wrapper.querySelectorAll('.CodeMirror-line');\n  const lines: string[] = [];\n\n  lineElements.forEach((lineEl) => {\n    let lineText = '';\n    walkLineNode(lineEl);\n    lines.push(lineText);\n\n    function walkLineNode(node: Node): void {\n      if (node instanceof HTMLElement) {\n        const key = node.getAttribute('data-field-key');\n        if (key && node.classList.contains('prompt-field-tag')) {\n          lineText += '${' + key + '}';\n          return;\n        }\n      }\n      const children = Array.from(node.childNodes);\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (child.nodeType === Node.TEXT_NODE) {\n          lineText += child.textContent || '';\n        } else {\n          walkLineNode(child);\n        }\n      }\n    }\n  });\n\n  return lines.join('\\n').trim();\n}\n\nfunction setTemplateToCM(\n  cm: CodeMirror.Editor,\n  template: string,\n  fields: IField[],\n): void {\n  cm.setValue('');\n  if (!template) {\n    cm.refresh();\n    return;\n  }\n\n  const normalized = template.trim().replace(/\\s{2,}/g, ' ');\n  const parts = normalized.split(/(\\$\\{[^${}]*\\})/g);\n\n  for (const part of parts) {\n    const match = part.match(/^\\$\\{([^${}]*)\\}$/);\n    if (match) {\n      const info = resolveFieldWidgetInfo(fields, match[1]);\n      if (info) {\n        addFieldToCM(cm, info.widgetName, info.label);\n      } else {\n        cm.replaceSelection(part);\n      }\n    } else {\n      cm.replaceSelection(part);\n    }\n  }\n\n  cm.refresh();\n}\n\n// ── PromptInput Component ──────────────────────────────────────────\n\nexport interface PromptInputProps {\n  fields: IField[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (template: string) => void;\n  placeholder?: string;\n  className?: string;\n  disabled?: boolean;\n}\n\nexport const PromptInput = ({\n  fields,\n  value,\n  defaultValue,\n  onChange,\n  placeholder = '示例：放配置时候的提示词内容进行引导说明',\n  className,\n  disabled = false,\n}: PromptInputProps) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const cmRef = useRef<CodeMirror.Editor | null>(null);\n  const [open, setOpen] = useState(false);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const insertBtnRef = useRef<HTMLButtonElement | null>(null);\n  const isInternalUpdateRef = useRef(false);\n\n  // Create field key cache ref to avoid stale closure in CM callbacks\n  const fieldsRef = useRef(fields);\n  fieldsRef.current = fields;\n  const onChangeRef = useRef(onChange);\n  onChangeRef.current = onChange;\n\n  // Initialize CodeMirror\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n\n    const cm = CodeMirror(container, {\n      mode: undefined,\n      lineWrapping: true,\n      lineNumbers: false,\n      smartIndent: false,\n      autofocus: false,\n      extraKeys: {\n        Enter: (instance: CodeMirror.Editor) => {\n          // Allow regular newlines\n          instance.replaceSelection('\\n');\n        },\n      },\n    } as CodeMirror.EditorConfiguration);\n\n    cmRef.current = cm;\n\n    const initialValue = value ?? defaultValue ?? '';\n    if (initialValue) {\n      isInternalUpdateRef.current = true;\n      setTemplateToCM(cm, initialValue, fieldsRef.current);\n      isInternalUpdateRef.current = false;\n    }\n\n    cm.on('changes', () => {\n      if (isInternalUpdateRef.current) return;\n      const template = getTemplateFromCM(cm);\n      onChangeRef.current?.(template);\n    });\n\n    // Toggle placeholder visibility\n    const wrapper = cm.getWrapperElement();\n    const updatePlaceholder = () => {\n      const text = getTemplateFromCM(cm);\n      const isEmpty = text === '';\n      if (isEmpty) {\n        wrapper.setAttribute('data-placeholder', placeholder);\n        wrapper.classList.add('cm-empty');\n      } else {\n        wrapper.removeAttribute('data-placeholder');\n        wrapper.classList.remove('cm-empty');\n      }\n    };\n    cm.on('change', updatePlaceholder);\n    updatePlaceholder();\n\n    return () => {\n      // CodeMirror created from div (not textarea) doesn't have toTextArea\n      const wrapper = cm.getWrapperElement();\n      if (wrapper?.parentNode) {\n        wrapper.parentNode.removeChild(wrapper);\n      }\n    };\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  // Handle controlled value updates\n  const prevFieldsLenRef = useRef(0);\n  useEffect(() => {\n    const cm = cmRef.current;\n    if (!cm || value === undefined) return;\n    const currentTemplate = getTemplateFromCM(cm);\n    const fieldsBecameAvailable = prevFieldsLenRef.current === 0 && fields.length > 0;\n    prevFieldsLenRef.current = fields.length;\n    if (currentTemplate !== value || fieldsBecameAvailable) {\n      isInternalUpdateRef.current = true;\n      setTemplateToCM(cm, value, fields);\n      isInternalUpdateRef.current = false;\n    }\n  }, [value, fields]);\n\n  // Update placeholder when prop changes\n  useEffect(() => {\n    const cm = cmRef.current;\n    if (!cm) return;\n    const wrapper = cm.getWrapperElement();\n    const isEmpty = getTemplateFromCM(cm) === '';\n    if (isEmpty) {\n      wrapper.setAttribute('data-placeholder', placeholder);\n    }\n  }, [placeholder]);\n\n  const handleFieldSelect = useCallback(\n    (_field: IField, nodeKey: string) => {\n      const cm = cmRef.current;\n      if (!cm) return;\n      const info = resolveFieldWidgetInfo(fieldsRef.current, nodeKey);\n      if (!info) return;\n      cm.focus();\n      isInternalUpdateRef.current = true;\n      addFieldToCM(cm, info.widgetName, info.label);\n      isInternalUpdateRef.current = false;\n      const template = getTemplateFromCM(cm);\n      onChangeRef.current?.(template);\n      setOpen(false);\n    },\n    [],\n  );\n\n  const setInsertBtnRef = useCallback((node: HTMLButtonElement | null) => {\n    insertBtnRef.current = node;\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>(\n        '[data-bs-prompt-input-portal]',\n      );\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-prompt-input-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  return (\n    <div className={cn('prompt-input-root relative', className)}>\n      {/* CodeMirror editor area */}\n      <div\n        ref={containerRef}\n        className=\"prompt-input-codemirror\"\n      />\n\n      {/* Insert Field button - absolute top-right */}\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setInsertBtnRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'absolute top-[-26px] right-[10px] z-10',\n              'text-[14px] text-[#0265ff] leading-[normal]',\n              'cursor-pointer bg-transparent border-0',\n              'hover:opacity-80',\n              disabled && 'opacity-50 cursor-not-allowed',\n            )}\n          >\n            插入字段\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"end\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 !p-0\"\n        >\n          <FieldSelectPopover\n            fields={fields}\n            onSelect={handleFieldSelect}\n            showTypeBadge\n          />\n        </PopoverContent>\n      </Popover>\n\n      {/* Inline styles — includes CodeMirror base + component overrides */}\n      <style>{`\n        /* ═══════════════════════════════════════════════════════════════\n           CodeMirror base styles (inlined from codemirror/lib/codemirror.css)\n           ═══════════════════════════════════════════════════════════════ */\n        .CodeMirror {\n          font-family: monospace;\n          height: 300px;\n          color: black;\n          direction: ltr;\n          position: relative;\n          overflow: hidden;\n          background: white;\n        }\n        .CodeMirror-lines { padding: 4px 0; cursor: text; min-height: 1px; }\n        .CodeMirror pre.CodeMirror-line,\n        .CodeMirror pre.CodeMirror-line-like {\n          padding: 0 4px;\n          -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n          border-width: 0;\n          background: transparent;\n          font-family: inherit;\n          font-size: inherit;\n          margin: 0;\n          white-space: pre;\n          word-wrap: normal;\n          line-height: inherit;\n          color: inherit;\n          z-index: 2;\n          position: relative;\n          overflow: visible;\n          -webkit-tap-highlight-color: transparent;\n          -webkit-font-variant-ligatures: contextual;\n          font-variant-ligatures: contextual;\n        }\n        .CodeMirror-wrap pre.CodeMirror-line,\n        .CodeMirror-wrap pre.CodeMirror-line-like {\n          word-wrap: break-word;\n          white-space: pre-wrap;\n          word-break: normal;\n        }\n        .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; }\n        .CodeMirror-gutters {\n          border-right: 1px solid #ddd;\n          background-color: #f7f7f7;\n          white-space: nowrap;\n          position: absolute; left: 0; top: 0;\n          min-height: 100%;\n          z-index: 3;\n        }\n        .CodeMirror-linenumber {\n          padding: 0 3px 0 5px;\n          min-width: 20px;\n          text-align: right;\n          color: #999;\n          white-space: nowrap;\n        }\n        .CodeMirror-guttermarker { color: black; }\n        .CodeMirror-guttermarker-subtle { color: #999; }\n        .CodeMirror-cursor {\n          border-left: 1px solid black;\n          border-right: none;\n          width: 0;\n          position: absolute;\n          pointer-events: none;\n        }\n        .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; }\n        .cm-fat-cursor .CodeMirror-cursor { width: auto; border: 0 !important; background: #7e7; }\n        .cm-fat-cursor div.CodeMirror-cursors { z-index: 1; }\n        .cm-fat-cursor .CodeMirror-line::selection,\n        .cm-fat-cursor .CodeMirror-line > span::selection,\n        .cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n        .cm-fat-cursor .CodeMirror-line::-moz-selection,\n        .cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n        .cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n        .cm-fat-cursor { caret-color: transparent; }\n        @-moz-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} }\n        @-webkit-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} }\n        @keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} }\n        .cm-tab { display: inline-block; text-decoration: inherit; }\n        .CodeMirror-rulers {\n          position: absolute;\n          left: 0; right: 0; top: -50px; bottom: 0;\n          overflow: hidden;\n        }\n        .CodeMirror-ruler { border-left: 1px solid #ccc; top: 0; bottom: 0; position: absolute; }\n        .cm-s-default .cm-header { color: blue; }\n        .cm-s-default .cm-quote { color: #090; }\n        .cm-negative { color: #d44; }\n        .cm-positive { color: #292; }\n        .cm-header, .cm-strong { font-weight: bold; }\n        .cm-em { font-style: italic; }\n        .cm-link { text-decoration: underline; }\n        .cm-strikethrough { text-decoration: line-through; }\n        .cm-s-default .cm-keyword { color: #708; }\n        .cm-s-default .cm-atom { color: #219; }\n        .cm-s-default .cm-number { color: #164; }\n        .cm-s-default .cm-def { color: #00f; }\n        .cm-s-default .cm-variable-2 { color: #05a; }\n        .cm-s-default .cm-variable-3, .cm-s-default .cm-type { color: #085; }\n        .cm-s-default .cm-comment { color: #a50; }\n        .cm-s-default .cm-string { color: #a11; }\n        .cm-s-default .cm-string-2 { color: #f50; }\n        .cm-s-default .cm-meta { color: #555; }\n        .cm-s-default .cm-qualifier { color: #555; }\n        .cm-s-default .cm-builtin { color: #30a; }\n        .cm-s-default .cm-bracket { color: #997; }\n        .cm-s-default .cm-tag { color: #170; }\n        .cm-s-default .cm-attribute { color: #00c; }\n        .cm-s-default .cm-hr { color: #999; }\n        .cm-s-default .cm-link { color: #00c; }\n        .cm-s-default .cm-error { color: #f00; }\n        .cm-invalidchar { color: #f00; }\n        .CodeMirror-composing { border-bottom: 2px solid; }\n        div.CodeMirror span.CodeMirror-matchingbracket { color: #0b0; }\n        div.CodeMirror span.CodeMirror-nonmatchingbracket { color: #a22; }\n        .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n        .CodeMirror-activeline-background { background: #e8f2ff; }\n        .CodeMirror-scroll {\n          overflow: scroll !important;\n          margin-bottom: -50px; margin-right: -50px;\n          padding-bottom: 50px;\n          height: 100%;\n          outline: none;\n          position: relative;\n          z-index: 0;\n        }\n        .CodeMirror-sizer {\n          position: relative;\n          border-right: 50px solid transparent;\n        }\n        .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n          position: absolute;\n          z-index: 6;\n          display: none;\n          outline: none;\n        }\n        .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; }\n        .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; }\n        .CodeMirror-scrollbar-filler { right: 0; bottom: 0; }\n        .CodeMirror-gutter-filler { left: 0; bottom: 0; }\n        .CodeMirror-gutter {\n          white-space: normal;\n          height: 100%;\n          display: inline-block;\n          vertical-align: top;\n          margin-bottom: -50px;\n        }\n        .CodeMirror-gutter-wrapper {\n          position: absolute;\n          z-index: 4;\n          background: none !important;\n          border: none !important;\n        }\n        .CodeMirror-gutter-background { position: absolute; top: 0; bottom: 0; z-index: 4; }\n        .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }\n        .CodeMirror-gutter-wrapper ::selection { background-color: transparent; }\n        .CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent; }\n        .CodeMirror-linebackground {\n          position: absolute;\n          left: 0; right: 0; top: 0; bottom: 0;\n          z-index: 0;\n        }\n        .CodeMirror-linewidget { position: relative; z-index: 2; padding: 0.1px; }\n        .CodeMirror-rtl pre { direction: rtl; }\n        .CodeMirror-code { outline: none; }\n        .CodeMirror-scroll,\n        .CodeMirror-sizer,\n        .CodeMirror-gutter,\n        .CodeMirror-gutters,\n        .CodeMirror-linenumber {\n          -moz-box-sizing: content-box;\n          box-sizing: content-box;\n        }\n        .CodeMirror-measure {\n          position: absolute;\n          width: 100%;\n          height: 0;\n          overflow: hidden;\n          visibility: hidden;\n        }\n        .CodeMirror-measure pre { position: static; }\n        div.CodeMirror-cursors {\n          visibility: hidden;\n          position: relative;\n          z-index: 3;\n        }\n        div.CodeMirror-dragcursors { visibility: visible; }\n        .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; }\n        .CodeMirror-selected { background: #d9d9d9; }\n        .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n        .CodeMirror-crosshair { cursor: crosshair; }\n        .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n        .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n        .cm-searching { background-color: #ffa; background-color: rgba(255, 255, 0, .4); }\n        .cm-force-border { padding-right: .1px; }\n        @media print {\n          .CodeMirror div.CodeMirror-cursors { visibility: hidden; }\n        }\n        .cm-tab-wrap-hack:after { content: ''; }\n        span.CodeMirror-selectedtext { background: none; }\n\n        /* ── Outer wrapper ── */\n        .prompt-input-root {\n          border: 1px solid #E0E0E0;\n          border-radius: 4px;\n          min-height: 120px;\n          position: relative;\n        }\n\n        /* ── CodeMirror container ── */\n        .prompt-input-codemirror {\n          height: 100%;\n          min-height: 120px;\n        }\n\n        .prompt-input-codemirror .CodeMirror {\n          height: 100%;\n          min-height: 120px;\n          border: 0;\n          border-radius: 4px;\n          font-family: inherit;\n          font-size: 14px;\n          line-height: 1.6;\n          color: #030303;\n          background: transparent;\n        }\n\n        .prompt-input-codemirror .CodeMirror-scroll {\n          min-height: 120px;\n          overflow: hidden !important;\n        }\n\n        .prompt-input-codemirror .CodeMirror-lines {\n          padding: 10px 80px 10px 10px;\n        }\n\n        .prompt-input-codemirror .CodeMirror pre.CodeMirror-line,\n        .prompt-input-codemirror .CodeMirror pre.CodeMirror-line-like {\n          padding: 0;\n        }\n\n        .prompt-input-codemirror .CodeMirror .CodeMirror-cursor {\n          border-left: 1px solid #030303;\n        }\n\n        /* ── Placeholder ── */\n        .prompt-input-codemirror .CodeMirror.cm-empty .CodeMirror-lines::before {\n          content: attr(data-placeholder);\n          position: absolute;\n          left: 10px;\n          top: 10px;\n          color: #999999;\n          font-size: 14px;\n          pointer-events: none;\n          z-index: 1;\n        }\n\n        /* ── Field tag widget ── */\n        .prompt-field-tag {\n          display: inline-flex;\n          align-items: center;\n          gap: 6px;\n          height: 26px;\n          padding: 0 6px;\n          background: #EFF0F6;\n          border-radius: 4px;\n          font-size: 14px;\n          margin: 3px 3px;                                                                                                                                                                 \n          line-height: normal;\n          color: #000000;\n          white-space: nowrap;\n          user-select: none;\n          vertical-align: middle;\n        }\n\n        // .CodeMirror-widget + .CodeMirror-widget > .prompt-field-tag {                                                                                                                        \n        //   margin-left: 0;\n        // }\n\n        .CodeMirror-line {\n          line-height: 1.4;          /* 设置一个符合你字体大小的行高，例如 20px */\n        }\n\n        .CodeMirror-cursor {\n          height: 1.4em;\n          border-left: 1px solid black;\n        }\n\n        .prompt-field-tag-icon {\n          display: inline-flex;\n          align-items: center;\n          justify-content: center;\n          width: 14px;\n          height: 14px;\n          flex-shrink: 0;\n        }\n      `}</style>\n    </div>\n  );\n};\n","import React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface IAgentHelperMainLayoutProps {\n  className?: string;\n  children?: React.ReactNode;\n}\n\nexport const AgentHelperMainLayout = ({ className, children }: IAgentHelperMainLayoutProps) => {\n  return (\n    <div className={cn('flex flex-col h-full w-full', className)}>\n      {children}\n    </div>\n  );\n};\n\ninterface ISlotProps {\n  className?: string;\n  children?: React.ReactNode;\n}\n\nconst TopBar = ({ className, children }: ISlotProps) => {\n  return (\n    <div className={cn('h-[52px] shrink-0 bg-white border-b border-[#E0E0E0] flex items-center', className)}>\n      {children}\n    </div>\n  );\n};\nTopBar.displayName = 'AgentHelperMainLayout.TopBar';\nAgentHelperMainLayout.TopBar = TopBar;\n\nconst Main = ({ className, children }: ISlotProps) => {\n  return (\n    <div className={cn('flex flex-1 min-h-0', className)}>\n      {children}\n    </div>\n  );\n};\nMain.displayName = 'AgentHelperMainLayout.Main';\nAgentHelperMainLayout.Main = Main;\n\nconst SideBar = ({ className, children }: ISlotProps) => {\n  return (\n    <div className={cn('w-[280px] shrink-0 bg-white border-r border-[#E0E0E0] flex flex-col', className)}>\n      {children}\n    </div>\n  );\n};\nSideBar.displayName = 'AgentHelperMainLayout.SideBar';\nAgentHelperMainLayout.SideBar = SideBar;\n\nconst Content = ({ className, children }: ISlotProps) => {\n  return (\n    <div className={cn('flex-1 min-w-0 bg-[#F5F7FA] overflow-auto', className)}>\n      {children}\n    </div>\n  );\n};\nContent.displayName = 'AgentHelperMainLayout.Content';\nAgentHelperMainLayout.Content = Content;\n","import { useState, useCallback } from 'react';\nimport type { quantifier } from '@baishuyun/types';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\n\nconst OPTIONS: Array<{ value: quantifier; label: string }> = [\n  { value: 'all', label: '所有' },\n  { value: 'any', label: '任意' },\n];\n\nexport interface IConditonQuantifierSelectProps {\n  value?: quantifier;\n  defaultValue?: quantifier;\n  onChange?: (value: quantifier) => void;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const ConditonQuantifierSelect = ({\n  value: controlledValue,\n  defaultValue = 'all',\n  onChange,\n  disabled = false,\n  className,\n}: IConditonQuantifierSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [internalValue, setInternalValue] = useState<quantifier>(defaultValue);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  const resolvedValue = controlledValue !== undefined ? controlledValue : internalValue;\n  const selectedLabel = OPTIONS.find((o) => o.value === resolvedValue)?.label ?? '';\n\n  const handleSelect = useCallback(\n    (v: quantifier) => {\n      if (controlledValue === undefined) setInternalValue(v);\n      onChange?.(v);\n      setOpen(false);\n    },\n    [controlledValue, onChange],\n  );\n\n  const setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>(\n        '[data-bs-quantifier-select-portal]',\n      );\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-quantifier-select-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  return (\n    <div className={cn('relative inline-flex', className)}>\n      <Popover open={open} onOpenChange={setOpen}>\n        <PopoverTrigger asChild>\n          <button\n            ref={setTriggerRef}\n            type=\"button\"\n            disabled={disabled}\n            className={cn(\n              'flex items-center justify-between gap-[10px]',\n              'min-w-[82px] h-[31px] px-[10px]',\n              'bg-white border rounded-[4px]',\n              'text-left cursor-pointer',\n              open\n                ? 'border-[#0265FF]'\n                : 'border-[#E0E0E0] hover:border-[#0265FF]',\n              disabled &&\n                'opacity-50 cursor-not-allowed hover:border-[#E0E0E0]',\n              transCls,\n            )}\n          >\n            <span className=\"text-[14px] leading-[normal] text-[#030303] truncate\">\n              {selectedLabel}\n            </span>\n            <span\n              className={cn(\n                'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',\n                transCls,\n                open && 'rotate-180',\n              )}\n            >\n              <svg\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 16 16\"\n                fill=\"none\"\n              >\n                <path\n                  d=\"M4 6L8 10L12 6\"\n                  stroke=\"#666666\"\n                  strokeWidth=\"1.2\"\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                />\n              </svg>\n            </span>\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          align=\"start\"\n          sideOffset={4}\n          portalContainer={portalContainer}\n          className=\"!border-0 rounded-[10px] shadow-[0px_0px_5px_rgba(0,0,0,0.04)] p-[4px] min-w-[82px]\"\n        >\n          <div className=\"flex flex-col gap-0\">\n            {OPTIONS.map((opt) => (\n              <button\n                key={opt.value}\n                type=\"button\"\n                onClick={() => handleSelect(opt.value)}\n                className={cn(\n                  'h-[34px] px-[10px] rounded-[4px] text-left text-[14px] leading-[normal]',\n                  resolvedValue === opt.value\n                    ? 'bg-[#F0F6FF] text-[#0265FF]'\n                    : 'text-[#030303] hover:bg-[#EFF0F6]',\n                  transCls,\n                )}\n              >\n                {opt.label}\n              </button>\n            ))}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n","import type { quantifier } from '@baishuyun/types';\nimport { ConditonQuantifierSelect } from '../condition-quantifier-select';\nimport { cn } from '../../../lib/utils';\n\nexport interface IConditonTriggerDescriptionProps {\n  targetName: string;\n  quantifier?: quantifier;\n  defaultQuantifier?: quantifier;\n  onQuantifierChange?: (value: quantifier) => void;\n  quantifierPrefixStr?: string;\n  quantifierSuffixStr?: string;\n  className?: string;\n}\n\nexport const ConditonTriggerDescription = ({\n  targetName,\n  quantifier,\n  defaultQuantifier = 'all',\n  onQuantifierChange,\n  quantifierPrefixStr = '的数据符合以下',\n  quantifierSuffixStr = '条件时，触发后续动作',\n  className,\n}: IConditonTriggerDescriptionProps) => {\n  return (\n    <div\n      className={cn(\n        'flex items-center gap-[10px]',\n        className,\n      )}\n    >\n      <span className=\"text-[14px] leading-[normal] text-[#4D609F] shrink-0 whitespace-nowrap\">\n        {targetName}\n      </span>\n      <span className=\"flex items-center gap-[10px] shrink-0\">\n        <span className=\"text-[14px] leading-[normal] text-black whitespace-nowrap\">\n          {quantifierPrefixStr}\n        </span>\n        <ConditonQuantifierSelect\n          value={quantifier}\n          defaultValue={defaultQuantifier}\n          onChange={onQuantifierChange}\n        />\n        <span className=\"text-[14px] leading-[normal] text-black whitespace-nowrap\">\n          {quantifierSuffixStr}\n        </span>\n      </span>\n    </div>\n  );\n};\n","import { useState, useCallback, useRef, useMemo } from 'react';\nimport type { IField, IConditionItem, relationalOperator, IFieldValueService } from '@baishuyun/types';\nimport { getAvailableOperators, getDefaultOperator } from '@baishuyun/ai-feat-utils';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { FieldSelect } from '../field-select';\nimport { RelationalOperatorSelect } from '../relational-operator-select';\nimport { FieldValueInput } from '../field-value-input';\nimport { TrashIcon } from '../../bs-icons';\n\n// ── Helpers ──────────────────────────────────────────────────────────\n\nfunction findFieldKey(_: IField[], targetField: IField): string | undefined {\n  return targetField.widget?.widgetName;\n\n  // for (let i = 0; i < fields.length; i++) {\n  //   if (fields[i] === targetField) return targetField.widget?.widgetName || String(i);\n  // }\n  // return undefined;\n}\n\nfunction generateId(): string {\n  return `cond-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\n// ── Props ────────────────────────────────────────────────────────────\n\nexport interface ConditionItemProps {\n  fields: IField[];\n  value?: IConditionItem;\n  defaultValue?: IConditionItem;\n  onChange?: (item: IConditionItem) => void;\n  onRemoveClick?: () => void;\n  service?: IFieldValueService;\n  disabled?: boolean;\n  className?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────\n\nexport const ConditionItem = ({\n  fields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  onRemoveClick,\n  service,\n  disabled = false,\n  className,\n}: ConditionItemProps) => {\n  const idRef = useRef<string>(controlledValue?.id || defaultValue?.id || generateId());\n\n  const [internalField, setInternalField] = useState<IField | undefined>(\n    defaultValue?.field,\n  );\n  const [internalKey, setInternalKey] = useState<string | undefined>(() =>\n    defaultValue?.field ? findFieldKey(fields, defaultValue.field) : undefined,\n  );\n  const [internalOperator, setInternalOperator] = useState<relationalOperator>(\n    defaultValue?.operator ||\n      getDefaultOperator(defaultValue?.field?.widget?.type),\n  );\n  const [internalValue, setInternalValue] = useState<unknown>(\n    defaultValue?.value,\n  );\n\n  const isControlled = controlledValue !== undefined;\n\n  const currentField = isControlled ? controlledValue.field : internalField;\n  const currentKey = useMemo(() => {\n    if (isControlled && controlledValue.field) {\n      return findFieldKey(fields, controlledValue.field);\n    }\n    return internalKey;\n  }, [isControlled, controlledValue?.field, fields, internalKey]);\n  const currentOperator = isControlled\n    ? controlledValue.operator\n    : internalOperator;\n  const currentValue = isControlled ? controlledValue.value : internalValue;\n\n  const fieldType = currentField?.widget?.type;\n  const availableOperators = useMemo(\n    () => getAvailableOperators(fieldType),\n    [fieldType],\n  );\n\n  const emitChange = useCallback(\n    (field: IField, operator: relationalOperator, value: unknown) => {\n      onChange?.({\n        id: idRef.current,\n        field,\n        operator,\n        value,\n      });\n    },\n    [onChange],\n  );\n\n  // ── Handlers ──────────────────────────────────────────────────\n\n  const handleFieldChange = useCallback(\n    (field: IField, nodeKey: string) => {\n      const newOperator = getDefaultOperator(field.widget?.type);\n\n      if (!isControlled) {\n        setInternalField(field);\n        setInternalKey(nodeKey);\n        setInternalOperator(newOperator);\n        setInternalValue(undefined);\n      }\n\n      emitChange(field, newOperator, undefined);\n    },\n    [isControlled, emitChange],\n  );\n\n  const handleOperatorChange = useCallback(\n    (operator: relationalOperator) => {\n      const isEmptyOp = operator === 'empty' || operator === 'not_empty';\n      const isRangeOp = operator === 'range';\n      const isMultiOp = operator === 'in' || operator === 'nin' || operator === 'all';\n\n      let newValue: unknown;\n      if (isEmptyOp) {\n        newValue = undefined;\n      } else if (isRangeOp) {\n        newValue = { min: undefined, max: undefined };\n      } else if (isMultiOp) {\n        newValue = [];\n      } else if (\n        typeof currentValue === 'object' &&\n        currentValue !== null &&\n        !Array.isArray(currentValue)\n      ) {\n        newValue = undefined;\n      } else {\n        newValue = currentValue;\n      }\n\n      if (!isControlled) {\n        setInternalOperator(operator);\n        if (isEmptyOp || isRangeOp || isMultiOp) setInternalValue(newValue);\n      }\n\n      if (currentField) {\n        emitChange(currentField, operator, newValue);\n      }\n    },\n    [isControlled, currentField, currentValue, emitChange],\n  );\n\n  const handleValueChange = useCallback(\n    (value: unknown) => {\n      if (!isControlled) {\n        setInternalValue(value);\n      }\n\n      if (currentField) {\n        emitChange(currentField, currentOperator, value);\n      }\n    },\n    [isControlled, currentField, currentOperator, emitChange],\n  );\n\n  const hideValueInput =\n    currentField != null &&\n    (currentOperator === 'empty' || currentOperator === 'not_empty');\n\n  return (\n    <div className={cn('flex items-center gap-[10px]', className)}>\n      <FieldSelect\n        fields={fields}\n        value={currentKey}\n        onChange={handleFieldChange}\n        placeholder=\"请选择字段\"\n        searchPlaceholder=\"输入字段名称来搜索\"\n        disabled={disabled}\n        showTypeBadge\n        className=\"w-[200px] shrink-0\"\n      />\n\n      <RelationalOperatorSelect\n        value={currentOperator}\n        onChange={handleOperatorChange}\n        operators={availableOperators}\n        borderless\n        disabled={disabled}\n        className=\"w-[120px] shrink-0\"\n      />\n\n      {hideValueInput ? (\n        <div className=\"flex-1 min-w-0 h-[34px]\" />\n      ) : currentField ? (\n        <div className=\"flex-1 min-w-0\">\n          <FieldValueInput\n            field={currentField}\n            value={currentValue}\n            onChange={handleValueChange}\n            operator={currentOperator}\n            service={service}\n            disabled={disabled}\n          />\n        </div>\n      ) : (\n        <div\n          className={cn(\n            'flex-1 min-w-0 flex items-center',\n            'bg-white border border-[#E0E0E0] rounded-[4px]',\n            'h-[34px] px-[10px] py-[7px]',\n          )}\n        >\n          <span className=\"text-[14px] leading-[normal] text-[#999] truncate\">\n            请选择\n          </span>\n        </div>\n      )}\n\n      {onRemoveClick && (\n        <button\n          type=\"button\"\n          onClick={onRemoveClick}\n          disabled={disabled}\n          className={cn(\n            'shrink-0 flex items-center justify-center size-[16px]',\n            'text-[#999] hover:text-[#FF5631]',\n            disabled && 'opacity-50 cursor-not-allowed',\n            transCls,\n          )}\n        >\n          <TrashIcon />\n        </button>\n      )}\n    </div>\n  );\n};\n\nConditionItem.displayName = 'ConditionItem';\n","import { useCallback } from 'react';\nimport type { IField, ICondition, IConditionItem, IFieldValueService } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { ConditionItem } from '../condition-item';\n\nexport interface ConditionGroupProps {\n  fields: IField[];\n  value?: ICondition;\n  defaultValue?: ICondition;\n  onChange?: (condition: ICondition) => void;\n  service?: IFieldValueService;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const ConditionGroup = ({\n  fields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  service,\n  disabled = false,\n  className,\n}: ConditionGroupProps) => {\n  const isControlled = controlledValue !== undefined;\n  const currentValue = isControlled ? controlledValue : defaultValue;\n\n  const handleItemChange = useCallback(\n    (index: number, item: IConditionItem) => {\n      if (!currentValue) return;\n      const nextItems = [...currentValue.items];\n      nextItems[index] = item;\n      onChange?.({ ...currentValue, items: nextItems });\n    },\n    [currentValue, onChange],\n  );\n\n  const handleRemoveItem = useCallback(\n    (index: number) => {\n      if (!currentValue) return;\n      const nextItems = currentValue.items.filter((_, i) => i !== index);\n      onChange?.({ ...currentValue, items: nextItems });\n    },\n    [currentValue, onChange],\n  );\n\n  if (!currentValue || currentValue.items.length === 0) {\n    return null;\n  }\n\n  return (\n    <div\n      className={cn(\n        'bg-[#f5f5f5] border border-[#e0e0e0] border-dashed',\n        'rounded-[4px] p-[10px]',\n        'flex flex-col gap-[10px]',\n        className,\n      )}\n    >\n      {currentValue.items.map((item, index) => (\n        <ConditionItem\n          key={item.id}\n          fields={fields}\n          value={item}\n          onChange={(nextItem) => handleItemChange(index, nextItem)}\n          onRemoveClick={() => handleRemoveItem(index)}\n          service={service}\n          disabled={disabled}\n        />\n      ))}\n    </div>\n  );\n};\n\nConditionGroup.displayName = 'ConditionGroup';\n","import { useState, useCallback, useRef } from 'react';\nimport type { IField, ICondition, IConditionItem, quantifier, IFieldValueService, FieldType } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { ConditonTriggerDescription } from '../condition-trigger-description';\nimport { ConditionGroup } from '../condition-group';\nimport { AddIcon } from '../../bs-icons';\nimport {\n  conditionStringify2bsCondition,\n  bsConditionParse2Condition,\n} from '@baishuyun/ai-feat-utils';\n\nfunction generateId(): string {\n  return `cond-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction createEmptyItem(): IConditionItem {\n  return {\n    id: generateId(),\n    field: undefined as unknown as IField,\n    operator: 'eq',\n    value: undefined,\n  };\n}\n\nconst FilterFieldTypeBlacklist: Array<FieldType> = [\n  'button',\n  'separator',\n  'subform',\n  'upload',\n];\n\nexport interface ConditionInputProps {\n  targetName: string;\n  fields: IField[];\n  value?: ICondition;\n  defaultValue?: ICondition;\n  onChange?: (condition: ICondition) => void;\n  service?: IFieldValueService;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const ConditionInput = ({\n  targetName,\n  fields: allFields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  service,\n  disabled = false,\n  className,\n}: ConditionInputProps) => {\n  const defaultCondition = useRef<ICondition>(\n    defaultValue || {\n      targetName,\n      quantifier: 'all',\n      items: [],\n    },\n  ).current;\n\n  const fields = allFields.filter(\n    (f) => !FilterFieldTypeBlacklist.includes(f.widget?.type as FieldType),\n  );\n\n  const [internalValue, setInternalValue] = useState<ICondition>(defaultCondition);\n  const isControlled = controlledValue !== undefined;\n  const currentValue = isControlled ? controlledValue : internalValue;\n\n  const updateValue = useCallback(\n    (next: ICondition) => {\n      if (!isControlled) setInternalValue(next);\n      onChange?.(next);\n    },\n    [isControlled, onChange],\n  );\n\n  const handleQuantifierChange = useCallback(\n    (nextQuantifier: quantifier) => {\n      updateValue({ ...currentValue, quantifier: nextQuantifier });\n    },\n    [currentValue, updateValue],\n  );\n\n  const handleAddCondition = useCallback(() => {\n    const newItem = createEmptyItem();\n    updateValue({ ...currentValue, items: [...currentValue.items, newItem] });\n  }, [currentValue, updateValue]);\n\n  const handleDeleteAll = useCallback(() => {\n    updateValue({ ...currentValue, items: [] });\n  }, [currentValue, updateValue]);\n\n  const showDeleteAll = currentValue.items.length >= 3;\n\n  return (\n    <div className={cn('flex flex-col gap-[10px]', className)}>\n      <ConditonTriggerDescription\n        targetName={targetName}\n        quantifier={currentValue.quantifier}\n        onQuantifierChange={handleQuantifierChange}\n      />\n\n      <div className=\"flex items-center justify-between\">\n        <button\n          type=\"button\"\n          onClick={handleAddCondition}\n          disabled={disabled}\n          className={cn(\n            'flex items-center gap-[6px]',\n            'text-[14px] leading-[normal] text-[#0265FF]',\n            'hover:opacity-80',\n            disabled && 'opacity-50 cursor-not-allowed',\n            transCls,\n          )}\n        >\n          <AddIcon />\n          添加条件\n        </button>\n\n        {showDeleteAll && (\n          <button\n            type=\"button\"\n            onClick={handleDeleteAll}\n            disabled={disabled}\n            className={cn(\n              'text-[14px] leading-[normal] text-[#FF5631]',\n              'hover:opacity-80',\n              disabled && 'opacity-50 cursor-not-allowed',\n              transCls,\n            )}\n          >\n            删除全部\n          </button>\n        )}\n      </div>\n\n      <ConditionGroup\n        fields={fields}\n        value={currentValue}\n        onChange={updateValue}\n        service={service}\n        disabled={disabled}\n      />\n    </div>\n  );\n};\n\nConditionInput.displayName = 'ConditionInput';\n\n// ── BsConditionInput (IBsCondition string ↔ ICondition adapter) ──────────────\n\nfunction parseBsCondition(\n  str: string | undefined,\n  targetName: string,\n): ICondition {\n  if (str) {\n    try {\n      const parsed = bsConditionParse2Condition(str);\n      return { ...parsed, targetName };\n    } catch {\n      // invalid JSON, fall through to default\n    }\n  }\n  return {\n    targetName,\n    quantifier: 'all',\n    items: [],\n  };\n}\n\nfunction defaultBsConditionString(targetName: string): string {\n  return conditionStringify2bsCondition({\n    targetName,\n    quantifier: 'all',\n    items: [],\n  });\n}\n\nexport interface BsConditionInputProps {\n  targetName: string;\n  fields: IField[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (condition: string) => void;\n  service?: IFieldValueService;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport const BsConditionInput = ({\n  targetName,\n  fields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  service,\n  disabled = false,\n  className,\n}: BsConditionInputProps) => {\n  const defaultBS = useRef<string>(\n    defaultValue ?? defaultBsConditionString(targetName),\n  ).current;\n\n  const [internalValue, setInternalValue] = useState<string>(defaultBS);\n  const isControlled = controlledValue !== undefined;\n  const currentBS = isControlled ? controlledValue : internalValue;\n\n  const currentCondition = parseBsCondition(currentBS, targetName);\n\n  const handleChange = useCallback(\n    (cond: ICondition) => {\n      const bsStr = conditionStringify2bsCondition({ ...cond, targetName });\n      if (!isControlled) setInternalValue(bsStr);\n      onChange?.(bsStr);\n    },\n    [isControlled, onChange, targetName],\n  );\n\n  return (\n    <ConditionInput\n      targetName={targetName}\n      fields={fields}\n      value={currentCondition}\n      onChange={handleChange}\n      service={service}\n      disabled={disabled}\n      className={className}\n    />\n  );\n};\n\nBsConditionInput.displayName = 'BsConditionInput';\n","import { useState, useCallback, useRef } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { transCls } from '../../../const/ui';\nimport { Popover, PopoverTrigger, PopoverContent } from '../../ui/popover';\nimport { FieldSelectPopover } from '../field-select';\nimport type { IField } from '@baishuyun/types';\nimport type { FormActionFieldEditPreference } from '@baishuyun/types';\n\n// ── Inline SVG Icons ──────────────────────────────────────────────\n\nconst RadioUnchecked = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n    <circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"#CCCCCC\" />\n  </svg>\n);\n\nconst RadioChecked = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n    <circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"#0265FF\" />\n    <circle cx=\"8\" cy=\"8\" r=\"4\" fill=\"#0265FF\" />\n  </svg>\n);\n\nconst CloseIcon = () => (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" className=\"shrink-0\">\n    <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"#999999\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n  </svg>\n);\n\nconst DropdownChevron = ({ open }: { open: boolean }) => (\n  <svg\n    width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n    className={cn('shrink-0', transCls)}\n    style={{ transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n  >\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#666666\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n  </svg>\n);\n\n// ── Chip Component ─────────────────────────────────────────────────\n\nfunction FieldChip({ label, onRemove }: { label: string; onRemove: () => void }) {\n  return (\n    <span\n      className={cn(\n        'bg-[#EEEEEE] rounded-[2px] h-[26px] px-[6px]',\n        'flex items-center gap-[4px] shrink-0'\n      )}\n    >\n      <span className=\"text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n        {label}\n      </span>\n      <span onClick={(e) => {\n        e.stopPropagation();\n        onRemove?.();\n      }} className=\"flex items-center cursor-pointer\">\n        <CloseIcon />\n      </span>\n    </span>\n  );\n}\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport interface FieldEditPreferenceSelectProps {\n  fields: IField[];\n  value?: FormActionFieldEditPreference;\n  defaultValue?: FormActionFieldEditPreference;\n  onChange?: (value: FormActionFieldEditPreference) => void;\n  disabled?: boolean;\n  className?: string;\n}\n\n// ── Main Component ────────────────────────────────────────────────\n\nexport const FieldEditPreferenceSelect = ({\n  fields,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  disabled = false,\n  className,\n}: FieldEditPreferenceSelectProps) => {\n  const [open, setOpen] = useState(false);\n  const [internalValue, setInternalValue] = useState<FormActionFieldEditPreference>(\n    defaultValue ?? 'edit_any_field'\n  );\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n  const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n  const currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n  const mode: 'any' | 'specified' = typeof currentValue === 'string' ? 'any' : 'specified';\n  const selectedFields: IField[] =\n    mode === 'specified'\n      ? (currentValue as { type: 'edit_any_specified_field'; fields: IField[] }).fields\n      : [];\n\n  const setValue = useCallback(\n    (newValue: FormActionFieldEditPreference) => {\n      if (controlledValue === undefined) {\n        setInternalValue(newValue);\n      }\n      onChange?.(newValue);\n    },\n    [controlledValue, onChange]\n  );\n\n  const handleModeChange = useCallback(\n    (newMode: 'any' | 'specified') => {\n      if (disabled) return;\n      if (newMode === 'any') {\n        setValue('edit_any_field');\n      } else {\n        setValue({ type: 'edit_any_specified_field', fields: selectedFields });\n      }\n    },\n    [disabled, setValue, selectedFields]\n  );\n\n  const handleAddField = useCallback(\n    (field: IField, _nodeKey: string) => {\n      if (selectedFields.some((f) => f.label === field.label)) {\n        setOpen(false);\n        return;\n      }\n      const newFields = [...selectedFields, field];\n      setValue({ type: 'edit_any_specified_field', fields: newFields });\n      setOpen(false);\n    },\n    [setValue, selectedFields]\n  );\n\n  const handleRemoveField = useCallback(\n    (index: number) => {\n      const newFields = selectedFields.filter((_, i) => i !== index);\n      setValue({ type: 'edit_any_specified_field', fields: newFields });\n    },\n    [setValue, selectedFields]\n  );\n\n  const setTriggerRef = useCallback((node: HTMLButtonElement | null) => {\n    triggerRef.current = node;\n    if (!node) {\n      setPortalContainer(null);\n      return;\n    }\n    const rootNode = node.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>(\n        '[data-bs-field-edit-preference-portal]'\n      );\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-field-edit-preference-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n    } else {\n      setPortalContainer(null);\n    }\n  }, []);\n\n  // ── Render ──────────────────────────────────────────────────────\n\n  const isAny = mode === 'any';\n  const isSpecified = mode === 'specified';\n\n  return (\n    <div\n      className={cn(\n        'inline-flex items-start gap-[30px] min-w-0 w-full',\n        disabled && 'opacity-50 cursor-not-allowed',\n        className\n      )}\n    >\n      {/* \"任意字段\" option — independent bordered box */}\n      <button\n        type=\"button\"\n        disabled={disabled}\n        onClick={() => handleModeChange('any')}\n        className={cn(\n          'flex items-center gap-[6px] h-[34px] pl-[10px] pr-[20px] shrink-0 w-[200px]',\n          'bg-white border rounded-[4px]',\n          'shrink-0',\n          'text-left cursor-pointer',\n          isAny ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n          transCls\n        )}\n      >\n        {isAny ? <RadioChecked /> : <RadioUnchecked />}\n        <span className=\"text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n          任意字段\n        </span>\n      </button>\n\n      {/* \"任意指定字段\" option — compound control when selected */}\n      <div\n        className={cn(\n          'flex items-stretch bg-white border rounded-[4px] min-w-0 flex-1',\n          'grow min-w-0',\n          isSpecified ? 'border-[#0265FF]' : 'border-[#E0E0E0]',\n          transCls\n        )}\n      >\n        {/* Label portion — clickable to switch mode */}\n        <button\n          type=\"button\"\n          disabled={disabled}\n          onClick={() => handleModeChange('specified')}\n          className={cn(\n            'flex items-center gap-[6px] h-[32px] p-[10px] shrink-0 w-[200px]',\n            'text-left cursor-pointer bg-white rounded-[4px]',\n            transCls\n          )}\n        >\n          {isSpecified ? <RadioChecked /> : <RadioUnchecked />}\n          <span className=\"text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n            任意指定字段\n          </span>\n        </button>\n\n        {/* Chips area + dropdown */}\n        <div className=\"flex items-center gap-[4px] pl-[4px] pr-[10px] py-[7px] min-w-0 flex-1 bg-white rounded-br-[4px] rounded-tr-[4px] h-[32px] border-l border-[#E0E0E0]\">\n          {/* Dropdown trigger */}\n          <Popover open={open} onOpenChange={setOpen}>\n            <PopoverTrigger asChild>\n              <div className=\"flex items-center gap-[4px] min-w-0 flex-1\">\n              {/* Selected field chips */}\n              <div className=\"flex items-center gap-[4px] min-w-0 flex-1 overflow-x-auto scrollbar-hide\" onClick={() => {\n                if (disabled) {\n                  return;\n                }\n\n                setOpen(() => !open);\n              }}>\n                {isSpecified && selectedFields.map((field, index) => (\n                  <FieldChip\n                    key={index}\n                    label={field.label}\n                    onRemove={() => handleRemoveField(index)}\n                  />\n                ))}\n                {isSpecified && selectedFields.length === 0 && (\n                  <span className=\"text-[14px] text-[#999999] leading-[normal] whitespace-nowrap\">\n                    请选择字段\n                  </span>\n                )}\n                {!isSpecified && (\n                  <span className=\"text-[14px] text-[#999999] leading-[normal] whitespace-nowrap\">\n                    请选择字段\n                  </span>\n                )}\n              </div>\n\n              <button\n                ref={setTriggerRef}\n                type=\"button\"\n                disabled={disabled}\n                className={cn(\n                  'flex items-center justify-center shrink-0',\n                  'w-[16px] h-[16px]',\n                  'cursor-pointer',\n                  disabled && 'cursor-not-allowed'\n                )}\n              >\n                <DropdownChevron open={open} />\n              </button>\n              </div>\n            </PopoverTrigger>\n            <PopoverContent\n              align=\"start\"\n              sideOffset={4}\n              portalContainer={portalContainer}\n              className=\"!border-0 !p-0\"\n              style={{ minWidth: 240 }}\n            >\n              <FieldSelectPopover\n                fields={fields}\n                onSelect={handleAddField}\n                searchPlaceholder=\"输入字段名称来搜索\"\n                showTypeBadge\n              />\n            </PopoverContent>\n          </Popover>\n        </div>\n      </div>\n    </div>\n  );\n};\n","/**\n   * table-core\n   *\n   * Copyright (c) TanStack\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE.md file in the root directory of this source tree.\n   *\n   * @license MIT\n   */\n// type Person = {\n//   firstName: string\n//   lastName: string\n//   age: number\n//   visits: number\n//   status: string\n//   progress: number\n//   createdAt: Date\n//   nested: {\n//     foo: [\n//       {\n//         bar: 'bar'\n//       }\n//     ]\n//     bar: { subBar: boolean }[]\n//     baz: {\n//       foo: 'foo'\n//       bar: {\n//         baz: 'baz'\n//       }\n//     }\n//   }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n//   cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n//   cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n//   cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n  return {\n    accessor: (accessor, column) => {\n      return typeof accessor === 'function' ? {\n        ...column,\n        accessorFn: accessor\n      } : {\n        ...column,\n        accessorKey: accessor\n      };\n    },\n    display: column => column,\n    group: column => column\n  };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n  return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n  //\n}\nfunction makeStateUpdater(key, instance) {\n  return updater => {\n    instance.setState(old => {\n      return {\n        ...old,\n        [key]: functionalUpdate(updater, old[key])\n      };\n    });\n  };\n}\nfunction isFunction(d) {\n  return d instanceof Function;\n}\nfunction isNumberArray(d) {\n  return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n  const flat = [];\n  const recurse = subArr => {\n    subArr.forEach(item => {\n      flat.push(item);\n      const children = getChildren(item);\n      if (children != null && children.length) {\n        recurse(children);\n      }\n    });\n  };\n  recurse(arr);\n  return flat;\n}\nfunction memo(getDeps, fn, opts) {\n  let deps = [];\n  let result;\n  return depArgs => {\n    let depTime;\n    if (opts.key && opts.debug) depTime = Date.now();\n    const newDeps = getDeps(depArgs);\n    const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n    if (!depsChanged) {\n      return result;\n    }\n    deps = newDeps;\n    let resultTime;\n    if (opts.key && opts.debug) resultTime = Date.now();\n    result = fn(...newDeps);\n    opts == null || opts.onChange == null || opts.onChange(result);\n    if (opts.key && opts.debug) {\n      if (opts != null && opts.debug()) {\n        const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n        const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n        const resultFpsPercentage = resultEndTime / 16;\n        const pad = (str, num) => {\n          str = String(str);\n          while (str.length < num) {\n            str = ' ' + str;\n          }\n          return str;\n        };\n        console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n      }\n    }\n    return result;\n  };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n  return {\n    debug: () => {\n      var _tableOptions$debugAl;\n      return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n    },\n    key: process.env.NODE_ENV === 'development' && key,\n    onChange\n  };\n}\n\nfunction createCell(table, row, column, columnId) {\n  const getRenderValue = () => {\n    var _cell$getValue;\n    return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n  };\n  const cell = {\n    id: `${row.id}_${column.id}`,\n    row,\n    column,\n    getValue: () => row.getValue(columnId),\n    renderValue: getRenderValue,\n    getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n      table,\n      column,\n      row,\n      cell: cell,\n      getValue: cell.getValue,\n      renderValue: cell.renderValue\n    }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n  };\n  table._features.forEach(feature => {\n    feature.createCell == null || feature.createCell(cell, column, row, table);\n  }, {});\n  return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n  var _ref, _resolvedColumnDef$id;\n  const defaultColumn = table._getDefaultColumnDef();\n  const resolvedColumnDef = {\n    ...defaultColumn,\n    ...columnDef\n  };\n  const accessorKey = resolvedColumnDef.accessorKey;\n  let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n  let accessorFn;\n  if (resolvedColumnDef.accessorFn) {\n    accessorFn = resolvedColumnDef.accessorFn;\n  } else if (accessorKey) {\n    // Support deep accessor keys\n    if (accessorKey.includes('.')) {\n      accessorFn = originalRow => {\n        let result = originalRow;\n        for (const key of accessorKey.split('.')) {\n          var _result;\n          result = (_result = result) == null ? void 0 : _result[key];\n          if (process.env.NODE_ENV !== 'production' && result === undefined) {\n            console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n          }\n        }\n        return result;\n      };\n    } else {\n      accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n    }\n  }\n  if (!id) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n    }\n    throw new Error();\n  }\n  let column = {\n    id: `${String(id)}`,\n    accessorFn,\n    parent: parent,\n    depth,\n    columnDef: resolvedColumnDef,\n    columns: [],\n    getFlatColumns: memo(() => [true], () => {\n      var _column$columns;\n      return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n    }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n    getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n      var _column$columns2;\n      if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n        let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n        return orderColumns(leafColumns);\n      }\n      return [column];\n    }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n  };\n  for (const feature of table._features) {\n    feature.createColumn == null || feature.createColumn(column, table);\n  }\n\n  // Yes, we have to convert table to unknown, because we know more than the compiler here.\n  return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n  var _options$id;\n  const id = (_options$id = options.id) != null ? _options$id : column.id;\n  let header = {\n    id,\n    column,\n    index: options.index,\n    isPlaceholder: !!options.isPlaceholder,\n    placeholderId: options.placeholderId,\n    depth: options.depth,\n    subHeaders: [],\n    colSpan: 0,\n    rowSpan: 0,\n    headerGroup: null,\n    getLeafHeaders: () => {\n      const leafHeaders = [];\n      const recurseHeader = h => {\n        if (h.subHeaders && h.subHeaders.length) {\n          h.subHeaders.map(recurseHeader);\n        }\n        leafHeaders.push(h);\n      };\n      recurseHeader(header);\n      return leafHeaders;\n    },\n    getContext: () => ({\n      table,\n      header: header,\n      column\n    })\n  };\n  table._features.forEach(feature => {\n    feature.createHeader == null || feature.createHeader(header, table);\n  });\n  return header;\n}\nconst Headers = {\n  createTable: table => {\n    // Header Groups\n\n    table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n      var _left$map$filter, _right$map$filter;\n      const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n      const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n      const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n      const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n      return headerGroups;\n    }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n    table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n      leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n      return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n    }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n    table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n      var _left$map$filter2;\n      const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n      return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n    }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n    table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n      var _right$map$filter2;\n      const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n      return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n    }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n    // Footer Groups\n\n    table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n    table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n    table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n    table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n    // Flat Headers\n\n    table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n      return headerGroups.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n    table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n    table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n    table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n    // Leaf Headers\n\n    table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders;\n        return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n    table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders2;\n        return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n    table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders3;\n        return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n    table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n      var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n      return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n        return header.getLeafHeaders();\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n  }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n  var _headerGroups$0$heade, _headerGroups$;\n  // Find the max depth of the columns:\n  // build the leaf column row\n  // build each buffer row going up\n  //    placeholder for non-existent level\n  //    real column for existing level\n\n  let maxDepth = 0;\n  const findMaxDepth = function (columns, depth) {\n    if (depth === void 0) {\n      depth = 1;\n    }\n    maxDepth = Math.max(maxDepth, depth);\n    columns.filter(column => column.getIsVisible()).forEach(column => {\n      var _column$columns;\n      if ((_column$columns = column.columns) != null && _column$columns.length) {\n        findMaxDepth(column.columns, depth + 1);\n      }\n    }, 0);\n  };\n  findMaxDepth(allColumns);\n  let headerGroups = [];\n  const createHeaderGroup = (headersToGroup, depth) => {\n    // The header group we are creating\n    const headerGroup = {\n      depth,\n      id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n      headers: []\n    };\n\n    // The parent columns we're going to scan next\n    const pendingParentHeaders = [];\n\n    // Scan each column for parents\n    headersToGroup.forEach(headerToGroup => {\n      // What is the latest (last) parent column?\n\n      const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n      const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n      let column;\n      let isPlaceholder = false;\n      if (isLeafHeader && headerToGroup.column.parent) {\n        // The parent header is new\n        column = headerToGroup.column.parent;\n      } else {\n        // The parent header is repeated\n        column = headerToGroup.column;\n        isPlaceholder = true;\n      }\n      if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n        // This column is repeated. Add it as a sub header to the next batch\n        latestPendingParentHeader.subHeaders.push(headerToGroup);\n      } else {\n        // This is a new header. Let's create it\n        const header = createHeader(table, column, {\n          id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n          isPlaceholder,\n          placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n          depth,\n          index: pendingParentHeaders.length\n        });\n\n        // Add the headerToGroup as a subHeader of the new header\n        header.subHeaders.push(headerToGroup);\n        // Add the new header to the pendingParentHeaders to get grouped\n        // in the next batch\n        pendingParentHeaders.push(header);\n      }\n      headerGroup.headers.push(headerToGroup);\n      headerToGroup.headerGroup = headerGroup;\n    });\n    headerGroups.push(headerGroup);\n    if (depth > 0) {\n      createHeaderGroup(pendingParentHeaders, depth - 1);\n    }\n  };\n  const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n    depth: maxDepth,\n    index\n  }));\n  createHeaderGroup(bottomHeaders, maxDepth - 1);\n  headerGroups.reverse();\n\n  // headerGroups = headerGroups.filter(headerGroup => {\n  //   return !headerGroup.headers.every(header => header.isPlaceholder)\n  // })\n\n  const recurseHeadersForSpans = headers => {\n    const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n    return filteredHeaders.map(header => {\n      let colSpan = 0;\n      let rowSpan = 0;\n      let childRowSpans = [0];\n      if (header.subHeaders && header.subHeaders.length) {\n        childRowSpans = [];\n        recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n          let {\n            colSpan: childColSpan,\n            rowSpan: childRowSpan\n          } = _ref;\n          colSpan += childColSpan;\n          childRowSpans.push(childRowSpan);\n        });\n      } else {\n        colSpan = 1;\n      }\n      const minChildRowSpan = Math.min(...childRowSpans);\n      rowSpan = rowSpan + minChildRowSpan;\n      header.colSpan = colSpan;\n      header.rowSpan = rowSpan;\n      return {\n        colSpan,\n        rowSpan\n      };\n    });\n  };\n  recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n  return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n  let row = {\n    id,\n    index: rowIndex,\n    original,\n    depth,\n    parentId,\n    _valuesCache: {},\n    _uniqueValuesCache: {},\n    getValue: columnId => {\n      if (row._valuesCache.hasOwnProperty(columnId)) {\n        return row._valuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.accessorFn)) {\n        return undefined;\n      }\n      row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n      return row._valuesCache[columnId];\n    },\n    getUniqueValues: columnId => {\n      if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n        return row._uniqueValuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.accessorFn)) {\n        return undefined;\n      }\n      if (!column.columnDef.getUniqueValues) {\n        row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n        return row._uniqueValuesCache[columnId];\n      }\n      row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n      return row._uniqueValuesCache[columnId];\n    },\n    renderValue: columnId => {\n      var _row$getValue;\n      return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n    },\n    subRows: subRows != null ? subRows : [],\n    getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n    getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n    getParentRows: () => {\n      let parentRows = [];\n      let currentRow = row;\n      while (true) {\n        const parentRow = currentRow.getParentRow();\n        if (!parentRow) break;\n        parentRows.push(parentRow);\n        currentRow = parentRow;\n      }\n      return parentRows.reverse();\n    },\n    getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n      return leafColumns.map(column => {\n        return createCell(table, row, column, column.id);\n      });\n    }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n    _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n      return allCells.reduce((acc, cell) => {\n        acc[cell.column.id] = cell;\n        return acc;\n      }, {});\n    }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n  };\n  for (let i = 0; i < table._features.length; i++) {\n    const feature = table._features[i];\n    feature == null || feature.createRow == null || feature.createRow(row, table);\n  }\n  return row;\n};\n\n//\n\nconst ColumnFaceting = {\n  createColumn: (column, table) => {\n    column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n    column.getFacetedRowModel = () => {\n      if (!column._getFacetedRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return column._getFacetedRowModel();\n    };\n    column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n    column.getFacetedUniqueValues = () => {\n      if (!column._getFacetedUniqueValues) {\n        return new Map();\n      }\n      return column._getFacetedUniqueValues();\n    };\n    column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n    column.getFacetedMinMaxValues = () => {\n      if (!column._getFacetedMinMaxValues) {\n        return undefined;\n      }\n      return column._getFacetedMinMaxValues();\n    };\n  }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n  var _filterValue$toString, _row$getValue;\n  const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n  return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n  var _row$getValue2;\n  return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n  var _row$getValue3;\n  return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n  var _row$getValue4;\n  return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n  return !filterValue.some(val => {\n    var _row$getValue5;\n    return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n  });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n  return filterValue.some(val => {\n    var _row$getValue6;\n    return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n  });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n  return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n  return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n  let [min, max] = filterValue;\n  const rowValue = row.getValue(columnId);\n  return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n  let [unsafeMin, unsafeMax] = val;\n  let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n  let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n  let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n  let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n  if (min > max) {\n    const temp = min;\n    min = max;\n    max = temp;\n  }\n  return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n  includesString,\n  includesStringSensitive,\n  equalsString,\n  arrIncludes,\n  arrIncludesAll,\n  arrIncludesSome,\n  equals,\n  weakEquals,\n  inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n  return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n  getDefaultColumnDef: () => {\n    return {\n      filterFn: 'auto'\n    };\n  },\n  getInitialState: state => {\n    return {\n      columnFilters: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n      filterFromLeafRows: false,\n      maxLeafRowFilterDepth: 100\n    };\n  },\n  createColumn: (column, table) => {\n    column.getAutoFilterFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'string') {\n        return filterFns.includesString;\n      }\n      if (typeof value === 'number') {\n        return filterFns.inNumberRange;\n      }\n      if (typeof value === 'boolean') {\n        return filterFns.equals;\n      }\n      if (value !== null && typeof value === 'object') {\n        return filterFns.equals;\n      }\n      if (Array.isArray(value)) {\n        return filterFns.arrIncludes;\n      }\n      return filterFns.weakEquals;\n    };\n    column.getFilterFn = () => {\n      var _table$options$filter, _table$options$filter2;\n      return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n      (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n    };\n    column.getCanFilter = () => {\n      var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n      return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n    };\n    column.getIsFiltered = () => column.getFilterIndex() > -1;\n    column.getFilterValue = () => {\n      var _table$getState$colum;\n      return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n    };\n    column.getFilterIndex = () => {\n      var _table$getState$colum2, _table$getState$colum3;\n      return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n    };\n    column.setFilterValue = value => {\n      table.setColumnFilters(old => {\n        const filterFn = column.getFilterFn();\n        const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n        const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n        //\n        if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n          var _old$filter;\n          return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n        }\n        const newFilterObj = {\n          id: column.id,\n          value: newFilter\n        };\n        if (previousFilter) {\n          var _old$map;\n          return (_old$map = old == null ? void 0 : old.map(d => {\n            if (d.id === column.id) {\n              return newFilterObj;\n            }\n            return d;\n          })) != null ? _old$map : [];\n        }\n        if (old != null && old.length) {\n          return [...old, newFilterObj];\n        }\n        return [newFilterObj];\n      });\n    };\n  },\n  createRow: (row, _table) => {\n    row.columnFilters = {};\n    row.columnFiltersMeta = {};\n  },\n  createTable: table => {\n    table.setColumnFilters = updater => {\n      const leafColumns = table.getAllLeafColumns();\n      const updateFn = old => {\n        var _functionalUpdate;\n        return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n          const column = leafColumns.find(d => d.id === filter.id);\n          if (column) {\n            const filterFn = column.getFilterFn();\n            if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n              return false;\n            }\n          }\n          return true;\n        });\n      };\n      table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n    };\n    table.resetColumnFilters = defaultState => {\n      var _table$initialState$c, _table$initialState;\n      table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n    };\n    table.getPreFilteredRowModel = () => table.getCoreRowModel();\n    table.getFilteredRowModel = () => {\n      if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n        table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n      }\n      if (table.options.manualFiltering || !table._getFilteredRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return table._getFilteredRowModel();\n    };\n  }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n  return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n  // It's faster to just add the aggregations together instead of\n  // process leaf nodes individually\n  return childRows.reduce((sum, next) => {\n    const nextValue = next.getValue(columnId);\n    return sum + (typeof nextValue === 'number' ? nextValue : 0);\n  }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n  let min;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null && (min > value || min === undefined && value >= value)) {\n      min = value;\n    }\n  });\n  return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n  let max;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null && (max < value || max === undefined && value >= value)) {\n      max = value;\n    }\n  });\n  return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n  let min;\n  let max;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null) {\n      if (min === undefined) {\n        if (value >= value) min = max = value;\n      } else {\n        if (min > value) min = value;\n        if (max < value) max = value;\n      }\n    }\n  });\n  return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n  let count = 0;\n  let sum = 0;\n  leafRows.forEach(row => {\n    let value = row.getValue(columnId);\n    if (value != null && (value = +value) >= value) {\n      ++count, sum += value;\n    }\n  });\n  if (count) return sum / count;\n  return;\n};\nconst median = (columnId, leafRows) => {\n  if (!leafRows.length) {\n    return;\n  }\n  const values = leafRows.map(row => row.getValue(columnId));\n  if (!isNumberArray(values)) {\n    return;\n  }\n  if (values.length === 1) {\n    return values[0];\n  }\n  const mid = Math.floor(values.length / 2);\n  const nums = values.sort((a, b) => a - b);\n  return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n  return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n  return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n  return leafRows.length;\n};\nconst aggregationFns = {\n  sum,\n  min,\n  max,\n  extent,\n  mean,\n  median,\n  unique,\n  uniqueCount,\n  count\n};\n\n//\n\nconst ColumnGrouping = {\n  getDefaultColumnDef: () => {\n    return {\n      aggregatedCell: props => {\n        var _toString, _props$getValue;\n        return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n      },\n      aggregationFn: 'auto'\n    };\n  },\n  getInitialState: state => {\n    return {\n      grouping: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onGroupingChange: makeStateUpdater('grouping', table),\n      groupedColumnMode: 'reorder'\n    };\n  },\n  createColumn: (column, table) => {\n    column.toggleGrouping = () => {\n      table.setGrouping(old => {\n        // Find any existing grouping for this column\n        if (old != null && old.includes(column.id)) {\n          return old.filter(d => d !== column.id);\n        }\n        return [...(old != null ? old : []), column.id];\n      });\n    };\n    column.getCanGroup = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n    };\n    column.getIsGrouped = () => {\n      var _table$getState$group;\n      return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n    };\n    column.getGroupedIndex = () => {\n      var _table$getState$group2;\n      return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n    };\n    column.getToggleGroupingHandler = () => {\n      const canGroup = column.getCanGroup();\n      return () => {\n        if (!canGroup) return;\n        column.toggleGrouping();\n      };\n    };\n    column.getAutoAggregationFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'number') {\n        return aggregationFns.sum;\n      }\n      if (Object.prototype.toString.call(value) === '[object Date]') {\n        return aggregationFns.extent;\n      }\n    };\n    column.getAggregationFn = () => {\n      var _table$options$aggreg, _table$options$aggreg2;\n      if (!column) {\n        throw new Error();\n      }\n      return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n    };\n  },\n  createTable: table => {\n    table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n    table.resetGrouping = defaultState => {\n      var _table$initialState$g, _table$initialState;\n      table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n    };\n    table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n    table.getGroupedRowModel = () => {\n      if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n        table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n      }\n      if (table.options.manualGrouping || !table._getGroupedRowModel) {\n        return table.getPreGroupedRowModel();\n      }\n      return table._getGroupedRowModel();\n    };\n  },\n  createRow: (row, table) => {\n    row.getIsGrouped = () => !!row.groupingColumnId;\n    row.getGroupingValue = columnId => {\n      if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n        return row._groupingValuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.columnDef.getGroupingValue)) {\n        return row.getValue(columnId);\n      }\n      row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n      return row._groupingValuesCache[columnId];\n    };\n    row._groupingValuesCache = {};\n  },\n  createCell: (cell, column, row, table) => {\n    cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n    cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n    cell.getIsAggregated = () => {\n      var _row$subRows;\n      return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n    };\n  }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n  if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n    return leafColumns;\n  }\n  const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n  if (groupedColumnMode === 'remove') {\n    return nonGroupingColumns;\n  }\n  const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n  return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n  getInitialState: state => {\n    return {\n      columnOrder: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnOrderChange: makeStateUpdater('columnOrder', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n    column.getIsFirstColumn = position => {\n      var _columns$;\n      const columns = _getVisibleLeafColumns(table, position);\n      return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n    };\n    column.getIsLastColumn = position => {\n      var _columns;\n      const columns = _getVisibleLeafColumns(table, position);\n      return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n    };\n  },\n  createTable: table => {\n    table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n    table.resetColumnOrder = defaultState => {\n      var _table$initialState$c;\n      table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n    };\n    table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n      // Sort grouped columns to the start of the column list\n      // before the headers are built\n      let orderedColumns = [];\n\n      // If there is no order, return the normal columns\n      if (!(columnOrder != null && columnOrder.length)) {\n        orderedColumns = columns;\n      } else {\n        const columnOrderCopy = [...columnOrder];\n\n        // If there is an order, make a copy of the columns\n        const columnsCopy = [...columns];\n\n        // And make a new ordered array of the columns\n\n        // Loop over the columns and place them in order into the new array\n        while (columnsCopy.length && columnOrderCopy.length) {\n          const targetColumnId = columnOrderCopy.shift();\n          const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n          if (foundIndex > -1) {\n            orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n          }\n        }\n\n        // If there are any columns left, add them to the end\n        orderedColumns = [...orderedColumns, ...columnsCopy];\n      }\n      return orderColumns(orderedColumns, grouping, groupedColumnMode);\n    }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n  }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n  left: [],\n  right: []\n});\nconst ColumnPinning = {\n  getInitialState: state => {\n    return {\n      columnPinning: getDefaultColumnPinningState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnPinningChange: makeStateUpdater('columnPinning', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.pin = position => {\n      const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n      table.setColumnPinning(old => {\n        var _old$left3, _old$right3;\n        if (position === 'right') {\n          var _old$left, _old$right;\n          return {\n            left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n            right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n          };\n        }\n        if (position === 'left') {\n          var _old$left2, _old$right2;\n          return {\n            left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n            right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n          };\n        }\n        return {\n          left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n          right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n        };\n      });\n    };\n    column.getCanPin = () => {\n      const leafColumns = column.getLeafColumns();\n      return leafColumns.some(d => {\n        var _d$columnDef$enablePi, _ref, _table$options$enable;\n        return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n      });\n    };\n    column.getIsPinned = () => {\n      const leafColumnIds = column.getLeafColumns().map(d => d.id);\n      const {\n        left,\n        right\n      } = table.getState().columnPinning;\n      const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n      const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n      return isLeft ? 'left' : isRight ? 'right' : false;\n    };\n    column.getPinnedIndex = () => {\n      var _table$getState$colum, _table$getState$colum2;\n      const position = column.getIsPinned();\n      return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n    };\n  },\n  createRow: (row, table) => {\n    row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n      const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n      return allCells.filter(d => !leftAndRight.includes(d.column.id));\n    }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n    row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n      const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n        ...d,\n        position: 'left'\n      }));\n      return cells;\n    }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n    row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n      const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n        ...d,\n        position: 'right'\n      }));\n      return cells;\n    }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n  },\n  createTable: table => {\n    table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n    table.resetColumnPinning = defaultState => {\n      var _table$initialState$c, _table$initialState;\n      return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n    };\n    table.getIsSomeColumnsPinned = position => {\n      var _pinningState$positio;\n      const pinningState = table.getState().columnPinning;\n      if (!position) {\n        var _pinningState$left, _pinningState$right;\n        return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n      }\n      return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n    };\n    table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n      return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n    }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n    table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n      return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n    }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n    table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n      const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n      return allColumns.filter(d => !leftAndRight.includes(d.id));\n    }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n  }\n};\n\nfunction safelyAccessDocument(_document) {\n  return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n  size: 150,\n  minSize: 20,\n  maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n  startOffset: null,\n  startSize: null,\n  deltaOffset: null,\n  deltaPercentage: null,\n  isResizingColumn: false,\n  columnSizingStart: []\n});\nconst ColumnSizing = {\n  getDefaultColumnDef: () => {\n    return defaultColumnSizing;\n  },\n  getInitialState: state => {\n    return {\n      columnSizing: {},\n      columnSizingInfo: getDefaultColumnSizingInfoState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      columnResizeMode: 'onEnd',\n      columnResizeDirection: 'ltr',\n      onColumnSizingChange: makeStateUpdater('columnSizing', table),\n      onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.getSize = () => {\n      var _column$columnDef$min, _ref, _column$columnDef$max;\n      const columnSize = table.getState().columnSizing[column.id];\n      return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n    };\n    column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n    column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n    column.resetSize = () => {\n      table.setColumnSizing(_ref2 => {\n        let {\n          [column.id]: _,\n          ...rest\n        } = _ref2;\n        return rest;\n      });\n    };\n    column.getCanResize = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n    };\n    column.getIsResizing = () => {\n      return table.getState().columnSizingInfo.isResizingColumn === column.id;\n    };\n  },\n  createHeader: (header, table) => {\n    header.getSize = () => {\n      let sum = 0;\n      const recurse = header => {\n        if (header.subHeaders.length) {\n          header.subHeaders.forEach(recurse);\n        } else {\n          var _header$column$getSiz;\n          sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n        }\n      };\n      recurse(header);\n      return sum;\n    };\n    header.getStart = () => {\n      if (header.index > 0) {\n        const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n        return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n      }\n      return 0;\n    };\n    header.getResizeHandler = _contextDocument => {\n      const column = table.getColumn(header.column.id);\n      const canResize = column == null ? void 0 : column.getCanResize();\n      return e => {\n        if (!column || !canResize) {\n          return;\n        }\n        e.persist == null || e.persist();\n        if (isTouchStartEvent(e)) {\n          // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n          if (e.touches && e.touches.length > 1) {\n            return;\n          }\n        }\n        const startSize = header.getSize();\n        const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n        const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n        const newColumnSizing = {};\n        const updateOffset = (eventType, clientXPos) => {\n          if (typeof clientXPos !== 'number') {\n            return;\n          }\n          table.setColumnSizingInfo(old => {\n            var _old$startOffset, _old$startSize;\n            const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n            const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n            const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n            old.columnSizingStart.forEach(_ref3 => {\n              let [columnId, headerSize] = _ref3;\n              newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n            });\n            return {\n              ...old,\n              deltaOffset,\n              deltaPercentage\n            };\n          });\n          if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n            table.setColumnSizing(old => ({\n              ...old,\n              ...newColumnSizing\n            }));\n          }\n        };\n        const onMove = clientXPos => updateOffset('move', clientXPos);\n        const onEnd = clientXPos => {\n          updateOffset('end', clientXPos);\n          table.setColumnSizingInfo(old => ({\n            ...old,\n            isResizingColumn: false,\n            startOffset: null,\n            startSize: null,\n            deltaOffset: null,\n            deltaPercentage: null,\n            columnSizingStart: []\n          }));\n        };\n        const contextDocument = safelyAccessDocument(_contextDocument);\n        const mouseEvents = {\n          moveHandler: e => onMove(e.clientX),\n          upHandler: e => {\n            contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n            contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n            onEnd(e.clientX);\n          }\n        };\n        const touchEvents = {\n          moveHandler: e => {\n            if (e.cancelable) {\n              e.preventDefault();\n              e.stopPropagation();\n            }\n            onMove(e.touches[0].clientX);\n            return false;\n          },\n          upHandler: e => {\n            var _e$touches$;\n            contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n            contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n            if (e.cancelable) {\n              e.preventDefault();\n              e.stopPropagation();\n            }\n            onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n          }\n        };\n        const passiveIfSupported = passiveEventSupported() ? {\n          passive: false\n        } : false;\n        if (isTouchStartEvent(e)) {\n          contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n          contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n        } else {\n          contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n          contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n        }\n        table.setColumnSizingInfo(old => ({\n          ...old,\n          startOffset: clientX,\n          startSize,\n          deltaOffset: 0,\n          deltaPercentage: 0,\n          columnSizingStart,\n          isResizingColumn: column.id\n        }));\n      };\n    };\n  },\n  createTable: table => {\n    table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n    table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n    table.resetColumnSizing = defaultState => {\n      var _table$initialState$c;\n      table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n    };\n    table.resetHeaderSizeInfo = defaultState => {\n      var _table$initialState$c2;\n      table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n    };\n    table.getTotalSize = () => {\n      var _table$getHeaderGroup, _table$getHeaderGroup2;\n      return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getHeaderGroup : 0;\n    };\n    table.getLeftTotalSize = () => {\n      var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n      return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getLeftHeaderG : 0;\n    };\n    table.getCenterTotalSize = () => {\n      var _table$getCenterHeade, _table$getCenterHeade2;\n      return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getCenterHeade : 0;\n    };\n    table.getRightTotalSize = () => {\n      var _table$getRightHeader, _table$getRightHeader2;\n      return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getRightHeader : 0;\n    };\n  }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n  if (typeof passiveSupported === 'boolean') return passiveSupported;\n  let supported = false;\n  try {\n    const options = {\n      get passive() {\n        supported = true;\n        return false;\n      }\n    };\n    const noop = () => {};\n    window.addEventListener('test', noop, options);\n    window.removeEventListener('test', noop);\n  } catch (err) {\n    supported = false;\n  }\n  passiveSupported = supported;\n  return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n  return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n  getInitialState: state => {\n    return {\n      columnVisibility: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.toggleVisibility = value => {\n      if (column.getCanHide()) {\n        table.setColumnVisibility(old => ({\n          ...old,\n          [column.id]: value != null ? value : !column.getIsVisible()\n        }));\n      }\n    };\n    column.getIsVisible = () => {\n      var _ref, _table$getState$colum;\n      const childColumns = column.columns;\n      return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n    };\n    column.getCanHide = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n    };\n    column.getToggleVisibilityHandler = () => {\n      return e => {\n        column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n      };\n    };\n  },\n  createRow: (row, table) => {\n    row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n      return cells.filter(cell => cell.column.getIsVisible());\n    }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n    row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n  },\n  createTable: table => {\n    const makeVisibleColumnsMethod = (key, getColumns) => {\n      return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n        return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n      }, getMemoOptions(table.options, 'debugColumns', key));\n    };\n    table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n    table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n    table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n    table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n    table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n    table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n    table.resetColumnVisibility = defaultState => {\n      var _table$initialState$c;\n      table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n    };\n    table.toggleAllColumnsVisible = value => {\n      var _value;\n      value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n      table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n        ...obj,\n        [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n      }), {}));\n    };\n    table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n    table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n    table.getToggleAllColumnsVisibilityHandler = () => {\n      return e => {\n        var _target;\n        table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n      };\n    };\n  }\n};\nfunction _getVisibleLeafColumns(table, position) {\n  return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n  createTable: table => {\n    table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n    table.getGlobalFacetedRowModel = () => {\n      if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return table._getGlobalFacetedRowModel();\n    };\n    table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n    table.getGlobalFacetedUniqueValues = () => {\n      if (!table._getGlobalFacetedUniqueValues) {\n        return new Map();\n      }\n      return table._getGlobalFacetedUniqueValues();\n    };\n    table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n    table.getGlobalFacetedMinMaxValues = () => {\n      if (!table._getGlobalFacetedMinMaxValues) {\n        return;\n      }\n      return table._getGlobalFacetedMinMaxValues();\n    };\n  }\n};\n\n//\n\nconst GlobalFiltering = {\n  getInitialState: state => {\n    return {\n      globalFilter: undefined,\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n      globalFilterFn: 'auto',\n      getColumnCanGlobalFilter: column => {\n        var _table$getCoreRowMode;\n        const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n        return typeof value === 'string' || typeof value === 'number';\n      }\n    };\n  },\n  createColumn: (column, table) => {\n    column.getCanGlobalFilter = () => {\n      var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n      return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n    };\n  },\n  createTable: table => {\n    table.getGlobalAutoFilterFn = () => {\n      return filterFns.includesString;\n    };\n    table.getGlobalFilterFn = () => {\n      var _table$options$filter, _table$options$filter2;\n      const {\n        globalFilterFn: globalFilterFn\n      } = table.options;\n      return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n    };\n    table.setGlobalFilter = updater => {\n      table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n    };\n    table.resetGlobalFilter = defaultState => {\n      table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n    };\n  }\n};\n\n//\n\nconst RowExpanding = {\n  getInitialState: state => {\n    return {\n      expanded: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onExpandedChange: makeStateUpdater('expanded', table),\n      paginateExpandedRows: true\n    };\n  },\n  createTable: table => {\n    let registered = false;\n    let queued = false;\n    table._autoResetExpanded = () => {\n      var _ref, _table$options$autoRe;\n      if (!registered) {\n        table._queue(() => {\n          registered = true;\n        });\n        return;\n      }\n      if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n        if (queued) return;\n        queued = true;\n        table._queue(() => {\n          table.resetExpanded();\n          queued = false;\n        });\n      }\n    };\n    table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n    table.toggleAllRowsExpanded = expanded => {\n      if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n        table.setExpanded(true);\n      } else {\n        table.setExpanded({});\n      }\n    };\n    table.resetExpanded = defaultState => {\n      var _table$initialState$e, _table$initialState;\n      table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n    };\n    table.getCanSomeRowsExpand = () => {\n      return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n    };\n    table.getToggleAllRowsExpandedHandler = () => {\n      return e => {\n        e.persist == null || e.persist();\n        table.toggleAllRowsExpanded();\n      };\n    };\n    table.getIsSomeRowsExpanded = () => {\n      const expanded = table.getState().expanded;\n      return expanded === true || Object.values(expanded).some(Boolean);\n    };\n    table.getIsAllRowsExpanded = () => {\n      const expanded = table.getState().expanded;\n\n      // If expanded is true, save some cycles and return true\n      if (typeof expanded === 'boolean') {\n        return expanded === true;\n      }\n      if (!Object.keys(expanded).length) {\n        return false;\n      }\n\n      // If any row is not expanded, return false\n      if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n        return false;\n      }\n\n      // They must all be expanded :shrug:\n      return true;\n    };\n    table.getExpandedDepth = () => {\n      let maxDepth = 0;\n      const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n      rowIds.forEach(id => {\n        const splitId = id.split('.');\n        maxDepth = Math.max(maxDepth, splitId.length);\n      });\n      return maxDepth;\n    };\n    table.getPreExpandedRowModel = () => table.getSortedRowModel();\n    table.getExpandedRowModel = () => {\n      if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n        table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n      }\n      if (table.options.manualExpanding || !table._getExpandedRowModel) {\n        return table.getPreExpandedRowModel();\n      }\n      return table._getExpandedRowModel();\n    };\n  },\n  createRow: (row, table) => {\n    row.toggleExpanded = expanded => {\n      table.setExpanded(old => {\n        var _expanded;\n        const exists = old === true ? true : !!(old != null && old[row.id]);\n        let oldExpanded = {};\n        if (old === true) {\n          Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n            oldExpanded[rowId] = true;\n          });\n        } else {\n          oldExpanded = old;\n        }\n        expanded = (_expanded = expanded) != null ? _expanded : !exists;\n        if (!exists && expanded) {\n          return {\n            ...oldExpanded,\n            [row.id]: true\n          };\n        }\n        if (exists && !expanded) {\n          const {\n            [row.id]: _,\n            ...rest\n          } = oldExpanded;\n          return rest;\n        }\n        return old;\n      });\n    };\n    row.getIsExpanded = () => {\n      var _table$options$getIsR;\n      const expanded = table.getState().expanded;\n      return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n    };\n    row.getCanExpand = () => {\n      var _table$options$getRow, _table$options$enable, _row$subRows;\n      return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n    };\n    row.getIsAllParentsExpanded = () => {\n      let isFullyExpanded = true;\n      let currentRow = row;\n      while (isFullyExpanded && currentRow.parentId) {\n        currentRow = table.getRow(currentRow.parentId, true);\n        isFullyExpanded = currentRow.getIsExpanded();\n      }\n      return isFullyExpanded;\n    };\n    row.getToggleExpandedHandler = () => {\n      const canExpand = row.getCanExpand();\n      return () => {\n        if (!canExpand) return;\n        row.toggleExpanded();\n      };\n    };\n  }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n  pageIndex: defaultPageIndex,\n  pageSize: defaultPageSize\n});\nconst RowPagination = {\n  getInitialState: state => {\n    return {\n      ...state,\n      pagination: {\n        ...getDefaultPaginationState(),\n        ...(state == null ? void 0 : state.pagination)\n      }\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onPaginationChange: makeStateUpdater('pagination', table)\n    };\n  },\n  createTable: table => {\n    let registered = false;\n    let queued = false;\n    table._autoResetPageIndex = () => {\n      var _ref, _table$options$autoRe;\n      if (!registered) {\n        table._queue(() => {\n          registered = true;\n        });\n        return;\n      }\n      if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n        if (queued) return;\n        queued = true;\n        table._queue(() => {\n          table.resetPageIndex();\n          queued = false;\n        });\n      }\n    };\n    table.setPagination = updater => {\n      const safeUpdater = old => {\n        let newState = functionalUpdate(updater, old);\n        return newState;\n      };\n      return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n    };\n    table.resetPagination = defaultState => {\n      var _table$initialState$p;\n      table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n    };\n    table.setPageIndex = updater => {\n      table.setPagination(old => {\n        let pageIndex = functionalUpdate(updater, old.pageIndex);\n        const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n        pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n        return {\n          ...old,\n          pageIndex\n        };\n      });\n    };\n    table.resetPageIndex = defaultState => {\n      var _table$initialState$p2, _table$initialState;\n      table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n    };\n    table.resetPageSize = defaultState => {\n      var _table$initialState$p3, _table$initialState2;\n      table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n    };\n    table.setPageSize = updater => {\n      table.setPagination(old => {\n        const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n        const topRowIndex = old.pageSize * old.pageIndex;\n        const pageIndex = Math.floor(topRowIndex / pageSize);\n        return {\n          ...old,\n          pageIndex,\n          pageSize\n        };\n      });\n    };\n    //deprecated\n    table.setPageCount = updater => table.setPagination(old => {\n      var _table$options$pageCo;\n      let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n      if (typeof newPageCount === 'number') {\n        newPageCount = Math.max(-1, newPageCount);\n      }\n      return {\n        ...old,\n        pageCount: newPageCount\n      };\n    });\n    table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n      let pageOptions = [];\n      if (pageCount && pageCount > 0) {\n        pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n      }\n      return pageOptions;\n    }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n    table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n    table.getCanNextPage = () => {\n      const {\n        pageIndex\n      } = table.getState().pagination;\n      const pageCount = table.getPageCount();\n      if (pageCount === -1) {\n        return true;\n      }\n      if (pageCount === 0) {\n        return false;\n      }\n      return pageIndex < pageCount - 1;\n    };\n    table.previousPage = () => {\n      return table.setPageIndex(old => old - 1);\n    };\n    table.nextPage = () => {\n      return table.setPageIndex(old => {\n        return old + 1;\n      });\n    };\n    table.firstPage = () => {\n      return table.setPageIndex(0);\n    };\n    table.lastPage = () => {\n      return table.setPageIndex(table.getPageCount() - 1);\n    };\n    table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n    table.getPaginationRowModel = () => {\n      if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n        table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n      }\n      if (table.options.manualPagination || !table._getPaginationRowModel) {\n        return table.getPrePaginationRowModel();\n      }\n      return table._getPaginationRowModel();\n    };\n    table.getPageCount = () => {\n      var _table$options$pageCo2;\n      return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n    };\n    table.getRowCount = () => {\n      var _table$options$rowCou;\n      return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n    };\n  }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n  top: [],\n  bottom: []\n});\nconst RowPinning = {\n  getInitialState: state => {\n    return {\n      rowPinning: getDefaultRowPinningState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onRowPinningChange: makeStateUpdater('rowPinning', table)\n    };\n  },\n  createRow: (row, table) => {\n    row.pin = (position, includeLeafRows, includeParentRows) => {\n      const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n        let {\n          id\n        } = _ref;\n        return id;\n      }) : [];\n      const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n        let {\n          id\n        } = _ref2;\n        return id;\n      }) : [];\n      const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n      table.setRowPinning(old => {\n        var _old$top3, _old$bottom3;\n        if (position === 'bottom') {\n          var _old$top, _old$bottom;\n          return {\n            top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n            bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n          };\n        }\n        if (position === 'top') {\n          var _old$top2, _old$bottom2;\n          return {\n            top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n            bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n          };\n        }\n        return {\n          top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n          bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n        };\n      });\n    };\n    row.getCanPin = () => {\n      var _ref3;\n      const {\n        enableRowPinning,\n        enablePinning\n      } = table.options;\n      if (typeof enableRowPinning === 'function') {\n        return enableRowPinning(row);\n      }\n      return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n    };\n    row.getIsPinned = () => {\n      const rowIds = [row.id];\n      const {\n        top,\n        bottom\n      } = table.getState().rowPinning;\n      const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n      const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n      return isTop ? 'top' : isBottom ? 'bottom' : false;\n    };\n    row.getPinnedIndex = () => {\n      var _ref4, _visiblePinnedRowIds$;\n      const position = row.getIsPinned();\n      if (!position) return -1;\n      const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n        let {\n          id\n        } = _ref5;\n        return id;\n      });\n      return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n    };\n  },\n  createTable: table => {\n    table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n    table.resetRowPinning = defaultState => {\n      var _table$initialState$r, _table$initialState;\n      return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n    };\n    table.getIsSomeRowsPinned = position => {\n      var _pinningState$positio;\n      const pinningState = table.getState().rowPinning;\n      if (!position) {\n        var _pinningState$top, _pinningState$bottom;\n        return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n      }\n      return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n    };\n    table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n      var _table$options$keepPi;\n      const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n      //get all rows that are pinned even if they would not be otherwise visible\n      //account for expanded parent rows, but not pagination or filtering\n      (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n        const row = table.getRow(rowId, true);\n        return row.getIsAllParentsExpanded() ? row : null;\n      }) :\n      //else get only visible rows that are pinned\n      (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n      return rows.filter(Boolean).map(d => ({\n        ...d,\n        position\n      }));\n    };\n    table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n    table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n    table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n      const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n      return allRows.filter(d => !topAndBottom.has(d.id));\n    }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n  }\n};\n\n//\n\nconst RowSelection = {\n  getInitialState: state => {\n    return {\n      rowSelection: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onRowSelectionChange: makeStateUpdater('rowSelection', table),\n      enableRowSelection: true,\n      enableMultiRowSelection: true,\n      enableSubRowSelection: true\n      // enableGroupingRowSelection: false,\n      // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n      // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n    };\n  },\n  createTable: table => {\n    table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n    table.resetRowSelection = defaultState => {\n      var _table$initialState$r;\n      return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n    };\n    table.toggleAllRowsSelected = value => {\n      table.setRowSelection(old => {\n        value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n        const rowSelection = {\n          ...old\n        };\n        const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n        // We don't use `mutateRowIsSelected` here for performance reasons.\n        // All of the rows are flat already, so it wouldn't be worth it\n        if (value) {\n          preGroupedFlatRows.forEach(row => {\n            if (!row.getCanSelect()) {\n              return;\n            }\n            rowSelection[row.id] = true;\n          });\n        } else {\n          preGroupedFlatRows.forEach(row => {\n            delete rowSelection[row.id];\n          });\n        }\n        return rowSelection;\n      });\n    };\n    table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n      const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n      const rowSelection = {\n        ...old\n      };\n      table.getRowModel().rows.forEach(row => {\n        mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n      });\n      return rowSelection;\n    });\n\n    // addRowSelectionRange: rowId => {\n    //   const {\n    //     rows,\n    //     rowsById,\n    //     options: { selectGroupingRows, selectSubRows },\n    //   } = table\n\n    //   const findSelectedRow = (rows: Row[]) => {\n    //     let found\n    //     rows.find(d => {\n    //       if (d.getIsSelected()) {\n    //         found = d\n    //         return true\n    //       }\n    //       const subFound = findSelectedRow(d.subRows || [])\n    //       if (subFound) {\n    //         found = subFound\n    //         return true\n    //       }\n    //       return false\n    //     })\n    //     return found\n    //   }\n\n    //   const firstRow = findSelectedRow(rows) || rows[0]\n    //   const lastRow = rowsById[rowId]\n\n    //   let include = false\n    //   const selectedRowIds = {}\n\n    //   const addRow = (row: Row) => {\n    //     mutateRowIsSelected(selectedRowIds, row.id, true, {\n    //       rowsById,\n    //       selectGroupingRows: selectGroupingRows!,\n    //       selectSubRows: selectSubRows!,\n    //     })\n    //   }\n\n    //   table.rows.forEach(row => {\n    //     const isFirstRow = row.id === firstRow.id\n    //     const isLastRow = row.id === lastRow.id\n\n    //     if (isFirstRow || isLastRow) {\n    //       if (!include) {\n    //         include = true\n    //       } else if (include) {\n    //         addRow(row)\n    //         include = false\n    //       }\n    //     }\n\n    //     if (include) {\n    //       addRow(row)\n    //     }\n    //   })\n\n    //   table.setRowSelection(selectedRowIds)\n    // },\n    table.getPreSelectedRowModel = () => table.getCoreRowModel();\n    table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n    table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n    table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n    ///\n\n    // getGroupingRowCanSelect: rowId => {\n    //   const row = table.getRow(rowId)\n\n    //   if (!row) {\n    //     throw new Error()\n    //   }\n\n    //   if (typeof table.options.enableGroupingRowSelection === 'function') {\n    //     return table.options.enableGroupingRowSelection(row)\n    //   }\n\n    //   return table.options.enableGroupingRowSelection ?? false\n    // },\n\n    table.getIsAllRowsSelected = () => {\n      const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n      const {\n        rowSelection\n      } = table.getState();\n      let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n      if (isAllRowsSelected) {\n        if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n          isAllRowsSelected = false;\n        }\n      }\n      return isAllRowsSelected;\n    };\n    table.getIsAllPageRowsSelected = () => {\n      const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n      const {\n        rowSelection\n      } = table.getState();\n      let isAllPageRowsSelected = !!paginationFlatRows.length;\n      if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n        isAllPageRowsSelected = false;\n      }\n      return isAllPageRowsSelected;\n    };\n    table.getIsSomeRowsSelected = () => {\n      var _table$getState$rowSe;\n      const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n      return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n    };\n    table.getIsSomePageRowsSelected = () => {\n      const paginationFlatRows = table.getPaginationRowModel().flatRows;\n      return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n    };\n    table.getToggleAllRowsSelectedHandler = () => {\n      return e => {\n        table.toggleAllRowsSelected(e.target.checked);\n      };\n    };\n    table.getToggleAllPageRowsSelectedHandler = () => {\n      return e => {\n        table.toggleAllPageRowsSelected(e.target.checked);\n      };\n    };\n  },\n  createRow: (row, table) => {\n    row.toggleSelected = (value, opts) => {\n      const isSelected = row.getIsSelected();\n      table.setRowSelection(old => {\n        var _opts$selectChildren;\n        value = typeof value !== 'undefined' ? value : !isSelected;\n        if (row.getCanSelect() && isSelected === value) {\n          return old;\n        }\n        const selectedRowIds = {\n          ...old\n        };\n        mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n        return selectedRowIds;\n      });\n    };\n    row.getIsSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isRowSelected(row, rowSelection);\n    };\n    row.getIsSomeSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isSubRowSelected(row, rowSelection) === 'some';\n    };\n    row.getIsAllSubRowsSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isSubRowSelected(row, rowSelection) === 'all';\n    };\n    row.getCanSelect = () => {\n      var _table$options$enable;\n      if (typeof table.options.enableRowSelection === 'function') {\n        return table.options.enableRowSelection(row);\n      }\n      return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n    };\n    row.getCanSelectSubRows = () => {\n      var _table$options$enable2;\n      if (typeof table.options.enableSubRowSelection === 'function') {\n        return table.options.enableSubRowSelection(row);\n      }\n      return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n    };\n    row.getCanMultiSelect = () => {\n      var _table$options$enable3;\n      if (typeof table.options.enableMultiRowSelection === 'function') {\n        return table.options.enableMultiRowSelection(row);\n      }\n      return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n    };\n    row.getToggleSelectedHandler = () => {\n      const canSelect = row.getCanSelect();\n      return e => {\n        var _target;\n        if (!canSelect) return;\n        row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n      };\n    };\n  }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n  var _row$subRows;\n  const row = table.getRow(id, true);\n\n  // const isGrouped = row.getIsGrouped()\n\n  // if ( // TODO: enforce grouping row selection rules\n  //   !isGrouped ||\n  //   (isGrouped && table.options.enableGroupingRowSelection)\n  // ) {\n  if (value) {\n    if (!row.getCanMultiSelect()) {\n      Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n    }\n    if (row.getCanSelect()) {\n      selectedRowIds[id] = true;\n    }\n  } else {\n    delete selectedRowIds[id];\n  }\n  // }\n\n  if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n    row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n  }\n};\nfunction selectRowsFn(table, rowModel) {\n  const rowSelection = table.getState().rowSelection;\n  const newSelectedFlatRows = [];\n  const newSelectedRowsById = {};\n\n  // Filters top level and nested rows\n  const recurseRows = function (rows, depth) {\n    return rows.map(row => {\n      var _row$subRows2;\n      const isSelected = isRowSelected(row, rowSelection);\n      if (isSelected) {\n        newSelectedFlatRows.push(row);\n        newSelectedRowsById[row.id] = row;\n      }\n      if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n        row = {\n          ...row,\n          subRows: recurseRows(row.subRows)\n        };\n      }\n      if (isSelected) {\n        return row;\n      }\n    }).filter(Boolean);\n  };\n  return {\n    rows: recurseRows(rowModel.rows),\n    flatRows: newSelectedFlatRows,\n    rowsById: newSelectedRowsById\n  };\n}\nfunction isRowSelected(row, selection) {\n  var _selection$row$id;\n  return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n  var _row$subRows3;\n  if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n  let allChildrenSelected = true;\n  let someSelected = false;\n  row.subRows.forEach(subRow => {\n    // Bail out early if we know both of these\n    if (someSelected && !allChildrenSelected) {\n      return;\n    }\n    if (subRow.getCanSelect()) {\n      if (isRowSelected(subRow, selection)) {\n        someSelected = true;\n      } else {\n        allChildrenSelected = false;\n      }\n    }\n\n    // Check row selection of nested subrows\n    if (subRow.subRows && subRow.subRows.length) {\n      const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n      if (subRowChildrenSelected === 'all') {\n        someSelected = true;\n      } else if (subRowChildrenSelected === 'some') {\n        someSelected = true;\n        allChildrenSelected = false;\n      } else {\n        allChildrenSelected = false;\n      }\n    }\n  });\n  return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n  return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n  return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n  const a = rowA.getValue(columnId);\n  const b = rowB.getValue(columnId);\n\n  // Can handle nullish values\n  // Use > and < because == (and ===) doesn't work with\n  // Date objects (would require calling getTime()).\n  return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n  return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n  return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n  if (typeof a === 'number') {\n    if (isNaN(a) || a === Infinity || a === -Infinity) {\n      return '';\n    }\n    return String(a);\n  }\n  if (typeof a === 'string') {\n    return a;\n  }\n  return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n  // Split on number groups, but keep the delimiter\n  // Then remove falsey split values\n  const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n  const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n  // While\n  while (a.length && b.length) {\n    const aa = a.shift();\n    const bb = b.shift();\n    const an = parseInt(aa, 10);\n    const bn = parseInt(bb, 10);\n    const combo = [an, bn].sort();\n\n    // Both are string\n    if (isNaN(combo[0])) {\n      if (aa > bb) {\n        return 1;\n      }\n      if (bb > aa) {\n        return -1;\n      }\n      continue;\n    }\n\n    // One is a string, one is a number\n    if (isNaN(combo[1])) {\n      return isNaN(an) ? -1 : 1;\n    }\n\n    // Both are numbers\n    if (an > bn) {\n      return 1;\n    }\n    if (bn > an) {\n      return -1;\n    }\n  }\n  return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n  alphanumeric,\n  alphanumericCaseSensitive,\n  text,\n  textCaseSensitive,\n  datetime,\n  basic\n};\n\n//\n\nconst RowSorting = {\n  getInitialState: state => {\n    return {\n      sorting: [],\n      ...state\n    };\n  },\n  getDefaultColumnDef: () => {\n    return {\n      sortingFn: 'auto',\n      sortUndefined: 1\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onSortingChange: makeStateUpdater('sorting', table),\n      isMultiSortEvent: e => {\n        return e.shiftKey;\n      }\n    };\n  },\n  createColumn: (column, table) => {\n    column.getAutoSortingFn = () => {\n      const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n      let isString = false;\n      for (const row of firstRows) {\n        const value = row == null ? void 0 : row.getValue(column.id);\n        if (Object.prototype.toString.call(value) === '[object Date]') {\n          return sortingFns.datetime;\n        }\n        if (typeof value === 'string') {\n          isString = true;\n          if (value.split(reSplitAlphaNumeric).length > 1) {\n            return sortingFns.alphanumeric;\n          }\n        }\n      }\n      if (isString) {\n        return sortingFns.text;\n      }\n      return sortingFns.basic;\n    };\n    column.getAutoSortDir = () => {\n      const firstRow = table.getFilteredRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'string') {\n        return 'asc';\n      }\n      return 'desc';\n    };\n    column.getSortingFn = () => {\n      var _table$options$sortin, _table$options$sortin2;\n      if (!column) {\n        throw new Error();\n      }\n      return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n    };\n    column.toggleSorting = (desc, multi) => {\n      // if (column.columns.length) {\n      //   column.columns.forEach((c, i) => {\n      //     if (c.id) {\n      //       table.toggleColumnSorting(c.id, undefined, multi || !!i)\n      //     }\n      //   })\n      //   return\n      // }\n\n      // this needs to be outside of table.setSorting to be in sync with rerender\n      const nextSortingOrder = column.getNextSortingOrder();\n      const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n      table.setSorting(old => {\n        // Find any existing sorting for this column\n        const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n        const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n        let newSorting = [];\n\n        // What should we do with this sort action?\n        let sortAction;\n        let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n        // Multi-mode\n        if (old != null && old.length && column.getCanMultiSort() && multi) {\n          if (existingSorting) {\n            sortAction = 'toggle';\n          } else {\n            sortAction = 'add';\n          }\n        } else {\n          // Normal mode\n          if (old != null && old.length && existingIndex !== old.length - 1) {\n            sortAction = 'replace';\n          } else if (existingSorting) {\n            sortAction = 'toggle';\n          } else {\n            sortAction = 'replace';\n          }\n        }\n\n        // Handle toggle states that will remove the sorting\n        if (sortAction === 'toggle') {\n          // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n          if (!hasManualValue) {\n            // Is our intention to remove?\n            if (!nextSortingOrder) {\n              sortAction = 'remove';\n            }\n          }\n        }\n        if (sortAction === 'add') {\n          var _table$options$maxMul;\n          newSorting = [...old, {\n            id: column.id,\n            desc: nextDesc\n          }];\n          // Take latest n columns\n          newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n        } else if (sortAction === 'toggle') {\n          // This flips (or sets) the\n          newSorting = old.map(d => {\n            if (d.id === column.id) {\n              return {\n                ...d,\n                desc: nextDesc\n              };\n            }\n            return d;\n          });\n        } else if (sortAction === 'remove') {\n          newSorting = old.filter(d => d.id !== column.id);\n        } else {\n          newSorting = [{\n            id: column.id,\n            desc: nextDesc\n          }];\n        }\n        return newSorting;\n      });\n    };\n    column.getFirstSortDir = () => {\n      var _ref, _column$columnDef$sor;\n      const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n      return sortDescFirst ? 'desc' : 'asc';\n    };\n    column.getNextSortingOrder = multi => {\n      var _table$options$enable, _table$options$enable2;\n      const firstSortDirection = column.getFirstSortDir();\n      const isSorted = column.getIsSorted();\n      if (!isSorted) {\n        return firstSortDirection;\n      }\n      if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n      // If enableSortRemove, enable in general\n      multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n      ) {\n        return false;\n      }\n      return isSorted === 'desc' ? 'asc' : 'desc';\n    };\n    column.getCanSort = () => {\n      var _column$columnDef$ena, _table$options$enable3;\n      return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n    };\n    column.getCanMultiSort = () => {\n      var _ref2, _column$columnDef$ena2;\n      return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n    };\n    column.getIsSorted = () => {\n      var _table$getState$sorti;\n      const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n      return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n    };\n    column.getSortIndex = () => {\n      var _table$getState$sorti2, _table$getState$sorti3;\n      return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n    };\n    column.clearSorting = () => {\n      //clear sorting for just 1 column\n      table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n    };\n    column.getToggleSortingHandler = () => {\n      const canSort = column.getCanSort();\n      return e => {\n        if (!canSort) return;\n        e.persist == null || e.persist();\n        column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n      };\n    };\n  },\n  createTable: table => {\n    table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n    table.resetSorting = defaultState => {\n      var _table$initialState$s, _table$initialState;\n      table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n    };\n    table.getPreSortedRowModel = () => table.getGroupedRowModel();\n    table.getSortedRowModel = () => {\n      if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n        table._getSortedRowModel = table.options.getSortedRowModel(table);\n      }\n      if (table.options.manualSorting || !table._getSortedRowModel) {\n        return table.getPreSortedRowModel();\n      }\n      return table._getSortedRowModel();\n    };\n  }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n  var _options$_features, _options$initialState;\n  if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n    console.info('Creating Table Instance...');\n  }\n  const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n  let table = {\n    _features\n  };\n  const defaultOptions = table._features.reduce((obj, feature) => {\n    return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n  }, {});\n  const mergeOptions = options => {\n    if (table.options.mergeOptions) {\n      return table.options.mergeOptions(defaultOptions, options);\n    }\n    return {\n      ...defaultOptions,\n      ...options\n    };\n  };\n  const coreInitialState = {};\n  let initialState = {\n    ...coreInitialState,\n    ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n  };\n  table._features.forEach(feature => {\n    var _feature$getInitialSt;\n    initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n  });\n  const queued = [];\n  let queuedTimeout = false;\n  const coreInstance = {\n    _features,\n    options: {\n      ...defaultOptions,\n      ...options\n    },\n    initialState,\n    _queue: cb => {\n      queued.push(cb);\n      if (!queuedTimeout) {\n        queuedTimeout = true;\n\n        // Schedule a microtask to run the queued callbacks after\n        // the current call stack (render, etc) has finished.\n        Promise.resolve().then(() => {\n          while (queued.length) {\n            queued.shift()();\n          }\n          queuedTimeout = false;\n        }).catch(error => setTimeout(() => {\n          throw error;\n        }));\n      }\n    },\n    reset: () => {\n      table.setState(table.initialState);\n    },\n    setOptions: updater => {\n      const newOptions = functionalUpdate(updater, table.options);\n      table.options = mergeOptions(newOptions);\n    },\n    getState: () => {\n      return table.options.state;\n    },\n    setState: updater => {\n      table.options.onStateChange == null || table.options.onStateChange(updater);\n    },\n    _getRowId: (row, index, parent) => {\n      var _table$options$getRow;\n      return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n    },\n    getCoreRowModel: () => {\n      if (!table._getCoreRowModel) {\n        table._getCoreRowModel = table.options.getCoreRowModel(table);\n      }\n      return table._getCoreRowModel();\n    },\n    // The final calls start at the bottom of the model,\n    // expanded rows, which then work their way up\n\n    getRowModel: () => {\n      return table.getPaginationRowModel();\n    },\n    //in next version, we should just pass in the row model as the optional 2nd arg\n    getRow: (id, searchAll) => {\n      let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n      if (!row) {\n        row = table.getCoreRowModel().rowsById[id];\n        if (!row) {\n          if (process.env.NODE_ENV !== 'production') {\n            throw new Error(`getRow could not find row with ID: ${id}`);\n          }\n          throw new Error();\n        }\n      }\n      return row;\n    },\n    _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n      var _defaultColumn;\n      defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n      return {\n        header: props => {\n          const resolvedColumnDef = props.header.column.columnDef;\n          if (resolvedColumnDef.accessorKey) {\n            return resolvedColumnDef.accessorKey;\n          }\n          if (resolvedColumnDef.accessorFn) {\n            return resolvedColumnDef.id;\n          }\n          return null;\n        },\n        // footer: props => props.header.column.id,\n        cell: props => {\n          var _props$renderValue$to, _props$renderValue;\n          return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n        },\n        ...table._features.reduce((obj, feature) => {\n          return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n        }, {}),\n        ...defaultColumn\n      };\n    }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n    _getColumnDefs: () => table.options.columns,\n    getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n      const recurseColumns = function (columnDefs, parent, depth) {\n        if (depth === void 0) {\n          depth = 0;\n        }\n        return columnDefs.map(columnDef => {\n          const column = createColumn(table, columnDef, depth, parent);\n          const groupingColumnDef = columnDef;\n          column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n          return column;\n        });\n      };\n      return recurseColumns(columnDefs);\n    }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n    getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n      return allColumns.flatMap(column => {\n        return column.getFlatColumns();\n      });\n    }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n    _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n      return flatColumns.reduce((acc, column) => {\n        acc[column.id] = column;\n        return acc;\n      }, {});\n    }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n    getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n      let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n      return orderColumns(leafColumns);\n    }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n    getColumn: columnId => {\n      const column = table._getAllFlatColumnsById()[columnId];\n      if (process.env.NODE_ENV !== 'production' && !column) {\n        console.error(`[Table] Column with id '${columnId}' does not exist.`);\n      }\n      return column;\n    }\n  };\n  Object.assign(table, coreInstance);\n  for (let index = 0; index < table._features.length; index++) {\n    const feature = table._features[index];\n    feature == null || feature.createTable == null || feature.createTable(table);\n  }\n  return table;\n}\n\nfunction getCoreRowModel() {\n  return table => memo(() => [table.options.data], data => {\n    const rowModel = {\n      rows: [],\n      flatRows: [],\n      rowsById: {}\n    };\n    const accessRows = function (originalRows, depth, parentRow) {\n      if (depth === void 0) {\n        depth = 0;\n      }\n      const rows = [];\n      for (let i = 0; i < originalRows.length; i++) {\n        // This could be an expensive check at scale, so we should move it somewhere else, but where?\n        // if (!id) {\n        //   if (process.env.NODE_ENV !== 'production') {\n        //     throw new Error(`getRowId expected an ID, but got ${id}`)\n        //   }\n        // }\n\n        // Make the row\n        const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n        // Keep track of every row in a flat array\n        rowModel.flatRows.push(row);\n        // Also keep track of every row by its ID\n        rowModel.rowsById[row.id] = row;\n        // Push table row into parent\n        rows.push(row);\n\n        // Get the original subrows\n        if (table.options.getSubRows) {\n          var _row$originalSubRows;\n          row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n          // Then recursively access them\n          if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n            row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n          }\n        }\n      }\n      return rows;\n    };\n    rowModel.rows = accessRows(data);\n    return rowModel;\n  }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n  return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n    if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n      return rowModel;\n    }\n    if (!paginateExpandedRows) {\n      // Only expand rows at this point if they are being paginated\n      return rowModel;\n    }\n    return expandRows(rowModel);\n  }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n  const expandedRows = [];\n  const handleRow = row => {\n    var _row$subRows;\n    expandedRows.push(row);\n    if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n      row.subRows.forEach(handleRow);\n    }\n  };\n  rowModel.rows.forEach(handleRow);\n  return {\n    rows: expandedRows,\n    flatRows: rowModel.flatRows,\n    rowsById: rowModel.rowsById\n  };\n}\n\nfunction getFacetedMinMaxValues() {\n  return (table, columnId) => memo(() => {\n    var _table$getColumn;\n    return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n  }, facetedRowModel => {\n    if (!facetedRowModel) return undefined;\n    const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n      var _flatRow$getUniqueVal;\n      return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n    }).map(Number).filter(value => !Number.isNaN(value));\n    if (!uniqueValues.length) return;\n    let facetedMinValue = uniqueValues[0];\n    let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n    for (const value of uniqueValues) {\n      if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n    }\n    return [facetedMinValue, facetedMaxValue];\n  }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n  if (table.options.filterFromLeafRows) {\n    return filterRowModelFromLeafs(rows, filterRowImpl, table);\n  }\n  return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n  var _table$options$maxLea;\n  const newFilteredFlatRows = [];\n  const newFilteredRowsById = {};\n  const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n  const recurseFilterRows = function (rowsToFilter, depth) {\n    if (depth === void 0) {\n      depth = 0;\n    }\n    const rows = [];\n\n    // Filter from children up first\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      var _row$subRows;\n      let row = rowsToFilter[i];\n      const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n      newRow.columnFilters = row.columnFilters;\n      if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n        newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n        row = newRow;\n        if (filterRow(row) && !newRow.subRows.length) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n          continue;\n        }\n        if (filterRow(row) || newRow.subRows.length) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n          continue;\n        }\n      } else {\n        row = newRow;\n        if (filterRow(row)) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n        }\n      }\n    }\n    return rows;\n  };\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById\n  };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n  var _table$options$maxLea2;\n  const newFilteredFlatRows = [];\n  const newFilteredRowsById = {};\n  const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n  // Filters top level and nested rows\n  const recurseFilterRows = function (rowsToFilter, depth) {\n    if (depth === void 0) {\n      depth = 0;\n    }\n    // Filter from parents downward first\n\n    const rows = [];\n\n    // Apply the filter to any subRows\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      let row = rowsToFilter[i];\n      const pass = filterRow(row);\n      if (pass) {\n        var _row$subRows2;\n        if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n          const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n          newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n          row = newRow;\n        }\n        rows.push(row);\n        newFilteredFlatRows.push(row);\n        newFilteredRowsById[row.id] = row;\n      }\n    }\n    return rows;\n  };\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById\n  };\n}\n\nfunction getFacetedRowModel() {\n  return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n    if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n      return preRowModel;\n    }\n    const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n    const filterRowsImpl = row => {\n      // Horizontally filter rows through each column\n      for (let i = 0; i < filterableIds.length; i++) {\n        if (row.columnFilters[filterableIds[i]] === false) {\n          return false;\n        }\n      }\n      return true;\n    };\n    return filterRows(preRowModel.rows, filterRowsImpl, table);\n  }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n  return (table, columnId) => memo(() => {\n    var _table$getColumn;\n    return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n  }, facetedRowModel => {\n    if (!facetedRowModel) return new Map();\n    let facetedUniqueValues = new Map();\n    for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n      const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n      for (let j = 0; j < values.length; j++) {\n        const value = values[j];\n        if (facetedUniqueValues.has(value)) {\n          var _facetedUniqueValues$;\n          facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n        } else {\n          facetedUniqueValues.set(value, 1);\n        }\n      }\n    }\n    return facetedUniqueValues;\n  }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n  return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n    if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n      for (let i = 0; i < rowModel.flatRows.length; i++) {\n        rowModel.flatRows[i].columnFilters = {};\n        rowModel.flatRows[i].columnFiltersMeta = {};\n      }\n      return rowModel;\n    }\n    const resolvedColumnFilters = [];\n    const resolvedGlobalFilters = [];\n    (columnFilters != null ? columnFilters : []).forEach(d => {\n      var _filterFn$resolveFilt;\n      const column = table.getColumn(d.id);\n      if (!column) {\n        return;\n      }\n      const filterFn = column.getFilterFn();\n      if (!filterFn) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n        }\n        return;\n      }\n      resolvedColumnFilters.push({\n        id: d.id,\n        filterFn,\n        resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n      });\n    });\n    const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n    const globalFilterFn = table.getGlobalFilterFn();\n    const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n    if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n      filterableIds.push('__global__');\n      globallyFilterableColumns.forEach(column => {\n        var _globalFilterFn$resol;\n        resolvedGlobalFilters.push({\n          id: column.id,\n          filterFn: globalFilterFn,\n          resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n        });\n      });\n    }\n    let currentColumnFilter;\n    let currentGlobalFilter;\n\n    // Flag the prefiltered row model with each filter state\n    for (let j = 0; j < rowModel.flatRows.length; j++) {\n      const row = rowModel.flatRows[j];\n      row.columnFilters = {};\n      if (resolvedColumnFilters.length) {\n        for (let i = 0; i < resolvedColumnFilters.length; i++) {\n          currentColumnFilter = resolvedColumnFilters[i];\n          const id = currentColumnFilter.id;\n\n          // Tag the row with the column filter state\n          row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n            row.columnFiltersMeta[id] = filterMeta;\n          });\n        }\n      }\n      if (resolvedGlobalFilters.length) {\n        for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n          currentGlobalFilter = resolvedGlobalFilters[i];\n          const id = currentGlobalFilter.id;\n          // Tag the row with the first truthy global filter state\n          if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n            row.columnFiltersMeta[id] = filterMeta;\n          })) {\n            row.columnFilters.__global__ = true;\n            break;\n          }\n        }\n        if (row.columnFilters.__global__ !== true) {\n          row.columnFilters.__global__ = false;\n        }\n      }\n    }\n    const filterRowsImpl = row => {\n      // Horizontally filter rows through each column\n      for (let i = 0; i < filterableIds.length; i++) {\n        if (row.columnFilters[filterableIds[i]] === false) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    // Filter final rows using all of the active filters\n    return filterRows(rowModel.rows, filterRowsImpl, table);\n  }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n  return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n    if (!rowModel.rows.length || !grouping.length) {\n      rowModel.rows.forEach(row => {\n        row.depth = 0;\n        row.parentId = undefined;\n      });\n      return rowModel;\n    }\n\n    // Filter the grouping list down to columns that exist\n    const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n    const groupedFlatRows = [];\n    const groupedRowsById = {};\n    // const onlyGroupedFlatRows: Row[] = [];\n    // const onlyGroupedRowsById: Record<RowId, Row> = {};\n    // const nonGroupedFlatRows: Row[] = [];\n    // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n    // Recursively group the data\n    const groupUpRecursively = function (rows, depth, parentId) {\n      if (depth === void 0) {\n        depth = 0;\n      }\n      // Grouping depth has been been met\n      // Stop grouping and simply rewrite thd depth and row relationships\n      if (depth >= existingGrouping.length) {\n        return rows.map(row => {\n          row.depth = depth;\n          groupedFlatRows.push(row);\n          groupedRowsById[row.id] = row;\n          if (row.subRows) {\n            row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n          }\n          return row;\n        });\n      }\n      const columnId = existingGrouping[depth];\n\n      // Group the rows together for this level\n      const rowGroupsMap = groupBy(rows, columnId);\n\n      // Perform aggregations for each group\n      const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n        let [groupingValue, groupedRows] = _ref;\n        let id = `${columnId}:${groupingValue}`;\n        id = parentId ? `${parentId}>${id}` : id;\n\n        // First, Recurse to group sub rows before aggregation\n        const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n        subRows.forEach(subRow => {\n          subRow.parentId = id;\n        });\n\n        // Flatten the leaf rows of the rows in this group\n        const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n        const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n        Object.assign(row, {\n          groupingColumnId: columnId,\n          groupingValue,\n          subRows,\n          leafRows,\n          getValue: columnId => {\n            // Don't aggregate columns that are in the grouping\n            if (existingGrouping.includes(columnId)) {\n              if (row._valuesCache.hasOwnProperty(columnId)) {\n                return row._valuesCache[columnId];\n              }\n              if (groupedRows[0]) {\n                var _groupedRows$0$getVal;\n                row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n              }\n              return row._valuesCache[columnId];\n            }\n            if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n              return row._groupingValuesCache[columnId];\n            }\n\n            // Aggregate the values\n            const column = table.getColumn(columnId);\n            const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n            if (aggregateFn) {\n              row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n              return row._groupingValuesCache[columnId];\n            }\n          }\n        });\n        subRows.forEach(subRow => {\n          groupedFlatRows.push(subRow);\n          groupedRowsById[subRow.id] = subRow;\n          // if (subRow.getIsGrouped?.()) {\n          //   onlyGroupedFlatRows.push(subRow);\n          //   onlyGroupedRowsById[subRow.id] = subRow;\n          // } else {\n          //   nonGroupedFlatRows.push(subRow);\n          //   nonGroupedRowsById[subRow.id] = subRow;\n          // }\n        });\n        return row;\n      });\n      return aggregatedGroupedRows;\n    };\n    const groupedRows = groupUpRecursively(rowModel.rows, 0);\n    groupedRows.forEach(subRow => {\n      groupedFlatRows.push(subRow);\n      groupedRowsById[subRow.id] = subRow;\n      // if (subRow.getIsGrouped?.()) {\n      //   onlyGroupedFlatRows.push(subRow);\n      //   onlyGroupedRowsById[subRow.id] = subRow;\n      // } else {\n      //   nonGroupedFlatRows.push(subRow);\n      //   nonGroupedRowsById[subRow.id] = subRow;\n      // }\n    });\n    return {\n      rows: groupedRows,\n      flatRows: groupedFlatRows,\n      rowsById: groupedRowsById\n    };\n  }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n    table._queue(() => {\n      table._autoResetExpanded();\n      table._autoResetPageIndex();\n    });\n  }));\n}\nfunction groupBy(rows, columnId) {\n  const groupMap = new Map();\n  return rows.reduce((map, row) => {\n    const resKey = `${row.getGroupingValue(columnId)}`;\n    const previous = map.get(resKey);\n    if (!previous) {\n      map.set(resKey, [row]);\n    } else {\n      previous.push(row);\n    }\n    return map;\n  }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n  return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n    if (!rowModel.rows.length) {\n      return rowModel;\n    }\n    const {\n      pageSize,\n      pageIndex\n    } = pagination;\n    let {\n      rows,\n      flatRows,\n      rowsById\n    } = rowModel;\n    const pageStart = pageSize * pageIndex;\n    const pageEnd = pageStart + pageSize;\n    rows = rows.slice(pageStart, pageEnd);\n    let paginatedRowModel;\n    if (!table.options.paginateExpandedRows) {\n      paginatedRowModel = expandRows({\n        rows,\n        flatRows,\n        rowsById\n      });\n    } else {\n      paginatedRowModel = {\n        rows,\n        flatRows,\n        rowsById\n      };\n    }\n    paginatedRowModel.flatRows = [];\n    const handleRow = row => {\n      paginatedRowModel.flatRows.push(row);\n      if (row.subRows.length) {\n        row.subRows.forEach(handleRow);\n      }\n    };\n    paginatedRowModel.rows.forEach(handleRow);\n    return paginatedRowModel;\n  }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n  return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n    if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n      return rowModel;\n    }\n    const sortingState = table.getState().sorting;\n    const sortedFlatRows = [];\n\n    // Filter out sortings that correspond to non existing columns\n    const availableSorting = sortingState.filter(sort => {\n      var _table$getColumn;\n      return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n    });\n    const columnInfoById = {};\n    availableSorting.forEach(sortEntry => {\n      const column = table.getColumn(sortEntry.id);\n      if (!column) return;\n      columnInfoById[sortEntry.id] = {\n        sortUndefined: column.columnDef.sortUndefined,\n        invertSorting: column.columnDef.invertSorting,\n        sortingFn: column.getSortingFn()\n      };\n    });\n    const sortData = rows => {\n      // This will also perform a stable sorting using the row index\n      // if needed.\n      const sortedData = rows.map(row => ({\n        ...row\n      }));\n      sortedData.sort((rowA, rowB) => {\n        for (let i = 0; i < availableSorting.length; i += 1) {\n          var _sortEntry$desc;\n          const sortEntry = availableSorting[i];\n          const columnInfo = columnInfoById[sortEntry.id];\n          const sortUndefined = columnInfo.sortUndefined;\n          const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n          let sortInt = 0;\n\n          // All sorting ints should always return in ascending order\n          if (sortUndefined) {\n            const aValue = rowA.getValue(sortEntry.id);\n            const bValue = rowB.getValue(sortEntry.id);\n            const aUndefined = aValue === undefined;\n            const bUndefined = bValue === undefined;\n            if (aUndefined || bUndefined) {\n              if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n              if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n              sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n            }\n          }\n          if (sortInt === 0) {\n            sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n          }\n\n          // If sorting is non-zero, take care of desc and inversion\n          if (sortInt !== 0) {\n            if (isDesc) {\n              sortInt *= -1;\n            }\n            if (columnInfo.invertSorting) {\n              sortInt *= -1;\n            }\n            return sortInt;\n          }\n        }\n        return rowA.index - rowB.index;\n      });\n\n      // If there are sub-rows, sort them\n      sortedData.forEach(row => {\n        var _row$subRows;\n        sortedFlatRows.push(row);\n        if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n          row.subRows = sortData(row.subRows);\n        }\n      });\n      return sortedData;\n    };\n    return {\n      rows: sortData(rowModel.rows),\n      flatRows: sortedFlatRows,\n      rowsById: rowModel.rowsById\n    };\n  }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n   * react-table\n   *\n   * Copyright (c) TanStack\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE.md file in the root directory of this source tree.\n   *\n   * @license MIT\n   */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n  return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n  return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n  return typeof component === 'function' && (() => {\n    const proto = Object.getPrototypeOf(component);\n    return proto.prototype && proto.prototype.isReactComponent;\n  })();\n}\nfunction isExoticComponent(component) {\n  return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n  // Compose in the generic options to the user options\n  const resolvedOptions = {\n    state: {},\n    // Dummy state\n    onStateChange: () => {},\n    // noop\n    renderFallbackValue: null,\n    ...options\n  };\n\n  // Create a new table and store it in state\n  const [tableRef] = React.useState(() => ({\n    current: createTable(resolvedOptions)\n  }));\n\n  // By default, manage table state here using the table's initial state\n  const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n  // Compose the default state above with any user state. This will allow the user\n  // to only control a subset of the state if desired.\n  tableRef.current.setOptions(prev => ({\n    ...prev,\n    ...options,\n    state: {\n      ...state,\n      ...options.state\n    },\n    // Similarly, we'll maintain both our internal state and any user-provided\n    // state.\n    onStateChange: updater => {\n      setState(updater);\n      options.onStateChange == null || options.onStateChange(updater);\n    }\n  }));\n  return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","export const EmptyTableIcon = () => (\n  <svg width=\"226\" height=\"140\" viewBox=\"0 0 226 140\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<mask id=\"mask0_27318_12913\" style={{maskType: 'alpha'}} maskUnits=\"userSpaceOnUse\" x=\"2\" y=\"104\" width=\"224\" height=\"26\">\n<rect x=\"2\" y=\"104\" width=\"224\" height=\"26\" fill=\"white\"/>\n</mask>\n<g mask=\"url(#mask0_27318_12913)\">\n<ellipse cx=\"114\" cy=\"125.388\" rx=\"112\" ry=\"21.3877\" fill=\"url(#paint0_linear_27318_12913)\"/>\n</g>\n<ellipse cx=\"180.5\" cy=\"88\" rx=\"9.5\" ry=\"13\" fill=\"url(#paint1_linear_27318_12913)\"/>\n<path d=\"M180.174 115.619V76.75L181.313 115.619H180.174Z\" fill=\"#D5DDF4\"/>\n<path d=\"M180.335 98.452L174.316 92.9456L180.335 96.6705V98.452Z\" fill=\"#D5DDF4\"/>\n<path d=\"M183.263 87.1152L180.335 90.3543V91.488L183.263 87.1152Z\" fill=\"#D5DDF4\"/>\n<path d=\"M180.361 114.658L151.396 115.619H180.361V114.658Z\" fill=\"url(#paint2_linear_27318_12913)\"/>\n<ellipse cx=\"57.0939\" cy=\"96.3957\" rx=\"5.5\" ry=\"7\" transform=\"rotate(-4.32208 57.0939 96.3957)\" fill=\"url(#paint3_linear_27318_12913)\"/>\n<path d=\"M57.9574 110.568L56.5527 91.9824L56.609 110.429L57.9574 110.568Z\" fill=\"#D5DDF4\"/>\n<path d=\"M57.2532 102.29L59.9123 99.4604L57.1893 101.444L57.2532 102.29Z\" fill=\"#D5DDF4\"/>\n<path d=\"M55.4569 97.0143L56.9627 98.4465L57.0034 98.9846L55.4569 97.0143Z\" fill=\"#D5DDF4\"/>\n<path d=\"M57.7578 109.621L25.897 112.752L57.8303 110.58L57.7578 109.621Z\" fill=\"url(#paint4_linear_27318_12913)\"/>\n<g filter=\"url(#filter0_f_27318_12913)\">\n<ellipse cx=\"114\" cy=\"105\" rx=\"32\" ry=\"3\" fill=\"#D9E3FF\"/>\n</g>\n<path d=\"M100.076 41.8107C99.8672 41.319 99.9595 40.8175 100.317 40.4996C101.071 39.8294 102.543 40.2799 102.984 41.3161L108.731 54.7977C109.054 55.5548 108.657 56.2807 107.846 56.418C107.036 56.5551 106.119 56.053 105.798 55.2965L100.076 41.8107Z\" fill=\"#90ACF8\"/>\n<path d=\"M100.076 41.8107C99.8672 41.319 99.9595 40.8175 100.317 40.4996C101.071 39.8294 102.543 40.2799 102.984 41.3161L108.731 54.7977C109.054 55.5548 108.657 56.2807 107.846 56.418C107.036 56.5551 106.119 56.053 105.798 55.2965L100.076 41.8107Z\" fill=\"#90ACF8\" fillOpacity=\"0.2\"/>\n<path d=\"M128.076 41.8107C127.867 41.319 127.96 40.8175 128.317 40.4996C129.071 39.8294 130.543 40.2799 130.984 41.3161L136.731 54.7977C137.054 55.5548 136.657 56.2807 135.846 56.418C135.036 56.5551 134.119 56.053 133.798 55.2965L128.076 41.8107Z\" fill=\"#90ACF8\"/>\n<path d=\"M128.076 41.8107C127.867 41.319 127.96 40.8175 128.317 40.4996C129.071 39.8294 130.543 40.2799 130.984 41.3161L136.731 54.7977C137.054 55.5548 136.657 56.2807 135.846 56.418C135.036 56.5551 134.119 56.053 133.798 55.2965L128.076 41.8107Z\" fill=\"#90ACF8\" fillOpacity=\"0.2\"/>\n<rect x=\"83\" y=\"49.0039\" width=\"62\" height=\"56\" rx=\"6\" fill=\"#A1BCFF\"/>\n<path d=\"M83 55.0039C83 51.6902 85.6863 49.0039 89 49.0039H139C142.314 49.0039 145 51.6902 145 55.0039V99.0039C145 102.318 142.314 105.004 139 105.004H89C85.6863 105.004 83 102.318 83 99.0039V55.0039Z\" fill=\"#6590F8\" fillOpacity=\"0.2\"/>\n<rect x=\"85\" y=\"51.0039\" width=\"58\" height=\"52\" rx=\"6\" fill=\"white\"/>\n<mask id=\"mask1_27318_12913\" style={{maskType: 'alpha'}} maskUnits=\"userSpaceOnUse\" x=\"85\" y=\"51\" width=\"58\" height=\"53\">\n<rect x=\"85\" y=\"51.0039\" width=\"58\" height=\"52\" rx=\"6\" fill=\"white\"/>\n</mask>\n<g mask=\"url(#mask1_27318_12913)\">\n<g filter=\"url(#filter4_f_27318_12913)\">\n<circle cx=\"94.5\" cy=\"50.5039\" r=\"22.5\" fill=\"#B9FAFF\"/>\n</g>\n</g>\n<path d=\"M99.2387 41.3748C99.5599 40.6177 100.478 40.1151 101.289 40.2524C102.1 40.3896 102.496 41.1146 102.175 41.8717L96.5177 55.2053C96.1965 55.9624 95.2787 56.4649 94.4678 56.3277C93.6569 56.1905 93.2599 55.4655 93.5811 54.7084L99.2387 41.3748Z\" fill=\"#90ACF8\"/>\n<path d=\"M99.2387 41.3748C99.5599 40.6177 100.478 40.1151 101.289 40.2524C102.1 40.3896 102.496 41.1146 102.175 41.8717L96.5177 55.2053C96.1965 55.9624 95.2787 56.4649 94.4678 56.3277C93.6569 56.1905 93.2599 55.4655 93.5811 54.7084L99.2387 41.3748Z\" fill=\"#90ACF8\" fillOpacity=\"0.2\"/>\n<path d=\"M127.239 41.3748C127.56 40.6177 128.478 40.1151 129.289 40.2524C130.1 40.3896 130.496 41.1146 130.175 41.8717L124.518 55.2053C124.196 55.9624 123.279 56.4649 122.468 56.3277C121.657 56.1905 121.26 55.4655 121.581 54.7084L127.239 41.3748Z\" fill=\"#90ACF8\"/>\n<path d=\"M127.239 41.3748C127.56 40.6177 128.478 40.1151 129.289 40.2524C130.1 40.3896 130.496 41.1146 130.175 41.8717L124.518 55.2053C124.196 55.9624 123.279 56.4649 122.468 56.3277C121.657 56.1905 121.26 55.4655 121.581 54.7084L127.239 41.3748Z\" fill=\"#90ACF8\" fillOpacity=\"0.2\"/>\n<path d=\"M93 72C95.5455 72 122.061 72 135 72\" stroke=\"#CEDCF6\" strokeWidth=\"0.5\"/>\n<path d=\"M93 78C95.5455 78 122.061 78 135 78\" stroke=\"#CEDCF6\" strokeWidth=\"0.5\"/>\n<path d=\"M93 84C95.5455 84 122.061 84 135 84\" stroke=\"#CEDCF6\" strokeWidth=\"0.5\"/>\n<path d=\"M93 90C95.5455 90 122.061 90 135 90\" stroke=\"#CEDCF6\" strokeWidth=\"0.5\"/>\n<path d=\"M93 65C93 63.8954 93.8954 63 95 63H133C134.105 63 135 63.8954 135 65V67H93V65Z\" fill=\"#90ACF8\"/>\n<path d=\"M81.1403 34.5888C79.9314 33.9913 77.705 34.2123 77.705 34.2123C77.705 34.2123 78.8677 36.5458 80.2271 37.3255C81.4631 38.0345 83.8153 38.0059 83.8153 38.0059C83.8153 38.0059 82.6624 35.3412 81.1403 34.5888Z\" fill=\"url(#paint5_linear_27318_12913)\"/>\n<path d=\"M87.2808 35.0187C87.3779 34.2182 86.8061 33.009 86.8061 33.009C86.8061 33.009 85.7135 34.1317 85.5431 35.0534C85.3882 35.8916 85.876 37.2102 85.876 37.2102C85.876 37.2102 87.1586 36.0266 87.2808 35.0187Z\" fill=\"url(#paint6_linear_27318_12913)\"/>\n<path d=\"M153.928 47.3664C156.181 46.1202 158.244 42.3936 158.244 42.3936C158.244 42.3936 153.297 41.6869 150.592 42.9715C148.133 44.1394 145.63 47.8547 145.63 47.8547C145.63 47.8547 151.09 48.9356 153.928 47.3664Z\" fill=\"url(#paint7_linear_27318_12913)\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M153.637 76.3923L155.699 72.8501L157.686 76.4173L153.637 76.3923ZM153.367 88.8968L153.492 76.9325L157.821 76.9591L157.696 88.9234L153.367 88.8968ZM157.667 91.6253C157.661 92.2343 157.202 92.7251 156.642 92.7217L154.342 92.7084C153.782 92.7049 153.333 92.2083 153.339 91.5994L153.362 89.4388L157.691 89.4654L157.667 91.6253Z\" fill=\"url(#paint8_linear_27318_12913)\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M153.637 76.3923L155.699 72.8501L157.686 76.4173L153.637 76.3923ZM153.367 88.8968L153.492 76.9325L157.821 76.9591L157.696 88.9234L153.367 88.8968ZM157.667 91.6253C157.661 92.2343 157.202 92.7251 156.642 92.7217L154.342 92.7084C153.782 92.7049 153.333 92.2083 153.339 91.5994L153.362 89.4388L157.691 89.4654L157.667 91.6253Z\" fill=\"url(#paint9_linear_27318_12913)\" fillOpacity=\"0.2\"/>\n<defs>\n<filter id=\"filter0_f_27318_12913\" x=\"78\" y=\"98\" width=\"72\" height=\"14\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n<feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feGaussianBlur stdDeviation=\"2\" result=\"effect1_foregroundBlur_27318_12913\"/>\n</filter>\n<filter id=\"filter4_f_27318_12913\" x=\"8\" y=\"-35.9961\" width=\"173\" height=\"173\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n<feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feGaussianBlur stdDeviation=\"32\" result=\"effect1_foregroundBlur_27318_12913\"/>\n</filter>\n<linearGradient id=\"paint0_linear_27318_12913\" x1=\"114\" y1=\"104\" x2=\"114\" y2=\"125.628\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#E6EEFF\"/>\n<stop offset=\"1\" stopColor=\"white\" stopOpacity=\"0\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_27318_12913\" x1=\"180.5\" y1=\"75\" x2=\"180.5\" y2=\"101\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#E7EFFF\"/>\n<stop offset=\"1\" stopColor=\"#F3F7FD\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_27318_12913\" x1=\"180.361\" y1=\"115.139\" x2=\"151.396\" y2=\"115.139\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#D5DDF4\"/>\n<stop offset=\"1\" stopColor=\"#EDF2FF\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_27318_12913\" x1=\"57.0939\" y1=\"89.3957\" x2=\"57.0939\" y2=\"103.396\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#E7EFFF\"/>\n<stop offset=\"1\" stopColor=\"#F3F7FD\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_27318_12913\" x1=\"57.5801\" y1=\"109.876\" x2=\"25.8608\" y2=\"112.273\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#D5DDF4\"/>\n<stop offset=\"1\" stopColor=\"#EDF2FF\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_27318_12913\" x1=\"80.3215\" y1=\"37.4237\" x2=\"81.2554\" y2=\"34.6\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#DBE6FF\"/>\n<stop offset=\"1\" stopColor=\"#F1F5FF\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_27318_12913\" x1=\"85.5063\" y1=\"35.1263\" x2=\"87.2977\" y2=\"35.0905\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#DBE6FF\"/>\n<stop offset=\"1\" stopColor=\"#F1F5FF\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_27318_12913\" x1=\"150.335\" y1=\"43.013\" x2=\"153.754\" y2=\"47.5582\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#DBE6FF\"/>\n<stop offset=\"1\" stopColor=\"#F1F5FF\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_27318_12913\" x1=\"151.15\" y1=\"98.5161\" x2=\"150.2\" y2=\"78.1749\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#6893F9\"/>\n<stop offset=\"1\" stopColor=\"#92B3FD\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_27318_12913\" x1=\"151.15\" y1=\"98.5161\" x2=\"150.2\" y2=\"78.1749\" gradientUnits=\"userSpaceOnUse\">\n<stop stopColor=\"#6893F9\"/>\n<stop offset=\"1\" stopColor=\"#92B3FD\"/>\n</linearGradient>\n</defs>\n</svg>\n);\n","import { cn } from '../../../lib/utils';\nimport {\n  useReactTable,\n  getCoreRowModel,\n  flexRender,\n  type ColumnDef,\n  type TableOptions,\n createColumnHelper,\n} from '@tanstack/react-table';\nimport { EmptyTableIcon } from '../../icons/empty-table-icon';\n\nexport {\n  createColumnHelper,\n}\n\nexport interface DataTableProps<TData> {\n  columns: ColumnDef<TData, any>[];\n  data: TData[];\n  emptyText?: string;\n  emptyIcon?: React.ReactNode;\n  className?: string;\n  tableOptions?: Omit<\n    Partial<TableOptions<TData>>,\n    'columns' | 'data' | 'getCoreRowModel'\n  >;\n}\n\nexport function DataTable<TData>({\n  columns,\n  data,\n  emptyText = '暂无数据',\n  emptyIcon,\n  className,\n  tableOptions,\n}: DataTableProps<TData>) {\n  const table = useReactTable({\n    columns,\n    data,\n    getCoreRowModel: getCoreRowModel(),\n    ...tableOptions,\n  });\n\n  const headerGroups = table.getHeaderGroups();\n  const rows = table.getRowModel().rows;\n  const isEmpty = data.length === 0;\n\n  return (\n    <div\n      className={cn(\n        'rounded-[10px] border border-[#e0e0e0] overflow-hidden bg-white',\n        className,\n      )}\n    >\n      <table className=\"w-full h-full border-collapse\">\n        <thead>\n          {headerGroups.map((headerGroup) => (\n            <tr key={headerGroup.id}>\n              {headerGroup.headers.map((header, index) => (\n                <th\n                  key={header.id}\n                  className={cn(\n                    'bg-[#f5f7fa] h-[34px] px-[10px] text-left text-[14px] font-normal text-[#030303] border-b border-[#e0e0e0] align-middle whitespace-nowrap',\n                    index !== 0 && 'border-l border-[#e0e0e0]',\n                  )}\n                  style={{\n                    width:\n                      header.getSize() !== 150 ? header.getSize() : undefined,\n                  }}\n                >\n                  {flexRender(\n                    header.column.columnDef.header,\n                    header.getContext(),\n                  )}\n                </th>\n              ))}\n            </tr>\n          ))}\n        </thead>\n        <tbody>\n          {isEmpty ? (\n            <tr>\n              <td\n                colSpan={columns.length}\n                className=\"py-[60px] text-center align-middle\"\n              >\n                <div className=\"flex flex-col items-center gap-[12px]\">\n                  {emptyIcon || <EmptyTableIcon />}\n                  <span className=\"text-[14px] text-[#999]\">{emptyText}</span>\n                </div>\n              </td>\n            </tr>\n          ) : (\n            rows.map((row) => (\n              <tr key={row.id}>\n                {row.getVisibleCells().map((cell, index) => (\n                  <td\n                    key={cell.id}\n                    className={cn(\n                      'p-[10px] text-[14px] text-[#030303]',\n                      index !== 0 && 'border-l border-[#e0e0e0]',\n                      'border-b border-[#e0e0e0]',\n                    )}\n                  >\n                    {flexRender(cell.column.columnDef.cell, cell.getContext())}\n                  </td>\n                ))}\n              </tr>\n            ))\n          )}\n        </tbody>\n      </table>\n    </div>\n  );\n}\n","import { useState, useCallback } from 'react';\nimport type { triggerType } from '@baishuyun/types';\nimport { cn } from '../../../lib/utils';\nimport { DateInput } from '../date-picker';\nimport {\n  Select,\n  SelectTrigger,\n  SelectValue,\n  SelectContent,\n  SelectItem,\n} from '../../ui/select';\n\nimport { usePortalContainer } from '../../../hooks/use-portal-container';\n\nconst TRIGGER_TYPE_OPTIONS: Array<{ value: triggerType; label: string }> = [\n  { value: 'universal', label: '通用型' },\n  { value: 'form_field', label: '表单字段触发' },\n  { value: 'form_action', label: '表单动作触发' },\n  { value: 'form_flow_node', label: '表单流程节点触发' },\n  { value: 'scheduler', label: '计划任务触发' },\n];\n\nexport interface ExecLogFilterValue {\n  startDate?: Date;\n  endDate?: Date;\n  execUserId?: string;\n  triggerType?: triggerType;\n  execResult?: string;\n}\n\nexport interface ExecLogFilterProps {\n  value?: ExecLogFilterValue;\n  onChange?: (value: ExecLogFilterValue) => void;\n  onFilter?: (value: ExecLogFilterValue) => void;\n  execUserOptions?: Array<{ value: string; label: string }>;\n  execResultOptions?: Array<{ value: string; label: string }>;\n  className?: string;\n}\n\nexport function ExecLogFilter({\n  value,\n  onChange,\n  onFilter,\n  execUserOptions = [],\n  execResultOptions = [],\n  className,\n}: ExecLogFilterProps) {\n  const [startDate, setStartDate] = useState<Date | undefined>(\n    value?.startDate\n  );\n  const [endDate, setEndDate] = useState<Date | undefined>(\n    value?.endDate\n  );\n  const [execUserId, setExecUserId] = useState<string>(\n    value?.execUserId ?? 'all'\n  );\n  const [triggerType, setTriggerType] = useState<triggerType | 'all'>(\n    value?.triggerType ?? 'all'\n  );\n  const [execResult, setExecResult] = useState<string>(\n    value?.execResult ?? 'all'\n  );\n\n  const handleStartDateChange = useCallback(\n    (date: Date | null) => {\n      const d = date ?? undefined;\n      setStartDate(d);\n      onChange?.({ startDate: d, endDate, execUserId, triggerType: triggerType === 'all' ? undefined : triggerType, execResult: execResult === 'all' ? undefined : execResult });\n    },\n    [onChange, execUserId, triggerType, execResult, endDate]\n  );\n\n  const handleEndDateChange = useCallback(\n    (date: Date | null) => {\n      const d = date ?? undefined;\n      setEndDate(d);\n      onChange?.({ startDate, endDate: d, execUserId, triggerType: triggerType === 'all' ? undefined : triggerType, execResult: execResult === 'all' ? undefined : execResult });\n    },\n    [onChange, execUserId, triggerType, execResult, startDate]\n  );\n\n  const handleExecUserIdChange = useCallback(\n    (v: string) => {\n      setExecUserId(v);\n      onChange?.({ startDate, endDate, execUserId: v, triggerType: triggerType === 'all' ? undefined : triggerType, execResult: execResult === 'all' ? undefined : execResult });\n    },\n    [onChange, startDate, endDate, triggerType, execResult]\n  );\n\n  const handleTriggerTypeChange = useCallback(\n    (v: triggerType | 'all') => {\n      setTriggerType(v);\n      onChange?.({ startDate, endDate, execUserId, triggerType: v === 'all' ? undefined : v, execResult: execResult === 'all' ? undefined : execResult });\n    },\n    [onChange, startDate, endDate, execUserId, execResult]\n  );\n\n  const handleExecResultChange = useCallback(\n    (v: string) => {\n      setExecResult(v);\n      onChange?.({ startDate, endDate, execUserId, triggerType: triggerType === 'all' ? undefined : triggerType, execResult: v === 'all' ? undefined : v });\n    },\n    [onChange, startDate, endDate, execUserId, triggerType]\n  );\n\n  const handleFilter = useCallback(() => {\n    onFilter?.({\n      startDate,\n      endDate,\n      execUserId: execUserId === 'all' ? undefined : execUserId,\n      triggerType: triggerType === 'all' ? undefined : triggerType,\n      execResult: execResult === 'all' ? undefined : execResult,\n    });\n  }, [onFilter, startDate, endDate, execUserId, triggerType, execResult]);\n\n  const allExecUserOptions = [\n    { value: 'all', label: '全部' },\n    ...execUserOptions,\n  ];\n\n  const allExecResultOptions = [\n    { value: 'all', label: '全部' },\n    ...execResultOptions,\n  ];\n\n  const allTriggerTypeOptions = [\n    { value: 'all' as const, label: '全部' },\n    ...TRIGGER_TYPE_OPTIONS,\n  ];\n\n\n  const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-exec-user-select-portal');\n  const { portalContainer: triggerTypePortalContainer, setTriggerRef: setTriggerTypeTriggerRef } = usePortalContainer('data-bs-trigger-type-select-portal');\n  const { portalContainer: execResultPortalContainer, setTriggerRef: setExecResultTriggerRef } = usePortalContainer('data-bs-exec-result-select-portal');\n\n  return (\n    <div\n      className={cn(\n        'flex items-start gap-[22px]',\n        className\n      )}\n    >\n      {/* 执行时间 */}\n      <div className=\"shrink-0 flex items-center gap-[10px] w-[426px]\">\n        <span className=\"shrink-0 text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n          执行时间\n        </span>\n        <DateInput\n          value={startDate}\n          onChange={handleStartDateChange}\n          placeholder=\"开始日期\"\n          className=\"flex-1 min-w-0\"\n          format='yyyy-MM-dd HH:mm:ss'\n        />\n        <span className=\"shrink-0 text-[14px] text-[#030303] leading-[normal]\">~</span>\n        <DateInput\n          value={endDate}\n          onChange={handleEndDateChange}\n          placeholder=\"结束日期\"\n          className=\"flex-1 min-w-0\"\n          format='yyyy-MM-dd HH:mm:ss'\n        />\n      </div>\n\n      {/* 执行人 */}\n      <div className=\"flex-1 min-w-[120px] flex items-center gap-[10px]\">\n        <span className=\"shrink-0 text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n          执行人\n        </span>\n        <Select value={execUserId} onValueChange={handleExecUserIdChange}>\n          <SelectTrigger className=\"flex-1 min-w-0\">\n            <SelectValue placeholder=\"请输入\" ref={setTriggerRef} />\n          </SelectTrigger>\n          <SelectContent container={portalContainer}>\n            {allExecUserOptions.map((opt) => (\n              <SelectItem key={opt.value} value={opt.value}>\n                {opt.label}\n              </SelectItem>\n            ))}\n          </SelectContent>\n        </Select>\n      </div>\n\n      {/* 触发类型 */}\n      <div className=\"flex-1 min-w-[120px] flex items-center gap-[10px]\">\n        <span className=\"shrink-0 text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n          触发类型\n        </span>\n        <Select value={triggerType} onValueChange={handleTriggerTypeChange}>\n          <SelectTrigger className=\"flex-1 min-w-0\">\n            <SelectValue placeholder=\"全部\" ref={setTriggerTypeTriggerRef} />\n          </SelectTrigger>\n          <SelectContent container={triggerTypePortalContainer}>\n            {allTriggerTypeOptions.map((opt) => (\n              <SelectItem key={opt.value} value={opt.value}>\n                {opt.label}\n              </SelectItem>\n            ))}\n          </SelectContent>\n        </Select>\n      </div>\n\n      {/* 执行结果 */}\n      <div className=\"shrink-0 flex items-center gap-[10px] w-[280px]\">\n        <span className=\"shrink-0 text-[14px] text-[#030303] leading-[normal] whitespace-nowrap\">\n          执行结果\n        </span>\n        <Select value={execResult} onValueChange={handleExecResultChange}>\n          <SelectTrigger className=\"flex-1 min-w-0\">\n            <SelectValue placeholder=\"请输入\" ref={setExecResultTriggerRef} />\n          </SelectTrigger>\n          <SelectContent container={execResultPortalContainer}>\n            {allExecResultOptions.map((opt) => (\n              <SelectItem key={opt.value} value={opt.value}>\n                {opt.label}\n              </SelectItem>\n            ))}\n          </SelectContent>\n        </Select>\n      </div>\n\n      {/* 筛选按钮 */}\n      <button\n        type=\"button\"\n        className=\"shrink-0 flex items-center justify-center h-[34px] px-[20px] py-[7px] rounded-[4px] bg-[#0265FF] text-[14px] text-white leading-[normal] whitespace-nowrap hover:bg-[#0252CC] cursor-pointer transition-colors duration-200\"\n        onClick={handleFilter}\n      >\n        筛选\n      </button>\n    </div>\n  );\n}\n","/*!---------------------------------------------------------------------------------------------\n *  Copyright (c) StackBlitz. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { useCallback, useMemo, useRef, useState, } from \"react\";\nconst DEFAULT_SPRING_ANIMATION = {\n    /**\n     * A value from 0 to 1, on how much to damp the animation.\n     * 0 means no damping, 1 means full damping.\n     *\n     * @default 0.7\n     */\n    damping: 0.7,\n    /**\n     * The stiffness of how fast/slow the animation gets up to speed.\n     *\n     * @default 0.05\n     */\n    stiffness: 0.05,\n    /**\n     * The inertial mass associated with the animation.\n     * Higher numbers make the animation slower.\n     *\n     * @default 1.25\n     */\n    mass: 1.25,\n};\nconst STICK_TO_BOTTOM_OFFSET_PX = 70;\nconst SIXTY_FPS_INTERVAL_MS = 1000 / 60;\nconst RETAIN_ANIMATION_DURATION_MS = 350;\nlet mouseDown = false;\nglobalThis.document?.addEventListener(\"mousedown\", () => {\n    mouseDown = true;\n});\nglobalThis.document?.addEventListener(\"mouseup\", () => {\n    mouseDown = false;\n});\nglobalThis.document?.addEventListener(\"click\", () => {\n    mouseDown = false;\n});\nexport const useStickToBottom = (options = {}) => {\n    const [escapedFromLock, updateEscapedFromLock] = useState(false);\n    const [isAtBottom, updateIsAtBottom] = useState(options.initial !== false);\n    const [isNearBottom, setIsNearBottom] = useState(false);\n    const optionsRef = useRef(null);\n    optionsRef.current = options;\n    const isSelecting = useCallback(() => {\n        if (!mouseDown) {\n            return false;\n        }\n        const selection = window.getSelection();\n        if (!selection || !selection.rangeCount) {\n            return false;\n        }\n        const range = selection.getRangeAt(0);\n        return (range.commonAncestorContainer.contains(scrollRef.current) ||\n            scrollRef.current?.contains(range.commonAncestorContainer));\n    }, []);\n    const setIsAtBottom = useCallback((isAtBottom) => {\n        state.isAtBottom = isAtBottom;\n        updateIsAtBottom(isAtBottom);\n    }, []);\n    const setEscapedFromLock = useCallback((escapedFromLock) => {\n        state.escapedFromLock = escapedFromLock;\n        updateEscapedFromLock(escapedFromLock);\n    }, []);\n    // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n    const state = useMemo(() => {\n        let lastCalculation;\n        return {\n            escapedFromLock,\n            isAtBottom,\n            resizeDifference: 0,\n            accumulated: 0,\n            velocity: 0,\n            listeners: new Set(),\n            get scrollTop() {\n                return scrollRef.current?.scrollTop ?? 0;\n            },\n            set scrollTop(scrollTop) {\n                if (scrollRef.current) {\n                    // Override CSS scroll-behavior so programmatic scrollTop\n                    // assignments take effect immediately and aren't intercepted\n                    // by the browser's smooth scrolling.\n                    const { scrollBehavior } = getComputedStyle(scrollRef.current);\n                    if (scrollBehavior !== \"auto\") {\n                        scrollRef.current.style.scrollBehavior = \"auto\";\n                    }\n                    scrollRef.current.scrollTop = scrollTop;\n                    state.ignoreScrollToTop = scrollRef.current.scrollTop;\n                    if (scrollBehavior !== \"auto\") {\n                        scrollRef.current.style.scrollBehavior = scrollBehavior;\n                    }\n                }\n            },\n            get targetScrollTop() {\n                if (!scrollRef.current || !contentRef.current) {\n                    return 0;\n                }\n                return (scrollRef.current.scrollHeight - 1 - scrollRef.current.clientHeight);\n            },\n            get calculatedTargetScrollTop() {\n                if (!scrollRef.current || !contentRef.current) {\n                    return 0;\n                }\n                const { targetScrollTop } = this;\n                if (!options.targetScrollTop) {\n                    return targetScrollTop;\n                }\n                if (lastCalculation?.targetScrollTop === targetScrollTop) {\n                    return lastCalculation.calculatedScrollTop;\n                }\n                const calculatedScrollTop = Math.max(Math.min(options.targetScrollTop(targetScrollTop, {\n                    scrollElement: scrollRef.current,\n                    contentElement: contentRef.current,\n                }), targetScrollTop), 0);\n                lastCalculation = { targetScrollTop, calculatedScrollTop };\n                requestAnimationFrame(() => {\n                    lastCalculation = undefined;\n                });\n                return calculatedScrollTop;\n            },\n            get scrollDifference() {\n                return this.calculatedTargetScrollTop - this.scrollTop;\n            },\n            get isNearBottom() {\n                return this.scrollDifference <= STICK_TO_BOTTOM_OFFSET_PX;\n            },\n        };\n    }, []);\n    const scrollToBottom = useCallback((scrollOptions = {}) => {\n        if (typeof scrollOptions === \"string\") {\n            scrollOptions = { animation: scrollOptions };\n        }\n        if (!scrollOptions.preserveScrollPosition) {\n            setIsAtBottom(true);\n        }\n        const waitElapsed = Date.now() + (Number(scrollOptions.wait) || 0);\n        const behavior = mergeAnimations(optionsRef.current, scrollOptions.animation);\n        const { ignoreEscapes = false } = scrollOptions;\n        let durationElapsed;\n        let startTarget = state.calculatedTargetScrollTop;\n        if (scrollOptions.duration instanceof Promise) {\n            scrollOptions.duration.finally(() => {\n                durationElapsed = Date.now();\n            });\n        }\n        else {\n            durationElapsed = waitElapsed + (scrollOptions.duration ?? 0);\n        }\n        const next = async () => {\n            const promise = new Promise(requestAnimationFrame).then(() => {\n                if (!state.isAtBottom) {\n                    state.animation = undefined;\n                    return false;\n                }\n                const { scrollTop } = state;\n                const tick = performance.now();\n                const tickDelta = (tick - (state.lastTick ?? tick)) / SIXTY_FPS_INTERVAL_MS;\n                state.animation || (state.animation = { behavior, promise, ignoreEscapes });\n                if (state.animation.behavior === behavior) {\n                    state.lastTick = tick;\n                }\n                if (isSelecting()) {\n                    return next();\n                }\n                if (waitElapsed > Date.now()) {\n                    return next();\n                }\n                if (scrollTop < Math.min(startTarget, state.calculatedTargetScrollTop)) {\n                    if (state.animation?.behavior === behavior) {\n                        if (behavior === \"instant\") {\n                            state.scrollTop = state.calculatedTargetScrollTop;\n                            return next();\n                        }\n                        state.velocity =\n                            (behavior.damping * state.velocity +\n                                behavior.stiffness * state.scrollDifference) /\n                                behavior.mass;\n                        state.accumulated += state.velocity * tickDelta;\n                        state.scrollTop += state.accumulated;\n                        if (state.scrollTop !== scrollTop) {\n                            state.accumulated = 0;\n                        }\n                    }\n                    return next();\n                }\n                if (durationElapsed > Date.now()) {\n                    startTarget = state.calculatedTargetScrollTop;\n                    return next();\n                }\n                state.animation = undefined;\n                /**\n                 * If we're still below the target, then queue\n                 * up another scroll to the bottom with the last\n                 * requested animation.\n                 */\n                if (state.scrollTop < state.calculatedTargetScrollTop) {\n                    return scrollToBottom({\n                        animation: mergeAnimations(optionsRef.current, optionsRef.current.resize),\n                        ignoreEscapes,\n                        duration: Math.max(0, durationElapsed - Date.now()) || undefined,\n                    });\n                }\n                return state.isAtBottom;\n            });\n            return promise.then((isAtBottom) => {\n                requestAnimationFrame(() => {\n                    if (!state.animation) {\n                        state.lastTick = undefined;\n                        state.velocity = 0;\n                    }\n                });\n                return isAtBottom;\n            });\n        };\n        if (scrollOptions.wait !== true) {\n            state.animation = undefined;\n        }\n        if (state.animation?.behavior === behavior) {\n            return state.animation.promise;\n        }\n        return next();\n    }, [setIsAtBottom, isSelecting, state]);\n    const stopScroll = useCallback(() => {\n        setEscapedFromLock(true);\n        setIsAtBottom(false);\n    }, [setEscapedFromLock, setIsAtBottom]);\n    const handleScroll = useCallback(({ target }) => {\n        if (target !== scrollRef.current) {\n            return;\n        }\n        const { scrollTop, ignoreScrollToTop } = state;\n        let { lastScrollTop = scrollTop } = state;\n        state.lastScrollTop = scrollTop;\n        state.ignoreScrollToTop = undefined;\n        if (ignoreScrollToTop && ignoreScrollToTop > scrollTop) {\n            /**\n             * When the user scrolls up while the animation plays, the `scrollTop` may\n             * not come in separate events; if this happens, to make sure `isScrollingUp`\n             * is correct, set the lastScrollTop to the ignored event.\n             */\n            lastScrollTop = ignoreScrollToTop;\n        }\n        setIsNearBottom(state.isNearBottom);\n        /**\n         * Scroll events may come before a ResizeObserver event,\n         * so in order to ignore resize events correctly we use a\n         * timeout.\n         *\n         * @see https://github.com/WICG/resize-observer/issues/25#issuecomment-248757228\n         */\n        setTimeout(() => {\n            /**\n             * When theres a resize difference ignore the resize event.\n             */\n            if (state.resizeDifference || scrollTop === ignoreScrollToTop) {\n                return;\n            }\n            if (isSelecting()) {\n                setEscapedFromLock(true);\n                setIsAtBottom(false);\n                return;\n            }\n            const isScrollingDown = scrollTop > lastScrollTop;\n            const isScrollingUp = scrollTop < lastScrollTop;\n            if (state.animation?.ignoreEscapes) {\n                state.scrollTop = lastScrollTop;\n                return;\n            }\n            if (isScrollingUp) {\n                setEscapedFromLock(true);\n                setIsAtBottom(false);\n            }\n            if (isScrollingDown) {\n                setEscapedFromLock(false);\n            }\n            if (!state.escapedFromLock && state.isNearBottom) {\n                setIsAtBottom(true);\n            }\n        }, 1);\n    }, [setEscapedFromLock, setIsAtBottom, isSelecting, state]);\n    const handleWheel = useCallback(({ target, deltaY }) => {\n        let element = target;\n        while (![\"scroll\", \"auto\"].includes(getComputedStyle(element).overflow)) {\n            if (!element.parentElement) {\n                return;\n            }\n            element = element.parentElement;\n        }\n        /**\n         * The browser may cancel the scrolling from the mouse wheel\n         * if we update it from the animation in meantime.\n         * To prevent this, always escape when the wheel is scrolled up.\n         */\n        if (element === scrollRef.current &&\n            deltaY < 0 &&\n            scrollRef.current.scrollHeight > scrollRef.current.clientHeight &&\n            !state.animation?.ignoreEscapes) {\n            setEscapedFromLock(true);\n            setIsAtBottom(false);\n        }\n    }, [setEscapedFromLock, setIsAtBottom, state]);\n    const scrollRef = useRefCallback((scroll) => {\n        scrollRef.current?.removeEventListener(\"scroll\", handleScroll);\n        scrollRef.current?.removeEventListener(\"wheel\", handleWheel);\n        scroll?.addEventListener(\"scroll\", handleScroll, { passive: true });\n        scroll?.addEventListener(\"wheel\", handleWheel, { passive: true });\n    }, []);\n    const contentRef = useRefCallback((content) => {\n        state.resizeObserver?.disconnect();\n        state.resizeObserver = undefined;\n        if (!content) {\n            return;\n        }\n        let previousHeight;\n        state.resizeObserver = new ResizeObserver(([entry]) => {\n            const { height } = entry.contentRect;\n            const difference = height - (previousHeight ?? height);\n            state.resizeDifference = difference;\n            /**\n             * Sometimes the browser can overscroll past the target,\n             * so check for this and adjust appropriately.\n             */\n            if (state.scrollTop > state.targetScrollTop) {\n                state.scrollTop = state.targetScrollTop;\n            }\n            setIsNearBottom(state.isNearBottom);\n            if (difference >= 0) {\n                /**\n                 * If it's a positive resize, scroll to the bottom when\n                 * we're already at the bottom.\n                 */\n                const animation = mergeAnimations(optionsRef.current, previousHeight\n                    ? optionsRef.current.resize\n                    : optionsRef.current.initial);\n                scrollToBottom({\n                    animation,\n                    wait: true,\n                    preserveScrollPosition: true,\n                    duration: animation === \"instant\" ? undefined : RETAIN_ANIMATION_DURATION_MS,\n                });\n            }\n            else {\n                /**\n                 * Else if it's a negative resize, check if we're near the bottom\n                 * if we are want to un-escape from the lock, because the resize\n                 * could have caused the container to be at the bottom.\n                 */\n                if (state.isNearBottom) {\n                    setEscapedFromLock(false);\n                    setIsAtBottom(true);\n                }\n            }\n            previousHeight = height;\n            /**\n             * Reset the resize difference after the scroll event\n             * has fired. Requires a rAF to wait for the scroll event,\n             * and a setTimeout to wait for the other timeout we have in\n             * resizeObserver in case the scroll event happens after the\n             * resize event.\n             */\n            requestAnimationFrame(() => {\n                setTimeout(() => {\n                    if (state.resizeDifference === difference) {\n                        state.resizeDifference = 0;\n                    }\n                }, 1);\n            });\n        });\n        state.resizeObserver?.observe(content);\n    }, []);\n    return {\n        contentRef,\n        scrollRef,\n        scrollToBottom,\n        stopScroll,\n        isAtBottom: isAtBottom || isNearBottom,\n        isNearBottom,\n        escapedFromLock,\n        state,\n    };\n};\nfunction useRefCallback(callback, deps) {\n    // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n    const result = useCallback((ref) => {\n        result.current = ref;\n        return callback(ref);\n    }, deps);\n    return result;\n}\nconst animationCache = new Map();\nfunction mergeAnimations(...animations) {\n    const result = { ...DEFAULT_SPRING_ANIMATION };\n    let instant = false;\n    for (const animation of animations) {\n        if (animation === \"instant\") {\n            instant = true;\n            continue;\n        }\n        if (typeof animation !== \"object\") {\n            continue;\n        }\n        instant = false;\n        result.damping = animation.damping ?? result.damping;\n        result.stiffness = animation.stiffness ?? result.stiffness;\n        result.mass = animation.mass ?? result.mass;\n    }\n    const key = JSON.stringify(result);\n    if (!animationCache.has(key)) {\n        animationCache.set(key, Object.freeze(result));\n    }\n    return instant ? \"instant\" : animationCache.get(key);\n}\n","/*!---------------------------------------------------------------------------------------------\n *  Copyright (c) StackBlitz. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { createContext, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, } from \"react\";\nimport { useStickToBottom, } from \"./useStickToBottom.js\";\nconst StickToBottomContext = createContext(null);\nconst useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport function StickToBottom({ instance, children, resize, initial, mass, damping, stiffness, targetScrollTop: currentTargetScrollTop, contextRef, ...props }) {\n    const customTargetScrollTop = useRef(null);\n    const targetScrollTop = React.useCallback((target, elements) => {\n        const get = context?.targetScrollTop ?? currentTargetScrollTop;\n        return get?.(target, elements) ?? target;\n    }, [currentTargetScrollTop]);\n    const defaultInstance = useStickToBottom({\n        mass,\n        damping,\n        stiffness,\n        resize,\n        initial,\n        targetScrollTop,\n    });\n    const { scrollRef, contentRef, scrollToBottom, stopScroll, isAtBottom, escapedFromLock, state, } = instance ?? defaultInstance;\n    const context = useMemo(() => ({\n        scrollToBottom,\n        stopScroll,\n        scrollRef,\n        isAtBottom,\n        escapedFromLock,\n        contentRef,\n        state,\n        get targetScrollTop() {\n            return customTargetScrollTop.current;\n        },\n        set targetScrollTop(targetScrollTop) {\n            customTargetScrollTop.current = targetScrollTop;\n        },\n    }), [\n        scrollToBottom,\n        isAtBottom,\n        contentRef,\n        scrollRef,\n        stopScroll,\n        escapedFromLock,\n        state,\n    ]);\n    useImperativeHandle(contextRef, () => context, [context]);\n    useIsomorphicLayoutEffect(() => {\n        if (!scrollRef.current) {\n            return;\n        }\n        if (getComputedStyle(scrollRef.current).overflow === \"visible\") {\n            scrollRef.current.style.overflow = \"auto\";\n        }\n    }, []);\n    return (React.createElement(StickToBottomContext.Provider, { value: context },\n        React.createElement(\"div\", { ...props }, typeof children === \"function\" ? children(context) : children)));\n}\n(function (StickToBottom) {\n    function Content({ children, scrollClassName, ...props }) {\n        const context = useStickToBottomContext();\n        return (React.createElement(\"div\", { ref: context.scrollRef, style: {\n                height: \"100%\",\n                width: \"100%\",\n                scrollbarGutter: \"stable both-edges\",\n            }, className: scrollClassName },\n            React.createElement(\"div\", { ...props, ref: context.contentRef }, typeof children === \"function\" ? children(context) : children)));\n    }\n    StickToBottom.Content = Content;\n})(StickToBottom || (StickToBottom = {}));\n/**\n * Use this hook inside a <StickToBottom> component to gain access to whether the component is at the bottom of the scrollable area.\n */\nexport function useStickToBottomContext() {\n    const context = useContext(StickToBottomContext);\n    if (!context) {\n        throw new Error(\"use-stick-to-bottom component context must be used within a StickToBottom component\");\n    }\n    return context;\n}\n","import type { ComponentProps } from 'react';\nimport React, { useCallback } from 'react';\nimport { StickToBottom, StickToBottomProps, useStickToBottomContext } from 'use-stick-to-bottom';\nimport { Button } from '@/app/components/ui/button';\nimport cn from 'classnames';\nimport { ScrollToBottomBtn } from '@baishuyun/ai-design/scroll-to-bottom-btn';\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation: React.FC<StickToBottomProps> = ({ className, ...props }) => (\n  <StickToBottom\n    className={cn('relative flex-1 touch-pan-y overflow-y-auto flex will-change-scroll', className)}\n    style={{ minHeight: 0, height: '100%' }}\n    initial=\"smooth\"\n    resize=\"smooth\"\n    role=\"log\"\n    {...props}\n  />\n);\n\nexport type ConversationContentProps = ComponentProps<typeof StickToBottom.Content>;\n\nexport const ConversationContent = ({ className, ...props }: ConversationContentProps) => (\n  <StickToBottom.Content className={cn('p-4', className)} {...props} />\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({ className }: ConversationScrollButtonProps) => {\n  const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n  const handleScrollToBottom = useCallback(() => {\n    scrollToBottom();\n  }, [scrollToBottom]);\n\n  return (\n    <ScrollToBottomBtn\n      className={cn(\n        'absolute bottom-7.5 left-1/2 -translate-x-1/2',\n        {\n          'pointer-events-none scale-0 opacity-0': isAtBottom,\n          'pointer-events-auto scale-100 opacity-100': !isAtBottom,\n        },\n        className\n      )}\n      onClick={handleScrollToBottom}\n    />\n  );\n};\n","import { FormIconOption } from '@baishuyun/ai-design/form-info-editor';\n\nexport const BotImgUrl = `\n  url(data:image/png;base64,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)\n  `;\n\nexport const WarningImgUrl = `\nurl(data:image/png;base64,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)`;\n\nexport const ChatHeaderBgImgUrl = `url(data:image/png;base64,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)`;\n\nexport const transCls = 'transition-all duration-200 ease-out';\n// Form icon data from iconfont.json (icons with name starting with \"表单\")\n\nexport const FORM_ICON_OPTIONS: FormIconOption[] = [\n  { id: 'biaodan1', code: '&#xe814;', label: '表单1', value: 25 },\n  { id: 'biaodan2', code: '&#xe81d;', label: '表单2', value: 26 },\n  { id: 'biaodan3', code: '&#xe81c;', label: '表单3', value: 27 },\n  { id: 'biaodan4', code: '&#xe81a;', label: '表单4', value: 28 },\n  { id: 'biaodan5', code: '&#xe813;', label: '表单5', value: 29 },\n  { id: 'biaodan6', code: '&#xe81b;', label: '表单6', value: 30 },\n  { id: 'biaodan7', code: '&#xe818;', label: '表单7', value: 31 },\n  { id: 'biaodan8', code: '&#xe819;', label: '表单8', value: 32 },\n  { id: 'biaodan9', code: '&#xe817;', label: '表单9', value: 33 },\n  { id: 'biaodan10', code: '&#xe816;', label: '表单10', value: 34 },\n  { id: 'biaodan11', code: '&#xe810;', label: '表单11', value: 35 },\n  { id: 'biaodan12', code: '&#xe815;', label: '表单12', value: 36 },\n  { id: 'biaodan13', code: '&#xe812;', label: '表单13', value: 37 },\n  { id: 'biaodan14', code: '&#xe811;', label: '表单14', value: 38 },\n  { id: 'biaodan15', code: '&#xe80e;', label: '表单15', value: 39 },\n  { id: 'biaodan16', code: '&#xe80f;', label: '表单16', value: 40 },\n  { id: 'biaodan17', code: '&#xe80d;', label: '表单17', value: 41 },\n  { id: 'biaodan18', code: '&#xe807;', label: '表单18', value: 42 },\n  { id: 'biaodan19', code: '&#xe80b;', label: '表单19', value: 43 },\n  { id: 'biaodan20', code: '&#xe80a;', label: '表单20', value: 44 },\n  { id: 'biaodan21', code: '&#xe80c;', label: '表单21', value: 45 },\n  { id: 'biaodan22', code: '&#xe809;', label: '表单22', value: 46 },\n  { id: 'biaodan23', code: '&#xe808;', label: '表单23', value: 47 },\n  { id: 'biaodan24', code: '&#xe805;', label: '表单24', value: 48 },\n  { id: 'biaodan25', code: '&#xe7ff;', label: '表单25', value: 49 },\n  { id: 'biaodan26', code: '&#xe803;', label: '表单26', value: 50 },\n  { id: 'biaodan27', code: '&#xe806;', label: '表单27', value: 51 },\n  { id: 'biaodan28', code: '&#xe802;', label: '表单28', value: 52 },\n  { id: 'biaodan29', code: '&#xe800;', label: '表单29', value: 53 },\n  { id: 'biaodan30', code: '&#xe804;', label: '表单30', value: 54 },\n  { id: 'biaodan31', code: '&#xe801;', label: '表单31', value: 55 },\n  { id: 'biaodan32', code: '&#xe7fe;', label: '表单32', value: 56 },\n  { id: 'biaodan33', code: '&#xe7fc;', label: '表单33', value: 57 },\n  { id: 'biaodan34', code: '&#xe7fd;', label: '表单34', value: 58 },\n  { id: 'biaodan35', code: '&#xe7fb;', label: '表单35', value: 59 },\n  { id: 'biaodan36', code: '&#xe7fa;', label: '表单36', value: 60 },\n];\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { UIDataTypes, UIMessagePart, UITools } from 'ai';\nimport { Attachment, IFilledField, IQueryResult } from '@baishuyun/types';\nimport { FORM_ICON_OPTIONS } from '@/const/ui';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\nexport const extractTextPartMeta = (part: any) => {\n  if (part?.type !== 'text') {\n    return null;\n  }\n\n  if (!part.providerMetadata) {\n    return null;\n  }\n\n  if (!part.providerMetadata.raw || !part.providerMetadata.raw.data) {\n    return null;\n  }\n\n  if (typeof part.providerMetadata.raw.data !== 'string') {\n    return part.providerMetadata.raw.data;\n  }\n\n  let payload;\n  try {\n    payload = JSON.parse(part.providerMetadata.raw.data);\n  } catch (e) {\n    console.error('invalid raw data');\n  }\n\n  return payload || part.providerMetadata.raw.data;\n};\n\nexport const IsFieldsJsonPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'mcp-fields-json';\n};\n\nexport const IsQueryResultPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'query-stream-parsed-info';\n};\n\nexport const GetQueryResult = (part: any): IQueryResult | null => {\n  const payload = extractTextPartMeta(part);\n  if (payload?.type !== 'query-stream-parsed-info') {\n    return null;\n  }\n\n  const result = payload.result;\n  console.log('query result raw data:', result);\n  try {\n    return JSON.parse(result);\n  } catch (e) {\n    console.error('invalid query result data');\n    return null;\n  }\n};\n\nexport const IsErrorPart = (part: any): boolean => {\n  if (part?.type === 'error') {\n    return true;\n  }\n\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'agent-error';\n};\n\nexport const IsFakeMsgPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'agent-fake-msg';\n};\n\nexport const IsSpecialPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.specialPart === true;\n};\n\nexport const IsAgentCallingPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'agent-calling';\n};\n\nexport const GetSpecialPartType = (part: any): string | null => {\n  const payload = extractTextPartMeta(part);\n  if (payload?.specialPart === true) {\n    return payload.type || null;\n  }\n\n  return null;\n};\n\nexport const IsFilePart = (part: any): boolean => {\n  return part?.type === 'file';\n};\n\nexport const IsFileGroupPart = (part: any) => {\n  if (!Array.isArray(part)) {\n    return false;\n  }\n\n  // any one is file part\n  for (const p of part) {\n    if (p?.type === 'file') {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport const IsLoadingPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'agent-loading';\n};\n\nexport const GetLoadingMsg = (part: any): string => {\n  const payload = extractTextPartMeta(part);\n  if (payload?.type !== 'agent-loading') {\n    return '';\n  }\n\n  return payload?.label || '加载中';\n};\n\nexport const GetPartErrMsg = (part: any): string => {\n  if (!IsErrorPart(part)) {\n    return '';\n  }\n\n  if (part?.errorText) {\n    return part.errorText;\n  }\n\n  const payload = extractTextPartMeta(part);\n  return payload?.error || '未知错误';\n};\n\nexport const getMetaErrorMsg = (part: any): string => {\n  if (part?.errorText) {\n    return part.errorText;\n  }\n\n  const payload = extractTextPartMeta(part);\n  return payload?.error || '未知错误';\n};\n\nexport const GetFieldJsonInfo = (part: any): IFilledField | null => {\n  const payload = extractTextPartMeta(part);\n  if (payload?.type !== 'mcp-fields-json') {\n    return null;\n  }\n\n  return payload?.field || null;\n};\n\nexport const IsSuggesstionPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'suggestion';\n};\n\nexport const IsMockSuggesstionPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'mock-mcp-fields-sugession';\n};\n\nexport const NeedToAppendFieldsSaveConfirm = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.appendConfirm === 'save-fields';\n};\n\nexport const extractFormName = (origin: string): string => {\n  const regex = /现在要创建一张表：“([^”]+)”/g;\n  const result = regex.exec(origin)?.[1] || '';\n  return result.replace(/（.*\\）/, '');\n};\n\nexport function sanitizeText(text: string) {\n  return text.replace('<has_function_call>', '');\n}\n\n/**\n * 合并parts数组中连续相同的元素，以连续组的最后一个元素为准\n * @param {Array} parts - 待合并的原数组\n * @param {Function} isTheSamePart - 判断两个part是否相同的方法（接收a、b两个参数，返回布尔值）\n * @returns {Array} 合并后的数组\n */\nexport function mergeParts(\n  parts: UIMessagePart<UIDataTypes, UITools>[],\n  isTheSamePart: (\n    p0: UIMessagePart<UIDataTypes, UITools>,\n    p1: UIMessagePart<UIDataTypes, UITools>\n  ) => boolean\n) {\n  // 边界处理：如果原数组为空，直接返回空数组\n  if (!Array.isArray(parts) || parts.length === 0) {\n    return [];\n  }\n\n  const mergedParts = [parts[0]];\n\n  for (let i = 1; i < parts.length; i++) {\n    const currentPart = parts[i];\n    const lastMergedPart = mergedParts[mergedParts.length - 1]; // 结果数组的最后一个元素\n\n    if (isTheSamePart(lastMergedPart, currentPart)) {\n      mergedParts[mergedParts.length - 1] = currentPart;\n    } else {\n      mergedParts.push(currentPart);\n    }\n  }\n\n  return mergedParts;\n}\n\n// 复制文本的核心函数（TypeScript 版本）\nexport async function copyTextToClipboard(text: string): Promise<boolean> {\n  // 校验输入：确保复制的文本是字符串且非空\n  if (typeof text !== 'string' || text.trim() === '') {\n    console.error('要复制的文本必须是非空字符串');\n    return false;\n  }\n\n  try {\n    // 方案1：优先使用现代浏览器的 Clipboard API（更安全、无DOM操作）\n    if (navigator.clipboard && window.isSecureContext) {\n      await navigator.clipboard.writeText(text);\n      console.log('文本复制成功（Clipboard API）');\n      return true;\n    }\n\n    // 方案2：降级使用 execCommand（兼容旧浏览器，需创建临时DOM元素）\n    // 1. 创建临时textarea元素（隐藏，避免影响页面布局）\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.style.position = 'fixed'; // 避免滚动条偏移\n    textarea.style.left = '-9999px';\n    textarea.style.top = '-9999px';\n    document.body.appendChild(textarea);\n\n    // 2. 选中文本并执行复制\n    textarea.focus();\n    textarea.select();\n    const success = document.execCommand('copy');\n\n    // 3. 移除临时元素\n    document.body.removeChild(textarea);\n\n    if (success) {\n      console.log('文本复制成功（execCommand 降级方案）');\n      return true;\n    } else {\n      throw new Error('execCommand 复制失败');\n    }\n  } catch (error) {\n    // 捕获复制失败的异常（如用户拒绝权限、浏览器不支持等）\n    console.error('文本复制失败：', error);\n    return false;\n  }\n}\n\n/**\n * 合并数组中连续的目标元素（至少2个）为子数组（单函数实现）\n * @template T - 数组元素的类型\n * @param {T[]} arr - 原始数组\n * @param {(item: T) => boolean} isTarget - 判断元素是否为目标的函数（返回布尔值）\n * @returns {(T | T[])[]} 处理后的数组（元素可能是原类型或原类型的子数组）\n */\nexport function mergeConsecutiveTargets<T>(\n  arr: T[],\n  isTarget: (item: T) => boolean,\n  minWidth = 1\n): (T | T[])[] {\n  // 存储最终结果\n  const result: (T | T[])[] = [];\n  // 临时收集连续的目标元素\n  const temp: T[] = [];\n\n  // 遍历原始数组\n  for (const item of arr) {\n    if (isTarget(item)) {\n      // 是目标元素，加入临时数组\n      temp.push(item);\n    } else {\n      // 不是目标元素：先处理临时数组（内联原辅助函数逻辑）\n      if (temp.length > 0) {\n        // 连续≥ minWidth 个目标元素 → 合并为子数组\n        result.push(temp.length >= minWidth ? [...temp] : temp[0]);\n        temp.length = 0; // 清空临时数组\n      }\n      // 将当前非目标元素加入结果\n      result.push(item);\n    }\n  }\n\n  // 处理遍历结束后剩余的临时数组（末尾可能全是目标元素）\n  if (temp.length > 0) {\n    result.push(temp.length >= 2 ? [...temp] : temp[0]);\n  }\n\n  return result;\n}\n\nexport const mergeFileParts = (parts: Array<UIMessagePart<UIDataTypes, UITools>>) => {\n  return mergeConsecutiveTargets<UIMessagePart<UIDataTypes, UITools>>(\n    parts,\n    (part) => {\n      return part.type === 'file';\n    },\n    2\n  );\n};\n\nexport const getIconValue = (iconCode?: string): number => {\n  if (!iconCode) {\n    return 33;\n  }\n\n  const options = FORM_ICON_OPTIONS;\n  const option = options.find((opt) => opt.code === iconCode);\n\n  return option ? option.value : 33;\n};\n\nexport const getIconOption = (iconValue?: number) => {\n  const options = FORM_ICON_OPTIONS;\n  const option = options.find((opt) => opt.value === iconValue);\n\n  return option || options[8];\n};\n\nexport const ensureEndSlash = (url: string): string => {\n  if (!url) {\n    return '';\n  }\n\n  return url.endsWith('/') ? url : `${url}/`;\n};\n\nexport const generatePhoneFromTimestamp = (): string => {\n  const timestamp = Date.now().toString();\n  // 第二位取 3-9 的随机数，避免过于规律\n  const secondDigit = 3 + Math.floor(Math.random() * 7);\n  // 取时间戳后9位，如果不足则前面补零\n  const suffix = timestamp.slice(-9).padStart(9, '0');\n  return `1${secondDigit}${suffix}`;\n};\n\nexport const shortTimeHash = (length = 4) => {\n  const time = Date.now().toString(36); // 时间转36进制\n  const random = Math.random().toString(36).slice(2, 4); // 防碰撞\n  const combined = time + random;\n\n  // 进一步混淆\n  let hash = '';\n  for (let i = 0; i < combined.length && hash.length < length; i++) {\n    hash += combined.charCodeAt(i).toString(36);\n  }\n\n  return hash.slice(0, length);\n};\n\nexport const generateUniqueValue = (numOnly?: boolean) => {\n  if (numOnly) {\n    return generatePhoneFromTimestamp();\n  }\n\n  return shortTimeHash(4);\n};\n\n/**\n * Convert an image URL to a base64 data URL via canvas.\n * Returns the original URL on failure (e.g. CORS).\n */\nexport const imageUrlToBase64 = (url: string, mediaType = 'image/png'): Promise<string> =>\n  new Promise((resolve) => {\n    const img = new Image();\n    img.crossOrigin = 'anonymous';\n    img.onload = () => {\n      const canvas = document.createElement('canvas');\n      canvas.width = img.naturalWidth;\n      canvas.height = img.naturalHeight;\n      canvas.getContext('2d')!.drawImage(img, 0, 0);\n      resolve(canvas.toDataURL(mediaType));\n    };\n    img.onerror = () => resolve(url);\n    img.src = url;\n  });\n\nexport const isValidJSON = (str: string): boolean => {\n  if (!str || typeof str !== 'string') return false;\n  try {\n    JSON.parse(str);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nexport const formatJSONIfValid = (str: string): string | null => {\n  try {\n    const parsed = JSON.parse(str);\n    return JSON.stringify(parsed, null, 2);\n  } catch {\n    return null;\n  }\n};\n\nconst MIME_MAP: Record<string, string> = {\n  // 文档\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  xls: 'application/vnd.ms-excel',\n  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  pdf: 'application/pdf',\n  txt: 'text/plain',\n  // 图片\n  png: 'image/png',\n  jpg: 'image/jpeg',\n  jpeg: 'image/jpeg',\n  gif: 'image/gif',\n  webp: 'image/webp',\n  svg: 'image/svg+xml',\n  // 音视频\n  mp4: 'video/mp4',\n  mp3: 'audio/mpeg',\n  // 压缩包\n  zip: 'application/zip',\n  rar: 'application/x-rar-compressed',\n  '7z': 'application/x-7z-compressed',\n  // 代码/数据\n  json: 'application/json',\n  js: 'application/javascript',\n  ts: 'application/typescript',\n  csv: 'text/csv',\n  xml: 'application/xml',\n  // 默认回退\n  default: 'application/octet-stream',\n};\n\nconst getMimeType = (filename: string, serverType: string | null): string => {\n  // 如果服务器给了具体类型（不是 octet-stream），就信任它\n  if (serverType && serverType !== 'application/octet-stream') {\n    return serverType;\n  }\n\n  // 否则从扩展名推断\n  const ext = filename.split('.').pop()?.toLowerCase() || '';\n  return MIME_MAP[ext] || MIME_MAP.default;\n};\n\n/**\n * 从 URL 下载文件，返回 File 对象\n */\nexport const downloadFile = async (url: string): Promise<File> => {\n  const response = await fetch(url, {\n    // credentials: 'include', // 必须携带，因为 Allow-Credentials: true\n    mode: 'cors',\n  });\n\n  if (!response.ok) {\n    throw new Error(`Failed to download: ${response.status}`);\n  }\n\n  const blob = await response.blob();\n\n  // 1. 从 Content-Disposition 解析文件名（优先）\n  const disposition = response.headers.get('content-disposition');\n  let filename = 'attachment';\n\n  if (disposition) {\n    // 尝试 filename*=UTF-8'' 格式（RFC 5987）\n    const utf8Match = disposition.match(/filename\\*=UTF-8''([^;]+)/i);\n    // 尝试 filename=\"...\" 或 filename=... 格式（需要解码 MinIO 的 URL 编码）\n    const asciiMatch = disposition.match(/filename=[\"']?([^\"';]+)[\"']?/i);\n\n    if (utf8Match) {\n      filename = decodeURIComponent(utf8Match[1]);\n    } else if (asciiMatch) {\n      // MinIO 特殊处理：filename 可能是 URL 编码的\n      filename = decodeURIComponent(asciiMatch[1]);\n    }\n  }\n\n  // 2. 修正 MIME 类型（如果服务器返回的是 octet-stream）\n  let contentType = response.headers.get('content-type') || 'application/octet-stream';\n  if (contentType === 'application/octet-stream') {\n    contentType = getMimeType(filename, contentType);\n  }\n\n  return new File([blob], filename, { type: contentType });\n};\n\n/**\n * 上传文件到指定 endpoint，返回 Attachment 信息\n */\nexport const uploadFile = async (\n  file: File,\n  uploadEndpoint: string,\n  signal?: AbortSignal\n): Promise<Attachment | undefined> => {\n  const formData = new FormData();\n  formData.append('file', file);\n\n  try {\n    const response = await fetch(uploadEndpoint, {\n      method: 'POST',\n      body: formData,\n      signal,\n    });\n\n    if (response.ok) {\n      return await response.json();\n    }\n    const { error } = await response.json();\n    console.error('upload error', error);\n    return undefined;\n  } catch (error) {\n    console.error('Error uploading file:', error);\n    return undefined;\n  }\n};\n\nexport const urls2fileParts = async (attachmentsUrl: string[], uploadEndpoint: string) => {\n  if (!attachmentsUrl?.length) {\n    return [];\n  }\n\n  let results: (Attachment | undefined)[];\n  try {\n    results = await Promise.all(\n      attachmentsUrl.map(async (url) => {\n        const file = await downloadFile(url);\n        return uploadFile(file, uploadEndpoint);\n      })\n    );\n  } catch (error) {\n    console.error('Error processing attachments:', error);\n    return [];\n  }\n\n  return results\n    .filter((attachment): attachment is Attachment => attachment !== undefined)\n    .map((attachment) => ({\n      type: 'file' as const,\n      url: attachment.url,\n      name: attachment.name,\n      mediaType: attachment.contentType,\n      providerMetadata: {\n        uploadMetadata: attachment,\n      },\n    }));\n};\n","const createStoreImpl = (createState) => {\n  let state;\n  const listeners = /* @__PURE__ */ new Set();\n  const setState = (partial, replace) => {\n    const nextState = typeof partial === \"function\" ? partial(state) : partial;\n    if (!Object.is(nextState, state)) {\n      const previousState = state;\n      state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n      listeners.forEach((listener) => listener(state, previousState));\n    }\n  };\n  const getState = () => state;\n  const getInitialState = () => initialState;\n  const subscribe = (listener) => {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const api = { setState, getState, getInitialState, subscribe };\n  const initialState = state = createState(setState, getState, api);\n  return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n  const slice = React.useSyncExternalStore(\n    api.subscribe,\n    React.useCallback(() => selector(api.getState()), [api, selector]),\n    React.useCallback(() => selector(api.getInitialState()), [api, selector])\n  );\n  React.useDebugValue(slice);\n  return slice;\n}\nconst createImpl = (createState) => {\n  const api = createStore(createState);\n  const useBoundStore = (selector) => useStore(api, selector);\n  Object.assign(useBoundStore, api);\n  return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { create } from 'zustand';\nimport type { IOfficeAgent } from '@baishuyun/types';\nimport { FullScreenPart } from '@baishuyun/ai-design/office-container';\nimport { IAgentHelper } from '@baishuyun/types';\n\nexport interface AIOfficeStoreState {\n  agents: IOfficeAgent[];\n  api: string;\n  agentsMap: Record<string, IOfficeAgent>;\n  activeAgent: IOfficeAgent | null;\n\n  activeAgentHelper: IAgentHelper | null;\n\n  workerName: string;\n\n  fullscreenPart: FullScreenPart;\n}\n\nexport interface AIOfficeStoreActions {\n  setApi: (api: string) => void;\n  setAgents: (agents: IOfficeAgent[]) => void;\n  setActiveAgent: (agent: IOfficeAgent | null) => void;\n  getAgentById?: (id: string) => IOfficeAgent | undefined;\n  setFullscreenPart?: (part: FullScreenPart) => void;\n\n  setWorkerName: (name: string) => void;\n\n  setActiveAgentHelper: (helper: IAgentHelper | null) => void;\n}\n\nexport const useAIOfficeStore = create<AIOfficeStoreState & AIOfficeStoreActions>((set, get) => ({\n  agents: [],\n  agentsMap: {},\n  activeAgent: null,\n  activeAgentHelper: null,\n  fullscreenPart: 'none',\n  workerName: '',\n  api: '',\n\n  setWorkerName: (name) => set({ workerName: name }),\n\n  setActiveAgentHelper: (helper) =>\n    set({\n      activeAgentHelper: helper,\n      workerName: helper?.helperName,\n    }),\n\n  setFullscreenPart: (part) => {\n    const currentPart = get().fullscreenPart;\n    const newPart = currentPart === part ? 'none' : part; // 切换逻辑：如果当前已经是这个part了，再次点击则切回none\n    set({ fullscreenPart: newPart });\n  },\n\n  setApi: (api) => set({ api }),\n\n  setAgents: (agents) =>\n    set({\n      agents,\n      agentsMap: agents.reduce<Record<string, IOfficeAgent>>((acc, agent) => {\n        acc[agent.id] = agent;\n        return acc;\n      }, {}),\n    }),\n  setActiveAgent: (agent) => set({ activeAgent: agent, workerName: agent?.name || '' }),\n  getAgentById: (id) => get().agentsMap[id],\n}));\n","import { cn } from '@/lib/utils';\nimport { MsgSenderRole } from '@baishuyun/types';\nimport { IconBtn } from '@baishuyun/ai-design/icon-btn';\nimport { CopyIcon, RefreshIcon } from '@baishuyun/ai-design/bs-icons';\nimport { BotAvatarAndName } from '@baishuyun/ai-design/bot-avatar-name';\nimport { useAIOfficeStore } from '@/app/store/use-ai-office-store';\nimport { GenerateAnimation } from '@baishuyun/ai-design';\n\nexport const PreviewMessageWrapper = ({\n  role,\n  requiresScrollPadding,\n  hasTextPart,\n  hasFileType,\n  agentId,\n  children,\n  isLoading,\n  onCopy,\n  onGenerate,\n}: {\n  onCopy?: () => void;\n  onGenerate?: () => void;\n  role: MsgSenderRole;\n  requiresScrollPadding?: boolean;\n  hasTextPart?: boolean;\n  agentId?: string;\n  hasFileType?: boolean;\n  children: React.ReactNode;\n  isLoading?: boolean;\n}) => {\n  const isBot = role === 'assistant';\n  const isUser = role === 'user';\n\n\n  // const [isHovered, setIsHovered] = useState(false);\n\n  const showAction = isBot && /* isHovered &&*/ !isLoading;\n\n  const visibilityCls = showAction ? 'opacity-100' : 'opacity-0';\n  const pointerEventsCls = showAction ? 'pointer-events-auto' : 'pointer-events-none';\n  const getAgent = useAIOfficeStore((state) => state.getAgentById);\n  const msgAgent = agentId ? getAgent?.(agentId) : null;\n\n  const avatarJsx = msgAgent ? (\n    <BotAvatarAndName\n      name={msgAgent?.name}\n      icon={msgAgent?.icon}\n    />\n  ) : null;\n\n  const actionBarJsx = (\n    <div\n      className={cn(\n        'flex items-center gap-2.5 text-[#666] h-10',\n        visibilityCls,\n        pointerEventsCls\n      )}\n    >\n      <IconBtn\n        tooltip=\"复制\"\n        icon={<CopyIcon />}\n        onClick={onCopy}\n        className=\"!hover:bg-[#eff0f6]\"\n      />\n      {onGenerate ? (\n        <IconBtn\n          tooltip=\"重新生成\"\n          icon={<RefreshIcon />}\n          onClick={() => {\n            onGenerate && onGenerate();\n          }}\n          className=\"!hover:bg-[#eff0f6]\"\n        />\n      ) : null}\n    </div>\n  );\n\n  return (\n    <div\n      className=\"group/message w-full\"\n      data-role={role}\n      data-testid={`message-${role}`}\n      // onMouseEnter={() => setIsHovered(true)}\n      // onMouseLeave={() => setIsHovered(false)}\n    >\n      <div\n        className={cn('flex w-full justify-start flex-col gap-2.5', {\n          'items-end': role === 'user',\n          'items-start': role === 'assistant',\n        })}\n      >\n        {role === 'assistant' && avatarJsx}\n\n        <div\n          className={cn('flex flex-col min-w-0', {\n            'gap-2.5': hasTextPart,\n            grow: isBot,\n            'items-end': role === 'user',\n            'min-h-96': isBot && requiresScrollPadding,\n            'w-full': isBot && hasTextPart,\n            'max-w-[calc(100%-2.5rem)] sm:max-w-[min(fit-content,80%)]': isUser && !hasFileType,\n            'max-w-full': hasFileType,\n          })}\n        >\n          {children}\n\n          {isLoading ? <GenerateAnimation /> : null}\n        </div>\n      </div>\n      {actionBarJsx}\n    </div>\n  );\n};\n","import { MsgPartCompProps } from '@baishuyun/types';\nimport { MessageContent } from '@baishuyun/ai-design';\nimport { cn, sanitizeText } from '@/lib/utils';\nimport { MemoizedMarkdown } from '@baishuyun/ai-design/memoized-markdown';\nimport { UserTextMsgBubble } from '@baishuyun/ai-design/user-txt-msg-bubble';\nimport { CollapsibleTxtMsg } from '@baishuyun/ai-design/collapsible-txt-msg';\nimport { AnalysisIcon } from '@baishuyun/ai-design/bs-icons';\nimport { UIDataTypes, UIMessagePart, UITools } from 'ai';\nimport { formatJSONIfValid } from '@/lib/utils';\n\nexport const MarkdownMsgpart = (\n  props: MsgPartCompProps & {\n    children?: React.ReactNode;\n    collapsible?: boolean;\n    collapsibleTitle?: string;\n  }\n) => {\n  const { part: p, role, id, collapsible = true, collapsibleTitle, title, status } = props;\n\n  const part = p as UIMessagePart<UIDataTypes, UITools>;\n\n  if (part.type !== 'text' || !part.text) {\n    return null;\n  }\n\n  const typoCls = cn({\n    prose: role === 'assistant',\n  });\n\n  if (role === 'user') {\n    return <UserTextMsgBubble>{part.text}</UserTextMsgBubble>;\n  }\n\n  const rawContent = sanitizeText(part.text);\n  let displayContent = rawContent;\n\n  if (status === 'ready') {\n\n    // 如果是合法 JSON，包装为代码块格式\n    const formattedJSON = formatJSONIfValid(rawContent);\n    if (formattedJSON) {\n      displayContent = `\\`\\`\\`json\\n${formattedJSON}\\n\\`\\`\\``;\n    }\n  }\n\n  if (!collapsible) {\n    return (\n      <div>\n        <MessageContent\n          className={cn('text-[14px]', {\n            // \"w-fit wrap-break-words rounded-2 px-3 py-2 text-right text-white\":\n            //   role === \"user\",\n            'bg-transparent px-0 py-0 text-left': role === 'assistant',\n          })}\n          data-testid=\"message-content\"\n        >\n          <article className={typoCls} style={{ fontSize: 14 }}>\n            <MemoizedMarkdown id={id} content={displayContent} />\n          </article>\n          {props.children}\n        </MessageContent>\n      </div>\n    );\n  }\n\n  return (\n    <div>\n      <MessageContent\n        className={cn('text-[14px]', {\n          // \"w-fit wrap-break-words rounded-2 px-3 py-2 text-right text-white\":\n          //   role === \"user\",\n          'bg-transparent px-0 py-0 text-left': role === 'assistant',\n        })}\n        data-testid=\"message-content\"\n      >\n        <CollapsibleTxtMsg title={collapsibleTitle || title || \"\"} icon={<AnalysisIcon />} defaultOpen>\n          <article className={typoCls} style={{ fontSize: 14 }}>\n            <MemoizedMarkdown id={id} content={displayContent} />\n          </article>\n        </CollapsibleTxtMsg>\n        {props.children}\n      </MessageContent>\n    </div>\n  );\n};\n","import { FakeBotMessage } from '@baishuyun/ai-design';\n\nexport const ErrorFallbackMsg = ({ error }: { error?: string }) => {\n  return (\n    <FakeBotMessage headless>\n      {error || '出现了一些问题，无法显示预览内容，请稍后重试。'}\n    </FakeBotMessage>\n  );\n};\n","import React from 'react';\nimport { ErrorFallbackMsg } from './error-msg';\n\nexport interface ErrorBoundaryState {\n  hasError: boolean;\n  error: string;\n}\n\nexport interface ErrorBoundaryProps {\n  errorRenderer?: (error: string) => React.ReactNode;\n}\n\nexport class ErrorBoundary<T = {}> extends React.Component<\n  React.PropsWithChildren<T> & ErrorBoundaryProps,\n  ErrorBoundaryState\n> {\n  constructor(props: React.PropsWithChildren<T> & ErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false, error: '' };\n  }\n\n  static getDerivedStateFromError(error: Error) {\n    // 更新 state 使下一次渲染能够显示降级后的 UI\n    return { hasError: true, error: error.message };\n  }\n\n  //   componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {}\n\n  render() {\n    if (this.state.hasError) {\n      // 你可以自定义降级后的 UI 并渲染\n      return this.props.errorRenderer ? (\n        this.props.errorRenderer(this.state.error)\n      ) : (\n        <ErrorFallbackMsg error={this.state.error} />\n      );\n    }\n\n    return this.props.children;\n  }\n}\n","import { createContext, ReactNode, useContext } from 'react';\nimport { PluginRuntime } from '@/core/runtime';\n\nconst PluginRuntimeContext = createContext<PluginRuntime | null>(null);\n\nexport function usePluginRuntime(): PluginRuntime {\n  const runtime = useContext(PluginRuntimeContext);\n  if (!runtime) {\n    throw new Error('usePluginRuntime must be used within a PluginRuntimeProvider');\n  }\n  return runtime;\n}\n\nexport function PluginRuntimeProvider({\n  runtime,\n  children,\n}: {\n  runtime: PluginRuntime;\n  children: ReactNode;\n}) {\n  return <PluginRuntimeContext.Provider value={runtime}>{children}</PluginRuntimeContext.Provider>;\n}","import * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\nimport { cn } from '@/lib/utils';\n\nconst TooltipZIndexContext = React.createContext<number | undefined>(undefined);\n\ntype TooltipProviderProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider> & {\n  zIndex?: number;\n};\n\nconst TooltipProvider = ({ zIndex, children, ...props }: TooltipProviderProps) => (\n  <TooltipZIndexContext.Provider value={zIndex}>\n    <TooltipPrimitive.Provider {...props}>{children}</TooltipPrimitive.Provider>\n  </TooltipZIndexContext.Provider>\n);\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\ntype TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n  portalContainer?: HTMLElement | null;\n};\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  TooltipContentProps\n>(({ className, sideOffset = 4, portalContainer, style, ...props }, ref) => {\n  const zIndexFromProvider = React.useContext(TooltipZIndexContext);\n\n  return (\n    <TooltipPrimitive.Portal container={portalContainer ?? undefined}>\n      <TooltipPrimitive.Content\n        ref={ref}\n        sideOffset={sideOffset}\n        className={cn(\n          // 'z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]',\n          className\n        )}\n        style={zIndexFromProvider != null ? { ...style, zIndex: zIndexFromProvider } : style}\n        {...props}\n      >\n        {props.children}\n        <TooltipPrimitive.Arrow className=\"fill-[#525867] stroke-[#525867] stroke-[2px] stroke-linejoin-round [paint-order:stroke_fill]\" />\n      </TooltipPrimitive.Content>\n    </TooltipPrimitive.Portal>\n  );\n});\n\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { FC, useEffect, useState, useRef, Component } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { SlotName } from \"@baishuyun/types\";\nimport { usePluginRuntime } from \"./context\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { TooltipProvider } from \"@/app/components/ui/tooltip\";\nimport { injectHostStylesIntoShadow } from \"@baishuyun/ai-feat-utils\";\n\n/**\n * 获取注册在指定插槽位的组件列表，组件会按照 weight 从大到小排序\n * @param slotName 插槽名称\n * @returns 组件列表\n */\nconst useSlotCom = (slotName: SlotName) => {\n  const { uiService } = usePluginRuntime();\n  const [components, setComponents] = useState(() => uiService.getComponents(slotName));\n\n  useEffect(() => {\n    setComponents(uiService.getComponents(slotName));\n\n    const unsubscribeSlotsChange = uiService.onSlotsChange(() => {\n      const comps = uiService.getComponents(slotName);\n      setComponents(comps);\n    });\n\n    return () => {\n      unsubscribeSlotsChange();\n    };\n  }, [slotName, uiService]);\n\n  return components;\n}\n\nexport interface ISlotProps {\n  slotName: SlotName;\n  placeholder?: React.ReactNode;\n  payload?: unknown\n}\n\ninterface ISandBoxProps {\n  children: React.ReactNode | React.ReactNode[];\n}\n\ninterface ISandBoxState {\n  hasError: boolean;\n}\n\nclass SlotComSandBox extends Component<ISandBoxProps, ISandBoxState> {\n  constructor(props: ISandBoxProps) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  static getDerivedStateFromError(_error: Error): ISandBoxState {\n    return { hasError: true };\n  }\n\n  componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n    console.error(`[SlotComSandBox] 捕获到渲染异常:`, error, errorInfo);\n  }\n\n  render() {\n    if (this.state.hasError) {\n      return null;\n    }\n    return (\n\n      <TooltipProvider\n        delayDuration={100}\n        zIndex={999}\n      >\n        {this.props.children}\n      </TooltipProvider>\n    )\n  }\n}\n\ninterface IShadowSlotRenderProps {\n  component: React.ComponentType<IRegisteredSlotComProps>;\n  payload?: unknown;\n  style?: string;\n}\n\nconst ShadowSlotRender: FC<IShadowSlotRenderProps> = ({ component: Component, payload, style }) => {\n  const hostRef = useRef<HTMLDivElement>(null);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    const host = hostRef.current;\n    if (!host) return;\n\n    // Reuse existing shadow root on StrictMode double-mount\n    let shadowRoot = host.shadowRoot;\n    if (!shadowRoot) {\n      shadowRoot = host.attachShadow({ mode: 'open' });\n\n\n      if (style) {\n        const styleEl = document.createElement('style');\n        styleEl.innerHTML = style;\n        shadowRoot.appendChild(styleEl);\n      }\n\n      const container = document.createElement('div');\n      container.style.display = 'contents';\n      shadowRoot.appendChild(container);\n      setPortalContainer(container);\n\n      injectHostStylesIntoShadow(shadowRoot, host);\n    } else {\n      // On re-mount after StrictMode double-fire, reuse existing container\n      const container = shadowRoot.firstElementChild instanceof HTMLStyleElement\n        ? shadowRoot.firstElementChild.nextElementSibling\n        : shadowRoot.firstElementChild;\n      if (container instanceof HTMLElement) setPortalContainer(container);\n    }\n\n    return () => {\n      setPortalContainer(null);\n    };\n  }, []);\n\n  return (\n    <>\n      <div ref={hostRef} style={{ display: 'contents' }} />\n      {portalContainer && createPortal(<Component payload={payload} />, portalContainer)}\n    </>\n  );\n};\n\nexport const Slot: FC<ISlotProps> = ({ slotName, placeholder, payload }) => {\n  const components = useSlotCom(slotName);\n\n  if (components.length === 0) {\n    return <>{placeholder}</>;\n  }\n\n  const visibleComponents = payload !== undefined\n    ? components.filter(({ matcher }) => !matcher || matcher(payload))\n    : components;\n\n  if (visibleComponents.length === 0) {\n    return <>{placeholder}</>;\n  }\n\n  return (\n    <SlotComSandBox>\n      {\n        visibleComponents.map(({ id, component: Component, shadow, style }) => {\n          const Com = Component as React.ComponentType<IRegisteredSlotComProps>;\n          if (shadow) {\n            return <ShadowSlotRender key={id} component={Com} payload={payload} style={style} />;\n          }\n          return <Com key={id} payload={payload} />;\n        })\n      }\n    </SlotComSandBox>\n  );\n}","import { HookPoint } from '@baishuyun/types';\nimport { usePluginRuntime } from './context';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface IUseRunnerOpt {\n  hookPoint: HookPoint;\n  onMiddlewareChange?: (hook: HookPoint) => void;\n}\n\nconst noop: <T>(_: T) => void = (_) => {};\n\nconst asyncNoop: <T>(_: T) => Promise<T> = async (d) => {\n  return d;\n};\n\nconst useMiddlewareRunner = <T>({\n  hookPoint,\n  onMiddlewareChange = noop,\n}: {\n  hookPoint: HookPoint;\n  onMiddlewareChange?: (hook: HookPoint) => void;\n}) => {\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const { uiService } = usePluginRuntime();\n\n  const run = useCallback(\n    async (input: T) => {\n      setLoading(true);\n      setError(null);\n      try {\n        const result = await uiService.runMiddlewares(hookPoint, input);\n        setLoading(false);\n        return result;\n      } catch (err) {\n        setError(err instanceof Error ? err : new Error(String(err)));\n        setLoading(false);\n        throw err;\n      }\n    },\n    [uiService, hookPoint]\n  );\n\n  useEffect(() => {\n    const unsubscribe = uiService.onMiddlewareChange((changedHook) => {\n      if (changedHook === hookPoint) {\n        onMiddlewareChange(changedHook);\n      }\n    });\n    return () => {\n      unsubscribe();\n    };\n  }, []);\n\n  return {\n    loading,\n    error,\n    run,\n  };\n};\n\nexport const useTransformedData = <T>(hookPoint: HookPoint, data: T) => {\n  const [result, setResult] = useState<T>(data);\n\n  const runnerRef = useRef<(input: T) => Promise<T>>(asyncNoop);\n\n  const onMiddlewareChange = useCallback(() => {\n    runnerRef.current?.(data).then(setResult);\n  }, [data]);\n\n  const { run } = useMiddlewareRunner<T>({\n    hookPoint,\n    onMiddlewareChange,\n  });\n\n  useEffect(() => {\n    runnerRef.current = run;\n  }, [run]);\n\n  useEffect(() => {\n    run(data).then(setResult);\n  }, [run, data]);\n\n  return {\n    result,\n  };\n};\n","import { useTransformedData } from '@/core/react-adapter/middlewares';\nimport { ChatMessage, UseChatHelpers } from '@baishuyun/types';\nimport { useCallback } from 'react';\nimport { useAIOfficeStore } from '../store/use-ai-office-store';\n\ntype regenerateFn = UseChatHelpers<ChatMessage>['regenerate'];\n\nexport const useMsgRegenerator = (message: ChatMessage, regenerate: regenerateFn | undefined) => {\n  const body = useTransformedData('transform-send-message-body', undefined);\n\n  const currentWorkingAgent = useAIOfficeStore((state) => state.activeAgent)?.id;\n\n  const handleGenerate = useCallback(() => {\n    regenerate?.({\n      messageId: message.id,\n      body: body.result,\n      headers: {\n        'X-Bot-Id': currentWorkingAgent!,\n      },\n    });\n  }, [message.id, regenerate, body, currentWorkingAgent]);\n\n  if (!regenerate) {\n    return undefined;\n  }\n\n  return handleGenerate;\n};\n","import { usePluginRuntime } from '@/core/react-adapter/context';\n\nexport const useServiceGetter = () => {\n  const runtime = usePluginRuntime();\n  return runtime.serviceRegistry.get.bind(runtime.serviceRegistry);\n};\n","'use client';\nimport type { ChatMessage, UseChatHelpers } from '@baishuyun/types';\nimport { PreviewMessageWrapper } from './preview-message-wrapper';\nimport { MarkdownMsgpart } from './markdown-part';\nimport { ErrorBoundary } from './error-boundary';\nimport {\n  GetSpecialPartType,\n  IsAgentCallingPart,\n} from '@/lib/utils';\nimport { Slot } from '@/core/react-adapter/slots';\nimport { IAIOfficeMsgMeta } from '@/app/types/IAIOffice';\nimport { useAIOfficeStore } from '@/app/store/use-ai-office-store';\nimport { useTransformedData } from '@/core/react-adapter/middlewares';\nimport { TextUIPart } from 'ai';\nimport { useMsgRegenerator } from '@/app/hooks/use-regenerator';\nimport { useServiceGetter } from '@/app/hooks/use-service-registry';\n\nconst PurePreviewMessage = ({\n  message,\n  isLoading,\n  addToolOutput,\n  sendMessage,\n  setMessages,\n  status,\n  regenerate,\n  requiresScrollPadding,\n}: {\n  message: ChatMessage;\n  isLoading?: boolean;\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n  status: UseChatHelpers<ChatMessage>['status'];\n  sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n  addToolOutput: UseChatHelpers<ChatMessage>['addToolOutput'];\n  regenerate?: UseChatHelpers<ChatMessage>['regenerate'];\n  isReadonly?: boolean;\n  requiresScrollPadding?: boolean;\n}) => {\n  const hasTextPart = message.parts?.some(\n    (p: { type: string; text?: string }) => p.type === 'text' && p.text?.trim()\n  );\n\n  const hasFileType = message.parts?.some((p: any) => {\n    if (Array.isArray(p)) {\n      return p.some((subP) => subP?.type === 'file');\n    }\n    return p?.type === 'file';\n  });\n\n  const currentWorkingAgent = useAIOfficeStore((state) => state.activeAgent);\n\n  const { result: transformedParts } = useTransformedData('transform-preview-message-parts', message?.parts);\n\n  const getService = useServiceGetter();\n\n  const bsPlatformBasicService = getService('bsPlatformService');\n\n  const generator = useMsgRegenerator(message, regenerate);\n\n  const handleCopy = () => {\n    const textParts = message.parts\n      ?.filter((part) => part.type === 'text' && part.text)\n      .map((part) => (part as TextUIPart).text)\n      .join('\\n');\n\n    if (textParts) {\n      try {\n        bsPlatformBasicService?.copyToClipboard?.(textParts);\n\n        bsPlatformBasicService?.toast?.({\n          type: 'success',\n          msg: '消息内容已复制到剪贴板',\n        });\n\n      } catch (err) {}\n    }\n  }\n\n\n  return (\n    <PreviewMessageWrapper\n      role={message.role}\n      agentId={(message.metadata! as IAIOfficeMsgMeta)?.agentId}\n      onCopy={handleCopy}\n      onGenerate={generator}\n      isLoading={isLoading}\n      requiresScrollPadding={requiresScrollPadding}\n      hasTextPart={hasTextPart}\n      hasFileType={hasFileType}\n    >\n      {transformedParts.map((part: any, index: number) => {\n        const key = `message-${message.id}-part-${index}-${Array.isArray(part) ? part[0]?.type || 'group' : part.type}`;\n\n        const type = GetSpecialPartType(part);\n\n        if (type === 'error-bot-id-required') {\n          return (\n            <Slot key={key} slotName='empty-bot-part' payload={type} />\n          )\n        }\n\n        if (IsAgentCallingPart(part)) {\n          return (\n            <Slot key={key} slotName='agent-calling-part' payload={part} />\n          )\n        }\n\n        const slotProps = {\n          title: currentWorkingAgent?.name,\n          setMessages,\n          sendMessage,\n          addToolOutput,\n          isLoading,\n          status,\n          part,\n          key,\n          index,\n          role: message.role,\n          id: message.id\n        }\n\n        // if (message.role === 'user') {\n        //   return (\n        //     <MarkdownMsgpart\n        //       {...slotProps}\n        //     />\n        //   );\n        // }\n\n        return (\n          <Slot\n            key={key}\n            slotName='msg-part'\n            payload={slotProps}\n            placeholder={(\n              <ErrorBoundary>\n                <MarkdownMsgpart\n                  {...slotProps}\n                />\n              </ErrorBoundary>\n            )}\n          />\n        );\n      })}\n    </PreviewMessageWrapper>\n  );\n};\n\nexport const PreviewMessage = PurePreviewMessage;\n","import { useAIOfficeStore } from '@/app/store/use-ai-office-store';\nimport { OpeningLinesProps } from '@baishuyun/types';\nimport { Slot } from '@/core/react-adapter/slots';\n\nexport const OpeningLines = (_: OpeningLinesProps) => {\n  const activeAgent = useAIOfficeStore(s => s.activeAgent);\n  return <Slot slotName=\"opening-lines\" payload={activeAgent?.id}></Slot>\n};\n","import { MessagesProps } from '@baishuyun/types';\nimport { Conversation, ConversationContent, ConversationScrollButton } from './conversation';\nimport { PreviewMessage } from './preview-message';\nimport { FakeBotMessage } from '@baishuyun/ai-design';\nimport { OpeningLines } from './opening-lines';\nimport { useRef } from 'react';\n// import { GenerateAnimation } from '@baishuyun/ai-design/generate-animation';\n\nexport const Messages = (props: MessagesProps) => {\n  const messagesContainerRef = useRef(null);\n\n  const { messages, setMessages, addToolOutput, sendMessage, regenerate } = props;\n\n  // const { globalFakeLoadingMessage } = useFakeGlobalLoadingMessage();\n  // const globalFakeLoadingMessage = null;\n\n  return (\n    <div\n      className=\"relative overscroll-behavior-contain -webkit-overflow-scrolling-touch flex-1 touch-pan-y overflow-y-auto m-h-0 h-full\"\n      ref={messagesContainerRef}\n      style={{ overflowAnchor: 'none', overscrollBehavior: 'contain' }}\n    >\n      <Conversation className=\"mx-auto flex min-w-0 max-w-4xl flex-col\">\n        <ConversationContent className=\"flex flex-col px-2 py-4 md:px-4\">\n          {messages.length === 0 && (\n            <FakeBotMessage>\n              <OpeningLines sendMessage={sendMessage} setMessages={setMessages} />\n            </FakeBotMessage>\n          )}\n          {messages.map((message, index) => {\n            const isLast = index === messages.length - 1;\n            return (\n              <PreviewMessage\n                isLoading={props.status === 'streaming' && isLast}\n                regenerate={isLast ? regenerate : undefined}\n                status={props.status}\n                key={message.id}\n                addToolOutput={addToolOutput}\n                sendMessage={props.sendMessage}\n                message={message}\n                setMessages={setMessages}\n              />\n            );\n          })}\n\n          {/* {globalFakeLoadingMessage && (\n            <FakeBotMessage key={'fake'}>\n              <GenerateAnimation>{globalFakeLoadingMessage}</GenerateAnimation>\n            </FakeBotMessage>\n          )} */}\n        </ConversationContent>\n        <ConversationScrollButton />\n      </Conversation>\n    </div>\n  );\n};\n","import { ReactNode } from \"react\";\n\nexport const ChatFrame = (props: {\n  messagesArea: ReactNode;\n  inputArea: ReactNode;\n}) => {\n  const { messagesArea, inputArea } = props;\n\n  return (\n    <div className=\"chat-frame flex flex-col h-full min-h-0\">\n      <div\n        className=\"messages-area flex-1 flex m-h-0\"\n        style={{ flex: \"1 1 auto\", minHeight: 0 }}\n      >\n        {messagesArea}\n      </div>\n      <div\n        style={{ flex: \"0 0 auto\", minHeight: 100 }}\n        className=\"input-area flex-0 shrink-0 p-4 flex flex-col gap-2.5\"\n      >\n        {inputArea}\n      </div>\n    </div>\n  );\n};\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n  'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n  {\n    variants: {\n      variant: {\n        default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n        destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n        outline:\n          'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n        secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n        ghost: 'hover:bg-accent hover:text-accent-foreground',\n        link: 'text-primary underline-offset-4 hover:underline',\n        entry: '',\n      },\n      size: {\n        default: 'h-[34px] px-4 py-2',\n        sm: 'h-8 rounded-md px-3 text-xs',\n        lg: 'h-10 rounded-md px-8',\n        icon: 'h-[24px] w-[24px]',\n        entry: 'h-[30px] px-1.5 py-0 gap-1.5',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  }\n);\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : 'button';\n    return (\n      <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n    );\n  }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDown className=\"h-4 w-4 opacity-50\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronUp className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronDown className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n  <SelectPrimitive.Portal>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]\",\n        position === \"popper\" &&\n          \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n        className\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectScrollUpButton />\n      <SelectPrimitive.Viewport\n        className={cn(\n          \"p-1\",\n          position === \"popper\" &&\n            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n      <SelectScrollDownButton />\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n    {...props}\n  />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    {...props}\n  >\n    <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </SelectPrimitive.ItemIndicator>\n    </span>\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n  </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Slot } from \"@/core/react-adapter/slots\";\n\nconst Textarea = React.forwardRef<\n  HTMLTextAreaElement,\n  React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref: React.ForwardedRef<HTMLTextAreaElement>) => {\n  return (\n    <div className=\"relative grow\">\n      <div className=\"absolute top-0 left-0\">\n        <Slot slotName=\"input-top-left\" />\n      </div>\n      <textarea\n        className={cn(\n          \"flex min-h-15 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    </div>\n  );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","// Generated by scripts/generate-bidi-data.ts from scripts/unicode/DerivedBidiClass-17.0.0.txt.\n// Do not edit by hand. Regenerate with `bun run generate:bidi-data`.\n// Formatting and isolate controls are projected onto `BN` because the rich\n// bidi helper consumes a simplified class set and does not model UBA isolates.\nexport const unicodeBidiDataVersion = '17.0.0';\nexport const latin1BidiTypes = [\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'S',\n    'B',\n    'S',\n    'WS',\n    'B',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'B',\n    'B',\n    'B',\n    'S',\n    'WS',\n    'ON',\n    'ON',\n    'ET',\n    'ET',\n    'ET',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ES',\n    'CS',\n    'ES',\n    'CS',\n    'CS',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'EN',\n    'CS',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'B',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'BN',\n    'CS',\n    'ON',\n    'ET',\n    'ET',\n    'ET',\n    'ET',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'L',\n    'ON',\n    'ON',\n    'BN',\n    'ON',\n    'ON',\n    'ET',\n    'ET',\n    'EN',\n    'EN',\n    'ON',\n    'L',\n    'ON',\n    'ON',\n    'ON',\n    'EN',\n    'L',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'ON',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'ON',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'ON',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n    'L',\n];\nexport const nonLatin1BidiRanges = [\n    [0x2B9, 0x2BA, 'ON'],\n    [0x2C2, 0x2CF, 'ON'],\n    [0x2D2, 0x2DF, 'ON'],\n    [0x2E5, 0x2ED, 'ON'],\n    [0x2EF, 0x2FF, 'ON'],\n    [0x300, 0x36F, 'NSM'],\n    [0x374, 0x375, 'ON'],\n    [0x37E, 0x37E, 'ON'],\n    [0x384, 0x385, 'ON'],\n    [0x387, 0x387, 'ON'],\n    [0x3F6, 0x3F6, 'ON'],\n    [0x483, 0x489, 'NSM'],\n    [0x58A, 0x58A, 'ON'],\n    [0x58D, 0x58E, 'ON'],\n    [0x58F, 0x58F, 'ET'],\n    [0x590, 0x590, 'R'],\n    [0x591, 0x5BD, 'NSM'],\n    [0x5BE, 0x5BE, 'R'],\n    [0x5BF, 0x5BF, 'NSM'],\n    [0x5C0, 0x5C0, 'R'],\n    [0x5C1, 0x5C2, 'NSM'],\n    [0x5C3, 0x5C3, 'R'],\n    [0x5C4, 0x5C5, 'NSM'],\n    [0x5C6, 0x5C6, 'R'],\n    [0x5C7, 0x5C7, 'NSM'],\n    [0x5C8, 0x5FF, 'R'],\n    [0x600, 0x605, 'AN'],\n    [0x606, 0x607, 'ON'],\n    [0x608, 0x608, 'AL'],\n    [0x609, 0x60A, 'ET'],\n    [0x60B, 0x60B, 'AL'],\n    [0x60C, 0x60C, 'CS'],\n    [0x60D, 0x60D, 'AL'],\n    [0x60E, 0x60F, 'ON'],\n    [0x610, 0x61A, 'NSM'],\n    [0x61B, 0x64A, 'AL'],\n    [0x64B, 0x65F, 'NSM'],\n    [0x660, 0x669, 'AN'],\n    [0x66A, 0x66A, 'ET'],\n    [0x66B, 0x66C, 'AN'],\n    [0x66D, 0x66F, 'AL'],\n    [0x670, 0x670, 'NSM'],\n    [0x671, 0x6D5, 'AL'],\n    [0x6D6, 0x6DC, 'NSM'],\n    [0x6DD, 0x6DD, 'AN'],\n    [0x6DE, 0x6DE, 'ON'],\n    [0x6DF, 0x6E4, 'NSM'],\n    [0x6E5, 0x6E6, 'AL'],\n    [0x6E7, 0x6E8, 'NSM'],\n    [0x6E9, 0x6E9, 'ON'],\n    [0x6EA, 0x6ED, 'NSM'],\n    [0x6EE, 0x6EF, 'AL'],\n    [0x6F0, 0x6F9, 'EN'],\n    [0x6FA, 0x710, 'AL'],\n    [0x711, 0x711, 'NSM'],\n    [0x712, 0x72F, 'AL'],\n    [0x730, 0x74A, 'NSM'],\n    [0x74B, 0x7A5, 'AL'],\n    [0x7A6, 0x7B0, 'NSM'],\n    [0x7B1, 0x7BF, 'AL'],\n    [0x7C0, 0x7EA, 'R'],\n    [0x7EB, 0x7F3, 'NSM'],\n    [0x7F4, 0x7F5, 'R'],\n    [0x7F6, 0x7F9, 'ON'],\n    [0x7FA, 0x7FC, 'R'],\n    [0x7FD, 0x7FD, 'NSM'],\n    [0x7FE, 0x815, 'R'],\n    [0x816, 0x819, 'NSM'],\n    [0x81A, 0x81A, 'R'],\n    [0x81B, 0x823, 'NSM'],\n    [0x824, 0x824, 'R'],\n    [0x825, 0x827, 'NSM'],\n    [0x828, 0x828, 'R'],\n    [0x829, 0x82D, 'NSM'],\n    [0x82E, 0x858, 'R'],\n    [0x859, 0x85B, 'NSM'],\n    [0x85C, 0x85F, 'R'],\n    [0x860, 0x88F, 'AL'],\n    [0x890, 0x891, 'AN'],\n    [0x892, 0x896, 'AL'],\n    [0x897, 0x89F, 'NSM'],\n    [0x8A0, 0x8C9, 'AL'],\n    [0x8CA, 0x8E1, 'NSM'],\n    [0x8E2, 0x8E2, 'AN'],\n    [0x8E3, 0x902, 'NSM'],\n    [0x93A, 0x93A, 'NSM'],\n    [0x93C, 0x93C, 'NSM'],\n    [0x941, 0x948, 'NSM'],\n    [0x94D, 0x94D, 'NSM'],\n    [0x951, 0x957, 'NSM'],\n    [0x962, 0x963, 'NSM'],\n    [0x981, 0x981, 'NSM'],\n    [0x9BC, 0x9BC, 'NSM'],\n    [0x9C1, 0x9C4, 'NSM'],\n    [0x9CD, 0x9CD, 'NSM'],\n    [0x9E2, 0x9E3, 'NSM'],\n    [0x9F2, 0x9F3, 'ET'],\n    [0x9FB, 0x9FB, 'ET'],\n    [0x9FE, 0x9FE, 'NSM'],\n    [0xA01, 0xA02, 'NSM'],\n    [0xA3C, 0xA3C, 'NSM'],\n    [0xA41, 0xA42, 'NSM'],\n    [0xA47, 0xA48, 'NSM'],\n    [0xA4B, 0xA4D, 'NSM'],\n    [0xA51, 0xA51, 'NSM'],\n    [0xA70, 0xA71, 'NSM'],\n    [0xA75, 0xA75, 'NSM'],\n    [0xA81, 0xA82, 'NSM'],\n    [0xABC, 0xABC, 'NSM'],\n    [0xAC1, 0xAC5, 'NSM'],\n    [0xAC7, 0xAC8, 'NSM'],\n    [0xACD, 0xACD, 'NSM'],\n    [0xAE2, 0xAE3, 'NSM'],\n    [0xAF1, 0xAF1, 'ET'],\n    [0xAFA, 0xAFF, 'NSM'],\n    [0xB01, 0xB01, 'NSM'],\n    [0xB3C, 0xB3C, 'NSM'],\n    [0xB3F, 0xB3F, 'NSM'],\n    [0xB41, 0xB44, 'NSM'],\n    [0xB4D, 0xB4D, 'NSM'],\n    [0xB55, 0xB56, 'NSM'],\n    [0xB62, 0xB63, 'NSM'],\n    [0xB82, 0xB82, 'NSM'],\n    [0xBC0, 0xBC0, 'NSM'],\n    [0xBCD, 0xBCD, 'NSM'],\n    [0xBF3, 0xBF8, 'ON'],\n    [0xBF9, 0xBF9, 'ET'],\n    [0xBFA, 0xBFA, 'ON'],\n    [0xC00, 0xC00, 'NSM'],\n    [0xC04, 0xC04, 'NSM'],\n    [0xC3C, 0xC3C, 'NSM'],\n    [0xC3E, 0xC40, 'NSM'],\n    [0xC46, 0xC48, 'NSM'],\n    [0xC4A, 0xC4D, 'NSM'],\n    [0xC55, 0xC56, 'NSM'],\n    [0xC62, 0xC63, 'NSM'],\n    [0xC78, 0xC7E, 'ON'],\n    [0xC81, 0xC81, 'NSM'],\n    [0xCBC, 0xCBC, 'NSM'],\n    [0xCCC, 0xCCD, 'NSM'],\n    [0xCE2, 0xCE3, 'NSM'],\n    [0xD00, 0xD01, 'NSM'],\n    [0xD3B, 0xD3C, 'NSM'],\n    [0xD41, 0xD44, 'NSM'],\n    [0xD4D, 0xD4D, 'NSM'],\n    [0xD62, 0xD63, 'NSM'],\n    [0xD81, 0xD81, 'NSM'],\n    [0xDCA, 0xDCA, 'NSM'],\n    [0xDD2, 0xDD4, 'NSM'],\n    [0xDD6, 0xDD6, 'NSM'],\n    [0xE31, 0xE31, 'NSM'],\n    [0xE34, 0xE3A, 'NSM'],\n    [0xE3F, 0xE3F, 'ET'],\n    [0xE47, 0xE4E, 'NSM'],\n    [0xEB1, 0xEB1, 'NSM'],\n    [0xEB4, 0xEBC, 'NSM'],\n    [0xEC8, 0xECE, 'NSM'],\n    [0xF18, 0xF19, 'NSM'],\n    [0xF35, 0xF35, 'NSM'],\n    [0xF37, 0xF37, 'NSM'],\n    [0xF39, 0xF39, 'NSM'],\n    [0xF3A, 0xF3D, 'ON'],\n    [0xF71, 0xF7E, 'NSM'],\n    [0xF80, 0xF84, 'NSM'],\n    [0xF86, 0xF87, 'NSM'],\n    [0xF8D, 0xF97, 'NSM'],\n    [0xF99, 0xFBC, 'NSM'],\n    [0xFC6, 0xFC6, 'NSM'],\n    [0x102D, 0x1030, 'NSM'],\n    [0x1032, 0x1037, 'NSM'],\n    [0x1039, 0x103A, 'NSM'],\n    [0x103D, 0x103E, 'NSM'],\n    [0x1058, 0x1059, 'NSM'],\n    [0x105E, 0x1060, 'NSM'],\n    [0x1071, 0x1074, 'NSM'],\n    [0x1082, 0x1082, 'NSM'],\n    [0x1085, 0x1086, 'NSM'],\n    [0x108D, 0x108D, 'NSM'],\n    [0x109D, 0x109D, 'NSM'],\n    [0x135D, 0x135F, 'NSM'],\n    [0x1390, 0x1399, 'ON'],\n    [0x1400, 0x1400, 'ON'],\n    [0x1680, 0x1680, 'WS'],\n    [0x169B, 0x169C, 'ON'],\n    [0x1712, 0x1714, 'NSM'],\n    [0x1732, 0x1733, 'NSM'],\n    [0x1752, 0x1753, 'NSM'],\n    [0x1772, 0x1773, 'NSM'],\n    [0x17B4, 0x17B5, 'NSM'],\n    [0x17B7, 0x17BD, 'NSM'],\n    [0x17C6, 0x17C6, 'NSM'],\n    [0x17C9, 0x17D3, 'NSM'],\n    [0x17DB, 0x17DB, 'ET'],\n    [0x17DD, 0x17DD, 'NSM'],\n    [0x17F0, 0x17F9, 'ON'],\n    [0x1800, 0x180A, 'ON'],\n    [0x180B, 0x180D, 'NSM'],\n    [0x180E, 0x180E, 'BN'],\n    [0x180F, 0x180F, 'NSM'],\n    [0x1885, 0x1886, 'NSM'],\n    [0x18A9, 0x18A9, 'NSM'],\n    [0x1920, 0x1922, 'NSM'],\n    [0x1927, 0x1928, 'NSM'],\n    [0x1932, 0x1932, 'NSM'],\n    [0x1939, 0x193B, 'NSM'],\n    [0x1940, 0x1940, 'ON'],\n    [0x1944, 0x1945, 'ON'],\n    [0x19DE, 0x19FF, 'ON'],\n    [0x1A17, 0x1A18, 'NSM'],\n    [0x1A1B, 0x1A1B, 'NSM'],\n    [0x1A56, 0x1A56, 'NSM'],\n    [0x1A58, 0x1A5E, 'NSM'],\n    [0x1A60, 0x1A60, 'NSM'],\n    [0x1A62, 0x1A62, 'NSM'],\n    [0x1A65, 0x1A6C, 'NSM'],\n    [0x1A73, 0x1A7C, 'NSM'],\n    [0x1A7F, 0x1A7F, 'NSM'],\n    [0x1AB0, 0x1ADD, 'NSM'],\n    [0x1AE0, 0x1AEB, 'NSM'],\n    [0x1B00, 0x1B03, 'NSM'],\n    [0x1B34, 0x1B34, 'NSM'],\n    [0x1B36, 0x1B3A, 'NSM'],\n    [0x1B3C, 0x1B3C, 'NSM'],\n    [0x1B42, 0x1B42, 'NSM'],\n    [0x1B6B, 0x1B73, 'NSM'],\n    [0x1B80, 0x1B81, 'NSM'],\n    [0x1BA2, 0x1BA5, 'NSM'],\n    [0x1BA8, 0x1BA9, 'NSM'],\n    [0x1BAB, 0x1BAD, 'NSM'],\n    [0x1BE6, 0x1BE6, 'NSM'],\n    [0x1BE8, 0x1BE9, 'NSM'],\n    [0x1BED, 0x1BED, 'NSM'],\n    [0x1BEF, 0x1BF1, 'NSM'],\n    [0x1C2C, 0x1C33, 'NSM'],\n    [0x1C36, 0x1C37, 'NSM'],\n    [0x1CD0, 0x1CD2, 'NSM'],\n    [0x1CD4, 0x1CE0, 'NSM'],\n    [0x1CE2, 0x1CE8, 'NSM'],\n    [0x1CED, 0x1CED, 'NSM'],\n    [0x1CF4, 0x1CF4, 'NSM'],\n    [0x1CF8, 0x1CF9, 'NSM'],\n    [0x1DC0, 0x1DFF, 'NSM'],\n    [0x1FBD, 0x1FBD, 'ON'],\n    [0x1FBF, 0x1FC1, 'ON'],\n    [0x1FCD, 0x1FCF, 'ON'],\n    [0x1FDD, 0x1FDF, 'ON'],\n    [0x1FED, 0x1FEF, 'ON'],\n    [0x1FFD, 0x1FFE, 'ON'],\n    [0x2000, 0x200A, 'WS'],\n    [0x200B, 0x200D, 'BN'],\n    [0x200F, 0x200F, 'R'],\n    [0x2010, 0x2027, 'ON'],\n    [0x2028, 0x2028, 'WS'],\n    [0x2029, 0x2029, 'B'],\n    [0x202A, 0x202E, 'BN'],\n    [0x202F, 0x202F, 'CS'],\n    [0x2030, 0x2034, 'ET'],\n    [0x2035, 0x2043, 'ON'],\n    [0x2044, 0x2044, 'CS'],\n    [0x2045, 0x205E, 'ON'],\n    [0x205F, 0x205F, 'WS'],\n    [0x2060, 0x206F, 'BN'],\n    [0x2070, 0x2070, 'EN'],\n    [0x2074, 0x2079, 'EN'],\n    [0x207A, 0x207B, 'ES'],\n    [0x207C, 0x207E, 'ON'],\n    [0x2080, 0x2089, 'EN'],\n    [0x208A, 0x208B, 'ES'],\n    [0x208C, 0x208E, 'ON'],\n    [0x20A0, 0x20CF, 'ET'],\n    [0x20D0, 0x20F0, 'NSM'],\n    [0x2100, 0x2101, 'ON'],\n    [0x2103, 0x2106, 'ON'],\n    [0x2108, 0x2109, 'ON'],\n    [0x2114, 0x2114, 'ON'],\n    [0x2116, 0x2118, 'ON'],\n    [0x211E, 0x2123, 'ON'],\n    [0x2125, 0x2125, 'ON'],\n    [0x2127, 0x2127, 'ON'],\n    [0x2129, 0x2129, 'ON'],\n    [0x212E, 0x212E, 'ET'],\n    [0x213A, 0x213B, 'ON'],\n    [0x2140, 0x2144, 'ON'],\n    [0x214A, 0x214D, 'ON'],\n    [0x2150, 0x215F, 'ON'],\n    [0x2189, 0x218B, 'ON'],\n    [0x2190, 0x2211, 'ON'],\n    [0x2212, 0x2212, 'ES'],\n    [0x2213, 0x2213, 'ET'],\n    [0x2214, 0x2335, 'ON'],\n    [0x237B, 0x2394, 'ON'],\n    [0x2396, 0x2429, 'ON'],\n    [0x2440, 0x244A, 'ON'],\n    [0x2460, 0x2487, 'ON'],\n    [0x2488, 0x249B, 'EN'],\n    [0x24EA, 0x26AB, 'ON'],\n    [0x26AD, 0x27FF, 'ON'],\n    [0x2900, 0x2B73, 'ON'],\n    [0x2B76, 0x2BFF, 'ON'],\n    [0x2CE5, 0x2CEA, 'ON'],\n    [0x2CEF, 0x2CF1, 'NSM'],\n    [0x2CF9, 0x2CFF, 'ON'],\n    [0x2D7F, 0x2D7F, 'NSM'],\n    [0x2DE0, 0x2DFF, 'NSM'],\n    [0x2E00, 0x2E5D, 'ON'],\n    [0x2E80, 0x2E99, 'ON'],\n    [0x2E9B, 0x2EF3, 'ON'],\n    [0x2F00, 0x2FD5, 'ON'],\n    [0x2FF0, 0x2FFF, 'ON'],\n    [0x3000, 0x3000, 'WS'],\n    [0x3001, 0x3004, 'ON'],\n    [0x3008, 0x3020, 'ON'],\n    [0x302A, 0x302D, 'NSM'],\n    [0x3030, 0x3030, 'ON'],\n    [0x3036, 0x3037, 'ON'],\n    [0x303D, 0x303F, 'ON'],\n    [0x3099, 0x309A, 'NSM'],\n    [0x309B, 0x309C, 'ON'],\n    [0x30A0, 0x30A0, 'ON'],\n    [0x30FB, 0x30FB, 'ON'],\n    [0x31C0, 0x31E5, 'ON'],\n    [0x31EF, 0x31EF, 'ON'],\n    [0x321D, 0x321E, 'ON'],\n    [0x3250, 0x325F, 'ON'],\n    [0x327C, 0x327E, 'ON'],\n    [0x32B1, 0x32BF, 'ON'],\n    [0x32CC, 0x32CF, 'ON'],\n    [0x3377, 0x337A, 'ON'],\n    [0x33DE, 0x33DF, 'ON'],\n    [0x33FF, 0x33FF, 'ON'],\n    [0x4DC0, 0x4DFF, 'ON'],\n    [0xA490, 0xA4C6, 'ON'],\n    [0xA60D, 0xA60F, 'ON'],\n    [0xA66F, 0xA672, 'NSM'],\n    [0xA673, 0xA673, 'ON'],\n    [0xA674, 0xA67D, 'NSM'],\n    [0xA67E, 0xA67F, 'ON'],\n    [0xA69E, 0xA69F, 'NSM'],\n    [0xA6F0, 0xA6F1, 'NSM'],\n    [0xA700, 0xA721, 'ON'],\n    [0xA788, 0xA788, 'ON'],\n    [0xA802, 0xA802, 'NSM'],\n    [0xA806, 0xA806, 'NSM'],\n    [0xA80B, 0xA80B, 'NSM'],\n    [0xA825, 0xA826, 'NSM'],\n    [0xA828, 0xA82B, 'ON'],\n    [0xA82C, 0xA82C, 'NSM'],\n    [0xA838, 0xA839, 'ET'],\n    [0xA874, 0xA877, 'ON'],\n    [0xA8C4, 0xA8C5, 'NSM'],\n    [0xA8E0, 0xA8F1, 'NSM'],\n    [0xA8FF, 0xA8FF, 'NSM'],\n    [0xA926, 0xA92D, 'NSM'],\n    [0xA947, 0xA951, 'NSM'],\n    [0xA980, 0xA982, 'NSM'],\n    [0xA9B3, 0xA9B3, 'NSM'],\n    [0xA9B6, 0xA9B9, 'NSM'],\n    [0xA9BC, 0xA9BD, 'NSM'],\n    [0xA9E5, 0xA9E5, 'NSM'],\n    [0xAA29, 0xAA2E, 'NSM'],\n    [0xAA31, 0xAA32, 'NSM'],\n    [0xAA35, 0xAA36, 'NSM'],\n    [0xAA43, 0xAA43, 'NSM'],\n    [0xAA4C, 0xAA4C, 'NSM'],\n    [0xAA7C, 0xAA7C, 'NSM'],\n    [0xAAB0, 0xAAB0, 'NSM'],\n    [0xAAB2, 0xAAB4, 'NSM'],\n    [0xAAB7, 0xAAB8, 'NSM'],\n    [0xAABE, 0xAABF, 'NSM'],\n    [0xAAC1, 0xAAC1, 'NSM'],\n    [0xAAEC, 0xAAED, 'NSM'],\n    [0xAAF6, 0xAAF6, 'NSM'],\n    [0xAB6A, 0xAB6B, 'ON'],\n    [0xABE5, 0xABE5, 'NSM'],\n    [0xABE8, 0xABE8, 'NSM'],\n    [0xABED, 0xABED, 'NSM'],\n    [0xFB1D, 0xFB1D, 'R'],\n    [0xFB1E, 0xFB1E, 'NSM'],\n    [0xFB1F, 0xFB28, 'R'],\n    [0xFB29, 0xFB29, 'ES'],\n    [0xFB2A, 0xFB4F, 'R'],\n    [0xFB50, 0xFBC2, 'AL'],\n    [0xFBC3, 0xFBD2, 'ON'],\n    [0xFBD3, 0xFD3D, 'AL'],\n    [0xFD3E, 0xFD4F, 'ON'],\n    [0xFD50, 0xFD8F, 'AL'],\n    [0xFD90, 0xFD91, 'ON'],\n    [0xFD92, 0xFDC7, 'AL'],\n    [0xFDC8, 0xFDCF, 'ON'],\n    [0xFDD0, 0xFDEF, 'BN'],\n    [0xFDF0, 0xFDFC, 'AL'],\n    [0xFDFD, 0xFDFF, 'ON'],\n    [0xFE00, 0xFE0F, 'NSM'],\n    [0xFE10, 0xFE19, 'ON'],\n    [0xFE20, 0xFE2F, 'NSM'],\n    [0xFE30, 0xFE4F, 'ON'],\n    [0xFE50, 0xFE50, 'CS'],\n    [0xFE51, 0xFE51, 'ON'],\n    [0xFE52, 0xFE52, 'CS'],\n    [0xFE54, 0xFE54, 'ON'],\n    [0xFE55, 0xFE55, 'CS'],\n    [0xFE56, 0xFE5E, 'ON'],\n    [0xFE5F, 0xFE5F, 'ET'],\n    [0xFE60, 0xFE61, 'ON'],\n    [0xFE62, 0xFE63, 'ES'],\n    [0xFE64, 0xFE66, 'ON'],\n    [0xFE68, 0xFE68, 'ON'],\n    [0xFE69, 0xFE6A, 'ET'],\n    [0xFE6B, 0xFE6B, 'ON'],\n    [0xFE70, 0xFEFE, 'AL'],\n    [0xFEFF, 0xFEFF, 'BN'],\n    [0xFF01, 0xFF02, 'ON'],\n    [0xFF03, 0xFF05, 'ET'],\n    [0xFF06, 0xFF0A, 'ON'],\n    [0xFF0B, 0xFF0B, 'ES'],\n    [0xFF0C, 0xFF0C, 'CS'],\n    [0xFF0D, 0xFF0D, 'ES'],\n    [0xFF0E, 0xFF0F, 'CS'],\n    [0xFF10, 0xFF19, 'EN'],\n    [0xFF1A, 0xFF1A, 'CS'],\n    [0xFF1B, 0xFF20, 'ON'],\n    [0xFF3B, 0xFF40, 'ON'],\n    [0xFF5B, 0xFF65, 'ON'],\n    [0xFFE0, 0xFFE1, 'ET'],\n    [0xFFE2, 0xFFE4, 'ON'],\n    [0xFFE5, 0xFFE6, 'ET'],\n    [0xFFE8, 0xFFEE, 'ON'],\n    [0xFFF0, 0xFFF8, 'BN'],\n    [0xFFF9, 0xFFFD, 'ON'],\n    [0xFFFE, 0xFFFF, 'BN'],\n    [0x10101, 0x10101, 'ON'],\n    [0x10140, 0x1018C, 'ON'],\n    [0x10190, 0x1019C, 'ON'],\n    [0x101A0, 0x101A0, 'ON'],\n    [0x101FD, 0x101FD, 'NSM'],\n    [0x102E0, 0x102E0, 'NSM'],\n    [0x102E1, 0x102FB, 'EN'],\n    [0x10376, 0x1037A, 'NSM'],\n    [0x10800, 0x1091E, 'R'],\n    [0x1091F, 0x1091F, 'ON'],\n    [0x10920, 0x10A00, 'R'],\n    [0x10A01, 0x10A03, 'NSM'],\n    [0x10A04, 0x10A04, 'R'],\n    [0x10A05, 0x10A06, 'NSM'],\n    [0x10A07, 0x10A0B, 'R'],\n    [0x10A0C, 0x10A0F, 'NSM'],\n    [0x10A10, 0x10A37, 'R'],\n    [0x10A38, 0x10A3A, 'NSM'],\n    [0x10A3B, 0x10A3E, 'R'],\n    [0x10A3F, 0x10A3F, 'NSM'],\n    [0x10A40, 0x10AE4, 'R'],\n    [0x10AE5, 0x10AE6, 'NSM'],\n    [0x10AE7, 0x10B38, 'R'],\n    [0x10B39, 0x10B3F, 'ON'],\n    [0x10B40, 0x10CFF, 'R'],\n    [0x10D00, 0x10D23, 'AL'],\n    [0x10D24, 0x10D27, 'NSM'],\n    [0x10D28, 0x10D2F, 'AL'],\n    [0x10D30, 0x10D39, 'AN'],\n    [0x10D3A, 0x10D3F, 'AL'],\n    [0x10D40, 0x10D49, 'AN'],\n    [0x10D4A, 0x10D68, 'R'],\n    [0x10D69, 0x10D6D, 'NSM'],\n    [0x10D6E, 0x10D6E, 'ON'],\n    [0x10D6F, 0x10E5F, 'R'],\n    [0x10E60, 0x10E7E, 'AN'],\n    [0x10E7F, 0x10EAA, 'R'],\n    [0x10EAB, 0x10EAC, 'NSM'],\n    [0x10EAD, 0x10EBF, 'R'],\n    [0x10EC0, 0x10ECF, 'AL'],\n    [0x10ED0, 0x10ED8, 'ON'],\n    [0x10ED9, 0x10EF9, 'AL'],\n    [0x10EFA, 0x10EFF, 'NSM'],\n    [0x10F00, 0x10F2F, 'R'],\n    [0x10F30, 0x10F45, 'AL'],\n    [0x10F46, 0x10F50, 'NSM'],\n    [0x10F51, 0x10F6F, 'AL'],\n    [0x10F70, 0x10F81, 'R'],\n    [0x10F82, 0x10F85, 'NSM'],\n    [0x10F86, 0x10FFF, 'R'],\n    [0x11001, 0x11001, 'NSM'],\n    [0x11038, 0x11046, 'NSM'],\n    [0x11052, 0x11065, 'ON'],\n    [0x11070, 0x11070, 'NSM'],\n    [0x11073, 0x11074, 'NSM'],\n    [0x1107F, 0x11081, 'NSM'],\n    [0x110B3, 0x110B6, 'NSM'],\n    [0x110B9, 0x110BA, 'NSM'],\n    [0x110C2, 0x110C2, 'NSM'],\n    [0x11100, 0x11102, 'NSM'],\n    [0x11127, 0x1112B, 'NSM'],\n    [0x1112D, 0x11134, 'NSM'],\n    [0x11173, 0x11173, 'NSM'],\n    [0x11180, 0x11181, 'NSM'],\n    [0x111B6, 0x111BE, 'NSM'],\n    [0x111C9, 0x111CC, 'NSM'],\n    [0x111CF, 0x111CF, 'NSM'],\n    [0x1122F, 0x11231, 'NSM'],\n    [0x11234, 0x11234, 'NSM'],\n    [0x11236, 0x11237, 'NSM'],\n    [0x1123E, 0x1123E, 'NSM'],\n    [0x11241, 0x11241, 'NSM'],\n    [0x112DF, 0x112DF, 'NSM'],\n    [0x112E3, 0x112EA, 'NSM'],\n    [0x11300, 0x11301, 'NSM'],\n    [0x1133B, 0x1133C, 'NSM'],\n    [0x11340, 0x11340, 'NSM'],\n    [0x11366, 0x1136C, 'NSM'],\n    [0x11370, 0x11374, 'NSM'],\n    [0x113BB, 0x113C0, 'NSM'],\n    [0x113CE, 0x113CE, 'NSM'],\n    [0x113D0, 0x113D0, 'NSM'],\n    [0x113D2, 0x113D2, 'NSM'],\n    [0x113E1, 0x113E2, 'NSM'],\n    [0x11438, 0x1143F, 'NSM'],\n    [0x11442, 0x11444, 'NSM'],\n    [0x11446, 0x11446, 'NSM'],\n    [0x1145E, 0x1145E, 'NSM'],\n    [0x114B3, 0x114B8, 'NSM'],\n    [0x114BA, 0x114BA, 'NSM'],\n    [0x114BF, 0x114C0, 'NSM'],\n    [0x114C2, 0x114C3, 'NSM'],\n    [0x115B2, 0x115B5, 'NSM'],\n    [0x115BC, 0x115BD, 'NSM'],\n    [0x115BF, 0x115C0, 'NSM'],\n    [0x115DC, 0x115DD, 'NSM'],\n    [0x11633, 0x1163A, 'NSM'],\n    [0x1163D, 0x1163D, 'NSM'],\n    [0x1163F, 0x11640, 'NSM'],\n    [0x11660, 0x1166C, 'ON'],\n    [0x116AB, 0x116AB, 'NSM'],\n    [0x116AD, 0x116AD, 'NSM'],\n    [0x116B0, 0x116B5, 'NSM'],\n    [0x116B7, 0x116B7, 'NSM'],\n    [0x1171D, 0x1171D, 'NSM'],\n    [0x1171F, 0x1171F, 'NSM'],\n    [0x11722, 0x11725, 'NSM'],\n    [0x11727, 0x1172B, 'NSM'],\n    [0x1182F, 0x11837, 'NSM'],\n    [0x11839, 0x1183A, 'NSM'],\n    [0x1193B, 0x1193C, 'NSM'],\n    [0x1193E, 0x1193E, 'NSM'],\n    [0x11943, 0x11943, 'NSM'],\n    [0x119D4, 0x119D7, 'NSM'],\n    [0x119DA, 0x119DB, 'NSM'],\n    [0x119E0, 0x119E0, 'NSM'],\n    [0x11A01, 0x11A06, 'NSM'],\n    [0x11A09, 0x11A0A, 'NSM'],\n    [0x11A33, 0x11A38, 'NSM'],\n    [0x11A3B, 0x11A3E, 'NSM'],\n    [0x11A47, 0x11A47, 'NSM'],\n    [0x11A51, 0x11A56, 'NSM'],\n    [0x11A59, 0x11A5B, 'NSM'],\n    [0x11A8A, 0x11A96, 'NSM'],\n    [0x11A98, 0x11A99, 'NSM'],\n    [0x11B60, 0x11B60, 'NSM'],\n    [0x11B62, 0x11B64, 'NSM'],\n    [0x11B66, 0x11B66, 'NSM'],\n    [0x11C30, 0x11C36, 'NSM'],\n    [0x11C38, 0x11C3D, 'NSM'],\n    [0x11C92, 0x11CA7, 'NSM'],\n    [0x11CAA, 0x11CB0, 'NSM'],\n    [0x11CB2, 0x11CB3, 'NSM'],\n    [0x11CB5, 0x11CB6, 'NSM'],\n    [0x11D31, 0x11D36, 'NSM'],\n    [0x11D3A, 0x11D3A, 'NSM'],\n    [0x11D3C, 0x11D3D, 'NSM'],\n    [0x11D3F, 0x11D45, 'NSM'],\n    [0x11D47, 0x11D47, 'NSM'],\n    [0x11D90, 0x11D91, 'NSM'],\n    [0x11D95, 0x11D95, 'NSM'],\n    [0x11D97, 0x11D97, 'NSM'],\n    [0x11EF3, 0x11EF4, 'NSM'],\n    [0x11F00, 0x11F01, 'NSM'],\n    [0x11F36, 0x11F3A, 'NSM'],\n    [0x11F40, 0x11F40, 'NSM'],\n    [0x11F42, 0x11F42, 'NSM'],\n    [0x11F5A, 0x11F5A, 'NSM'],\n    [0x11FD5, 0x11FDC, 'ON'],\n    [0x11FDD, 0x11FE0, 'ET'],\n    [0x11FE1, 0x11FF1, 'ON'],\n    [0x13440, 0x13440, 'NSM'],\n    [0x13447, 0x13455, 'NSM'],\n    [0x1611E, 0x16129, 'NSM'],\n    [0x1612D, 0x1612F, 'NSM'],\n    [0x16AF0, 0x16AF4, 'NSM'],\n    [0x16B30, 0x16B36, 'NSM'],\n    [0x16F4F, 0x16F4F, 'NSM'],\n    [0x16F8F, 0x16F92, 'NSM'],\n    [0x16FE2, 0x16FE2, 'ON'],\n    [0x16FE4, 0x16FE4, 'NSM'],\n    [0x1BC9D, 0x1BC9E, 'NSM'],\n    [0x1BCA0, 0x1BCA3, 'BN'],\n    [0x1CC00, 0x1CCD5, 'ON'],\n    [0x1CCF0, 0x1CCF9, 'EN'],\n    [0x1CCFA, 0x1CCFC, 'ON'],\n    [0x1CD00, 0x1CEB3, 'ON'],\n    [0x1CEBA, 0x1CED0, 'ON'],\n    [0x1CEE0, 0x1CEF0, 'ON'],\n    [0x1CF00, 0x1CF2D, 'NSM'],\n    [0x1CF30, 0x1CF46, 'NSM'],\n    [0x1D167, 0x1D169, 'NSM'],\n    [0x1D173, 0x1D17A, 'BN'],\n    [0x1D17B, 0x1D182, 'NSM'],\n    [0x1D185, 0x1D18B, 'NSM'],\n    [0x1D1AA, 0x1D1AD, 'NSM'],\n    [0x1D1E9, 0x1D1EA, 'ON'],\n    [0x1D200, 0x1D241, 'ON'],\n    [0x1D242, 0x1D244, 'NSM'],\n    [0x1D245, 0x1D245, 'ON'],\n    [0x1D300, 0x1D356, 'ON'],\n    [0x1D6C1, 0x1D6C1, 'ON'],\n    [0x1D6DB, 0x1D6DB, 'ON'],\n    [0x1D6FB, 0x1D6FB, 'ON'],\n    [0x1D715, 0x1D715, 'ON'],\n    [0x1D735, 0x1D735, 'ON'],\n    [0x1D74F, 0x1D74F, 'ON'],\n    [0x1D76F, 0x1D76F, 'ON'],\n    [0x1D789, 0x1D789, 'ON'],\n    [0x1D7A9, 0x1D7A9, 'ON'],\n    [0x1D7C3, 0x1D7C3, 'ON'],\n    [0x1D7CE, 0x1D7FF, 'EN'],\n    [0x1DA00, 0x1DA36, 'NSM'],\n    [0x1DA3B, 0x1DA6C, 'NSM'],\n    [0x1DA75, 0x1DA75, 'NSM'],\n    [0x1DA84, 0x1DA84, 'NSM'],\n    [0x1DA9B, 0x1DA9F, 'NSM'],\n    [0x1DAA1, 0x1DAAF, 'NSM'],\n    [0x1E000, 0x1E006, 'NSM'],\n    [0x1E008, 0x1E018, 'NSM'],\n    [0x1E01B, 0x1E021, 'NSM'],\n    [0x1E023, 0x1E024, 'NSM'],\n    [0x1E026, 0x1E02A, 'NSM'],\n    [0x1E08F, 0x1E08F, 'NSM'],\n    [0x1E130, 0x1E136, 'NSM'],\n    [0x1E2AE, 0x1E2AE, 'NSM'],\n    [0x1E2EC, 0x1E2EF, 'NSM'],\n    [0x1E2FF, 0x1E2FF, 'ET'],\n    [0x1E4EC, 0x1E4EF, 'NSM'],\n    [0x1E5EE, 0x1E5EF, 'NSM'],\n    [0x1E6E3, 0x1E6E3, 'NSM'],\n    [0x1E6E6, 0x1E6E6, 'NSM'],\n    [0x1E6EE, 0x1E6EF, 'NSM'],\n    [0x1E6F5, 0x1E6F5, 'NSM'],\n    [0x1E800, 0x1E8CF, 'R'],\n    [0x1E8D0, 0x1E8D6, 'NSM'],\n    [0x1E8D7, 0x1E943, 'R'],\n    [0x1E944, 0x1E94A, 'NSM'],\n    [0x1E94B, 0x1EC6F, 'R'],\n    [0x1EC70, 0x1ECBF, 'AL'],\n    [0x1ECC0, 0x1ECFF, 'R'],\n    [0x1ED00, 0x1ED4F, 'AL'],\n    [0x1ED50, 0x1EDFF, 'R'],\n    [0x1EE00, 0x1EEEF, 'AL'],\n    [0x1EEF0, 0x1EEF1, 'ON'],\n    [0x1EEF2, 0x1EEFF, 'AL'],\n    [0x1EF00, 0x1EFFF, 'R'],\n    [0x1F000, 0x1F02B, 'ON'],\n    [0x1F030, 0x1F093, 'ON'],\n    [0x1F0A0, 0x1F0AE, 'ON'],\n    [0x1F0B1, 0x1F0BF, 'ON'],\n    [0x1F0C1, 0x1F0CF, 'ON'],\n    [0x1F0D1, 0x1F0F5, 'ON'],\n    [0x1F100, 0x1F10A, 'EN'],\n    [0x1F10B, 0x1F10F, 'ON'],\n    [0x1F12F, 0x1F12F, 'ON'],\n    [0x1F16A, 0x1F16F, 'ON'],\n    [0x1F1AD, 0x1F1AD, 'ON'],\n    [0x1F260, 0x1F265, 'ON'],\n    [0x1F300, 0x1F6D8, 'ON'],\n    [0x1F6DC, 0x1F6EC, 'ON'],\n    [0x1F6F0, 0x1F6FC, 'ON'],\n    [0x1F700, 0x1F7D9, 'ON'],\n    [0x1F7E0, 0x1F7EB, 'ON'],\n    [0x1F7F0, 0x1F7F0, 'ON'],\n    [0x1F800, 0x1F80B, 'ON'],\n    [0x1F810, 0x1F847, 'ON'],\n    [0x1F850, 0x1F859, 'ON'],\n    [0x1F860, 0x1F887, 'ON'],\n    [0x1F890, 0x1F8AD, 'ON'],\n    [0x1F8B0, 0x1F8BB, 'ON'],\n    [0x1F8C0, 0x1F8C1, 'ON'],\n    [0x1F8D0, 0x1F8D8, 'ON'],\n    [0x1F900, 0x1FA57, 'ON'],\n    [0x1FA60, 0x1FA6D, 'ON'],\n    [0x1FA70, 0x1FA7C, 'ON'],\n    [0x1FA80, 0x1FA8A, 'ON'],\n    [0x1FA8E, 0x1FAC6, 'ON'],\n    [0x1FAC8, 0x1FAC8, 'ON'],\n    [0x1FACD, 0x1FADC, 'ON'],\n    [0x1FADF, 0x1FAEA, 'ON'],\n    [0x1FAEF, 0x1FAF8, 'ON'],\n    [0x1FB00, 0x1FB92, 'ON'],\n    [0x1FB94, 0x1FBEF, 'ON'],\n    [0x1FBF0, 0x1FBF9, 'EN'],\n    [0x1FBFA, 0x1FBFA, 'ON'],\n    [0x1FFFE, 0x1FFFF, 'BN'],\n    [0x2FFFE, 0x2FFFF, 'BN'],\n    [0x3FFFE, 0x3FFFF, 'BN'],\n    [0x4FFFE, 0x4FFFF, 'BN'],\n    [0x5FFFE, 0x5FFFF, 'BN'],\n    [0x6FFFE, 0x6FFFF, 'BN'],\n    [0x7FFFE, 0x7FFFF, 'BN'],\n    [0x8FFFE, 0x8FFFF, 'BN'],\n    [0x9FFFE, 0x9FFFF, 'BN'],\n    [0xAFFFE, 0xAFFFF, 'BN'],\n    [0xBFFFE, 0xBFFFF, 'BN'],\n    [0xCFFFE, 0xCFFFF, 'BN'],\n    [0xDFFFE, 0xE00FF, 'BN'],\n    [0xE0100, 0xE01EF, 'NSM'],\n    [0xE01F0, 0xE0FFF, 'BN'],\n    [0xEFFFE, 0xEFFFF, 'BN'],\n    [0xFFFFE, 0xFFFFF, 'BN'],\n    [0x10FFFE, 0x10FFFF, 'BN'],\n];\n","// Simplified bidi metadata helper for the rich prepareWithSegments() path,\n// forked from pdf.js via Sebastian's text-layout. It classifies characters\n// into bidi types, computes embedding levels, and maps them onto prepared\n// segments for custom rendering. The line-breaking engine does not consume\n// these levels.\nimport { latin1BidiTypes, nonLatin1BidiRanges, } from './generated/bidi-data.js';\nfunction classifyCodePoint(codePoint) {\n    if (codePoint <= 0x00FF)\n        return latin1BidiTypes[codePoint];\n    let lo = 0;\n    let hi = nonLatin1BidiRanges.length - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >> 1;\n        const range = nonLatin1BidiRanges[mid];\n        if (codePoint < range[0]) {\n            hi = mid - 1;\n            continue;\n        }\n        if (codePoint > range[1]) {\n            lo = mid + 1;\n            continue;\n        }\n        return range[2];\n    }\n    return 'L';\n}\nfunction computeBidiLevels(str) {\n    const len = str.length;\n    if (len === 0)\n        return null;\n    // eslint-disable-next-line unicorn/no-new-array\n    const types = new Array(len);\n    let sawBidi = false;\n    // Keep the resolved bidi classes aligned to UTF-16 code-unit offsets,\n    // because the rich prepared segments index back into the normalized string\n    // with JavaScript string offsets.\n    for (let i = 0; i < len;) {\n        const first = str.charCodeAt(i);\n        let codePoint = first;\n        let codeUnitLength = 1;\n        if (first >= 0xD800 && first <= 0xDBFF && i + 1 < len) {\n            const second = str.charCodeAt(i + 1);\n            if (second >= 0xDC00 && second <= 0xDFFF) {\n                codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n                codeUnitLength = 2;\n            }\n        }\n        const t = classifyCodePoint(codePoint);\n        if (t === 'R' || t === 'AL' || t === 'AN')\n            sawBidi = true;\n        for (let j = 0; j < codeUnitLength; j++) {\n            types[i + j] = t;\n        }\n        i += codeUnitLength;\n    }\n    if (!sawBidi)\n        return null;\n    // Use the first strong character to pick the paragraph base direction.\n    // Rich-path bidi metadata is only an approximation, but this keeps mixed\n    // LTR/RTL text aligned with the common UBA paragraph rule.\n    let startLevel = 0;\n    for (let i = 0; i < len; i++) {\n        const t = types[i];\n        if (t === 'L') {\n            startLevel = 0;\n            break;\n        }\n        if (t === 'R' || t === 'AL') {\n            startLevel = 1;\n            break;\n        }\n    }\n    const levels = new Int8Array(len);\n    for (let i = 0; i < len; i++)\n        levels[i] = startLevel;\n    const e = (startLevel & 1) ? 'R' : 'L';\n    const sor = e;\n    // W1-W7\n    let lastType = sor;\n    for (let i = 0; i < len; i++) {\n        if (types[i] === 'NSM')\n            types[i] = lastType;\n        else\n            lastType = types[i];\n    }\n    lastType = sor;\n    for (let i = 0; i < len; i++) {\n        const t = types[i];\n        if (t === 'EN')\n            types[i] = lastType === 'AL' ? 'AN' : 'EN';\n        else if (t === 'R' || t === 'L' || t === 'AL')\n            lastType = t;\n    }\n    for (let i = 0; i < len; i++) {\n        if (types[i] === 'AL')\n            types[i] = 'R';\n    }\n    for (let i = 1; i < len - 1; i++) {\n        if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {\n            types[i] = 'EN';\n        }\n        if (types[i] === 'CS' &&\n            (types[i - 1] === 'EN' || types[i - 1] === 'AN') &&\n            types[i + 1] === types[i - 1]) {\n            types[i] = types[i - 1];\n        }\n    }\n    for (let i = 0; i < len; i++) {\n        if (types[i] !== 'EN')\n            continue;\n        let j;\n        for (j = i - 1; j >= 0 && types[j] === 'ET'; j--)\n            types[j] = 'EN';\n        for (j = i + 1; j < len && types[j] === 'ET'; j++)\n            types[j] = 'EN';\n    }\n    for (let i = 0; i < len; i++) {\n        const t = types[i];\n        if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS')\n            types[i] = 'ON';\n    }\n    lastType = sor;\n    for (let i = 0; i < len; i++) {\n        const t = types[i];\n        if (t === 'EN')\n            types[i] = lastType === 'L' ? 'L' : 'EN';\n        else if (t === 'R' || t === 'L')\n            lastType = t;\n    }\n    // N1-N2\n    for (let i = 0; i < len; i++) {\n        if (types[i] !== 'ON')\n            continue;\n        let end = i + 1;\n        while (end < len && types[end] === 'ON')\n            end++;\n        const before = i > 0 ? types[i - 1] : sor;\n        const after = end < len ? types[end] : sor;\n        const bDir = before !== 'L' ? 'R' : 'L';\n        const aDir = after !== 'L' ? 'R' : 'L';\n        if (bDir === aDir) {\n            for (let j = i; j < end; j++)\n                types[j] = bDir;\n        }\n        i = end - 1;\n    }\n    for (let i = 0; i < len; i++) {\n        if (types[i] === 'ON')\n            types[i] = e;\n    }\n    // I1-I2\n    for (let i = 0; i < len; i++) {\n        const t = types[i];\n        if ((levels[i] & 1) === 0) {\n            if (t === 'R')\n                levels[i]++;\n            else if (t === 'AN' || t === 'EN')\n                levels[i] += 2;\n        }\n        else if (t === 'L' || t === 'AN' || t === 'EN') {\n            levels[i]++;\n        }\n    }\n    return levels;\n}\nexport function computeSegmentLevels(normalized, segStarts) {\n    const bidiLevels = computeBidiLevels(normalized);\n    if (bidiLevels === null)\n        return null;\n    const segLevels = new Int8Array(segStarts.length);\n    for (let i = 0; i < segStarts.length; i++) {\n        segLevels[i] = bidiLevels[segStarts[i]];\n    }\n    return segLevels;\n}\n","const collapsibleWhitespaceRunRe = /[ \\t\\n\\r\\f]+/g;\nconst needsWhitespaceNormalizationRe = /[\\t\\n\\r\\f]| {2,}|^ | $/;\nfunction getWhiteSpaceProfile(whiteSpace) {\n    const mode = whiteSpace ?? 'normal';\n    return mode === 'pre-wrap'\n        ? { mode, preserveOrdinarySpaces: true, preserveHardBreaks: true }\n        : { mode, preserveOrdinarySpaces: false, preserveHardBreaks: false };\n}\nexport function normalizeWhitespaceNormal(text) {\n    if (!needsWhitespaceNormalizationRe.test(text))\n        return text;\n    let normalized = text.replace(collapsibleWhitespaceRunRe, ' ');\n    if (normalized.charCodeAt(0) === 0x20) {\n        normalized = normalized.slice(1);\n    }\n    if (normalized.length > 0 && normalized.charCodeAt(normalized.length - 1) === 0x20) {\n        normalized = normalized.slice(0, -1);\n    }\n    return normalized;\n}\nfunction normalizeWhitespacePreWrap(text) {\n    if (!/[\\r\\f]/.test(text))\n        return text;\n    return text\n        .replace(/\\r\\n/g, '\\n')\n        .replace(/[\\r\\f]/g, '\\n');\n}\nlet sharedWordSegmenter = null;\nlet segmenterLocale;\nfunction getSharedWordSegmenter() {\n    if (sharedWordSegmenter === null) {\n        sharedWordSegmenter = new Intl.Segmenter(segmenterLocale, { granularity: 'word' });\n    }\n    return sharedWordSegmenter;\n}\nexport function clearAnalysisCaches() {\n    sharedWordSegmenter = null;\n}\nexport function setAnalysisLocale(locale) {\n    const nextLocale = locale && locale.length > 0 ? locale : undefined;\n    if (segmenterLocale === nextLocale)\n        return;\n    segmenterLocale = nextLocale;\n    sharedWordSegmenter = null;\n}\nconst arabicScriptRe = /\\p{Script=Arabic}/u;\nconst combiningMarkRe = /\\p{M}/u;\nconst decimalDigitRe = /\\p{Nd}/u;\nfunction containsArabicScript(text) {\n    return arabicScriptRe.test(text);\n}\nfunction isCJKCodePoint(codePoint) {\n    return ((codePoint >= 0x4E00 && codePoint <= 0x9FFF) ||\n        (codePoint >= 0x3400 && codePoint <= 0x4DBF) ||\n        (codePoint >= 0x20000 && codePoint <= 0x2A6DF) ||\n        (codePoint >= 0x2A700 && codePoint <= 0x2B73F) ||\n        (codePoint >= 0x2B740 && codePoint <= 0x2B81F) ||\n        (codePoint >= 0x2B820 && codePoint <= 0x2CEAF) ||\n        (codePoint >= 0x2CEB0 && codePoint <= 0x2EBEF) ||\n        (codePoint >= 0x2EBF0 && codePoint <= 0x2EE5D) ||\n        (codePoint >= 0x2F800 && codePoint <= 0x2FA1F) ||\n        (codePoint >= 0x30000 && codePoint <= 0x3134F) ||\n        (codePoint >= 0x31350 && codePoint <= 0x323AF) ||\n        (codePoint >= 0x323B0 && codePoint <= 0x33479) ||\n        (codePoint >= 0xF900 && codePoint <= 0xFAFF) ||\n        (codePoint >= 0x3000 && codePoint <= 0x303F) ||\n        (codePoint >= 0x3040 && codePoint <= 0x309F) ||\n        (codePoint >= 0x30A0 && codePoint <= 0x30FF) ||\n        (codePoint >= 0x3130 && codePoint <= 0x318F) ||\n        (codePoint >= 0xAC00 && codePoint <= 0xD7AF) ||\n        (codePoint >= 0xFF00 && codePoint <= 0xFFEF));\n}\nexport function isCJK(s) {\n    for (let i = 0; i < s.length; i++) {\n        const first = s.charCodeAt(i);\n        if (first < 0x3000)\n            continue;\n        if (first >= 0xD800 && first <= 0xDBFF && i + 1 < s.length) {\n            const second = s.charCodeAt(i + 1);\n            if (second >= 0xDC00 && second <= 0xDFFF) {\n                const codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n                if (isCJKCodePoint(codePoint))\n                    return true;\n                i++;\n                continue;\n            }\n        }\n        if (isCJKCodePoint(first))\n            return true;\n    }\n    return false;\n}\nfunction endsWithLineStartProhibitedText(text) {\n    const last = getLastCodePoint(text);\n    return last !== null && (kinsokuStart.has(last) || leftStickyPunctuation.has(last));\n}\nconst keepAllGlueChars = new Set([\n    '\\u00A0',\n    '\\u202F',\n    '\\u2060',\n    '\\uFEFF',\n]);\nfunction containsCJKText(text) {\n    return isCJK(text);\n}\nfunction endsWithKeepAllGlueText(text) {\n    const last = getLastCodePoint(text);\n    return last !== null && keepAllGlueChars.has(last);\n}\nexport function canContinueKeepAllTextRun(previousText) {\n    return (!endsWithLineStartProhibitedText(previousText) &&\n        !endsWithKeepAllGlueText(previousText));\n}\nexport const kinsokuStart = new Set([\n    '\\uFF0C',\n    '\\uFF0E',\n    '\\uFF01',\n    '\\uFF1A',\n    '\\uFF1B',\n    '\\uFF1F',\n    '\\u3001',\n    '\\u3002',\n    '\\u30FB',\n    '\\uFF09',\n    '\\u3015',\n    '\\u3009',\n    '\\u300B',\n    '\\u300D',\n    '\\u300F',\n    '\\u3011',\n    '\\u3017',\n    '\\u3019',\n    '\\u301B',\n    '\\u30FC',\n    '\\u3005',\n    '\\u303B',\n    '\\u309D',\n    '\\u309E',\n    '\\u30FD',\n    '\\u30FE',\n]);\nexport const kinsokuEnd = new Set([\n    '\"',\n    '(', '[', '{',\n    '“', '‘', '«', '‹',\n    '\\uFF08',\n    '\\u3014',\n    '\\u3008',\n    '\\u300A',\n    '\\u300C',\n    '\\u300E',\n    '\\u3010',\n    '\\u3016',\n    '\\u3018',\n    '\\u301A',\n]);\nconst forwardStickyGlue = new Set([\n    \"'\", '’',\n]);\nexport const leftStickyPunctuation = new Set([\n    '.', ',', '!', '?', ':', ';',\n    '\\u060C',\n    '\\u061B',\n    '\\u061F',\n    '\\u0964',\n    '\\u0965',\n    '\\u104A',\n    '\\u104B',\n    '\\u104C',\n    '\\u104D',\n    '\\u104F',\n    ')', ']', '}',\n    '%',\n    '\"',\n    '”', '’', '»', '›',\n    '…',\n]);\nconst arabicNoSpaceTrailingPunctuation = new Set([\n    ':',\n    '.',\n    '\\u060C',\n    '\\u061B',\n]);\nconst myanmarMedialGlue = new Set([\n    '\\u104F',\n]);\nconst closingQuoteChars = new Set([\n    '”', '’', '»', '›',\n    '\\u300D',\n    '\\u300F',\n    '\\u3011',\n    '\\u300B',\n    '\\u3009',\n    '\\u3015',\n    '\\uFF09',\n]);\nfunction isLeftStickyPunctuationSegment(segment) {\n    if (isEscapedQuoteClusterSegment(segment))\n        return true;\n    let sawPunctuation = false;\n    for (const ch of segment) {\n        if (leftStickyPunctuation.has(ch)) {\n            sawPunctuation = true;\n            continue;\n        }\n        if (sawPunctuation && combiningMarkRe.test(ch))\n            continue;\n        return false;\n    }\n    return sawPunctuation;\n}\nfunction isCJKLineStartProhibitedSegment(segment) {\n    for (const ch of segment) {\n        if (!kinsokuStart.has(ch) && !leftStickyPunctuation.has(ch))\n            return false;\n    }\n    return segment.length > 0;\n}\nfunction isForwardStickyClusterSegment(segment) {\n    if (isEscapedQuoteClusterSegment(segment))\n        return true;\n    for (const ch of segment) {\n        if (!kinsokuEnd.has(ch) && !forwardStickyGlue.has(ch) && !combiningMarkRe.test(ch))\n            return false;\n    }\n    return segment.length > 0;\n}\nfunction isEscapedQuoteClusterSegment(segment) {\n    let sawQuote = false;\n    for (const ch of segment) {\n        if (ch === '\\\\' || combiningMarkRe.test(ch))\n            continue;\n        if (kinsokuEnd.has(ch) || leftStickyPunctuation.has(ch) || forwardStickyGlue.has(ch)) {\n            sawQuote = true;\n            continue;\n        }\n        return false;\n    }\n    return sawQuote;\n}\nfunction previousCodePointStart(text, end) {\n    const last = end - 1;\n    if (last <= 0)\n        return Math.max(last, 0);\n    const lastCodeUnit = text.charCodeAt(last);\n    if (lastCodeUnit < 0xDC00 || lastCodeUnit > 0xDFFF)\n        return last;\n    const maybeHigh = last - 1;\n    if (maybeHigh < 0)\n        return last;\n    const highCodeUnit = text.charCodeAt(maybeHigh);\n    return highCodeUnit >= 0xD800 && highCodeUnit <= 0xDBFF ? maybeHigh : last;\n}\nfunction getLastCodePoint(text) {\n    if (text.length === 0)\n        return null;\n    const start = previousCodePointStart(text, text.length);\n    return text.slice(start);\n}\nfunction splitTrailingForwardStickyCluster(text) {\n    const chars = Array.from(text);\n    let splitIndex = chars.length;\n    while (splitIndex > 0) {\n        const ch = chars[splitIndex - 1];\n        if (combiningMarkRe.test(ch)) {\n            splitIndex--;\n            continue;\n        }\n        if (kinsokuEnd.has(ch) || forwardStickyGlue.has(ch)) {\n            splitIndex--;\n            continue;\n        }\n        break;\n    }\n    if (splitIndex <= 0 || splitIndex === chars.length)\n        return null;\n    return {\n        head: chars.slice(0, splitIndex).join(''),\n        tail: chars.slice(splitIndex).join(''),\n    };\n}\nfunction getRepeatableSingleCharRunChar(text, isWordLike, kind) {\n    return kind === 'text' && !isWordLike && text.length === 1 && text !== '-' && text !== '—'\n        ? text\n        : null;\n}\nfunction materializeDeferredSingleCharRun(texts, chars, lengths, index) {\n    const ch = chars[index];\n    const text = texts[index];\n    if (ch == null)\n        return text;\n    const length = lengths[index];\n    if (text.length === length)\n        return text;\n    const materialized = ch.repeat(length);\n    texts[index] = materialized;\n    return materialized;\n}\nfunction hasArabicNoSpacePunctuation(containsArabic, lastCodePoint) {\n    return containsArabic && lastCodePoint !== null && arabicNoSpaceTrailingPunctuation.has(lastCodePoint);\n}\nfunction endsWithMyanmarMedialGlue(segment) {\n    const lastCodePoint = getLastCodePoint(segment);\n    return lastCodePoint !== null && myanmarMedialGlue.has(lastCodePoint);\n}\nfunction splitLeadingSpaceAndMarks(segment) {\n    if (segment.length < 2 || segment[0] !== ' ')\n        return null;\n    const marks = segment.slice(1);\n    if (/^\\p{M}+$/u.test(marks)) {\n        return { space: ' ', marks };\n    }\n    return null;\n}\nexport function endsWithClosingQuote(text) {\n    let end = text.length;\n    while (end > 0) {\n        const start = previousCodePointStart(text, end);\n        const ch = text.slice(start, end);\n        if (closingQuoteChars.has(ch))\n            return true;\n        if (!leftStickyPunctuation.has(ch))\n            return false;\n        end = start;\n    }\n    return false;\n}\nfunction classifySegmentBreakChar(ch, whiteSpaceProfile) {\n    if (whiteSpaceProfile.preserveOrdinarySpaces || whiteSpaceProfile.preserveHardBreaks) {\n        if (ch === ' ')\n            return 'preserved-space';\n        if (ch === '\\t')\n            return 'tab';\n        if (whiteSpaceProfile.preserveHardBreaks && ch === '\\n')\n            return 'hard-break';\n    }\n    if (ch === ' ')\n        return 'space';\n    if (ch === '\\u00A0' || ch === '\\u202F' || ch === '\\u2060' || ch === '\\uFEFF') {\n        return 'glue';\n    }\n    if (ch === '\\u200B')\n        return 'zero-width-break';\n    if (ch === '\\u00AD')\n        return 'soft-hyphen';\n    return 'text';\n}\n// All characters that classifySegmentBreakChar maps to a non-'text' kind.\nconst breakCharRe = /[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;\nfunction joinTextParts(parts) {\n    return parts.length === 1 ? parts[0] : parts.join('');\n}\nfunction joinReversedPrefixParts(prefixParts, tail) {\n    const parts = [];\n    for (let i = prefixParts.length - 1; i >= 0; i--) {\n        parts.push(prefixParts[i]);\n    }\n    parts.push(tail);\n    return joinTextParts(parts);\n}\nfunction splitSegmentByBreakKind(segment, isWordLike, start, whiteSpaceProfile) {\n    if (!breakCharRe.test(segment)) {\n        return [{ text: segment, isWordLike, kind: 'text', start }];\n    }\n    const pieces = [];\n    let currentKind = null;\n    let currentTextParts = [];\n    let currentStart = start;\n    let currentWordLike = false;\n    let offset = 0;\n    for (const ch of segment) {\n        const kind = classifySegmentBreakChar(ch, whiteSpaceProfile);\n        const wordLike = kind === 'text' && isWordLike;\n        if (currentKind !== null && kind === currentKind && wordLike === currentWordLike) {\n            currentTextParts.push(ch);\n            offset += ch.length;\n            continue;\n        }\n        if (currentKind !== null) {\n            pieces.push({\n                text: joinTextParts(currentTextParts),\n                isWordLike: currentWordLike,\n                kind: currentKind,\n                start: currentStart,\n            });\n        }\n        currentKind = kind;\n        currentTextParts = [ch];\n        currentStart = start + offset;\n        currentWordLike = wordLike;\n        offset += ch.length;\n    }\n    if (currentKind !== null) {\n        pieces.push({\n            text: joinTextParts(currentTextParts),\n            isWordLike: currentWordLike,\n            kind: currentKind,\n            start: currentStart,\n        });\n    }\n    return pieces;\n}\nfunction isTextRunBoundary(kind) {\n    return (kind === 'space' ||\n        kind === 'preserved-space' ||\n        kind === 'zero-width-break' ||\n        kind === 'hard-break');\n}\nconst urlSchemeSegmentRe = /^[A-Za-z][A-Za-z0-9+.-]*:$/;\nfunction isUrlLikeRunStart(segmentation, index) {\n    const text = segmentation.texts[index];\n    if (text.startsWith('www.'))\n        return true;\n    return (urlSchemeSegmentRe.test(text) &&\n        index + 1 < segmentation.len &&\n        segmentation.kinds[index + 1] === 'text' &&\n        segmentation.texts[index + 1] === '//');\n}\nfunction isUrlQueryBoundarySegment(text) {\n    return text.includes('?') && (text.includes('://') || text.startsWith('www.'));\n}\nfunction mergeUrlLikeRuns(segmentation) {\n    const texts = segmentation.texts.slice();\n    const isWordLike = segmentation.isWordLike.slice();\n    const kinds = segmentation.kinds.slice();\n    const starts = segmentation.starts.slice();\n    for (let i = 0; i < segmentation.len; i++) {\n        if (kinds[i] !== 'text' || !isUrlLikeRunStart(segmentation, i))\n            continue;\n        const mergedParts = [texts[i]];\n        let j = i + 1;\n        while (j < segmentation.len && !isTextRunBoundary(kinds[j])) {\n            mergedParts.push(texts[j]);\n            isWordLike[i] = true;\n            const endsQueryPrefix = texts[j].includes('?');\n            kinds[j] = 'text';\n            texts[j] = '';\n            j++;\n            if (endsQueryPrefix)\n                break;\n        }\n        texts[i] = joinTextParts(mergedParts);\n    }\n    let compactLen = 0;\n    for (let read = 0; read < texts.length; read++) {\n        const text = texts[read];\n        if (text.length === 0)\n            continue;\n        if (compactLen !== read) {\n            texts[compactLen] = text;\n            isWordLike[compactLen] = isWordLike[read];\n            kinds[compactLen] = kinds[read];\n            starts[compactLen] = starts[read];\n        }\n        compactLen++;\n    }\n    texts.length = compactLen;\n    isWordLike.length = compactLen;\n    kinds.length = compactLen;\n    starts.length = compactLen;\n    return {\n        len: compactLen,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction mergeUrlQueryRuns(segmentation) {\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    for (let i = 0; i < segmentation.len; i++) {\n        const text = segmentation.texts[i];\n        texts.push(text);\n        isWordLike.push(segmentation.isWordLike[i]);\n        kinds.push(segmentation.kinds[i]);\n        starts.push(segmentation.starts[i]);\n        if (!isUrlQueryBoundarySegment(text))\n            continue;\n        const nextIndex = i + 1;\n        if (nextIndex >= segmentation.len ||\n            isTextRunBoundary(segmentation.kinds[nextIndex])) {\n            continue;\n        }\n        const queryParts = [];\n        const queryStart = segmentation.starts[nextIndex];\n        let j = nextIndex;\n        while (j < segmentation.len && !isTextRunBoundary(segmentation.kinds[j])) {\n            queryParts.push(segmentation.texts[j]);\n            j++;\n        }\n        if (queryParts.length > 0) {\n            texts.push(joinTextParts(queryParts));\n            isWordLike.push(true);\n            kinds.push('text');\n            starts.push(queryStart);\n            i = j - 1;\n        }\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nconst numericJoinerChars = new Set([\n    ':', '-', '/', '×', ',', '.', '+',\n    '\\u2013',\n    '\\u2014',\n]);\nconst asciiPunctuationChainSegmentRe = /^[A-Za-z0-9_]+[,:;]*$/;\nconst asciiPunctuationChainTrailingJoinersRe = /[,:;]+$/;\nfunction segmentContainsDecimalDigit(text) {\n    for (const ch of text) {\n        if (decimalDigitRe.test(ch))\n            return true;\n    }\n    return false;\n}\nexport function isNumericRunSegment(text) {\n    if (text.length === 0)\n        return false;\n    for (const ch of text) {\n        if (decimalDigitRe.test(ch) || numericJoinerChars.has(ch))\n            continue;\n        return false;\n    }\n    return true;\n}\nfunction mergeNumericRuns(segmentation) {\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    for (let i = 0; i < segmentation.len; i++) {\n        const text = segmentation.texts[i];\n        const kind = segmentation.kinds[i];\n        if (kind === 'text' && isNumericRunSegment(text) && segmentContainsDecimalDigit(text)) {\n            const mergedParts = [text];\n            let j = i + 1;\n            while (j < segmentation.len &&\n                segmentation.kinds[j] === 'text' &&\n                isNumericRunSegment(segmentation.texts[j])) {\n                mergedParts.push(segmentation.texts[j]);\n                j++;\n            }\n            texts.push(joinTextParts(mergedParts));\n            isWordLike.push(true);\n            kinds.push('text');\n            starts.push(segmentation.starts[i]);\n            i = j - 1;\n            continue;\n        }\n        texts.push(text);\n        isWordLike.push(segmentation.isWordLike[i]);\n        kinds.push(kind);\n        starts.push(segmentation.starts[i]);\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction mergeAsciiPunctuationChains(segmentation) {\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    for (let i = 0; i < segmentation.len; i++) {\n        const text = segmentation.texts[i];\n        const kind = segmentation.kinds[i];\n        const wordLike = segmentation.isWordLike[i];\n        if (kind === 'text' && wordLike && asciiPunctuationChainSegmentRe.test(text)) {\n            const mergedParts = [text];\n            let endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(text);\n            let j = i + 1;\n            while (endsWithJoiners &&\n                j < segmentation.len &&\n                segmentation.kinds[j] === 'text' &&\n                segmentation.isWordLike[j] &&\n                asciiPunctuationChainSegmentRe.test(segmentation.texts[j])) {\n                const nextText = segmentation.texts[j];\n                mergedParts.push(nextText);\n                endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(nextText);\n                j++;\n            }\n            texts.push(joinTextParts(mergedParts));\n            isWordLike.push(true);\n            kinds.push('text');\n            starts.push(segmentation.starts[i]);\n            i = j - 1;\n            continue;\n        }\n        texts.push(text);\n        isWordLike.push(wordLike);\n        kinds.push(kind);\n        starts.push(segmentation.starts[i]);\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction splitHyphenatedNumericRuns(segmentation) {\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    for (let i = 0; i < segmentation.len; i++) {\n        const text = segmentation.texts[i];\n        if (segmentation.kinds[i] === 'text' && text.includes('-')) {\n            const parts = text.split('-');\n            let shouldSplit = parts.length > 1;\n            for (let j = 0; j < parts.length; j++) {\n                const part = parts[j];\n                if (!shouldSplit)\n                    break;\n                if (part.length === 0 ||\n                    !segmentContainsDecimalDigit(part) ||\n                    !isNumericRunSegment(part)) {\n                    shouldSplit = false;\n                }\n            }\n            if (shouldSplit) {\n                let offset = 0;\n                for (let j = 0; j < parts.length; j++) {\n                    const part = parts[j];\n                    const splitText = j < parts.length - 1 ? `${part}-` : part;\n                    texts.push(splitText);\n                    isWordLike.push(true);\n                    kinds.push('text');\n                    starts.push(segmentation.starts[i] + offset);\n                    offset += splitText.length;\n                }\n                continue;\n            }\n        }\n        texts.push(text);\n        isWordLike.push(segmentation.isWordLike[i]);\n        kinds.push(segmentation.kinds[i]);\n        starts.push(segmentation.starts[i]);\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction mergeGlueConnectedTextRuns(segmentation) {\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    let read = 0;\n    while (read < segmentation.len) {\n        const textParts = [segmentation.texts[read]];\n        let wordLike = segmentation.isWordLike[read];\n        let kind = segmentation.kinds[read];\n        let start = segmentation.starts[read];\n        if (kind === 'glue') {\n            const glueParts = [textParts[0]];\n            const glueStart = start;\n            read++;\n            while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n                glueParts.push(segmentation.texts[read]);\n                read++;\n            }\n            const glueText = joinTextParts(glueParts);\n            if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n                textParts[0] = glueText;\n                textParts.push(segmentation.texts[read]);\n                wordLike = segmentation.isWordLike[read];\n                kind = 'text';\n                start = glueStart;\n                read++;\n            }\n            else {\n                texts.push(glueText);\n                isWordLike.push(false);\n                kinds.push('glue');\n                starts.push(glueStart);\n                continue;\n            }\n        }\n        else {\n            read++;\n        }\n        if (kind === 'text') {\n            while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n                const glueParts = [];\n                while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n                    glueParts.push(segmentation.texts[read]);\n                    read++;\n                }\n                const glueText = joinTextParts(glueParts);\n                if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n                    textParts.push(glueText, segmentation.texts[read]);\n                    wordLike = wordLike || segmentation.isWordLike[read];\n                    read++;\n                    continue;\n                }\n                textParts.push(glueText);\n            }\n        }\n        texts.push(joinTextParts(textParts));\n        isWordLike.push(wordLike);\n        kinds.push(kind);\n        starts.push(start);\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction carryTrailingForwardStickyAcrossCJKBoundary(segmentation) {\n    const texts = segmentation.texts.slice();\n    const isWordLike = segmentation.isWordLike.slice();\n    const kinds = segmentation.kinds.slice();\n    const starts = segmentation.starts.slice();\n    for (let i = 0; i < texts.length - 1; i++) {\n        if (kinds[i] !== 'text' || kinds[i + 1] !== 'text')\n            continue;\n        if (!isCJK(texts[i]) || !isCJK(texts[i + 1]))\n            continue;\n        const split = splitTrailingForwardStickyCluster(texts[i]);\n        if (split === null)\n            continue;\n        texts[i] = split.head;\n        texts[i + 1] = split.tail + texts[i + 1];\n        starts[i + 1] = starts[i] + split.head.length;\n    }\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nfunction buildMergedSegmentation(normalized, profile, whiteSpaceProfile) {\n    const wordSegmenter = getSharedWordSegmenter();\n    let mergedLen = 0;\n    const mergedTexts = [];\n    const mergedTextParts = [];\n    const mergedWordLike = [];\n    const mergedKinds = [];\n    const mergedStarts = [];\n    // Track repeatable single-char punctuation runs structurally so identical\n    // merges stay O(1) instead of re-scanning the accumulated segment each time.\n    const mergedSingleCharRunChars = [];\n    const mergedSingleCharRunLengths = [];\n    const mergedContainsCJK = [];\n    const mergedContainsArabicScript = [];\n    const mergedEndsWithClosingQuote = [];\n    const mergedEndsWithMyanmarMedialGlue = [];\n    const mergedHasArabicNoSpacePunctuation = [];\n    for (const s of wordSegmenter.segment(normalized)) {\n        for (const piece of splitSegmentByBreakKind(s.segment, s.isWordLike ?? false, s.index, whiteSpaceProfile)) {\n            const isText = piece.kind === 'text';\n            const repeatableSingleCharRunChar = getRepeatableSingleCharRunChar(piece.text, piece.isWordLike, piece.kind);\n            const pieceContainsCJK = isCJK(piece.text);\n            const pieceContainsArabicScript = containsArabicScript(piece.text);\n            const pieceLastCodePoint = getLastCodePoint(piece.text);\n            const pieceEndsWithClosingQuote = endsWithClosingQuote(piece.text);\n            const pieceEndsWithMyanmarMedialGlue = endsWithMyanmarMedialGlue(piece.text);\n            const prevIndex = mergedLen - 1;\n            function appendPieceToPrevious() {\n                if (mergedSingleCharRunChars[prevIndex] !== null) {\n                    mergedTextParts[prevIndex] = [\n                        materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, prevIndex),\n                    ];\n                    mergedSingleCharRunChars[prevIndex] = null;\n                }\n                mergedTextParts[prevIndex].push(piece.text);\n                mergedWordLike[prevIndex] = mergedWordLike[prevIndex] || piece.isWordLike;\n                mergedContainsCJK[prevIndex] = mergedContainsCJK[prevIndex] || pieceContainsCJK;\n                mergedContainsArabicScript[prevIndex] =\n                    mergedContainsArabicScript[prevIndex] || pieceContainsArabicScript;\n                mergedEndsWithClosingQuote[prevIndex] = pieceEndsWithClosingQuote;\n                mergedEndsWithMyanmarMedialGlue[prevIndex] = pieceEndsWithMyanmarMedialGlue;\n                mergedHasArabicNoSpacePunctuation[prevIndex] = hasArabicNoSpacePunctuation(mergedContainsArabicScript[prevIndex], pieceLastCodePoint);\n            }\n            // First-pass keeps: no-space script-specific joins and punctuation glue\n            // that depend on the immediately preceding text run.\n            if (profile.carryCJKAfterClosingQuote &&\n                isText &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                pieceContainsCJK &&\n                mergedContainsCJK[prevIndex] &&\n                mergedEndsWithClosingQuote[prevIndex]) {\n                appendPieceToPrevious();\n            }\n            else if (isText &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                isCJKLineStartProhibitedSegment(piece.text) &&\n                mergedContainsCJK[prevIndex]) {\n                appendPieceToPrevious();\n            }\n            else if (isText &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                mergedEndsWithMyanmarMedialGlue[prevIndex]) {\n                appendPieceToPrevious();\n            }\n            else if (isText &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                piece.isWordLike &&\n                pieceContainsArabicScript &&\n                mergedHasArabicNoSpacePunctuation[prevIndex]) {\n                appendPieceToPrevious();\n                mergedWordLike[prevIndex] = true;\n            }\n            else if (repeatableSingleCharRunChar !== null &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                mergedSingleCharRunChars[prevIndex] === repeatableSingleCharRunChar) {\n                mergedSingleCharRunLengths[prevIndex] = (mergedSingleCharRunLengths[prevIndex] ?? 1) + 1;\n            }\n            else if (isText &&\n                !piece.isWordLike &&\n                mergedLen > 0 &&\n                mergedKinds[prevIndex] === 'text' &&\n                !mergedContainsCJK[prevIndex] &&\n                (isLeftStickyPunctuationSegment(piece.text) ||\n                    (piece.text === '-' && mergedWordLike[prevIndex]))) {\n                appendPieceToPrevious();\n            }\n            else {\n                mergedTexts[mergedLen] = piece.text;\n                mergedTextParts[mergedLen] = [piece.text];\n                mergedWordLike[mergedLen] = piece.isWordLike;\n                mergedKinds[mergedLen] = piece.kind;\n                mergedStarts[mergedLen] = piece.start;\n                mergedSingleCharRunChars[mergedLen] = repeatableSingleCharRunChar;\n                mergedSingleCharRunLengths[mergedLen] = repeatableSingleCharRunChar === null ? 0 : 1;\n                mergedContainsCJK[mergedLen] = pieceContainsCJK;\n                mergedContainsArabicScript[mergedLen] = pieceContainsArabicScript;\n                mergedEndsWithClosingQuote[mergedLen] = pieceEndsWithClosingQuote;\n                mergedEndsWithMyanmarMedialGlue[mergedLen] = pieceEndsWithMyanmarMedialGlue;\n                mergedHasArabicNoSpacePunctuation[mergedLen] = hasArabicNoSpacePunctuation(pieceContainsArabicScript, pieceLastCodePoint);\n                mergedLen++;\n            }\n        }\n    }\n    for (let i = 0; i < mergedLen; i++) {\n        if (mergedSingleCharRunChars[i] !== null) {\n            mergedTexts[i] = materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, i);\n            continue;\n        }\n        mergedTexts[i] = joinTextParts(mergedTextParts[i]);\n    }\n    // Later passes operate on the merged text stream itself: contextual escaped\n    // quote glue, forward-sticky carry, compaction, then the broader URL/numeric\n    // and Arabic-leading-mark fixes.\n    for (let i = 1; i < mergedLen; i++) {\n        if (mergedKinds[i] === 'text' &&\n            !mergedWordLike[i] &&\n            isEscapedQuoteClusterSegment(mergedTexts[i]) &&\n            mergedKinds[i - 1] === 'text' &&\n            !mergedContainsCJK[i - 1]) {\n            mergedTexts[i - 1] += mergedTexts[i];\n            mergedWordLike[i - 1] = mergedWordLike[i - 1] || mergedWordLike[i];\n            mergedTexts[i] = '';\n        }\n    }\n    const forwardStickyPrefixParts = Array.from({ length: mergedLen }, () => null);\n    let nextLiveIndex = -1;\n    for (let i = mergedLen - 1; i >= 0; i--) {\n        const text = mergedTexts[i];\n        if (text.length === 0)\n            continue;\n        if (mergedKinds[i] === 'text' &&\n            !mergedWordLike[i] &&\n            isForwardStickyClusterSegment(text) &&\n            nextLiveIndex >= 0 &&\n            mergedKinds[nextLiveIndex] === 'text') {\n            const prefixParts = forwardStickyPrefixParts[nextLiveIndex] ?? [];\n            prefixParts.push(text);\n            forwardStickyPrefixParts[nextLiveIndex] = prefixParts;\n            mergedStarts[nextLiveIndex] = mergedStarts[i];\n            mergedTexts[i] = '';\n            continue;\n        }\n        nextLiveIndex = i;\n    }\n    for (let i = 0; i < mergedLen; i++) {\n        const prefixParts = forwardStickyPrefixParts[i];\n        if (prefixParts == null)\n            continue;\n        mergedTexts[i] = joinReversedPrefixParts(prefixParts, mergedTexts[i]);\n    }\n    let compactLen = 0;\n    for (let read = 0; read < mergedLen; read++) {\n        const text = mergedTexts[read];\n        if (text.length === 0)\n            continue;\n        if (compactLen !== read) {\n            mergedTexts[compactLen] = text;\n            mergedWordLike[compactLen] = mergedWordLike[read];\n            mergedKinds[compactLen] = mergedKinds[read];\n            mergedStarts[compactLen] = mergedStarts[read];\n        }\n        compactLen++;\n    }\n    mergedTexts.length = compactLen;\n    mergedWordLike.length = compactLen;\n    mergedKinds.length = compactLen;\n    mergedStarts.length = compactLen;\n    const compacted = mergeGlueConnectedTextRuns({\n        len: compactLen,\n        texts: mergedTexts,\n        isWordLike: mergedWordLike,\n        kinds: mergedKinds,\n        starts: mergedStarts,\n    });\n    const withMergedUrls = carryTrailingForwardStickyAcrossCJKBoundary(mergeAsciiPunctuationChains(splitHyphenatedNumericRuns(mergeNumericRuns(mergeUrlQueryRuns(mergeUrlLikeRuns(compacted))))));\n    for (let i = 0; i < withMergedUrls.len - 1; i++) {\n        const split = splitLeadingSpaceAndMarks(withMergedUrls.texts[i]);\n        if (split === null)\n            continue;\n        if ((withMergedUrls.kinds[i] !== 'space' && withMergedUrls.kinds[i] !== 'preserved-space') ||\n            withMergedUrls.kinds[i + 1] !== 'text' ||\n            !containsArabicScript(withMergedUrls.texts[i + 1])) {\n            continue;\n        }\n        withMergedUrls.texts[i] = split.space;\n        withMergedUrls.isWordLike[i] = false;\n        withMergedUrls.kinds[i] = withMergedUrls.kinds[i] === 'preserved-space' ? 'preserved-space' : 'space';\n        withMergedUrls.texts[i + 1] = split.marks + withMergedUrls.texts[i + 1];\n        withMergedUrls.starts[i + 1] = withMergedUrls.starts[i] + split.space.length;\n    }\n    return withMergedUrls;\n}\nfunction compileAnalysisChunks(segmentation, whiteSpaceProfile) {\n    if (segmentation.len === 0)\n        return [];\n    if (!whiteSpaceProfile.preserveHardBreaks) {\n        return [{\n                startSegmentIndex: 0,\n                endSegmentIndex: segmentation.len,\n                consumedEndSegmentIndex: segmentation.len,\n            }];\n    }\n    const chunks = [];\n    let startSegmentIndex = 0;\n    for (let i = 0; i < segmentation.len; i++) {\n        if (segmentation.kinds[i] !== 'hard-break')\n            continue;\n        chunks.push({\n            startSegmentIndex,\n            endSegmentIndex: i,\n            consumedEndSegmentIndex: i + 1,\n        });\n        startSegmentIndex = i + 1;\n    }\n    if (startSegmentIndex < segmentation.len) {\n        chunks.push({\n            startSegmentIndex,\n            endSegmentIndex: segmentation.len,\n            consumedEndSegmentIndex: segmentation.len,\n        });\n    }\n    return chunks;\n}\nfunction mergeKeepAllTextSegments(segmentation) {\n    if (segmentation.len <= 1)\n        return segmentation;\n    const texts = [];\n    const isWordLike = [];\n    const kinds = [];\n    const starts = [];\n    let pendingTextParts = null;\n    let pendingWordLike = false;\n    let pendingStart = 0;\n    let pendingContainsCJK = false;\n    let pendingCanContinue = false;\n    function flushPendingText() {\n        if (pendingTextParts === null)\n            return;\n        texts.push(joinTextParts(pendingTextParts));\n        isWordLike.push(pendingWordLike);\n        kinds.push('text');\n        starts.push(pendingStart);\n        pendingTextParts = null;\n    }\n    for (let i = 0; i < segmentation.len; i++) {\n        const text = segmentation.texts[i];\n        const kind = segmentation.kinds[i];\n        const wordLike = segmentation.isWordLike[i];\n        const start = segmentation.starts[i];\n        if (kind === 'text') {\n            const textContainsCJK = containsCJKText(text);\n            const textCanContinue = canContinueKeepAllTextRun(text);\n            if (pendingTextParts !== null && pendingContainsCJK && pendingCanContinue) {\n                pendingTextParts.push(text);\n                pendingWordLike = pendingWordLike || wordLike;\n                pendingContainsCJK = pendingContainsCJK || textContainsCJK;\n                pendingCanContinue = textCanContinue;\n                continue;\n            }\n            flushPendingText();\n            pendingTextParts = [text];\n            pendingWordLike = wordLike;\n            pendingStart = start;\n            pendingContainsCJK = textContainsCJK;\n            pendingCanContinue = textCanContinue;\n            continue;\n        }\n        flushPendingText();\n        texts.push(text);\n        isWordLike.push(wordLike);\n        kinds.push(kind);\n        starts.push(start);\n    }\n    flushPendingText();\n    return {\n        len: texts.length,\n        texts,\n        isWordLike,\n        kinds,\n        starts,\n    };\n}\nexport function analyzeText(text, profile, whiteSpace = 'normal', wordBreak = 'normal') {\n    const whiteSpaceProfile = getWhiteSpaceProfile(whiteSpace);\n    const normalized = whiteSpaceProfile.mode === 'pre-wrap'\n        ? normalizeWhitespacePreWrap(text)\n        : normalizeWhitespaceNormal(text);\n    if (normalized.length === 0) {\n        return {\n            normalized,\n            chunks: [],\n            len: 0,\n            texts: [],\n            isWordLike: [],\n            kinds: [],\n            starts: [],\n        };\n    }\n    const segmentation = wordBreak === 'keep-all'\n        ? mergeKeepAllTextSegments(buildMergedSegmentation(normalized, profile, whiteSpaceProfile))\n        : buildMergedSegmentation(normalized, profile, whiteSpaceProfile);\n    return {\n        normalized,\n        chunks: compileAnalysisChunks(segmentation, whiteSpaceProfile),\n        ...segmentation,\n    };\n}\n","import { isCJK } from './analysis.js';\nlet measureContext = null;\nconst segmentMetricCaches = new Map();\nlet cachedEngineProfile = null;\n// Safari's prefix-fit policy is useful for ordinary word-sized runs, but letting\n// it measure every growing prefix of a giant segment recreates a pathological\n// superlinear prepare-time path. Past this size, switch to the cheaper\n// pair-context model and keep the public behavior linear.\nconst MAX_PREFIX_FIT_GRAPHEMES = 96;\nconst emojiPresentationRe = /\\p{Emoji_Presentation}/u;\nconst maybeEmojiRe = /[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u;\nlet sharedGraphemeSegmenter = null;\nconst emojiCorrectionCache = new Map();\nexport function getMeasureContext() {\n    if (measureContext !== null)\n        return measureContext;\n    if (typeof OffscreenCanvas !== 'undefined') {\n        measureContext = new OffscreenCanvas(1, 1).getContext('2d');\n        return measureContext;\n    }\n    if (typeof document !== 'undefined') {\n        measureContext = document.createElement('canvas').getContext('2d');\n        return measureContext;\n    }\n    throw new Error('Text measurement requires OffscreenCanvas or a DOM canvas context.');\n}\nexport function getSegmentMetricCache(font) {\n    let cache = segmentMetricCaches.get(font);\n    if (!cache) {\n        cache = new Map();\n        segmentMetricCaches.set(font, cache);\n    }\n    return cache;\n}\nexport function getSegmentMetrics(seg, cache) {\n    let metrics = cache.get(seg);\n    if (metrics === undefined) {\n        const ctx = getMeasureContext();\n        metrics = {\n            width: ctx.measureText(seg).width,\n            containsCJK: isCJK(seg),\n        };\n        cache.set(seg, metrics);\n    }\n    return metrics;\n}\nexport function getEngineProfile() {\n    if (cachedEngineProfile !== null)\n        return cachedEngineProfile;\n    if (typeof navigator === 'undefined') {\n        cachedEngineProfile = {\n            lineFitEpsilon: 0.005,\n            carryCJKAfterClosingQuote: false,\n            preferPrefixWidthsForBreakableRuns: false,\n            preferEarlySoftHyphenBreak: false,\n        };\n        return cachedEngineProfile;\n    }\n    const ua = navigator.userAgent;\n    const vendor = navigator.vendor;\n    const isSafari = vendor === 'Apple Computer, Inc.' &&\n        ua.includes('Safari/') &&\n        !ua.includes('Chrome/') &&\n        !ua.includes('Chromium/') &&\n        !ua.includes('CriOS/') &&\n        !ua.includes('FxiOS/') &&\n        !ua.includes('EdgiOS/');\n    const isChromium = ua.includes('Chrome/') ||\n        ua.includes('Chromium/') ||\n        ua.includes('CriOS/') ||\n        ua.includes('Edg/');\n    cachedEngineProfile = {\n        lineFitEpsilon: isSafari ? 1 / 64 : 0.005,\n        carryCJKAfterClosingQuote: isChromium,\n        preferPrefixWidthsForBreakableRuns: isSafari,\n        preferEarlySoftHyphenBreak: isSafari,\n    };\n    return cachedEngineProfile;\n}\nexport function parseFontSize(font) {\n    const m = font.match(/(\\d+(?:\\.\\d+)?)\\s*px/);\n    return m ? parseFloat(m[1]) : 16;\n}\nfunction getSharedGraphemeSegmenter() {\n    if (sharedGraphemeSegmenter === null) {\n        sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n    }\n    return sharedGraphemeSegmenter;\n}\nfunction isEmojiGrapheme(g) {\n    return emojiPresentationRe.test(g) || g.includes('\\uFE0F');\n}\nexport function textMayContainEmoji(text) {\n    return maybeEmojiRe.test(text);\n}\nfunction getEmojiCorrection(font, fontSize) {\n    let correction = emojiCorrectionCache.get(font);\n    if (correction !== undefined)\n        return correction;\n    const ctx = getMeasureContext();\n    ctx.font = font;\n    const canvasW = ctx.measureText('\\u{1F600}').width;\n    correction = 0;\n    if (canvasW > fontSize + 0.5 &&\n        typeof document !== 'undefined' &&\n        document.body !== null) {\n        const span = document.createElement('span');\n        span.style.font = font;\n        span.style.display = 'inline-block';\n        span.style.visibility = 'hidden';\n        span.style.position = 'absolute';\n        span.textContent = '\\u{1F600}';\n        document.body.appendChild(span);\n        const domW = span.getBoundingClientRect().width;\n        document.body.removeChild(span);\n        if (canvasW - domW > 0.5) {\n            correction = canvasW - domW;\n        }\n    }\n    emojiCorrectionCache.set(font, correction);\n    return correction;\n}\nfunction countEmojiGraphemes(text) {\n    let count = 0;\n    const graphemeSegmenter = getSharedGraphemeSegmenter();\n    for (const g of graphemeSegmenter.segment(text)) {\n        if (isEmojiGrapheme(g.segment))\n            count++;\n    }\n    return count;\n}\nfunction getEmojiCount(seg, metrics) {\n    if (metrics.emojiCount === undefined) {\n        metrics.emojiCount = countEmojiGraphemes(seg);\n    }\n    return metrics.emojiCount;\n}\nexport function getCorrectedSegmentWidth(seg, metrics, emojiCorrection) {\n    if (emojiCorrection === 0)\n        return metrics.width;\n    return metrics.width - getEmojiCount(seg, metrics) * emojiCorrection;\n}\nexport function getSegmentGraphemeWidths(seg, cache, emojiCorrection) {\n    const widths = [];\n    const graphemeSegmenter = getSharedGraphemeSegmenter();\n    for (const gs of graphemeSegmenter.segment(seg)) {\n        const graphemeMetrics = getSegmentMetrics(gs.segment, cache);\n        widths.push(getCorrectedSegmentWidth(gs.segment, graphemeMetrics, emojiCorrection));\n    }\n    return widths.length > 1 ? widths : null;\n}\nexport function getSegmentBreakableFitAdvances(seg, metrics, cache, emojiCorrection, mode) {\n    if (metrics.breakableFitAdvances !== undefined && metrics.breakableFitMode === mode) {\n        return metrics.breakableFitAdvances;\n    }\n    metrics.breakableFitMode = mode;\n    const graphemeSegmenter = getSharedGraphemeSegmenter();\n    const graphemes = [];\n    for (const gs of graphemeSegmenter.segment(seg)) {\n        graphemes.push(gs.segment);\n    }\n    if (graphemes.length <= 1) {\n        metrics.breakableFitAdvances = null;\n        return metrics.breakableFitAdvances;\n    }\n    if (mode === 'sum-graphemes') {\n        const advances = [];\n        for (const grapheme of graphemes) {\n            const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n            advances.push(getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection));\n        }\n        metrics.breakableFitAdvances = advances;\n        return metrics.breakableFitAdvances;\n    }\n    if (mode === 'pair-context' || graphemes.length > MAX_PREFIX_FIT_GRAPHEMES) {\n        const advances = [];\n        let previousGrapheme = null;\n        let previousWidth = 0;\n        for (const grapheme of graphemes) {\n            const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n            const currentWidth = getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection);\n            if (previousGrapheme === null) {\n                advances.push(currentWidth);\n            }\n            else {\n                const pair = previousGrapheme + grapheme;\n                const pairMetrics = getSegmentMetrics(pair, cache);\n                advances.push(getCorrectedSegmentWidth(pair, pairMetrics, emojiCorrection) - previousWidth);\n            }\n            previousGrapheme = grapheme;\n            previousWidth = currentWidth;\n        }\n        metrics.breakableFitAdvances = advances;\n        return metrics.breakableFitAdvances;\n    }\n    const advances = [];\n    let prefix = '';\n    let prefixWidth = 0;\n    for (const grapheme of graphemes) {\n        prefix += grapheme;\n        const prefixMetrics = getSegmentMetrics(prefix, cache);\n        const nextPrefixWidth = getCorrectedSegmentWidth(prefix, prefixMetrics, emojiCorrection);\n        advances.push(nextPrefixWidth - prefixWidth);\n        prefixWidth = nextPrefixWidth;\n    }\n    metrics.breakableFitAdvances = advances;\n    return metrics.breakableFitAdvances;\n}\nexport function getFontMeasurementState(font, needsEmojiCorrection) {\n    const ctx = getMeasureContext();\n    ctx.font = font;\n    const cache = getSegmentMetricCache(font);\n    const fontSize = parseFontSize(font);\n    const emojiCorrection = needsEmojiCorrection ? getEmojiCorrection(font, fontSize) : 0;\n    return { cache, fontSize, emojiCorrection };\n}\nexport function clearMeasurementCaches() {\n    segmentMetricCaches.clear();\n    emojiCorrectionCache.clear();\n    sharedGraphemeSegmenter = null;\n}\n","import { getEngineProfile } from './measurement.js';\nfunction consumesAtLineStart(kind) {\n    return kind === 'space' || kind === 'zero-width-break' || kind === 'soft-hyphen';\n}\nfunction breaksAfter(kind) {\n    return (kind === 'space' ||\n        kind === 'preserved-space' ||\n        kind === 'tab' ||\n        kind === 'zero-width-break' ||\n        kind === 'soft-hyphen');\n}\nfunction normalizeLineStartSegmentIndex(prepared, segmentIndex, endSegmentIndex = prepared.widths.length) {\n    while (segmentIndex < endSegmentIndex) {\n        const kind = prepared.kinds[segmentIndex];\n        if (!consumesAtLineStart(kind))\n            break;\n        segmentIndex++;\n    }\n    return segmentIndex;\n}\nfunction getTabAdvance(lineWidth, tabStopAdvance) {\n    if (tabStopAdvance <= 0)\n        return 0;\n    const remainder = lineWidth % tabStopAdvance;\n    if (Math.abs(remainder) <= 1e-6)\n        return tabStopAdvance;\n    return tabStopAdvance - remainder;\n}\nfunction getLeadingLetterSpacing(prepared, hasContent, segmentIndex) {\n    return (prepared.letterSpacing !== 0 &&\n        hasContent &&\n        prepared.spacingGraphemeCounts[segmentIndex] > 0)\n        ? prepared.letterSpacing\n        : 0;\n}\nfunction getLineEndContribution(leadingSpacing, segmentContribution) {\n    return segmentContribution === 0 ? 0 : leadingSpacing + segmentContribution;\n}\nfunction getTabTrailingLetterSpacing(prepared, segmentIndex) {\n    return (prepared.letterSpacing !== 0 &&\n        prepared.spacingGraphemeCounts[segmentIndex] > 0)\n        ? prepared.letterSpacing\n        : 0;\n}\nfunction getWholeSegmentFitContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n    const segmentContribution = kind === 'tab'\n        ? segmentWidth + getTabTrailingLetterSpacing(prepared, segmentIndex)\n        : prepared.lineEndFitAdvances[segmentIndex];\n    return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing) {\n    const segmentContribution = kind === 'tab' ? 0 : prepared.lineEndFitAdvances[segmentIndex];\n    return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n    const segmentContribution = kind === 'tab' ? segmentWidth : prepared.lineEndPaintAdvances[segmentIndex];\n    return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakableGraphemeAdvance(prepared, hasContent, baseAdvance) {\n    return prepared.letterSpacing !== 0 && hasContent\n        ? baseAdvance + prepared.letterSpacing\n        : baseAdvance;\n}\nfunction getBreakableCandidateFitWidth(prepared, candidatePaintWidth) {\n    return prepared.letterSpacing === 0\n        ? candidatePaintWidth\n        : candidatePaintWidth + prepared.letterSpacing;\n}\nfunction fitSoftHyphenBreak(graphemeFitAdvances, initialWidth, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, letterSpacing) {\n    let fitCount = 0;\n    let fittedWidth = initialWidth;\n    while (fitCount < graphemeFitAdvances.length) {\n        const nextWidth = fittedWidth + graphemeFitAdvances[fitCount] + letterSpacing;\n        const nextLineWidth = fitCount + 1 < graphemeFitAdvances.length\n            ? nextWidth + discretionaryHyphenWidth\n            : nextWidth;\n        if (nextLineWidth > maxWidth + lineFitEpsilon)\n            break;\n        fittedWidth = nextWidth;\n        fitCount++;\n    }\n    return { fitCount, fittedWidth };\n}\nfunction findChunkIndexForStart(prepared, segmentIndex) {\n    let lo = 0;\n    let hi = prepared.chunks.length;\n    while (lo < hi) {\n        const mid = Math.floor((lo + hi) / 2);\n        if (segmentIndex < prepared.chunks[mid].consumedEndSegmentIndex) {\n            hi = mid;\n        }\n        else {\n            lo = mid + 1;\n        }\n    }\n    return lo < prepared.chunks.length ? lo : -1;\n}\nfunction normalizeLineStartInChunk(prepared, chunkIndex, cursor) {\n    let segmentIndex = cursor.segmentIndex;\n    if (cursor.graphemeIndex > 0)\n        return chunkIndex;\n    const chunk = prepared.chunks[chunkIndex];\n    if (chunk.startSegmentIndex === chunk.endSegmentIndex && segmentIndex === chunk.startSegmentIndex) {\n        cursor.segmentIndex = segmentIndex;\n        cursor.graphemeIndex = 0;\n        return chunkIndex;\n    }\n    if (segmentIndex < chunk.startSegmentIndex)\n        segmentIndex = chunk.startSegmentIndex;\n    segmentIndex = normalizeLineStartSegmentIndex(prepared, segmentIndex, chunk.endSegmentIndex);\n    if (segmentIndex < chunk.endSegmentIndex) {\n        cursor.segmentIndex = segmentIndex;\n        cursor.graphemeIndex = 0;\n        return chunkIndex;\n    }\n    if (chunk.consumedEndSegmentIndex >= prepared.widths.length)\n        return -1;\n    cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n    cursor.graphemeIndex = 0;\n    return chunkIndex + 1;\n}\nfunction normalizeLineStartChunkIndex(prepared, cursor) {\n    if (cursor.segmentIndex >= prepared.widths.length)\n        return -1;\n    const chunkIndex = findChunkIndexForStart(prepared, cursor.segmentIndex);\n    if (chunkIndex < 0)\n        return -1;\n    return normalizeLineStartInChunk(prepared, chunkIndex, cursor);\n}\nfunction normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor) {\n    if (cursor.segmentIndex >= prepared.widths.length)\n        return -1;\n    let nextChunkIndex = chunkIndex;\n    while (nextChunkIndex < prepared.chunks.length &&\n        cursor.segmentIndex >= prepared.chunks[nextChunkIndex].consumedEndSegmentIndex) {\n        nextChunkIndex++;\n    }\n    if (nextChunkIndex >= prepared.chunks.length)\n        return -1;\n    return normalizeLineStartInChunk(prepared, nextChunkIndex, cursor);\n}\nexport function normalizeLineStart(prepared, start) {\n    const cursor = {\n        segmentIndex: start.segmentIndex,\n        graphemeIndex: start.graphemeIndex,\n    };\n    const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n    return chunkIndex < 0 ? null : cursor;\n}\nexport function countPreparedLines(prepared, maxWidth) {\n    return walkPreparedLinesRaw(prepared, maxWidth);\n}\nfunction walkPreparedLinesSimple(prepared, maxWidth, onLine) {\n    const { widths, kinds, breakableFitAdvances } = prepared;\n    if (widths.length === 0)\n        return 0;\n    const engineProfile = getEngineProfile();\n    const lineFitEpsilon = engineProfile.lineFitEpsilon;\n    const fitLimit = maxWidth + lineFitEpsilon;\n    let lineCount = 0;\n    let lineW = 0;\n    let hasContent = false;\n    let lineStartSegmentIndex = 0;\n    let lineStartGraphemeIndex = 0;\n    let lineEndSegmentIndex = 0;\n    let lineEndGraphemeIndex = 0;\n    let pendingBreakSegmentIndex = -1;\n    let pendingBreakPaintWidth = 0;\n    function clearPendingBreak() {\n        pendingBreakSegmentIndex = -1;\n        pendingBreakPaintWidth = 0;\n    }\n    function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n        lineCount++;\n        onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n        lineW = 0;\n        hasContent = false;\n        clearPendingBreak();\n    }\n    function startLineAtSegment(segmentIndex, width) {\n        hasContent = true;\n        lineStartSegmentIndex = segmentIndex;\n        lineStartGraphemeIndex = 0;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n        lineW = width;\n    }\n    function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n        hasContent = true;\n        lineStartSegmentIndex = segmentIndex;\n        lineStartGraphemeIndex = graphemeIndex;\n        lineEndSegmentIndex = segmentIndex;\n        lineEndGraphemeIndex = graphemeIndex + 1;\n        lineW = width;\n    }\n    function appendWholeSegment(segmentIndex, width) {\n        if (!hasContent) {\n            startLineAtSegment(segmentIndex, width);\n            return;\n        }\n        lineW += width;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n    }\n    function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n        const fitAdvances = breakableFitAdvances[segmentIndex];\n        for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n            const gw = fitAdvances[g];\n            if (!hasContent) {\n                startLineAtGrapheme(segmentIndex, g, gw);\n            }\n            else if (lineW + gw > fitLimit) {\n                emitCurrentLine();\n                startLineAtGrapheme(segmentIndex, g, gw);\n            }\n            else {\n                lineW += gw;\n                lineEndSegmentIndex = segmentIndex;\n                lineEndGraphemeIndex = g + 1;\n            }\n        }\n        if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n            lineEndSegmentIndex = segmentIndex + 1;\n            lineEndGraphemeIndex = 0;\n        }\n    }\n    let i = 0;\n    while (i < widths.length) {\n        if (!hasContent) {\n            i = normalizeLineStartSegmentIndex(prepared, i);\n            if (i >= widths.length)\n                break;\n        }\n        const w = widths[i];\n        const kind = kinds[i];\n        const breakAfter = breaksAfter(kind);\n        if (!hasContent) {\n            if (w > fitLimit && breakableFitAdvances[i] !== null) {\n                appendBreakableSegmentFrom(i, 0);\n            }\n            else {\n                startLineAtSegment(i, w);\n            }\n            if (breakAfter) {\n                pendingBreakSegmentIndex = i + 1;\n                pendingBreakPaintWidth = lineW - w;\n            }\n            i++;\n            continue;\n        }\n        const newW = lineW + w;\n        if (newW > fitLimit) {\n            if (breakAfter) {\n                appendWholeSegment(i, w);\n                emitCurrentLine(i + 1, 0, lineW - w);\n                i++;\n                continue;\n            }\n            if (pendingBreakSegmentIndex >= 0) {\n                if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n                    (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n                    emitCurrentLine();\n                    continue;\n                }\n                emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n                continue;\n            }\n            if (w > fitLimit && breakableFitAdvances[i] !== null) {\n                emitCurrentLine();\n                appendBreakableSegmentFrom(i, 0);\n                i++;\n                continue;\n            }\n            emitCurrentLine();\n            continue;\n        }\n        appendWholeSegment(i, w);\n        if (breakAfter) {\n            pendingBreakSegmentIndex = i + 1;\n            pendingBreakPaintWidth = lineW - w;\n        }\n        i++;\n    }\n    if (hasContent)\n        emitCurrentLine();\n    return lineCount;\n}\nexport function walkPreparedLinesRaw(prepared, maxWidth, onLine) {\n    if (prepared.simpleLineWalkFastPath) {\n        return walkPreparedLinesSimple(prepared, maxWidth, onLine);\n    }\n    const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, chunks, } = prepared;\n    if (widths.length === 0 || chunks.length === 0)\n        return 0;\n    const engineProfile = getEngineProfile();\n    const lineFitEpsilon = engineProfile.lineFitEpsilon;\n    const fitLimit = maxWidth + lineFitEpsilon;\n    let lineCount = 0;\n    let lineW = 0;\n    let hasContent = false;\n    let lineStartSegmentIndex = 0;\n    let lineStartGraphemeIndex = 0;\n    let lineEndSegmentIndex = 0;\n    let lineEndGraphemeIndex = 0;\n    let pendingBreakSegmentIndex = -1;\n    let pendingBreakFitWidth = 0;\n    let pendingBreakPaintWidth = 0;\n    let pendingBreakKind = null;\n    function clearPendingBreak() {\n        pendingBreakSegmentIndex = -1;\n        pendingBreakFitWidth = 0;\n        pendingBreakPaintWidth = 0;\n        pendingBreakKind = null;\n    }\n    function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n        lineCount++;\n        onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n        lineW = 0;\n        hasContent = false;\n        clearPendingBreak();\n    }\n    function startLineAtSegment(segmentIndex, width) {\n        hasContent = true;\n        lineStartSegmentIndex = segmentIndex;\n        lineStartGraphemeIndex = 0;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n        lineW = width;\n    }\n    function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n        hasContent = true;\n        lineStartSegmentIndex = segmentIndex;\n        lineStartGraphemeIndex = graphemeIndex;\n        lineEndSegmentIndex = segmentIndex;\n        lineEndGraphemeIndex = graphemeIndex + 1;\n        lineW = width;\n    }\n    function appendWholeSegment(segmentIndex, advance) {\n        if (!hasContent) {\n            startLineAtSegment(segmentIndex, advance);\n            return;\n        }\n        lineW += advance;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n    }\n    function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n        if (!breakAfter)\n            return;\n        const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n        const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n        pendingBreakSegmentIndex = segmentIndex + 1;\n        pendingBreakFitWidth = lineW - advance + fitAdvance;\n        pendingBreakPaintWidth = lineW - advance + paintAdvance;\n        pendingBreakKind = kind;\n    }\n    function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n        const fitAdvances = breakableFitAdvances[segmentIndex];\n        for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n            const baseGw = fitAdvances[g];\n            if (!hasContent) {\n                startLineAtGrapheme(segmentIndex, g, baseGw);\n            }\n            else {\n                const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n                const candidatePaintWidth = lineW + gw;\n                if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n                    emitCurrentLine();\n                    startLineAtGrapheme(segmentIndex, g, baseGw);\n                }\n                else {\n                    lineW = candidatePaintWidth;\n                    lineEndSegmentIndex = segmentIndex;\n                    lineEndGraphemeIndex = g + 1;\n                }\n            }\n        }\n        if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n            lineEndSegmentIndex = segmentIndex + 1;\n            lineEndGraphemeIndex = 0;\n        }\n    }\n    function continueSoftHyphenBreakableSegment(segmentIndex) {\n        if (pendingBreakKind !== 'soft-hyphen')\n            return false;\n        const fitWidths = breakableFitAdvances[segmentIndex];\n        if (fitWidths == null)\n            return false;\n        const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n        if (fitCount === 0)\n            return false;\n        lineW = fittedWidth;\n        lineEndSegmentIndex = segmentIndex;\n        lineEndGraphemeIndex = fitCount;\n        clearPendingBreak();\n        if (fitCount === fitWidths.length) {\n            lineEndSegmentIndex = segmentIndex + 1;\n            lineEndGraphemeIndex = 0;\n            return true;\n        }\n        emitCurrentLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n        appendBreakableSegmentFrom(segmentIndex, fitCount);\n        return true;\n    }\n    function emitEmptyChunk(chunk) {\n        lineCount++;\n        onLine?.(0, chunk.startSegmentIndex, 0, chunk.consumedEndSegmentIndex, 0);\n        clearPendingBreak();\n    }\n    for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {\n        const chunk = chunks[chunkIndex];\n        if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n            emitEmptyChunk(chunk);\n            continue;\n        }\n        hasContent = false;\n        lineW = 0;\n        lineStartSegmentIndex = chunk.startSegmentIndex;\n        lineStartGraphemeIndex = 0;\n        lineEndSegmentIndex = chunk.startSegmentIndex;\n        lineEndGraphemeIndex = 0;\n        clearPendingBreak();\n        let i = chunk.startSegmentIndex;\n        while (i < chunk.endSegmentIndex) {\n            if (!hasContent) {\n                i = normalizeLineStartSegmentIndex(prepared, i, chunk.endSegmentIndex);\n                if (i >= chunk.endSegmentIndex)\n                    break;\n            }\n            const kind = kinds[i];\n            const breakAfter = breaksAfter(kind);\n            const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n            const w = kind === 'tab'\n                ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n                : widths[i];\n            const advance = leadingSpacing + w;\n            const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n            if (kind === 'soft-hyphen') {\n                if (hasContent) {\n                    lineEndSegmentIndex = i + 1;\n                    lineEndGraphemeIndex = 0;\n                    pendingBreakSegmentIndex = i + 1;\n                    pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n                    pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n                    pendingBreakKind = kind;\n                }\n                i++;\n                continue;\n            }\n            if (!hasContent) {\n                if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n                    appendBreakableSegmentFrom(i, 0);\n                }\n                else {\n                    startLineAtSegment(i, w);\n                }\n                updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n                i++;\n                continue;\n            }\n            const newFitW = lineW + fitAdvance;\n            if (newFitW > fitLimit) {\n                const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n                const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n                if (pendingBreakKind === 'soft-hyphen' &&\n                    engineProfile.preferEarlySoftHyphenBreak &&\n                    pendingBreakFitWidth <= fitLimit) {\n                    emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n                    continue;\n                }\n                if (pendingBreakKind === 'soft-hyphen' && continueSoftHyphenBreakableSegment(i)) {\n                    i++;\n                    continue;\n                }\n                if (breakAfter && currentBreakFitWidth <= fitLimit) {\n                    appendWholeSegment(i, advance);\n                    emitCurrentLine(i + 1, 0, currentBreakPaintWidth);\n                    i++;\n                    continue;\n                }\n                if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n                    if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n                        (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n                        emitCurrentLine();\n                        continue;\n                    }\n                    const nextSegmentIndex = pendingBreakSegmentIndex;\n                    emitCurrentLine(nextSegmentIndex, 0, pendingBreakPaintWidth);\n                    i = nextSegmentIndex;\n                    continue;\n                }\n                if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n                    emitCurrentLine();\n                    appendBreakableSegmentFrom(i, 0);\n                    i++;\n                    continue;\n                }\n                emitCurrentLine();\n                continue;\n            }\n            appendWholeSegment(i, advance);\n            updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n            i++;\n        }\n        if (hasContent) {\n            const finalPaintWidth = pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex\n                ? pendingBreakPaintWidth\n                : lineW;\n            emitCurrentLine(chunk.consumedEndSegmentIndex, 0, finalPaintWidth);\n        }\n    }\n    return lineCount;\n}\nexport function walkPreparedLines(prepared, maxWidth, onLine) {\n    if (onLine === undefined)\n        return walkPreparedLinesRaw(prepared, maxWidth);\n    return walkPreparedLinesRaw(prepared, maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n        onLine({\n            startSegmentIndex,\n            startGraphemeIndex,\n            endSegmentIndex,\n            endGraphemeIndex,\n            width,\n        });\n    });\n}\nfunction stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {\n    const chunk = prepared.chunks[chunkIndex];\n    if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n        cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n        cursor.graphemeIndex = 0;\n        return 0;\n    }\n    const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, } = prepared;\n    const engineProfile = getEngineProfile();\n    const lineFitEpsilon = engineProfile.lineFitEpsilon;\n    const fitLimit = maxWidth + lineFitEpsilon;\n    let lineW = 0;\n    let hasContent = false;\n    let lineEndSegmentIndex = cursor.segmentIndex;\n    let lineEndGraphemeIndex = cursor.graphemeIndex;\n    let pendingBreakSegmentIndex = -1;\n    let pendingBreakFitWidth = 0;\n    let pendingBreakPaintWidth = 0;\n    let pendingBreakKind = null;\n    function clearPendingBreak() {\n        pendingBreakSegmentIndex = -1;\n        pendingBreakFitWidth = 0;\n        pendingBreakPaintWidth = 0;\n        pendingBreakKind = null;\n    }\n    function finishLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n        if (!hasContent)\n            return null;\n        cursor.segmentIndex = endSegmentIndex;\n        cursor.graphemeIndex = endGraphemeIndex;\n        return width;\n    }\n    function startLineAtSegment(segmentIndex, width) {\n        hasContent = true;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n        lineW = width;\n    }\n    function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n        hasContent = true;\n        lineEndSegmentIndex = segmentIndex;\n        lineEndGraphemeIndex = graphemeIndex + 1;\n        lineW = width;\n    }\n    function appendWholeSegment(segmentIndex, advance) {\n        if (!hasContent) {\n            startLineAtSegment(segmentIndex, advance);\n            return;\n        }\n        lineW += advance;\n        lineEndSegmentIndex = segmentIndex + 1;\n        lineEndGraphemeIndex = 0;\n    }\n    function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n        if (!breakAfter)\n            return;\n        const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n        const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n        pendingBreakSegmentIndex = segmentIndex + 1;\n        pendingBreakFitWidth = lineW - advance + fitAdvance;\n        pendingBreakPaintWidth = lineW - advance + paintAdvance;\n        pendingBreakKind = kind;\n    }\n    function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n        const fitAdvances = breakableFitAdvances[segmentIndex];\n        for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n            const baseGw = fitAdvances[g];\n            if (!hasContent) {\n                startLineAtGrapheme(segmentIndex, g, baseGw);\n            }\n            else {\n                const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n                const candidatePaintWidth = lineW + gw;\n                if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n                    return finishLine();\n                }\n                lineW = candidatePaintWidth;\n                lineEndSegmentIndex = segmentIndex;\n                lineEndGraphemeIndex = g + 1;\n            }\n        }\n        if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n            lineEndSegmentIndex = segmentIndex + 1;\n            lineEndGraphemeIndex = 0;\n        }\n        return null;\n    }\n    function maybeFinishAtSoftHyphen(segmentIndex) {\n        if (pendingBreakKind !== 'soft-hyphen' || pendingBreakSegmentIndex < 0)\n            return null;\n        const fitWidths = breakableFitAdvances[segmentIndex] ?? null;\n        if (fitWidths !== null) {\n            const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n            if (fitCount === fitWidths.length) {\n                lineW = fittedWidth;\n                lineEndSegmentIndex = segmentIndex + 1;\n                lineEndGraphemeIndex = 0;\n                clearPendingBreak();\n                return null;\n            }\n            if (fitCount > 0) {\n                return finishLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n            }\n        }\n        if (pendingBreakFitWidth <= fitLimit) {\n            return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n        }\n        return null;\n    }\n    for (let i = cursor.segmentIndex; i < chunk.endSegmentIndex; i++) {\n        const kind = kinds[i];\n        const breakAfter = breaksAfter(kind);\n        const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n        const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n        const w = kind === 'tab'\n            ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n            : widths[i];\n        const advance = leadingSpacing + w;\n        const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n        if (kind === 'soft-hyphen' && startGraphemeIndex === 0) {\n            if (hasContent) {\n                lineEndSegmentIndex = i + 1;\n                lineEndGraphemeIndex = 0;\n                pendingBreakSegmentIndex = i + 1;\n                pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n                pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n                pendingBreakKind = kind;\n            }\n            continue;\n        }\n        if (!hasContent) {\n            if (startGraphemeIndex > 0) {\n                const line = appendBreakableSegmentFrom(i, startGraphemeIndex);\n                if (line !== null)\n                    return line;\n            }\n            else if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n                const line = appendBreakableSegmentFrom(i, 0);\n                if (line !== null)\n                    return line;\n            }\n            else {\n                startLineAtSegment(i, w);\n            }\n            updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n            continue;\n        }\n        const newFitW = lineW + fitAdvance;\n        if (newFitW > fitLimit) {\n            const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n            const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n            if (pendingBreakKind === 'soft-hyphen' &&\n                engineProfile.preferEarlySoftHyphenBreak &&\n                pendingBreakFitWidth <= fitLimit) {\n                return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n            }\n            const softBreakLine = maybeFinishAtSoftHyphen(i);\n            if (softBreakLine !== null)\n                return softBreakLine;\n            if (breakAfter && currentBreakFitWidth <= fitLimit) {\n                appendWholeSegment(i, advance);\n                return finishLine(i + 1, 0, currentBreakPaintWidth);\n            }\n            if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n                if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n                    (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n                    return finishLine();\n                }\n                return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n            }\n            if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n                const currentLine = finishLine();\n                if (currentLine !== null)\n                    return currentLine;\n                const line = appendBreakableSegmentFrom(i, 0);\n                if (line !== null)\n                    return line;\n            }\n            return finishLine();\n        }\n        appendWholeSegment(i, advance);\n        updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n    }\n    if (pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex && lineEndGraphemeIndex === 0) {\n        return finishLine(chunk.consumedEndSegmentIndex, 0, pendingBreakPaintWidth);\n    }\n    return finishLine(chunk.consumedEndSegmentIndex, 0, lineW);\n}\nfunction stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth) {\n    const { widths, kinds, breakableFitAdvances } = prepared;\n    const engineProfile = getEngineProfile();\n    const lineFitEpsilon = engineProfile.lineFitEpsilon;\n    const fitLimit = maxWidth + lineFitEpsilon;\n    let lineW = 0;\n    let hasContent = false;\n    let lineEndSegmentIndex = cursor.segmentIndex;\n    let lineEndGraphemeIndex = cursor.graphemeIndex;\n    let pendingBreakSegmentIndex = -1;\n    let pendingBreakPaintWidth = 0;\n    for (let i = cursor.segmentIndex; i < widths.length; i++) {\n        const kind = kinds[i];\n        const breakAfter = breaksAfter(kind);\n        const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n        const breakableFitAdvance = breakableFitAdvances[i];\n        const w = widths[i];\n        if (!hasContent) {\n            if (startGraphemeIndex > 0 || (w > fitLimit && breakableFitAdvance !== null)) {\n                const fitAdvances = breakableFitAdvance;\n                const firstGraphemeWidth = fitAdvances[startGraphemeIndex];\n                hasContent = true;\n                lineW = firstGraphemeWidth;\n                lineEndSegmentIndex = i;\n                lineEndGraphemeIndex = startGraphemeIndex + 1;\n                for (let g = startGraphemeIndex + 1; g < fitAdvances.length; g++) {\n                    const gw = fitAdvances[g];\n                    if (lineW + gw > fitLimit) {\n                        cursor.segmentIndex = lineEndSegmentIndex;\n                        cursor.graphemeIndex = lineEndGraphemeIndex;\n                        return lineW;\n                    }\n                    lineW += gw;\n                    lineEndSegmentIndex = i;\n                    lineEndGraphemeIndex = g + 1;\n                }\n                if (lineEndSegmentIndex === i && lineEndGraphemeIndex === fitAdvances.length) {\n                    lineEndSegmentIndex = i + 1;\n                    lineEndGraphemeIndex = 0;\n                }\n            }\n            else {\n                hasContent = true;\n                lineW = w;\n                lineEndSegmentIndex = i + 1;\n                lineEndGraphemeIndex = 0;\n            }\n            if (breakAfter) {\n                pendingBreakSegmentIndex = i + 1;\n                pendingBreakPaintWidth = lineW - w;\n            }\n            continue;\n        }\n        if (lineW + w > fitLimit) {\n            if (breakAfter) {\n                cursor.segmentIndex = i + 1;\n                cursor.graphemeIndex = 0;\n                return lineW;\n            }\n            if (pendingBreakSegmentIndex >= 0) {\n                if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n                    (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n                    cursor.segmentIndex = lineEndSegmentIndex;\n                    cursor.graphemeIndex = lineEndGraphemeIndex;\n                    return lineW;\n                }\n                cursor.segmentIndex = pendingBreakSegmentIndex;\n                cursor.graphemeIndex = 0;\n                return pendingBreakPaintWidth;\n            }\n            cursor.segmentIndex = lineEndSegmentIndex;\n            cursor.graphemeIndex = lineEndGraphemeIndex;\n            return lineW;\n        }\n        lineW += w;\n        lineEndSegmentIndex = i + 1;\n        lineEndGraphemeIndex = 0;\n        if (breakAfter) {\n            pendingBreakSegmentIndex = i + 1;\n            pendingBreakPaintWidth = lineW - w;\n        }\n    }\n    if (!hasContent)\n        return null;\n    cursor.segmentIndex = lineEndSegmentIndex;\n    cursor.graphemeIndex = lineEndGraphemeIndex;\n    return lineW;\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n    const end = {\n        segmentIndex: start.segmentIndex,\n        graphemeIndex: start.graphemeIndex,\n    };\n    const chunkIndex = normalizeLineStartChunkIndex(prepared, end);\n    if (chunkIndex < 0)\n        return null;\n    const lineStartSegmentIndex = end.segmentIndex;\n    const lineStartGraphemeIndex = end.graphemeIndex;\n    const width = prepared.simpleLineWalkFastPath\n        ? stepPreparedSimpleLineGeometry(prepared, end, maxWidth)\n        : stepPreparedChunkLineGeometry(prepared, end, chunkIndex, maxWidth);\n    if (width === null)\n        return null;\n    return {\n        startSegmentIndex: lineStartSegmentIndex,\n        startGraphemeIndex: lineStartGraphemeIndex,\n        endSegmentIndex: end.segmentIndex,\n        endGraphemeIndex: end.graphemeIndex,\n        width,\n    };\n}\nexport function stepPreparedLineGeometry(prepared, cursor, maxWidth) {\n    const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n    if (chunkIndex < 0)\n        return null;\n    if (prepared.simpleLineWalkFastPath) {\n        return stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth);\n    }\n    return stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n}\nexport function measurePreparedLineGeometry(prepared, maxWidth) {\n    if (prepared.widths.length === 0) {\n        return {\n            lineCount: 0,\n            maxLineWidth: 0,\n        };\n    }\n    const cursor = {\n        segmentIndex: 0,\n        graphemeIndex: 0,\n    };\n    let lineCount = 0;\n    let maxLineWidth = 0;\n    if (!prepared.simpleLineWalkFastPath) {\n        let chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n        while (chunkIndex >= 0) {\n            const lineWidth = stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n            if (lineWidth === null) {\n                return {\n                    lineCount,\n                    maxLineWidth,\n                };\n            }\n            lineCount++;\n            if (lineWidth > maxLineWidth)\n                maxLineWidth = lineWidth;\n            chunkIndex = normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor);\n        }\n        return {\n            lineCount,\n            maxLineWidth,\n        };\n    }\n    while (true) {\n        const lineWidth = stepPreparedLineGeometry(prepared, cursor, maxWidth);\n        if (lineWidth === null) {\n            return {\n                lineCount,\n                maxLineWidth,\n            };\n        }\n        lineCount++;\n        if (lineWidth > maxLineWidth)\n            maxLineWidth = lineWidth;\n    }\n}\n","// Text measurement for browser environments using canvas measureText.\n//\n// Problem: DOM-based text measurement (getBoundingClientRect, offsetHeight)\n// forces synchronous layout reflow. When components independently measure text,\n// each measurement triggers a reflow of the entire document. This creates\n// read/write interleaving that can cost 30ms+ per frame for 500 text blocks.\n//\n// Solution: two-phase measurement centered around canvas measureText.\n//   prepare(text, font) — segments text via Intl.Segmenter, measures each word\n//     via canvas, caches widths, and does one cached DOM calibration read per\n//     font when emoji correction is needed. Call once when text first appears.\n//   layout(prepared, maxWidth, lineHeight) — walks cached word widths with pure\n//     arithmetic to count lines and compute height. Call on every resize.\n//     ~0.0002ms per text.\n//\n// i18n: Intl.Segmenter handles CJK (per-character breaking), Thai, Arabic, etc.\n//   Bidi: simplified rich-path metadata for mixed LTR/RTL custom rendering.\n//   Punctuation merging: \"better.\" measured as one unit (matches CSS behavior).\n//   Trailing whitespace: hangs past line edge without triggering breaks (CSS behavior).\n//   overflow-wrap: pre-measured grapheme widths enable character-level word breaking.\n//\n// Emoji correction: Chrome/Firefox canvas measures emoji wider than DOM at font\n//   sizes <24px on macOS (Apple Color Emoji). The inflation is constant per emoji\n//   grapheme at a given size, font-independent. Auto-detected by comparing canvas\n//   vs actual DOM emoji width (one cached DOM read per font). Safari canvas and\n//   DOM agree (both wider than fontSize), so correction = 0 there.\n//\n// Limitations:\n//   - system-ui font: canvas resolves to different optical variants than DOM on macOS.\n//     Use named fonts (Helvetica, Inter, etc.) for guaranteed accuracy.\n//     See RESEARCH.md \"Discovery: system-ui font resolution mismatch\".\n//\n// Based on Sebastian Markbage's text-layout research (github.com/chenglou/text-layout).\nimport { computeSegmentLevels } from './bidi.js';\nimport { analyzeText, canContinueKeepAllTextRun, clearAnalysisCaches, endsWithClosingQuote, isCJK, isNumericRunSegment, kinsokuEnd, kinsokuStart, leftStickyPunctuation, setAnalysisLocale, } from './analysis.js';\nimport { clearMeasurementCaches, getCorrectedSegmentWidth, getSegmentBreakableFitAdvances, getEngineProfile, getFontMeasurementState, getSegmentMetrics, textMayContainEmoji, } from './measurement.js';\nimport { countPreparedLines, measurePreparedLineGeometry, normalizeLineStart, stepPreparedLineGeometry, walkPreparedLinesRaw, } from './line-break.js';\nimport { buildLineTextFromRange, clearLineTextCaches, getLineTextCache, } from './line-text.js';\nlet sharedGraphemeSegmenter = null;\nfunction getSharedGraphemeSegmenter() {\n    if (sharedGraphemeSegmenter === null) {\n        sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n    }\n    return sharedGraphemeSegmenter;\n}\n// --- Public API ---\nfunction createEmptyPrepared(includeSegments) {\n    if (includeSegments) {\n        return {\n            widths: [],\n            lineEndFitAdvances: [],\n            lineEndPaintAdvances: [],\n            kinds: [],\n            simpleLineWalkFastPath: true,\n            segLevels: null,\n            breakableFitAdvances: [],\n            letterSpacing: 0,\n            spacingGraphemeCounts: [],\n            discretionaryHyphenWidth: 0,\n            tabStopAdvance: 0,\n            chunks: [],\n            segments: [],\n        };\n    }\n    return {\n        widths: [],\n        lineEndFitAdvances: [],\n        lineEndPaintAdvances: [],\n        kinds: [],\n        simpleLineWalkFastPath: true,\n        segLevels: null,\n        breakableFitAdvances: [],\n        letterSpacing: 0,\n        spacingGraphemeCounts: [],\n        discretionaryHyphenWidth: 0,\n        tabStopAdvance: 0,\n        chunks: [],\n    };\n}\nfunction buildBaseCjkUnits(segText, engineProfile) {\n    const units = [];\n    let unitParts = [];\n    let unitStart = 0;\n    let unitContainsCJK = false;\n    let unitEndsWithClosingQuote = false;\n    let unitIsSingleKinsokuEnd = false;\n    function pushUnit() {\n        if (unitParts.length === 0)\n            return;\n        units.push({\n            text: unitParts.length === 1 ? unitParts[0] : unitParts.join(''),\n            start: unitStart,\n        });\n        unitParts = [];\n        unitContainsCJK = false;\n        unitEndsWithClosingQuote = false;\n        unitIsSingleKinsokuEnd = false;\n    }\n    function startUnit(grapheme, start, graphemeContainsCJK) {\n        unitParts = [grapheme];\n        unitStart = start;\n        unitContainsCJK = graphemeContainsCJK;\n        unitEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n        unitIsSingleKinsokuEnd = kinsokuEnd.has(grapheme);\n    }\n    function appendToUnit(grapheme, graphemeContainsCJK) {\n        unitParts.push(grapheme);\n        unitContainsCJK = unitContainsCJK || graphemeContainsCJK;\n        const graphemeEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n        if (grapheme.length === 1 && leftStickyPunctuation.has(grapheme)) {\n            unitEndsWithClosingQuote = unitEndsWithClosingQuote || graphemeEndsWithClosingQuote;\n        }\n        else {\n            unitEndsWithClosingQuote = graphemeEndsWithClosingQuote;\n        }\n        unitIsSingleKinsokuEnd = false;\n    }\n    for (const gs of getSharedGraphemeSegmenter().segment(segText)) {\n        const grapheme = gs.segment;\n        const graphemeContainsCJK = isCJK(grapheme);\n        if (unitParts.length === 0) {\n            startUnit(grapheme, gs.index, graphemeContainsCJK);\n            continue;\n        }\n        if (unitIsSingleKinsokuEnd ||\n            kinsokuStart.has(grapheme) ||\n            leftStickyPunctuation.has(grapheme) ||\n            (engineProfile.carryCJKAfterClosingQuote &&\n                graphemeContainsCJK &&\n                unitEndsWithClosingQuote)) {\n            appendToUnit(grapheme, graphemeContainsCJK);\n            continue;\n        }\n        if (!unitContainsCJK && !graphemeContainsCJK) {\n            appendToUnit(grapheme, graphemeContainsCJK);\n            continue;\n        }\n        pushUnit();\n        startUnit(grapheme, gs.index, graphemeContainsCJK);\n    }\n    pushUnit();\n    return units;\n}\nfunction mergeKeepAllTextUnits(units) {\n    if (units.length <= 1)\n        return units;\n    const merged = [];\n    let currentTextParts = [units[0].text];\n    let currentStart = units[0].start;\n    let currentContainsCJK = isCJK(units[0].text);\n    let currentCanContinue = canContinueKeepAllTextRun(units[0].text);\n    function flushCurrent() {\n        merged.push({\n            text: currentTextParts.length === 1 ? currentTextParts[0] : currentTextParts.join(''),\n            start: currentStart,\n        });\n    }\n    for (let i = 1; i < units.length; i++) {\n        const next = units[i];\n        const nextContainsCJK = isCJK(next.text);\n        const nextCanContinue = canContinueKeepAllTextRun(next.text);\n        if (currentContainsCJK && currentCanContinue) {\n            currentTextParts.push(next.text);\n            currentContainsCJK = currentContainsCJK || nextContainsCJK;\n            currentCanContinue = nextCanContinue;\n            continue;\n        }\n        flushCurrent();\n        currentTextParts = [next.text];\n        currentStart = next.start;\n        currentContainsCJK = nextContainsCJK;\n        currentCanContinue = nextCanContinue;\n    }\n    flushCurrent();\n    return merged;\n}\nfunction countRenderedSpacingGraphemes(text, kind) {\n    if (kind === 'zero-width-break' ||\n        kind === 'soft-hyphen' ||\n        kind === 'hard-break') {\n        return 0;\n    }\n    if (kind === 'tab')\n        return 1;\n    let count = 0;\n    const graphemeSegmenter = getSharedGraphemeSegmenter();\n    for (const _ of graphemeSegmenter.segment(text))\n        count++;\n    return count;\n}\nfunction addInternalLetterSpacing(width, graphemeCount, letterSpacing) {\n    return graphemeCount > 1 ? width + (graphemeCount - 1) * letterSpacing : width;\n}\nfunction measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing) {\n    const engineProfile = getEngineProfile();\n    const { cache, emojiCorrection } = getFontMeasurementState(font, textMayContainEmoji(analysis.normalized));\n    const discretionaryHyphenWidth = getCorrectedSegmentWidth('-', getSegmentMetrics('-', cache), emojiCorrection) +\n        (letterSpacing === 0 ? 0 : letterSpacing);\n    const spaceWidth = getCorrectedSegmentWidth(' ', getSegmentMetrics(' ', cache), emojiCorrection);\n    const tabStopAdvance = spaceWidth * 8;\n    const hasLetterSpacing = letterSpacing !== 0;\n    if (analysis.len === 0)\n        return createEmptyPrepared(includeSegments);\n    const widths = [];\n    const lineEndFitAdvances = [];\n    const lineEndPaintAdvances = [];\n    const kinds = [];\n    let simpleLineWalkFastPath = analysis.chunks.length <= 1 && !hasLetterSpacing;\n    const segStarts = includeSegments ? [] : null;\n    const breakableFitAdvances = [];\n    const spacingGraphemeCounts = [];\n    const segments = includeSegments ? [] : null;\n    const preparedStartByAnalysisIndex = Array.from({ length: analysis.len });\n    function pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, breakableFitAdvance, spacingGraphemeCount) {\n        if (kind !== 'text' && kind !== 'space' && kind !== 'zero-width-break') {\n            simpleLineWalkFastPath = false;\n        }\n        widths.push(width);\n        lineEndFitAdvances.push(lineEndFitAdvance);\n        lineEndPaintAdvances.push(lineEndPaintAdvance);\n        kinds.push(kind);\n        segStarts?.push(start);\n        breakableFitAdvances.push(breakableFitAdvance);\n        if (hasLetterSpacing)\n            spacingGraphemeCounts.push(spacingGraphemeCount);\n        if (segments !== null)\n            segments.push(text);\n    }\n    function pushMeasuredTextSegment(text, kind, start, wordLike, allowOverflowBreaks) {\n        const textMetrics = getSegmentMetrics(text, cache);\n        const spacingGraphemeCount = hasLetterSpacing\n            ? countRenderedSpacingGraphemes(text, kind)\n            : 0;\n        const width = addInternalLetterSpacing(getCorrectedSegmentWidth(text, textMetrics, emojiCorrection), spacingGraphemeCount, letterSpacing);\n        const baseLineEndFitAdvance = kind === 'space' || kind === 'preserved-space' || kind === 'zero-width-break'\n            ? 0\n            : width;\n        const lineEndFitAdvance = baseLineEndFitAdvance === 0\n            ? 0\n            : baseLineEndFitAdvance + (spacingGraphemeCount > 0 ? letterSpacing : 0);\n        const lineEndPaintAdvance = kind === 'space' || kind === 'zero-width-break'\n            ? 0\n            : width;\n        if (allowOverflowBreaks && wordLike && text.length > 1) {\n            let fitMode = 'sum-graphemes';\n            if (letterSpacing !== 0) {\n                fitMode = 'segment-prefixes';\n            }\n            else if (isNumericRunSegment(text)) {\n                fitMode = 'pair-context';\n            }\n            else if (engineProfile.preferPrefixWidthsForBreakableRuns) {\n                fitMode = 'segment-prefixes';\n            }\n            const fitAdvances = getSegmentBreakableFitAdvances(text, textMetrics, cache, emojiCorrection, fitMode);\n            pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, fitAdvances, spacingGraphemeCount);\n            return;\n        }\n        pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, null, spacingGraphemeCount);\n    }\n    for (let mi = 0; mi < analysis.len; mi++) {\n        preparedStartByAnalysisIndex[mi] = widths.length;\n        const segText = analysis.texts[mi];\n        const segWordLike = analysis.isWordLike[mi];\n        const segKind = analysis.kinds[mi];\n        const segStart = analysis.starts[mi];\n        if (segKind === 'soft-hyphen') {\n            pushMeasuredSegment(segText, 0, discretionaryHyphenWidth, discretionaryHyphenWidth, segKind, segStart, null, 0);\n            continue;\n        }\n        if (segKind === 'hard-break') {\n            pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, 0);\n            continue;\n        }\n        if (segKind === 'tab') {\n            pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, hasLetterSpacing ? countRenderedSpacingGraphemes(segText, segKind) : 0);\n            continue;\n        }\n        const segMetrics = getSegmentMetrics(segText, cache);\n        if (segKind === 'text' && segMetrics.containsCJK) {\n            const baseUnits = buildBaseCjkUnits(segText, engineProfile);\n            const measuredUnits = wordBreak === 'keep-all'\n                ? mergeKeepAllTextUnits(baseUnits)\n                : baseUnits;\n            for (let i = 0; i < measuredUnits.length; i++) {\n                const unit = measuredUnits[i];\n                pushMeasuredTextSegment(unit.text, 'text', segStart + unit.start, segWordLike, wordBreak === 'keep-all' || !isCJK(unit.text));\n            }\n            continue;\n        }\n        pushMeasuredTextSegment(segText, segKind, segStart, segWordLike, true);\n    }\n    const chunks = mapAnalysisChunksToPreparedChunks(analysis.chunks, preparedStartByAnalysisIndex, widths.length);\n    const segLevels = segStarts === null ? null : computeSegmentLevels(analysis.normalized, segStarts);\n    if (segments !== null) {\n        return {\n            widths,\n            lineEndFitAdvances,\n            lineEndPaintAdvances,\n            kinds,\n            simpleLineWalkFastPath,\n            segLevels,\n            breakableFitAdvances,\n            letterSpacing,\n            spacingGraphemeCounts,\n            discretionaryHyphenWidth,\n            tabStopAdvance,\n            chunks,\n            segments,\n        };\n    }\n    return {\n        widths,\n        lineEndFitAdvances,\n        lineEndPaintAdvances,\n        kinds,\n        simpleLineWalkFastPath,\n        segLevels,\n        breakableFitAdvances,\n        letterSpacing,\n        spacingGraphemeCounts,\n        discretionaryHyphenWidth,\n        tabStopAdvance,\n        chunks,\n    };\n}\nfunction mapAnalysisChunksToPreparedChunks(chunks, preparedStartByAnalysisIndex, preparedEndSegmentIndex) {\n    const preparedChunks = [];\n    for (let i = 0; i < chunks.length; i++) {\n        const chunk = chunks[i];\n        const startSegmentIndex = chunk.startSegmentIndex < preparedStartByAnalysisIndex.length\n            ? preparedStartByAnalysisIndex[chunk.startSegmentIndex]\n            : preparedEndSegmentIndex;\n        const endSegmentIndex = chunk.endSegmentIndex < preparedStartByAnalysisIndex.length\n            ? preparedStartByAnalysisIndex[chunk.endSegmentIndex]\n            : preparedEndSegmentIndex;\n        const consumedEndSegmentIndex = chunk.consumedEndSegmentIndex < preparedStartByAnalysisIndex.length\n            ? preparedStartByAnalysisIndex[chunk.consumedEndSegmentIndex]\n            : preparedEndSegmentIndex;\n        preparedChunks.push({\n            startSegmentIndex,\n            endSegmentIndex,\n            consumedEndSegmentIndex,\n        });\n    }\n    return preparedChunks;\n}\nfunction prepareInternal(text, font, includeSegments, options) {\n    const wordBreak = options?.wordBreak ?? 'normal';\n    const letterSpacing = options?.letterSpacing ?? 0;\n    const analysis = analyzeText(text, getEngineProfile(), options?.whiteSpace, wordBreak);\n    return measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing);\n}\n// Prepare text for layout. Segments the text, measures each segment via canvas,\n// and stores the widths for fast relayout at any width. Call once per text block\n// (e.g. when a comment first appears). The result is width-independent — the\n// same PreparedText can be laid out at any maxWidth and lineHeight via layout().\n//\n// Steps:\n//   1. Normalize collapsible whitespace (CSS white-space: normal behavior)\n//   2. Segment via Intl.Segmenter (handles CJK, Thai, etc.)\n//   3. Merge punctuation into preceding word (\"better.\" as one unit)\n//   4. Split CJK words into individual graphemes (per-character line breaks)\n//   5. Measure each segment via canvas measureText, cache by (segment, font)\n//   6. Pre-measure graphemes of long words (for overflow-wrap: break-word)\n//   7. Correct emoji canvas inflation (auto-detected per font size)\n//   8. Optionally compute rich-path bidi metadata for custom renderers\nexport function prepare(text, font, options) {\n    return prepareInternal(text, font, false, options);\n}\n// Rich variant used by callers that need enough information to render the\n// laid-out lines themselves.\nexport function prepareWithSegments(text, font, options) {\n    return prepareInternal(text, font, true, options);\n}\nfunction getInternalPrepared(prepared) {\n    return prepared;\n}\n// Layout prepared text at a given max width and caller-provided lineHeight.\n// Pure arithmetic on cached widths — no canvas calls, no DOM reads, no string\n// operations, no allocations.\n// ~0.0002ms per text block. Call on every resize.\n//\n// Line breaking rules (matching CSS white-space: normal + overflow-wrap: break-word):\n//   - Break before any non-space segment that would overflow the line\n//   - Trailing whitespace hangs past the line edge (doesn't trigger breaks)\n//   - Segments wider than maxWidth are broken at grapheme boundaries\nexport function layout(prepared, maxWidth, lineHeight) {\n    // Keep the resize hot path specialized. `layoutWithLines()` shares the same\n    // break semantics but also tracks line ranges; the extra bookkeeping is too\n    // expensive to pay on every hot-path `layout()` call.\n    const lineCount = countPreparedLines(getInternalPrepared(prepared), maxWidth);\n    return { lineCount, height: lineCount * lineHeight };\n}\nfunction createLayoutLine(prepared, cache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n    return {\n        text: buildLineTextFromRange(prepared, cache, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex),\n        width,\n        start: {\n            segmentIndex: startSegmentIndex,\n            graphemeIndex: startGraphemeIndex,\n        },\n        end: {\n            segmentIndex: endSegmentIndex,\n            graphemeIndex: endGraphemeIndex,\n        },\n    };\n}\nfunction createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n    return {\n        width,\n        start: {\n            segmentIndex: startSegmentIndex,\n            graphemeIndex: startGraphemeIndex,\n        },\n        end: {\n            segmentIndex: endSegmentIndex,\n            graphemeIndex: endGraphemeIndex,\n        },\n    };\n}\nexport function materializeLineRange(prepared, line) {\n    return createLayoutLine(prepared, getLineTextCache(prepared), line.width, line.start.segmentIndex, line.start.graphemeIndex, line.end.segmentIndex, line.end.graphemeIndex);\n}\n// Batch low-level line-range pass. This is the non-materializing counterpart\n// to layoutWithLines(), useful for shrinkwrap and other aggregate stats work.\nexport function walkLineRanges(prepared, maxWidth, onLine) {\n    if (prepared.widths.length === 0)\n        return 0;\n    return walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n        onLine(createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n    });\n}\nexport function measureLineStats(prepared, maxWidth) {\n    return measurePreparedLineGeometry(getInternalPrepared(prepared), maxWidth);\n}\n// Intrinsic-width helper for rich/userland layout work. This asks \"how wide is\n// the prepared text when container width is not the thing forcing wraps?\".\n// Explicit hard breaks still count, so this returns the widest forced line.\nexport function measureNaturalWidth(prepared) {\n    let maxWidth = 0;\n    walkPreparedLinesRaw(getInternalPrepared(prepared), Number.POSITIVE_INFINITY, width => {\n        if (width > maxWidth)\n            maxWidth = width;\n    });\n    return maxWidth;\n}\nexport function layoutNextLine(prepared, start, maxWidth) {\n    const internal = getInternalPrepared(prepared);\n    const normalizedStart = normalizeLineStart(internal, start);\n    if (normalizedStart === null)\n        return null;\n    const end = {\n        segmentIndex: normalizedStart.segmentIndex,\n        graphemeIndex: normalizedStart.graphemeIndex,\n    };\n    const width = stepPreparedLineGeometry(internal, end, maxWidth);\n    if (width === null)\n        return null;\n    return createLayoutLine(prepared, getLineTextCache(prepared), width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n    const internal = getInternalPrepared(prepared);\n    const normalizedStart = normalizeLineStart(internal, start);\n    if (normalizedStart === null)\n        return null;\n    const end = {\n        segmentIndex: normalizedStart.segmentIndex,\n        graphemeIndex: normalizedStart.graphemeIndex,\n    };\n    const width = stepPreparedLineGeometry(internal, end, maxWidth);\n    if (width === null)\n        return null;\n    return createLayoutLineRange(width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\n// Rich layout API for callers that want the actual line contents and widths.\n// Caller still supplies lineHeight at layout time. Mirrors layout()'s break\n// decisions, but keeps extra per-line bookkeeping so it should stay off the\n// resize hot path.\nexport function layoutWithLines(prepared, maxWidth, lineHeight) {\n    const lines = [];\n    if (prepared.widths.length === 0)\n        return { lineCount: 0, height: 0, lines };\n    const graphemeCache = getLineTextCache(prepared);\n    const lineCount = walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n        lines.push(createLayoutLine(prepared, graphemeCache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n    });\n    return { lineCount, height: lineCount * lineHeight, lines };\n}\nexport function clearCache() {\n    clearAnalysisCaches();\n    sharedGraphemeSegmenter = null;\n    clearLineTextCaches();\n    clearMeasurementCaches();\n}\nexport function setLocale(locale) {\n    setAnalysisLocale(locale);\n    clearCache();\n}\n","import { prepareWithSegments, measureNaturalWidth } from '@chenglou/pretext';\nimport { useAIOfficeStore } from '@/app/store/use-ai-office-store';\n\nexport const useTextareaIndent = () => {\n  const currentWorkingAgent = useAIOfficeStore((state) => state.workerName);\n  if (!currentWorkingAgent) {\n    return 0;\n  }\n\n  const prepared = prepareWithSegments(\n    currentWorkingAgent,\n    '14px ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"'\n  );\n\n  const width = measureNaturalWidth(prepared);\n\n  return width + 22;\n};\n","import * as react from 'react';\nimport type { ChatStatus } from 'ai';\nimport { Loader2Icon, LucideProps, SendIcon, XIcon } from 'lucide-react';\nimport type { ComponentProps, HTMLAttributes, KeyboardEventHandler } from 'react';\nimport { Button } from '@/app/components/ui/button';\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '@/app/components/ui/select';\nimport { Textarea } from '@/app/components/ui/textarea';\nimport { cn } from '@/lib/utils';\nimport { StopIcon } from '@baishuyun/ai-design/bs-icons';\nimport { BsTooltip } from '@baishuyun/ai-design/tooltip';\nimport { useTextareaIndent } from '@/app/hooks/use-textarea-indent';\n\nexport type PromptInputProps = HTMLAttributes<HTMLFormElement>;\n\nexport const PromptInput = ({ className, ...props }: PromptInputProps) => (\n  <form\n    className={cn(\n      'w-full overflow-hidden rounded-lg border bg-background shadow-xs',\n      className\n    )}\n    {...props}\n  />\n);\n\nexport type PromptInputTextareaProps = ComponentProps<typeof Textarea> & {\n  minHeight?: number;\n  maxHeight?: number;\n  disableAutoResize?: boolean;\n  resizeOnNewLinesOnly?: boolean;\n};\n\nexport const PromptInputTextarea = react.forwardRef<HTMLTextAreaElement, PromptInputTextareaProps>(\n  (\n    {\n      onChange,\n      className,\n      placeholder = 'What would you like to know?',\n      minHeight = 50,\n      maxHeight = 164,\n      disableAutoResize = false,\n      resizeOnNewLinesOnly = false,\n      ...props\n    }: PromptInputTextareaProps,\n    ref\n  ) => {\n    const indent = useTextareaIndent();\n\n    const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = (e) => {\n      if (e.key === 'Enter') {\n        // Don't submit if IME composition is in progress\n        if (e.nativeEvent.isComposing) {\n          return;\n        }\n\n        if (e.shiftKey) {\n          // Allow newline\n          return;\n        }\n\n        // Submit on Enter (without Shift)\n        e.preventDefault();\n        const form = e.currentTarget.form;\n        if (form) {\n          form.requestSubmit();\n        }\n      }\n    };\n\n    return (\n      <Textarea\n        className={cn(\n          'w-full resize-none rounded-none border-none shadow-none outline-hidden ring-0',\n          disableAutoResize\n            ? 'field-sizing-fixed'\n            : resizeOnNewLinesOnly\n              ? 'field-sizing-fixed'\n              : 'field-sizing-content min-h-[3lh] max-h-[8lh]',\n          'bg-transparent dark:bg-transparent',\n          'focus-visible:ring-0',\n          className\n        )}\n        name=\"message\"\n        onChange={(e) => {\n          onChange?.(e);\n        }}\n        ref={ref}\n        style={{\n          ...props.style,\n          textIndent: indent,\n        }}\n        onKeyDown={handleKeyDown}\n        placeholder={placeholder}\n        {...props}\n      />\n    );\n  }\n);\n\nexport type PromptInputToolbarProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputToolbar = ({ className, ...props }: PromptInputToolbarProps) => (\n  <div className={cn('flex items-center justify-between p-1', className)} {...props} />\n);\n\nexport type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTools = ({ className, ...props }: PromptInputToolsProps) => (\n  <div className={cn('flex items-center gap-1', className)} {...props} />\n);\n\nexport type PromptInputButtonProps = ComponentProps<typeof Button>;\n\nexport const PromptInputButton = ({\n  variant = 'ghost',\n  className,\n  size,\n  ...props\n}: PromptInputButtonProps) => {\n  const newSize =\n    (size ??\n      (Array.isArray(props.children)\n        ? props.children.length\n        : props.children\n          ? 1\n          : 0) >\n      1)\n      ? 'default'\n      : 'icon';\n\n  return (\n    <Button\n      className={cn(\n        'shrink-0 gap-1.5 rounded-lg',\n        variant === 'ghost' && 'text-muted-foreground',\n        newSize === 'default' && 'px-3',\n        className\n      )}\n      size={newSize}\n      type=\"button\"\n      variant={variant}\n      {...props}\n    />\n  );\n};\n\nexport type PromptInputSubmitProps = ComponentProps<typeof Button> & {\n  status?: ChatStatus;\n};\n\ntype CompatibleLucideComponent = react.ForwardRefExoticComponent<\n  Omit<LucideProps, 'ref'> & react.RefAttributes<SVGSVGElement>\n>;\n\nconst getIconForStatus = (status?: ChatStatus) => {\n  const Loader = Loader2Icon as unknown as CompatibleLucideComponent;\n  const X = XIcon as unknown as CompatibleLucideComponent;\n  const Send = SendIcon as unknown as CompatibleLucideComponent;\n\n  if (status === undefined) {\n    return <Send className=\"size-4\" />;\n  }\n\n  const StatusIconMap: Record<ChatStatus, react.ReactNode> = {\n    submitted: <Loader className=\"size-4 animate-spin\" />,\n    streaming: <StopIcon />,\n    error: <X className=\"size-4\" />,\n    ready: <Send className=\"size-4\" />,\n  };\n\n  return StatusIconMap[status!] || <Send className=\"size-4\" />;\n};\n\nexport const PromptInputSubmit = ({\n  className,\n  variant = 'default',\n  size = 'icon',\n  status,\n  children,\n  ...props\n}: PromptInputSubmitProps) => {\n  let Icon = getIconForStatus(status);\n\n  return (\n    <BsTooltip content=\"发送\">\n      <Button\n        className={cn('gap-1.5 rounded-full', className)}\n        size={size}\n        type=\"submit\"\n        variant={variant}\n        {...props}\n      >\n        {children ?? Icon}\n      </Button>\n    </BsTooltip>\n  );\n};\n\nexport type PromptInputModelSelectProps = ComponentProps<typeof Select>;\n\nexport const PromptInputModelSelect = (props: PromptInputModelSelectProps) => <Select {...props} />;\n\nexport type PromptInputModelSelectTriggerProps = ComponentProps<typeof SelectTrigger>;\n\nexport const PromptInputModelSelectTrigger = ({\n  className,\n  ...props\n}: PromptInputModelSelectTriggerProps) => (\n  <SelectTrigger\n    className={cn(\n      'border-none bg-transparent font-medium text-muted-foreground shadow-none transition-colors',\n      'hover:bg-accent hover:text-foreground aria-expanded:bg-accent aria-expanded:text-foreground',\n      'h-auto px-2 py-1.5',\n      className\n    )}\n    {...props}\n  />\n);\n\nexport type PromptInputModelSelectContentProps = ComponentProps<typeof SelectContent>;\n\nexport const PromptInputModelSelectContent = ({\n  className,\n  ...props\n}: PromptInputModelSelectContentProps) => <SelectContent className={cn(className)} {...props} />;\n\nexport type PromptInputModelSelectItemProps = ComponentProps<typeof SelectItem>;\n\nexport const PromptInputModelSelectItem = ({\n  className,\n  ...props\n}: PromptInputModelSelectItemProps) => <SelectItem className={cn(className)} {...props} />;\n\nexport type PromptInputModelSelectValueProps = ComponentProps<typeof SelectValue>;\n\nexport const PromptInputModelSelectValue = ({\n  className,\n  ...props\n}: PromptInputModelSelectValueProps) => <SelectValue className={cn(className)} {...props} />;\n","import { AttachmentsPreviewer } from '@baishuyun/ai-design/attachments-previewer';\nimport type { Attachment } from '@baishuyun/types';\nimport { memo } from 'react';\n\ninterface AttachmentPreviewListProps {\n  attachments: Attachment[];\n  uploadQueue: string[];\n  onRemove: (item: { id: string; alt?: string }) => void;\n}\n\nfunction PureAttachmentPreviewList({ attachments, uploadQueue, onRemove }: AttachmentPreviewListProps) {\n  if (attachments.length === 0 && uploadQueue.length === 0) {\n    return null;\n  }\n\n  const previewItems = [\n    ...attachments.map((a) => ({\n      id: a.url,\n      url: a.url,\n      alt: a.name,\n      contentType: a.contentType,\n    })),\n    ...uploadQueue.map((filename) => ({\n      id: `uploading-${filename}`,\n      url: '',\n      alt: filename,\n      isLoading: true,\n    })),\n  ];\n\n  return (\n    <AttachmentsPreviewer\n      attachments={previewItems}\n      imageSize={52}\n      onImageRemove={onRemove}\n    />\n  );\n}\n\nexport const AttachmentPreviewList = memo(PureAttachmentPreviewList);\n","import { memo } from 'react';\n\nimport { UseChatHelpers } from '@ai-sdk/react';\nimport { ChatMessage } from '@baishuyun/types';\nimport { UploadIcon } from '@baishuyun/ai-design/bs-icons';\nimport { IconBtn } from '@baishuyun/ai-design';\n\nfunction PureAttachmentsButton({\n  fileInputRef,\n  status,\n  tooltip,\n}: {\n  fileInputRef: React.MutableRefObject<HTMLInputElement | null>;\n  status: UseChatHelpers<ChatMessage>['status'];\n  tooltip?: string;\n}) {\n  return (\n    <IconBtn\n      tooltip={tooltip}\n      rounded\n      icon={<UploadIcon />}\n      disabled={status !== 'ready'}\n      onClick={(event: any) => {\n        event.preventDefault();\n        fileInputRef.current?.click();\n      }}\n    />\n  );\n}\n\nexport const AttachmentsButton = memo(PureAttachmentsButton);","import { useCallback, useRef, useState } from 'react';\n\nexport interface UseVoiceInputOptions {\n  /** ASR WebSocket 端点，如 ws://localhost:3001/web/api/asr */\n  endpoint?: string;\n  /** 收到识别文本 */\n  onText: (text: string) => void;\n  /** 识别完成 */\n  onDone: () => void;\n  /** 发生错误 */\n  onError: (msg: string) => void;\n}\n\nexport interface UseVoiceInputReturn {\n  /** 是否正在录音（麦克风采集音频中） */\n  isRecording: boolean;\n  /** 是否正在连接（获取权限 / WebSocket 握手） */\n  isConnecting: boolean;\n  /** 是否正在识别（已停止录音，等待后端返回结果） */\n  isRecognizing: boolean;\n  /** 开始录音 */\n  start: () => Promise<void>;\n  /** 停止录音 */\n  stop: () => void;\n}\n\n/**\n * 语音输入 Hook\n *\n * 使用浏览器原生 Web Audio API（AudioContext + ScriptProcessorNode）\n * 直接录制 pcm_s16le 格式音频，通过 WebSocket 发送到后端\n * 无第三方语音识别 SDK，只与 Node 后端通信\n */\nexport function useVoiceInput(options: UseVoiceInputOptions): UseVoiceInputReturn {\n  const { endpoint, onText, onDone, onError } = options;\n\n  const [isRecording, setIsRecording] = useState(false);\n  const [isConnecting, setIsConnecting] = useState(false);\n  const [isRecognizing, setIsRecognizing] = useState(false);\n\n  const audioContextRef = useRef<AudioContext | null>(null);\n  const processorRef = useRef<ScriptProcessorNode | null>(null);\n  const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n  const wsRef = useRef<WebSocket | null>(null);\n  const streamRef = useRef<MediaStream | null>(null);\n\n  const cleanup = useCallback(() => {\n    if (processorRef.current) {\n      try {\n        processorRef.current.disconnect();\n      } catch {\n        // ignore\n      }\n      processorRef.current = null;\n    }\n\n    if (sourceRef.current) {\n      try {\n        sourceRef.current.disconnect();\n      } catch {\n        // ignore\n      }\n      sourceRef.current = null;\n    }\n\n    if (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n      try {\n        audioContextRef.current.close();\n      } catch {\n        // ignore\n      }\n      audioContextRef.current = null;\n    }\n\n    if (wsRef.current) {\n      try {\n        wsRef.current.close();\n      } catch {\n        // ignore\n      }\n      wsRef.current = null;\n    }\n\n    if (streamRef.current) {\n      streamRef.current.getTracks().forEach((track) => track.stop());\n      streamRef.current = null;\n    }\n\n    setIsRecording(false);\n    setIsConnecting(false);\n    setIsRecognizing(false);\n  }, []);\n\n  const start = useCallback(async () => {\n    if (!endpoint) {\n      onError('ASR 服务未配置');\n      return;\n    }\n\n    // 清理之前的状态\n    cleanup();\n\n    setIsConnecting(true);\n\n    try {\n      // 1. 获取麦克风权限\n      const stream = await navigator.mediaDevices.getUserMedia({\n        audio: {\n          sampleRate: 16000,\n          channelCount: 1,\n          echoCancellation: true,\n          noiseSuppression: true,\n        },\n      });\n      streamRef.current = stream;\n\n      // 2. 创建 AudioContext（16kHz 单声道，匹配火山引擎要求）\n      const audioContext = new AudioContext({ sampleRate: 16000 });\n      audioContextRef.current = audioContext;\n\n      const source = audioContext.createMediaStreamSource(stream);\n      sourceRef.current = source;\n\n      // 3. 创建 ScriptProcessorNode（bufferSize=2048，约 128ms @ 16kHz，符合火山引擎建议的 100-200ms）\n      const processor = audioContext.createScriptProcessor(2048, 1, 1);\n      processorRef.current = processor;\n\n      // 4. 创建 WebSocket 连接\n      const ws = new WebSocket(endpoint);\n      ws.binaryType = 'arraybuffer';\n      wsRef.current = ws;\n\n      let hasReceivedResult = false;\n\n      ws.onopen = () => {\n        // WebSocket 连接成功后，连接音频处理节点开始录音\n        source.connect(processor);\n        processor.connect(audioContext.destination);\n\n        processor.onaudioprocess = (e) => {\n          if (ws.readyState !== WebSocket.OPEN) return;\n\n          const inputData = e.inputBuffer.getChannelData(0); // Float32Array\n          const pcmData = float32ToInt16(inputData);\n          ws.send(pcmData.buffer as ArrayBuffer);\n        };\n\n        setIsConnecting(false);\n        setIsRecording(true);\n      };\n\n      ws.onmessage = (event) => {\n        try {\n          const data = JSON.parse(event.data as string);\n          if (data.type === 'result' || data.type === 'final') {\n            hasReceivedResult = true;\n            onText(data.text || '');\n          }\n          if (data.type === 'done') {\n            setIsRecognizing(false);\n            onDone();\n          }\n          if (data.type === 'error') {\n            setIsRecognizing(false);\n            onError(data.message || '语音识别出错');\n          }\n        } catch {\n          // 忽略非 JSON 消息\n        }\n      };\n\n      ws.onerror = () => {\n        onError('语音识别连接失败');\n        cleanup();\n      };\n\n      ws.onclose = () => {\n        // 如果已经收到过结果但还没收到 done，可能是连接异常关闭\n        if (hasReceivedResult) {\n          setIsRecognizing(false);\n        }\n        setIsRecording(false);\n        setIsConnecting(false);\n      };\n    } catch (error) {\n      setIsConnecting(false);\n      const msg = error instanceof Error ? error.message : '录音启动失败';\n      if (msg.includes('Permission denied') || msg.includes('NotAllowedError')) {\n        onError('麦克风权限被拒绝');\n      } else if (msg.includes('NotFoundError')) {\n        onError('未找到麦克风设备');\n      } else {\n        onError(msg);\n      }\n    }\n  }, [endpoint, onText, onDone, onError, cleanup]);\n\n  const stop = useCallback(() => {\n    // 断开音频处理节点，停止录音\n    if (processorRef.current) {\n      processorRef.current.onaudioprocess = null;\n      try {\n        processorRef.current.disconnect();\n      } catch {\n        // ignore\n      }\n    }\n\n    if (sourceRef.current) {\n      try {\n        sourceRef.current.disconnect();\n      } catch {\n        // ignore\n      }\n    }\n\n    if (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n      try {\n        audioContextRef.current.close();\n      } catch {\n        // ignore\n      }\n    }\n\n    // 停止麦克风轨道\n    if (streamRef.current) {\n      streamRef.current.getTracks().forEach((track) => track.stop());\n      streamRef.current = null;\n    }\n\n    // 发送结束信号\n    if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {\n      wsRef.current.send('end');\n    }\n\n    // 停止录音，进入识别中状态\n    setIsRecording(false);\n    setIsRecognizing(true);\n  }, []);\n\n  return { isRecording, isConnecting, isRecognizing, start, stop };\n}\n\n/**\n * Float32Array (-1.0 ~ 1.0) 转换为 Int16Array (pcm_s16le)\n */\nfunction float32ToInt16(float32Array: Float32Array): Int16Array {\n  const int16Array = new Int16Array(float32Array.length);\n  for (let i = 0; i < float32Array.length; i++) {\n    const s = Math.max(-1, Math.min(1, float32Array[i]));\n    int16Array[i] = s < 0 ? s * 0x8000 : s * 0x7fff;\n  }\n  return int16Array;\n}\n","import { FC, memo, useCallback, useRef } from 'react';\nimport { IconBtn } from '@baishuyun/ai-design/icon-btn';\nimport { MicrophoneIcon } from '@baishuyun/ai-design/bs-icons';\nimport { useVoiceInput } from '@/app/hooks/use-voice-input';\n\nexport interface VoiceButtonProps {\n  isRecording: boolean;\n  isConnecting: boolean;\n  onClick: () => void;\n}\n\nfunction PureVoiceButton({ isRecording, isConnecting, onClick }: VoiceButtonProps) {\n  const tooltip = isRecording\n    ? '停止录音'\n    : isConnecting\n      ? '连接中...'\n      : '语音输入';\n\n  return (\n    <IconBtn\n      tooltip={tooltip}\n      rounded\n      icon={\n        <span className={isRecording ? 'text-red-500 animate-pulse' : ''}>\n          <MicrophoneIcon />\n        </span>\n      }\n      disabled={isConnecting}\n      onClick={(event: React.MouseEvent) => {\n        event.preventDefault();\n        onClick();\n      }}\n    />\n  );\n}\n\nexport const VoiceButton = memo(PureVoiceButton);\n\nexport interface IControlledVoiceButtonProps {\n  input?: string;\n  onOutput?: (text: string) => void;\n  asrEndpoint: string;\n}\n\nexport const ControlledVoiceButton: FC<IControlledVoiceButtonProps> = (props) => {\n  const {\n    onOutput = () => null,\n    input,\n  } = props;\n  // 语音输入\n  const savedInputRef = useRef(props.input);\n  const { isRecording, isConnecting, start, stop: stopRecording } = useVoiceInput({\n    endpoint: props.asrEndpoint,\n    onText: (text) => {\n      onOutput(savedInputRef.current ?? \"\" + text)\n    },\n    onDone: () => {\n      // 识别完成，文本已保留在输入框中\n    },\n    onError: (msg) => {\n      onOutput(savedInputRef.current || \"\")\n      console.error('Voice input error:', msg);\n    },\n  });\n\n  const toggleRecording = useCallback(() => {\n    if (isRecording) {\n      stopRecording();\n    } else {\n      savedInputRef.current = input;\n      start();\n    }\n  }, [isRecording, stopRecording, start, input]);\n\n  return (\n    <VoiceButton\n      isRecording={isRecording}\n      isConnecting={isConnecting}\n      onClick={toggleRecording}\n    />\n  )\n}\n","import { TrashIcon } from '@baishuyun/ai-design/bs-icons';\nimport type { UseChatHelpers } from '@ai-sdk/react';\nimport { ChatMessage } from '@baishuyun/types';\nimport { useCallback } from 'react';\nimport { IconBtn } from '@baishuyun/ai-design/icon-btn';\n\nexport const ClearBtn = ({\n  setMessages,\n  status,\n  chatId,\n}: {\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n  status: UseChatHelpers<ChatMessage>['status'];\n  chatId: string;\n}) => {\n  const clearMsg = useCallback(() => {\n    setMessages(() => []);\n\n    // call backend api to clear messages in db\n    console.log('Clearing messages for chatId:', chatId);\n  }, [setMessages, chatId]);\n\n  return (\n    <IconBtn\n      rounded\n      className=\"text-white\"\n      tooltip=\"删除历史消息\"\n      icon={<TrashIcon />}\n      disabled={status !== 'ready'}\n      onClick={(event: any) => {\n        event.preventDefault();\n        clearMsg();\n      }}\n    />\n  );\n};\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport {\n  memo,\n} from 'react';\nimport { ChatMessage } from '@baishuyun/types';\nimport { Button } from '@/app/components/ui/button';\nimport { BsTooltip } from '@baishuyun/ai-design/tooltip';\n\nfunction PureStopButton({\n  stop,\n  setMessages,\n}: {\n  stop: () => void;\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n}) {\n  return (\n    <BsTooltip content=\"停止生成\">\n      <Button\n        className=\"cursor-pointer rounded-full bg-[#0265FF] text-primary-foreground transition-colors duration-200 hover:bg-[#0265FF]/90 disabled:bg-[#E5E6EB]! disabled:text-white h-6.5 w-6.5 flex items-center justify-center aspect-square p-0 disabled:opacity-100!\"\n        onClick={(event: any) => {\n          event.preventDefault();\n          stop();\n          setMessages((messages) => messages);\n        }}\n      >\n        <div className=\"rounded-xs w-2 h-2 bg-white shrink-0\" />\n      </Button>\n    </BsTooltip>\n  );\n}\n\nexport const StopButton = memo(PureStopButton);","import { uploadFile } from '@/lib/utils';\nimport type { Attachment } from '@baishuyun/types';\nimport {\n  type ChangeEvent,\n  type Dispatch,\n  type RefObject,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\nimport type { SetStateAction } from 'react';\n\nexport const MAX_ATTACHMENT_COUNT = 5;\nexport const MAX_FILE_SIZE_MB = 50;\nexport const ACCEPT_FILE_TYPES = ['.csv', 'text/csv', 'text/plain', '.txt', 'image/*', '.xls', '.xlsx'];\n\nexport function useFileUpload({\n  fileUploadEndpoint,\n  attachments,\n  setAttachments,\n  textareaRef,\n}: {\n  fileUploadEndpoint: string;\n  attachments: Attachment[];\n  setAttachments: Dispatch<SetStateAction<Attachment[]>>;\n  textareaRef: RefObject<HTMLTextAreaElement | null>;\n}) {\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const [uploadQueue, setUploadQueue] = useState<string[]>([]);\n  const uploadAbortControllers = useRef<Map<string, AbortController>>(new Map());\n\n  const clearAttachmentsAndUploadQueue = useCallback(() => {\n    setAttachments([]);\n    setUploadQueue([]);\n    if (fileInputRef.current) {\n      fileInputRef.current.value = '';\n    }\n  }, [setAttachments]);\n\n  useEffect(() => {\n    return () => {\n      clearAttachmentsAndUploadQueue();\n    };\n  }, [clearAttachmentsAndUploadQueue]);\n\n  const upload = useCallback(\n    (file: File, signal?: AbortSignal) => uploadFile(file, fileUploadEndpoint, signal),\n    [fileUploadEndpoint]\n  );\n\n  const handleFileChange = useCallback(\n    async (event: ChangeEvent<HTMLInputElement>) => {\n      const files = Array.from(event.target.files || []);\n      if (files.length === 0) {\n        return;\n      }\n\n      if (attachments.length + files.length > MAX_ATTACHMENT_COUNT) {\n        return;\n      }\n\n      const hasOversizeFile = files.some((file) => file.size > MAX_FILE_SIZE_MB * 1024 * 1024);\n      if (hasOversizeFile) {\n        return;\n      }\n\n      setUploadQueue(files.map((file) => file.name));\n\n      try {\n        const uploadPromises = files.map((file) => {\n          const controller = new AbortController();\n          uploadAbortControllers.current.set(file.name, controller);\n          return upload(file, controller.signal);\n        });\n        const uploadedAttachments = await Promise.all(uploadPromises);\n        const successfullyUploadedAttachments = uploadedAttachments.filter(\n          (attachment) => attachment !== undefined\n        );\n\n        console.log('uploaded attachments', uploadedAttachments);\n\n        setAttachments((currentAttachments) => [\n          ...currentAttachments,\n          ...successfullyUploadedAttachments,\n        ]);\n      } catch (error) {\n        console.error('Error uploading files!', error);\n      } finally {\n        setUploadQueue([]);\n        uploadAbortControllers.current.clear();\n      }\n    },\n    [setAttachments, upload, attachments]\n  );\n\n  const handlePaste = useCallback(\n    async (event: ClipboardEvent) => {\n      const items = event.clipboardData?.items;\n      if (!items) {\n        return;\n      }\n\n      const imageItems = Array.from(items).filter((item) => item.type.startsWith('image/'));\n\n      if (imageItems.length === 0) {\n        return;\n      }\n\n      event.preventDefault();\n\n      setUploadQueue((prev) => [...prev, 'Pasted image']);\n\n      try {\n        const uploadPromises = imageItems\n          .map((item) => item.getAsFile())\n          .filter((file): file is File => file !== null)\n          .map((file) => upload(file));\n\n        const uploadedAttachments = await Promise.all(uploadPromises);\n        const successfullyUploadedAttachments = uploadedAttachments.filter(\n          (attachment) =>\n            attachment !== undefined &&\n            attachment.url !== undefined &&\n            attachment.contentType !== undefined\n        );\n\n        setAttachments((curr) => [...curr, ...(successfullyUploadedAttachments as Attachment[])]);\n      } catch (error) {\n        console.error('Error uploading pasted images:', error);\n      } finally {\n        setUploadQueue([]);\n      }\n    },\n    [setAttachments, upload]\n  );\n\n  useEffect(() => {\n    const textarea = textareaRef.current;\n    if (!textarea) {\n      return;\n    }\n\n    textarea.addEventListener('paste', handlePaste);\n    return () => textarea.removeEventListener('paste', handlePaste);\n  }, [handlePaste, textareaRef]);\n\n  const handleRemoveAttachment = useCallback(\n    (item: { id: string; alt?: string }) => {\n      if (item.id.startsWith('uploading-')) {\n        const filename = item.alt || '';\n        const controller = uploadAbortControllers.current.get(filename);\n        if (controller) {\n          controller.abort();\n          uploadAbortControllers.current.delete(filename);\n        }\n        setUploadQueue((cur) => cur.filter((f) => f !== filename));\n        return;\n      }\n      setAttachments((cur) => cur.filter((a) => a.url !== item.id));\n      if (fileInputRef.current) {\n        fileInputRef.current.value = '';\n      }\n    },\n    [setAttachments]\n  );\n\n  return {\n    fileInputRef,\n    uploadQueue,\n    handleFileChange,\n    clearAttachmentsAndUploadQueue,\n    handleRemoveAttachment,\n  };\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport { DividerIcon, PlaneIcon } from '@baishuyun/ai-design/bs-icons';\nimport type { ChatMessage } from '@baishuyun/types';\nimport type { Dispatch, RefObject, SetStateAction } from 'react';\nimport { memo } from 'react';\nimport {\n  PromptInputSubmit,\n  PromptInputToolbar,\n  PromptInputTools,\n} from '../prompt-input';\nimport { AttachmentsButton } from '../attachment-btn';\nimport { ControlledVoiceButton } from '../voice-btn';\nimport { ClearBtn } from '../clear-btn';\nimport { StopButton } from '../stop-btn';\nimport { ACCEPT_FILE_TYPES } from '../hooks/use-file-upload';\n\ninterface InputToolbarProps {\n  fileInputRef: RefObject<HTMLInputElement | null>;\n  status: UseChatHelpers<ChatMessage>['status'];\n  asrEndpoint?: string;\n  setInput: Dispatch<SetStateAction<string>>;\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n  stop: () => void;\n  chatId: string;\n  canSubmit: boolean;\n}\n\nfunction PureInputToolbar({\n  fileInputRef,\n  status,\n  asrEndpoint,\n  setInput,\n  setMessages,\n  stop,\n  chatId,\n  canSubmit,\n}: InputToolbarProps) {\n  const tooltip = `上传附件（仅识别文字），最多5个，单个文件最大50MB`;\n  const accept = ACCEPT_FILE_TYPES.join(',');\n  const hasAcceptableFileType = !!accept;\n\n  return (\n    <PromptInputToolbar className=\"border-top-0! border-t-0! p-0 shadow-none dark:border-0 dark:border-transparent!\">\n      {/* bottom left */}\n      <div>\n      </div>\n\n      {/* bottom right */}\n      <PromptInputTools className=\"gap-2.5\">\n        {hasAcceptableFileType ? (\n          <AttachmentsButton fileInputRef={fileInputRef} status={status} tooltip={tooltip} />\n        ) : null}\n        {asrEndpoint ? (\n          <ControlledVoiceButton asrEndpoint={asrEndpoint} onOutput={setInput} />\n        ) : null}\n        <ClearBtn setMessages={setMessages} status={status} chatId={chatId} />\n        <DividerIcon />\n        {status === 'submitted' || status === 'streaming' ? (\n          <StopButton setMessages={setMessages} stop={stop} />\n        ) : (\n          <PromptInputSubmit\n            className=\"cursor-pointer rounded-full bg-[#0265FF] text-primary-foreground transition-colors duration-200 hover:bg-[#0265FF]/90 disabled:bg-[#E5E6EB] disabled:text-white h-6.5 w-6.5 disabled:opacity-100\"\n            data-testid=\"send-button\"\n            disabled={!canSubmit}\n            status={status}\n          >\n            <PlaneIcon />\n          </PromptInputSubmit>\n        )}\n      </PromptInputTools>\n    </PromptInputToolbar>\n  );\n}\n\nexport const InputToolbar = memo(PureInputToolbar);\n","import { type ChangeEvent, type Dispatch, useCallback, useEffect, useRef } from 'react';\nimport type { SetStateAction } from 'react';\n\nexport function useTextInput({\n  setInput,\n}: {\n  setInput: Dispatch<SetStateAction<string>>;\n}) {\n  const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n  const adjustHeight = useCallback(() => {\n    if (textareaRef.current) {\n      textareaRef.current.style.height = '';\n    }\n  }, []);\n\n  const resetHeight = useCallback(() => {\n    if (textareaRef.current) {\n      textareaRef.current.style.height = '';\n    }\n  }, []);\n\n  useEffect(() => {\n    if (textareaRef.current) {\n      adjustHeight();\n    }\n  }, [adjustHeight]);\n\n  useEffect(() => {\n    if (textareaRef.current) {\n      const domValue = textareaRef.current.value;\n      const finalValue = domValue || '';\n      setInput(finalValue);\n      adjustHeight();\n    }\n  }, [adjustHeight, setInput]);\n\n  const handleInput = (event: ChangeEvent<HTMLTextAreaElement>) => {\n    setInput(event.target.value);\n  };\n\n  return {\n    textareaRef,\n    adjustHeight,\n    resetHeight,\n    handleInput,\n  };\n}\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport type { ChatMessage } from '@baishuyun/types';\nimport type { Attachment } from '@baishuyun/types';\nimport { ChatRequestOptions } from 'ai';\nimport { type Dispatch, useCallback } from 'react';\nimport type { SetStateAction } from 'react';\n\nexport function useMessageSubmit({\n  input,\n  setInput,\n  attachments,\n  setAttachments,\n  sendMessage,\n  resetHeight,\n}: {\n  input: string;\n  setInput: Dispatch<SetStateAction<string>>;\n  attachments: Attachment[];\n  setAttachments: Dispatch<SetStateAction<Attachment[]>>;\n  sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n  resetHeight: () => void;\n}) {\n  const submitForm = useCallback(\n    (text?: string, options?: ChatRequestOptions, overrideAttachments?: Attachment[]) => {\n      const effectiveAttachments = overrideAttachments ?? attachments;\n      const msg = {\n        role: 'user',\n        parts: [\n          ...effectiveAttachments.map((attachment) => ({\n            type: 'file' as const,\n            url: attachment.url,\n            name: attachment.name,\n            mediaType: attachment.contentType,\n            providerMetadata: {\n              uploadMetadata: attachment,\n            },\n          })),\n          {\n            type: 'text',\n            text: text ?? input,\n          },\n        ],\n      } as ChatMessage;\n\n      sendMessage(msg, options);\n\n      if (!overrideAttachments) {\n        setAttachments([]);\n      }\n      resetHeight();\n      setInput('');\n    },\n    [input, setInput, attachments, sendMessage, setAttachments, resetHeight]\n  );\n\n  return { submitForm };\n}\n","import { AIOffice } from '@/app';\nimport { useEffect } from 'react';\nimport { IOfficeEvents } from '../types/IAIOffice';\n\nexport const useOfficeEvent = <K extends keyof IOfficeEvents>(\n  eventName: K,\n  handler: (payload: IOfficeEvents[K]) => void\n) => {\n  const officeInst = AIOffice.getInstance();\n\n  useEffect(() => {\n    const off = officeInst.on(eventName, handler);\n    return () => {\n      off();\n    };\n  }, [eventName, handler]);\n};","import { useCallback } from 'react';\nimport { useOfficeEvent } from './use-office-event';\nimport { ChatRequestOptions } from 'ai';\nimport { Attachment } from '@baishuyun/types';\nimport { downloadFile, ensureEndSlash, uploadFile } from '@/lib/utils';\nimport { useAIOfficeStore } from '../store/use-ai-office-store';\n\nexport const useEventMsgSubmit = (\n  submitForm: (\n    text?: string,\n    options?: ChatRequestOptions,\n    overrideAttachments?: Attachment[]\n  ) => void\n) => {\n  const api = useAIOfficeStore((s) => s.api);\n\n  const handleMsg = useCallback(\n    async ({\n      content,\n      options,\n      attachmentsUrl = [],\n    }: {\n      content: string;\n      options?: ChatRequestOptions;\n      attachmentsUrl?: Array<string>;\n    }) => {\n      let results: Attachment[];\n      const baseUrl = ensureEndSlash(api).replace(/\\/web\\/api\\/.*/, '/web/api/');\n      const uploadEndpoint = `${ensureEndSlash(baseUrl)}form/attachment/upload`;\n      results = (\n        await Promise.all(\n          attachmentsUrl.map(async (url) => {\n            const file = await downloadFile(url);\n            return uploadFile(file, uploadEndpoint);\n          })\n        )\n      ).filter((item): item is Attachment => Boolean(item));\n      submitForm(content, options, results);\n    },\n    [submitForm, api]\n  );\n\n  useOfficeEvent('sendMessage', handleMsg);\n};\n","import type { UseChatHelpers } from '@ai-sdk/react';\nimport { type UIMessage } from 'ai';\nimport equal from 'fast-deep-equal';\nimport { type Dispatch, memo, type SetStateAction } from 'react';\nimport { cn } from '@/lib/utils';\nimport { PromptInput, PromptInputTextarea } from './prompt-input';\nimport type { Attachment, ChatMessage } from '@baishuyun/types';\nimport { AttachmentPreviewList } from './components/attachment-preview-list';\nimport { InputToolbar } from './components/input-toolbar';\nimport { useTextInput } from './hooks/use-text-input';\nimport { ACCEPT_FILE_TYPES, useFileUpload } from './hooks/use-file-upload';\nimport { useMessageSubmit } from './hooks/use-message-submit';\nimport { useEventMsgSubmit } from '@/app/hooks/use-event-msg-submit';\n\nfunction PureMultimodalInput({\n  chatId,\n  input,\n  setInput,\n  status,\n  stop,\n  attachments,\n  setAttachments,\n  fileUploadEndpoint,\n  asrEndpoint,\n  setMessages,\n  sendMessage,\n  className,\n}: IMultimodalInputProps) {\n  const { textareaRef, resetHeight, handleInput } = useTextInput({ setInput });\n\n  const {\n    fileInputRef,\n    uploadQueue,\n    handleFileChange,\n    handleRemoveAttachment,\n  } = useFileUpload({\n    fileUploadEndpoint,\n    attachments,\n    setAttachments,\n    textareaRef,\n  });\n\n  const { submitForm } = useMessageSubmit({\n    input,\n    setInput,\n    attachments,\n    setAttachments,\n    sendMessage,\n    resetHeight,\n  });\n\n  useEventMsgSubmit(submitForm);\n\n  const canSubmit = (input.trim().length > 0 || attachments.length > 0) && uploadQueue.length === 0;\n\n  return (\n    <div className={cn('relative flex w-full flex-col gap-4', className)}>\n      <input\n        className=\"-top-4 -left-4 pointer-events-none fixed size-0.5 opacity-0\"\n        multiple\n        onChange={handleFileChange}\n        ref={fileInputRef}\n        tabIndex={-1}\n        type=\"file\"\n        accept={ACCEPT_FILE_TYPES.join(',')}\n      />\n\n      <PromptInput\n        className=\"border border-[#e0e0e0] bg-background p-2.5 shadow-xs transition-all duration-200 focus-within:border-border hover:border-[#0265ff]\"\n        onSubmit={(event) => {\n          event.preventDefault();\n          if (status === 'ready' || status === 'error') {\n            submitForm();\n          }\n        }}\n      >\n        <AttachmentPreviewList\n          attachments={attachments}\n          uploadQueue={uploadQueue}\n          onRemove={handleRemoveAttachment}\n        />\n        <div className=\"flex flex-row items-start gap-1 sm:gap-2\">\n          <PromptInputTextarea\n            className=\"grow resize-none border-0! border-none! bg-transparent p-0 text-base outline-none ring-0 placeholder:text-[#999] focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 text-[#12111]\"\n            data-testid=\"multimodal-input\"\n            onChange={handleInput}\n            placeholder=\"Send a message...\"\n            ref={textareaRef}\n            rows={3}\n            value={input}\n          />\n        </div>\n        <InputToolbar\n          fileInputRef={fileInputRef}\n          status={status}\n          asrEndpoint={asrEndpoint}\n          setInput={setInput}\n          setMessages={setMessages}\n          stop={stop}\n          chatId={chatId}\n          canSubmit={canSubmit}\n        />\n      </PromptInput>\n    </div>\n  );\n}\n\nexport interface IMultimodalInputProps {\n  chatId: string;\n  input: string;\n  setInput: Dispatch<SetStateAction<string>>;\n  status: UseChatHelpers<ChatMessage>['status'];\n  stop: () => void;\n  attachments: Attachment[];\n  setAttachments: Dispatch<SetStateAction<Attachment[]>>;\n  fileUploadEndpoint: string;\n  asrEndpoint?: string;\n  messages: UIMessage[];\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n  sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n  className?: string;\n}\n\nexport const MultimodalInput = memo(PureMultimodalInput, (prevProps, nextProps) => {\n  if (prevProps.input !== nextProps.input) {\n    return false;\n  }\n  if (prevProps.status !== nextProps.status) {\n    return false;\n  }\n  if (prevProps.sendMessage !== nextProps.sendMessage) {\n    return false;\n  }\n  if (!equal(prevProps.attachments, nextProps.attachments)) {\n    return false;\n  }\n\n  return true;\n});\n","export const getAsrProtocol = (): 'ws' | 'wss' => {\n  if (typeof window === 'undefined') {\n    return 'ws';\n  }\n  return window.location.protocol === 'https:' ? 'wss' : 'ws';\n};\n","import { IChatTransportConfig } from '@/app/hooks/useChatTransport';\nimport { FC, useState } from 'react';\nimport { ensureEndSlash } from '@/lib/utils';\nimport { Attachment } from '@baishuyun/types/src/chat';\n\nimport { MultimodalInput } from './multi-modal-input';\nimport { UseChatHelpers } from '@baishuyun/types';\nimport { ChatMessage } from '@baishuyun/types';\nimport { Slot } from '@/core/react-adapter/slots';\nimport { getAsrProtocol } from '@/app/utils';\n\nexport interface IInputAreaProps extends IChatTransportConfig {\n    chatId: string;\n    status: UseChatHelpers<ChatMessage>['status'];\n    messages: ChatMessage[];\n    regenerate: UseChatHelpers<ChatMessage>['regenerate'];\n    setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n    sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n    stop: UseChatHelpers<ChatMessage>['stop'];\n}\n\nexport const InputArea: FC<IInputAreaProps> = (props) => {\n    const {\n        api,\n        chatId,\n        status,\n        stop,\n        setMessages,\n        messages,\n        sendMessage\n    } = props;\n\n    const asrEndpoint = `${ensureEndSlash(api).replace(/^https?/, getAsrProtocol())}asr`\n    const url = `${ensureEndSlash(api)}form/attachment/upload`;\n\n    const [attachments, setAttachments] = useState<Attachment[]>([]);\n    const [input, setInput] = useState('');\n\n    const multiModalInputJsx = (\n        <MultimodalInput\n            fileUploadEndpoint={url}\n            asrEndpoint={asrEndpoint}\n            attachments={attachments}\n            chatId={chatId}\n            input={input}\n            messages={messages}\n            sendMessage={sendMessage}\n            setAttachments={setAttachments}\n            setInput={setInput}\n            setMessages={setMessages}\n            status={status}\n            stop={stop}\n        />\n    );\n\n  return (\n    <>\n      <Slot slotName=\"msg-input-top\" />\n      {multiModalInputJsx}\n    </>\n  )\n}","// src/errors/ai-sdk-error.ts\nvar marker = \"vercel.ai.error\";\nvar symbol = Symbol.for(marker);\nvar _a, _b;\nvar AISDKError = class _AISDKError extends (_b = Error, _a = symbol, _b) {\n  /**\n   * Creates an AI SDK Error.\n   *\n   * @param {Object} params - The parameters for creating the error.\n   * @param {string} params.name - The name of the error.\n   * @param {string} params.message - The error message.\n   * @param {unknown} [params.cause] - The underlying cause of the error.\n   */\n  constructor({\n    name: name14,\n    message,\n    cause\n  }) {\n    super(message);\n    this[_a] = true;\n    this.name = name14;\n    this.cause = cause;\n  }\n  /**\n   * Checks if the given error is an AI SDK Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n   */\n  static isInstance(error) {\n    return _AISDKError.hasMarker(error, marker);\n  }\n  static hasMarker(error, marker15) {\n    const markerSymbol = Symbol.for(marker15);\n    return error != null && typeof error === \"object\" && markerSymbol in error && typeof error[markerSymbol] === \"boolean\" && error[markerSymbol] === true;\n  }\n};\n\n// src/errors/api-call-error.ts\nvar name = \"AI_APICallError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2, _b2;\nvar APICallError = class extends (_b2 = AISDKError, _a2 = symbol2, _b2) {\n  constructor({\n    message,\n    url,\n    requestBodyValues,\n    statusCode,\n    responseHeaders,\n    responseBody,\n    cause,\n    isRetryable = statusCode != null && (statusCode === 408 || // request timeout\n    statusCode === 409 || // conflict\n    statusCode === 429 || // too many requests\n    statusCode >= 500),\n    // server error\n    data\n  }) {\n    super({ name, message, cause });\n    this[_a2] = true;\n    this.url = url;\n    this.requestBodyValues = requestBodyValues;\n    this.statusCode = statusCode;\n    this.responseHeaders = responseHeaders;\n    this.responseBody = responseBody;\n    this.isRetryable = isRetryable;\n    this.data = data;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker2);\n  }\n};\n\n// src/errors/empty-response-body-error.ts\nvar name2 = \"AI_EmptyResponseBodyError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3, _b3;\nvar EmptyResponseBodyError = class extends (_b3 = AISDKError, _a3 = symbol3, _b3) {\n  // used in isInstance\n  constructor({ message = \"Empty response body\" } = {}) {\n    super({ name: name2, message });\n    this[_a3] = true;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker3);\n  }\n};\n\n// src/errors/get-error-message.ts\nfunction getErrorMessage(error) {\n  if (error == null) {\n    return \"unknown error\";\n  }\n  if (typeof error === \"string\") {\n    return error;\n  }\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return JSON.stringify(error);\n}\n\n// src/errors/invalid-argument-error.ts\nvar name3 = \"AI_InvalidArgumentError\";\nvar marker4 = `vercel.ai.error.${name3}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4, _b4;\nvar InvalidArgumentError = class extends (_b4 = AISDKError, _a4 = symbol4, _b4) {\n  constructor({\n    message,\n    cause,\n    argument\n  }) {\n    super({ name: name3, message, cause });\n    this[_a4] = true;\n    this.argument = argument;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker4);\n  }\n};\n\n// src/errors/invalid-prompt-error.ts\nvar name4 = \"AI_InvalidPromptError\";\nvar marker5 = `vercel.ai.error.${name4}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5, _b5;\nvar InvalidPromptError = class extends (_b5 = AISDKError, _a5 = symbol5, _b5) {\n  constructor({\n    prompt,\n    message,\n    cause\n  }) {\n    super({ name: name4, message: `Invalid prompt: ${message}`, cause });\n    this[_a5] = true;\n    this.prompt = prompt;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker5);\n  }\n};\n\n// src/errors/invalid-response-data-error.ts\nvar name5 = \"AI_InvalidResponseDataError\";\nvar marker6 = `vercel.ai.error.${name5}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6, _b6;\nvar InvalidResponseDataError = class extends (_b6 = AISDKError, _a6 = symbol6, _b6) {\n  constructor({\n    data,\n    message = `Invalid response data: ${JSON.stringify(data)}.`\n  }) {\n    super({ name: name5, message });\n    this[_a6] = true;\n    this.data = data;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker6);\n  }\n};\n\n// src/errors/json-parse-error.ts\nvar name6 = \"AI_JSONParseError\";\nvar marker7 = `vercel.ai.error.${name6}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7, _b7;\nvar JSONParseError = class extends (_b7 = AISDKError, _a7 = symbol7, _b7) {\n  constructor({ text, cause }) {\n    super({\n      name: name6,\n      message: `JSON parsing failed: Text: ${text}.\nError message: ${getErrorMessage(cause)}`,\n      cause\n    });\n    this[_a7] = true;\n    this.text = text;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker7);\n  }\n};\n\n// src/errors/load-api-key-error.ts\nvar name7 = \"AI_LoadAPIKeyError\";\nvar marker8 = `vercel.ai.error.${name7}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8, _b8;\nvar LoadAPIKeyError = class extends (_b8 = AISDKError, _a8 = symbol8, _b8) {\n  // used in isInstance\n  constructor({ message }) {\n    super({ name: name7, message });\n    this[_a8] = true;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker8);\n  }\n};\n\n// src/errors/load-setting-error.ts\nvar name8 = \"AI_LoadSettingError\";\nvar marker9 = `vercel.ai.error.${name8}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9, _b9;\nvar LoadSettingError = class extends (_b9 = AISDKError, _a9 = symbol9, _b9) {\n  // used in isInstance\n  constructor({ message }) {\n    super({ name: name8, message });\n    this[_a9] = true;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker9);\n  }\n};\n\n// src/errors/no-content-generated-error.ts\nvar name9 = \"AI_NoContentGeneratedError\";\nvar marker10 = `vercel.ai.error.${name9}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10, _b10;\nvar NoContentGeneratedError = class extends (_b10 = AISDKError, _a10 = symbol10, _b10) {\n  // used in isInstance\n  constructor({\n    message = \"No content generated.\"\n  } = {}) {\n    super({ name: name9, message });\n    this[_a10] = true;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker10);\n  }\n};\n\n// src/errors/no-such-model-error.ts\nvar name10 = \"AI_NoSuchModelError\";\nvar marker11 = `vercel.ai.error.${name10}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11, _b11;\nvar NoSuchModelError = class extends (_b11 = AISDKError, _a11 = symbol11, _b11) {\n  constructor({\n    errorName = name10,\n    modelId,\n    modelType,\n    message = `No such ${modelType}: ${modelId}`\n  }) {\n    super({ name: errorName, message });\n    this[_a11] = true;\n    this.modelId = modelId;\n    this.modelType = modelType;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker11);\n  }\n};\n\n// src/errors/too-many-embedding-values-for-call-error.ts\nvar name11 = \"AI_TooManyEmbeddingValuesForCallError\";\nvar marker12 = `vercel.ai.error.${name11}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12, _b12;\nvar TooManyEmbeddingValuesForCallError = class extends (_b12 = AISDKError, _a12 = symbol12, _b12) {\n  constructor(options) {\n    super({\n      name: name11,\n      message: `Too many values for a single embedding call. The ${options.provider} model \"${options.modelId}\" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`\n    });\n    this[_a12] = true;\n    this.provider = options.provider;\n    this.modelId = options.modelId;\n    this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;\n    this.values = options.values;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker12);\n  }\n};\n\n// src/errors/type-validation-error.ts\nvar name12 = \"AI_TypeValidationError\";\nvar marker13 = `vercel.ai.error.${name12}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13, _b13;\nvar TypeValidationError = class _TypeValidationError extends (_b13 = AISDKError, _a13 = symbol13, _b13) {\n  constructor({ value, cause }) {\n    super({\n      name: name12,\n      message: `Type validation failed: Value: ${JSON.stringify(value)}.\nError message: ${getErrorMessage(cause)}`,\n      cause\n    });\n    this[_a13] = true;\n    this.value = value;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker13);\n  }\n  /**\n   * Wraps an error into a TypeValidationError.\n   * If the cause is already a TypeValidationError with the same value, it returns the cause.\n   * Otherwise, it creates a new TypeValidationError.\n   *\n   * @param {Object} params - The parameters for wrapping the error.\n   * @param {unknown} params.value - The value that failed validation.\n   * @param {unknown} params.cause - The original error or cause of the validation failure.\n   * @returns {TypeValidationError} A TypeValidationError instance.\n   */\n  static wrap({\n    value,\n    cause\n  }) {\n    return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause });\n  }\n};\n\n// src/errors/unsupported-functionality-error.ts\nvar name13 = \"AI_UnsupportedFunctionalityError\";\nvar marker14 = `vercel.ai.error.${name13}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14, _b14;\nvar UnsupportedFunctionalityError = class extends (_b14 = AISDKError, _a14 = symbol14, _b14) {\n  constructor({\n    functionality,\n    message = `'${functionality}' functionality not supported.`\n  }) {\n    super({ name: name13, message });\n    this[_a14] = true;\n    this.functionality = functionality;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker14);\n  }\n};\n\n// src/json-value/is-json.ts\nfunction isJSONValue(value) {\n  if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n    return true;\n  }\n  if (Array.isArray(value)) {\n    return value.every(isJSONValue);\n  }\n  if (typeof value === \"object\") {\n    return Object.entries(value).every(\n      ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n    );\n  }\n  return false;\n}\nfunction isJSONArray(value) {\n  return Array.isArray(value) && value.every(isJSONValue);\n}\nfunction isJSONObject(value) {\n  return value != null && typeof value === \"object\" && Object.entries(value).every(\n    ([key, val]) => typeof key === \"string\" && isJSONValue(val)\n  );\n}\nexport {\n  AISDKError,\n  APICallError,\n  EmptyResponseBodyError,\n  InvalidArgumentError,\n  InvalidPromptError,\n  InvalidResponseDataError,\n  JSONParseError,\n  LoadAPIKeyError,\n  LoadSettingError,\n  NoContentGeneratedError,\n  NoSuchModelError,\n  TooManyEmbeddingValuesForCallError,\n  TypeValidationError,\n  UnsupportedFunctionalityError,\n  getErrorMessage,\n  isJSONArray,\n  isJSONObject,\n  isJSONValue\n};\n//# sourceMappingURL=index.mjs.map","class ParseError extends Error {\n  constructor(message, options) {\n    super(message), this.name = \"ParseError\", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;\n  }\n}\nfunction noop(_arg) {\n}\nfunction createParser(callbacks) {\n  if (typeof callbacks == \"function\")\n    throw new TypeError(\n      \"`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?\"\n    );\n  const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks;\n  let incompleteLine = \"\", isFirstChunk = !0, id, data = \"\", eventType = \"\";\n  function feed(newChunk) {\n    const chunk = isFirstChunk ? newChunk.replace(/^\\xEF\\xBB\\xBF/, \"\") : newChunk, [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`);\n    for (const line of complete)\n      parseLine(line);\n    incompleteLine = incomplete, isFirstChunk = !1;\n  }\n  function parseLine(line) {\n    if (line === \"\") {\n      dispatchEvent();\n      return;\n    }\n    if (line.startsWith(\":\")) {\n      onComment && onComment(line.slice(line.startsWith(\": \") ? 2 : 1));\n      return;\n    }\n    const fieldSeparatorIndex = line.indexOf(\":\");\n    if (fieldSeparatorIndex !== -1) {\n      const field = line.slice(0, fieldSeparatorIndex), offset = line[fieldSeparatorIndex + 1] === \" \" ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset);\n      processField(field, value, line);\n      return;\n    }\n    processField(line, \"\", line);\n  }\n  function processField(field, value, line) {\n    switch (field) {\n      case \"event\":\n        eventType = value;\n        break;\n      case \"data\":\n        data = `${data}${value}\n`;\n        break;\n      case \"id\":\n        id = value.includes(\"\\0\") ? void 0 : value;\n        break;\n      case \"retry\":\n        /^\\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(\n          new ParseError(`Invalid \\`retry\\` value: \"${value}\"`, {\n            type: \"invalid-retry\",\n            value,\n            line\n          })\n        );\n        break;\n      default:\n        onError(\n          new ParseError(\n            `Unknown field \"${field.length > 20 ? `${field.slice(0, 20)}\\u2026` : field}\"`,\n            { type: \"unknown-field\", field, value, line }\n          )\n        );\n        break;\n    }\n  }\n  function dispatchEvent() {\n    data.length > 0 && onEvent({\n      id,\n      event: eventType || void 0,\n      // If the data buffer's last character is a U+000A LINE FEED (LF) character,\n      // then remove the last character from the data buffer.\n      data: data.endsWith(`\n`) ? data.slice(0, -1) : data\n    }), id = void 0, data = \"\", eventType = \"\";\n  }\n  function reset(options = {}) {\n    incompleteLine && options.consume && parseLine(incompleteLine), isFirstChunk = !0, id = void 0, data = \"\", eventType = \"\", incompleteLine = \"\";\n  }\n  return { feed, reset };\n}\nfunction splitLines(chunk) {\n  const lines = [];\n  let incompleteLine = \"\", searchIndex = 0;\n  for (; searchIndex < chunk.length; ) {\n    const crIndex = chunk.indexOf(\"\\r\", searchIndex), lfIndex = chunk.indexOf(`\n`, searchIndex);\n    let lineEnd = -1;\n    if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = Math.min(crIndex, lfIndex) : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) {\n      incompleteLine = chunk.slice(searchIndex);\n      break;\n    } else {\n      const line = chunk.slice(searchIndex, lineEnd);\n      lines.push(line), searchIndex = lineEnd + 1, chunk[searchIndex - 1] === \"\\r\" && chunk[searchIndex] === `\n` && searchIndex++;\n    }\n  }\n  return [lines, incompleteLine];\n}\nexport {\n  ParseError,\n  createParser\n};\n//# sourceMappingURL=index.js.map\n","import { createParser } from \"./index.js\";\nimport { ParseError } from \"./index.js\";\nclass EventSourceParserStream extends TransformStream {\n  constructor({ onError, onRetry, onComment } = {}) {\n    let parser;\n    super({\n      start(controller) {\n        parser = createParser({\n          onEvent: (event) => {\n            controller.enqueue(event);\n          },\n          onError(error) {\n            onError === \"terminate\" ? controller.error(error) : typeof onError == \"function\" && onError(error);\n          },\n          onRetry,\n          onComment\n        });\n      },\n      transform(chunk) {\n        parser.feed(chunk);\n      }\n    });\n  }\n}\nexport {\n  EventSourceParserStream,\n  ParseError\n};\n//# sourceMappingURL=stream.js.map\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 3,\n    patch: 5,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n    if (result.issues.length) {\n        // For optional-out schemas, ignore errors on absent keys\n        if (isOptionalOut && !(key in input)) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalOut) {\n                // For optional-out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n        const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig\n                        ? { code: \"too_big\", maximum: items.length, inclusive: true }\n                        : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key failed with \"expected number\", retry with Number(key)\n                const checkNumericKey = typeof key === \"string\" &&\n                    regexes.number.test(key) &&\n                    keyResult.issues.length &&\n                    keyResult.issues.some((iss) => iss.code === \"invalid_type\" && iss.expected === \"number\");\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && result.schema._prefault)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    if (typeof exclusiveMinimum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n        if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMinimum >= minimum)\n                delete json.minimum;\n            else\n                delete json.exclusiveMinimum;\n        }\n    }\n    if (typeof exclusiveMaximum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n        if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMaximum <= maximum)\n                delete json.maximum;\n            else\n                delete json.exclusiveMaximum;\n        }\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = process(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = process(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = process(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = process(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? process(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = process(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            process(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            schemas[key] = finalize(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    process(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: createStandardJSONSchemaMethod(inst, \"input\"),\n            output: createStandardJSONSchemaMethod(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }), {\n            parent: true,\n        });\n    };\n    inst.with = inst.check;\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.exactOptional = () => exactOptional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    inst.apply = (fn) => fn(inst);\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n    inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n","export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = Object.create(null);\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n","export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        // @ts-ignore\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    // @ts-ignore\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","// src/combine-headers.ts\nfunction combineHeaders(...headers) {\n  return headers.reduce(\n    (combinedHeaders, currentHeaders) => ({\n      ...combinedHeaders,\n      ...currentHeaders != null ? currentHeaders : {}\n    }),\n    {}\n  );\n}\n\n// src/convert-async-iterator-to-readable-stream.ts\nfunction convertAsyncIteratorToReadableStream(iterator) {\n  let cancelled = false;\n  return new ReadableStream({\n    /**\n     * Called when the consumer wants to pull more data from the stream.\n     *\n     * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n     * @returns {Promise<void>}\n     */\n    async pull(controller) {\n      if (cancelled) return;\n      try {\n        const { value, done } = await iterator.next();\n        if (done) {\n          controller.close();\n        } else {\n          controller.enqueue(value);\n        }\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    /**\n     * Called when the consumer cancels the stream.\n     */\n    async cancel(reason) {\n      cancelled = true;\n      if (iterator.return) {\n        try {\n          await iterator.return(reason);\n        } catch (e) {\n        }\n      }\n    }\n  });\n}\n\n// src/delay.ts\nasync function delay(delayInMs, options) {\n  if (delayInMs == null) {\n    return Promise.resolve();\n  }\n  const signal = options == null ? void 0 : options.abortSignal;\n  return new Promise((resolve2, reject) => {\n    if (signal == null ? void 0 : signal.aborted) {\n      reject(createAbortError());\n      return;\n    }\n    const timeoutId = setTimeout(() => {\n      cleanup();\n      resolve2();\n    }, delayInMs);\n    const cleanup = () => {\n      clearTimeout(timeoutId);\n      signal == null ? void 0 : signal.removeEventListener(\"abort\", onAbort);\n    };\n    const onAbort = () => {\n      cleanup();\n      reject(createAbortError());\n    };\n    signal == null ? void 0 : signal.addEventListener(\"abort\", onAbort);\n  });\n}\nfunction createAbortError() {\n  return new DOMException(\"Delay was aborted\", \"AbortError\");\n}\n\n// src/delayed-promise.ts\nvar DelayedPromise = class {\n  constructor() {\n    this.status = { type: \"pending\" };\n    this._resolve = void 0;\n    this._reject = void 0;\n  }\n  get promise() {\n    if (this._promise) {\n      return this._promise;\n    }\n    this._promise = new Promise((resolve2, reject) => {\n      if (this.status.type === \"resolved\") {\n        resolve2(this.status.value);\n      } else if (this.status.type === \"rejected\") {\n        reject(this.status.error);\n      }\n      this._resolve = resolve2;\n      this._reject = reject;\n    });\n    return this._promise;\n  }\n  resolve(value) {\n    var _a;\n    this.status = { type: \"resolved\", value };\n    if (this._promise) {\n      (_a = this._resolve) == null ? void 0 : _a.call(this, value);\n    }\n  }\n  reject(error) {\n    var _a;\n    this.status = { type: \"rejected\", error };\n    if (this._promise) {\n      (_a = this._reject) == null ? void 0 : _a.call(this, error);\n    }\n  }\n  isResolved() {\n    return this.status.type === \"resolved\";\n  }\n  isRejected() {\n    return this.status.type === \"rejected\";\n  }\n  isPending() {\n    return this.status.type === \"pending\";\n  }\n};\n\n// src/extract-response-headers.ts\nfunction extractResponseHeaders(response) {\n  return Object.fromEntries([...response.headers]);\n}\n\n// src/generate-id.ts\nimport { InvalidArgumentError } from \"@ai-sdk/provider\";\nvar createIdGenerator = ({\n  prefix,\n  size = 16,\n  alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n  separator = \"-\"\n} = {}) => {\n  const generator = () => {\n    const alphabetLength = alphabet.length;\n    const chars = new Array(size);\n    for (let i = 0; i < size; i++) {\n      chars[i] = alphabet[Math.random() * alphabetLength | 0];\n    }\n    return chars.join(\"\");\n  };\n  if (prefix == null) {\n    return generator;\n  }\n  if (alphabet.includes(separator)) {\n    throw new InvalidArgumentError({\n      argument: \"separator\",\n      message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`\n    });\n  }\n  return () => `${prefix}${separator}${generator()}`;\n};\nvar generateId = createIdGenerator();\n\n// src/get-error-message.ts\nfunction getErrorMessage(error) {\n  if (error == null) {\n    return \"unknown error\";\n  }\n  if (typeof error === \"string\") {\n    return error;\n  }\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return JSON.stringify(error);\n}\n\n// src/get-from-api.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\n\n// src/handle-fetch-error.ts\nimport { APICallError } from \"@ai-sdk/provider\";\n\n// src/is-abort-error.ts\nfunction isAbortError(error) {\n  return (error instanceof Error || error instanceof DOMException) && (error.name === \"AbortError\" || error.name === \"ResponseAborted\" || // Next.js\n  error.name === \"TimeoutError\");\n}\n\n// src/handle-fetch-error.ts\nvar FETCH_FAILED_ERROR_MESSAGES = [\"fetch failed\", \"failed to fetch\"];\nfunction handleFetchError({\n  error,\n  url,\n  requestBodyValues\n}) {\n  if (isAbortError(error)) {\n    return error;\n  }\n  if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) {\n    const cause = error.cause;\n    if (cause != null) {\n      return new APICallError({\n        message: `Cannot connect to API: ${cause.message}`,\n        cause,\n        url,\n        requestBodyValues,\n        isRetryable: true\n        // retry when network error\n      });\n    }\n  }\n  return error;\n}\n\n// src/get-runtime-environment-user-agent.ts\nfunction getRuntimeEnvironmentUserAgent(globalThisAny = globalThis) {\n  var _a, _b, _c;\n  if (globalThisAny.window) {\n    return `runtime/browser`;\n  }\n  if ((_a = globalThisAny.navigator) == null ? void 0 : _a.userAgent) {\n    return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n  }\n  if ((_c = (_b = globalThisAny.process) == null ? void 0 : _b.versions) == null ? void 0 : _c.node) {\n    return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n  }\n  if (globalThisAny.EdgeRuntime) {\n    return `runtime/vercel-edge`;\n  }\n  return \"runtime/unknown\";\n}\n\n// src/normalize-headers.ts\nfunction normalizeHeaders(headers) {\n  if (headers == null) {\n    return {};\n  }\n  const normalized = {};\n  if (headers instanceof Headers) {\n    headers.forEach((value, key) => {\n      normalized[key.toLowerCase()] = value;\n    });\n  } else {\n    if (!Array.isArray(headers)) {\n      headers = Object.entries(headers);\n    }\n    for (const [key, value] of headers) {\n      if (value != null) {\n        normalized[key.toLowerCase()] = value;\n      }\n    }\n  }\n  return normalized;\n}\n\n// src/with-user-agent-suffix.ts\nfunction withUserAgentSuffix(headers, ...userAgentSuffixParts) {\n  const normalizedHeaders = new Headers(normalizeHeaders(headers));\n  const currentUserAgentHeader = normalizedHeaders.get(\"user-agent\") || \"\";\n  normalizedHeaders.set(\n    \"user-agent\",\n    [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(\" \")\n  );\n  return Object.fromEntries(normalizedHeaders.entries());\n}\n\n// src/version.ts\nvar VERSION = true ? \"3.0.20\" : \"0.0.0-test\";\n\n// src/get-from-api.ts\nvar getOriginalFetch = () => globalThis.fetch;\nvar getFromApi = async ({\n  url,\n  headers = {},\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch()\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: \"GET\",\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent()\n      ),\n      signal: abortSignal\n    });\n    const responseHeaders = extractResponseHeaders(response);\n    if (!response.ok) {\n      let errorInformation;\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: {}\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError2.isInstance(error)) {\n          throw error;\n        }\n        throw new APICallError2({\n          message: \"Failed to process error response\",\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: {}\n        });\n      }\n      throw errorInformation.value;\n    }\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: {}\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError2.isInstance(error)) {\n          throw error;\n        }\n      }\n      throw new APICallError2({\n        message: \"Failed to process successful response\",\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: {}\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: {} });\n  }\n};\n\n// src/inject-json-instruction.ts\nvar DEFAULT_SCHEMA_PREFIX = \"JSON schema:\";\nvar DEFAULT_SCHEMA_SUFFIX = \"You MUST answer with a JSON object that matches the JSON schema above.\";\nvar DEFAULT_GENERIC_SUFFIX = \"You MUST answer with JSON.\";\nfunction injectJsonInstruction({\n  prompt,\n  schema,\n  schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : void 0,\n  schemaSuffix = schema != null ? DEFAULT_SCHEMA_SUFFIX : DEFAULT_GENERIC_SUFFIX\n}) {\n  return [\n    prompt != null && prompt.length > 0 ? prompt : void 0,\n    prompt != null && prompt.length > 0 ? \"\" : void 0,\n    // add a newline if prompt is not null\n    schemaPrefix,\n    schema != null ? JSON.stringify(schema) : void 0,\n    schemaSuffix\n  ].filter((line) => line != null).join(\"\\n\");\n}\nfunction injectJsonInstructionIntoMessages({\n  messages,\n  schema,\n  schemaPrefix,\n  schemaSuffix\n}) {\n  var _a, _b;\n  const systemMessage = ((_a = messages[0]) == null ? void 0 : _a.role) === \"system\" ? { ...messages[0] } : { role: \"system\", content: \"\" };\n  systemMessage.content = injectJsonInstruction({\n    prompt: systemMessage.content,\n    schema,\n    schemaPrefix,\n    schemaSuffix\n  });\n  return [\n    systemMessage,\n    ...((_b = messages[0]) == null ? void 0 : _b.role) === \"system\" ? messages.slice(1) : messages\n  ];\n}\n\n// src/is-url-supported.ts\nfunction isUrlSupported({\n  mediaType,\n  url,\n  supportedUrls\n}) {\n  url = url.toLowerCase();\n  mediaType = mediaType.toLowerCase();\n  return Object.entries(supportedUrls).map(([key, value]) => {\n    const mediaType2 = key.toLowerCase();\n    return mediaType2 === \"*\" || mediaType2 === \"*/*\" ? { mediaTypePrefix: \"\", regexes: value } : { mediaTypePrefix: mediaType2.replace(/\\*/, \"\"), regexes: value };\n  }).filter(({ mediaTypePrefix }) => mediaType.startsWith(mediaTypePrefix)).flatMap(({ regexes }) => regexes).some((pattern) => pattern.test(url));\n}\n\n// src/load-api-key.ts\nimport { LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction loadApiKey({\n  apiKey,\n  environmentVariableName,\n  apiKeyParameterName = \"apiKey\",\n  description\n}) {\n  if (typeof apiKey === \"string\") {\n    return apiKey;\n  }\n  if (apiKey != null) {\n    throw new LoadAPIKeyError({\n      message: `${description} API key must be a string.`\n    });\n  }\n  if (typeof process === \"undefined\") {\n    throw new LoadAPIKeyError({\n      message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`\n    });\n  }\n  apiKey = process.env[environmentVariableName];\n  if (apiKey == null) {\n    throw new LoadAPIKeyError({\n      message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`\n    });\n  }\n  if (typeof apiKey !== \"string\") {\n    throw new LoadAPIKeyError({\n      message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n    });\n  }\n  return apiKey;\n}\n\n// src/load-optional-setting.ts\nfunction loadOptionalSetting({\n  settingValue,\n  environmentVariableName\n}) {\n  if (typeof settingValue === \"string\") {\n    return settingValue;\n  }\n  if (settingValue != null || typeof process === \"undefined\") {\n    return void 0;\n  }\n  settingValue = process.env[environmentVariableName];\n  if (settingValue == null || typeof settingValue !== \"string\") {\n    return void 0;\n  }\n  return settingValue;\n}\n\n// src/load-setting.ts\nimport { LoadSettingError } from \"@ai-sdk/provider\";\nfunction loadSetting({\n  settingValue,\n  environmentVariableName,\n  settingName,\n  description\n}) {\n  if (typeof settingValue === \"string\") {\n    return settingValue;\n  }\n  if (settingValue != null) {\n    throw new LoadSettingError({\n      message: `${description} setting must be a string.`\n    });\n  }\n  if (typeof process === \"undefined\") {\n    throw new LoadSettingError({\n      message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`\n    });\n  }\n  settingValue = process.env[environmentVariableName];\n  if (settingValue == null) {\n    throw new LoadSettingError({\n      message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`\n    });\n  }\n  if (typeof settingValue !== \"string\") {\n    throw new LoadSettingError({\n      message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n    });\n  }\n  return settingValue;\n}\n\n// src/media-type-to-extension.ts\nfunction mediaTypeToExtension(mediaType) {\n  var _a;\n  const [_type, subtype = \"\"] = mediaType.toLowerCase().split(\"/\");\n  return (_a = {\n    mpeg: \"mp3\",\n    \"x-wav\": \"wav\",\n    opus: \"ogg\",\n    mp4: \"m4a\",\n    \"x-m4a\": \"m4a\"\n  }[subtype]) != null ? _a : subtype;\n}\n\n// src/parse-json.ts\nimport {\n  JSONParseError,\n  TypeValidationError as TypeValidationError3\n} from \"@ai-sdk/provider\";\n\n// src/secure-json-parse.ts\nvar suspectProtoRx = /\"__proto__\"\\s*:/;\nvar suspectConstructorRx = /\"constructor\"\\s*:/;\nfunction _parse(text) {\n  const obj = JSON.parse(text);\n  if (obj === null || typeof obj !== \"object\") {\n    return obj;\n  }\n  if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n    return obj;\n  }\n  return filter(obj);\n}\nfunction filter(obj) {\n  let next = [obj];\n  while (next.length) {\n    const nodes = next;\n    next = [];\n    for (const node of nodes) {\n      if (Object.prototype.hasOwnProperty.call(node, \"__proto__\")) {\n        throw new SyntaxError(\"Object contains forbidden prototype property\");\n      }\n      if (Object.prototype.hasOwnProperty.call(node, \"constructor\") && Object.prototype.hasOwnProperty.call(node.constructor, \"prototype\")) {\n        throw new SyntaxError(\"Object contains forbidden prototype property\");\n      }\n      for (const key in node) {\n        const value = node[key];\n        if (value && typeof value === \"object\") {\n          next.push(value);\n        }\n      }\n    }\n  }\n  return obj;\n}\nfunction secureJsonParse(text) {\n  const { stackTraceLimit } = Error;\n  try {\n    Error.stackTraceLimit = 0;\n  } catch (e) {\n    return _parse(text);\n  }\n  try {\n    return _parse(text);\n  } finally {\n    Error.stackTraceLimit = stackTraceLimit;\n  }\n}\n\n// src/validate-types.ts\nimport { TypeValidationError as TypeValidationError2 } from \"@ai-sdk/provider\";\n\n// src/validator.ts\nimport { TypeValidationError } from \"@ai-sdk/provider\";\nvar validatorSymbol = Symbol.for(\"vercel.ai.validator\");\nfunction validator(validate) {\n  return { [validatorSymbol]: true, validate };\n}\nfunction isValidator(value) {\n  return typeof value === \"object\" && value !== null && validatorSymbol in value && value[validatorSymbol] === true && \"validate\" in value;\n}\nfunction lazyValidator(createValidator) {\n  let validator2;\n  return () => {\n    if (validator2 == null) {\n      validator2 = createValidator();\n    }\n    return validator2;\n  };\n}\nfunction asValidator(value) {\n  return isValidator(value) ? value : typeof value === \"function\" ? value() : standardSchemaValidator(value);\n}\nfunction standardSchemaValidator(standardSchema) {\n  return validator(async (value) => {\n    const result = await standardSchema[\"~standard\"].validate(value);\n    return result.issues == null ? { success: true, value: result.value } : {\n      success: false,\n      error: new TypeValidationError({\n        value,\n        cause: result.issues\n      })\n    };\n  });\n}\n\n// src/validate-types.ts\nasync function validateTypes({\n  value,\n  schema\n}) {\n  const result = await safeValidateTypes({ value, schema });\n  if (!result.success) {\n    throw TypeValidationError2.wrap({ value, cause: result.error });\n  }\n  return result.value;\n}\nasync function safeValidateTypes({\n  value,\n  schema\n}) {\n  const validator2 = asValidator(schema);\n  try {\n    if (validator2.validate == null) {\n      return { success: true, value, rawValue: value };\n    }\n    const result = await validator2.validate(value);\n    if (result.success) {\n      return { success: true, value: result.value, rawValue: value };\n    }\n    return {\n      success: false,\n      error: TypeValidationError2.wrap({ value, cause: result.error }),\n      rawValue: value\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: TypeValidationError2.wrap({ value, cause: error }),\n      rawValue: value\n    };\n  }\n}\n\n// src/parse-json.ts\nasync function parseJSON({\n  text,\n  schema\n}) {\n  try {\n    const value = secureJsonParse(text);\n    if (schema == null) {\n      return value;\n    }\n    return validateTypes({ value, schema });\n  } catch (error) {\n    if (JSONParseError.isInstance(error) || TypeValidationError3.isInstance(error)) {\n      throw error;\n    }\n    throw new JSONParseError({ text, cause: error });\n  }\n}\nasync function safeParseJSON({\n  text,\n  schema\n}) {\n  try {\n    const value = secureJsonParse(text);\n    if (schema == null) {\n      return { success: true, value, rawValue: value };\n    }\n    return await safeValidateTypes({ value, schema });\n  } catch (error) {\n    return {\n      success: false,\n      error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error }),\n      rawValue: void 0\n    };\n  }\n}\nfunction isParsableJson(input) {\n  try {\n    secureJsonParse(input);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n// src/parse-json-event-stream.ts\nimport {\n  EventSourceParserStream\n} from \"eventsource-parser/stream\";\nfunction parseJsonEventStream({\n  stream,\n  schema\n}) {\n  return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(\n    new TransformStream({\n      async transform({ data }, controller) {\n        if (data === \"[DONE]\") {\n          return;\n        }\n        controller.enqueue(await safeParseJSON({ text: data, schema }));\n      }\n    })\n  );\n}\n\n// src/parse-provider-options.ts\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nasync function parseProviderOptions({\n  provider,\n  providerOptions,\n  schema\n}) {\n  if ((providerOptions == null ? void 0 : providerOptions[provider]) == null) {\n    return void 0;\n  }\n  const parsedProviderOptions = await safeValidateTypes({\n    value: providerOptions[provider],\n    schema\n  });\n  if (!parsedProviderOptions.success) {\n    throw new InvalidArgumentError2({\n      argument: \"providerOptions\",\n      message: `invalid ${provider} provider options`,\n      cause: parsedProviderOptions.error\n    });\n  }\n  return parsedProviderOptions.value;\n}\n\n// src/post-to-api.ts\nimport { APICallError as APICallError3 } from \"@ai-sdk/provider\";\nvar getOriginalFetch2 = () => globalThis.fetch;\nvar postJsonToApi = async ({\n  url,\n  headers,\n  body,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch\n}) => postToApi({\n  url,\n  headers: {\n    \"Content-Type\": \"application/json\",\n    ...headers\n  },\n  body: {\n    content: JSON.stringify(body),\n    values: body\n  },\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch\n});\nvar postFormDataToApi = async ({\n  url,\n  headers,\n  formData,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch\n}) => postToApi({\n  url,\n  headers,\n  body: {\n    content: formData,\n    values: Object.fromEntries(formData.entries())\n  },\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch\n});\nvar postToApi = async ({\n  url,\n  headers = {},\n  body,\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch2()\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent()\n      ),\n      body: body.content,\n      signal: abortSignal\n    });\n    const responseHeaders = extractResponseHeaders(response);\n    if (!response.ok) {\n      let errorInformation;\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: body.values\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError3.isInstance(error)) {\n          throw error;\n        }\n        throw new APICallError3({\n          message: \"Failed to process error response\",\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: body.values\n        });\n      }\n      throw errorInformation.value;\n    }\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: body.values\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError3.isInstance(error)) {\n          throw error;\n        }\n      }\n      throw new APICallError3({\n        message: \"Failed to process successful response\",\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: body.values\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: body.values });\n  }\n};\n\n// src/types/tool.ts\nfunction tool(tool2) {\n  return tool2;\n}\nfunction dynamicTool(tool2) {\n  return { ...tool2, type: \"dynamic\" };\n}\n\n// src/provider-defined-tool-factory.ts\nfunction createProviderDefinedToolFactory({\n  id,\n  name,\n  inputSchema\n}) {\n  return ({\n    execute,\n    outputSchema,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }) => tool({\n    type: \"provider-defined\",\n    id,\n    name,\n    args,\n    inputSchema,\n    outputSchema,\n    execute,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable\n  });\n}\nfunction createProviderDefinedToolFactoryWithOutputSchema({\n  id,\n  name,\n  inputSchema,\n  outputSchema\n}) {\n  return ({\n    execute,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }) => tool({\n    type: \"provider-defined\",\n    id,\n    name,\n    args,\n    inputSchema,\n    outputSchema,\n    execute,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable\n  });\n}\n\n// src/remove-undefined-entries.ts\nfunction removeUndefinedEntries(record) {\n  return Object.fromEntries(\n    Object.entries(record).filter(([_key, value]) => value != null)\n  );\n}\n\n// src/resolve.ts\nasync function resolve(value) {\n  if (typeof value === \"function\") {\n    value = value();\n  }\n  return Promise.resolve(value);\n}\n\n// src/response-handler.ts\nimport { APICallError as APICallError4, EmptyResponseBodyError } from \"@ai-sdk/provider\";\nvar createJsonErrorResponseHandler = ({\n  errorSchema,\n  errorToMessage,\n  isRetryable\n}) => async ({ response, url, requestBodyValues }) => {\n  const responseBody = await response.text();\n  const responseHeaders = extractResponseHeaders(response);\n  if (responseBody.trim() === \"\") {\n    return {\n      responseHeaders,\n      value: new APICallError4({\n        message: response.statusText,\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n        isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n      })\n    };\n  }\n  try {\n    const parsedError = await parseJSON({\n      text: responseBody,\n      schema: errorSchema\n    });\n    return {\n      responseHeaders,\n      value: new APICallError4({\n        message: errorToMessage(parsedError),\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n        data: parsedError,\n        isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)\n      })\n    };\n  } catch (parseError) {\n    return {\n      responseHeaders,\n      value: new APICallError4({\n        message: response.statusText,\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n        isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n      })\n    };\n  }\n};\nvar createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {\n  const responseHeaders = extractResponseHeaders(response);\n  if (response.body == null) {\n    throw new EmptyResponseBodyError({});\n  }\n  return {\n    responseHeaders,\n    value: parseJsonEventStream({\n      stream: response.body,\n      schema: chunkSchema\n    })\n  };\n};\nvar createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {\n  const responseHeaders = extractResponseHeaders(response);\n  if (response.body == null) {\n    throw new EmptyResponseBodyError({});\n  }\n  let buffer = \"\";\n  return {\n    responseHeaders,\n    value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n      new TransformStream({\n        async transform(chunkText, controller) {\n          if (chunkText.endsWith(\"\\n\")) {\n            controller.enqueue(\n              await safeParseJSON({\n                text: buffer + chunkText,\n                schema: chunkSchema\n              })\n            );\n            buffer = \"\";\n          } else {\n            buffer += chunkText;\n          }\n        }\n      })\n    )\n  };\n};\nvar createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {\n  const responseBody = await response.text();\n  const parsedResult = await safeParseJSON({\n    text: responseBody,\n    schema: responseSchema\n  });\n  const responseHeaders = extractResponseHeaders(response);\n  if (!parsedResult.success) {\n    throw new APICallError4({\n      message: \"Invalid JSON response\",\n      cause: parsedResult.error,\n      statusCode: response.status,\n      responseHeaders,\n      responseBody,\n      url,\n      requestBodyValues\n    });\n  }\n  return {\n    responseHeaders,\n    value: parsedResult.value,\n    rawValue: parsedResult.rawValue\n  };\n};\nvar createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n  const responseHeaders = extractResponseHeaders(response);\n  if (!response.body) {\n    throw new APICallError4({\n      message: \"Response body is empty\",\n      url,\n      requestBodyValues,\n      statusCode: response.status,\n      responseHeaders,\n      responseBody: void 0\n    });\n  }\n  try {\n    const buffer = await response.arrayBuffer();\n    return {\n      responseHeaders,\n      value: new Uint8Array(buffer)\n    };\n  } catch (error) {\n    throw new APICallError4({\n      message: \"Failed to read response as array buffer\",\n      url,\n      requestBodyValues,\n      statusCode: response.status,\n      responseHeaders,\n      responseBody: void 0,\n      cause: error\n    });\n  }\n};\nvar createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n  const responseHeaders = extractResponseHeaders(response);\n  const responseBody = await response.text();\n  return {\n    responseHeaders,\n    value: new APICallError4({\n      message: response.statusText,\n      url,\n      requestBodyValues,\n      statusCode: response.status,\n      responseHeaders,\n      responseBody\n    })\n  };\n};\n\n// src/zod-schema.ts\nimport * as z4 from \"zod/v4\";\n\n// src/add-additional-properties-to-json-schema.ts\nfunction addAdditionalPropertiesToJsonSchema(jsonSchema2) {\n  if (jsonSchema2.type === \"object\") {\n    jsonSchema2.additionalProperties = false;\n    const properties = jsonSchema2.properties;\n    if (properties != null) {\n      for (const property in properties) {\n        properties[property] = addAdditionalPropertiesToJsonSchema(\n          properties[property]\n        );\n      }\n    }\n  }\n  if (jsonSchema2.type === \"array\" && jsonSchema2.items != null) {\n    if (Array.isArray(jsonSchema2.items)) {\n      jsonSchema2.items = jsonSchema2.items.map(\n        (item) => addAdditionalPropertiesToJsonSchema(item)\n      );\n    } else {\n      jsonSchema2.items = addAdditionalPropertiesToJsonSchema(\n        jsonSchema2.items\n      );\n    }\n  }\n  return jsonSchema2;\n}\n\n// src/zod-to-json-schema/get-relative-path.ts\nvar getRelativePath = (pathA, pathB) => {\n  let i = 0;\n  for (; i < pathA.length && i < pathB.length; i++) {\n    if (pathA[i] !== pathB[i]) break;\n  }\n  return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n\n// src/zod-to-json-schema/options.ts\nvar ignoreOverride = Symbol(\n  \"Let zodToJsonSchema decide on which parser to use\"\n);\nvar defaultOptions = {\n  name: void 0,\n  $refStrategy: \"root\",\n  basePath: [\"#\"],\n  effectStrategy: \"input\",\n  pipeStrategy: \"all\",\n  dateStrategy: \"format:date-time\",\n  mapStrategy: \"entries\",\n  removeAdditionalStrategy: \"passthrough\",\n  allowedAdditionalProperties: true,\n  rejectedAdditionalProperties: false,\n  definitionPath: \"definitions\",\n  strictUnions: false,\n  definitions: {},\n  errorMessages: false,\n  patternStrategy: \"escape\",\n  applyRegexFlags: false,\n  emailStrategy: \"format:email\",\n  base64Strategy: \"contentEncoding:base64\",\n  nameStrategy: \"ref\"\n};\nvar getDefaultOptions = (options) => typeof options === \"string\" ? {\n  ...defaultOptions,\n  name: options\n} : {\n  ...defaultOptions,\n  ...options\n};\n\n// src/zod-to-json-schema/select-parser.ts\nimport { ZodFirstPartyTypeKind as ZodFirstPartyTypeKind3 } from \"zod/v3\";\n\n// src/zod-to-json-schema/parsers/any.ts\nfunction parseAnyDef() {\n  return {};\n}\n\n// src/zod-to-json-schema/parsers/array.ts\nimport { ZodFirstPartyTypeKind } from \"zod/v3\";\nfunction parseArrayDef(def, refs) {\n  var _a, _b, _c;\n  const res = {\n    type: \"array\"\n  };\n  if (((_a = def.type) == null ? void 0 : _a._def) && ((_c = (_b = def.type) == null ? void 0 : _b._def) == null ? void 0 : _c.typeName) !== ZodFirstPartyTypeKind.ZodAny) {\n    res.items = parseDef(def.type._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"items\"]\n    });\n  }\n  if (def.minLength) {\n    res.minItems = def.minLength.value;\n  }\n  if (def.maxLength) {\n    res.maxItems = def.maxLength.value;\n  }\n  if (def.exactLength) {\n    res.minItems = def.exactLength.value;\n    res.maxItems = def.exactLength.value;\n  }\n  return res;\n}\n\n// src/zod-to-json-schema/parsers/bigint.ts\nfunction parseBigintDef(def) {\n  const res = {\n    type: \"integer\",\n    format: \"int64\"\n  };\n  if (!def.checks) return res;\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case \"min\":\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case \"max\":\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n        break;\n      case \"multipleOf\":\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n\n// src/zod-to-json-schema/parsers/boolean.ts\nfunction parseBooleanDef() {\n  return { type: \"boolean\" };\n}\n\n// src/zod-to-json-schema/parsers/branded.ts\nfunction parseBrandedDef(_def, refs) {\n  return parseDef(_def.type._def, refs);\n}\n\n// src/zod-to-json-schema/parsers/catch.ts\nvar parseCatchDef = (def, refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n\n// src/zod-to-json-schema/parsers/date.ts\nfunction parseDateDef(def, refs, overrideDateStrategy) {\n  const strategy = overrideDateStrategy != null ? overrideDateStrategy : refs.dateStrategy;\n  if (Array.isArray(strategy)) {\n    return {\n      anyOf: strategy.map((item, i) => parseDateDef(def, refs, item))\n    };\n  }\n  switch (strategy) {\n    case \"string\":\n    case \"format:date-time\":\n      return {\n        type: \"string\",\n        format: \"date-time\"\n      };\n    case \"format:date\":\n      return {\n        type: \"string\",\n        format: \"date\"\n      };\n    case \"integer\":\n      return integerDateParser(def);\n  }\n}\nvar integerDateParser = (def) => {\n  const res = {\n    type: \"integer\",\n    format: \"unix-time\"\n  };\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case \"min\":\n        res.minimum = check.value;\n        break;\n      case \"max\":\n        res.maximum = check.value;\n        break;\n    }\n  }\n  return res;\n};\n\n// src/zod-to-json-schema/parsers/default.ts\nfunction parseDefaultDef(_def, refs) {\n  return {\n    ...parseDef(_def.innerType._def, refs),\n    default: _def.defaultValue()\n  };\n}\n\n// src/zod-to-json-schema/parsers/effects.ts\nfunction parseEffectsDef(_def, refs) {\n  return refs.effectStrategy === \"input\" ? parseDef(_def.schema._def, refs) : parseAnyDef();\n}\n\n// src/zod-to-json-schema/parsers/enum.ts\nfunction parseEnumDef(def) {\n  return {\n    type: \"string\",\n    enum: Array.from(def.values)\n  };\n}\n\n// src/zod-to-json-schema/parsers/intersection.ts\nvar isJsonSchema7AllOfType = (type) => {\n  if (\"type\" in type && type.type === \"string\") return false;\n  return \"allOf\" in type;\n};\nfunction parseIntersectionDef(def, refs) {\n  const allOf = [\n    parseDef(def.left._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"allOf\", \"0\"]\n    }),\n    parseDef(def.right._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"allOf\", \"1\"]\n    })\n  ].filter((x) => !!x);\n  const mergedAllOf = [];\n  allOf.forEach((schema) => {\n    if (isJsonSchema7AllOfType(schema)) {\n      mergedAllOf.push(...schema.allOf);\n    } else {\n      let nestedSchema = schema;\n      if (\"additionalProperties\" in schema && schema.additionalProperties === false) {\n        const { additionalProperties, ...rest } = schema;\n        nestedSchema = rest;\n      }\n      mergedAllOf.push(nestedSchema);\n    }\n  });\n  return mergedAllOf.length ? { allOf: mergedAllOf } : void 0;\n}\n\n// src/zod-to-json-schema/parsers/literal.ts\nfunction parseLiteralDef(def) {\n  const parsedType = typeof def.value;\n  if (parsedType !== \"bigint\" && parsedType !== \"number\" && parsedType !== \"boolean\" && parsedType !== \"string\") {\n    return {\n      type: Array.isArray(def.value) ? \"array\" : \"object\"\n    };\n  }\n  return {\n    type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n    const: def.value\n  };\n}\n\n// src/zod-to-json-schema/parsers/record.ts\nimport {\n  ZodFirstPartyTypeKind as ZodFirstPartyTypeKind2\n} from \"zod/v3\";\n\n// src/zod-to-json-schema/parsers/string.ts\nvar emojiRegex = void 0;\nvar zodPatterns = {\n  /**\n   * `c` was changed to `[cC]` to replicate /i flag\n   */\n  cuid: /^[cC][^\\s-]{8,}$/,\n  cuid2: /^[0-9a-z]+$/,\n  ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n  /**\n   * `a-z` was added to replicate /i flag\n   */\n  email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n  /**\n   * Constructed a valid Unicode RegExp\n   *\n   * Lazily instantiate since this type of regex isn't supported\n   * in all envs (e.g. React Native).\n   *\n   * See:\n   * https://github.com/colinhacks/zod/issues/2433\n   * Fix in Zod:\n   * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n   */\n  emoji: () => {\n    if (emojiRegex === void 0) {\n      emojiRegex = RegExp(\n        \"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\",\n        \"u\"\n      );\n    }\n    return emojiRegex;\n  },\n  /**\n   * Unused\n   */\n  uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n  /**\n   * Unused\n   */\n  ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n  ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n  /**\n   * Unused\n   */\n  ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n  ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n  base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n  base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n  nanoid: /^[a-zA-Z0-9_-]{21}$/,\n  jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/\n};\nfunction parseStringDef(def, refs) {\n  const res = {\n    type: \"string\"\n  };\n  if (def.checks) {\n    for (const check of def.checks) {\n      switch (check.kind) {\n        case \"min\":\n          res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n          break;\n        case \"max\":\n          res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\n          break;\n        case \"email\":\n          switch (refs.emailStrategy) {\n            case \"format:email\":\n              addFormat(res, \"email\", check.message, refs);\n              break;\n            case \"format:idn-email\":\n              addFormat(res, \"idn-email\", check.message, refs);\n              break;\n            case \"pattern:zod\":\n              addPattern(res, zodPatterns.email, check.message, refs);\n              break;\n          }\n          break;\n        case \"url\":\n          addFormat(res, \"uri\", check.message, refs);\n          break;\n        case \"uuid\":\n          addFormat(res, \"uuid\", check.message, refs);\n          break;\n        case \"regex\":\n          addPattern(res, check.regex, check.message, refs);\n          break;\n        case \"cuid\":\n          addPattern(res, zodPatterns.cuid, check.message, refs);\n          break;\n        case \"cuid2\":\n          addPattern(res, zodPatterns.cuid2, check.message, refs);\n          break;\n        case \"startsWith\":\n          addPattern(\n            res,\n            RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n            check.message,\n            refs\n          );\n          break;\n        case \"endsWith\":\n          addPattern(\n            res,\n            RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n            check.message,\n            refs\n          );\n          break;\n        case \"datetime\":\n          addFormat(res, \"date-time\", check.message, refs);\n          break;\n        case \"date\":\n          addFormat(res, \"date\", check.message, refs);\n          break;\n        case \"time\":\n          addFormat(res, \"time\", check.message, refs);\n          break;\n        case \"duration\":\n          addFormat(res, \"duration\", check.message, refs);\n          break;\n        case \"length\":\n          res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n          res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\n          break;\n        case \"includes\": {\n          addPattern(\n            res,\n            RegExp(escapeLiteralCheckValue(check.value, refs)),\n            check.message,\n            refs\n          );\n          break;\n        }\n        case \"ip\": {\n          if (check.version !== \"v6\") {\n            addFormat(res, \"ipv4\", check.message, refs);\n          }\n          if (check.version !== \"v4\") {\n            addFormat(res, \"ipv6\", check.message, refs);\n          }\n          break;\n        }\n        case \"base64url\":\n          addPattern(res, zodPatterns.base64url, check.message, refs);\n          break;\n        case \"jwt\":\n          addPattern(res, zodPatterns.jwt, check.message, refs);\n          break;\n        case \"cidr\": {\n          if (check.version !== \"v6\") {\n            addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n          }\n          if (check.version !== \"v4\") {\n            addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n          }\n          break;\n        }\n        case \"emoji\":\n          addPattern(res, zodPatterns.emoji(), check.message, refs);\n          break;\n        case \"ulid\": {\n          addPattern(res, zodPatterns.ulid, check.message, refs);\n          break;\n        }\n        case \"base64\": {\n          switch (refs.base64Strategy) {\n            case \"format:binary\": {\n              addFormat(res, \"binary\", check.message, refs);\n              break;\n            }\n            case \"contentEncoding:base64\": {\n              res.contentEncoding = \"base64\";\n              break;\n            }\n            case \"pattern:zod\": {\n              addPattern(res, zodPatterns.base64, check.message, refs);\n              break;\n            }\n          }\n          break;\n        }\n        case \"nanoid\": {\n          addPattern(res, zodPatterns.nanoid, check.message, refs);\n        }\n        case \"toLowerCase\":\n        case \"toUpperCase\":\n        case \"trim\":\n          break;\n        default:\n          /* @__PURE__ */ ((_) => {\n          })(check);\n      }\n    }\n  }\n  return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n  return refs.patternStrategy === \"escape\" ? escapeNonAlphaNumeric(literal) : literal;\n}\nvar ALPHA_NUMERIC = new Set(\n  \"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\"\n);\nfunction escapeNonAlphaNumeric(source) {\n  let result = \"\";\n  for (let i = 0; i < source.length; i++) {\n    if (!ALPHA_NUMERIC.has(source[i])) {\n      result += \"\\\\\";\n    }\n    result += source[i];\n  }\n  return result;\n}\nfunction addFormat(schema, value, message, refs) {\n  var _a;\n  if (schema.format || ((_a = schema.anyOf) == null ? void 0 : _a.some((x) => x.format))) {\n    if (!schema.anyOf) {\n      schema.anyOf = [];\n    }\n    if (schema.format) {\n      schema.anyOf.push({\n        format: schema.format\n      });\n      delete schema.format;\n    }\n    schema.anyOf.push({\n      format: value,\n      ...message && refs.errorMessages && { errorMessage: { format: message } }\n    });\n  } else {\n    schema.format = value;\n  }\n}\nfunction addPattern(schema, regex, message, refs) {\n  var _a;\n  if (schema.pattern || ((_a = schema.allOf) == null ? void 0 : _a.some((x) => x.pattern))) {\n    if (!schema.allOf) {\n      schema.allOf = [];\n    }\n    if (schema.pattern) {\n      schema.allOf.push({\n        pattern: schema.pattern\n      });\n      delete schema.pattern;\n    }\n    schema.allOf.push({\n      pattern: stringifyRegExpWithFlags(regex, refs),\n      ...message && refs.errorMessages && { errorMessage: { pattern: message } }\n    });\n  } else {\n    schema.pattern = stringifyRegExpWithFlags(regex, refs);\n  }\n}\nfunction stringifyRegExpWithFlags(regex, refs) {\n  var _a;\n  if (!refs.applyRegexFlags || !regex.flags) {\n    return regex.source;\n  }\n  const flags = {\n    i: regex.flags.includes(\"i\"),\n    // Case-insensitive\n    m: regex.flags.includes(\"m\"),\n    // `^` and `$` matches adjacent to newline characters\n    s: regex.flags.includes(\"s\")\n    // `.` matches newlines\n  };\n  const source = flags.i ? regex.source.toLowerCase() : regex.source;\n  let pattern = \"\";\n  let isEscaped = false;\n  let inCharGroup = false;\n  let inCharRange = false;\n  for (let i = 0; i < source.length; i++) {\n    if (isEscaped) {\n      pattern += source[i];\n      isEscaped = false;\n      continue;\n    }\n    if (flags.i) {\n      if (inCharGroup) {\n        if (source[i].match(/[a-z]/)) {\n          if (inCharRange) {\n            pattern += source[i];\n            pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n            inCharRange = false;\n          } else if (source[i + 1] === \"-\" && ((_a = source[i + 2]) == null ? void 0 : _a.match(/[a-z]/))) {\n            pattern += source[i];\n            inCharRange = true;\n          } else {\n            pattern += `${source[i]}${source[i].toUpperCase()}`;\n          }\n          continue;\n        }\n      } else if (source[i].match(/[a-z]/)) {\n        pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n        continue;\n      }\n    }\n    if (flags.m) {\n      if (source[i] === \"^\") {\n        pattern += `(^|(?<=[\\r\n]))`;\n        continue;\n      } else if (source[i] === \"$\") {\n        pattern += `($|(?=[\\r\n]))`;\n        continue;\n      }\n    }\n    if (flags.s && source[i] === \".\") {\n      pattern += inCharGroup ? `${source[i]}\\r\n` : `[${source[i]}\\r\n]`;\n      continue;\n    }\n    pattern += source[i];\n    if (source[i] === \"\\\\\") {\n      isEscaped = true;\n    } else if (inCharGroup && source[i] === \"]\") {\n      inCharGroup = false;\n    } else if (!inCharGroup && source[i] === \"[\") {\n      inCharGroup = true;\n    }\n  }\n  try {\n    new RegExp(pattern);\n  } catch (e) {\n    console.warn(\n      `Could not convert regex pattern at ${refs.currentPath.join(\n        \"/\"\n      )} to a flag-independent form! Falling back to the flag-ignorant source`\n    );\n    return regex.source;\n  }\n  return pattern;\n}\n\n// src/zod-to-json-schema/parsers/record.ts\nfunction parseRecordDef(def, refs) {\n  var _a, _b, _c, _d, _e, _f;\n  const schema = {\n    type: \"object\",\n    additionalProperties: (_a = parseDef(def.valueType._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"additionalProperties\"]\n    })) != null ? _a : refs.allowedAdditionalProperties\n  };\n  if (((_b = def.keyType) == null ? void 0 : _b._def.typeName) === ZodFirstPartyTypeKind2.ZodString && ((_c = def.keyType._def.checks) == null ? void 0 : _c.length)) {\n    const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n    return {\n      ...schema,\n      propertyNames: keyType\n    };\n  } else if (((_d = def.keyType) == null ? void 0 : _d._def.typeName) === ZodFirstPartyTypeKind2.ZodEnum) {\n    return {\n      ...schema,\n      propertyNames: {\n        enum: def.keyType._def.values\n      }\n    };\n  } else if (((_e = def.keyType) == null ? void 0 : _e._def.typeName) === ZodFirstPartyTypeKind2.ZodBranded && def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind2.ZodString && ((_f = def.keyType._def.type._def.checks) == null ? void 0 : _f.length)) {\n    const { type, ...keyType } = parseBrandedDef(\n      def.keyType._def,\n      refs\n    );\n    return {\n      ...schema,\n      propertyNames: keyType\n    };\n  }\n  return schema;\n}\n\n// src/zod-to-json-schema/parsers/map.ts\nfunction parseMapDef(def, refs) {\n  if (refs.mapStrategy === \"record\") {\n    return parseRecordDef(def, refs);\n  }\n  const keys = parseDef(def.keyType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"]\n  }) || parseAnyDef();\n  const values = parseDef(def.valueType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"]\n  }) || parseAnyDef();\n  return {\n    type: \"array\",\n    maxItems: 125,\n    items: {\n      type: \"array\",\n      items: [keys, values],\n      minItems: 2,\n      maxItems: 2\n    }\n  };\n}\n\n// src/zod-to-json-schema/parsers/native-enum.ts\nfunction parseNativeEnumDef(def) {\n  const object = def.values;\n  const actualKeys = Object.keys(def.values).filter((key) => {\n    return typeof object[object[key]] !== \"number\";\n  });\n  const actualValues = actualKeys.map((key) => object[key]);\n  const parsedTypes = Array.from(\n    new Set(actualValues.map((values) => typeof values))\n  );\n  return {\n    type: parsedTypes.length === 1 ? parsedTypes[0] === \"string\" ? \"string\" : \"number\" : [\"string\", \"number\"],\n    enum: actualValues\n  };\n}\n\n// src/zod-to-json-schema/parsers/never.ts\nfunction parseNeverDef() {\n  return { not: parseAnyDef() };\n}\n\n// src/zod-to-json-schema/parsers/null.ts\nfunction parseNullDef() {\n  return {\n    type: \"null\"\n  };\n}\n\n// src/zod-to-json-schema/parsers/union.ts\nvar primitiveMappings = {\n  ZodString: \"string\",\n  ZodNumber: \"number\",\n  ZodBigInt: \"integer\",\n  ZodBoolean: \"boolean\",\n  ZodNull: \"null\"\n};\nfunction parseUnionDef(def, refs) {\n  const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n  if (options.every(\n    (x) => x._def.typeName in primitiveMappings && (!x._def.checks || !x._def.checks.length)\n  )) {\n    const types = options.reduce((types2, x) => {\n      const type = primitiveMappings[x._def.typeName];\n      return type && !types2.includes(type) ? [...types2, type] : types2;\n    }, []);\n    return {\n      type: types.length > 1 ? types : types[0]\n    };\n  } else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n    const types = options.reduce(\n      (acc, x) => {\n        const type = typeof x._def.value;\n        switch (type) {\n          case \"string\":\n          case \"number\":\n          case \"boolean\":\n            return [...acc, type];\n          case \"bigint\":\n            return [...acc, \"integer\"];\n          case \"object\":\n            if (x._def.value === null) return [...acc, \"null\"];\n          case \"symbol\":\n          case \"undefined\":\n          case \"function\":\n          default:\n            return acc;\n        }\n      },\n      []\n    );\n    if (types.length === options.length) {\n      const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n      return {\n        type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n        enum: options.reduce(\n          (acc, x) => {\n            return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n          },\n          []\n        )\n      };\n    }\n  } else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n    return {\n      type: \"string\",\n      enum: options.reduce(\n        (acc, x) => [\n          ...acc,\n          ...x._def.values.filter((x2) => !acc.includes(x2))\n        ],\n        []\n      )\n    };\n  }\n  return asAnyOf(def, refs);\n}\nvar asAnyOf = (def, refs) => {\n  const anyOf = (def.options instanceof Map ? Array.from(def.options.values()) : def.options).map(\n    (x, i) => parseDef(x._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"anyOf\", `${i}`]\n    })\n  ).filter(\n    (x) => !!x && (!refs.strictUnions || typeof x === \"object\" && Object.keys(x).length > 0)\n  );\n  return anyOf.length ? { anyOf } : void 0;\n};\n\n// src/zod-to-json-schema/parsers/nullable.ts\nfunction parseNullableDef(def, refs) {\n  if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(\n    def.innerType._def.typeName\n  ) && (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n    return {\n      type: [\n        primitiveMappings[def.innerType._def.typeName],\n        \"null\"\n      ]\n    };\n  }\n  const base = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"anyOf\", \"0\"]\n  });\n  return base && { anyOf: [base, { type: \"null\" }] };\n}\n\n// src/zod-to-json-schema/parsers/number.ts\nfunction parseNumberDef(def) {\n  const res = {\n    type: \"number\"\n  };\n  if (!def.checks) return res;\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case \"int\":\n        res.type = \"integer\";\n        break;\n      case \"min\":\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case \"max\":\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n        break;\n      case \"multipleOf\":\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n\n// src/zod-to-json-schema/parsers/object.ts\nfunction parseObjectDef(def, refs) {\n  const result = {\n    type: \"object\",\n    properties: {}\n  };\n  const required = [];\n  const shape = def.shape();\n  for (const propName in shape) {\n    let propDef = shape[propName];\n    if (propDef === void 0 || propDef._def === void 0) {\n      continue;\n    }\n    const propOptional = safeIsOptional(propDef);\n    const parsedDef = parseDef(propDef._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"properties\", propName],\n      propertyPath: [...refs.currentPath, \"properties\", propName]\n    });\n    if (parsedDef === void 0) {\n      continue;\n    }\n    result.properties[propName] = parsedDef;\n    if (!propOptional) {\n      required.push(propName);\n    }\n  }\n  if (required.length) {\n    result.required = required;\n  }\n  const additionalProperties = decideAdditionalProperties(def, refs);\n  if (additionalProperties !== void 0) {\n    result.additionalProperties = additionalProperties;\n  }\n  return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n  if (def.catchall._def.typeName !== \"ZodNever\") {\n    return parseDef(def.catchall._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, \"additionalProperties\"]\n    });\n  }\n  switch (def.unknownKeys) {\n    case \"passthrough\":\n      return refs.allowedAdditionalProperties;\n    case \"strict\":\n      return refs.rejectedAdditionalProperties;\n    case \"strip\":\n      return refs.removeAdditionalStrategy === \"strict\" ? refs.allowedAdditionalProperties : refs.rejectedAdditionalProperties;\n  }\n}\nfunction safeIsOptional(schema) {\n  try {\n    return schema.isOptional();\n  } catch (e) {\n    return true;\n  }\n}\n\n// src/zod-to-json-schema/parsers/optional.ts\nvar parseOptionalDef = (def, refs) => {\n  var _a;\n  if (refs.currentPath.toString() === ((_a = refs.propertyPath) == null ? void 0 : _a.toString())) {\n    return parseDef(def.innerType._def, refs);\n  }\n  const innerSchema = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"anyOf\", \"1\"]\n  });\n  return innerSchema ? { anyOf: [{ not: parseAnyDef() }, innerSchema] } : parseAnyDef();\n};\n\n// src/zod-to-json-schema/parsers/pipeline.ts\nvar parsePipelineDef = (def, refs) => {\n  if (refs.pipeStrategy === \"input\") {\n    return parseDef(def.in._def, refs);\n  } else if (refs.pipeStrategy === \"output\") {\n    return parseDef(def.out._def, refs);\n  }\n  const a = parseDef(def.in._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"allOf\", \"0\"]\n  });\n  const b = parseDef(def.out._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"]\n  });\n  return {\n    allOf: [a, b].filter((x) => x !== void 0)\n  };\n};\n\n// src/zod-to-json-schema/parsers/promise.ts\nfunction parsePromiseDef(def, refs) {\n  return parseDef(def.type._def, refs);\n}\n\n// src/zod-to-json-schema/parsers/set.ts\nfunction parseSetDef(def, refs) {\n  const items = parseDef(def.valueType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, \"items\"]\n  });\n  const schema = {\n    type: \"array\",\n    uniqueItems: true,\n    items\n  };\n  if (def.minSize) {\n    schema.minItems = def.minSize.value;\n  }\n  if (def.maxSize) {\n    schema.maxItems = def.maxSize.value;\n  }\n  return schema;\n}\n\n// src/zod-to-json-schema/parsers/tuple.ts\nfunction parseTupleDef(def, refs) {\n  if (def.rest) {\n    return {\n      type: \"array\",\n      minItems: def.items.length,\n      items: def.items.map(\n        (x, i) => parseDef(x._def, {\n          ...refs,\n          currentPath: [...refs.currentPath, \"items\", `${i}`]\n        })\n      ).reduce(\n        (acc, x) => x === void 0 ? acc : [...acc, x],\n        []\n      ),\n      additionalItems: parseDef(def.rest._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"additionalItems\"]\n      })\n    };\n  } else {\n    return {\n      type: \"array\",\n      minItems: def.items.length,\n      maxItems: def.items.length,\n      items: def.items.map(\n        (x, i) => parseDef(x._def, {\n          ...refs,\n          currentPath: [...refs.currentPath, \"items\", `${i}`]\n        })\n      ).reduce(\n        (acc, x) => x === void 0 ? acc : [...acc, x],\n        []\n      )\n    };\n  }\n}\n\n// src/zod-to-json-schema/parsers/undefined.ts\nfunction parseUndefinedDef() {\n  return {\n    not: parseAnyDef()\n  };\n}\n\n// src/zod-to-json-schema/parsers/unknown.ts\nfunction parseUnknownDef() {\n  return parseAnyDef();\n}\n\n// src/zod-to-json-schema/parsers/readonly.ts\nvar parseReadonlyDef = (def, refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n\n// src/zod-to-json-schema/select-parser.ts\nvar selectParser = (def, typeName, refs) => {\n  switch (typeName) {\n    case ZodFirstPartyTypeKind3.ZodString:\n      return parseStringDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodNumber:\n      return parseNumberDef(def);\n    case ZodFirstPartyTypeKind3.ZodObject:\n      return parseObjectDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodBigInt:\n      return parseBigintDef(def);\n    case ZodFirstPartyTypeKind3.ZodBoolean:\n      return parseBooleanDef();\n    case ZodFirstPartyTypeKind3.ZodDate:\n      return parseDateDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodUndefined:\n      return parseUndefinedDef();\n    case ZodFirstPartyTypeKind3.ZodNull:\n      return parseNullDef();\n    case ZodFirstPartyTypeKind3.ZodArray:\n      return parseArrayDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodUnion:\n    case ZodFirstPartyTypeKind3.ZodDiscriminatedUnion:\n      return parseUnionDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodIntersection:\n      return parseIntersectionDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodTuple:\n      return parseTupleDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodRecord:\n      return parseRecordDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodLiteral:\n      return parseLiteralDef(def);\n    case ZodFirstPartyTypeKind3.ZodEnum:\n      return parseEnumDef(def);\n    case ZodFirstPartyTypeKind3.ZodNativeEnum:\n      return parseNativeEnumDef(def);\n    case ZodFirstPartyTypeKind3.ZodNullable:\n      return parseNullableDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodOptional:\n      return parseOptionalDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodMap:\n      return parseMapDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodSet:\n      return parseSetDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodLazy:\n      return () => def.getter()._def;\n    case ZodFirstPartyTypeKind3.ZodPromise:\n      return parsePromiseDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodNaN:\n    case ZodFirstPartyTypeKind3.ZodNever:\n      return parseNeverDef();\n    case ZodFirstPartyTypeKind3.ZodEffects:\n      return parseEffectsDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodAny:\n      return parseAnyDef();\n    case ZodFirstPartyTypeKind3.ZodUnknown:\n      return parseUnknownDef();\n    case ZodFirstPartyTypeKind3.ZodDefault:\n      return parseDefaultDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodBranded:\n      return parseBrandedDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodReadonly:\n      return parseReadonlyDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodCatch:\n      return parseCatchDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodPipeline:\n      return parsePipelineDef(def, refs);\n    case ZodFirstPartyTypeKind3.ZodFunction:\n    case ZodFirstPartyTypeKind3.ZodVoid:\n    case ZodFirstPartyTypeKind3.ZodSymbol:\n      return void 0;\n    default:\n      return /* @__PURE__ */ ((_) => void 0)(typeName);\n  }\n};\n\n// src/zod-to-json-schema/parse-def.ts\nfunction parseDef(def, refs, forceResolution = false) {\n  var _a;\n  const seenItem = refs.seen.get(def);\n  if (refs.override) {\n    const overrideResult = (_a = refs.override) == null ? void 0 : _a.call(\n      refs,\n      def,\n      refs,\n      seenItem,\n      forceResolution\n    );\n    if (overrideResult !== ignoreOverride) {\n      return overrideResult;\n    }\n  }\n  if (seenItem && !forceResolution) {\n    const seenSchema = get$ref(seenItem, refs);\n    if (seenSchema !== void 0) {\n      return seenSchema;\n    }\n  }\n  const newItem = { def, path: refs.currentPath, jsonSchema: void 0 };\n  refs.seen.set(def, newItem);\n  const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n  const jsonSchema2 = typeof jsonSchemaOrGetter === \"function\" ? parseDef(jsonSchemaOrGetter(), refs) : jsonSchemaOrGetter;\n  if (jsonSchema2) {\n    addMeta(def, refs, jsonSchema2);\n  }\n  if (refs.postProcess) {\n    const postProcessResult = refs.postProcess(jsonSchema2, def, refs);\n    newItem.jsonSchema = jsonSchema2;\n    return postProcessResult;\n  }\n  newItem.jsonSchema = jsonSchema2;\n  return jsonSchema2;\n}\nvar get$ref = (item, refs) => {\n  switch (refs.$refStrategy) {\n    case \"root\":\n      return { $ref: item.path.join(\"/\") };\n    case \"relative\":\n      return { $ref: getRelativePath(refs.currentPath, item.path) };\n    case \"none\":\n    case \"seen\": {\n      if (item.path.length < refs.currentPath.length && item.path.every((value, index) => refs.currentPath[index] === value)) {\n        console.warn(\n          `Recursive reference detected at ${refs.currentPath.join(\n            \"/\"\n          )}! Defaulting to any`\n        );\n        return parseAnyDef();\n      }\n      return refs.$refStrategy === \"seen\" ? parseAnyDef() : void 0;\n    }\n  }\n};\nvar addMeta = (def, refs, jsonSchema2) => {\n  if (def.description) {\n    jsonSchema2.description = def.description;\n  }\n  return jsonSchema2;\n};\n\n// src/zod-to-json-schema/refs.ts\nvar getRefs = (options) => {\n  const _options = getDefaultOptions(options);\n  const currentPath = _options.name !== void 0 ? [..._options.basePath, _options.definitionPath, _options.name] : _options.basePath;\n  return {\n    ..._options,\n    currentPath,\n    propertyPath: void 0,\n    seen: new Map(\n      Object.entries(_options.definitions).map(([name, def]) => [\n        def._def,\n        {\n          def: def._def,\n          path: [..._options.basePath, _options.definitionPath, name],\n          // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n          jsonSchema: void 0\n        }\n      ])\n    )\n  };\n};\n\n// src/zod-to-json-schema/zod-to-json-schema.ts\nvar zodToJsonSchema = (schema, options) => {\n  var _a;\n  const refs = getRefs(options);\n  let definitions = typeof options === \"object\" && options.definitions ? Object.entries(options.definitions).reduce(\n    (acc, [name2, schema2]) => {\n      var _a2;\n      return {\n        ...acc,\n        [name2]: (_a2 = parseDef(\n          schema2._def,\n          {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name2]\n          },\n          true\n        )) != null ? _a2 : parseAnyDef()\n      };\n    },\n    {}\n  ) : void 0;\n  const name = typeof options === \"string\" ? options : (options == null ? void 0 : options.nameStrategy) === \"title\" ? void 0 : options == null ? void 0 : options.name;\n  const main = (_a = parseDef(\n    schema._def,\n    name === void 0 ? refs : {\n      ...refs,\n      currentPath: [...refs.basePath, refs.definitionPath, name]\n    },\n    false\n  )) != null ? _a : parseAnyDef();\n  const title = typeof options === \"object\" && options.name !== void 0 && options.nameStrategy === \"title\" ? options.name : void 0;\n  if (title !== void 0) {\n    main.title = title;\n  }\n  const combined = name === void 0 ? definitions ? {\n    ...main,\n    [refs.definitionPath]: definitions\n  } : main : {\n    $ref: [\n      ...refs.$refStrategy === \"relative\" ? [] : refs.basePath,\n      refs.definitionPath,\n      name\n    ].join(\"/\"),\n    [refs.definitionPath]: {\n      ...definitions,\n      [name]: main\n    }\n  };\n  combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n  return combined;\n};\n\n// src/zod-to-json-schema/index.ts\nvar zod_to_json_schema_default = zodToJsonSchema;\n\n// src/zod-schema.ts\nfunction zod3Schema(zodSchema2, options) {\n  var _a;\n  const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () => zod_to_json_schema_default(zodSchema2, {\n      $refStrategy: useReferences ? \"root\" : \"none\"\n    }),\n    {\n      validate: async (value) => {\n        const result = await zodSchema2.safeParseAsync(value);\n        return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n      }\n    }\n  );\n}\nfunction zod4Schema(zodSchema2, options) {\n  var _a;\n  const useReferences = (_a = options == null ? void 0 : options.useReferences) != null ? _a : false;\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () => addAdditionalPropertiesToJsonSchema(\n      z4.toJSONSchema(zodSchema2, {\n        target: \"draft-7\",\n        io: \"input\",\n        reused: useReferences ? \"ref\" : \"inline\"\n      })\n    ),\n    {\n      validate: async (value) => {\n        const result = await z4.safeParseAsync(zodSchema2, value);\n        return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n      }\n    }\n  );\n}\nfunction isZod4Schema(zodSchema2) {\n  return \"_zod\" in zodSchema2;\n}\nfunction zodSchema(zodSchema2, options) {\n  if (isZod4Schema(zodSchema2)) {\n    return zod4Schema(zodSchema2, options);\n  } else {\n    return zod3Schema(zodSchema2, options);\n  }\n}\n\n// src/schema.ts\nvar schemaSymbol = Symbol.for(\"vercel.ai.schema\");\nfunction lazySchema(createSchema) {\n  let schema;\n  return () => {\n    if (schema == null) {\n      schema = createSchema();\n    }\n    return schema;\n  };\n}\nfunction jsonSchema(jsonSchema2, {\n  validate\n} = {}) {\n  return {\n    [schemaSymbol]: true,\n    _type: void 0,\n    // should never be used directly\n    [validatorSymbol]: true,\n    get jsonSchema() {\n      if (typeof jsonSchema2 === \"function\") {\n        jsonSchema2 = jsonSchema2();\n      }\n      return jsonSchema2;\n    },\n    validate\n  };\n}\nfunction isSchema(value) {\n  return typeof value === \"object\" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && \"jsonSchema\" in value && \"validate\" in value;\n}\nfunction asSchema(schema) {\n  return schema == null ? jsonSchema({\n    properties: {},\n    additionalProperties: false\n  }) : isSchema(schema) ? schema : typeof schema === \"function\" ? schema() : zodSchema(schema);\n}\n\n// src/uint8-utils.ts\nvar { btoa, atob } = globalThis;\nfunction convertBase64ToUint8Array(base64String) {\n  const base64Url = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const latin1string = atob(base64Url);\n  return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));\n}\nfunction convertUint8ArrayToBase64(array) {\n  let latin1string = \"\";\n  for (let i = 0; i < array.length; i++) {\n    latin1string += String.fromCodePoint(array[i]);\n  }\n  return btoa(latin1string);\n}\nfunction convertToBase64(value) {\n  return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n\n// src/without-trailing-slash.ts\nfunction withoutTrailingSlash(url) {\n  return url == null ? void 0 : url.replace(/\\/$/, \"\");\n}\n\n// src/is-async-iterable.ts\nfunction isAsyncIterable(obj) {\n  return obj != null && typeof obj[Symbol.asyncIterator] === \"function\";\n}\n\n// src/types/execute-tool.ts\nasync function* executeTool({\n  execute,\n  input,\n  options\n}) {\n  const result = execute(input, options);\n  if (isAsyncIterable(result)) {\n    let lastOutput;\n    for await (const output of result) {\n      lastOutput = output;\n      yield { type: \"preliminary\", output };\n    }\n    yield { type: \"final\", output: lastOutput };\n  } else {\n    yield { type: \"final\", output: await result };\n  }\n}\n\n// src/index.ts\nexport * from \"@standard-schema/spec\";\nimport {\n  EventSourceParserStream as EventSourceParserStream2\n} from \"eventsource-parser/stream\";\nexport {\n  DelayedPromise,\n  EventSourceParserStream2 as EventSourceParserStream,\n  VERSION,\n  asSchema,\n  asValidator,\n  combineHeaders,\n  convertAsyncIteratorToReadableStream,\n  convertBase64ToUint8Array,\n  convertToBase64,\n  convertUint8ArrayToBase64,\n  createBinaryResponseHandler,\n  createEventSourceResponseHandler,\n  createIdGenerator,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  createJsonStreamResponseHandler,\n  createProviderDefinedToolFactory,\n  createProviderDefinedToolFactoryWithOutputSchema,\n  createStatusCodeErrorResponseHandler,\n  delay,\n  dynamicTool,\n  executeTool,\n  extractResponseHeaders,\n  generateId,\n  getErrorMessage,\n  getFromApi,\n  getRuntimeEnvironmentUserAgent,\n  injectJsonInstructionIntoMessages,\n  isAbortError,\n  isParsableJson,\n  isUrlSupported,\n  isValidator,\n  jsonSchema,\n  lazySchema,\n  lazyValidator,\n  loadApiKey,\n  loadOptionalSetting,\n  loadSetting,\n  mediaTypeToExtension,\n  normalizeHeaders,\n  parseJSON,\n  parseJsonEventStream,\n  parseProviderOptions,\n  postFormDataToApi,\n  postJsonToApi,\n  postToApi,\n  removeUndefinedEntries,\n  resolve,\n  safeParseJSON,\n  safeValidateTypes,\n  standardSchemaValidator,\n  tool,\n  validateTypes,\n  validator,\n  withUserAgentSuffix,\n  withoutTrailingSlash,\n  zodSchema\n};\n//# sourceMappingURL=index.mjs.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name16 in all)\n    __defProp(target, name16, { get: all[name16], enumerable: true });\n};\n\n// src/index.ts\nimport { createGateway, gateway as gateway2 } from \"@ai-sdk/gateway\";\nimport {\n  asSchema as asSchema5,\n  createIdGenerator as createIdGenerator5,\n  dynamicTool,\n  generateId as generateId2,\n  jsonSchema,\n  parseJsonEventStream as parseJsonEventStream3,\n  tool,\n  zodSchema as zodSchema3\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-text/generate-text.ts\nimport {\n  createIdGenerator,\n  executeTool,\n  getErrorMessage as getErrorMessage5,\n  withUserAgentSuffix as withUserAgentSuffix2\n} from \"@ai-sdk/provider-utils\";\n\n// src/error/no-output-specified-error.ts\nimport { AISDKError } from \"@ai-sdk/provider\";\nvar name = \"AI_NoOutputSpecifiedError\";\nvar marker = `vercel.ai.error.${name}`;\nvar symbol = Symbol.for(marker);\nvar _a;\nvar NoOutputSpecifiedError = class extends AISDKError {\n  // used in isInstance\n  constructor({ message = \"No output specified.\" } = {}) {\n    super({ name, message });\n    this[_a] = true;\n  }\n  static isInstance(error) {\n    return AISDKError.hasMarker(error, marker);\n  }\n};\n_a = symbol;\n\n// src/logger/log-warnings.ts\nfunction formatWarning(warning) {\n  const prefix = \"AI SDK Warning:\";\n  switch (warning.type) {\n    case \"unsupported-setting\": {\n      let message = `${prefix} The \"${warning.setting}\" setting is not supported by this model`;\n      if (warning.details) {\n        message += ` - ${warning.details}`;\n      }\n      return message;\n    }\n    case \"unsupported-tool\": {\n      const toolName = \"name\" in warning.tool ? warning.tool.name : \"unknown tool\";\n      let message = `${prefix} The tool \"${toolName}\" is not supported by this model`;\n      if (warning.details) {\n        message += ` - ${warning.details}`;\n      }\n      return message;\n    }\n    case \"other\": {\n      return `${prefix} ${warning.message}`;\n    }\n    default: {\n      return `${prefix} ${JSON.stringify(warning, null, 2)}`;\n    }\n  }\n}\nvar FIRST_WARNING_INFO_MESSAGE = \"AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.\";\nvar hasLoggedBefore = false;\nvar logWarnings = (warnings) => {\n  if (warnings.length === 0) {\n    return;\n  }\n  const logger = globalThis.AI_SDK_LOG_WARNINGS;\n  if (logger === false) {\n    return;\n  }\n  if (typeof logger === \"function\") {\n    logger(warnings);\n    return;\n  }\n  if (!hasLoggedBefore) {\n    hasLoggedBefore = true;\n    console.info(FIRST_WARNING_INFO_MESSAGE);\n  }\n  for (const warning of warnings) {\n    console.warn(formatWarning(warning));\n  }\n};\n\n// src/model/resolve-model.ts\nimport { gateway } from \"@ai-sdk/gateway\";\n\n// src/error/index.ts\nimport {\n  AISDKError as AISDKError17,\n  APICallError,\n  EmptyResponseBodyError,\n  InvalidPromptError,\n  InvalidResponseDataError,\n  JSONParseError,\n  LoadAPIKeyError,\n  LoadSettingError,\n  NoContentGeneratedError,\n  NoSuchModelError,\n  TooManyEmbeddingValuesForCallError,\n  TypeValidationError,\n  UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\n\n// src/error/invalid-argument-error.ts\nimport { AISDKError as AISDKError2 } from \"@ai-sdk/provider\";\nvar name2 = \"AI_InvalidArgumentError\";\nvar marker2 = `vercel.ai.error.${name2}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2;\nvar InvalidArgumentError = class extends AISDKError2 {\n  constructor({\n    parameter,\n    value,\n    message\n  }) {\n    super({\n      name: name2,\n      message: `Invalid argument for parameter ${parameter}: ${message}`\n    });\n    this[_a2] = true;\n    this.parameter = parameter;\n    this.value = value;\n  }\n  static isInstance(error) {\n    return AISDKError2.hasMarker(error, marker2);\n  }\n};\n_a2 = symbol2;\n\n// src/error/invalid-stream-part-error.ts\nimport { AISDKError as AISDKError3 } from \"@ai-sdk/provider\";\nvar name3 = \"AI_InvalidStreamPartError\";\nvar marker3 = `vercel.ai.error.${name3}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3;\nvar InvalidStreamPartError = class extends AISDKError3 {\n  constructor({\n    chunk,\n    message\n  }) {\n    super({ name: name3, message });\n    this[_a3] = true;\n    this.chunk = chunk;\n  }\n  static isInstance(error) {\n    return AISDKError3.hasMarker(error, marker3);\n  }\n};\n_a3 = symbol3;\n\n// src/error/invalid-tool-input-error.ts\nimport { AISDKError as AISDKError4, getErrorMessage } from \"@ai-sdk/provider\";\nvar name4 = \"AI_InvalidToolInputError\";\nvar marker4 = `vercel.ai.error.${name4}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4;\nvar InvalidToolInputError = class extends AISDKError4 {\n  constructor({\n    toolInput,\n    toolName,\n    cause,\n    message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`\n  }) {\n    super({ name: name4, message, cause });\n    this[_a4] = true;\n    this.toolInput = toolInput;\n    this.toolName = toolName;\n  }\n  static isInstance(error) {\n    return AISDKError4.hasMarker(error, marker4);\n  }\n};\n_a4 = symbol4;\n\n// src/error/no-image-generated-error.ts\nimport { AISDKError as AISDKError5 } from \"@ai-sdk/provider\";\nvar name5 = \"AI_NoImageGeneratedError\";\nvar marker5 = `vercel.ai.error.${name5}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5;\nvar NoImageGeneratedError = class extends AISDKError5 {\n  constructor({\n    message = \"No image generated.\",\n    cause,\n    responses\n  }) {\n    super({ name: name5, message, cause });\n    this[_a5] = true;\n    this.responses = responses;\n  }\n  static isInstance(error) {\n    return AISDKError5.hasMarker(error, marker5);\n  }\n};\n_a5 = symbol5;\n\n// src/error/no-object-generated-error.ts\nimport { AISDKError as AISDKError6 } from \"@ai-sdk/provider\";\nvar name6 = \"AI_NoObjectGeneratedError\";\nvar marker6 = `vercel.ai.error.${name6}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6;\nvar NoObjectGeneratedError = class extends AISDKError6 {\n  constructor({\n    message = \"No object generated.\",\n    cause,\n    text: text2,\n    response,\n    usage,\n    finishReason\n  }) {\n    super({ name: name6, message, cause });\n    this[_a6] = true;\n    this.text = text2;\n    this.response = response;\n    this.usage = usage;\n    this.finishReason = finishReason;\n  }\n  static isInstance(error) {\n    return AISDKError6.hasMarker(error, marker6);\n  }\n};\n_a6 = symbol6;\n\n// src/error/no-output-generated-error.ts\nimport { AISDKError as AISDKError7 } from \"@ai-sdk/provider\";\nvar name7 = \"AI_NoOutputGeneratedError\";\nvar marker7 = `vercel.ai.error.${name7}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7;\nvar NoOutputGeneratedError = class extends AISDKError7 {\n  // used in isInstance\n  constructor({\n    message = \"No output generated.\",\n    cause\n  } = {}) {\n    super({ name: name7, message, cause });\n    this[_a7] = true;\n  }\n  static isInstance(error) {\n    return AISDKError7.hasMarker(error, marker7);\n  }\n};\n_a7 = symbol7;\n\n// src/error/no-speech-generated-error.ts\nimport { AISDKError as AISDKError8 } from \"@ai-sdk/provider\";\nvar NoSpeechGeneratedError = class extends AISDKError8 {\n  constructor(options) {\n    super({\n      name: \"AI_NoSpeechGeneratedError\",\n      message: \"No speech audio generated.\"\n    });\n    this.responses = options.responses;\n  }\n};\n\n// src/error/no-such-tool-error.ts\nimport { AISDKError as AISDKError9 } from \"@ai-sdk/provider\";\nvar name8 = \"AI_NoSuchToolError\";\nvar marker8 = `vercel.ai.error.${name8}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8;\nvar NoSuchToolError = class extends AISDKError9 {\n  constructor({\n    toolName,\n    availableTools = void 0,\n    message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? \"No tools are available.\" : `Available tools: ${availableTools.join(\", \")}.`}`\n  }) {\n    super({ name: name8, message });\n    this[_a8] = true;\n    this.toolName = toolName;\n    this.availableTools = availableTools;\n  }\n  static isInstance(error) {\n    return AISDKError9.hasMarker(error, marker8);\n  }\n};\n_a8 = symbol8;\n\n// src/error/tool-call-repair-error.ts\nimport { AISDKError as AISDKError10, getErrorMessage as getErrorMessage2 } from \"@ai-sdk/provider\";\nvar name9 = \"AI_ToolCallRepairError\";\nvar marker9 = `vercel.ai.error.${name9}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9;\nvar ToolCallRepairError = class extends AISDKError10 {\n  constructor({\n    cause,\n    originalError,\n    message = `Error repairing tool call: ${getErrorMessage2(cause)}`\n  }) {\n    super({ name: name9, message, cause });\n    this[_a9] = true;\n    this.originalError = originalError;\n  }\n  static isInstance(error) {\n    return AISDKError10.hasMarker(error, marker9);\n  }\n};\n_a9 = symbol9;\n\n// src/error/unsupported-model-version-error.ts\nimport { AISDKError as AISDKError11 } from \"@ai-sdk/provider\";\nvar UnsupportedModelVersionError = class extends AISDKError11 {\n  constructor(options) {\n    super({\n      name: \"AI_UnsupportedModelVersionError\",\n      message: `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". AI SDK 5 only supports models that implement specification version \"v2\".`\n    });\n    this.version = options.version;\n    this.provider = options.provider;\n    this.modelId = options.modelId;\n  }\n};\n\n// src/prompt/invalid-data-content-error.ts\nimport { AISDKError as AISDKError12 } from \"@ai-sdk/provider\";\nvar name10 = \"AI_InvalidDataContentError\";\nvar marker10 = `vercel.ai.error.${name10}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10;\nvar InvalidDataContentError = class extends AISDKError12 {\n  constructor({\n    content,\n    cause,\n    message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`\n  }) {\n    super({ name: name10, message, cause });\n    this[_a10] = true;\n    this.content = content;\n  }\n  static isInstance(error) {\n    return AISDKError12.hasMarker(error, marker10);\n  }\n};\n_a10 = symbol10;\n\n// src/prompt/invalid-message-role-error.ts\nimport { AISDKError as AISDKError13 } from \"@ai-sdk/provider\";\nvar name11 = \"AI_InvalidMessageRoleError\";\nvar marker11 = `vercel.ai.error.${name11}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11;\nvar InvalidMessageRoleError = class extends AISDKError13 {\n  constructor({\n    role,\n    message = `Invalid message role: '${role}'. Must be one of: \"system\", \"user\", \"assistant\", \"tool\".`\n  }) {\n    super({ name: name11, message });\n    this[_a11] = true;\n    this.role = role;\n  }\n  static isInstance(error) {\n    return AISDKError13.hasMarker(error, marker11);\n  }\n};\n_a11 = symbol11;\n\n// src/prompt/message-conversion-error.ts\nimport { AISDKError as AISDKError14 } from \"@ai-sdk/provider\";\nvar name12 = \"AI_MessageConversionError\";\nvar marker12 = `vercel.ai.error.${name12}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12;\nvar MessageConversionError = class extends AISDKError14 {\n  constructor({\n    originalMessage,\n    message\n  }) {\n    super({ name: name12, message });\n    this[_a12] = true;\n    this.originalMessage = originalMessage;\n  }\n  static isInstance(error) {\n    return AISDKError14.hasMarker(error, marker12);\n  }\n};\n_a12 = symbol12;\n\n// src/util/download/download-error.ts\nimport { AISDKError as AISDKError15 } from \"@ai-sdk/provider\";\nvar name13 = \"AI_DownloadError\";\nvar marker13 = `vercel.ai.error.${name13}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13;\nvar DownloadError = class extends AISDKError15 {\n  constructor({\n    url,\n    statusCode,\n    statusText,\n    cause,\n    message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`\n  }) {\n    super({ name: name13, message, cause });\n    this[_a13] = true;\n    this.url = url;\n    this.statusCode = statusCode;\n    this.statusText = statusText;\n  }\n  static isInstance(error) {\n    return AISDKError15.hasMarker(error, marker13);\n  }\n};\n_a13 = symbol13;\n\n// src/util/retry-error.ts\nimport { AISDKError as AISDKError16 } from \"@ai-sdk/provider\";\nvar name14 = \"AI_RetryError\";\nvar marker14 = `vercel.ai.error.${name14}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14;\nvar RetryError = class extends AISDKError16 {\n  constructor({\n    message,\n    reason,\n    errors\n  }) {\n    super({ name: name14, message });\n    this[_a14] = true;\n    this.reason = reason;\n    this.errors = errors;\n    this.lastError = errors[errors.length - 1];\n  }\n  static isInstance(error) {\n    return AISDKError16.hasMarker(error, marker14);\n  }\n};\n_a14 = symbol14;\n\n// src/model/resolve-model.ts\nfunction resolveLanguageModel(model) {\n  if (typeof model !== \"string\") {\n    if (model.specificationVersion !== \"v2\") {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId\n      });\n    }\n    return model;\n  }\n  return getGlobalProvider().languageModel(model);\n}\nfunction resolveEmbeddingModel(model) {\n  if (typeof model !== \"string\") {\n    if (model.specificationVersion !== \"v2\") {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId\n      });\n    }\n    return model;\n  }\n  return getGlobalProvider().textEmbeddingModel(\n    model\n  );\n}\nfunction resolveImageModel(model) {\n  if (typeof model !== \"string\") {\n    if (model.specificationVersion !== \"v2\") {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId\n      });\n    }\n    return model;\n  }\n  return getGlobalProvider().imageModel(model);\n}\nfunction getGlobalProvider() {\n  var _a16;\n  return (_a16 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a16 : gateway;\n}\n\n// src/prompt/convert-to-language-model-prompt.ts\nimport {\n  isUrlSupported\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/detect-media-type.ts\nimport { convertBase64ToUint8Array } from \"@ai-sdk/provider-utils\";\nvar imageMediaTypeSignatures = [\n  {\n    mediaType: \"image/gif\",\n    bytesPrefix: [71, 73, 70]\n    // GIF\n  },\n  {\n    mediaType: \"image/png\",\n    bytesPrefix: [137, 80, 78, 71]\n    // PNG\n  },\n  {\n    mediaType: \"image/jpeg\",\n    bytesPrefix: [255, 216]\n    // JPEG\n  },\n  {\n    mediaType: \"image/webp\",\n    bytesPrefix: [\n      82,\n      73,\n      70,\n      70,\n      // \"RIFF\"\n      null,\n      null,\n      null,\n      null,\n      // file size (variable)\n      87,\n      69,\n      66,\n      80\n      // \"WEBP\"\n    ]\n  },\n  {\n    mediaType: \"image/bmp\",\n    bytesPrefix: [66, 77]\n  },\n  {\n    mediaType: \"image/tiff\",\n    bytesPrefix: [73, 73, 42, 0]\n  },\n  {\n    mediaType: \"image/tiff\",\n    bytesPrefix: [77, 77, 0, 42]\n  },\n  {\n    mediaType: \"image/avif\",\n    bytesPrefix: [\n      0,\n      0,\n      0,\n      32,\n      102,\n      116,\n      121,\n      112,\n      97,\n      118,\n      105,\n      102\n    ]\n  },\n  {\n    mediaType: \"image/heic\",\n    bytesPrefix: [\n      0,\n      0,\n      0,\n      32,\n      102,\n      116,\n      121,\n      112,\n      104,\n      101,\n      105,\n      99\n    ]\n  }\n];\nvar audioMediaTypeSignatures = [\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 251]\n  },\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 250]\n  },\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 243]\n  },\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 242]\n  },\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 227]\n  },\n  {\n    mediaType: \"audio/mpeg\",\n    bytesPrefix: [255, 226]\n  },\n  {\n    mediaType: \"audio/wav\",\n    bytesPrefix: [\n      82,\n      // R\n      73,\n      // I\n      70,\n      // F\n      70,\n      // F\n      null,\n      null,\n      null,\n      null,\n      87,\n      // W\n      65,\n      // A\n      86,\n      // V\n      69\n      // E\n    ]\n  },\n  {\n    mediaType: \"audio/ogg\",\n    bytesPrefix: [79, 103, 103, 83]\n  },\n  {\n    mediaType: \"audio/flac\",\n    bytesPrefix: [102, 76, 97, 67]\n  },\n  {\n    mediaType: \"audio/aac\",\n    bytesPrefix: [64, 21, 0, 0]\n  },\n  {\n    mediaType: \"audio/mp4\",\n    bytesPrefix: [102, 116, 121, 112]\n  },\n  {\n    mediaType: \"audio/webm\",\n    bytesPrefix: [26, 69, 223, 163]\n  }\n];\nvar stripID3 = (data) => {\n  const bytes = typeof data === \"string\" ? convertBase64ToUint8Array(data) : data;\n  const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;\n  return bytes.slice(id3Size + 10);\n};\nfunction stripID3TagsIfPresent(data) {\n  const hasId3 = typeof data === \"string\" && data.startsWith(\"SUQz\") || typeof data !== \"string\" && data.length > 10 && data[0] === 73 && // 'I'\n  data[1] === 68 && // 'D'\n  data[2] === 51;\n  return hasId3 ? stripID3(data) : data;\n}\nfunction detectMediaType({\n  data,\n  signatures\n}) {\n  const processedData = stripID3TagsIfPresent(data);\n  const bytes = typeof processedData === \"string\" ? convertBase64ToUint8Array(\n    processedData.substring(0, Math.min(processedData.length, 24))\n  ) : processedData;\n  for (const signature of signatures) {\n    if (bytes.length >= signature.bytesPrefix.length && signature.bytesPrefix.every(\n      (byte, index) => byte === null || bytes[index] === byte\n    )) {\n      return signature.mediaType;\n    }\n  }\n  return void 0;\n}\n\n// src/util/download/download.ts\nimport {\n  withUserAgentSuffix,\n  getRuntimeEnvironmentUserAgent\n} from \"@ai-sdk/provider-utils\";\n\n// src/version.ts\nvar VERSION = true ? \"5.0.121\" : \"0.0.0-test\";\n\n// src/util/download/download.ts\nvar download = async ({ url }) => {\n  var _a16;\n  const urlText = url.toString();\n  try {\n    const response = await fetch(urlText, {\n      headers: withUserAgentSuffix(\n        {},\n        `ai-sdk/${VERSION}`,\n        getRuntimeEnvironmentUserAgent()\n      )\n    });\n    if (!response.ok) {\n      throw new DownloadError({\n        url: urlText,\n        statusCode: response.status,\n        statusText: response.statusText\n      });\n    }\n    return {\n      data: new Uint8Array(await response.arrayBuffer()),\n      mediaType: (_a16 = response.headers.get(\"content-type\")) != null ? _a16 : void 0\n    };\n  } catch (error) {\n    if (DownloadError.isInstance(error)) {\n      throw error;\n    }\n    throw new DownloadError({ url: urlText, cause: error });\n  }\n};\n\n// src/util/download/download-function.ts\nvar createDefaultDownloadFunction = (download2 = download) => (requestedDownloads) => Promise.all(\n  requestedDownloads.map(\n    async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : download2(requestedDownload)\n  )\n);\n\n// src/prompt/data-content.ts\nimport { AISDKError as AISDKError18 } from \"@ai-sdk/provider\";\nimport {\n  convertBase64ToUint8Array as convertBase64ToUint8Array2,\n  convertUint8ArrayToBase64\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\n\n// src/prompt/split-data-url.ts\nfunction splitDataUrl(dataUrl) {\n  try {\n    const [header, base64Content] = dataUrl.split(\",\");\n    return {\n      mediaType: header.split(\";\")[0].split(\":\")[1],\n      base64Content\n    };\n  } catch (error) {\n    return {\n      mediaType: void 0,\n      base64Content: void 0\n    };\n  }\n}\n\n// src/prompt/data-content.ts\nvar dataContentSchema = z.union([\n  z.string(),\n  z.instanceof(Uint8Array),\n  z.instanceof(ArrayBuffer),\n  z.custom(\n    // Buffer might not be available in some environments such as CloudFlare:\n    (value) => {\n      var _a16, _b;\n      return (_b = (_a16 = globalThis.Buffer) == null ? void 0 : _a16.isBuffer(value)) != null ? _b : false;\n    },\n    { message: \"Must be a Buffer\" }\n  )\n]);\nfunction convertToLanguageModelV2DataContent(content) {\n  if (content instanceof Uint8Array) {\n    return { data: content, mediaType: void 0 };\n  }\n  if (content instanceof ArrayBuffer) {\n    return { data: new Uint8Array(content), mediaType: void 0 };\n  }\n  if (typeof content === \"string\") {\n    try {\n      content = new URL(content);\n    } catch (error) {\n    }\n  }\n  if (content instanceof URL && content.protocol === \"data:\") {\n    const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n      content.toString()\n    );\n    if (dataUrlMediaType == null || base64Content == null) {\n      throw new AISDKError18({\n        name: \"InvalidDataContentError\",\n        message: `Invalid data URL format in content ${content.toString()}`\n      });\n    }\n    return { data: base64Content, mediaType: dataUrlMediaType };\n  }\n  return { data: content, mediaType: void 0 };\n}\nfunction convertDataContentToBase64String(content) {\n  if (typeof content === \"string\") {\n    return content;\n  }\n  if (content instanceof ArrayBuffer) {\n    return convertUint8ArrayToBase64(new Uint8Array(content));\n  }\n  return convertUint8ArrayToBase64(content);\n}\nfunction convertDataContentToUint8Array(content) {\n  if (content instanceof Uint8Array) {\n    return content;\n  }\n  if (typeof content === \"string\") {\n    try {\n      return convertBase64ToUint8Array2(content);\n    } catch (error) {\n      throw new InvalidDataContentError({\n        message: \"Invalid data content. Content string is not a base64-encoded media.\",\n        content,\n        cause: error\n      });\n    }\n  }\n  if (content instanceof ArrayBuffer) {\n    return new Uint8Array(content);\n  }\n  throw new InvalidDataContentError({ content });\n}\n\n// src/prompt/convert-to-language-model-prompt.ts\nasync function convertToLanguageModelPrompt({\n  prompt,\n  supportedUrls,\n  download: download2 = createDefaultDownloadFunction()\n}) {\n  const downloadedAssets = await downloadAssets(\n    prompt.messages,\n    download2,\n    supportedUrls\n  );\n  return [\n    ...prompt.system != null ? [{ role: \"system\", content: prompt.system }] : [],\n    ...prompt.messages.map(\n      (message) => convertToLanguageModelMessage({ message, downloadedAssets })\n    )\n  ];\n}\nfunction convertToLanguageModelMessage({\n  message,\n  downloadedAssets\n}) {\n  const role = message.role;\n  switch (role) {\n    case \"system\": {\n      return {\n        role: \"system\",\n        content: message.content,\n        providerOptions: message.providerOptions\n      };\n    }\n    case \"user\": {\n      if (typeof message.content === \"string\") {\n        return {\n          role: \"user\",\n          content: [{ type: \"text\", text: message.content }],\n          providerOptions: message.providerOptions\n        };\n      }\n      return {\n        role: \"user\",\n        content: message.content.map((part) => convertPartToLanguageModelPart(part, downloadedAssets)).filter((part) => part.type !== \"text\" || part.text !== \"\"),\n        providerOptions: message.providerOptions\n      };\n    }\n    case \"assistant\": {\n      if (typeof message.content === \"string\") {\n        return {\n          role: \"assistant\",\n          content: [{ type: \"text\", text: message.content }],\n          providerOptions: message.providerOptions\n        };\n      }\n      return {\n        role: \"assistant\",\n        content: message.content.filter(\n          // remove empty text parts (no text, and no provider options):\n          (part) => part.type !== \"text\" || part.text !== \"\" || part.providerOptions != null\n        ).map((part) => {\n          const providerOptions = part.providerOptions;\n          switch (part.type) {\n            case \"file\": {\n              const { data, mediaType } = convertToLanguageModelV2DataContent(\n                part.data\n              );\n              return {\n                type: \"file\",\n                data,\n                filename: part.filename,\n                mediaType: mediaType != null ? mediaType : part.mediaType,\n                providerOptions\n              };\n            }\n            case \"reasoning\": {\n              return {\n                type: \"reasoning\",\n                text: part.text,\n                providerOptions\n              };\n            }\n            case \"text\": {\n              return {\n                type: \"text\",\n                text: part.text,\n                providerOptions\n              };\n            }\n            case \"tool-call\": {\n              return {\n                type: \"tool-call\",\n                toolCallId: part.toolCallId,\n                toolName: part.toolName,\n                input: part.input,\n                providerExecuted: part.providerExecuted,\n                providerOptions\n              };\n            }\n            case \"tool-result\": {\n              return {\n                type: \"tool-result\",\n                toolCallId: part.toolCallId,\n                toolName: part.toolName,\n                output: part.output,\n                providerOptions\n              };\n            }\n          }\n        }),\n        providerOptions: message.providerOptions\n      };\n    }\n    case \"tool\": {\n      return {\n        role: \"tool\",\n        content: message.content.map((part) => ({\n          type: \"tool-result\",\n          toolCallId: part.toolCallId,\n          toolName: part.toolName,\n          output: part.output,\n          providerOptions: part.providerOptions\n        })),\n        providerOptions: message.providerOptions\n      };\n    }\n    default: {\n      const _exhaustiveCheck = role;\n      throw new InvalidMessageRoleError({ role: _exhaustiveCheck });\n    }\n  }\n}\nasync function downloadAssets(messages, download2, supportedUrls) {\n  const plannedDownloads = messages.filter((message) => message.role === \"user\").map((message) => message.content).filter(\n    (content) => Array.isArray(content)\n  ).flat().filter(\n    (part) => part.type === \"image\" || part.type === \"file\"\n  ).map((part) => {\n    var _a16;\n    const mediaType = (_a16 = part.mediaType) != null ? _a16 : part.type === \"image\" ? \"image/*\" : void 0;\n    let data = part.type === \"image\" ? part.image : part.data;\n    if (typeof data === \"string\") {\n      try {\n        data = new URL(data);\n      } catch (ignored) {\n      }\n    }\n    return { mediaType, data };\n  }).filter(\n    (part) => part.data instanceof URL\n  ).map((part) => ({\n    url: part.data,\n    isUrlSupportedByModel: part.mediaType != null && isUrlSupported({\n      url: part.data.toString(),\n      mediaType: part.mediaType,\n      supportedUrls\n    })\n  }));\n  const downloadedFiles = await download2(plannedDownloads);\n  return Object.fromEntries(\n    downloadedFiles.map(\n      (file, index) => file == null ? null : [\n        plannedDownloads[index].url.toString(),\n        { data: file.data, mediaType: file.mediaType }\n      ]\n    ).filter((file) => file != null)\n  );\n}\nfunction convertPartToLanguageModelPart(part, downloadedAssets) {\n  var _a16;\n  if (part.type === \"text\") {\n    return {\n      type: \"text\",\n      text: part.text,\n      providerOptions: part.providerOptions\n    };\n  }\n  let originalData;\n  const type = part.type;\n  switch (type) {\n    case \"image\":\n      originalData = part.image;\n      break;\n    case \"file\":\n      originalData = part.data;\n      break;\n    default:\n      throw new Error(`Unsupported part type: ${type}`);\n  }\n  const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);\n  let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;\n  let data = convertedData;\n  if (data instanceof URL) {\n    const downloadedFile = downloadedAssets[data.toString()];\n    if (downloadedFile) {\n      data = downloadedFile.data;\n      mediaType != null ? mediaType : mediaType = downloadedFile.mediaType;\n    }\n  }\n  switch (type) {\n    case \"image\": {\n      if (data instanceof Uint8Array || typeof data === \"string\") {\n        mediaType = (_a16 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a16 : mediaType;\n      }\n      return {\n        type: \"file\",\n        mediaType: mediaType != null ? mediaType : \"image/*\",\n        // any image\n        filename: void 0,\n        data,\n        providerOptions: part.providerOptions\n      };\n    }\n    case \"file\": {\n      if (mediaType == null) {\n        throw new Error(`Media type is missing for file part`);\n      }\n      return {\n        type: \"file\",\n        mediaType,\n        filename: part.filename,\n        data,\n        providerOptions: part.providerOptions\n      };\n    }\n  }\n}\n\n// src/prompt/prepare-call-settings.ts\nfunction prepareCallSettings({\n  maxOutputTokens,\n  temperature,\n  topP,\n  topK,\n  presencePenalty,\n  frequencyPenalty,\n  seed,\n  stopSequences\n}) {\n  if (maxOutputTokens != null) {\n    if (!Number.isInteger(maxOutputTokens)) {\n      throw new InvalidArgumentError({\n        parameter: \"maxOutputTokens\",\n        value: maxOutputTokens,\n        message: \"maxOutputTokens must be an integer\"\n      });\n    }\n    if (maxOutputTokens < 1) {\n      throw new InvalidArgumentError({\n        parameter: \"maxOutputTokens\",\n        value: maxOutputTokens,\n        message: \"maxOutputTokens must be >= 1\"\n      });\n    }\n  }\n  if (temperature != null) {\n    if (typeof temperature !== \"number\") {\n      throw new InvalidArgumentError({\n        parameter: \"temperature\",\n        value: temperature,\n        message: \"temperature must be a number\"\n      });\n    }\n  }\n  if (topP != null) {\n    if (typeof topP !== \"number\") {\n      throw new InvalidArgumentError({\n        parameter: \"topP\",\n        value: topP,\n        message: \"topP must be a number\"\n      });\n    }\n  }\n  if (topK != null) {\n    if (typeof topK !== \"number\") {\n      throw new InvalidArgumentError({\n        parameter: \"topK\",\n        value: topK,\n        message: \"topK must be a number\"\n      });\n    }\n  }\n  if (presencePenalty != null) {\n    if (typeof presencePenalty !== \"number\") {\n      throw new InvalidArgumentError({\n        parameter: \"presencePenalty\",\n        value: presencePenalty,\n        message: \"presencePenalty must be a number\"\n      });\n    }\n  }\n  if (frequencyPenalty != null) {\n    if (typeof frequencyPenalty !== \"number\") {\n      throw new InvalidArgumentError({\n        parameter: \"frequencyPenalty\",\n        value: frequencyPenalty,\n        message: \"frequencyPenalty must be a number\"\n      });\n    }\n  }\n  if (seed != null) {\n    if (!Number.isInteger(seed)) {\n      throw new InvalidArgumentError({\n        parameter: \"seed\",\n        value: seed,\n        message: \"seed must be an integer\"\n      });\n    }\n  }\n  return {\n    maxOutputTokens,\n    temperature,\n    topP,\n    topK,\n    presencePenalty,\n    frequencyPenalty,\n    stopSequences,\n    seed\n  };\n}\n\n// src/prompt/prepare-tools-and-tool-choice.ts\nimport { asSchema } from \"@ai-sdk/provider-utils\";\n\n// src/util/is-non-empty-object.ts\nfunction isNonEmptyObject(object2) {\n  return object2 != null && Object.keys(object2).length > 0;\n}\n\n// src/prompt/prepare-tools-and-tool-choice.ts\nfunction prepareToolsAndToolChoice({\n  tools,\n  toolChoice,\n  activeTools\n}) {\n  if (!isNonEmptyObject(tools)) {\n    return {\n      tools: void 0,\n      toolChoice: void 0\n    };\n  }\n  const filteredTools = activeTools != null ? Object.entries(tools).filter(\n    ([name16]) => activeTools.includes(name16)\n  ) : Object.entries(tools);\n  return {\n    tools: filteredTools.map(([name16, tool2]) => {\n      const toolType = tool2.type;\n      switch (toolType) {\n        case void 0:\n        case \"dynamic\":\n        case \"function\":\n          return {\n            type: \"function\",\n            name: name16,\n            description: tool2.description,\n            inputSchema: asSchema(tool2.inputSchema).jsonSchema,\n            providerOptions: tool2.providerOptions\n          };\n        case \"provider-defined\":\n          return {\n            type: \"provider-defined\",\n            name: name16,\n            id: tool2.id,\n            args: tool2.args\n          };\n        default: {\n          const exhaustiveCheck = toolType;\n          throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n        }\n      }\n    }),\n    toolChoice: toolChoice == null ? { type: \"auto\" } : typeof toolChoice === \"string\" ? { type: toolChoice } : { type: \"tool\", toolName: toolChoice.toolName }\n  };\n}\n\n// src/prompt/standardize-prompt.ts\nimport { InvalidPromptError as InvalidPromptError2 } from \"@ai-sdk/provider\";\nimport { safeValidateTypes } from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\n\n// src/prompt/message.ts\nimport { z as z5 } from \"zod/v4\";\n\n// src/types/provider-metadata.ts\nimport { z as z3 } from \"zod/v4\";\n\n// src/types/json-value.ts\nimport { z as z2 } from \"zod/v4\";\nvar jsonValueSchema = z2.lazy(\n  () => z2.union([\n    z2.null(),\n    z2.string(),\n    z2.number(),\n    z2.boolean(),\n    z2.record(z2.string(), jsonValueSchema),\n    z2.array(jsonValueSchema)\n  ])\n);\n\n// src/types/provider-metadata.ts\nvar providerMetadataSchema = z3.record(\n  z3.string(),\n  z3.record(z3.string(), jsonValueSchema)\n);\n\n// src/prompt/content-part.ts\nimport { z as z4 } from \"zod/v4\";\nvar textPartSchema = z4.object({\n  type: z4.literal(\"text\"),\n  text: z4.string(),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar imagePartSchema = z4.object({\n  type: z4.literal(\"image\"),\n  image: z4.union([dataContentSchema, z4.instanceof(URL)]),\n  mediaType: z4.string().optional(),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar filePartSchema = z4.object({\n  type: z4.literal(\"file\"),\n  data: z4.union([dataContentSchema, z4.instanceof(URL)]),\n  filename: z4.string().optional(),\n  mediaType: z4.string(),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar reasoningPartSchema = z4.object({\n  type: z4.literal(\"reasoning\"),\n  text: z4.string(),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar toolCallPartSchema = z4.object({\n  type: z4.literal(\"tool-call\"),\n  toolCallId: z4.string(),\n  toolName: z4.string(),\n  input: z4.unknown(),\n  providerOptions: providerMetadataSchema.optional(),\n  providerExecuted: z4.boolean().optional()\n});\nvar outputSchema = z4.discriminatedUnion(\"type\", [\n  z4.object({\n    type: z4.literal(\"text\"),\n    value: z4.string()\n  }),\n  z4.object({\n    type: z4.literal(\"json\"),\n    value: jsonValueSchema\n  }),\n  z4.object({\n    type: z4.literal(\"error-text\"),\n    value: z4.string()\n  }),\n  z4.object({\n    type: z4.literal(\"error-json\"),\n    value: jsonValueSchema\n  }),\n  z4.object({\n    type: z4.literal(\"content\"),\n    value: z4.array(\n      z4.union([\n        z4.object({\n          type: z4.literal(\"text\"),\n          text: z4.string()\n        }),\n        z4.object({\n          type: z4.literal(\"media\"),\n          data: z4.string(),\n          mediaType: z4.string()\n        })\n      ])\n    )\n  })\n]);\nvar toolResultPartSchema = z4.object({\n  type: z4.literal(\"tool-result\"),\n  toolCallId: z4.string(),\n  toolName: z4.string(),\n  output: outputSchema,\n  providerOptions: providerMetadataSchema.optional()\n});\n\n// src/prompt/message.ts\nvar systemModelMessageSchema = z5.object(\n  {\n    role: z5.literal(\"system\"),\n    content: z5.string(),\n    providerOptions: providerMetadataSchema.optional()\n  }\n);\nvar coreSystemMessageSchema = systemModelMessageSchema;\nvar userModelMessageSchema = z5.object({\n  role: z5.literal(\"user\"),\n  content: z5.union([\n    z5.string(),\n    z5.array(z5.union([textPartSchema, imagePartSchema, filePartSchema]))\n  ]),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar coreUserMessageSchema = userModelMessageSchema;\nvar assistantModelMessageSchema = z5.object({\n  role: z5.literal(\"assistant\"),\n  content: z5.union([\n    z5.string(),\n    z5.array(\n      z5.union([\n        textPartSchema,\n        filePartSchema,\n        reasoningPartSchema,\n        toolCallPartSchema,\n        toolResultPartSchema\n      ])\n    )\n  ]),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar coreAssistantMessageSchema = assistantModelMessageSchema;\nvar toolModelMessageSchema = z5.object({\n  role: z5.literal(\"tool\"),\n  content: z5.array(toolResultPartSchema),\n  providerOptions: providerMetadataSchema.optional()\n});\nvar coreToolMessageSchema = toolModelMessageSchema;\nvar modelMessageSchema = z5.union([\n  systemModelMessageSchema,\n  userModelMessageSchema,\n  assistantModelMessageSchema,\n  toolModelMessageSchema\n]);\nvar coreMessageSchema = modelMessageSchema;\n\n// src/prompt/standardize-prompt.ts\nasync function standardizePrompt(prompt) {\n  if (prompt.prompt == null && prompt.messages == null) {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"prompt or messages must be defined\"\n    });\n  }\n  if (prompt.prompt != null && prompt.messages != null) {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"prompt and messages cannot be defined at the same time\"\n    });\n  }\n  if (prompt.system != null && typeof prompt.system !== \"string\") {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"system must be a string\"\n    });\n  }\n  let messages;\n  if (prompt.prompt != null && typeof prompt.prompt === \"string\") {\n    messages = [{ role: \"user\", content: prompt.prompt }];\n  } else if (prompt.prompt != null && Array.isArray(prompt.prompt)) {\n    messages = prompt.prompt;\n  } else if (prompt.messages != null) {\n    messages = prompt.messages;\n  } else {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"prompt or messages must be defined\"\n    });\n  }\n  if (messages.length === 0) {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"messages must not be empty\"\n    });\n  }\n  const validationResult = await safeValidateTypes({\n    value: messages,\n    schema: z6.array(modelMessageSchema)\n  });\n  if (!validationResult.success) {\n    throw new InvalidPromptError2({\n      prompt,\n      message: \"The messages must be a ModelMessage[]. If you have passed a UIMessage[], you can use convertToModelMessages to convert them.\",\n      cause: validationResult.error\n    });\n  }\n  return {\n    messages,\n    system: prompt.system\n  };\n}\n\n// src/prompt/wrap-gateway-error.ts\nimport { GatewayAuthenticationError } from \"@ai-sdk/gateway\";\nimport { AISDKError as AISDKError19 } from \"@ai-sdk/provider\";\nfunction wrapGatewayError(error) {\n  if (!GatewayAuthenticationError.isInstance(error))\n    return error;\n  const isProductionEnv = (process == null ? void 0 : process.env.NODE_ENV) === \"production\";\n  const moreInfoURL = \"https://v5.ai-sdk.dev/unauthenticated-ai-gateway\";\n  if (isProductionEnv) {\n    return new AISDKError19({\n      name: \"GatewayError\",\n      message: `Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${moreInfoURL}`\n    });\n  }\n  return Object.assign(\n    new Error(`\\x1B[1m\\x1B[31mUnauthenticated request to AI Gateway.\\x1B[0m\n\nTo authenticate, set the \\x1B[33mAI_GATEWAY_API_KEY\\x1B[0m environment variable with your API key.\n\nAlternatively, you can use a provider module instead of the AI Gateway.\n\nLearn more: \\x1B[34m${moreInfoURL}\\x1B[0m\n\n`),\n    { name: \"GatewayAuthenticationError\" }\n  );\n}\n\n// src/telemetry/assemble-operation-name.ts\nfunction assembleOperationName({\n  operationId,\n  telemetry\n}) {\n  return {\n    // standardized operation and resource name:\n    \"operation.name\": `${operationId}${(telemetry == null ? void 0 : telemetry.functionId) != null ? ` ${telemetry.functionId}` : \"\"}`,\n    \"resource.name\": telemetry == null ? void 0 : telemetry.functionId,\n    // detailed, AI SDK specific data:\n    \"ai.operationId\": operationId,\n    \"ai.telemetry.functionId\": telemetry == null ? void 0 : telemetry.functionId\n  };\n}\n\n// src/telemetry/get-base-telemetry-attributes.ts\nfunction getBaseTelemetryAttributes({\n  model,\n  settings,\n  telemetry,\n  headers\n}) {\n  var _a16;\n  return {\n    \"ai.model.provider\": model.provider,\n    \"ai.model.id\": model.modelId,\n    // settings:\n    ...Object.entries(settings).reduce((attributes, [key, value]) => {\n      attributes[`ai.settings.${key}`] = value;\n      return attributes;\n    }, {}),\n    // add metadata as attributes:\n    ...Object.entries((_a16 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a16 : {}).reduce(\n      (attributes, [key, value]) => {\n        attributes[`ai.telemetry.metadata.${key}`] = value;\n        return attributes;\n      },\n      {}\n    ),\n    // request headers\n    ...Object.entries(headers != null ? headers : {}).reduce((attributes, [key, value]) => {\n      if (value !== void 0) {\n        attributes[`ai.request.headers.${key}`] = value;\n      }\n      return attributes;\n    }, {})\n  };\n}\n\n// src/telemetry/get-tracer.ts\nimport { trace } from \"@opentelemetry/api\";\n\n// src/telemetry/noop-tracer.ts\nvar noopTracer = {\n  startSpan() {\n    return noopSpan;\n  },\n  startActiveSpan(name16, arg1, arg2, arg3) {\n    if (typeof arg1 === \"function\") {\n      return arg1(noopSpan);\n    }\n    if (typeof arg2 === \"function\") {\n      return arg2(noopSpan);\n    }\n    if (typeof arg3 === \"function\") {\n      return arg3(noopSpan);\n    }\n  }\n};\nvar noopSpan = {\n  spanContext() {\n    return noopSpanContext;\n  },\n  setAttribute() {\n    return this;\n  },\n  setAttributes() {\n    return this;\n  },\n  addEvent() {\n    return this;\n  },\n  addLink() {\n    return this;\n  },\n  addLinks() {\n    return this;\n  },\n  setStatus() {\n    return this;\n  },\n  updateName() {\n    return this;\n  },\n  end() {\n    return this;\n  },\n  isRecording() {\n    return false;\n  },\n  recordException() {\n    return this;\n  }\n};\nvar noopSpanContext = {\n  traceId: \"\",\n  spanId: \"\",\n  traceFlags: 0\n};\n\n// src/telemetry/get-tracer.ts\nfunction getTracer({\n  isEnabled = false,\n  tracer\n} = {}) {\n  if (!isEnabled) {\n    return noopTracer;\n  }\n  if (tracer) {\n    return tracer;\n  }\n  return trace.getTracer(\"ai\");\n}\n\n// src/telemetry/record-span.ts\nimport { SpanStatusCode } from \"@opentelemetry/api\";\nfunction recordSpan({\n  name: name16,\n  tracer,\n  attributes,\n  fn,\n  endWhenDone = true\n}) {\n  return tracer.startActiveSpan(name16, { attributes }, async (span) => {\n    try {\n      const result = await fn(span);\n      if (endWhenDone) {\n        span.end();\n      }\n      return result;\n    } catch (error) {\n      try {\n        recordErrorOnSpan(span, error);\n      } finally {\n        span.end();\n      }\n      throw error;\n    }\n  });\n}\nfunction recordErrorOnSpan(span, error) {\n  if (error instanceof Error) {\n    span.recordException({\n      name: error.name,\n      message: error.message,\n      stack: error.stack\n    });\n    span.setStatus({\n      code: SpanStatusCode.ERROR,\n      message: error.message\n    });\n  } else {\n    span.setStatus({ code: SpanStatusCode.ERROR });\n  }\n}\n\n// src/telemetry/select-telemetry-attributes.ts\nfunction selectTelemetryAttributes({\n  telemetry,\n  attributes\n}) {\n  if ((telemetry == null ? void 0 : telemetry.isEnabled) !== true) {\n    return {};\n  }\n  return Object.entries(attributes).reduce((attributes2, [key, value]) => {\n    if (value == null) {\n      return attributes2;\n    }\n    if (typeof value === \"object\" && \"input\" in value && typeof value.input === \"function\") {\n      if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) {\n        return attributes2;\n      }\n      const result = value.input();\n      return result == null ? attributes2 : { ...attributes2, [key]: result };\n    }\n    if (typeof value === \"object\" && \"output\" in value && typeof value.output === \"function\") {\n      if ((telemetry == null ? void 0 : telemetry.recordOutputs) === false) {\n        return attributes2;\n      }\n      const result = value.output();\n      return result == null ? attributes2 : { ...attributes2, [key]: result };\n    }\n    return { ...attributes2, [key]: value };\n  }, {});\n}\n\n// src/telemetry/stringify-for-telemetry.ts\nfunction stringifyForTelemetry(prompt) {\n  return JSON.stringify(\n    prompt.map((message) => ({\n      ...message,\n      content: typeof message.content === \"string\" ? message.content : message.content.map(\n        (part) => part.type === \"file\" ? {\n          ...part,\n          data: part.data instanceof Uint8Array ? convertDataContentToBase64String(part.data) : part.data\n        } : part\n      )\n    }))\n  );\n}\n\n// src/types/usage.ts\nfunction addLanguageModelUsage(usage1, usage2) {\n  return {\n    inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n    outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n    totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),\n    reasoningTokens: addTokenCounts(\n      usage1.reasoningTokens,\n      usage2.reasoningTokens\n    ),\n    cachedInputTokens: addTokenCounts(\n      usage1.cachedInputTokens,\n      usage2.cachedInputTokens\n    )\n  };\n}\nfunction addTokenCounts(tokenCount1, tokenCount2) {\n  return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);\n}\n\n// src/util/as-array.ts\nfunction asArray(value) {\n  return value === void 0 ? [] : Array.isArray(value) ? value : [value];\n}\n\n// src/util/retry-with-exponential-backoff.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\nimport { delay, getErrorMessage as getErrorMessage3, isAbortError } from \"@ai-sdk/provider-utils\";\nfunction getRetryDelayInMs({\n  error,\n  exponentialBackoffDelay\n}) {\n  const headers = error.responseHeaders;\n  if (!headers)\n    return exponentialBackoffDelay;\n  let ms;\n  const retryAfterMs = headers[\"retry-after-ms\"];\n  if (retryAfterMs) {\n    const timeoutMs = parseFloat(retryAfterMs);\n    if (!Number.isNaN(timeoutMs)) {\n      ms = timeoutMs;\n    }\n  }\n  const retryAfter = headers[\"retry-after\"];\n  if (retryAfter && ms === void 0) {\n    const timeoutSeconds = parseFloat(retryAfter);\n    if (!Number.isNaN(timeoutSeconds)) {\n      ms = timeoutSeconds * 1e3;\n    } else {\n      ms = Date.parse(retryAfter) - Date.now();\n    }\n  }\n  if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {\n    return ms;\n  }\n  return exponentialBackoffDelay;\n}\nvar retryWithExponentialBackoffRespectingRetryHeaders = ({\n  maxRetries = 2,\n  initialDelayInMs = 2e3,\n  backoffFactor = 2,\n  abortSignal\n} = {}) => async (f) => _retryWithExponentialBackoff(f, {\n  maxRetries,\n  delayInMs: initialDelayInMs,\n  backoffFactor,\n  abortSignal\n});\nasync function _retryWithExponentialBackoff(f, {\n  maxRetries,\n  delayInMs,\n  backoffFactor,\n  abortSignal\n}, errors = []) {\n  try {\n    return await f();\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw error;\n    }\n    if (maxRetries === 0) {\n      throw error;\n    }\n    const errorMessage = getErrorMessage3(error);\n    const newErrors = [...errors, error];\n    const tryNumber = newErrors.length;\n    if (tryNumber > maxRetries) {\n      throw new RetryError({\n        message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n        reason: \"maxRetriesExceeded\",\n        errors: newErrors\n      });\n    }\n    if (error instanceof Error && APICallError2.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {\n      await delay(\n        getRetryDelayInMs({\n          error,\n          exponentialBackoffDelay: delayInMs\n        }),\n        { abortSignal }\n      );\n      return _retryWithExponentialBackoff(\n        f,\n        {\n          maxRetries,\n          delayInMs: backoffFactor * delayInMs,\n          backoffFactor,\n          abortSignal\n        },\n        newErrors\n      );\n    }\n    if (tryNumber === 1) {\n      throw error;\n    }\n    throw new RetryError({\n      message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n      reason: \"errorNotRetryable\",\n      errors: newErrors\n    });\n  }\n}\n\n// src/util/prepare-retries.ts\nfunction prepareRetries({\n  maxRetries,\n  abortSignal\n}) {\n  if (maxRetries != null) {\n    if (!Number.isInteger(maxRetries)) {\n      throw new InvalidArgumentError({\n        parameter: \"maxRetries\",\n        value: maxRetries,\n        message: \"maxRetries must be an integer\"\n      });\n    }\n    if (maxRetries < 0) {\n      throw new InvalidArgumentError({\n        parameter: \"maxRetries\",\n        value: maxRetries,\n        message: \"maxRetries must be >= 0\"\n      });\n    }\n  }\n  const maxRetriesResult = maxRetries != null ? maxRetries : 2;\n  return {\n    maxRetries: maxRetriesResult,\n    retry: retryWithExponentialBackoffRespectingRetryHeaders({\n      maxRetries: maxRetriesResult,\n      abortSignal\n    })\n  };\n}\n\n// src/generate-text/extract-text-content.ts\nfunction extractTextContent(content) {\n  const parts = content.filter(\n    (content2) => content2.type === \"text\"\n  );\n  if (parts.length === 0) {\n    return void 0;\n  }\n  return parts.map((content2) => content2.text).join(\"\");\n}\n\n// src/generate-text/generated-file.ts\nimport {\n  convertBase64ToUint8Array as convertBase64ToUint8Array3,\n  convertUint8ArrayToBase64 as convertUint8ArrayToBase642\n} from \"@ai-sdk/provider-utils\";\nvar DefaultGeneratedFile = class {\n  constructor({\n    data,\n    mediaType\n  }) {\n    const isUint8Array = data instanceof Uint8Array;\n    this.base64Data = isUint8Array ? void 0 : data;\n    this.uint8ArrayData = isUint8Array ? data : void 0;\n    this.mediaType = mediaType;\n  }\n  // lazy conversion with caching to avoid unnecessary conversion overhead:\n  get base64() {\n    if (this.base64Data == null) {\n      this.base64Data = convertUint8ArrayToBase642(this.uint8ArrayData);\n    }\n    return this.base64Data;\n  }\n  // lazy conversion with caching to avoid unnecessary conversion overhead:\n  get uint8Array() {\n    if (this.uint8ArrayData == null) {\n      this.uint8ArrayData = convertBase64ToUint8Array3(this.base64Data);\n    }\n    return this.uint8ArrayData;\n  }\n};\nvar DefaultGeneratedFileWithType = class extends DefaultGeneratedFile {\n  constructor(options) {\n    super(options);\n    this.type = \"file\";\n  }\n};\n\n// src/generate-text/parse-tool-call.ts\nimport {\n  asSchema as asSchema2,\n  safeParseJSON,\n  safeValidateTypes as safeValidateTypes2\n} from \"@ai-sdk/provider-utils\";\nasync function parseToolCall({\n  toolCall,\n  tools,\n  repairToolCall,\n  system,\n  messages\n}) {\n  try {\n    if (tools == null) {\n      throw new NoSuchToolError({ toolName: toolCall.toolName });\n    }\n    try {\n      return await doParseToolCall({ toolCall, tools });\n    } catch (error) {\n      if (repairToolCall == null || !(NoSuchToolError.isInstance(error) || InvalidToolInputError.isInstance(error))) {\n        throw error;\n      }\n      let repairedToolCall = null;\n      try {\n        repairedToolCall = await repairToolCall({\n          toolCall,\n          tools,\n          inputSchema: ({ toolName }) => {\n            const { inputSchema } = tools[toolName];\n            return asSchema2(inputSchema).jsonSchema;\n          },\n          system,\n          messages,\n          error\n        });\n      } catch (repairError) {\n        throw new ToolCallRepairError({\n          cause: repairError,\n          originalError: error\n        });\n      }\n      if (repairedToolCall == null) {\n        throw error;\n      }\n      return await doParseToolCall({ toolCall: repairedToolCall, tools });\n    }\n  } catch (error) {\n    const parsedInput = await safeParseJSON({ text: toolCall.input });\n    const input = parsedInput.success ? parsedInput.value : toolCall.input;\n    return {\n      type: \"tool-call\",\n      toolCallId: toolCall.toolCallId,\n      toolName: toolCall.toolName,\n      input,\n      dynamic: true,\n      invalid: true,\n      error,\n      providerMetadata: toolCall.providerMetadata\n    };\n  }\n}\nasync function doParseToolCall({\n  toolCall,\n  tools\n}) {\n  const toolName = toolCall.toolName;\n  const tool2 = tools[toolName];\n  if (tool2 == null) {\n    throw new NoSuchToolError({\n      toolName: toolCall.toolName,\n      availableTools: Object.keys(tools)\n    });\n  }\n  const schema = asSchema2(tool2.inputSchema);\n  const parseResult = toolCall.input.trim() === \"\" ? await safeValidateTypes2({ value: {}, schema }) : await safeParseJSON({ text: toolCall.input, schema });\n  if (parseResult.success === false) {\n    throw new InvalidToolInputError({\n      toolName,\n      toolInput: toolCall.input,\n      cause: parseResult.error\n    });\n  }\n  return tool2.type === \"dynamic\" ? {\n    type: \"tool-call\",\n    toolCallId: toolCall.toolCallId,\n    toolName: toolCall.toolName,\n    input: parseResult.value,\n    providerExecuted: toolCall.providerExecuted,\n    providerMetadata: toolCall.providerMetadata,\n    dynamic: true\n  } : {\n    type: \"tool-call\",\n    toolCallId: toolCall.toolCallId,\n    toolName,\n    input: parseResult.value,\n    providerExecuted: toolCall.providerExecuted,\n    providerMetadata: toolCall.providerMetadata\n  };\n}\n\n// src/generate-text/step-result.ts\nvar DefaultStepResult = class {\n  constructor({\n    content,\n    finishReason,\n    usage,\n    warnings,\n    request,\n    response,\n    providerMetadata\n  }) {\n    this.content = content;\n    this.finishReason = finishReason;\n    this.usage = usage;\n    this.warnings = warnings;\n    this.request = request;\n    this.response = response;\n    this.providerMetadata = providerMetadata;\n  }\n  get text() {\n    return this.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\");\n  }\n  get reasoning() {\n    return this.content.filter((part) => part.type === \"reasoning\");\n  }\n  get reasoningText() {\n    return this.reasoning.length === 0 ? void 0 : this.reasoning.map((part) => part.text).join(\"\");\n  }\n  get files() {\n    return this.content.filter((part) => part.type === \"file\").map((part) => part.file);\n  }\n  get sources() {\n    return this.content.filter((part) => part.type === \"source\");\n  }\n  get toolCalls() {\n    return this.content.filter((part) => part.type === \"tool-call\");\n  }\n  get staticToolCalls() {\n    return this.toolCalls.filter(\n      (toolCall) => toolCall.dynamic !== true\n    );\n  }\n  get dynamicToolCalls() {\n    return this.toolCalls.filter(\n      (toolCall) => toolCall.dynamic === true\n    );\n  }\n  get toolResults() {\n    return this.content.filter((part) => part.type === \"tool-result\");\n  }\n  get staticToolResults() {\n    return this.toolResults.filter(\n      (toolResult) => toolResult.dynamic !== true\n    );\n  }\n  get dynamicToolResults() {\n    return this.toolResults.filter(\n      (toolResult) => toolResult.dynamic === true\n    );\n  }\n};\n\n// src/generate-text/stop-condition.ts\nfunction stepCountIs(stepCount) {\n  return ({ steps }) => steps.length === stepCount;\n}\nfunction hasToolCall(toolName) {\n  return ({ steps }) => {\n    var _a16, _b, _c;\n    return (_c = (_b = (_a16 = steps[steps.length - 1]) == null ? void 0 : _a16.toolCalls) == null ? void 0 : _b.some(\n      (toolCall) => toolCall.toolName === toolName\n    )) != null ? _c : false;\n  };\n}\nasync function isStopConditionMet({\n  stopConditions,\n  steps\n}) {\n  return (await Promise.all(stopConditions.map((condition) => condition({ steps })))).some((result) => result);\n}\n\n// src/prompt/create-tool-model-output.ts\nimport {\n  getErrorMessage as getErrorMessage4\n} from \"@ai-sdk/provider\";\nfunction createToolModelOutput({\n  output,\n  tool: tool2,\n  errorMode\n}) {\n  if (errorMode === \"text\") {\n    return { type: \"error-text\", value: getErrorMessage4(output) };\n  } else if (errorMode === \"json\") {\n    return { type: \"error-json\", value: toJSONValue(output) };\n  }\n  if (tool2 == null ? void 0 : tool2.toModelOutput) {\n    return tool2.toModelOutput(output);\n  }\n  return typeof output === \"string\" ? { type: \"text\", value: output } : { type: \"json\", value: toJSONValue(output) };\n}\nfunction toJSONValue(value) {\n  return value === void 0 ? null : value;\n}\n\n// src/generate-text/to-response-messages.ts\nfunction toResponseMessages({\n  content: inputContent,\n  tools\n}) {\n  const responseMessages = [];\n  const content = inputContent.filter((part) => part.type !== \"source\").filter(\n    (part) => (part.type !== \"tool-result\" || part.providerExecuted) && (part.type !== \"tool-error\" || part.providerExecuted)\n  ).filter((part) => part.type !== \"text\" || part.text.length > 0).map((part) => {\n    switch (part.type) {\n      case \"text\":\n        return {\n          type: \"text\",\n          text: part.text,\n          providerOptions: part.providerMetadata\n        };\n      case \"reasoning\":\n        return {\n          type: \"reasoning\",\n          text: part.text,\n          providerOptions: part.providerMetadata\n        };\n      case \"file\":\n        return {\n          type: \"file\",\n          data: part.file.base64,\n          mediaType: part.file.mediaType,\n          providerOptions: part.providerMetadata\n        };\n      case \"tool-call\":\n        return {\n          type: \"tool-call\",\n          toolCallId: part.toolCallId,\n          toolName: part.toolName,\n          input: part.input,\n          providerExecuted: part.providerExecuted,\n          providerOptions: part.providerMetadata\n        };\n      case \"tool-result\":\n        return {\n          type: \"tool-result\",\n          toolCallId: part.toolCallId,\n          toolName: part.toolName,\n          output: createToolModelOutput({\n            tool: tools == null ? void 0 : tools[part.toolName],\n            output: part.output,\n            errorMode: \"none\"\n          }),\n          providerExecuted: true,\n          providerOptions: part.providerMetadata\n        };\n      case \"tool-error\":\n        return {\n          type: \"tool-result\",\n          toolCallId: part.toolCallId,\n          toolName: part.toolName,\n          output: createToolModelOutput({\n            tool: tools == null ? void 0 : tools[part.toolName],\n            output: part.error,\n            errorMode: \"json\"\n          }),\n          providerOptions: part.providerMetadata\n        };\n    }\n  });\n  if (content.length > 0) {\n    responseMessages.push({\n      role: \"assistant\",\n      content\n    });\n  }\n  const toolResultContent = inputContent.filter((part) => part.type === \"tool-result\" || part.type === \"tool-error\").filter((part) => !part.providerExecuted).map((toolResult) => ({\n    type: \"tool-result\",\n    toolCallId: toolResult.toolCallId,\n    toolName: toolResult.toolName,\n    output: createToolModelOutput({\n      tool: tools == null ? void 0 : tools[toolResult.toolName],\n      output: toolResult.type === \"tool-result\" ? toolResult.output : toolResult.error,\n      errorMode: toolResult.type === \"tool-error\" ? \"text\" : \"none\"\n    }),\n    ...toolResult.providerMetadata != null ? { providerOptions: toolResult.providerMetadata } : {}\n  }));\n  if (toolResultContent.length > 0) {\n    responseMessages.push({\n      role: \"tool\",\n      content: toolResultContent\n    });\n  }\n  return responseMessages;\n}\n\n// src/generate-text/generate-text.ts\nvar originalGenerateId = createIdGenerator({\n  prefix: \"aitxt\",\n  size: 24\n});\nasync function generateText({\n  model: modelArg,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output: output,\n  experimental_telemetry: telemetry,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_prepareStep,\n  prepareStep = experimental_prepareStep,\n  experimental_repairToolCall: repairToolCall,\n  experimental_download: download2,\n  experimental_context,\n  _internal: {\n    generateId: generateId3 = originalGenerateId,\n    currentDate = () => /* @__PURE__ */ new Date()\n  } = {},\n  onStepFinish,\n  ...settings\n}) {\n  const model = resolveLanguageModel(modelArg);\n  const stopConditions = asArray(stopWhen);\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const callSettings = prepareCallSettings(settings);\n  const headersWithUserAgent = withUserAgentSuffix2(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries }\n  });\n  const initialPrompt = await standardizePrompt({\n    system,\n    prompt,\n    messages\n  });\n  const tracer = getTracer(telemetry);\n  try {\n    return await recordSpan({\n      name: \"ai.generateText\",\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: \"ai.generateText\",\n            telemetry\n          }),\n          ...baseTelemetryAttributes,\n          // model:\n          \"ai.model.provider\": model.provider,\n          \"ai.model.id\": model.modelId,\n          // specific settings that only make sense on the outer level:\n          \"ai.prompt\": {\n            input: () => JSON.stringify({ system, prompt, messages })\n          }\n        }\n      }),\n      tracer,\n      fn: async (span) => {\n        var _a16, _b, _c, _d, _e, _f, _g;\n        const callSettings2 = prepareCallSettings(settings);\n        let currentModelResponse;\n        let clientToolCalls = [];\n        let clientToolOutputs = [];\n        const responseMessages = [];\n        const steps = [];\n        do {\n          const stepInputMessages = [\n            ...initialPrompt.messages,\n            ...responseMessages\n          ];\n          const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({\n            model,\n            steps,\n            stepNumber: steps.length,\n            messages: stepInputMessages\n          }));\n          const stepModel = resolveLanguageModel(\n            (_a16 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a16 : model\n          );\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: {\n              system: (_b = prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _b : initialPrompt.system,\n              messages: (_c = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _c : stepInputMessages\n            },\n            supportedUrls: await stepModel.supportedUrls,\n            download: download2\n          });\n          const { toolChoice: stepToolChoice, tools: stepTools } = prepareToolsAndToolChoice({\n            tools,\n            toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,\n            activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools\n          });\n          currentModelResponse = await retry(\n            () => {\n              var _a17;\n              return recordSpan({\n                name: \"ai.generateText.doGenerate\",\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: \"ai.generateText.doGenerate\",\n                      telemetry\n                    }),\n                    ...baseTelemetryAttributes,\n                    // model:\n                    \"ai.model.provider\": stepModel.provider,\n                    \"ai.model.id\": stepModel.modelId,\n                    // prompt:\n                    \"ai.prompt.messages\": {\n                      input: () => stringifyForTelemetry(promptMessages)\n                    },\n                    \"ai.prompt.tools\": {\n                      // convert the language model level tools:\n                      input: () => stepTools == null ? void 0 : stepTools.map((tool2) => JSON.stringify(tool2))\n                    },\n                    \"ai.prompt.toolChoice\": {\n                      input: () => stepToolChoice != null ? JSON.stringify(stepToolChoice) : void 0\n                    },\n                    // standardized gen-ai llm span attributes:\n                    \"gen_ai.system\": stepModel.provider,\n                    \"gen_ai.request.model\": stepModel.modelId,\n                    \"gen_ai.request.frequency_penalty\": settings.frequencyPenalty,\n                    \"gen_ai.request.max_tokens\": settings.maxOutputTokens,\n                    \"gen_ai.request.presence_penalty\": settings.presencePenalty,\n                    \"gen_ai.request.stop_sequences\": settings.stopSequences,\n                    \"gen_ai.request.temperature\": (_a17 = settings.temperature) != null ? _a17 : void 0,\n                    \"gen_ai.request.top_k\": settings.topK,\n                    \"gen_ai.request.top_p\": settings.topP\n                  }\n                }),\n                tracer,\n                fn: async (span2) => {\n                  var _a18, _b2, _c2, _d2, _e2, _f2, _g2, _h;\n                  const result = await stepModel.doGenerate({\n                    ...callSettings2,\n                    tools: stepTools,\n                    toolChoice: stepToolChoice,\n                    responseFormat: output == null ? void 0 : output.responseFormat,\n                    prompt: promptMessages,\n                    providerOptions,\n                    abortSignal,\n                    headers: headersWithUserAgent\n                  });\n                  const responseData = {\n                    id: (_b2 = (_a18 = result.response) == null ? void 0 : _a18.id) != null ? _b2 : generateId3(),\n                    timestamp: (_d2 = (_c2 = result.response) == null ? void 0 : _c2.timestamp) != null ? _d2 : currentDate(),\n                    modelId: (_f2 = (_e2 = result.response) == null ? void 0 : _e2.modelId) != null ? _f2 : stepModel.modelId,\n                    headers: (_g2 = result.response) == null ? void 0 : _g2.headers,\n                    body: (_h = result.response) == null ? void 0 : _h.body\n                  };\n                  span2.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        \"ai.response.finishReason\": result.finishReason,\n                        \"ai.response.text\": {\n                          output: () => extractTextContent(result.content)\n                        },\n                        \"ai.response.toolCalls\": {\n                          output: () => {\n                            const toolCalls = asToolCalls(result.content);\n                            return toolCalls == null ? void 0 : JSON.stringify(toolCalls);\n                          }\n                        },\n                        \"ai.response.id\": responseData.id,\n                        \"ai.response.model\": responseData.modelId,\n                        \"ai.response.timestamp\": responseData.timestamp.toISOString(),\n                        \"ai.response.providerMetadata\": JSON.stringify(\n                          result.providerMetadata\n                        ),\n                        // TODO rename telemetry attributes to inputTokens and outputTokens\n                        \"ai.usage.promptTokens\": result.usage.inputTokens,\n                        \"ai.usage.completionTokens\": result.usage.outputTokens,\n                        // standardized gen-ai llm span attributes:\n                        \"gen_ai.response.finish_reasons\": [result.finishReason],\n                        \"gen_ai.response.id\": responseData.id,\n                        \"gen_ai.response.model\": responseData.modelId,\n                        \"gen_ai.usage.input_tokens\": result.usage.inputTokens,\n                        \"gen_ai.usage.output_tokens\": result.usage.outputTokens\n                      }\n                    })\n                  );\n                  return { ...result, response: responseData };\n                }\n              });\n            }\n          );\n          const stepToolCalls = await Promise.all(\n            currentModelResponse.content.filter(\n              (part) => part.type === \"tool-call\"\n            ).map(\n              (toolCall) => parseToolCall({\n                toolCall,\n                tools,\n                repairToolCall,\n                system,\n                messages: stepInputMessages\n              })\n            )\n          );\n          for (const toolCall of stepToolCalls) {\n            if (toolCall.invalid) {\n              continue;\n            }\n            const tool2 = tools[toolCall.toolName];\n            if ((tool2 == null ? void 0 : tool2.onInputAvailable) != null) {\n              await tool2.onInputAvailable({\n                input: toolCall.input,\n                toolCallId: toolCall.toolCallId,\n                messages: stepInputMessages,\n                abortSignal,\n                experimental_context\n              });\n            }\n          }\n          const invalidToolCalls = stepToolCalls.filter(\n            (toolCall) => toolCall.invalid && toolCall.dynamic\n          );\n          clientToolOutputs = [];\n          for (const toolCall of invalidToolCalls) {\n            clientToolOutputs.push({\n              type: \"tool-error\",\n              toolCallId: toolCall.toolCallId,\n              toolName: toolCall.toolName,\n              input: toolCall.input,\n              error: getErrorMessage5(toolCall.error),\n              dynamic: true\n            });\n          }\n          clientToolCalls = stepToolCalls.filter(\n            (toolCall) => !toolCall.providerExecuted\n          );\n          if (tools != null) {\n            clientToolOutputs.push(\n              ...await executeTools({\n                toolCalls: clientToolCalls.filter(\n                  (toolCall) => !toolCall.invalid\n                ),\n                tools,\n                tracer,\n                telemetry,\n                messages: stepInputMessages,\n                abortSignal,\n                experimental_context\n              })\n            );\n          }\n          const stepContent = asContent({\n            content: currentModelResponse.content,\n            toolCalls: stepToolCalls,\n            toolOutputs: clientToolOutputs\n          });\n          responseMessages.push(\n            ...toResponseMessages({\n              content: stepContent,\n              tools\n            })\n          );\n          const currentStepResult = new DefaultStepResult({\n            content: stepContent,\n            finishReason: currentModelResponse.finishReason,\n            usage: currentModelResponse.usage,\n            warnings: currentModelResponse.warnings,\n            providerMetadata: currentModelResponse.providerMetadata,\n            request: (_f = currentModelResponse.request) != null ? _f : {},\n            response: {\n              ...currentModelResponse.response,\n              // deep clone msgs to avoid mutating past messages in multi-step:\n              messages: structuredClone(responseMessages)\n            }\n          });\n          logWarnings((_g = currentModelResponse.warnings) != null ? _g : []);\n          steps.push(currentStepResult);\n          await (onStepFinish == null ? void 0 : onStepFinish(currentStepResult));\n        } while (\n          // there are tool calls:\n          clientToolCalls.length > 0 && // all current tool calls have outputs (incl. execution errors):\n          clientToolOutputs.length === clientToolCalls.length && // continue until a stop condition is met:\n          !await isStopConditionMet({ stopConditions, steps })\n        );\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              \"ai.response.finishReason\": currentModelResponse.finishReason,\n              \"ai.response.text\": {\n                output: () => extractTextContent(currentModelResponse.content)\n              },\n              \"ai.response.toolCalls\": {\n                output: () => {\n                  const toolCalls = asToolCalls(currentModelResponse.content);\n                  return toolCalls == null ? void 0 : JSON.stringify(toolCalls);\n                }\n              },\n              \"ai.response.providerMetadata\": JSON.stringify(\n                currentModelResponse.providerMetadata\n              ),\n              // TODO rename telemetry attributes to inputTokens and outputTokens\n              \"ai.usage.promptTokens\": currentModelResponse.usage.inputTokens,\n              \"ai.usage.completionTokens\": currentModelResponse.usage.outputTokens\n            }\n          })\n        );\n        const lastStep = steps[steps.length - 1];\n        let resolvedOutput;\n        if (lastStep.finishReason === \"stop\") {\n          resolvedOutput = await (output == null ? void 0 : output.parseOutput(\n            { text: lastStep.text },\n            {\n              response: lastStep.response,\n              usage: lastStep.usage,\n              finishReason: lastStep.finishReason\n            }\n          ));\n        }\n        return new DefaultGenerateTextResult({\n          steps,\n          resolvedOutput\n        });\n      }\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\nasync function executeTools({\n  toolCalls,\n  tools,\n  tracer,\n  telemetry,\n  messages,\n  abortSignal,\n  experimental_context\n}) {\n  const toolOutputs = await Promise.all(\n    toolCalls.map(async ({ toolCallId, toolName, input }) => {\n      const tool2 = tools[toolName];\n      if ((tool2 == null ? void 0 : tool2.execute) == null) {\n        return void 0;\n      }\n      return recordSpan({\n        name: \"ai.toolCall\",\n        attributes: selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            ...assembleOperationName({\n              operationId: \"ai.toolCall\",\n              telemetry\n            }),\n            \"ai.toolCall.name\": toolName,\n            \"ai.toolCall.id\": toolCallId,\n            \"ai.toolCall.args\": {\n              output: () => JSON.stringify(input)\n            }\n          }\n        }),\n        tracer,\n        fn: async (span) => {\n          try {\n            const stream = executeTool({\n              execute: tool2.execute.bind(tool2),\n              input,\n              options: {\n                toolCallId,\n                messages,\n                abortSignal,\n                experimental_context\n              }\n            });\n            let output;\n            for await (const part of stream) {\n              if (part.type === \"final\") {\n                output = part.output;\n              }\n            }\n            try {\n              span.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    \"ai.toolCall.result\": {\n                      output: () => JSON.stringify(output)\n                    }\n                  }\n                })\n              );\n            } catch (ignored) {\n            }\n            return {\n              type: \"tool-result\",\n              toolCallId,\n              toolName,\n              input,\n              output,\n              dynamic: tool2.type === \"dynamic\"\n            };\n          } catch (error) {\n            recordErrorOnSpan(span, error);\n            return {\n              type: \"tool-error\",\n              toolCallId,\n              toolName,\n              input,\n              error,\n              dynamic: tool2.type === \"dynamic\"\n            };\n          }\n        }\n      });\n    })\n  );\n  return toolOutputs.filter(\n    (output) => output != null\n  );\n}\nvar DefaultGenerateTextResult = class {\n  constructor(options) {\n    this.steps = options.steps;\n    this.resolvedOutput = options.resolvedOutput;\n  }\n  get finalStep() {\n    return this.steps[this.steps.length - 1];\n  }\n  get content() {\n    return this.finalStep.content;\n  }\n  get text() {\n    return this.finalStep.text;\n  }\n  get files() {\n    return this.finalStep.files;\n  }\n  get reasoningText() {\n    return this.finalStep.reasoningText;\n  }\n  get reasoning() {\n    return this.finalStep.reasoning;\n  }\n  get toolCalls() {\n    return this.finalStep.toolCalls;\n  }\n  get staticToolCalls() {\n    return this.finalStep.staticToolCalls;\n  }\n  get dynamicToolCalls() {\n    return this.finalStep.dynamicToolCalls;\n  }\n  get toolResults() {\n    return this.finalStep.toolResults;\n  }\n  get staticToolResults() {\n    return this.finalStep.staticToolResults;\n  }\n  get dynamicToolResults() {\n    return this.finalStep.dynamicToolResults;\n  }\n  get sources() {\n    return this.finalStep.sources;\n  }\n  get finishReason() {\n    return this.finalStep.finishReason;\n  }\n  get warnings() {\n    return this.finalStep.warnings;\n  }\n  get providerMetadata() {\n    return this.finalStep.providerMetadata;\n  }\n  get response() {\n    return this.finalStep.response;\n  }\n  get request() {\n    return this.finalStep.request;\n  }\n  get usage() {\n    return this.finalStep.usage;\n  }\n  get totalUsage() {\n    return this.steps.reduce(\n      (totalUsage, step) => {\n        return addLanguageModelUsage(totalUsage, step.usage);\n      },\n      {\n        inputTokens: void 0,\n        outputTokens: void 0,\n        totalTokens: void 0,\n        reasoningTokens: void 0,\n        cachedInputTokens: void 0\n      }\n    );\n  }\n  get experimental_output() {\n    if (this.resolvedOutput == null) {\n      throw new NoOutputSpecifiedError();\n    }\n    return this.resolvedOutput;\n  }\n};\nfunction asToolCalls(content) {\n  const parts = content.filter(\n    (part) => part.type === \"tool-call\"\n  );\n  if (parts.length === 0) {\n    return void 0;\n  }\n  return parts.map((toolCall) => ({\n    toolCallId: toolCall.toolCallId,\n    toolName: toolCall.toolName,\n    input: toolCall.input\n  }));\n}\nfunction asContent({\n  content,\n  toolCalls,\n  toolOutputs\n}) {\n  return [\n    ...content.map((part) => {\n      switch (part.type) {\n        case \"text\":\n        case \"reasoning\":\n        case \"source\":\n          return part;\n        case \"file\": {\n          return {\n            type: \"file\",\n            file: new DefaultGeneratedFile(part)\n          };\n        }\n        case \"tool-call\": {\n          return toolCalls.find(\n            (toolCall) => toolCall.toolCallId === part.toolCallId\n          );\n        }\n        case \"tool-result\": {\n          const toolCall = toolCalls.find(\n            (toolCall2) => toolCall2.toolCallId === part.toolCallId\n          );\n          if (toolCall == null) {\n            throw new Error(`Tool call ${part.toolCallId} not found.`);\n          }\n          if (part.isError) {\n            return {\n              type: \"tool-error\",\n              toolCallId: part.toolCallId,\n              toolName: part.toolName,\n              input: toolCall.input,\n              error: part.result,\n              providerExecuted: true,\n              dynamic: toolCall.dynamic\n            };\n          }\n          return {\n            type: \"tool-result\",\n            toolCallId: part.toolCallId,\n            toolName: part.toolName,\n            input: toolCall.input,\n            output: part.result,\n            providerExecuted: true,\n            dynamic: toolCall.dynamic\n          };\n        }\n      }\n    }),\n    ...toolOutputs\n  ];\n}\n\n// src/generate-text/stream-text.ts\nimport {\n  getErrorMessage as getErrorMessage7\n} from \"@ai-sdk/provider\";\nimport {\n  createIdGenerator as createIdGenerator2,\n  DelayedPromise,\n  isAbortError as isAbortError2\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/prepare-headers.ts\nfunction prepareHeaders(headers, defaultHeaders) {\n  const responseHeaders = new Headers(headers != null ? headers : {});\n  for (const [key, value] of Object.entries(defaultHeaders)) {\n    if (!responseHeaders.has(key)) {\n      responseHeaders.set(key, value);\n    }\n  }\n  return responseHeaders;\n}\n\n// src/text-stream/create-text-stream-response.ts\nfunction createTextStreamResponse({\n  status,\n  statusText,\n  headers,\n  textStream\n}) {\n  return new Response(textStream.pipeThrough(new TextEncoderStream()), {\n    status: status != null ? status : 200,\n    statusText,\n    headers: prepareHeaders(headers, {\n      \"content-type\": \"text/plain; charset=utf-8\"\n    })\n  });\n}\n\n// src/util/write-to-server-response.ts\nfunction writeToServerResponse({\n  response,\n  status,\n  statusText,\n  headers,\n  stream\n}) {\n  const statusCode = status != null ? status : 200;\n  if (statusText !== void 0) {\n    response.writeHead(statusCode, statusText, headers);\n  } else {\n    response.writeHead(statusCode, headers);\n  }\n  const reader = stream.getReader();\n  const read = async () => {\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done)\n          break;\n        const canContinue = response.write(value);\n        if (!canContinue) {\n          await new Promise((resolve2) => {\n            response.once(\"drain\", resolve2);\n          });\n        }\n      }\n    } catch (error) {\n      throw error;\n    } finally {\n      response.end();\n    }\n  };\n  read();\n}\n\n// src/text-stream/pipe-text-stream-to-response.ts\nfunction pipeTextStreamToResponse({\n  response,\n  status,\n  statusText,\n  headers,\n  textStream\n}) {\n  writeToServerResponse({\n    response,\n    status,\n    statusText,\n    headers: Object.fromEntries(\n      prepareHeaders(headers, {\n        \"content-type\": \"text/plain; charset=utf-8\"\n      }).entries()\n    ),\n    stream: textStream.pipeThrough(new TextEncoderStream())\n  });\n}\n\n// src/ui-message-stream/json-to-sse-transform-stream.ts\nvar JsonToSseTransformStream = class extends TransformStream {\n  constructor() {\n    super({\n      transform(part, controller) {\n        controller.enqueue(`data: ${JSON.stringify(part)}\n\n`);\n      },\n      flush(controller) {\n        controller.enqueue(\"data: [DONE]\\n\\n\");\n      }\n    });\n  }\n};\n\n// src/ui-message-stream/ui-message-stream-headers.ts\nvar UI_MESSAGE_STREAM_HEADERS = {\n  \"content-type\": \"text/event-stream\",\n  \"cache-control\": \"no-cache\",\n  connection: \"keep-alive\",\n  \"x-vercel-ai-ui-message-stream\": \"v1\",\n  \"x-accel-buffering\": \"no\"\n  // disable nginx buffering\n};\n\n// src/ui-message-stream/create-ui-message-stream-response.ts\nfunction createUIMessageStreamResponse({\n  status,\n  statusText,\n  headers,\n  stream,\n  consumeSseStream\n}) {\n  let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n  if (consumeSseStream) {\n    const [stream1, stream2] = sseStream.tee();\n    sseStream = stream1;\n    consumeSseStream({ stream: stream2 });\n  }\n  return new Response(sseStream.pipeThrough(new TextEncoderStream()), {\n    status,\n    statusText,\n    headers: prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS)\n  });\n}\n\n// src/ui-message-stream/get-response-ui-message-id.ts\nfunction getResponseUIMessageId({\n  originalMessages,\n  responseMessageId\n}) {\n  if (originalMessages == null) {\n    return void 0;\n  }\n  const lastMessage = originalMessages[originalMessages.length - 1];\n  return (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\" ? lastMessage.id : typeof responseMessageId === \"function\" ? responseMessageId() : responseMessageId;\n}\n\n// src/ui/process-ui-message-stream.ts\nimport {\n  validateTypes\n} from \"@ai-sdk/provider-utils\";\n\n// src/ui-message-stream/ui-message-chunks.ts\nimport { z as z7 } from \"zod/v4\";\nimport { lazyValidator, zodSchema } from \"@ai-sdk/provider-utils\";\nvar uiMessageChunkSchema = lazyValidator(\n  () => zodSchema(\n    z7.union([\n      z7.strictObject({\n        type: z7.literal(\"text-start\"),\n        id: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"text-delta\"),\n        id: z7.string(),\n        delta: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"text-end\"),\n        id: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"error\"),\n        errorText: z7.string()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-input-start\"),\n        toolCallId: z7.string(),\n        toolName: z7.string(),\n        providerExecuted: z7.boolean().optional(),\n        dynamic: z7.boolean().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-input-delta\"),\n        toolCallId: z7.string(),\n        inputTextDelta: z7.string()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-input-available\"),\n        toolCallId: z7.string(),\n        toolName: z7.string(),\n        input: z7.unknown(),\n        providerExecuted: z7.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        dynamic: z7.boolean().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-input-error\"),\n        toolCallId: z7.string(),\n        toolName: z7.string(),\n        input: z7.unknown(),\n        providerExecuted: z7.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        dynamic: z7.boolean().optional(),\n        errorText: z7.string()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-output-available\"),\n        toolCallId: z7.string(),\n        output: z7.unknown(),\n        providerExecuted: z7.boolean().optional(),\n        dynamic: z7.boolean().optional(),\n        preliminary: z7.boolean().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"tool-output-error\"),\n        toolCallId: z7.string(),\n        errorText: z7.string(),\n        providerExecuted: z7.boolean().optional(),\n        dynamic: z7.boolean().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"reasoning-start\"),\n        id: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"reasoning-delta\"),\n        id: z7.string(),\n        delta: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"reasoning-end\"),\n        id: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"source-url\"),\n        sourceId: z7.string(),\n        url: z7.string(),\n        title: z7.string().optional(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"source-document\"),\n        sourceId: z7.string(),\n        mediaType: z7.string(),\n        title: z7.string(),\n        filename: z7.string().optional(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"file\"),\n        url: z7.string(),\n        mediaType: z7.string(),\n        providerMetadata: providerMetadataSchema.optional()\n      }),\n      z7.strictObject({\n        type: z7.custom(\n          (value) => typeof value === \"string\" && value.startsWith(\"data-\"),\n          { message: 'Type must start with \"data-\"' }\n        ),\n        id: z7.string().optional(),\n        data: z7.unknown(),\n        transient: z7.boolean().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"start-step\")\n      }),\n      z7.strictObject({\n        type: z7.literal(\"finish-step\")\n      }),\n      z7.strictObject({\n        type: z7.literal(\"start\"),\n        messageId: z7.string().optional(),\n        messageMetadata: z7.unknown().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"finish\"),\n        finishReason: z7.enum([\n          \"stop\",\n          \"length\",\n          \"content-filter\",\n          \"tool-calls\",\n          \"error\",\n          \"other\",\n          \"unknown\"\n        ]).optional(),\n        messageMetadata: z7.unknown().optional()\n      }),\n      z7.strictObject({\n        type: z7.literal(\"abort\")\n      }),\n      z7.strictObject({\n        type: z7.literal(\"message-metadata\"),\n        messageMetadata: z7.unknown()\n      })\n    ])\n  )\n);\nfunction isDataUIMessageChunk(chunk) {\n  return chunk.type.startsWith(\"data-\");\n}\n\n// src/util/merge-objects.ts\nfunction mergeObjects(base, overrides) {\n  if (base === void 0 && overrides === void 0) {\n    return void 0;\n  }\n  if (base === void 0) {\n    return overrides;\n  }\n  if (overrides === void 0) {\n    return base;\n  }\n  const result = { ...base };\n  for (const key in overrides) {\n    if (Object.prototype.hasOwnProperty.call(overrides, key)) {\n      const overridesValue = overrides[key];\n      if (overridesValue === void 0)\n        continue;\n      const baseValue = key in base ? base[key] : void 0;\n      const isSourceObject = overridesValue !== null && typeof overridesValue === \"object\" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);\n      const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === \"object\" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);\n      if (isSourceObject && isTargetObject) {\n        result[key] = mergeObjects(\n          baseValue,\n          overridesValue\n        );\n      } else {\n        result[key] = overridesValue;\n      }\n    }\n  }\n  return result;\n}\n\n// src/util/parse-partial-json.ts\nimport { safeParseJSON as safeParseJSON2 } from \"@ai-sdk/provider-utils\";\n\n// src/util/fix-json.ts\nfunction fixJson(input) {\n  const stack = [\"ROOT\"];\n  let lastValidIndex = -1;\n  let literalStart = null;\n  function processValueStart(char, i, swapState) {\n    {\n      switch (char) {\n        case '\"': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_STRING\");\n          break;\n        }\n        case \"f\":\n        case \"t\":\n        case \"n\": {\n          lastValidIndex = i;\n          literalStart = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_LITERAL\");\n          break;\n        }\n        case \"-\": {\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_NUMBER\");\n          break;\n        }\n        case \"0\":\n        case \"1\":\n        case \"2\":\n        case \"3\":\n        case \"4\":\n        case \"5\":\n        case \"6\":\n        case \"7\":\n        case \"8\":\n        case \"9\": {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_NUMBER\");\n          break;\n        }\n        case \"{\": {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_OBJECT_START\");\n          break;\n        }\n        case \"[\": {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push(\"INSIDE_ARRAY_START\");\n          break;\n        }\n      }\n    }\n  }\n  function processAfterObjectValue(char, i) {\n    switch (char) {\n      case \",\": {\n        stack.pop();\n        stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n        break;\n      }\n      case \"}\": {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n  function processAfterArrayValue(char, i) {\n    switch (char) {\n      case \",\": {\n        stack.pop();\n        stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n        break;\n      }\n      case \"]\": {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n    const currentState = stack[stack.length - 1];\n    switch (currentState) {\n      case \"ROOT\":\n        processValueStart(char, i, \"FINISH\");\n        break;\n      case \"INSIDE_OBJECT_START\": {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push(\"INSIDE_OBJECT_KEY\");\n            break;\n          }\n          case \"}\": {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_OBJECT_AFTER_COMMA\": {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push(\"INSIDE_OBJECT_KEY\");\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_OBJECT_KEY\": {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_OBJECT_AFTER_KEY\": {\n        switch (char) {\n          case \":\": {\n            stack.pop();\n            stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n        processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n        break;\n      }\n      case \"INSIDE_OBJECT_AFTER_VALUE\": {\n        processAfterObjectValue(char, i);\n        break;\n      }\n      case \"INSIDE_STRING\": {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            lastValidIndex = i;\n            break;\n          }\n          case \"\\\\\": {\n            stack.push(\"INSIDE_STRING_ESCAPE\");\n            break;\n          }\n          default: {\n            lastValidIndex = i;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_ARRAY_START\": {\n        switch (char) {\n          case \"]\": {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n          default: {\n            lastValidIndex = i;\n            processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_ARRAY_AFTER_VALUE\": {\n        switch (char) {\n          case \",\": {\n            stack.pop();\n            stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n            break;\n          }\n          case \"]\": {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n          default: {\n            lastValidIndex = i;\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_ARRAY_AFTER_COMMA\": {\n        processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n        break;\n      }\n      case \"INSIDE_STRING_ESCAPE\": {\n        stack.pop();\n        lastValidIndex = i;\n        break;\n      }\n      case \"INSIDE_NUMBER\": {\n        switch (char) {\n          case \"0\":\n          case \"1\":\n          case \"2\":\n          case \"3\":\n          case \"4\":\n          case \"5\":\n          case \"6\":\n          case \"7\":\n          case \"8\":\n          case \"9\": {\n            lastValidIndex = i;\n            break;\n          }\n          case \"e\":\n          case \"E\":\n          case \"-\":\n          case \".\": {\n            break;\n          }\n          case \",\": {\n            stack.pop();\n            if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n              processAfterArrayValue(char, i);\n            }\n            if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n              processAfterObjectValue(char, i);\n            }\n            break;\n          }\n          case \"}\": {\n            stack.pop();\n            if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n              processAfterObjectValue(char, i);\n            }\n            break;\n          }\n          case \"]\": {\n            stack.pop();\n            if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n              processAfterArrayValue(char, i);\n            }\n            break;\n          }\n          default: {\n            stack.pop();\n            break;\n          }\n        }\n        break;\n      }\n      case \"INSIDE_LITERAL\": {\n        const partialLiteral = input.substring(literalStart, i + 1);\n        if (!\"false\".startsWith(partialLiteral) && !\"true\".startsWith(partialLiteral) && !\"null\".startsWith(partialLiteral)) {\n          stack.pop();\n          if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n            processAfterObjectValue(char, i);\n          } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n            processAfterArrayValue(char, i);\n          }\n        } else {\n          lastValidIndex = i;\n        }\n        break;\n      }\n    }\n  }\n  let result = input.slice(0, lastValidIndex + 1);\n  for (let i = stack.length - 1; i >= 0; i--) {\n    const state = stack[i];\n    switch (state) {\n      case \"INSIDE_STRING\": {\n        result += '\"';\n        break;\n      }\n      case \"INSIDE_OBJECT_KEY\":\n      case \"INSIDE_OBJECT_AFTER_KEY\":\n      case \"INSIDE_OBJECT_AFTER_COMMA\":\n      case \"INSIDE_OBJECT_START\":\n      case \"INSIDE_OBJECT_BEFORE_VALUE\":\n      case \"INSIDE_OBJECT_AFTER_VALUE\": {\n        result += \"}\";\n        break;\n      }\n      case \"INSIDE_ARRAY_START\":\n      case \"INSIDE_ARRAY_AFTER_COMMA\":\n      case \"INSIDE_ARRAY_AFTER_VALUE\": {\n        result += \"]\";\n        break;\n      }\n      case \"INSIDE_LITERAL\": {\n        const partialLiteral = input.substring(literalStart, input.length);\n        if (\"true\".startsWith(partialLiteral)) {\n          result += \"true\".slice(partialLiteral.length);\n        } else if (\"false\".startsWith(partialLiteral)) {\n          result += \"false\".slice(partialLiteral.length);\n        } else if (\"null\".startsWith(partialLiteral)) {\n          result += \"null\".slice(partialLiteral.length);\n        }\n      }\n    }\n  }\n  return result;\n}\n\n// src/util/parse-partial-json.ts\nasync function parsePartialJson(jsonText) {\n  if (jsonText === void 0) {\n    return { value: void 0, state: \"undefined-input\" };\n  }\n  let result = await safeParseJSON2({ text: jsonText });\n  if (result.success) {\n    return { value: result.value, state: \"successful-parse\" };\n  }\n  result = await safeParseJSON2({ text: fixJson(jsonText) });\n  if (result.success) {\n    return { value: result.value, state: \"repaired-parse\" };\n  }\n  return { value: void 0, state: \"failed-parse\" };\n}\n\n// src/ui/ui-messages.ts\nfunction isDataUIPart(part) {\n  return part.type.startsWith(\"data-\");\n}\nfunction isTextUIPart(part) {\n  return part.type === \"text\";\n}\nfunction isFileUIPart(part) {\n  return part.type === \"file\";\n}\nfunction isReasoningUIPart(part) {\n  return part.type === \"reasoning\";\n}\nfunction isToolUIPart(part) {\n  return part.type.startsWith(\"tool-\");\n}\nfunction isDynamicToolUIPart(part) {\n  return part.type === \"dynamic-tool\";\n}\nfunction isToolOrDynamicToolUIPart(part) {\n  return isToolUIPart(part) || isDynamicToolUIPart(part);\n}\nfunction getToolName(part) {\n  return part.type.split(\"-\").slice(1).join(\"-\");\n}\nfunction getToolOrDynamicToolName(part) {\n  return isDynamicToolUIPart(part) ? part.toolName : getToolName(part);\n}\n\n// src/ui/process-ui-message-stream.ts\nfunction createStreamingUIMessageState({\n  lastMessage,\n  messageId\n}) {\n  return {\n    message: (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\" ? lastMessage : {\n      id: messageId,\n      metadata: void 0,\n      role: \"assistant\",\n      parts: []\n    },\n    activeTextParts: {},\n    activeReasoningParts: {},\n    partialToolCalls: {}\n  };\n}\nfunction processUIMessageStream({\n  stream,\n  messageMetadataSchema,\n  dataPartSchemas,\n  runUpdateMessageJob,\n  onError,\n  onToolCall,\n  onData\n}) {\n  return stream.pipeThrough(\n    new TransformStream({\n      async transform(chunk, controller) {\n        await runUpdateMessageJob(async ({ state, write }) => {\n          var _a16, _b, _c, _d;\n          function getToolInvocation(toolCallId) {\n            const toolInvocations = state.message.parts.filter(isToolUIPart);\n            const toolInvocation = toolInvocations.find(\n              (invocation) => invocation.toolCallId === toolCallId\n            );\n            if (toolInvocation == null) {\n              throw new Error(\n                \"tool-output-error must be preceded by a tool-input-available\"\n              );\n            }\n            return toolInvocation;\n          }\n          function getDynamicToolInvocation(toolCallId) {\n            const toolInvocations = state.message.parts.filter(\n              (part) => part.type === \"dynamic-tool\"\n            );\n            const toolInvocation = toolInvocations.find(\n              (invocation) => invocation.toolCallId === toolCallId\n            );\n            if (toolInvocation == null) {\n              throw new Error(\n                \"tool-output-error must be preceded by a tool-input-available\"\n              );\n            }\n            return toolInvocation;\n          }\n          function updateToolPart(options) {\n            var _a17;\n            const part = state.message.parts.find(\n              (part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId\n            );\n            const anyOptions = options;\n            const anyPart = part;\n            if (part != null) {\n              part.state = options.state;\n              anyPart.input = anyOptions.input;\n              anyPart.output = anyOptions.output;\n              anyPart.errorText = anyOptions.errorText;\n              anyPart.rawInput = anyOptions.rawInput;\n              anyPart.preliminary = anyOptions.preliminary;\n              anyPart.providerExecuted = (_a17 = anyOptions.providerExecuted) != null ? _a17 : part.providerExecuted;\n              if (anyOptions.providerMetadata != null && part.state === \"input-available\") {\n                part.callProviderMetadata = anyOptions.providerMetadata;\n              }\n            } else {\n              state.message.parts.push({\n                type: `tool-${options.toolName}`,\n                toolCallId: options.toolCallId,\n                state: options.state,\n                input: anyOptions.input,\n                output: anyOptions.output,\n                rawInput: anyOptions.rawInput,\n                errorText: anyOptions.errorText,\n                providerExecuted: anyOptions.providerExecuted,\n                preliminary: anyOptions.preliminary,\n                ...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}\n              });\n            }\n          }\n          function updateDynamicToolPart(options) {\n            var _a17, _b2;\n            const part = state.message.parts.find(\n              (part2) => part2.type === \"dynamic-tool\" && part2.toolCallId === options.toolCallId\n            );\n            const anyOptions = options;\n            const anyPart = part;\n            if (part != null) {\n              part.state = options.state;\n              anyPart.toolName = options.toolName;\n              anyPart.input = anyOptions.input;\n              anyPart.output = anyOptions.output;\n              anyPart.errorText = anyOptions.errorText;\n              anyPart.rawInput = (_a17 = anyOptions.rawInput) != null ? _a17 : anyPart.rawInput;\n              anyPart.preliminary = anyOptions.preliminary;\n              anyPart.providerExecuted = (_b2 = anyOptions.providerExecuted) != null ? _b2 : part.providerExecuted;\n              if (anyOptions.providerMetadata != null && part.state === \"input-available\") {\n                part.callProviderMetadata = anyOptions.providerMetadata;\n              }\n            } else {\n              state.message.parts.push({\n                type: \"dynamic-tool\",\n                toolName: options.toolName,\n                toolCallId: options.toolCallId,\n                state: options.state,\n                input: anyOptions.input,\n                output: anyOptions.output,\n                errorText: anyOptions.errorText,\n                preliminary: anyOptions.preliminary,\n                providerExecuted: anyOptions.providerExecuted,\n                ...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}\n              });\n            }\n          }\n          async function updateMessageMetadata(metadata) {\n            if (metadata != null) {\n              const mergedMetadata = state.message.metadata != null ? mergeObjects(state.message.metadata, metadata) : metadata;\n              if (messageMetadataSchema != null) {\n                await validateTypes({\n                  value: mergedMetadata,\n                  schema: messageMetadataSchema\n                });\n              }\n              state.message.metadata = mergedMetadata;\n            }\n          }\n          switch (chunk.type) {\n            case \"text-start\": {\n              const textPart = {\n                type: \"text\",\n                text: \"\",\n                providerMetadata: chunk.providerMetadata,\n                state: \"streaming\"\n              };\n              state.activeTextParts[chunk.id] = textPart;\n              state.message.parts.push(textPart);\n              write();\n              break;\n            }\n            case \"text-delta\": {\n              const textPart = state.activeTextParts[chunk.id];\n              textPart.text += chunk.delta;\n              textPart.providerMetadata = (_a16 = chunk.providerMetadata) != null ? _a16 : textPart.providerMetadata;\n              write();\n              break;\n            }\n            case \"text-end\": {\n              const textPart = state.activeTextParts[chunk.id];\n              textPart.state = \"done\";\n              textPart.providerMetadata = (_b = chunk.providerMetadata) != null ? _b : textPart.providerMetadata;\n              delete state.activeTextParts[chunk.id];\n              write();\n              break;\n            }\n            case \"reasoning-start\": {\n              const reasoningPart = {\n                type: \"reasoning\",\n                text: \"\",\n                providerMetadata: chunk.providerMetadata,\n                state: \"streaming\"\n              };\n              state.activeReasoningParts[chunk.id] = reasoningPart;\n              state.message.parts.push(reasoningPart);\n              write();\n              break;\n            }\n            case \"reasoning-delta\": {\n              const reasoningPart = state.activeReasoningParts[chunk.id];\n              reasoningPart.text += chunk.delta;\n              reasoningPart.providerMetadata = (_c = chunk.providerMetadata) != null ? _c : reasoningPart.providerMetadata;\n              write();\n              break;\n            }\n            case \"reasoning-end\": {\n              const reasoningPart = state.activeReasoningParts[chunk.id];\n              reasoningPart.providerMetadata = (_d = chunk.providerMetadata) != null ? _d : reasoningPart.providerMetadata;\n              reasoningPart.state = \"done\";\n              delete state.activeReasoningParts[chunk.id];\n              write();\n              break;\n            }\n            case \"file\": {\n              state.message.parts.push({\n                type: \"file\",\n                mediaType: chunk.mediaType,\n                url: chunk.url\n              });\n              write();\n              break;\n            }\n            case \"source-url\": {\n              state.message.parts.push({\n                type: \"source-url\",\n                sourceId: chunk.sourceId,\n                url: chunk.url,\n                title: chunk.title,\n                providerMetadata: chunk.providerMetadata\n              });\n              write();\n              break;\n            }\n            case \"source-document\": {\n              state.message.parts.push({\n                type: \"source-document\",\n                sourceId: chunk.sourceId,\n                mediaType: chunk.mediaType,\n                title: chunk.title,\n                filename: chunk.filename,\n                providerMetadata: chunk.providerMetadata\n              });\n              write();\n              break;\n            }\n            case \"tool-input-start\": {\n              const toolInvocations = state.message.parts.filter(isToolUIPart);\n              state.partialToolCalls[chunk.toolCallId] = {\n                text: \"\",\n                toolName: chunk.toolName,\n                index: toolInvocations.length,\n                dynamic: chunk.dynamic\n              };\n              if (chunk.dynamic) {\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"input-streaming\",\n                  input: void 0,\n                  providerExecuted: chunk.providerExecuted\n                });\n              } else {\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"input-streaming\",\n                  input: void 0,\n                  providerExecuted: chunk.providerExecuted\n                });\n              }\n              write();\n              break;\n            }\n            case \"tool-input-delta\": {\n              const partialToolCall = state.partialToolCalls[chunk.toolCallId];\n              partialToolCall.text += chunk.inputTextDelta;\n              const { value: partialArgs } = await parsePartialJson(\n                partialToolCall.text\n              );\n              if (partialToolCall.dynamic) {\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: partialToolCall.toolName,\n                  state: \"input-streaming\",\n                  input: partialArgs\n                });\n              } else {\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: partialToolCall.toolName,\n                  state: \"input-streaming\",\n                  input: partialArgs\n                });\n              }\n              write();\n              break;\n            }\n            case \"tool-input-available\": {\n              if (chunk.dynamic) {\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"input-available\",\n                  input: chunk.input,\n                  providerExecuted: chunk.providerExecuted,\n                  providerMetadata: chunk.providerMetadata\n                });\n              } else {\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"input-available\",\n                  input: chunk.input,\n                  providerExecuted: chunk.providerExecuted,\n                  providerMetadata: chunk.providerMetadata\n                });\n              }\n              write();\n              if (onToolCall && !chunk.providerExecuted) {\n                await onToolCall({\n                  toolCall: chunk\n                });\n              }\n              break;\n            }\n            case \"tool-input-error\": {\n              if (chunk.dynamic) {\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"output-error\",\n                  input: chunk.input,\n                  errorText: chunk.errorText,\n                  providerExecuted: chunk.providerExecuted,\n                  providerMetadata: chunk.providerMetadata\n                });\n              } else {\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  state: \"output-error\",\n                  input: void 0,\n                  rawInput: chunk.input,\n                  errorText: chunk.errorText,\n                  providerExecuted: chunk.providerExecuted,\n                  providerMetadata: chunk.providerMetadata\n                });\n              }\n              write();\n              break;\n            }\n            case \"tool-output-available\": {\n              if (chunk.dynamic) {\n                const toolInvocation = getDynamicToolInvocation(\n                  chunk.toolCallId\n                );\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: toolInvocation.toolName,\n                  state: \"output-available\",\n                  input: toolInvocation.input,\n                  output: chunk.output,\n                  preliminary: chunk.preliminary\n                });\n              } else {\n                const toolInvocation = getToolInvocation(chunk.toolCallId);\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: getToolName(toolInvocation),\n                  state: \"output-available\",\n                  input: toolInvocation.input,\n                  output: chunk.output,\n                  providerExecuted: chunk.providerExecuted,\n                  preliminary: chunk.preliminary\n                });\n              }\n              write();\n              break;\n            }\n            case \"tool-output-error\": {\n              if (chunk.dynamic) {\n                const toolInvocation = getDynamicToolInvocation(\n                  chunk.toolCallId\n                );\n                updateDynamicToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: toolInvocation.toolName,\n                  state: \"output-error\",\n                  input: toolInvocation.input,\n                  errorText: chunk.errorText,\n                  providerExecuted: chunk.providerExecuted\n                });\n              } else {\n                const toolInvocation = getToolInvocation(chunk.toolCallId);\n                updateToolPart({\n                  toolCallId: chunk.toolCallId,\n                  toolName: getToolName(toolInvocation),\n                  state: \"output-error\",\n                  input: toolInvocation.input,\n                  rawInput: toolInvocation.rawInput,\n                  errorText: chunk.errorText,\n                  providerExecuted: chunk.providerExecuted\n                });\n              }\n              write();\n              break;\n            }\n            case \"start-step\": {\n              state.message.parts.push({ type: \"step-start\" });\n              break;\n            }\n            case \"finish-step\": {\n              state.activeTextParts = {};\n              state.activeReasoningParts = {};\n              break;\n            }\n            case \"start\": {\n              if (chunk.messageId != null) {\n                state.message.id = chunk.messageId;\n              }\n              await updateMessageMetadata(chunk.messageMetadata);\n              if (chunk.messageId != null || chunk.messageMetadata != null) {\n                write();\n              }\n              break;\n            }\n            case \"finish\": {\n              if (chunk.finishReason != null) {\n                state.finishReason = chunk.finishReason;\n              }\n              await updateMessageMetadata(chunk.messageMetadata);\n              if (chunk.messageMetadata != null) {\n                write();\n              }\n              break;\n            }\n            case \"message-metadata\": {\n              await updateMessageMetadata(chunk.messageMetadata);\n              if (chunk.messageMetadata != null) {\n                write();\n              }\n              break;\n            }\n            case \"error\": {\n              onError == null ? void 0 : onError(new Error(chunk.errorText));\n              break;\n            }\n            default: {\n              if (isDataUIMessageChunk(chunk)) {\n                if ((dataPartSchemas == null ? void 0 : dataPartSchemas[chunk.type]) != null) {\n                  await validateTypes({\n                    value: chunk.data,\n                    schema: dataPartSchemas[chunk.type]\n                  });\n                }\n                const dataChunk = chunk;\n                if (dataChunk.transient) {\n                  onData == null ? void 0 : onData(dataChunk);\n                  break;\n                }\n                const existingUIPart = dataChunk.id != null ? state.message.parts.find(\n                  (chunkArg) => dataChunk.type === chunkArg.type && dataChunk.id === chunkArg.id\n                ) : void 0;\n                if (existingUIPart != null) {\n                  existingUIPart.data = dataChunk.data;\n                } else {\n                  state.message.parts.push(dataChunk);\n                }\n                onData == null ? void 0 : onData(dataChunk);\n                write();\n              }\n            }\n          }\n          controller.enqueue(chunk);\n        });\n      }\n    })\n  );\n}\n\n// src/ui-message-stream/handle-ui-message-stream-finish.ts\nfunction handleUIMessageStreamFinish({\n  messageId,\n  originalMessages = [],\n  onFinish,\n  onError,\n  stream\n}) {\n  let lastMessage = originalMessages == null ? void 0 : originalMessages[originalMessages.length - 1];\n  if ((lastMessage == null ? void 0 : lastMessage.role) !== \"assistant\") {\n    lastMessage = void 0;\n  } else {\n    messageId = lastMessage.id;\n  }\n  let isAborted = false;\n  const idInjectedStream = stream.pipeThrough(\n    new TransformStream({\n      transform(chunk, controller) {\n        if (chunk.type === \"start\") {\n          const startChunk = chunk;\n          if (startChunk.messageId == null && messageId != null) {\n            startChunk.messageId = messageId;\n          }\n        }\n        if (chunk.type === \"abort\") {\n          isAborted = true;\n        }\n        controller.enqueue(chunk);\n      }\n    })\n  );\n  if (onFinish == null) {\n    return idInjectedStream;\n  }\n  const state = createStreamingUIMessageState({\n    lastMessage: lastMessage ? structuredClone(lastMessage) : void 0,\n    messageId: messageId != null ? messageId : \"\"\n    // will be overridden by the stream\n  });\n  const runUpdateMessageJob = async (job) => {\n    await job({ state, write: () => {\n    } });\n  };\n  let finishCalled = false;\n  const callOnFinish = async () => {\n    if (finishCalled || !onFinish) {\n      return;\n    }\n    finishCalled = true;\n    const isContinuation = state.message.id === (lastMessage == null ? void 0 : lastMessage.id);\n    await onFinish({\n      isAborted,\n      isContinuation,\n      responseMessage: state.message,\n      messages: [\n        ...isContinuation ? originalMessages.slice(0, -1) : originalMessages,\n        state.message\n      ],\n      finishReason: state.finishReason\n    });\n  };\n  return processUIMessageStream({\n    stream: idInjectedStream,\n    runUpdateMessageJob,\n    onError\n  }).pipeThrough(\n    new TransformStream({\n      transform(chunk, controller) {\n        controller.enqueue(chunk);\n      },\n      // @ts-expect-error cancel is still new and missing from types https://developer.mozilla.org/en-US/docs/Web/API/TransformStream#browser_compatibility\n      async cancel() {\n        await callOnFinish();\n      },\n      async flush() {\n        await callOnFinish();\n      }\n    })\n  );\n}\n\n// src/ui-message-stream/pipe-ui-message-stream-to-response.ts\nfunction pipeUIMessageStreamToResponse({\n  response,\n  status,\n  statusText,\n  headers,\n  stream,\n  consumeSseStream\n}) {\n  let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n  if (consumeSseStream) {\n    const [stream1, stream2] = sseStream.tee();\n    sseStream = stream1;\n    consumeSseStream({ stream: stream2 });\n  }\n  writeToServerResponse({\n    response,\n    status,\n    statusText,\n    headers: Object.fromEntries(\n      prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS).entries()\n    ),\n    stream: sseStream.pipeThrough(new TextEncoderStream())\n  });\n}\n\n// src/util/async-iterable-stream.ts\nfunction createAsyncIterableStream(source) {\n  const stream = source.pipeThrough(new TransformStream());\n  stream[Symbol.asyncIterator] = function() {\n    const reader = this.getReader();\n    let finished = false;\n    async function cleanup(cancelStream) {\n      var _a16;\n      finished = true;\n      try {\n        if (cancelStream) {\n          await ((_a16 = reader.cancel) == null ? void 0 : _a16.call(reader));\n        }\n      } finally {\n        try {\n          reader.releaseLock();\n        } catch (e) {\n        }\n      }\n    }\n    return {\n      /**\n       * Reads the next chunk from the stream.\n       * @returns A promise resolving to the next IteratorResult.\n       */\n      async next() {\n        if (finished) {\n          return { done: true, value: void 0 };\n        }\n        const { done, value } = await reader.read();\n        if (done) {\n          await cleanup(true);\n          return { done: true, value: void 0 };\n        }\n        return { done: false, value };\n      },\n      /**\n       * Called on early exit (e.g., break from for-await).\n       * Ensures the stream is cancelled and resources are released.\n       * @returns A promise resolving to a completed IteratorResult.\n       */\n      async return() {\n        await cleanup(true);\n        return { done: true, value: void 0 };\n      },\n      /**\n       * Called on early exit with error.\n       * Ensures the stream is cancelled and resources are released, then rethrows the error.\n       * @param err The error to throw.\n       * @returns A promise that rejects with the provided error.\n       */\n      async throw(err) {\n        await cleanup(true);\n        throw err;\n      }\n    };\n  };\n  return stream;\n}\n\n// src/util/consume-stream.ts\nasync function consumeStream({\n  stream,\n  onError\n}) {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { done } = await reader.read();\n      if (done)\n        break;\n    }\n  } catch (error) {\n    onError == null ? void 0 : onError(error);\n  } finally {\n    reader.releaseLock();\n  }\n}\n\n// src/util/create-resolvable-promise.ts\nfunction createResolvablePromise() {\n  let resolve2;\n  let reject;\n  const promise = new Promise((res, rej) => {\n    resolve2 = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve: resolve2,\n    reject\n  };\n}\n\n// src/util/create-stitchable-stream.ts\nfunction createStitchableStream() {\n  let innerStreamReaders = [];\n  let controller = null;\n  let isClosed = false;\n  let waitForNewStream = createResolvablePromise();\n  const terminate = () => {\n    isClosed = true;\n    waitForNewStream.resolve();\n    innerStreamReaders.forEach((reader) => reader.cancel());\n    innerStreamReaders = [];\n    controller == null ? void 0 : controller.close();\n  };\n  const processPull = async () => {\n    if (isClosed && innerStreamReaders.length === 0) {\n      controller == null ? void 0 : controller.close();\n      return;\n    }\n    if (innerStreamReaders.length === 0) {\n      waitForNewStream = createResolvablePromise();\n      await waitForNewStream.promise;\n      return processPull();\n    }\n    try {\n      const { value, done } = await innerStreamReaders[0].read();\n      if (done) {\n        innerStreamReaders.shift();\n        if (innerStreamReaders.length > 0) {\n          await processPull();\n        } else if (isClosed) {\n          controller == null ? void 0 : controller.close();\n        }\n      } else {\n        controller == null ? void 0 : controller.enqueue(value);\n      }\n    } catch (error) {\n      controller == null ? void 0 : controller.error(error);\n      innerStreamReaders.shift();\n      terminate();\n    }\n  };\n  return {\n    stream: new ReadableStream({\n      start(controllerParam) {\n        controller = controllerParam;\n      },\n      pull: processPull,\n      async cancel() {\n        for (const reader of innerStreamReaders) {\n          await reader.cancel();\n        }\n        innerStreamReaders = [];\n        isClosed = true;\n      }\n    }),\n    addStream: (innerStream) => {\n      if (isClosed) {\n        throw new Error(\"Cannot add inner stream: outer stream is closed\");\n      }\n      innerStreamReaders.push(innerStream.getReader());\n      waitForNewStream.resolve();\n    },\n    /**\n     * Gracefully close the outer stream. This will let the inner streams\n     * finish processing and then close the outer stream.\n     */\n    close: () => {\n      isClosed = true;\n      waitForNewStream.resolve();\n      if (innerStreamReaders.length === 0) {\n        controller == null ? void 0 : controller.close();\n      }\n    },\n    /**\n     * Immediately close the outer stream. This will cancel all inner streams\n     * and close the outer stream.\n     */\n    terminate\n  };\n}\n\n// src/util/now.ts\nfunction now() {\n  var _a16, _b;\n  return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();\n}\n\n// src/generate-text/run-tools-transformation.ts\nimport {\n  executeTool as executeTool2,\n  generateId,\n  getErrorMessage as getErrorMessage6\n} from \"@ai-sdk/provider-utils\";\nfunction runToolsTransformation({\n  tools,\n  generatorStream,\n  tracer,\n  telemetry,\n  system,\n  messages,\n  abortSignal,\n  repairToolCall,\n  experimental_context\n}) {\n  let toolResultsStreamController = null;\n  const toolResultsStream = new ReadableStream({\n    start(controller) {\n      toolResultsStreamController = controller;\n    }\n  });\n  const outstandingToolResults = /* @__PURE__ */ new Set();\n  const toolInputs = /* @__PURE__ */ new Map();\n  let canClose = false;\n  let finishChunk = void 0;\n  function attemptClose() {\n    if (canClose && outstandingToolResults.size === 0) {\n      if (finishChunk != null) {\n        toolResultsStreamController.enqueue(finishChunk);\n      }\n      toolResultsStreamController.close();\n    }\n  }\n  const forwardStream = new TransformStream({\n    async transform(chunk, controller) {\n      const chunkType = chunk.type;\n      switch (chunkType) {\n        case \"stream-start\":\n        case \"text-start\":\n        case \"text-delta\":\n        case \"text-end\":\n        case \"reasoning-start\":\n        case \"reasoning-delta\":\n        case \"reasoning-end\":\n        case \"tool-input-start\":\n        case \"tool-input-delta\":\n        case \"tool-input-end\":\n        case \"source\":\n        case \"response-metadata\":\n        case \"error\":\n        case \"raw\": {\n          controller.enqueue(chunk);\n          break;\n        }\n        case \"file\": {\n          controller.enqueue({\n            type: \"file\",\n            file: new DefaultGeneratedFileWithType({\n              data: chunk.data,\n              mediaType: chunk.mediaType\n            })\n          });\n          break;\n        }\n        case \"finish\": {\n          finishChunk = {\n            type: \"finish\",\n            finishReason: chunk.finishReason,\n            usage: chunk.usage,\n            providerMetadata: chunk.providerMetadata\n          };\n          break;\n        }\n        case \"tool-call\": {\n          try {\n            const toolCall = await parseToolCall({\n              toolCall: chunk,\n              tools,\n              repairToolCall,\n              system,\n              messages\n            });\n            controller.enqueue(toolCall);\n            if (toolCall.invalid) {\n              toolResultsStreamController.enqueue({\n                type: \"tool-error\",\n                toolCallId: toolCall.toolCallId,\n                toolName: toolCall.toolName,\n                input: toolCall.input,\n                error: getErrorMessage6(toolCall.error),\n                dynamic: true\n              });\n              break;\n            }\n            const tool2 = tools[toolCall.toolName];\n            toolInputs.set(toolCall.toolCallId, toolCall.input);\n            if (tool2.onInputAvailable != null) {\n              await tool2.onInputAvailable({\n                input: toolCall.input,\n                toolCallId: toolCall.toolCallId,\n                messages,\n                abortSignal,\n                experimental_context\n              });\n            }\n            if (tool2.execute != null && toolCall.providerExecuted !== true) {\n              const toolExecutionId = generateId();\n              outstandingToolResults.add(toolExecutionId);\n              recordSpan({\n                name: \"ai.toolCall\",\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: \"ai.toolCall\",\n                      telemetry\n                    }),\n                    \"ai.toolCall.name\": toolCall.toolName,\n                    \"ai.toolCall.id\": toolCall.toolCallId,\n                    \"ai.toolCall.args\": {\n                      output: () => JSON.stringify(toolCall.input)\n                    }\n                  }\n                }),\n                tracer,\n                fn: async (span) => {\n                  let output;\n                  try {\n                    const stream = executeTool2({\n                      execute: tool2.execute.bind(tool2),\n                      input: toolCall.input,\n                      options: {\n                        toolCallId: toolCall.toolCallId,\n                        messages,\n                        abortSignal,\n                        experimental_context\n                      }\n                    });\n                    for await (const part of stream) {\n                      toolResultsStreamController.enqueue({\n                        ...toolCall,\n                        type: \"tool-result\",\n                        output: part.output,\n                        ...part.type === \"preliminary\" && {\n                          preliminary: true\n                        }\n                      });\n                      if (part.type === \"final\") {\n                        output = part.output;\n                      }\n                    }\n                  } catch (error) {\n                    recordErrorOnSpan(span, error);\n                    toolResultsStreamController.enqueue({\n                      ...toolCall,\n                      type: \"tool-error\",\n                      error\n                    });\n                    outstandingToolResults.delete(toolExecutionId);\n                    attemptClose();\n                    return;\n                  }\n                  outstandingToolResults.delete(toolExecutionId);\n                  attemptClose();\n                  try {\n                    span.setAttributes(\n                      selectTelemetryAttributes({\n                        telemetry,\n                        attributes: {\n                          \"ai.toolCall.result\": {\n                            output: () => JSON.stringify(output)\n                          }\n                        }\n                      })\n                    );\n                  } catch (ignored) {\n                  }\n                }\n              });\n            }\n          } catch (error) {\n            toolResultsStreamController.enqueue({ type: \"error\", error });\n          }\n          break;\n        }\n        case \"tool-result\": {\n          const toolName = chunk.toolName;\n          if (chunk.isError) {\n            toolResultsStreamController.enqueue({\n              type: \"tool-error\",\n              toolCallId: chunk.toolCallId,\n              toolName,\n              input: toolInputs.get(chunk.toolCallId),\n              providerExecuted: chunk.providerExecuted,\n              error: chunk.result\n            });\n          } else {\n            controller.enqueue({\n              type: \"tool-result\",\n              toolCallId: chunk.toolCallId,\n              toolName,\n              input: toolInputs.get(chunk.toolCallId),\n              output: chunk.result,\n              providerExecuted: chunk.providerExecuted\n            });\n          }\n          break;\n        }\n        default: {\n          const _exhaustiveCheck = chunkType;\n          throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);\n        }\n      }\n    },\n    flush() {\n      canClose = true;\n      attemptClose();\n    }\n  });\n  return new ReadableStream({\n    async start(controller) {\n      return Promise.all([\n        generatorStream.pipeThrough(forwardStream).pipeTo(\n          new WritableStream({\n            write(chunk) {\n              controller.enqueue(chunk);\n            },\n            close() {\n            }\n          })\n        ),\n        toolResultsStream.pipeTo(\n          new WritableStream({\n            write(chunk) {\n              controller.enqueue(chunk);\n            },\n            close() {\n              controller.close();\n            }\n          })\n        )\n      ]);\n    }\n  });\n}\n\n// src/generate-text/stream-text.ts\nvar originalGenerateId2 = createIdGenerator2({\n  prefix: \"aitxt\",\n  size: 24\n});\nfunction streamText({\n  model,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries,\n  abortSignal,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output: output,\n  experimental_telemetry: telemetry,\n  prepareStep,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_repairToolCall: repairToolCall,\n  experimental_transform: transform,\n  experimental_download: download2,\n  includeRawChunks = false,\n  onChunk,\n  onError = ({ error }) => {\n    console.error(error);\n  },\n  onFinish,\n  onAbort,\n  onStepFinish,\n  experimental_context,\n  _internal: {\n    now: now2 = now,\n    generateId: generateId3 = originalGenerateId2,\n    currentDate = () => /* @__PURE__ */ new Date()\n  } = {},\n  ...settings\n}) {\n  return new DefaultStreamTextResult({\n    model: resolveLanguageModel(model),\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms: asArray(transform),\n    activeTools,\n    repairToolCall,\n    stopConditions: asArray(stopWhen),\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    now: now2,\n    currentDate,\n    generateId: generateId3,\n    experimental_context,\n    download: download2\n  });\n}\nfunction createOutputTransformStream(output) {\n  if (!output) {\n    return new TransformStream({\n      transform(chunk, controller) {\n        controller.enqueue({ part: chunk, partialOutput: void 0 });\n      }\n    });\n  }\n  let firstTextChunkId = void 0;\n  let text2 = \"\";\n  let textChunk = \"\";\n  let lastPublishedJson = \"\";\n  function publishTextChunk({\n    controller,\n    partialOutput = void 0\n  }) {\n    controller.enqueue({\n      part: {\n        type: \"text-delta\",\n        id: firstTextChunkId,\n        text: textChunk\n      },\n      partialOutput\n    });\n    textChunk = \"\";\n  }\n  return new TransformStream({\n    async transform(chunk, controller) {\n      if (chunk.type === \"finish-step\" && textChunk.length > 0) {\n        publishTextChunk({ controller });\n      }\n      if (chunk.type !== \"text-delta\" && chunk.type !== \"text-start\" && chunk.type !== \"text-end\") {\n        controller.enqueue({ part: chunk, partialOutput: void 0 });\n        return;\n      }\n      if (firstTextChunkId == null) {\n        firstTextChunkId = chunk.id;\n      } else if (chunk.id !== firstTextChunkId) {\n        controller.enqueue({ part: chunk, partialOutput: void 0 });\n        return;\n      }\n      if (chunk.type === \"text-start\") {\n        controller.enqueue({ part: chunk, partialOutput: void 0 });\n        return;\n      }\n      if (chunk.type === \"text-end\") {\n        if (textChunk.length > 0) {\n          publishTextChunk({ controller });\n        }\n        controller.enqueue({ part: chunk, partialOutput: void 0 });\n        return;\n      }\n      text2 += chunk.text;\n      textChunk += chunk.text;\n      const result = await output.parsePartial({ text: text2 });\n      if (result != null) {\n        const currentJson = JSON.stringify(result.partial);\n        if (currentJson !== lastPublishedJson) {\n          publishTextChunk({ controller, partialOutput: result.partial });\n          lastPublishedJson = currentJson;\n        }\n      }\n    }\n  });\n}\nvar DefaultStreamTextResult = class {\n  constructor({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms,\n    activeTools,\n    repairToolCall,\n    stopConditions,\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    now: now2,\n    currentDate,\n    generateId: generateId3,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    experimental_context,\n    download: download2\n  }) {\n    this._totalUsage = new DelayedPromise();\n    this._finishReason = new DelayedPromise();\n    this._steps = new DelayedPromise();\n    this.output = output;\n    this.includeRawChunks = includeRawChunks;\n    this.tools = tools;\n    let stepFinish;\n    let recordedContent = [];\n    const recordedResponseMessages = [];\n    let recordedFinishReason = void 0;\n    let recordedTotalUsage = void 0;\n    let recordedRequest = {};\n    let recordedWarnings = [];\n    const recordedSteps = [];\n    let rootSpan;\n    let activeTextContent = {};\n    let activeReasoningContent = {};\n    const eventProcessor = new TransformStream({\n      async transform(chunk, controller) {\n        var _a16, _b, _c, _d;\n        controller.enqueue(chunk);\n        const { part } = chunk;\n        if (part.type === \"text-delta\" || part.type === \"reasoning-delta\" || part.type === \"source\" || part.type === \"tool-call\" || part.type === \"tool-result\" || part.type === \"tool-input-start\" || part.type === \"tool-input-delta\" || part.type === \"raw\") {\n          await (onChunk == null ? void 0 : onChunk({ chunk: part }));\n        }\n        if (part.type === \"error\") {\n          await onError({ error: wrapGatewayError(part.error) });\n        }\n        if (part.type === \"text-start\") {\n          activeTextContent[part.id] = {\n            type: \"text\",\n            text: \"\",\n            providerMetadata: part.providerMetadata\n          };\n          recordedContent.push(activeTextContent[part.id]);\n        }\n        if (part.type === \"text-delta\") {\n          const activeText = activeTextContent[part.id];\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: \"error\",\n                error: `text part ${part.id} not found`\n              },\n              partialOutput: void 0\n            });\n            return;\n          }\n          activeText.text += part.text;\n          activeText.providerMetadata = (_a16 = part.providerMetadata) != null ? _a16 : activeText.providerMetadata;\n        }\n        if (part.type === \"text-end\") {\n          const activeText = activeTextContent[part.id];\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: \"error\",\n                error: `text part ${part.id} not found`\n              },\n              partialOutput: void 0\n            });\n            return;\n          }\n          activeText.providerMetadata = (_b = part.providerMetadata) != null ? _b : activeText.providerMetadata;\n          delete activeTextContent[part.id];\n        }\n        if (part.type === \"reasoning-start\") {\n          activeReasoningContent[part.id] = {\n            type: \"reasoning\",\n            text: \"\",\n            providerMetadata: part.providerMetadata\n          };\n          recordedContent.push(activeReasoningContent[part.id]);\n        }\n        if (part.type === \"reasoning-delta\") {\n          const activeReasoning = activeReasoningContent[part.id];\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: \"error\",\n                error: `reasoning part ${part.id} not found`\n              },\n              partialOutput: void 0\n            });\n            return;\n          }\n          activeReasoning.text += part.text;\n          activeReasoning.providerMetadata = (_c = part.providerMetadata) != null ? _c : activeReasoning.providerMetadata;\n        }\n        if (part.type === \"reasoning-end\") {\n          const activeReasoning = activeReasoningContent[part.id];\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: \"error\",\n                error: `reasoning part ${part.id} not found`\n              },\n              partialOutput: void 0\n            });\n            return;\n          }\n          activeReasoning.providerMetadata = (_d = part.providerMetadata) != null ? _d : activeReasoning.providerMetadata;\n          delete activeReasoningContent[part.id];\n        }\n        if (part.type === \"file\") {\n          recordedContent.push({ type: \"file\", file: part.file });\n        }\n        if (part.type === \"source\") {\n          recordedContent.push(part);\n        }\n        if (part.type === \"tool-call\") {\n          recordedContent.push(part);\n        }\n        if (part.type === \"tool-result\" && !part.preliminary) {\n          recordedContent.push(part);\n        }\n        if (part.type === \"tool-error\") {\n          recordedContent.push(part);\n        }\n        if (part.type === \"start-step\") {\n          recordedRequest = part.request;\n          recordedWarnings = part.warnings;\n        }\n        if (part.type === \"finish-step\") {\n          const stepMessages = toResponseMessages({\n            content: recordedContent,\n            tools\n          });\n          const currentStepResult = new DefaultStepResult({\n            content: recordedContent,\n            finishReason: part.finishReason,\n            usage: part.usage,\n            warnings: recordedWarnings,\n            request: recordedRequest,\n            response: {\n              ...part.response,\n              messages: [...recordedResponseMessages, ...stepMessages]\n            },\n            providerMetadata: part.providerMetadata\n          });\n          await (onStepFinish == null ? void 0 : onStepFinish(currentStepResult));\n          logWarnings(recordedWarnings);\n          recordedSteps.push(currentStepResult);\n          recordedContent = [];\n          activeReasoningContent = {};\n          activeTextContent = {};\n          recordedResponseMessages.push(...stepMessages);\n          stepFinish.resolve();\n        }\n        if (part.type === \"finish\") {\n          recordedTotalUsage = part.totalUsage;\n          recordedFinishReason = part.finishReason;\n        }\n      },\n      async flush(controller) {\n        try {\n          if (recordedSteps.length === 0) {\n            const error = new NoOutputGeneratedError({\n              message: \"No output generated. Check the stream for errors.\"\n            });\n            self._finishReason.reject(error);\n            self._totalUsage.reject(error);\n            self._steps.reject(error);\n            return;\n          }\n          const finishReason = recordedFinishReason != null ? recordedFinishReason : \"unknown\";\n          const totalUsage = recordedTotalUsage != null ? recordedTotalUsage : {\n            inputTokens: void 0,\n            outputTokens: void 0,\n            totalTokens: void 0\n          };\n          self._finishReason.resolve(finishReason);\n          self._totalUsage.resolve(totalUsage);\n          self._steps.resolve(recordedSteps);\n          const finalStep = recordedSteps[recordedSteps.length - 1];\n          await (onFinish == null ? void 0 : onFinish({\n            finishReason,\n            totalUsage,\n            usage: finalStep.usage,\n            content: finalStep.content,\n            text: finalStep.text,\n            reasoningText: finalStep.reasoningText,\n            reasoning: finalStep.reasoning,\n            files: finalStep.files,\n            sources: finalStep.sources,\n            toolCalls: finalStep.toolCalls,\n            staticToolCalls: finalStep.staticToolCalls,\n            dynamicToolCalls: finalStep.dynamicToolCalls,\n            toolResults: finalStep.toolResults,\n            staticToolResults: finalStep.staticToolResults,\n            dynamicToolResults: finalStep.dynamicToolResults,\n            request: finalStep.request,\n            response: finalStep.response,\n            warnings: finalStep.warnings,\n            providerMetadata: finalStep.providerMetadata,\n            steps: recordedSteps\n          }));\n          rootSpan.setAttributes(\n            selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                \"ai.response.finishReason\": finishReason,\n                \"ai.response.text\": { output: () => finalStep.text },\n                \"ai.response.toolCalls\": {\n                  output: () => {\n                    var _a16;\n                    return ((_a16 = finalStep.toolCalls) == null ? void 0 : _a16.length) ? JSON.stringify(finalStep.toolCalls) : void 0;\n                  }\n                },\n                \"ai.response.providerMetadata\": JSON.stringify(\n                  finalStep.providerMetadata\n                ),\n                \"ai.usage.inputTokens\": totalUsage.inputTokens,\n                \"ai.usage.outputTokens\": totalUsage.outputTokens,\n                \"ai.usage.totalTokens\": totalUsage.totalTokens,\n                \"ai.usage.reasoningTokens\": totalUsage.reasoningTokens,\n                \"ai.usage.cachedInputTokens\": totalUsage.cachedInputTokens\n              }\n            })\n          );\n        } catch (error) {\n          controller.error(error);\n        } finally {\n          rootSpan.end();\n        }\n      }\n    });\n    const stitchableStream = createStitchableStream();\n    this.addStream = stitchableStream.addStream;\n    this.closeStream = stitchableStream.close;\n    const reader = stitchableStream.stream.getReader();\n    let stream = new ReadableStream({\n      async start(controller) {\n        controller.enqueue({ type: \"start\" });\n      },\n      async pull(controller) {\n        function abort() {\n          onAbort == null ? void 0 : onAbort({ steps: recordedSteps });\n          controller.enqueue({ type: \"abort\" });\n          controller.close();\n        }\n        try {\n          const { done, value } = await reader.read();\n          if (done) {\n            controller.close();\n            return;\n          }\n          if (abortSignal == null ? void 0 : abortSignal.aborted) {\n            abort();\n            return;\n          }\n          controller.enqueue(value);\n        } catch (error) {\n          if (isAbortError2(error) && (abortSignal == null ? void 0 : abortSignal.aborted)) {\n            abort();\n          } else {\n            controller.error(error);\n          }\n        }\n      },\n      cancel(reason) {\n        return stitchableStream.stream.cancel(reason);\n      }\n    });\n    for (const transform of transforms) {\n      stream = stream.pipeThrough(\n        transform({\n          tools,\n          stopStream() {\n            stitchableStream.terminate();\n          }\n        })\n      );\n    }\n    this.baseStream = stream.pipeThrough(createOutputTransformStream(output)).pipeThrough(eventProcessor);\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal\n    });\n    const tracer = getTracer(telemetry);\n    const callSettings = prepareCallSettings(settings);\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries }\n    });\n    const self = this;\n    recordSpan({\n      name: \"ai.streamText\",\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({ operationId: \"ai.streamText\", telemetry }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          \"ai.prompt\": {\n            input: () => JSON.stringify({ system, prompt, messages })\n          }\n        }\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async (rootSpanArg) => {\n        rootSpan = rootSpanArg;\n        async function streamStep({\n          currentStep,\n          responseMessages,\n          usage\n        }) {\n          var _a16, _b, _c, _d, _e;\n          const includeRawChunks2 = self.includeRawChunks;\n          stepFinish = new DelayedPromise();\n          const initialPrompt = await standardizePrompt({\n            system,\n            prompt,\n            messages\n          });\n          const stepInputMessages = [\n            ...initialPrompt.messages,\n            ...responseMessages\n          ];\n          const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({\n            model,\n            steps: recordedSteps,\n            stepNumber: recordedSteps.length,\n            messages: stepInputMessages\n          }));\n          const stepModel = resolveLanguageModel(\n            (_a16 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a16 : model\n          );\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: {\n              system: (_b = prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _b : initialPrompt.system,\n              messages: (_c = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _c : stepInputMessages\n            },\n            supportedUrls: await stepModel.supportedUrls,\n            download: download2\n          });\n          const { toolChoice: stepToolChoice, tools: stepTools } = prepareToolsAndToolChoice({\n            tools,\n            toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,\n            activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools\n          });\n          const {\n            result: { stream: stream2, response, request },\n            doStreamSpan,\n            startTimestampMs\n          } = await retry(\n            () => recordSpan({\n              name: \"ai.streamText.doStream\",\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: \"ai.streamText.doStream\",\n                    telemetry\n                  }),\n                  ...baseTelemetryAttributes,\n                  // model:\n                  \"ai.model.provider\": stepModel.provider,\n                  \"ai.model.id\": stepModel.modelId,\n                  // prompt:\n                  \"ai.prompt.messages\": {\n                    input: () => stringifyForTelemetry(promptMessages)\n                  },\n                  \"ai.prompt.tools\": {\n                    // convert the language model level tools:\n                    input: () => stepTools == null ? void 0 : stepTools.map((tool2) => JSON.stringify(tool2))\n                  },\n                  \"ai.prompt.toolChoice\": {\n                    input: () => stepToolChoice != null ? JSON.stringify(stepToolChoice) : void 0\n                  },\n                  // standardized gen-ai llm span attributes:\n                  \"gen_ai.system\": stepModel.provider,\n                  \"gen_ai.request.model\": stepModel.modelId,\n                  \"gen_ai.request.frequency_penalty\": callSettings.frequencyPenalty,\n                  \"gen_ai.request.max_tokens\": callSettings.maxOutputTokens,\n                  \"gen_ai.request.presence_penalty\": callSettings.presencePenalty,\n                  \"gen_ai.request.stop_sequences\": callSettings.stopSequences,\n                  \"gen_ai.request.temperature\": callSettings.temperature,\n                  \"gen_ai.request.top_k\": callSettings.topK,\n                  \"gen_ai.request.top_p\": callSettings.topP\n                }\n              }),\n              tracer,\n              endWhenDone: false,\n              fn: async (doStreamSpan2) => {\n                return {\n                  startTimestampMs: now2(),\n                  // get before the call\n                  doStreamSpan: doStreamSpan2,\n                  result: await stepModel.doStream({\n                    ...callSettings,\n                    tools: stepTools,\n                    toolChoice: stepToolChoice,\n                    responseFormat: output == null ? void 0 : output.responseFormat,\n                    prompt: promptMessages,\n                    providerOptions,\n                    abortSignal,\n                    headers,\n                    includeRawChunks: includeRawChunks2\n                  })\n                };\n              }\n            })\n          );\n          const streamWithToolResults = runToolsTransformation({\n            tools,\n            generatorStream: stream2,\n            tracer,\n            telemetry,\n            system,\n            messages: stepInputMessages,\n            repairToolCall,\n            abortSignal,\n            experimental_context\n          });\n          const stepRequest = request != null ? request : {};\n          const stepToolCalls = [];\n          const stepToolOutputs = [];\n          let warnings;\n          const activeToolCallToolNames = {};\n          let stepFinishReason = \"unknown\";\n          let stepUsage = {\n            inputTokens: void 0,\n            outputTokens: void 0,\n            totalTokens: void 0\n          };\n          let stepProviderMetadata;\n          let stepFirstChunk = true;\n          let stepResponse = {\n            id: generateId3(),\n            timestamp: currentDate(),\n            modelId: model.modelId\n          };\n          let activeText = \"\";\n          self.addStream(\n            streamWithToolResults.pipeThrough(\n              new TransformStream({\n                async transform(chunk, controller) {\n                  var _a17, _b2, _c2, _d2;\n                  if (chunk.type === \"stream-start\") {\n                    warnings = chunk.warnings;\n                    return;\n                  }\n                  if (stepFirstChunk) {\n                    const msToFirstChunk = now2() - startTimestampMs;\n                    stepFirstChunk = false;\n                    doStreamSpan.addEvent(\"ai.stream.firstChunk\", {\n                      \"ai.response.msToFirstChunk\": msToFirstChunk\n                    });\n                    doStreamSpan.setAttributes({\n                      \"ai.response.msToFirstChunk\": msToFirstChunk\n                    });\n                    controller.enqueue({\n                      type: \"start-step\",\n                      request: stepRequest,\n                      warnings: warnings != null ? warnings : []\n                    });\n                  }\n                  const chunkType = chunk.type;\n                  switch (chunkType) {\n                    case \"text-start\":\n                    case \"text-end\": {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"text-delta\": {\n                      if (chunk.delta.length > 0) {\n                        controller.enqueue({\n                          type: \"text-delta\",\n                          id: chunk.id,\n                          text: chunk.delta,\n                          providerMetadata: chunk.providerMetadata\n                        });\n                        activeText += chunk.delta;\n                      }\n                      break;\n                    }\n                    case \"reasoning-start\":\n                    case \"reasoning-end\": {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"reasoning-delta\": {\n                      controller.enqueue({\n                        type: \"reasoning-delta\",\n                        id: chunk.id,\n                        text: chunk.delta,\n                        providerMetadata: chunk.providerMetadata\n                      });\n                      break;\n                    }\n                    case \"tool-call\": {\n                      controller.enqueue(chunk);\n                      stepToolCalls.push(chunk);\n                      break;\n                    }\n                    case \"tool-result\": {\n                      controller.enqueue(chunk);\n                      if (!chunk.preliminary) {\n                        stepToolOutputs.push(chunk);\n                      }\n                      break;\n                    }\n                    case \"tool-error\": {\n                      controller.enqueue(chunk);\n                      stepToolOutputs.push(chunk);\n                      break;\n                    }\n                    case \"response-metadata\": {\n                      stepResponse = {\n                        id: (_a17 = chunk.id) != null ? _a17 : stepResponse.id,\n                        timestamp: (_b2 = chunk.timestamp) != null ? _b2 : stepResponse.timestamp,\n                        modelId: (_c2 = chunk.modelId) != null ? _c2 : stepResponse.modelId\n                      };\n                      break;\n                    }\n                    case \"finish\": {\n                      stepUsage = chunk.usage;\n                      stepFinishReason = chunk.finishReason;\n                      stepProviderMetadata = chunk.providerMetadata;\n                      const msToFinish = now2() - startTimestampMs;\n                      doStreamSpan.addEvent(\"ai.stream.finish\");\n                      doStreamSpan.setAttributes({\n                        \"ai.response.msToFinish\": msToFinish,\n                        \"ai.response.avgOutputTokensPerSecond\": 1e3 * ((_d2 = stepUsage.outputTokens) != null ? _d2 : 0) / msToFinish\n                      });\n                      break;\n                    }\n                    case \"file\": {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"source\": {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"tool-input-start\": {\n                      activeToolCallToolNames[chunk.id] = chunk.toolName;\n                      const tool2 = tools == null ? void 0 : tools[chunk.toolName];\n                      if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {\n                        await tool2.onInputStart({\n                          toolCallId: chunk.id,\n                          messages: stepInputMessages,\n                          abortSignal,\n                          experimental_context\n                        });\n                      }\n                      controller.enqueue({\n                        ...chunk,\n                        dynamic: (tool2 == null ? void 0 : tool2.type) === \"dynamic\"\n                      });\n                      break;\n                    }\n                    case \"tool-input-end\": {\n                      delete activeToolCallToolNames[chunk.id];\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"tool-input-delta\": {\n                      const toolName = activeToolCallToolNames[chunk.id];\n                      const tool2 = tools == null ? void 0 : tools[toolName];\n                      if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {\n                        await tool2.onInputDelta({\n                          inputTextDelta: chunk.delta,\n                          toolCallId: chunk.id,\n                          messages: stepInputMessages,\n                          abortSignal,\n                          experimental_context\n                        });\n                      }\n                      controller.enqueue(chunk);\n                      break;\n                    }\n                    case \"error\": {\n                      controller.enqueue(chunk);\n                      stepFinishReason = \"error\";\n                      break;\n                    }\n                    case \"raw\": {\n                      if (includeRawChunks2) {\n                        controller.enqueue(chunk);\n                      }\n                      break;\n                    }\n                    default: {\n                      const exhaustiveCheck = chunkType;\n                      throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n                    }\n                  }\n                },\n                // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n                async flush(controller) {\n                  const stepToolCallsJson = stepToolCalls.length > 0 ? JSON.stringify(stepToolCalls) : void 0;\n                  try {\n                    doStreamSpan.setAttributes(\n                      selectTelemetryAttributes({\n                        telemetry,\n                        attributes: {\n                          \"ai.response.finishReason\": stepFinishReason,\n                          \"ai.response.text\": {\n                            output: () => activeText\n                          },\n                          \"ai.response.toolCalls\": {\n                            output: () => stepToolCallsJson\n                          },\n                          \"ai.response.id\": stepResponse.id,\n                          \"ai.response.model\": stepResponse.modelId,\n                          \"ai.response.timestamp\": stepResponse.timestamp.toISOString(),\n                          \"ai.response.providerMetadata\": JSON.stringify(stepProviderMetadata),\n                          \"ai.usage.inputTokens\": stepUsage.inputTokens,\n                          \"ai.usage.outputTokens\": stepUsage.outputTokens,\n                          \"ai.usage.totalTokens\": stepUsage.totalTokens,\n                          \"ai.usage.reasoningTokens\": stepUsage.reasoningTokens,\n                          \"ai.usage.cachedInputTokens\": stepUsage.cachedInputTokens,\n                          // standardized gen-ai llm span attributes:\n                          \"gen_ai.response.finish_reasons\": [stepFinishReason],\n                          \"gen_ai.response.id\": stepResponse.id,\n                          \"gen_ai.response.model\": stepResponse.modelId,\n                          \"gen_ai.usage.input_tokens\": stepUsage.inputTokens,\n                          \"gen_ai.usage.output_tokens\": stepUsage.outputTokens\n                        }\n                      })\n                    );\n                  } catch (error) {\n                  } finally {\n                    doStreamSpan.end();\n                  }\n                  controller.enqueue({\n                    type: \"finish-step\",\n                    finishReason: stepFinishReason,\n                    usage: stepUsage,\n                    providerMetadata: stepProviderMetadata,\n                    response: {\n                      ...stepResponse,\n                      headers: response == null ? void 0 : response.headers\n                    }\n                  });\n                  const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n                  await stepFinish.promise;\n                  const clientToolCalls = stepToolCalls.filter(\n                    (toolCall) => toolCall.providerExecuted !== true\n                  );\n                  const clientToolOutputs = stepToolOutputs.filter(\n                    (toolOutput) => toolOutput.providerExecuted !== true\n                  );\n                  if (clientToolCalls.length > 0 && // all current tool calls have outputs (incl. execution errors):\n                  clientToolOutputs.length === clientToolCalls.length && // continue until a stop condition is met:\n                  !await isStopConditionMet({\n                    stopConditions,\n                    steps: recordedSteps\n                  })) {\n                    responseMessages.push(\n                      ...toResponseMessages({\n                        content: (\n                          // use transformed content to create the messages for the next step:\n                          recordedSteps[recordedSteps.length - 1].content\n                        ),\n                        tools\n                      })\n                    );\n                    try {\n                      await streamStep({\n                        currentStep: currentStep + 1,\n                        responseMessages,\n                        usage: combinedUsage\n                      });\n                    } catch (error) {\n                      controller.enqueue({\n                        type: \"error\",\n                        error\n                      });\n                      self.closeStream();\n                    }\n                  } else {\n                    controller.enqueue({\n                      type: \"finish\",\n                      finishReason: stepFinishReason,\n                      totalUsage: combinedUsage\n                    });\n                    self.closeStream();\n                  }\n                }\n              })\n            )\n          );\n        }\n        await streamStep({\n          currentStep: 0,\n          responseMessages: [],\n          usage: {\n            inputTokens: void 0,\n            outputTokens: void 0,\n            totalTokens: void 0\n          }\n        });\n      }\n    }).catch((error) => {\n      self.addStream(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue({ type: \"error\", error });\n            controller.close();\n          }\n        })\n      );\n      self.closeStream();\n    });\n  }\n  get steps() {\n    this.consumeStream();\n    return this._steps.promise;\n  }\n  get finalStep() {\n    return this.steps.then((steps) => steps[steps.length - 1]);\n  }\n  get content() {\n    return this.finalStep.then((step) => step.content);\n  }\n  get warnings() {\n    return this.finalStep.then((step) => step.warnings);\n  }\n  get providerMetadata() {\n    return this.finalStep.then((step) => step.providerMetadata);\n  }\n  get text() {\n    return this.finalStep.then((step) => step.text);\n  }\n  get reasoningText() {\n    return this.finalStep.then((step) => step.reasoningText);\n  }\n  get reasoning() {\n    return this.finalStep.then((step) => step.reasoning);\n  }\n  get sources() {\n    return this.finalStep.then((step) => step.sources);\n  }\n  get files() {\n    return this.finalStep.then((step) => step.files);\n  }\n  get toolCalls() {\n    return this.finalStep.then((step) => step.toolCalls);\n  }\n  get staticToolCalls() {\n    return this.finalStep.then((step) => step.staticToolCalls);\n  }\n  get dynamicToolCalls() {\n    return this.finalStep.then((step) => step.dynamicToolCalls);\n  }\n  get toolResults() {\n    return this.finalStep.then((step) => step.toolResults);\n  }\n  get staticToolResults() {\n    return this.finalStep.then((step) => step.staticToolResults);\n  }\n  get dynamicToolResults() {\n    return this.finalStep.then((step) => step.dynamicToolResults);\n  }\n  get usage() {\n    return this.finalStep.then((step) => step.usage);\n  }\n  get request() {\n    return this.finalStep.then((step) => step.request);\n  }\n  get response() {\n    return this.finalStep.then((step) => step.response);\n  }\n  get totalUsage() {\n    this.consumeStream();\n    return this._totalUsage.promise;\n  }\n  get finishReason() {\n    this.consumeStream();\n    return this._finishReason.promise;\n  }\n  /**\n  Split out a new stream from the original stream.\n  The original stream is replaced to allow for further splitting,\n  since we do not know how many times the stream will be split.\n  \n  Note: this leads to buffering the stream content on the server.\n  However, the LLM results are expected to be small enough to not cause issues.\n     */\n  teeStream() {\n    const [stream1, stream2] = this.baseStream.tee();\n    this.baseStream = stream2;\n    return stream1;\n  }\n  get textStream() {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream({\n          transform({ part }, controller) {\n            if (part.type === \"text-delta\") {\n              controller.enqueue(part.text);\n            }\n          }\n        })\n      )\n    );\n  }\n  get fullStream() {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream({\n          transform({ part }, controller) {\n            controller.enqueue(part);\n          }\n        })\n      )\n    );\n  }\n  async consumeStream(options) {\n    var _a16;\n    try {\n      await consumeStream({\n        stream: this.fullStream,\n        onError: options == null ? void 0 : options.onError\n      });\n    } catch (error) {\n      (_a16 = options == null ? void 0 : options.onError) == null ? void 0 : _a16.call(options, error);\n    }\n  }\n  get experimental_partialOutputStream() {\n    if (this.output == null) {\n      throw new NoOutputSpecifiedError();\n    }\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream({\n          transform({ partialOutput }, controller) {\n            if (partialOutput != null) {\n              controller.enqueue(partialOutput);\n            }\n          }\n        })\n      )\n    );\n  }\n  toUIMessageStream({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning = true,\n    sendSources = false,\n    sendStart = true,\n    sendFinish = true,\n    onError = getErrorMessage7\n  } = {}) {\n    const responseMessageId = generateMessageId != null ? getResponseUIMessageId({\n      originalMessages,\n      responseMessageId: generateMessageId\n    }) : void 0;\n    const toolNamesByCallId = {};\n    const isDynamic = (toolCallId) => {\n      var _a16, _b;\n      const toolName = toolNamesByCallId[toolCallId];\n      const dynamic = ((_b = (_a16 = this.tools) == null ? void 0 : _a16[toolName]) == null ? void 0 : _b.type) === \"dynamic\";\n      return dynamic ? true : void 0;\n    };\n    const baseStream = this.fullStream.pipeThrough(\n      new TransformStream({\n        transform: async (part, controller) => {\n          const messageMetadataValue = messageMetadata == null ? void 0 : messageMetadata({ part });\n          const partType = part.type;\n          switch (partType) {\n            case \"text-start\": {\n              controller.enqueue({\n                type: \"text-start\",\n                id: part.id,\n                ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n              });\n              break;\n            }\n            case \"text-delta\": {\n              controller.enqueue({\n                type: \"text-delta\",\n                id: part.id,\n                delta: part.text,\n                ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n              });\n              break;\n            }\n            case \"text-end\": {\n              controller.enqueue({\n                type: \"text-end\",\n                id: part.id,\n                ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n              });\n              break;\n            }\n            case \"reasoning-start\": {\n              controller.enqueue({\n                type: \"reasoning-start\",\n                id: part.id,\n                ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n              });\n              break;\n            }\n            case \"reasoning-delta\": {\n              if (sendReasoning) {\n                controller.enqueue({\n                  type: \"reasoning-delta\",\n                  id: part.id,\n                  delta: part.text,\n                  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n                });\n              }\n              break;\n            }\n            case \"reasoning-end\": {\n              controller.enqueue({\n                type: \"reasoning-end\",\n                id: part.id,\n                ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n              });\n              break;\n            }\n            case \"file\": {\n              controller.enqueue({\n                type: \"file\",\n                mediaType: part.file.mediaType,\n                url: `data:${part.file.mediaType};base64,${part.file.base64}`\n              });\n              break;\n            }\n            case \"source\": {\n              if (sendSources && part.sourceType === \"url\") {\n                controller.enqueue({\n                  type: \"source-url\",\n                  sourceId: part.id,\n                  url: part.url,\n                  title: part.title,\n                  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n                });\n              }\n              if (sendSources && part.sourceType === \"document\") {\n                controller.enqueue({\n                  type: \"source-document\",\n                  sourceId: part.id,\n                  mediaType: part.mediaType,\n                  title: part.title,\n                  filename: part.filename,\n                  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n                });\n              }\n              break;\n            }\n            case \"tool-input-start\": {\n              toolNamesByCallId[part.id] = part.toolName;\n              const dynamic = isDynamic(part.id);\n              controller.enqueue({\n                type: \"tool-input-start\",\n                toolCallId: part.id,\n                toolName: part.toolName,\n                ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n                ...dynamic != null ? { dynamic } : {}\n              });\n              break;\n            }\n            case \"tool-input-delta\": {\n              controller.enqueue({\n                type: \"tool-input-delta\",\n                toolCallId: part.id,\n                inputTextDelta: part.delta\n              });\n              break;\n            }\n            case \"tool-call\": {\n              toolNamesByCallId[part.toolCallId] = part.toolName;\n              const dynamic = isDynamic(part.toolCallId);\n              if (part.invalid) {\n                controller.enqueue({\n                  type: \"tool-input-error\",\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n                  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n                  ...dynamic != null ? { dynamic } : {},\n                  errorText: onError(part.error)\n                });\n              } else {\n                controller.enqueue({\n                  type: \"tool-input-available\",\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n                  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n                  ...dynamic != null ? { dynamic } : {}\n                });\n              }\n              break;\n            }\n            case \"tool-result\": {\n              const dynamic = isDynamic(part.toolCallId);\n              controller.enqueue({\n                type: \"tool-output-available\",\n                toolCallId: part.toolCallId,\n                output: part.output,\n                ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n                ...part.preliminary != null ? { preliminary: part.preliminary } : {},\n                ...dynamic != null ? { dynamic } : {}\n              });\n              break;\n            }\n            case \"tool-error\": {\n              const dynamic = isDynamic(part.toolCallId);\n              controller.enqueue({\n                type: \"tool-output-error\",\n                toolCallId: part.toolCallId,\n                errorText: onError(part.error),\n                ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n                ...dynamic != null ? { dynamic } : {}\n              });\n              break;\n            }\n            case \"error\": {\n              controller.enqueue({\n                type: \"error\",\n                errorText: onError(part.error)\n              });\n              break;\n            }\n            case \"start-step\": {\n              controller.enqueue({ type: \"start-step\" });\n              break;\n            }\n            case \"finish-step\": {\n              controller.enqueue({ type: \"finish-step\" });\n              break;\n            }\n            case \"start\": {\n              if (sendStart) {\n                controller.enqueue({\n                  type: \"start\",\n                  ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {},\n                  ...responseMessageId != null ? { messageId: responseMessageId } : {}\n                });\n              }\n              break;\n            }\n            case \"finish\": {\n              if (sendFinish) {\n                controller.enqueue({\n                  type: \"finish\",\n                  finishReason: part.finishReason,\n                  ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {}\n                });\n              }\n              break;\n            }\n            case \"abort\": {\n              controller.enqueue(part);\n              break;\n            }\n            case \"tool-input-end\": {\n              break;\n            }\n            case \"raw\": {\n              break;\n            }\n            default: {\n              const exhaustiveCheck = partType;\n              throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n            }\n          }\n          if (messageMetadataValue != null && partType !== \"start\" && partType !== \"finish\") {\n            controller.enqueue({\n              type: \"message-metadata\",\n              messageMetadata: messageMetadataValue\n            });\n          }\n        }\n      })\n    );\n    return createAsyncIterableStream(\n      handleUIMessageStreamFinish({\n        stream: baseStream,\n        messageId: responseMessageId != null ? responseMessageId : generateMessageId == null ? void 0 : generateMessageId(),\n        originalMessages,\n        onFinish,\n        onError\n      })\n    );\n  }\n  pipeUIMessageStreamToResponse(response, {\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning,\n    sendSources,\n    sendFinish,\n    sendStart,\n    onError,\n    ...init\n  } = {}) {\n    pipeUIMessageStreamToResponse({\n      response,\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError\n      }),\n      ...init\n    });\n  }\n  pipeTextStreamToResponse(response, init) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init\n    });\n  }\n  toUIMessageStreamResponse({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning,\n    sendSources,\n    sendFinish,\n    sendStart,\n    onError,\n    ...init\n  } = {}) {\n    return createUIMessageStreamResponse({\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError\n      }),\n      ...init\n    });\n  }\n  toTextStreamResponse(init) {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init\n    });\n  }\n};\n\n// src/ui/convert-to-model-messages.ts\nfunction convertToModelMessages(messages, options) {\n  const modelMessages = [];\n  if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {\n    messages = messages.map((message) => ({\n      ...message,\n      parts: message.parts.filter(\n        (part) => !isToolOrDynamicToolUIPart(part) || part.state !== \"input-streaming\" && part.state !== \"input-available\"\n      )\n    }));\n  }\n  for (const message of messages) {\n    switch (message.role) {\n      case \"system\": {\n        const textParts = message.parts.filter(\n          (part) => part.type === \"text\"\n        );\n        const providerMetadata = textParts.reduce((acc, part) => {\n          if (part.providerMetadata != null) {\n            return { ...acc, ...part.providerMetadata };\n          }\n          return acc;\n        }, {});\n        modelMessages.push({\n          role: \"system\",\n          content: textParts.map((part) => part.text).join(\"\"),\n          ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}\n        });\n        break;\n      }\n      case \"user\": {\n        modelMessages.push({\n          role: \"user\",\n          content: message.parts.map((part) => {\n            var _a16;\n            if (isTextUIPart(part)) {\n              return {\n                type: \"text\",\n                text: part.text,\n                ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n              };\n            }\n            if (isFileUIPart(part)) {\n              return {\n                type: \"file\",\n                mediaType: part.mediaType,\n                filename: part.filename,\n                data: part.url,\n                ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n              };\n            }\n            if (isDataUIPart(part)) {\n              return (_a16 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a16.call(\n                options,\n                part\n              );\n            }\n          }).filter((part) => part != null)\n        });\n        break;\n      }\n      case \"assistant\": {\n        if (message.parts != null) {\n          let processBlock2 = function() {\n            var _a16, _b, _c;\n            if (block.length === 0) {\n              return;\n            }\n            const content = [];\n            for (const part of block) {\n              if (isTextUIPart(part)) {\n                content.push({\n                  type: \"text\",\n                  text: part.text,\n                  ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n                });\n              } else if (isFileUIPart(part)) {\n                content.push({\n                  type: \"file\",\n                  mediaType: part.mediaType,\n                  filename: part.filename,\n                  data: part.url\n                });\n              } else if (isReasoningUIPart(part)) {\n                content.push({\n                  type: \"reasoning\",\n                  text: part.text,\n                  providerOptions: part.providerMetadata\n                });\n              } else if (isDynamicToolUIPart(part)) {\n                const toolName = part.toolName;\n                if (part.state !== \"input-streaming\") {\n                  content.push({\n                    type: \"tool-call\",\n                    toolCallId: part.toolCallId,\n                    toolName,\n                    input: part.input,\n                    ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}\n                  });\n                }\n              } else if (isToolUIPart(part)) {\n                const toolName = getToolName(part);\n                if (part.state !== \"input-streaming\") {\n                  content.push({\n                    type: \"tool-call\",\n                    toolCallId: part.toolCallId,\n                    toolName,\n                    input: part.state === \"output-error\" ? (_a16 = part.input) != null ? _a16 : part.rawInput : part.input,\n                    providerExecuted: part.providerExecuted,\n                    ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}\n                  });\n                  if (part.providerExecuted === true && (part.state === \"output-available\" || part.state === \"output-error\")) {\n                    content.push({\n                      type: \"tool-result\",\n                      toolCallId: part.toolCallId,\n                      toolName,\n                      output: createToolModelOutput({\n                        output: part.state === \"output-error\" ? part.errorText : part.output,\n                        tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],\n                        errorMode: part.state === \"output-error\" ? \"json\" : \"none\"\n                      }),\n                      ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}\n                    });\n                  }\n                }\n              } else if (isDataUIPart(part)) {\n                const dataPart = (_c = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _c.call(\n                  options,\n                  part\n                );\n                if (dataPart != null) {\n                  content.push(dataPart);\n                }\n              } else {\n                const _exhaustiveCheck = part;\n                throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n              }\n            }\n            modelMessages.push({\n              role: \"assistant\",\n              content\n            });\n            const toolParts = block.filter(\n              (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === \"dynamic-tool\"\n            );\n            if (toolParts.length > 0) {\n              modelMessages.push({\n                role: \"tool\",\n                content: toolParts.map((toolPart) => {\n                  var _a17;\n                  switch (toolPart.state) {\n                    case \"output-error\":\n                    case \"output-available\": {\n                      const toolName = getToolOrDynamicToolName(toolPart);\n                      return {\n                        type: \"tool-result\",\n                        toolCallId: toolPart.toolCallId,\n                        toolName,\n                        output: createToolModelOutput({\n                          output: toolPart.state === \"output-error\" ? toolPart.errorText : toolPart.output,\n                          tool: (_a17 = options == null ? void 0 : options.tools) == null ? void 0 : _a17[toolName],\n                          errorMode: toolPart.state === \"output-error\" ? \"text\" : \"none\"\n                        }),\n                        ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}\n                      };\n                    }\n                    default: {\n                      return null;\n                    }\n                  }\n                }).filter(\n                  (output) => output != null\n                )\n              });\n            }\n            block = [];\n          };\n          var processBlock = processBlock2;\n          let block = [];\n          for (const part of message.parts) {\n            if (isTextUIPart(part) || isReasoningUIPart(part) || isFileUIPart(part) || isToolOrDynamicToolUIPart(part) || isDataUIPart(part)) {\n              block.push(part);\n            } else if (part.type === \"step-start\") {\n              processBlock2();\n            }\n          }\n          processBlock2();\n          break;\n        }\n        break;\n      }\n      default: {\n        const _exhaustiveCheck = message.role;\n        throw new MessageConversionError({\n          originalMessage: message,\n          message: `Unsupported role: ${_exhaustiveCheck}`\n        });\n      }\n    }\n  }\n  return modelMessages;\n}\nvar convertToCoreMessages = convertToModelMessages;\n\n// src/agent/agent.ts\nvar Agent = class {\n  constructor(settings) {\n    this.settings = settings;\n  }\n  get tools() {\n    return this.settings.tools;\n  }\n  async generate(options) {\n    return generateText({ ...this.settings, ...options });\n  }\n  stream(options) {\n    return streamText({ ...this.settings, ...options });\n  }\n  /**\n   * Creates a response object that streams UI messages to the client.\n   */\n  respond(options) {\n    return this.stream({\n      prompt: convertToModelMessages(options.messages)\n    }).toUIMessageStreamResponse();\n  }\n};\n\n// src/embed/embed.ts\nimport { withUserAgentSuffix as withUserAgentSuffix3 } from \"@ai-sdk/provider-utils\";\nasync function embed({\n  model: modelArg,\n  value,\n  providerOptions,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  experimental_telemetry: telemetry\n}) {\n  const model = resolveEmbeddingModel(modelArg);\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const headersWithUserAgent = withUserAgentSuffix3(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { maxRetries }\n  });\n  const tracer = getTracer(telemetry);\n  return recordSpan({\n    name: \"ai.embed\",\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({ operationId: \"ai.embed\", telemetry }),\n        ...baseTelemetryAttributes,\n        \"ai.value\": { input: () => JSON.stringify(value) }\n      }\n    }),\n    tracer,\n    fn: async (span) => {\n      const { embedding, usage, response, providerMetadata } = await retry(\n        () => (\n          // nested spans to align with the embedMany telemetry data:\n          recordSpan({\n            name: \"ai.embed.doEmbed\",\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: \"ai.embed.doEmbed\",\n                  telemetry\n                }),\n                ...baseTelemetryAttributes,\n                // specific settings that only make sense on the outer level:\n                \"ai.values\": { input: () => [JSON.stringify(value)] }\n              }\n            }),\n            tracer,\n            fn: async (doEmbedSpan) => {\n              var _a16;\n              const modelResponse = await model.doEmbed({\n                values: [value],\n                abortSignal,\n                headers: headersWithUserAgent,\n                providerOptions\n              });\n              const embedding2 = modelResponse.embeddings[0];\n              const usage2 = (_a16 = modelResponse.usage) != null ? _a16 : { tokens: NaN };\n              doEmbedSpan.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    \"ai.embeddings\": {\n                      output: () => modelResponse.embeddings.map(\n                        (embedding3) => JSON.stringify(embedding3)\n                      )\n                    },\n                    \"ai.usage.tokens\": usage2.tokens\n                  }\n                })\n              );\n              return {\n                embedding: embedding2,\n                usage: usage2,\n                providerMetadata: modelResponse.providerMetadata,\n                response: modelResponse.response\n              };\n            }\n          })\n        )\n      );\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            \"ai.embedding\": { output: () => JSON.stringify(embedding) },\n            \"ai.usage.tokens\": usage.tokens\n          }\n        })\n      );\n      return new DefaultEmbedResult({\n        value,\n        embedding,\n        usage,\n        providerMetadata,\n        response\n      });\n    }\n  });\n}\nvar DefaultEmbedResult = class {\n  constructor(options) {\n    this.value = options.value;\n    this.embedding = options.embedding;\n    this.usage = options.usage;\n    this.providerMetadata = options.providerMetadata;\n    this.response = options.response;\n  }\n};\n\n// src/embed/embed-many.ts\nimport { withUserAgentSuffix as withUserAgentSuffix4 } from \"@ai-sdk/provider-utils\";\n\n// src/util/split-array.ts\nfunction splitArray(array, chunkSize) {\n  if (chunkSize <= 0) {\n    throw new Error(\"chunkSize must be greater than 0\");\n  }\n  const result = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    result.push(array.slice(i, i + chunkSize));\n  }\n  return result;\n}\n\n// src/embed/embed-many.ts\nasync function embedMany({\n  model: modelArg,\n  values,\n  maxParallelCalls = Infinity,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  providerOptions,\n  experimental_telemetry: telemetry\n}) {\n  const model = resolveEmbeddingModel(modelArg);\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const headersWithUserAgent = withUserAgentSuffix4(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { maxRetries }\n  });\n  const tracer = getTracer(telemetry);\n  return recordSpan({\n    name: \"ai.embedMany\",\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({ operationId: \"ai.embedMany\", telemetry }),\n        ...baseTelemetryAttributes,\n        // specific settings that only make sense on the outer level:\n        \"ai.values\": {\n          input: () => values.map((value) => JSON.stringify(value))\n        }\n      }\n    }),\n    tracer,\n    fn: async (span) => {\n      var _a16;\n      const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([\n        model.maxEmbeddingsPerCall,\n        model.supportsParallelCalls\n      ]);\n      if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {\n        const { embeddings: embeddings2, usage, response, providerMetadata: providerMetadata2 } = await retry(\n          () => {\n            return recordSpan({\n              name: \"ai.embedMany.doEmbed\",\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: \"ai.embedMany.doEmbed\",\n                    telemetry\n                  }),\n                  ...baseTelemetryAttributes,\n                  // specific settings that only make sense on the outer level:\n                  \"ai.values\": {\n                    input: () => values.map((value) => JSON.stringify(value))\n                  }\n                }\n              }),\n              tracer,\n              fn: async (doEmbedSpan) => {\n                var _a17;\n                const modelResponse = await model.doEmbed({\n                  values,\n                  abortSignal,\n                  headers: headersWithUserAgent,\n                  providerOptions\n                });\n                const embeddings3 = modelResponse.embeddings;\n                const usage2 = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };\n                doEmbedSpan.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      \"ai.embeddings\": {\n                        output: () => embeddings3.map(\n                          (embedding) => JSON.stringify(embedding)\n                        )\n                      },\n                      \"ai.usage.tokens\": usage2.tokens\n                    }\n                  })\n                );\n                return {\n                  embeddings: embeddings3,\n                  usage: usage2,\n                  providerMetadata: modelResponse.providerMetadata,\n                  response: modelResponse.response\n                };\n              }\n            });\n          }\n        );\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              \"ai.embeddings\": {\n                output: () => embeddings2.map((embedding) => JSON.stringify(embedding))\n              },\n              \"ai.usage.tokens\": usage.tokens\n            }\n          })\n        );\n        return new DefaultEmbedManyResult({\n          values,\n          embeddings: embeddings2,\n          usage,\n          providerMetadata: providerMetadata2,\n          responses: [response]\n        });\n      }\n      const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n      const embeddings = [];\n      const responses = [];\n      let tokens = 0;\n      let providerMetadata;\n      const parallelChunks = splitArray(\n        valueChunks,\n        supportsParallelCalls ? maxParallelCalls : 1\n      );\n      for (const parallelChunk of parallelChunks) {\n        const results = await Promise.all(\n          parallelChunk.map((chunk) => {\n            return retry(() => {\n              return recordSpan({\n                name: \"ai.embedMany.doEmbed\",\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: \"ai.embedMany.doEmbed\",\n                      telemetry\n                    }),\n                    ...baseTelemetryAttributes,\n                    // specific settings that only make sense on the outer level:\n                    \"ai.values\": {\n                      input: () => chunk.map((value) => JSON.stringify(value))\n                    }\n                  }\n                }),\n                tracer,\n                fn: async (doEmbedSpan) => {\n                  var _a17;\n                  const modelResponse = await model.doEmbed({\n                    values: chunk,\n                    abortSignal,\n                    headers: headersWithUserAgent,\n                    providerOptions\n                  });\n                  const embeddings2 = modelResponse.embeddings;\n                  const usage = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };\n                  doEmbedSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        \"ai.embeddings\": {\n                          output: () => embeddings2.map(\n                            (embedding) => JSON.stringify(embedding)\n                          )\n                        },\n                        \"ai.usage.tokens\": usage.tokens\n                      }\n                    })\n                  );\n                  return {\n                    embeddings: embeddings2,\n                    usage,\n                    providerMetadata: modelResponse.providerMetadata,\n                    response: modelResponse.response\n                  };\n                }\n              });\n            });\n          })\n        );\n        for (const result of results) {\n          embeddings.push(...result.embeddings);\n          responses.push(result.response);\n          tokens += result.usage.tokens;\n          if (result.providerMetadata) {\n            if (!providerMetadata) {\n              providerMetadata = { ...result.providerMetadata };\n            } else {\n              for (const [providerName, metadata] of Object.entries(\n                result.providerMetadata\n              )) {\n                providerMetadata[providerName] = {\n                  ...(_a16 = providerMetadata[providerName]) != null ? _a16 : {},\n                  ...metadata\n                };\n              }\n            }\n          }\n        }\n      }\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            \"ai.embeddings\": {\n              output: () => embeddings.map((embedding) => JSON.stringify(embedding))\n            },\n            \"ai.usage.tokens\": tokens\n          }\n        })\n      );\n      return new DefaultEmbedManyResult({\n        values,\n        embeddings,\n        usage: { tokens },\n        providerMetadata,\n        responses\n      });\n    }\n  });\n}\nvar DefaultEmbedManyResult = class {\n  constructor(options) {\n    this.values = options.values;\n    this.embeddings = options.embeddings;\n    this.usage = options.usage;\n    this.providerMetadata = options.providerMetadata;\n    this.responses = options.responses;\n  }\n};\n\n// src/generate-image/generate-image.ts\nimport { withUserAgentSuffix as withUserAgentSuffix5 } from \"@ai-sdk/provider-utils\";\nasync function generateImage({\n  model: modelArg,\n  prompt,\n  n = 1,\n  maxImagesPerCall,\n  size,\n  aspectRatio,\n  seed,\n  providerOptions,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers\n}) {\n  var _a16, _b;\n  const model = resolveImageModel(modelArg);\n  const headersWithUserAgent = withUserAgentSuffix5(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const { retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const maxImagesPerCallWithDefault = (_a16 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a16 : 1;\n  const callCount = Math.ceil(n / maxImagesPerCallWithDefault);\n  const callImageCounts = Array.from({ length: callCount }, (_, i) => {\n    if (i < callCount - 1) {\n      return maxImagesPerCallWithDefault;\n    }\n    const remainder = n % maxImagesPerCallWithDefault;\n    return remainder === 0 ? maxImagesPerCallWithDefault : remainder;\n  });\n  const results = await Promise.all(\n    callImageCounts.map(\n      async (callImageCount) => retry(\n        () => model.doGenerate({\n          prompt,\n          n: callImageCount,\n          abortSignal,\n          headers: headersWithUserAgent,\n          size,\n          aspectRatio,\n          seed,\n          providerOptions: providerOptions != null ? providerOptions : {}\n        })\n      )\n    )\n  );\n  const images = [];\n  const warnings = [];\n  const responses = [];\n  const providerMetadata = {};\n  for (const result of results) {\n    images.push(\n      ...result.images.map(\n        (image) => {\n          var _a17;\n          return new DefaultGeneratedFile({\n            data: image,\n            mediaType: (_a17 = detectMediaType({\n              data: image,\n              signatures: imageMediaTypeSignatures\n            })) != null ? _a17 : \"image/png\"\n          });\n        }\n      )\n    );\n    warnings.push(...result.warnings);\n    if (result.providerMetadata) {\n      for (const [providerName, metadata] of Object.entries(result.providerMetadata)) {\n        if (providerName === \"gateway\") {\n          const currentEntry = providerMetadata[providerName];\n          if (currentEntry != null && typeof currentEntry === \"object\") {\n            providerMetadata[providerName] = {\n              ...currentEntry,\n              ...metadata\n            };\n          } else {\n            providerMetadata[providerName] = metadata;\n          }\n          const imagesValue = providerMetadata[providerName].images;\n          if (Array.isArray(imagesValue) && imagesValue.length === 0) {\n            delete providerMetadata[providerName].images;\n          }\n        } else {\n          (_b = providerMetadata[providerName]) != null ? _b : providerMetadata[providerName] = { images: [] };\n          providerMetadata[providerName].images.push(\n            ...result.providerMetadata[providerName].images\n          );\n        }\n      }\n    }\n    responses.push(result.response);\n  }\n  logWarnings(warnings);\n  if (!images.length) {\n    throw new NoImageGeneratedError({ responses });\n  }\n  return new DefaultGenerateImageResult({\n    images,\n    warnings,\n    responses,\n    providerMetadata\n  });\n}\nvar DefaultGenerateImageResult = class {\n  constructor(options) {\n    this.images = options.images;\n    this.warnings = options.warnings;\n    this.responses = options.responses;\n    this.providerMetadata = options.providerMetadata;\n  }\n  get image() {\n    return this.images[0];\n  }\n};\nasync function invokeModelMaxImagesPerCall(model) {\n  const isFunction = model.maxImagesPerCall instanceof Function;\n  if (!isFunction) {\n    return model.maxImagesPerCall;\n  }\n  return model.maxImagesPerCall({\n    modelId: model.modelId\n  });\n}\n\n// src/generate-object/generate-object.ts\nimport {\n  createIdGenerator as createIdGenerator3,\n  withUserAgentSuffix as withUserAgentSuffix6\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-text/extract-reasoning-content.ts\nfunction extractReasoningContent(content) {\n  const parts = content.filter(\n    (content2) => content2.type === \"reasoning\"\n  );\n  return parts.length === 0 ? void 0 : parts.map((content2) => content2.text).join(\"\\n\");\n}\n\n// src/generate-object/output-strategy.ts\nimport {\n  isJSONArray,\n  isJSONObject,\n  TypeValidationError as TypeValidationError2,\n  UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nimport {\n  asSchema as asSchema3,\n  safeValidateTypes as safeValidateTypes3\n} from \"@ai-sdk/provider-utils\";\nvar noSchemaOutputStrategy = {\n  type: \"no-schema\",\n  jsonSchema: void 0,\n  async validatePartialResult({ value, textDelta }) {\n    return { success: true, value: { partial: value, textDelta } };\n  },\n  async validateFinalResult(value, context) {\n    return value === void 0 ? {\n      success: false,\n      error: new NoObjectGeneratedError({\n        message: \"No object generated: response did not match schema.\",\n        text: context.text,\n        response: context.response,\n        usage: context.usage,\n        finishReason: context.finishReason\n      })\n    } : { success: true, value };\n  },\n  createElementStream() {\n    throw new UnsupportedFunctionalityError2({\n      functionality: \"element streams in no-schema mode\"\n    });\n  }\n};\nvar objectOutputStrategy = (schema) => ({\n  type: \"object\",\n  jsonSchema: schema.jsonSchema,\n  async validatePartialResult({ value, textDelta }) {\n    return {\n      success: true,\n      value: {\n        // Note: currently no validation of partial results:\n        partial: value,\n        textDelta\n      }\n    };\n  },\n  async validateFinalResult(value) {\n    return safeValidateTypes3({ value, schema });\n  },\n  createElementStream() {\n    throw new UnsupportedFunctionalityError2({\n      functionality: \"element streams in object mode\"\n    });\n  }\n});\nvar arrayOutputStrategy = (schema) => {\n  const { $schema, ...itemSchema } = schema.jsonSchema;\n  return {\n    type: \"array\",\n    // wrap in object that contains array of elements, since most LLMs will not\n    // be able to generate an array directly:\n    // possible future optimization: use arrays directly when model supports grammar-guided generation\n    jsonSchema: {\n      $schema: \"http://json-schema.org/draft-07/schema#\",\n      type: \"object\",\n      properties: {\n        elements: { type: \"array\", items: itemSchema }\n      },\n      required: [\"elements\"],\n      additionalProperties: false\n    },\n    async validatePartialResult({\n      value,\n      latestObject,\n      isFirstDelta,\n      isFinalDelta\n    }) {\n      var _a16;\n      if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n        return {\n          success: false,\n          error: new TypeValidationError2({\n            value,\n            cause: \"value must be an object that contains an array of elements\"\n          })\n        };\n      }\n      const inputArray = value.elements;\n      const resultArray = [];\n      for (let i = 0; i < inputArray.length; i++) {\n        const element = inputArray[i];\n        const result = await safeValidateTypes3({ value: element, schema });\n        if (i === inputArray.length - 1 && !isFinalDelta) {\n          continue;\n        }\n        if (!result.success) {\n          return result;\n        }\n        resultArray.push(result.value);\n      }\n      const publishedElementCount = (_a16 = latestObject == null ? void 0 : latestObject.length) != null ? _a16 : 0;\n      let textDelta = \"\";\n      if (isFirstDelta) {\n        textDelta += \"[\";\n      }\n      if (publishedElementCount > 0) {\n        textDelta += \",\";\n      }\n      textDelta += resultArray.slice(publishedElementCount).map((element) => JSON.stringify(element)).join(\",\");\n      if (isFinalDelta) {\n        textDelta += \"]\";\n      }\n      return {\n        success: true,\n        value: {\n          partial: resultArray,\n          textDelta\n        }\n      };\n    },\n    async validateFinalResult(value) {\n      if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n        return {\n          success: false,\n          error: new TypeValidationError2({\n            value,\n            cause: \"value must be an object that contains an array of elements\"\n          })\n        };\n      }\n      const inputArray = value.elements;\n      for (const element of inputArray) {\n        const result = await safeValidateTypes3({ value: element, schema });\n        if (!result.success) {\n          return result;\n        }\n      }\n      return { success: true, value: inputArray };\n    },\n    createElementStream(originalStream) {\n      let publishedElements = 0;\n      return createAsyncIterableStream(\n        originalStream.pipeThrough(\n          new TransformStream({\n            transform(chunk, controller) {\n              switch (chunk.type) {\n                case \"object\": {\n                  const array = chunk.object;\n                  for (; publishedElements < array.length; publishedElements++) {\n                    controller.enqueue(array[publishedElements]);\n                  }\n                  break;\n                }\n                case \"text-delta\":\n                case \"finish\":\n                case \"error\":\n                  break;\n                default: {\n                  const _exhaustiveCheck = chunk;\n                  throw new Error(\n                    `Unsupported chunk type: ${_exhaustiveCheck}`\n                  );\n                }\n              }\n            }\n          })\n        )\n      );\n    }\n  };\n};\nvar enumOutputStrategy = (enumValues) => {\n  return {\n    type: \"enum\",\n    // wrap in object that contains result, since most LLMs will not\n    // be able to generate an enum value directly:\n    // possible future optimization: use enums directly when model supports top-level enums\n    jsonSchema: {\n      $schema: \"http://json-schema.org/draft-07/schema#\",\n      type: \"object\",\n      properties: {\n        result: { type: \"string\", enum: enumValues }\n      },\n      required: [\"result\"],\n      additionalProperties: false\n    },\n    async validateFinalResult(value) {\n      if (!isJSONObject(value) || typeof value.result !== \"string\") {\n        return {\n          success: false,\n          error: new TypeValidationError2({\n            value,\n            cause: 'value must be an object that contains a string in the \"result\" property.'\n          })\n        };\n      }\n      const result = value.result;\n      return enumValues.includes(result) ? { success: true, value: result } : {\n        success: false,\n        error: new TypeValidationError2({\n          value,\n          cause: \"value must be a string in the enum\"\n        })\n      };\n    },\n    async validatePartialResult({ value, textDelta }) {\n      if (!isJSONObject(value) || typeof value.result !== \"string\") {\n        return {\n          success: false,\n          error: new TypeValidationError2({\n            value,\n            cause: 'value must be an object that contains a string in the \"result\" property.'\n          })\n        };\n      }\n      const result = value.result;\n      const possibleEnumValues = enumValues.filter(\n        (enumValue) => enumValue.startsWith(result)\n      );\n      if (value.result.length === 0 || possibleEnumValues.length === 0) {\n        return {\n          success: false,\n          error: new TypeValidationError2({\n            value,\n            cause: \"value must be a string in the enum\"\n          })\n        };\n      }\n      return {\n        success: true,\n        value: {\n          partial: possibleEnumValues.length > 1 ? result : possibleEnumValues[0],\n          textDelta\n        }\n      };\n    },\n    createElementStream() {\n      throw new UnsupportedFunctionalityError2({\n        functionality: \"element streams in enum mode\"\n      });\n    }\n  };\n};\nfunction getOutputStrategy({\n  output,\n  schema,\n  enumValues\n}) {\n  switch (output) {\n    case \"object\":\n      return objectOutputStrategy(asSchema3(schema));\n    case \"array\":\n      return arrayOutputStrategy(asSchema3(schema));\n    case \"enum\":\n      return enumOutputStrategy(enumValues);\n    case \"no-schema\":\n      return noSchemaOutputStrategy;\n    default: {\n      const _exhaustiveCheck = output;\n      throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n    }\n  }\n}\n\n// src/generate-object/parse-and-validate-object-result.ts\nimport { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError3 } from \"@ai-sdk/provider\";\nimport { safeParseJSON as safeParseJSON3 } from \"@ai-sdk/provider-utils\";\nasync function parseAndValidateObjectResult(result, outputStrategy, context) {\n  const parseResult = await safeParseJSON3({ text: result });\n  if (!parseResult.success) {\n    throw new NoObjectGeneratedError({\n      message: \"No object generated: could not parse the response.\",\n      cause: parseResult.error,\n      text: result,\n      response: context.response,\n      usage: context.usage,\n      finishReason: context.finishReason\n    });\n  }\n  const validationResult = await outputStrategy.validateFinalResult(\n    parseResult.value,\n    {\n      text: result,\n      response: context.response,\n      usage: context.usage\n    }\n  );\n  if (!validationResult.success) {\n    throw new NoObjectGeneratedError({\n      message: \"No object generated: response did not match schema.\",\n      cause: validationResult.error,\n      text: result,\n      response: context.response,\n      usage: context.usage,\n      finishReason: context.finishReason\n    });\n  }\n  return validationResult.value;\n}\nasync function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {\n  try {\n    return await parseAndValidateObjectResult(result, outputStrategy, context);\n  } catch (error) {\n    if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError3.isInstance(error.cause))) {\n      const repairedText = await repairText({\n        text: result,\n        error: error.cause\n      });\n      if (repairedText === null) {\n        throw error;\n      }\n      return await parseAndValidateObjectResult(\n        repairedText,\n        outputStrategy,\n        context\n      );\n    }\n    throw error;\n  }\n}\n\n// src/generate-object/validate-object-generation-input.ts\nfunction validateObjectGenerationInput({\n  output,\n  schema,\n  schemaName,\n  schemaDescription,\n  enumValues\n}) {\n  if (output != null && output !== \"object\" && output !== \"array\" && output !== \"enum\" && output !== \"no-schema\") {\n    throw new InvalidArgumentError({\n      parameter: \"output\",\n      value: output,\n      message: \"Invalid output type.\"\n    });\n  }\n  if (output === \"no-schema\") {\n    if (schema != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schema\",\n        value: schema,\n        message: \"Schema is not supported for no-schema output.\"\n      });\n    }\n    if (schemaDescription != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schemaDescription\",\n        value: schemaDescription,\n        message: \"Schema description is not supported for no-schema output.\"\n      });\n    }\n    if (schemaName != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schemaName\",\n        value: schemaName,\n        message: \"Schema name is not supported for no-schema output.\"\n      });\n    }\n    if (enumValues != null) {\n      throw new InvalidArgumentError({\n        parameter: \"enumValues\",\n        value: enumValues,\n        message: \"Enum values are not supported for no-schema output.\"\n      });\n    }\n  }\n  if (output === \"object\") {\n    if (schema == null) {\n      throw new InvalidArgumentError({\n        parameter: \"schema\",\n        value: schema,\n        message: \"Schema is required for object output.\"\n      });\n    }\n    if (enumValues != null) {\n      throw new InvalidArgumentError({\n        parameter: \"enumValues\",\n        value: enumValues,\n        message: \"Enum values are not supported for object output.\"\n      });\n    }\n  }\n  if (output === \"array\") {\n    if (schema == null) {\n      throw new InvalidArgumentError({\n        parameter: \"schema\",\n        value: schema,\n        message: \"Element schema is required for array output.\"\n      });\n    }\n    if (enumValues != null) {\n      throw new InvalidArgumentError({\n        parameter: \"enumValues\",\n        value: enumValues,\n        message: \"Enum values are not supported for array output.\"\n      });\n    }\n  }\n  if (output === \"enum\") {\n    if (schema != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schema\",\n        value: schema,\n        message: \"Schema is not supported for enum output.\"\n      });\n    }\n    if (schemaDescription != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schemaDescription\",\n        value: schemaDescription,\n        message: \"Schema description is not supported for enum output.\"\n      });\n    }\n    if (schemaName != null) {\n      throw new InvalidArgumentError({\n        parameter: \"schemaName\",\n        value: schemaName,\n        message: \"Schema name is not supported for enum output.\"\n      });\n    }\n    if (enumValues == null) {\n      throw new InvalidArgumentError({\n        parameter: \"enumValues\",\n        value: enumValues,\n        message: \"Enum values are required for enum output.\"\n      });\n    }\n    for (const value of enumValues) {\n      if (typeof value !== \"string\") {\n        throw new InvalidArgumentError({\n          parameter: \"enumValues\",\n          value,\n          message: \"Enum values must be strings.\"\n        });\n      }\n    }\n  }\n}\n\n// src/generate-object/generate-object.ts\nvar originalGenerateId3 = createIdGenerator3({ prefix: \"aiobj\", size: 24 });\nasync function generateObject(options) {\n  const {\n    model: modelArg,\n    output = \"object\",\n    system,\n    prompt,\n    messages,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download2,\n    providerOptions,\n    _internal: {\n      generateId: generateId3 = originalGenerateId3,\n      currentDate = () => /* @__PURE__ */ new Date()\n    } = {},\n    ...settings\n  } = options;\n  const model = resolveLanguageModel(modelArg);\n  const enumValues = \"enum\" in options ? options.enum : void 0;\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName\n  } = \"schema\" in options ? options : {};\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues\n  });\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues\n  });\n  const callSettings = prepareCallSettings(settings);\n  const headersWithUserAgent = withUserAgentSuffix6(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries }\n  });\n  const tracer = getTracer(telemetry);\n  try {\n    return await recordSpan({\n      name: \"ai.generateObject\",\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: \"ai.generateObject\",\n            telemetry\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          \"ai.prompt\": {\n            input: () => JSON.stringify({ system, prompt, messages })\n          },\n          \"ai.schema\": outputStrategy.jsonSchema != null ? { input: () => JSON.stringify(outputStrategy.jsonSchema) } : void 0,\n          \"ai.schema.name\": schemaName,\n          \"ai.schema.description\": schemaDescription,\n          \"ai.settings.output\": outputStrategy.type\n        }\n      }),\n      tracer,\n      fn: async (span) => {\n        var _a16;\n        let result;\n        let finishReason;\n        let usage;\n        let warnings;\n        let response;\n        let request;\n        let resultProviderMetadata;\n        let reasoning;\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages\n        });\n        const promptMessages = await convertToLanguageModelPrompt({\n          prompt: standardizedPrompt,\n          supportedUrls: await model.supportedUrls,\n          download: download2\n        });\n        const generateResult = await retry(\n          () => recordSpan({\n            name: \"ai.generateObject.doGenerate\",\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: \"ai.generateObject.doGenerate\",\n                  telemetry\n                }),\n                ...baseTelemetryAttributes,\n                \"ai.prompt.messages\": {\n                  input: () => stringifyForTelemetry(promptMessages)\n                },\n                // standardized gen-ai llm span attributes:\n                \"gen_ai.system\": model.provider,\n                \"gen_ai.request.model\": model.modelId,\n                \"gen_ai.request.frequency_penalty\": callSettings.frequencyPenalty,\n                \"gen_ai.request.max_tokens\": callSettings.maxOutputTokens,\n                \"gen_ai.request.presence_penalty\": callSettings.presencePenalty,\n                \"gen_ai.request.temperature\": callSettings.temperature,\n                \"gen_ai.request.top_k\": callSettings.topK,\n                \"gen_ai.request.top_p\": callSettings.topP\n              }\n            }),\n            tracer,\n            fn: async (span2) => {\n              var _a17, _b, _c, _d, _e, _f, _g, _h;\n              const result2 = await model.doGenerate({\n                responseFormat: {\n                  type: \"json\",\n                  schema: outputStrategy.jsonSchema,\n                  name: schemaName,\n                  description: schemaDescription\n                },\n                ...prepareCallSettings(settings),\n                prompt: promptMessages,\n                providerOptions,\n                abortSignal,\n                headers: headersWithUserAgent\n              });\n              const responseData = {\n                id: (_b = (_a17 = result2.response) == null ? void 0 : _a17.id) != null ? _b : generateId3(),\n                timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),\n                modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId,\n                headers: (_g = result2.response) == null ? void 0 : _g.headers,\n                body: (_h = result2.response) == null ? void 0 : _h.body\n              };\n              const text2 = extractTextContent(result2.content);\n              const reasoning2 = extractReasoningContent(result2.content);\n              if (text2 === void 0) {\n                throw new NoObjectGeneratedError({\n                  message: \"No object generated: the model did not return a response.\",\n                  response: responseData,\n                  usage: result2.usage,\n                  finishReason: result2.finishReason\n                });\n              }\n              span2.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    \"ai.response.finishReason\": result2.finishReason,\n                    \"ai.response.object\": { output: () => text2 },\n                    \"ai.response.id\": responseData.id,\n                    \"ai.response.model\": responseData.modelId,\n                    \"ai.response.timestamp\": responseData.timestamp.toISOString(),\n                    \"ai.response.providerMetadata\": JSON.stringify(\n                      result2.providerMetadata\n                    ),\n                    // TODO rename telemetry attributes to inputTokens and outputTokens\n                    \"ai.usage.promptTokens\": result2.usage.inputTokens,\n                    \"ai.usage.completionTokens\": result2.usage.outputTokens,\n                    // standardized gen-ai llm span attributes:\n                    \"gen_ai.response.finish_reasons\": [result2.finishReason],\n                    \"gen_ai.response.id\": responseData.id,\n                    \"gen_ai.response.model\": responseData.modelId,\n                    \"gen_ai.usage.input_tokens\": result2.usage.inputTokens,\n                    \"gen_ai.usage.output_tokens\": result2.usage.outputTokens\n                  }\n                })\n              );\n              return {\n                ...result2,\n                objectText: text2,\n                reasoning: reasoning2,\n                responseData\n              };\n            }\n          })\n        );\n        result = generateResult.objectText;\n        finishReason = generateResult.finishReason;\n        usage = generateResult.usage;\n        warnings = generateResult.warnings;\n        resultProviderMetadata = generateResult.providerMetadata;\n        request = (_a16 = generateResult.request) != null ? _a16 : {};\n        response = generateResult.responseData;\n        reasoning = generateResult.reasoning;\n        logWarnings(warnings);\n        const object2 = await parseAndValidateObjectResultWithRepair(\n          result,\n          outputStrategy,\n          repairText,\n          {\n            response,\n            usage,\n            finishReason\n          }\n        );\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              \"ai.response.finishReason\": finishReason,\n              \"ai.response.object\": {\n                output: () => JSON.stringify(object2)\n              },\n              \"ai.response.providerMetadata\": JSON.stringify(\n                resultProviderMetadata\n              ),\n              // TODO rename telemetry attributes to inputTokens and outputTokens\n              \"ai.usage.promptTokens\": usage.inputTokens,\n              \"ai.usage.completionTokens\": usage.outputTokens\n            }\n          })\n        );\n        return new DefaultGenerateObjectResult({\n          object: object2,\n          reasoning,\n          finishReason,\n          usage,\n          warnings,\n          request,\n          response,\n          providerMetadata: resultProviderMetadata\n        });\n      }\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\nvar DefaultGenerateObjectResult = class {\n  constructor(options) {\n    this.object = options.object;\n    this.finishReason = options.finishReason;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.providerMetadata = options.providerMetadata;\n    this.response = options.response;\n    this.request = options.request;\n    this.reasoning = options.reasoning;\n  }\n  toJsonResponse(init) {\n    var _a16;\n    return new Response(JSON.stringify(this.object), {\n      status: (_a16 = init == null ? void 0 : init.status) != null ? _a16 : 200,\n      headers: prepareHeaders(init == null ? void 0 : init.headers, {\n        \"content-type\": \"application/json; charset=utf-8\"\n      })\n    });\n  }\n};\n\n// src/generate-object/stream-object.ts\nimport {\n  createIdGenerator as createIdGenerator4,\n  DelayedPromise as DelayedPromise2\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/cosine-similarity.ts\nfunction cosineSimilarity(vector1, vector2) {\n  if (vector1.length !== vector2.length) {\n    throw new InvalidArgumentError({\n      parameter: \"vector1,vector2\",\n      value: { vector1Length: vector1.length, vector2Length: vector2.length },\n      message: `Vectors must have the same length`\n    });\n  }\n  const n = vector1.length;\n  if (n === 0) {\n    return 0;\n  }\n  let magnitudeSquared1 = 0;\n  let magnitudeSquared2 = 0;\n  let dotProduct = 0;\n  for (let i = 0; i < n; i++) {\n    const value1 = vector1[i];\n    const value2 = vector2[i];\n    magnitudeSquared1 += value1 * value1;\n    magnitudeSquared2 += value2 * value2;\n    dotProduct += value1 * value2;\n  }\n  return magnitudeSquared1 === 0 || magnitudeSquared2 === 0 ? 0 : dotProduct / (Math.sqrt(magnitudeSquared1) * Math.sqrt(magnitudeSquared2));\n}\n\n// src/util/data-url.ts\nfunction getTextFromDataUrl(dataUrl) {\n  const [header, base64Content] = dataUrl.split(\",\");\n  const mediaType = header.split(\";\")[0].split(\":\")[1];\n  if (mediaType == null || base64Content == null) {\n    throw new Error(\"Invalid data URL format\");\n  }\n  try {\n    return window.atob(base64Content);\n  } catch (error) {\n    throw new Error(`Error decoding data URL`);\n  }\n}\n\n// src/util/is-deep-equal-data.ts\nfunction isDeepEqualData(obj1, obj2) {\n  if (obj1 === obj2)\n    return true;\n  if (obj1 == null || obj2 == null)\n    return false;\n  if (typeof obj1 !== \"object\" && typeof obj2 !== \"object\")\n    return obj1 === obj2;\n  if (obj1.constructor !== obj2.constructor)\n    return false;\n  if (obj1 instanceof Date && obj2 instanceof Date) {\n    return obj1.getTime() === obj2.getTime();\n  }\n  if (Array.isArray(obj1)) {\n    if (obj1.length !== obj2.length)\n      return false;\n    for (let i = 0; i < obj1.length; i++) {\n      if (!isDeepEqualData(obj1[i], obj2[i]))\n        return false;\n    }\n    return true;\n  }\n  const keys1 = Object.keys(obj1);\n  const keys2 = Object.keys(obj2);\n  if (keys1.length !== keys2.length)\n    return false;\n  for (const key of keys1) {\n    if (!keys2.includes(key))\n      return false;\n    if (!isDeepEqualData(obj1[key], obj2[key]))\n      return false;\n  }\n  return true;\n}\n\n// src/util/serial-job-executor.ts\nvar SerialJobExecutor = class {\n  constructor() {\n    this.queue = [];\n    this.isProcessing = false;\n  }\n  async processQueue() {\n    if (this.isProcessing) {\n      return;\n    }\n    this.isProcessing = true;\n    while (this.queue.length > 0) {\n      await this.queue[0]();\n      this.queue.shift();\n    }\n    this.isProcessing = false;\n  }\n  async run(job) {\n    return new Promise((resolve2, reject) => {\n      this.queue.push(async () => {\n        try {\n          await job();\n          resolve2();\n        } catch (error) {\n          reject(error);\n        }\n      });\n      void this.processQueue();\n    });\n  }\n};\n\n// src/util/simulate-readable-stream.ts\nimport { delay as delayFunction } from \"@ai-sdk/provider-utils\";\nfunction simulateReadableStream({\n  chunks,\n  initialDelayInMs = 0,\n  chunkDelayInMs = 0,\n  _internal\n}) {\n  var _a16;\n  const delay2 = (_a16 = _internal == null ? void 0 : _internal.delay) != null ? _a16 : delayFunction;\n  let index = 0;\n  return new ReadableStream({\n    async pull(controller) {\n      if (index < chunks.length) {\n        await delay2(index === 0 ? initialDelayInMs : chunkDelayInMs);\n        controller.enqueue(chunks[index++]);\n      } else {\n        controller.close();\n      }\n    }\n  });\n}\n\n// src/generate-object/stream-object.ts\nvar originalGenerateId4 = createIdGenerator4({ prefix: \"aiobj\", size: 24 });\nfunction streamObject(options) {\n  const {\n    model,\n    output = \"object\",\n    system,\n    prompt,\n    messages,\n    maxRetries,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download2,\n    providerOptions,\n    onError = ({ error }) => {\n      console.error(error);\n    },\n    onFinish,\n    _internal: {\n      generateId: generateId3 = originalGenerateId4,\n      currentDate = () => /* @__PURE__ */ new Date(),\n      now: now2 = now\n    } = {},\n    ...settings\n  } = options;\n  const enumValues = \"enum\" in options && options.enum ? options.enum : void 0;\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName\n  } = \"schema\" in options ? options : {};\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues\n  });\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues\n  });\n  return new DefaultStreamObjectResult({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download: download2,\n    generateId: generateId3,\n    currentDate,\n    now: now2\n  });\n}\nvar DefaultStreamObjectResult = class {\n  constructor({\n    model: modelArg,\n    headers,\n    telemetry,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download: download2,\n    generateId: generateId3,\n    currentDate,\n    now: now2\n  }) {\n    this._object = new DelayedPromise2();\n    this._usage = new DelayedPromise2();\n    this._providerMetadata = new DelayedPromise2();\n    this._warnings = new DelayedPromise2();\n    this._request = new DelayedPromise2();\n    this._response = new DelayedPromise2();\n    this._finishReason = new DelayedPromise2();\n    const model = resolveLanguageModel(modelArg);\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal\n    });\n    const callSettings = prepareCallSettings(settings);\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries }\n    });\n    const tracer = getTracer(telemetry);\n    const self = this;\n    const stitchableStream = createStitchableStream();\n    const eventProcessor = new TransformStream({\n      transform(chunk, controller) {\n        controller.enqueue(chunk);\n        if (chunk.type === \"error\") {\n          onError({ error: wrapGatewayError(chunk.error) });\n        }\n      }\n    });\n    this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n    recordSpan({\n      name: \"ai.streamObject\",\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: \"ai.streamObject\",\n            telemetry\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          \"ai.prompt\": {\n            input: () => JSON.stringify({ system, prompt, messages })\n          },\n          \"ai.schema\": outputStrategy.jsonSchema != null ? { input: () => JSON.stringify(outputStrategy.jsonSchema) } : void 0,\n          \"ai.schema.name\": schemaName,\n          \"ai.schema.description\": schemaDescription,\n          \"ai.settings.output\": outputStrategy.type\n        }\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async (rootSpan) => {\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages\n        });\n        const callOptions = {\n          responseFormat: {\n            type: \"json\",\n            schema: outputStrategy.jsonSchema,\n            name: schemaName,\n            description: schemaDescription\n          },\n          ...prepareCallSettings(settings),\n          prompt: await convertToLanguageModelPrompt({\n            prompt: standardizedPrompt,\n            supportedUrls: await model.supportedUrls,\n            download: download2\n          }),\n          providerOptions,\n          abortSignal,\n          headers,\n          includeRawChunks: false\n        };\n        const transformer = {\n          transform: (chunk, controller) => {\n            switch (chunk.type) {\n              case \"text-delta\":\n                controller.enqueue(chunk.delta);\n                break;\n              case \"response-metadata\":\n              case \"finish\":\n              case \"error\":\n              case \"stream-start\":\n                controller.enqueue(chunk);\n                break;\n            }\n          }\n        };\n        const {\n          result: { stream, response, request },\n          doStreamSpan,\n          startTimestampMs\n        } = await retry(\n          () => recordSpan({\n            name: \"ai.streamObject.doStream\",\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: \"ai.streamObject.doStream\",\n                  telemetry\n                }),\n                ...baseTelemetryAttributes,\n                \"ai.prompt.messages\": {\n                  input: () => stringifyForTelemetry(callOptions.prompt)\n                },\n                // standardized gen-ai llm span attributes:\n                \"gen_ai.system\": model.provider,\n                \"gen_ai.request.model\": model.modelId,\n                \"gen_ai.request.frequency_penalty\": callSettings.frequencyPenalty,\n                \"gen_ai.request.max_tokens\": callSettings.maxOutputTokens,\n                \"gen_ai.request.presence_penalty\": callSettings.presencePenalty,\n                \"gen_ai.request.temperature\": callSettings.temperature,\n                \"gen_ai.request.top_k\": callSettings.topK,\n                \"gen_ai.request.top_p\": callSettings.topP\n              }\n            }),\n            tracer,\n            endWhenDone: false,\n            fn: async (doStreamSpan2) => ({\n              startTimestampMs: now2(),\n              doStreamSpan: doStreamSpan2,\n              result: await model.doStream(callOptions)\n            })\n          })\n        );\n        self._request.resolve(request != null ? request : {});\n        let warnings;\n        let usage = {\n          inputTokens: void 0,\n          outputTokens: void 0,\n          totalTokens: void 0\n        };\n        let finishReason;\n        let providerMetadata;\n        let object2;\n        let error;\n        let accumulatedText = \"\";\n        let textDelta = \"\";\n        let fullResponse = {\n          id: generateId3(),\n          timestamp: currentDate(),\n          modelId: model.modelId\n        };\n        let latestObjectJson = void 0;\n        let latestObject = void 0;\n        let isFirstChunk = true;\n        let isFirstDelta = true;\n        const transformedStream = stream.pipeThrough(new TransformStream(transformer)).pipeThrough(\n          new TransformStream({\n            async transform(chunk, controller) {\n              var _a16, _b, _c;\n              if (typeof chunk === \"object\" && chunk.type === \"stream-start\") {\n                warnings = chunk.warnings;\n                return;\n              }\n              if (isFirstChunk) {\n                const msToFirstChunk = now2() - startTimestampMs;\n                isFirstChunk = false;\n                doStreamSpan.addEvent(\"ai.stream.firstChunk\", {\n                  \"ai.stream.msToFirstChunk\": msToFirstChunk\n                });\n                doStreamSpan.setAttributes({\n                  \"ai.stream.msToFirstChunk\": msToFirstChunk\n                });\n              }\n              if (typeof chunk === \"string\") {\n                accumulatedText += chunk;\n                textDelta += chunk;\n                const { value: currentObjectJson, state: parseState } = await parsePartialJson(accumulatedText);\n                if (currentObjectJson !== void 0 && !isDeepEqualData(latestObjectJson, currentObjectJson)) {\n                  const validationResult = await outputStrategy.validatePartialResult({\n                    value: currentObjectJson,\n                    textDelta,\n                    latestObject,\n                    isFirstDelta,\n                    isFinalDelta: parseState === \"successful-parse\"\n                  });\n                  if (validationResult.success && !isDeepEqualData(\n                    latestObject,\n                    validationResult.value.partial\n                  )) {\n                    latestObjectJson = currentObjectJson;\n                    latestObject = validationResult.value.partial;\n                    controller.enqueue({\n                      type: \"object\",\n                      object: latestObject\n                    });\n                    controller.enqueue({\n                      type: \"text-delta\",\n                      textDelta: validationResult.value.textDelta\n                    });\n                    textDelta = \"\";\n                    isFirstDelta = false;\n                  }\n                }\n                return;\n              }\n              switch (chunk.type) {\n                case \"response-metadata\": {\n                  fullResponse = {\n                    id: (_a16 = chunk.id) != null ? _a16 : fullResponse.id,\n                    timestamp: (_b = chunk.timestamp) != null ? _b : fullResponse.timestamp,\n                    modelId: (_c = chunk.modelId) != null ? _c : fullResponse.modelId\n                  };\n                  break;\n                }\n                case \"finish\": {\n                  if (textDelta !== \"\") {\n                    controller.enqueue({ type: \"text-delta\", textDelta });\n                  }\n                  finishReason = chunk.finishReason;\n                  usage = chunk.usage;\n                  providerMetadata = chunk.providerMetadata;\n                  controller.enqueue({\n                    ...chunk,\n                    usage,\n                    response: fullResponse\n                  });\n                  logWarnings(warnings != null ? warnings : []);\n                  self._usage.resolve(usage);\n                  self._providerMetadata.resolve(providerMetadata);\n                  self._warnings.resolve(warnings);\n                  self._response.resolve({\n                    ...fullResponse,\n                    headers: response == null ? void 0 : response.headers\n                  });\n                  self._finishReason.resolve(finishReason != null ? finishReason : \"unknown\");\n                  try {\n                    object2 = await parseAndValidateObjectResultWithRepair(\n                      accumulatedText,\n                      outputStrategy,\n                      repairText,\n                      {\n                        response: fullResponse,\n                        usage,\n                        finishReason\n                      }\n                    );\n                    self._object.resolve(object2);\n                  } catch (e) {\n                    error = e;\n                    self._object.reject(e);\n                  }\n                  break;\n                }\n                default: {\n                  controller.enqueue(chunk);\n                  break;\n                }\n              }\n            },\n            // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n            async flush(controller) {\n              try {\n                const finalUsage = usage != null ? usage : {\n                  promptTokens: NaN,\n                  completionTokens: NaN,\n                  totalTokens: NaN\n                };\n                doStreamSpan.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      \"ai.response.finishReason\": finishReason,\n                      \"ai.response.object\": {\n                        output: () => JSON.stringify(object2)\n                      },\n                      \"ai.response.id\": fullResponse.id,\n                      \"ai.response.model\": fullResponse.modelId,\n                      \"ai.response.timestamp\": fullResponse.timestamp.toISOString(),\n                      \"ai.response.providerMetadata\": JSON.stringify(providerMetadata),\n                      \"ai.usage.inputTokens\": finalUsage.inputTokens,\n                      \"ai.usage.outputTokens\": finalUsage.outputTokens,\n                      \"ai.usage.totalTokens\": finalUsage.totalTokens,\n                      \"ai.usage.reasoningTokens\": finalUsage.reasoningTokens,\n                      \"ai.usage.cachedInputTokens\": finalUsage.cachedInputTokens,\n                      // standardized gen-ai llm span attributes:\n                      \"gen_ai.response.finish_reasons\": [finishReason],\n                      \"gen_ai.response.id\": fullResponse.id,\n                      \"gen_ai.response.model\": fullResponse.modelId,\n                      \"gen_ai.usage.input_tokens\": finalUsage.inputTokens,\n                      \"gen_ai.usage.output_tokens\": finalUsage.outputTokens\n                    }\n                  })\n                );\n                doStreamSpan.end();\n                rootSpan.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      \"ai.usage.inputTokens\": finalUsage.inputTokens,\n                      \"ai.usage.outputTokens\": finalUsage.outputTokens,\n                      \"ai.usage.totalTokens\": finalUsage.totalTokens,\n                      \"ai.usage.reasoningTokens\": finalUsage.reasoningTokens,\n                      \"ai.usage.cachedInputTokens\": finalUsage.cachedInputTokens,\n                      \"ai.response.object\": {\n                        output: () => JSON.stringify(object2)\n                      },\n                      \"ai.response.providerMetadata\": JSON.stringify(providerMetadata)\n                    }\n                  })\n                );\n                await (onFinish == null ? void 0 : onFinish({\n                  usage: finalUsage,\n                  object: object2,\n                  error,\n                  response: {\n                    ...fullResponse,\n                    headers: response == null ? void 0 : response.headers\n                  },\n                  warnings,\n                  providerMetadata\n                }));\n              } catch (error2) {\n                controller.enqueue({ type: \"error\", error: error2 });\n              } finally {\n                rootSpan.end();\n              }\n            }\n          })\n        );\n        stitchableStream.addStream(transformedStream);\n      }\n    }).catch((error) => {\n      stitchableStream.addStream(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue({ type: \"error\", error });\n            controller.close();\n          }\n        })\n      );\n    }).finally(() => {\n      stitchableStream.close();\n    });\n    this.outputStrategy = outputStrategy;\n  }\n  get object() {\n    return this._object.promise;\n  }\n  get usage() {\n    return this._usage.promise;\n  }\n  get providerMetadata() {\n    return this._providerMetadata.promise;\n  }\n  get warnings() {\n    return this._warnings.promise;\n  }\n  get request() {\n    return this._request.promise;\n  }\n  get response() {\n    return this._response.promise;\n  }\n  get finishReason() {\n    return this._finishReason.promise;\n  }\n  get partialObjectStream() {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case \"object\":\n                controller.enqueue(chunk.object);\n                break;\n              case \"text-delta\":\n              case \"finish\":\n              case \"error\":\n                break;\n              default: {\n                const _exhaustiveCheck = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          }\n        })\n      )\n    );\n  }\n  get elementStream() {\n    return this.outputStrategy.createElementStream(this.baseStream);\n  }\n  get textStream() {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case \"text-delta\":\n                controller.enqueue(chunk.textDelta);\n                break;\n              case \"object\":\n              case \"finish\":\n              case \"error\":\n                break;\n              default: {\n                const _exhaustiveCheck = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          }\n        })\n      )\n    );\n  }\n  get fullStream() {\n    return createAsyncIterableStream(this.baseStream);\n  }\n  pipeTextStreamToResponse(response, init) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init\n    });\n  }\n  toTextStreamResponse(init) {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init\n    });\n  }\n};\n\n// src/generate-speech/generate-speech.ts\nimport { withUserAgentSuffix as withUserAgentSuffix7 } from \"@ai-sdk/provider-utils\";\n\n// src/generate-speech/generated-audio-file.ts\nvar DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {\n  constructor({\n    data,\n    mediaType\n  }) {\n    super({ data, mediaType });\n    let format = \"mp3\";\n    if (mediaType) {\n      const mediaTypeParts = mediaType.split(\"/\");\n      if (mediaTypeParts.length === 2) {\n        if (mediaType !== \"audio/mpeg\") {\n          format = mediaTypeParts[1];\n        }\n      }\n    }\n    if (!format) {\n      throw new Error(\n        \"Audio format must be provided or determinable from media type\"\n      );\n    }\n    this.format = format;\n  }\n};\n\n// src/generate-speech/generate-speech.ts\nasync function generateSpeech({\n  model,\n  text: text2,\n  voice,\n  outputFormat,\n  instructions,\n  speed,\n  language,\n  providerOptions = {},\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers\n}) {\n  var _a16;\n  if (model.specificationVersion !== \"v2\") {\n    throw new UnsupportedModelVersionError({\n      version: model.specificationVersion,\n      provider: model.provider,\n      modelId: model.modelId\n    });\n  }\n  const headersWithUserAgent = withUserAgentSuffix7(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const { retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const result = await retry(\n    () => model.doGenerate({\n      text: text2,\n      voice,\n      outputFormat,\n      instructions,\n      speed,\n      language,\n      abortSignal,\n      headers: headersWithUserAgent,\n      providerOptions\n    })\n  );\n  if (!result.audio || result.audio.length === 0) {\n    throw new NoSpeechGeneratedError({ responses: [result.response] });\n  }\n  logWarnings(result.warnings);\n  return new DefaultSpeechResult({\n    audio: new DefaultGeneratedAudioFile({\n      data: result.audio,\n      mediaType: (_a16 = detectMediaType({\n        data: result.audio,\n        signatures: audioMediaTypeSignatures\n      })) != null ? _a16 : \"audio/mp3\"\n    }),\n    warnings: result.warnings,\n    responses: [result.response],\n    providerMetadata: result.providerMetadata\n  });\n}\nvar DefaultSpeechResult = class {\n  constructor(options) {\n    var _a16;\n    this.audio = options.audio;\n    this.warnings = options.warnings;\n    this.responses = options.responses;\n    this.providerMetadata = (_a16 = options.providerMetadata) != null ? _a16 : {};\n  }\n};\n\n// src/generate-text/output.ts\nvar output_exports = {};\n__export(output_exports, {\n  object: () => object,\n  text: () => text\n});\nimport {\n  asSchema as asSchema4,\n  safeParseJSON as safeParseJSON4,\n  safeValidateTypes as safeValidateTypes4\n} from \"@ai-sdk/provider-utils\";\nvar text = () => ({\n  type: \"text\",\n  responseFormat: { type: \"text\" },\n  async parsePartial({ text: text2 }) {\n    return { partial: text2 };\n  },\n  async parseOutput({ text: text2 }) {\n    return text2;\n  }\n});\nvar object = ({\n  schema: inputSchema\n}) => {\n  const schema = asSchema4(inputSchema);\n  return {\n    type: \"object\",\n    responseFormat: {\n      type: \"json\",\n      schema: schema.jsonSchema\n    },\n    async parsePartial({ text: text2 }) {\n      const result = await parsePartialJson(text2);\n      switch (result.state) {\n        case \"failed-parse\":\n        case \"undefined-input\":\n          return void 0;\n        case \"repaired-parse\":\n        case \"successful-parse\":\n          return {\n            // Note: currently no validation of partial results:\n            partial: result.value\n          };\n        default: {\n          const _exhaustiveCheck = result.state;\n          throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n        }\n      }\n    },\n    async parseOutput({ text: text2 }, context) {\n      const parseResult = await safeParseJSON4({ text: text2 });\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: \"No object generated: could not parse the response.\",\n          cause: parseResult.error,\n          text: text2,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason\n        });\n      }\n      const validationResult = await safeValidateTypes4({\n        value: parseResult.value,\n        schema\n      });\n      if (!validationResult.success) {\n        throw new NoObjectGeneratedError({\n          message: \"No object generated: response did not match schema.\",\n          cause: validationResult.error,\n          text: text2,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason\n        });\n      }\n      return validationResult.value;\n    }\n  };\n};\n\n// src/generate-text/prune-messages.ts\nfunction pruneMessages({\n  messages,\n  reasoning = \"none\",\n  toolCalls = [],\n  emptyMessages = \"remove\"\n}) {\n  if (reasoning === \"all\" || reasoning === \"before-last-message\") {\n    messages = messages.map((message, messageIndex) => {\n      if (message.role !== \"assistant\" || typeof message.content === \"string\" || reasoning === \"before-last-message\" && messageIndex === messages.length - 1) {\n        return message;\n      }\n      return {\n        ...message,\n        content: message.content.filter((part) => part.type !== \"reasoning\")\n      };\n    });\n  }\n  if (toolCalls === \"none\") {\n    toolCalls = [];\n  } else if (toolCalls === \"all\") {\n    toolCalls = [{ type: \"all\" }];\n  } else if (toolCalls === \"before-last-message\") {\n    toolCalls = [{ type: \"before-last-message\" }];\n  } else if (typeof toolCalls === \"string\") {\n    toolCalls = [{ type: toolCalls }];\n  }\n  for (const toolCall of toolCalls) {\n    const keepLastMessagesCount = toolCall.type === \"all\" ? void 0 : toolCall.type === \"before-last-message\" ? 1 : Number(\n      toolCall.type.slice(\"before-last-\".length).slice(0, -\"-messages\".length)\n    );\n    const keptToolCallIds = /* @__PURE__ */ new Set();\n    const keptApprovalIds = /* @__PURE__ */ new Set();\n    if (keepLastMessagesCount != null) {\n      for (const message of messages.slice(-keepLastMessagesCount)) {\n        if ((message.role === \"assistant\" || message.role === \"tool\") && typeof message.content !== \"string\") {\n          for (const part of message.content) {\n            if (part.type === \"tool-call\" || part.type === \"tool-result\") {\n              keptToolCallIds.add(part.toolCallId);\n            }\n          }\n        }\n      }\n    }\n    messages = messages.map((message, messageIndex) => {\n      if (message.role !== \"assistant\" && message.role !== \"tool\" || typeof message.content === \"string\" || keepLastMessagesCount && messageIndex >= messages.length - keepLastMessagesCount) {\n        return message;\n      }\n      const toolCallIdToToolName = {};\n      return {\n        ...message,\n        content: message.content.filter((part) => {\n          if (part.type !== \"tool-call\" && part.type !== \"tool-result\") {\n            return true;\n          }\n          if (part.type === \"tool-call\") {\n            toolCallIdToToolName[part.toolCallId] = part.toolName;\n          }\n          if ((part.type === \"tool-call\" || part.type === \"tool-result\") && keptToolCallIds.has(part.toolCallId)) {\n            return true;\n          }\n          return toolCall.tools != null && !toolCall.tools.includes(part.toolName);\n        })\n      };\n    });\n  }\n  if (emptyMessages === \"remove\") {\n    messages = messages.filter((message) => message.content.length > 0);\n  }\n  return messages;\n}\n\n// src/generate-text/smooth-stream.ts\nimport { delay as originalDelay } from \"@ai-sdk/provider-utils\";\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nvar CHUNKING_REGEXPS = {\n  word: /\\S+\\s+/m,\n  line: /\\n+/m\n};\nfunction smoothStream({\n  delayInMs = 10,\n  chunking = \"word\",\n  _internal: { delay: delay2 = originalDelay } = {}\n} = {}) {\n  let detectChunk;\n  if (typeof chunking === \"function\") {\n    detectChunk = (buffer) => {\n      const match = chunking(buffer);\n      if (match == null) {\n        return null;\n      }\n      if (!match.length) {\n        throw new Error(`Chunking function must return a non-empty string.`);\n      }\n      if (!buffer.startsWith(match)) {\n        throw new Error(\n          `Chunking function must return a match that is a prefix of the buffer. Received: \"${match}\" expected to start with \"${buffer}\"`\n        );\n      }\n      return match;\n    };\n  } else {\n    const chunkingRegex = typeof chunking === \"string\" ? CHUNKING_REGEXPS[chunking] : chunking;\n    if (chunkingRegex == null) {\n      throw new InvalidArgumentError2({\n        argument: \"chunking\",\n        message: `Chunking must be \"word\" or \"line\" or a RegExp. Received: ${chunking}`\n      });\n    }\n    detectChunk = (buffer) => {\n      const match = chunkingRegex.exec(buffer);\n      if (!match) {\n        return null;\n      }\n      return buffer.slice(0, match.index) + (match == null ? void 0 : match[0]);\n    };\n  }\n  return () => {\n    let buffer = \"\";\n    let id = \"\";\n    return new TransformStream({\n      async transform(chunk, controller) {\n        if (chunk.type !== \"text-delta\") {\n          if (buffer.length > 0) {\n            controller.enqueue({ type: \"text-delta\", text: buffer, id });\n            buffer = \"\";\n          }\n          controller.enqueue(chunk);\n          return;\n        }\n        if (chunk.id !== id && buffer.length > 0) {\n          controller.enqueue({ type: \"text-delta\", text: buffer, id });\n          buffer = \"\";\n        }\n        buffer += chunk.text;\n        id = chunk.id;\n        let match;\n        while ((match = detectChunk(buffer)) != null) {\n          controller.enqueue({ type: \"text-delta\", text: match, id });\n          buffer = buffer.slice(match.length);\n          await delay2(delayInMs);\n        }\n      }\n    });\n  };\n}\n\n// src/middleware/default-settings-middleware.ts\nfunction defaultSettingsMiddleware({\n  settings\n}) {\n  return {\n    middlewareVersion: \"v2\",\n    transformParams: async ({ params }) => {\n      return mergeObjects(settings, params);\n    }\n  };\n}\n\n// src/util/get-potential-start-index.ts\nfunction getPotentialStartIndex(text2, searchedText) {\n  if (searchedText.length === 0) {\n    return null;\n  }\n  const directIndex = text2.indexOf(searchedText);\n  if (directIndex !== -1) {\n    return directIndex;\n  }\n  for (let i = text2.length - 1; i >= 0; i--) {\n    const suffix = text2.substring(i);\n    if (searchedText.startsWith(suffix)) {\n      return i;\n    }\n  }\n  return null;\n}\n\n// src/middleware/extract-reasoning-middleware.ts\nfunction extractReasoningMiddleware({\n  tagName,\n  separator = \"\\n\",\n  startWithReasoning = false\n}) {\n  const openingTag = `<${tagName}>`;\n  const closingTag = `</${tagName}>`;\n  return {\n    middlewareVersion: \"v2\",\n    wrapGenerate: async ({ doGenerate }) => {\n      const { content, ...rest } = await doGenerate();\n      const transformedContent = [];\n      for (const part of content) {\n        if (part.type !== \"text\") {\n          transformedContent.push(part);\n          continue;\n        }\n        const text2 = startWithReasoning ? openingTag + part.text : part.text;\n        const regexp = new RegExp(`${openingTag}(.*?)${closingTag}`, \"gs\");\n        const matches = Array.from(text2.matchAll(regexp));\n        if (!matches.length) {\n          transformedContent.push(part);\n          continue;\n        }\n        const reasoningText = matches.map((match) => match[1]).join(separator);\n        let textWithoutReasoning = text2;\n        for (let i = matches.length - 1; i >= 0; i--) {\n          const match = matches[i];\n          const beforeMatch = textWithoutReasoning.slice(0, match.index);\n          const afterMatch = textWithoutReasoning.slice(\n            match.index + match[0].length\n          );\n          textWithoutReasoning = beforeMatch + (beforeMatch.length > 0 && afterMatch.length > 0 ? separator : \"\") + afterMatch;\n        }\n        transformedContent.push({\n          type: \"reasoning\",\n          text: reasoningText\n        });\n        transformedContent.push({\n          type: \"text\",\n          text: textWithoutReasoning\n        });\n      }\n      return { content: transformedContent, ...rest };\n    },\n    wrapStream: async ({ doStream }) => {\n      const { stream, ...rest } = await doStream();\n      const reasoningExtractions = {};\n      let delayedTextStart;\n      return {\n        stream: stream.pipeThrough(\n          new TransformStream({\n            transform: (chunk, controller) => {\n              if (chunk.type === \"text-start\") {\n                delayedTextStart = chunk;\n                return;\n              }\n              if (chunk.type === \"text-end\" && delayedTextStart) {\n                controller.enqueue(delayedTextStart);\n                delayedTextStart = void 0;\n              }\n              if (chunk.type !== \"text-delta\") {\n                controller.enqueue(chunk);\n                return;\n              }\n              if (reasoningExtractions[chunk.id] == null) {\n                reasoningExtractions[chunk.id] = {\n                  isFirstReasoning: true,\n                  isFirstText: true,\n                  afterSwitch: false,\n                  isReasoning: startWithReasoning,\n                  buffer: \"\",\n                  idCounter: 0,\n                  textId: chunk.id\n                };\n              }\n              const activeExtraction = reasoningExtractions[chunk.id];\n              activeExtraction.buffer += chunk.delta;\n              function publish(text2) {\n                if (text2.length > 0) {\n                  const prefix = activeExtraction.afterSwitch && (activeExtraction.isReasoning ? !activeExtraction.isFirstReasoning : !activeExtraction.isFirstText) ? separator : \"\";\n                  if (activeExtraction.isReasoning && (activeExtraction.afterSwitch || activeExtraction.isFirstReasoning)) {\n                    controller.enqueue({\n                      type: \"reasoning-start\",\n                      id: `reasoning-${activeExtraction.idCounter}`\n                    });\n                  }\n                  if (activeExtraction.isReasoning) {\n                    controller.enqueue({\n                      type: \"reasoning-delta\",\n                      delta: prefix + text2,\n                      id: `reasoning-${activeExtraction.idCounter}`\n                    });\n                  } else {\n                    if (delayedTextStart) {\n                      controller.enqueue(delayedTextStart);\n                      delayedTextStart = void 0;\n                    }\n                    controller.enqueue({\n                      type: \"text-delta\",\n                      delta: prefix + text2,\n                      id: activeExtraction.textId\n                    });\n                  }\n                  activeExtraction.afterSwitch = false;\n                  if (activeExtraction.isReasoning) {\n                    activeExtraction.isFirstReasoning = false;\n                  } else {\n                    activeExtraction.isFirstText = false;\n                  }\n                }\n              }\n              do {\n                const nextTag = activeExtraction.isReasoning ? closingTag : openingTag;\n                const startIndex = getPotentialStartIndex(\n                  activeExtraction.buffer,\n                  nextTag\n                );\n                if (startIndex == null) {\n                  publish(activeExtraction.buffer);\n                  activeExtraction.buffer = \"\";\n                  break;\n                }\n                publish(activeExtraction.buffer.slice(0, startIndex));\n                const foundFullMatch = startIndex + nextTag.length <= activeExtraction.buffer.length;\n                if (foundFullMatch) {\n                  activeExtraction.buffer = activeExtraction.buffer.slice(\n                    startIndex + nextTag.length\n                  );\n                  if (activeExtraction.isReasoning) {\n                    controller.enqueue({\n                      type: \"reasoning-end\",\n                      id: `reasoning-${activeExtraction.idCounter++}`\n                    });\n                  }\n                  activeExtraction.isReasoning = !activeExtraction.isReasoning;\n                  activeExtraction.afterSwitch = true;\n                } else {\n                  activeExtraction.buffer = activeExtraction.buffer.slice(startIndex);\n                  break;\n                }\n              } while (true);\n            }\n          })\n        ),\n        ...rest\n      };\n    }\n  };\n}\n\n// src/middleware/simulate-streaming-middleware.ts\nfunction simulateStreamingMiddleware() {\n  return {\n    middlewareVersion: \"v2\",\n    wrapStream: async ({ doGenerate }) => {\n      const result = await doGenerate();\n      let id = 0;\n      const simulatedStream = new ReadableStream({\n        start(controller) {\n          controller.enqueue({\n            type: \"stream-start\",\n            warnings: result.warnings\n          });\n          controller.enqueue({ type: \"response-metadata\", ...result.response });\n          for (const part of result.content) {\n            switch (part.type) {\n              case \"text\": {\n                if (part.text.length > 0) {\n                  controller.enqueue({ type: \"text-start\", id: String(id) });\n                  controller.enqueue({\n                    type: \"text-delta\",\n                    id: String(id),\n                    delta: part.text\n                  });\n                  controller.enqueue({ type: \"text-end\", id: String(id) });\n                  id++;\n                }\n                break;\n              }\n              case \"reasoning\": {\n                controller.enqueue({\n                  type: \"reasoning-start\",\n                  id: String(id),\n                  providerMetadata: part.providerMetadata\n                });\n                controller.enqueue({\n                  type: \"reasoning-delta\",\n                  id: String(id),\n                  delta: part.text\n                });\n                controller.enqueue({ type: \"reasoning-end\", id: String(id) });\n                id++;\n                break;\n              }\n              default: {\n                controller.enqueue(part);\n                break;\n              }\n            }\n          }\n          controller.enqueue({\n            type: \"finish\",\n            finishReason: result.finishReason,\n            usage: result.usage,\n            providerMetadata: result.providerMetadata\n          });\n          controller.close();\n        }\n      });\n      return {\n        stream: simulatedStream,\n        request: result.request,\n        response: result.response\n      };\n    }\n  };\n}\n\n// src/middleware/wrap-language-model.ts\nvar wrapLanguageModel = ({\n  model,\n  middleware: middlewareArg,\n  modelId,\n  providerId\n}) => {\n  return [...asArray(middlewareArg)].reverse().reduce((wrappedModel, middleware) => {\n    return doWrap({ model: wrappedModel, middleware, modelId, providerId });\n  }, model);\n};\nvar doWrap = ({\n  model,\n  middleware: {\n    transformParams,\n    wrapGenerate,\n    wrapStream,\n    overrideProvider,\n    overrideModelId,\n    overrideSupportedUrls\n  },\n  modelId,\n  providerId\n}) => {\n  var _a16, _b, _c;\n  async function doTransform({\n    params,\n    type\n  }) {\n    return transformParams ? await transformParams({ params, type, model }) : params;\n  }\n  return {\n    specificationVersion: \"v2\",\n    provider: (_a16 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a16 : model.provider,\n    modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,\n    supportedUrls: (_c = overrideSupportedUrls == null ? void 0 : overrideSupportedUrls({ model })) != null ? _c : model.supportedUrls,\n    async doGenerate(params) {\n      const transformedParams = await doTransform({ params, type: \"generate\" });\n      const doGenerate = async () => model.doGenerate(transformedParams);\n      const doStream = async () => model.doStream(transformedParams);\n      return wrapGenerate ? wrapGenerate({\n        doGenerate,\n        doStream,\n        params: transformedParams,\n        model\n      }) : doGenerate();\n    },\n    async doStream(params) {\n      const transformedParams = await doTransform({ params, type: \"stream\" });\n      const doGenerate = async () => model.doGenerate(transformedParams);\n      const doStream = async () => model.doStream(transformedParams);\n      return wrapStream ? wrapStream({ doGenerate, doStream, params: transformedParams, model }) : doStream();\n    }\n  };\n};\n\n// src/middleware/wrap-provider.ts\nfunction wrapProvider({\n  provider,\n  languageModelMiddleware\n}) {\n  const wrappedProvider = {\n    languageModel(modelId) {\n      let model = provider.languageModel(modelId);\n      model = wrapLanguageModel({\n        model,\n        middleware: languageModelMiddleware\n      });\n      return model;\n    },\n    textEmbeddingModel: provider.textEmbeddingModel,\n    imageModel: provider.imageModel,\n    transcriptionModel: provider.transcriptionModel,\n    speechModel: provider.speechModel\n  };\n  return wrappedProvider;\n}\n\n// src/registry/custom-provider.ts\nimport {\n  NoSuchModelError as NoSuchModelError2\n} from \"@ai-sdk/provider\";\nfunction customProvider({\n  languageModels,\n  textEmbeddingModels,\n  imageModels,\n  transcriptionModels,\n  speechModels,\n  fallbackProvider\n}) {\n  return {\n    languageModel(modelId) {\n      if (languageModels != null && modelId in languageModels) {\n        return languageModels[modelId];\n      }\n      if (fallbackProvider) {\n        return fallbackProvider.languageModel(modelId);\n      }\n      throw new NoSuchModelError2({ modelId, modelType: \"languageModel\" });\n    },\n    textEmbeddingModel(modelId) {\n      if (textEmbeddingModels != null && modelId in textEmbeddingModels) {\n        return textEmbeddingModels[modelId];\n      }\n      if (fallbackProvider) {\n        return fallbackProvider.textEmbeddingModel(modelId);\n      }\n      throw new NoSuchModelError2({ modelId, modelType: \"textEmbeddingModel\" });\n    },\n    imageModel(modelId) {\n      if (imageModels != null && modelId in imageModels) {\n        return imageModels[modelId];\n      }\n      if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {\n        return fallbackProvider.imageModel(modelId);\n      }\n      throw new NoSuchModelError2({ modelId, modelType: \"imageModel\" });\n    },\n    transcriptionModel(modelId) {\n      if (transcriptionModels != null && modelId in transcriptionModels) {\n        return transcriptionModels[modelId];\n      }\n      if (fallbackProvider == null ? void 0 : fallbackProvider.transcriptionModel) {\n        return fallbackProvider.transcriptionModel(modelId);\n      }\n      throw new NoSuchModelError2({ modelId, modelType: \"transcriptionModel\" });\n    },\n    speechModel(modelId) {\n      if (speechModels != null && modelId in speechModels) {\n        return speechModels[modelId];\n      }\n      if (fallbackProvider == null ? void 0 : fallbackProvider.speechModel) {\n        return fallbackProvider.speechModel(modelId);\n      }\n      throw new NoSuchModelError2({ modelId, modelType: \"speechModel\" });\n    }\n  };\n}\nvar experimental_customProvider = customProvider;\n\n// src/registry/no-such-provider-error.ts\nimport { AISDKError as AISDKError20, NoSuchModelError as NoSuchModelError3 } from \"@ai-sdk/provider\";\nvar name15 = \"AI_NoSuchProviderError\";\nvar marker15 = `vercel.ai.error.${name15}`;\nvar symbol15 = Symbol.for(marker15);\nvar _a15;\nvar NoSuchProviderError = class extends NoSuchModelError3 {\n  constructor({\n    modelId,\n    modelType,\n    providerId,\n    availableProviders,\n    message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`\n  }) {\n    super({ errorName: name15, modelId, modelType, message });\n    this[_a15] = true;\n    this.providerId = providerId;\n    this.availableProviders = availableProviders;\n  }\n  static isInstance(error) {\n    return AISDKError20.hasMarker(error, marker15);\n  }\n};\n_a15 = symbol15;\n\n// src/registry/provider-registry.ts\nimport {\n  NoSuchModelError as NoSuchModelError4\n} from \"@ai-sdk/provider\";\nfunction createProviderRegistry(providers, {\n  separator = \":\",\n  languageModelMiddleware\n} = {}) {\n  const registry = new DefaultProviderRegistry({\n    separator,\n    languageModelMiddleware\n  });\n  for (const [id, provider] of Object.entries(providers)) {\n    registry.registerProvider({ id, provider });\n  }\n  return registry;\n}\nvar experimental_createProviderRegistry = createProviderRegistry;\nvar DefaultProviderRegistry = class {\n  constructor({\n    separator,\n    languageModelMiddleware\n  }) {\n    this.providers = {};\n    this.separator = separator;\n    this.languageModelMiddleware = languageModelMiddleware;\n  }\n  registerProvider({\n    id,\n    provider\n  }) {\n    this.providers[id] = provider;\n  }\n  getProvider(id, modelType) {\n    const provider = this.providers[id];\n    if (provider == null) {\n      throw new NoSuchProviderError({\n        modelId: id,\n        modelType,\n        providerId: id,\n        availableProviders: Object.keys(this.providers)\n      });\n    }\n    return provider;\n  }\n  splitId(id, modelType) {\n    const index = id.indexOf(this.separator);\n    if (index === -1) {\n      throw new NoSuchModelError4({\n        modelId: id,\n        modelType,\n        message: `Invalid ${modelType} id for registry: ${id} (must be in the format \"providerId${this.separator}modelId\")`\n      });\n    }\n    return [id.slice(0, index), id.slice(index + this.separator.length)];\n  }\n  languageModel(id) {\n    var _a16, _b;\n    const [providerId, modelId] = this.splitId(id, \"languageModel\");\n    let model = (_b = (_a16 = this.getProvider(providerId, \"languageModel\")).languageModel) == null ? void 0 : _b.call(\n      _a16,\n      modelId\n    );\n    if (model == null) {\n      throw new NoSuchModelError4({ modelId: id, modelType: \"languageModel\" });\n    }\n    if (this.languageModelMiddleware != null) {\n      model = wrapLanguageModel({\n        model,\n        middleware: this.languageModelMiddleware\n      });\n    }\n    return model;\n  }\n  textEmbeddingModel(id) {\n    var _a16;\n    const [providerId, modelId] = this.splitId(id, \"textEmbeddingModel\");\n    const provider = this.getProvider(providerId, \"textEmbeddingModel\");\n    const model = (_a16 = provider.textEmbeddingModel) == null ? void 0 : _a16.call(provider, modelId);\n    if (model == null) {\n      throw new NoSuchModelError4({\n        modelId: id,\n        modelType: \"textEmbeddingModel\"\n      });\n    }\n    return model;\n  }\n  imageModel(id) {\n    var _a16;\n    const [providerId, modelId] = this.splitId(id, \"imageModel\");\n    const provider = this.getProvider(providerId, \"imageModel\");\n    const model = (_a16 = provider.imageModel) == null ? void 0 : _a16.call(provider, modelId);\n    if (model == null) {\n      throw new NoSuchModelError4({ modelId: id, modelType: \"imageModel\" });\n    }\n    return model;\n  }\n  transcriptionModel(id) {\n    var _a16;\n    const [providerId, modelId] = this.splitId(id, \"transcriptionModel\");\n    const provider = this.getProvider(providerId, \"transcriptionModel\");\n    const model = (_a16 = provider.transcriptionModel) == null ? void 0 : _a16.call(provider, modelId);\n    if (model == null) {\n      throw new NoSuchModelError4({\n        modelId: id,\n        modelType: \"transcriptionModel\"\n      });\n    }\n    return model;\n  }\n  speechModel(id) {\n    var _a16;\n    const [providerId, modelId] = this.splitId(id, \"speechModel\");\n    const provider = this.getProvider(providerId, \"speechModel\");\n    const model = (_a16 = provider.speechModel) == null ? void 0 : _a16.call(provider, modelId);\n    if (model == null) {\n      throw new NoSuchModelError4({ modelId: id, modelType: \"speechModel\" });\n    }\n    return model;\n  }\n};\n\n// src/transcribe/transcribe.ts\nimport { withUserAgentSuffix as withUserAgentSuffix8 } from \"@ai-sdk/provider-utils\";\n\n// src/error/no-transcript-generated-error.ts\nimport { AISDKError as AISDKError21 } from \"@ai-sdk/provider\";\nvar NoTranscriptGeneratedError = class extends AISDKError21 {\n  constructor(options) {\n    super({\n      name: \"AI_NoTranscriptGeneratedError\",\n      message: \"No transcript generated.\"\n    });\n    this.responses = options.responses;\n  }\n};\n\n// src/transcribe/transcribe.ts\nasync function transcribe({\n  model,\n  audio,\n  providerOptions = {},\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers\n}) {\n  if (model.specificationVersion !== \"v2\") {\n    throw new UnsupportedModelVersionError({\n      version: model.specificationVersion,\n      provider: model.provider,\n      modelId: model.modelId\n    });\n  }\n  const { retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal\n  });\n  const headersWithUserAgent = withUserAgentSuffix8(\n    headers != null ? headers : {},\n    `ai/${VERSION}`\n  );\n  const audioData = audio instanceof URL ? (await download({ url: audio })).data : convertDataContentToUint8Array(audio);\n  const result = await retry(\n    () => {\n      var _a16;\n      return model.doGenerate({\n        audio: audioData,\n        abortSignal,\n        headers: headersWithUserAgent,\n        providerOptions,\n        mediaType: (_a16 = detectMediaType({\n          data: audioData,\n          signatures: audioMediaTypeSignatures\n        })) != null ? _a16 : \"audio/wav\"\n      });\n    }\n  );\n  logWarnings(result.warnings);\n  if (!result.text) {\n    throw new NoTranscriptGeneratedError({ responses: [result.response] });\n  }\n  return new DefaultTranscriptionResult({\n    text: result.text,\n    segments: result.segments,\n    language: result.language,\n    durationInSeconds: result.durationInSeconds,\n    warnings: result.warnings,\n    responses: [result.response],\n    providerMetadata: result.providerMetadata\n  });\n}\nvar DefaultTranscriptionResult = class {\n  constructor(options) {\n    var _a16;\n    this.text = options.text;\n    this.segments = options.segments;\n    this.language = options.language;\n    this.durationInSeconds = options.durationInSeconds;\n    this.warnings = options.warnings;\n    this.responses = options.responses;\n    this.providerMetadata = (_a16 = options.providerMetadata) != null ? _a16 : {};\n  }\n};\n\n// src/ui/call-completion-api.ts\nimport {\n  parseJsonEventStream,\n  withUserAgentSuffix as withUserAgentSuffix9,\n  getRuntimeEnvironmentUserAgent as getRuntimeEnvironmentUserAgent2\n} from \"@ai-sdk/provider-utils\";\n\n// src/ui/process-text-stream.ts\nasync function processTextStream({\n  stream,\n  onTextPart\n}) {\n  const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) {\n      break;\n    }\n    await onTextPart(value);\n  }\n}\n\n// src/ui/call-completion-api.ts\nvar getOriginalFetch = () => fetch;\nasync function callCompletionApi({\n  api,\n  prompt,\n  credentials,\n  headers,\n  body,\n  streamProtocol = \"data\",\n  setCompletion,\n  setLoading,\n  setError,\n  setAbortController,\n  onFinish,\n  onError,\n  fetch: fetch2 = getOriginalFetch()\n}) {\n  var _a16;\n  try {\n    setLoading(true);\n    setError(void 0);\n    const abortController = new AbortController();\n    setAbortController(abortController);\n    setCompletion(\"\");\n    const response = await fetch2(api, {\n      method: \"POST\",\n      body: JSON.stringify({\n        prompt,\n        ...body\n      }),\n      credentials,\n      headers: withUserAgentSuffix9(\n        {\n          \"Content-Type\": \"application/json\",\n          ...headers\n        },\n        `ai-sdk/${VERSION}`,\n        getRuntimeEnvironmentUserAgent2()\n      ),\n      signal: abortController.signal\n    }).catch((err) => {\n      throw err;\n    });\n    if (!response.ok) {\n      throw new Error(\n        (_a16 = await response.text()) != null ? _a16 : \"Failed to fetch the chat response.\"\n      );\n    }\n    if (!response.body) {\n      throw new Error(\"The response body is empty.\");\n    }\n    let result = \"\";\n    switch (streamProtocol) {\n      case \"text\": {\n        await processTextStream({\n          stream: response.body,\n          onTextPart: (chunk) => {\n            result += chunk;\n            setCompletion(result);\n          }\n        });\n        break;\n      }\n      case \"data\": {\n        await consumeStream({\n          stream: parseJsonEventStream({\n            stream: response.body,\n            schema: uiMessageChunkSchema\n          }).pipeThrough(\n            new TransformStream({\n              async transform(part) {\n                if (!part.success) {\n                  throw part.error;\n                }\n                const streamPart = part.value;\n                if (streamPart.type === \"text-delta\") {\n                  result += streamPart.delta;\n                  setCompletion(result);\n                } else if (streamPart.type === \"error\") {\n                  throw new Error(streamPart.errorText);\n                }\n              }\n            })\n          ),\n          onError: (error) => {\n            throw error;\n          }\n        });\n        break;\n      }\n      default: {\n        const exhaustiveCheck = streamProtocol;\n        throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n      }\n    }\n    if (onFinish) {\n      onFinish(prompt, result);\n    }\n    setAbortController(null);\n    return result;\n  } catch (err) {\n    if (err.name === \"AbortError\") {\n      setAbortController(null);\n      return null;\n    }\n    if (err instanceof Error) {\n      if (onError) {\n        onError(err);\n      }\n    }\n    setError(err);\n  } finally {\n    setLoading(false);\n  }\n}\n\n// src/ui/chat.ts\nimport {\n  generateId as generateIdFunc\n} from \"@ai-sdk/provider-utils\";\n\n// src/ui/convert-file-list-to-file-ui-parts.ts\nasync function convertFileListToFileUIParts(files) {\n  if (files == null) {\n    return [];\n  }\n  if (!globalThis.FileList || !(files instanceof globalThis.FileList)) {\n    throw new Error(\"FileList is not supported in the current environment\");\n  }\n  return Promise.all(\n    Array.from(files).map(async (file) => {\n      const { name: name16, type } = file;\n      const dataUrl = await new Promise((resolve2, reject) => {\n        const reader = new FileReader();\n        reader.onload = (readerEvent) => {\n          var _a16;\n          resolve2((_a16 = readerEvent.target) == null ? void 0 : _a16.result);\n        };\n        reader.onerror = (error) => reject(error);\n        reader.readAsDataURL(file);\n      });\n      return {\n        type: \"file\",\n        mediaType: type,\n        filename: name16,\n        url: dataUrl\n      };\n    })\n  );\n}\n\n// src/ui/default-chat-transport.ts\nimport { parseJsonEventStream as parseJsonEventStream2 } from \"@ai-sdk/provider-utils\";\n\n// src/ui/http-chat-transport.ts\nimport {\n  normalizeHeaders,\n  resolve,\n  withUserAgentSuffix as withUserAgentSuffix10,\n  getRuntimeEnvironmentUserAgent as getRuntimeEnvironmentUserAgent3\n} from \"@ai-sdk/provider-utils\";\nvar HttpChatTransport = class {\n  constructor({\n    api = \"/api/chat\",\n    credentials,\n    headers,\n    body,\n    fetch: fetch2,\n    prepareSendMessagesRequest,\n    prepareReconnectToStreamRequest\n  }) {\n    this.api = api;\n    this.credentials = credentials;\n    this.headers = headers;\n    this.body = body;\n    this.fetch = fetch2;\n    this.prepareSendMessagesRequest = prepareSendMessagesRequest;\n    this.prepareReconnectToStreamRequest = prepareReconnectToStreamRequest;\n  }\n  async sendMessages({\n    abortSignal,\n    ...options\n  }) {\n    var _a16, _b, _c, _d, _e;\n    const resolvedBody = await resolve(this.body);\n    const resolvedHeaders = await resolve(this.headers);\n    const resolvedCredentials = await resolve(this.credentials);\n    const baseHeaders = {\n      ...normalizeHeaders(resolvedHeaders),\n      ...normalizeHeaders(options.headers)\n    };\n    const preparedRequest = await ((_a16 = this.prepareSendMessagesRequest) == null ? void 0 : _a16.call(this, {\n      api: this.api,\n      id: options.chatId,\n      messages: options.messages,\n      body: { ...resolvedBody, ...options.body },\n      headers: baseHeaders,\n      credentials: resolvedCredentials,\n      requestMetadata: options.metadata,\n      trigger: options.trigger,\n      messageId: options.messageId\n    }));\n    const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : this.api;\n    const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? normalizeHeaders(preparedRequest.headers) : baseHeaders;\n    const body = (preparedRequest == null ? void 0 : preparedRequest.body) !== void 0 ? preparedRequest.body : {\n      ...resolvedBody,\n      ...options.body,\n      id: options.chatId,\n      messages: options.messages,\n      trigger: options.trigger,\n      messageId: options.messageId\n    };\n    const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;\n    const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;\n    const response = await fetch2(api, {\n      method: \"POST\",\n      headers: withUserAgentSuffix10(\n        {\n          \"Content-Type\": \"application/json\",\n          ...headers\n        },\n        `ai-sdk/${VERSION}`,\n        getRuntimeEnvironmentUserAgent3()\n      ),\n      body: JSON.stringify(body),\n      credentials,\n      signal: abortSignal\n    });\n    if (!response.ok) {\n      throw new Error(\n        (_e = await response.text()) != null ? _e : \"Failed to fetch the chat response.\"\n      );\n    }\n    if (!response.body) {\n      throw new Error(\"The response body is empty.\");\n    }\n    return this.processResponseStream(response.body);\n  }\n  async reconnectToStream(options) {\n    var _a16, _b, _c, _d, _e;\n    const resolvedBody = await resolve(this.body);\n    const resolvedHeaders = await resolve(this.headers);\n    const resolvedCredentials = await resolve(this.credentials);\n    const baseHeaders = {\n      ...normalizeHeaders(resolvedHeaders),\n      ...normalizeHeaders(options.headers)\n    };\n    const preparedRequest = await ((_a16 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a16.call(this, {\n      api: this.api,\n      id: options.chatId,\n      body: { ...resolvedBody, ...options.body },\n      headers: baseHeaders,\n      credentials: resolvedCredentials,\n      requestMetadata: options.metadata\n    }));\n    const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : `${this.api}/${options.chatId}/stream`;\n    const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? normalizeHeaders(preparedRequest.headers) : baseHeaders;\n    const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;\n    const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;\n    const response = await fetch2(api, {\n      method: \"GET\",\n      headers: withUserAgentSuffix10(\n        headers,\n        `ai-sdk/${VERSION}`,\n        getRuntimeEnvironmentUserAgent3()\n      ),\n      credentials\n    });\n    if (response.status === 204) {\n      return null;\n    }\n    if (!response.ok) {\n      throw new Error(\n        (_e = await response.text()) != null ? _e : \"Failed to fetch the chat response.\"\n      );\n    }\n    if (!response.body) {\n      throw new Error(\"The response body is empty.\");\n    }\n    return this.processResponseStream(response.body);\n  }\n};\n\n// src/ui/default-chat-transport.ts\nvar DefaultChatTransport = class extends HttpChatTransport {\n  constructor(options = {}) {\n    super(options);\n  }\n  processResponseStream(stream) {\n    return parseJsonEventStream2({\n      stream,\n      schema: uiMessageChunkSchema\n    }).pipeThrough(\n      new TransformStream({\n        async transform(chunk, controller) {\n          if (!chunk.success) {\n            throw chunk.error;\n          }\n          controller.enqueue(chunk.value);\n        }\n      })\n    );\n  }\n};\n\n// src/ui/chat.ts\nvar AbstractChat = class {\n  constructor({\n    generateId: generateId3 = generateIdFunc,\n    id = generateId3(),\n    transport = new DefaultChatTransport(),\n    messageMetadataSchema,\n    dataPartSchemas,\n    state,\n    onError,\n    onToolCall,\n    onFinish,\n    onData,\n    sendAutomaticallyWhen\n  }) {\n    this.activeResponse = void 0;\n    this.jobExecutor = new SerialJobExecutor();\n    /**\n     * Appends or replaces a user message to the chat list. This triggers the API call to fetch\n     * the assistant's response.\n     *\n     * If a messageId is provided, the message will be replaced.\n     */\n    this.sendMessage = async (message, options) => {\n      var _a16, _b, _c, _d;\n      if (message == null) {\n        await this.makeRequest({\n          trigger: \"submit-message\",\n          messageId: (_a16 = this.lastMessage) == null ? void 0 : _a16.id,\n          ...options\n        });\n        return;\n      }\n      let uiMessage;\n      if (\"text\" in message || \"files\" in message) {\n        const fileParts = Array.isArray(message.files) ? message.files : await convertFileListToFileUIParts(message.files);\n        uiMessage = {\n          parts: [\n            ...fileParts,\n            ...\"text\" in message && message.text != null ? [{ type: \"text\", text: message.text }] : []\n          ]\n        };\n      } else {\n        uiMessage = message;\n      }\n      if (message.messageId != null) {\n        const messageIndex = this.state.messages.findIndex(\n          (m) => m.id === message.messageId\n        );\n        if (messageIndex === -1) {\n          throw new Error(`message with id ${message.messageId} not found`);\n        }\n        if (this.state.messages[messageIndex].role !== \"user\") {\n          throw new Error(\n            `message with id ${message.messageId} is not a user message`\n          );\n        }\n        this.state.messages = this.state.messages.slice(0, messageIndex + 1);\n        this.state.replaceMessage(messageIndex, {\n          ...uiMessage,\n          id: message.messageId,\n          role: (_b = uiMessage.role) != null ? _b : \"user\",\n          metadata: message.metadata\n        });\n      } else {\n        this.state.pushMessage({\n          ...uiMessage,\n          id: (_c = uiMessage.id) != null ? _c : this.generateId(),\n          role: (_d = uiMessage.role) != null ? _d : \"user\",\n          metadata: message.metadata\n        });\n      }\n      await this.makeRequest({\n        trigger: \"submit-message\",\n        messageId: message.messageId,\n        ...options\n      });\n    };\n    /**\n     * Regenerate the assistant message with the provided message id.\n     * If no message id is provided, the last assistant message will be regenerated.\n     */\n    this.regenerate = async ({\n      messageId,\n      ...options\n    } = {}) => {\n      const messageIndex = messageId == null ? this.state.messages.length - 1 : this.state.messages.findIndex((message) => message.id === messageId);\n      if (messageIndex === -1) {\n        throw new Error(`message ${messageId} not found`);\n      }\n      this.state.messages = this.state.messages.slice(\n        0,\n        // if the message is a user message, we need to include it in the request:\n        this.messages[messageIndex].role === \"assistant\" ? messageIndex : messageIndex + 1\n      );\n      await this.makeRequest({\n        trigger: \"regenerate-message\",\n        messageId,\n        ...options\n      });\n    };\n    /**\n     * Attempt to resume an ongoing streaming response.\n     */\n    this.resumeStream = async (options = {}) => {\n      await this.makeRequest({ trigger: \"resume-stream\", ...options });\n    };\n    /**\n     * Clear the error state and set the status to ready if the chat is in an error state.\n     */\n    this.clearError = () => {\n      if (this.status === \"error\") {\n        this.state.error = void 0;\n        this.setStatus({ status: \"ready\" });\n      }\n    };\n    this.addToolOutput = async ({\n      state = \"output-available\",\n      tool: tool2,\n      toolCallId,\n      output,\n      errorText\n    }) => this.jobExecutor.run(async () => {\n      var _a16, _b;\n      const messages = this.state.messages;\n      const lastMessage = messages[messages.length - 1];\n      this.state.replaceMessage(messages.length - 1, {\n        ...lastMessage,\n        parts: lastMessage.parts.map(\n          (part) => isToolOrDynamicToolUIPart(part) && part.toolCallId === toolCallId ? { ...part, state, output, errorText } : part\n        )\n      });\n      if (this.activeResponse) {\n        this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(\n          (part) => isToolOrDynamicToolUIPart(part) && part.toolCallId === toolCallId ? {\n            ...part,\n            state,\n            output,\n            errorText\n          } : part\n        );\n      }\n      if (this.status !== \"streaming\" && this.status !== \"submitted\" && ((_a16 = this.sendAutomaticallyWhen) == null ? void 0 : _a16.call(this, { messages: this.state.messages }))) {\n        this.makeRequest({\n          trigger: \"submit-message\",\n          messageId: (_b = this.lastMessage) == null ? void 0 : _b.id\n        });\n      }\n    });\n    /** @deprecated Use addToolOutput */\n    this.addToolResult = this.addToolOutput;\n    /**\n     * Abort the current request immediately, keep the generated tokens if any.\n     */\n    this.stop = async () => {\n      var _a16;\n      if (this.status !== \"streaming\" && this.status !== \"submitted\")\n        return;\n      if ((_a16 = this.activeResponse) == null ? void 0 : _a16.abortController) {\n        this.activeResponse.abortController.abort();\n      }\n    };\n    this.id = id;\n    this.transport = transport;\n    this.generateId = generateId3;\n    this.messageMetadataSchema = messageMetadataSchema;\n    this.dataPartSchemas = dataPartSchemas;\n    this.state = state;\n    this.onError = onError;\n    this.onToolCall = onToolCall;\n    this.onFinish = onFinish;\n    this.onData = onData;\n    this.sendAutomaticallyWhen = sendAutomaticallyWhen;\n  }\n  /**\n   * Hook status:\n   *\n   * - `submitted`: The message has been sent to the API and we're awaiting the start of the response stream.\n   * - `streaming`: The response is actively streaming in from the API, receiving chunks of data.\n   * - `ready`: The full response has been received and processed; a new user message can be submitted.\n   * - `error`: An error occurred during the API request, preventing successful completion.\n   */\n  get status() {\n    return this.state.status;\n  }\n  setStatus({\n    status,\n    error\n  }) {\n    if (this.status === status)\n      return;\n    this.state.status = status;\n    this.state.error = error;\n  }\n  get error() {\n    return this.state.error;\n  }\n  get messages() {\n    return this.state.messages;\n  }\n  get lastMessage() {\n    return this.state.messages[this.state.messages.length - 1];\n  }\n  set messages(messages) {\n    this.state.messages = messages;\n  }\n  async makeRequest({\n    trigger,\n    metadata,\n    headers,\n    body,\n    messageId\n  }) {\n    var _a16, _b, _c, _d;\n    this.setStatus({ status: \"submitted\", error: void 0 });\n    const lastMessage = this.lastMessage;\n    let isAbort = false;\n    let isDisconnect = false;\n    let isError = false;\n    try {\n      const activeResponse = {\n        state: createStreamingUIMessageState({\n          lastMessage: this.state.snapshot(lastMessage),\n          messageId: this.generateId()\n        }),\n        abortController: new AbortController()\n      };\n      activeResponse.abortController.signal.addEventListener(\"abort\", () => {\n        isAbort = true;\n      });\n      this.activeResponse = activeResponse;\n      let stream;\n      if (trigger === \"resume-stream\") {\n        const reconnect = await this.transport.reconnectToStream({\n          chatId: this.id,\n          metadata,\n          headers,\n          body\n        });\n        if (reconnect == null) {\n          this.setStatus({ status: \"ready\" });\n          return;\n        }\n        stream = reconnect;\n      } else {\n        stream = await this.transport.sendMessages({\n          chatId: this.id,\n          messages: this.state.messages,\n          abortSignal: activeResponse.abortController.signal,\n          metadata,\n          headers,\n          body,\n          trigger,\n          messageId\n        });\n      }\n      const runUpdateMessageJob = (job) => (\n        // serialize the job execution to avoid race conditions:\n        this.jobExecutor.run(\n          () => job({\n            state: activeResponse.state,\n            write: () => {\n              var _a17;\n              this.setStatus({ status: \"streaming\" });\n              const replaceLastMessage = activeResponse.state.message.id === ((_a17 = this.lastMessage) == null ? void 0 : _a17.id);\n              if (replaceLastMessage) {\n                this.state.replaceMessage(\n                  this.state.messages.length - 1,\n                  activeResponse.state.message\n                );\n              } else {\n                this.state.pushMessage(activeResponse.state.message);\n              }\n            }\n          })\n        )\n      );\n      await consumeStream({\n        stream: processUIMessageStream({\n          stream,\n          onToolCall: this.onToolCall,\n          onData: this.onData,\n          messageMetadataSchema: this.messageMetadataSchema,\n          dataPartSchemas: this.dataPartSchemas,\n          runUpdateMessageJob,\n          onError: (error) => {\n            throw error;\n          }\n        }),\n        onError: (error) => {\n          throw error;\n        }\n      });\n      this.setStatus({ status: \"ready\" });\n    } catch (err) {\n      if (isAbort || err.name === \"AbortError\") {\n        isAbort = true;\n        this.setStatus({ status: \"ready\" });\n        return null;\n      }\n      isError = true;\n      if (err instanceof TypeError && (err.message.toLowerCase().includes(\"fetch\") || err.message.toLowerCase().includes(\"network\"))) {\n        isDisconnect = true;\n      }\n      if (this.onError && err instanceof Error) {\n        this.onError(err);\n      }\n      this.setStatus({ status: \"error\", error: err });\n    } finally {\n      try {\n        (_b = this.onFinish) == null ? void 0 : _b.call(this, {\n          message: this.activeResponse.state.message,\n          messages: this.state.messages,\n          isAbort,\n          isDisconnect,\n          isError,\n          finishReason: (_a16 = this.activeResponse) == null ? void 0 : _a16.state.finishReason\n        });\n      } catch (err) {\n        console.error(err);\n      }\n      this.activeResponse = void 0;\n    }\n    if (((_c = this.sendAutomaticallyWhen) == null ? void 0 : _c.call(this, { messages: this.state.messages })) && !isError) {\n      await this.makeRequest({\n        trigger: \"submit-message\",\n        messageId: (_d = this.lastMessage) == null ? void 0 : _d.id,\n        metadata,\n        headers,\n        body\n      });\n    }\n  }\n};\n\n// src/ui/last-assistant-message-is-complete-with-tool-calls.ts\nfunction lastAssistantMessageIsCompleteWithToolCalls({\n  messages\n}) {\n  const message = messages[messages.length - 1];\n  if (!message) {\n    return false;\n  }\n  if (message.role !== \"assistant\") {\n    return false;\n  }\n  const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n    return part.type === \"step-start\" ? index : lastIndex;\n  }, -1);\n  const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolOrDynamicToolUIPart).filter((part) => !part.providerExecuted);\n  return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every(\n    (part) => part.state === \"output-available\" || part.state === \"output-error\"\n  );\n}\n\n// src/ui/transform-text-to-ui-message-stream.ts\nfunction transformTextToUiMessageStream({\n  stream\n}) {\n  return stream.pipeThrough(\n    new TransformStream({\n      start(controller) {\n        controller.enqueue({ type: \"start\" });\n        controller.enqueue({ type: \"start-step\" });\n        controller.enqueue({ type: \"text-start\", id: \"text-1\" });\n      },\n      async transform(part, controller) {\n        controller.enqueue({ type: \"text-delta\", id: \"text-1\", delta: part });\n      },\n      async flush(controller) {\n        controller.enqueue({ type: \"text-end\", id: \"text-1\" });\n        controller.enqueue({ type: \"finish-step\" });\n        controller.enqueue({ type: \"finish\" });\n      }\n    })\n  );\n}\n\n// src/ui/text-stream-chat-transport.ts\nvar TextStreamChatTransport = class extends HttpChatTransport {\n  constructor(options = {}) {\n    super(options);\n  }\n  processResponseStream(stream) {\n    return transformTextToUiMessageStream({\n      stream: stream.pipeThrough(new TextDecoderStream())\n    });\n  }\n};\n\n// src/ui/validate-ui-messages.ts\nimport { TypeValidationError as TypeValidationError4 } from \"@ai-sdk/provider\";\nimport {\n  lazyValidator as lazyValidator2,\n  validateTypes as validateTypes2,\n  zodSchema as zodSchema2\n} from \"@ai-sdk/provider-utils\";\nimport { z as z8 } from \"zod/v4\";\nvar uiMessagesSchema = lazyValidator2(\n  () => zodSchema2(\n    z8.array(\n      z8.object({\n        id: z8.string(),\n        role: z8.enum([\"system\", \"user\", \"assistant\"]),\n        metadata: z8.unknown().optional(),\n        parts: z8.array(\n          z8.union([\n            z8.object({\n              type: z8.literal(\"text\"),\n              text: z8.string(),\n              state: z8.enum([\"streaming\", \"done\"]).optional(),\n              providerMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"reasoning\"),\n              text: z8.string(),\n              state: z8.enum([\"streaming\", \"done\"]).optional(),\n              providerMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"source-url\"),\n              sourceId: z8.string(),\n              url: z8.string(),\n              title: z8.string().optional(),\n              providerMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"source-document\"),\n              sourceId: z8.string(),\n              mediaType: z8.string(),\n              title: z8.string(),\n              filename: z8.string().optional(),\n              providerMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"file\"),\n              mediaType: z8.string(),\n              filename: z8.string().optional(),\n              url: z8.string(),\n              providerMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"step-start\")\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"data-\"),\n              id: z8.string().optional(),\n              data: z8.unknown()\n            }),\n            z8.object({\n              type: z8.literal(\"dynamic-tool\"),\n              toolName: z8.string(),\n              toolCallId: z8.string(),\n              state: z8.literal(\"input-streaming\"),\n              input: z8.unknown().optional(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional()\n            }),\n            z8.object({\n              type: z8.literal(\"dynamic-tool\"),\n              toolName: z8.string(),\n              toolCallId: z8.string(),\n              state: z8.literal(\"input-available\"),\n              input: z8.unknown(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.literal(\"dynamic-tool\"),\n              toolName: z8.string(),\n              toolCallId: z8.string(),\n              state: z8.literal(\"output-available\"),\n              input: z8.unknown(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.unknown(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              preliminary: z8.boolean().optional()\n            }),\n            z8.object({\n              type: z8.literal(\"dynamic-tool\"),\n              toolName: z8.string(),\n              toolCallId: z8.string(),\n              state: z8.literal(\"output-error\"),\n              input: z8.unknown(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.never().optional(),\n              errorText: z8.string(),\n              callProviderMetadata: providerMetadataSchema.optional()\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"input-streaming\"),\n              providerExecuted: z8.boolean().optional(),\n              input: z8.unknown().optional(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              approval: z8.never().optional()\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"input-available\"),\n              providerExecuted: z8.boolean().optional(),\n              input: z8.unknown(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              approval: z8.never().optional()\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"approval-requested\"),\n              input: z8.unknown(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              approval: z8.object({\n                id: z8.string(),\n                approved: z8.never().optional(),\n                reason: z8.never().optional()\n              })\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"approval-responded\"),\n              input: z8.unknown(),\n              providerExecuted: z8.boolean().optional(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              approval: z8.object({\n                id: z8.string(),\n                approved: z8.boolean(),\n                reason: z8.string().optional()\n              })\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"output-available\"),\n              providerExecuted: z8.boolean().optional(),\n              input: z8.unknown(),\n              output: z8.unknown(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              preliminary: z8.boolean().optional(),\n              approval: z8.object({\n                id: z8.string(),\n                approved: z8.literal(true),\n                reason: z8.string().optional()\n              }).optional()\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"output-error\"),\n              providerExecuted: z8.boolean().optional(),\n              input: z8.unknown(),\n              output: z8.never().optional(),\n              errorText: z8.string(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              approval: z8.object({\n                id: z8.string(),\n                approved: z8.literal(true),\n                reason: z8.string().optional()\n              }).optional()\n            }),\n            z8.object({\n              type: z8.string().startsWith(\"tool-\"),\n              toolCallId: z8.string(),\n              state: z8.literal(\"output-denied\"),\n              providerExecuted: z8.boolean().optional(),\n              input: z8.unknown(),\n              output: z8.never().optional(),\n              errorText: z8.never().optional(),\n              callProviderMetadata: providerMetadataSchema.optional(),\n              approval: z8.object({\n                id: z8.string(),\n                approved: z8.literal(false),\n                reason: z8.string().optional()\n              })\n            })\n          ])\n        ).nonempty(\"Message must contain at least one part\")\n      })\n    ).nonempty(\"Messages array must not be empty\")\n  )\n);\nasync function safeValidateUIMessages({\n  messages,\n  metadataSchema,\n  dataSchemas,\n  tools\n}) {\n  try {\n    if (messages == null) {\n      return {\n        success: false,\n        error: new InvalidArgumentError({\n          parameter: \"messages\",\n          value: messages,\n          message: \"messages parameter must be provided\"\n        })\n      };\n    }\n    const validatedMessages = await validateTypes2({\n      value: messages,\n      schema: uiMessagesSchema\n    });\n    if (metadataSchema) {\n      for (const message of validatedMessages) {\n        await validateTypes2({\n          value: message.metadata,\n          schema: metadataSchema\n        });\n      }\n    }\n    if (dataSchemas) {\n      for (const message of validatedMessages) {\n        const dataParts = message.parts.filter(\n          (part) => part.type.startsWith(\"data-\")\n        );\n        for (const dataPart of dataParts) {\n          const dataName = dataPart.type.slice(5);\n          const dataSchema = dataSchemas[dataName];\n          if (!dataSchema) {\n            return {\n              success: false,\n              error: new TypeValidationError4({\n                value: dataPart.data,\n                cause: `No data schema found for data part ${dataName}`\n              })\n            };\n          }\n          await validateTypes2({\n            value: dataPart.data,\n            schema: dataSchema\n          });\n        }\n      }\n    }\n    if (tools) {\n      for (const message of validatedMessages) {\n        const toolParts = message.parts.filter(\n          (part) => part.type.startsWith(\"tool-\")\n        );\n        for (const toolPart of toolParts) {\n          const toolName = toolPart.type.slice(5);\n          const tool2 = tools[toolName];\n          if (!tool2) {\n            return {\n              success: false,\n              error: new TypeValidationError4({\n                value: toolPart.input,\n                cause: `No tool schema found for tool part ${toolName}`\n              })\n            };\n          }\n          if (toolPart.state === \"input-available\" || toolPart.state === \"output-available\" || toolPart.state === \"output-error\") {\n            await validateTypes2({\n              value: toolPart.input,\n              schema: tool2.inputSchema\n            });\n          }\n          if (toolPart.state === \"output-available\" && tool2.outputSchema) {\n            await validateTypes2({\n              value: toolPart.output,\n              schema: tool2.outputSchema\n            });\n          }\n        }\n      }\n    }\n    return {\n      success: true,\n      data: validatedMessages\n    };\n  } catch (error) {\n    const err = error;\n    return {\n      success: false,\n      error: err\n    };\n  }\n}\nasync function validateUIMessages({\n  messages,\n  metadataSchema,\n  dataSchemas,\n  tools\n}) {\n  const response = await safeValidateUIMessages({\n    messages,\n    metadataSchema,\n    dataSchemas,\n    tools\n  });\n  if (!response.success)\n    throw response.error;\n  return response.data;\n}\n\n// src/ui-message-stream/create-ui-message-stream.ts\nimport {\n  generateId as generateIdFunc2,\n  getErrorMessage as getErrorMessage8\n} from \"@ai-sdk/provider-utils\";\nfunction createUIMessageStream({\n  execute,\n  onError = getErrorMessage8,\n  originalMessages,\n  onFinish,\n  generateId: generateId3 = generateIdFunc2\n}) {\n  let controller;\n  const ongoingStreamPromises = [];\n  const stream = new ReadableStream({\n    start(controllerArg) {\n      controller = controllerArg;\n    }\n  });\n  function safeEnqueue(data) {\n    try {\n      controller.enqueue(data);\n    } catch (error) {\n    }\n  }\n  try {\n    const result = execute({\n      writer: {\n        write(part) {\n          safeEnqueue(part);\n        },\n        merge(streamArg) {\n          ongoingStreamPromises.push(\n            (async () => {\n              const reader = streamArg.getReader();\n              while (true) {\n                const { done, value } = await reader.read();\n                if (done)\n                  break;\n                safeEnqueue(value);\n              }\n            })().catch((error) => {\n              safeEnqueue({\n                type: \"error\",\n                errorText: onError(error)\n              });\n            })\n          );\n        },\n        onError\n      }\n    });\n    if (result) {\n      ongoingStreamPromises.push(\n        result.catch((error) => {\n          safeEnqueue({\n            type: \"error\",\n            errorText: onError(error)\n          });\n        })\n      );\n    }\n  } catch (error) {\n    safeEnqueue({\n      type: \"error\",\n      errorText: onError(error)\n    });\n  }\n  const waitForStreams = new Promise(async (resolve2) => {\n    while (ongoingStreamPromises.length > 0) {\n      await ongoingStreamPromises.shift();\n    }\n    resolve2();\n  });\n  waitForStreams.finally(() => {\n    try {\n      controller.close();\n    } catch (error) {\n    }\n  });\n  return handleUIMessageStreamFinish({\n    stream,\n    messageId: generateId3(),\n    originalMessages,\n    onFinish,\n    onError\n  });\n}\n\n// src/ui-message-stream/read-ui-message-stream.ts\nfunction readUIMessageStream({\n  message,\n  stream,\n  onError,\n  terminateOnError = false\n}) {\n  var _a16;\n  let controller;\n  let hasErrored = false;\n  const outputStream = new ReadableStream({\n    start(controllerParam) {\n      controller = controllerParam;\n    }\n  });\n  const state = createStreamingUIMessageState({\n    messageId: (_a16 = message == null ? void 0 : message.id) != null ? _a16 : \"\",\n    lastMessage: message\n  });\n  const handleError = (error) => {\n    onError == null ? void 0 : onError(error);\n    if (!hasErrored && terminateOnError) {\n      hasErrored = true;\n      controller == null ? void 0 : controller.error(error);\n    }\n  };\n  consumeStream({\n    stream: processUIMessageStream({\n      stream,\n      runUpdateMessageJob(job) {\n        return job({\n          state,\n          write: () => {\n            controller == null ? void 0 : controller.enqueue(structuredClone(state.message));\n          }\n        });\n      },\n      onError: handleError\n    }),\n    onError: handleError\n  }).finally(() => {\n    if (!hasErrored) {\n      controller == null ? void 0 : controller.close();\n    }\n  });\n  return createAsyncIterableStream(outputStream);\n}\nexport {\n  AISDKError17 as AISDKError,\n  APICallError,\n  AbstractChat,\n  DefaultChatTransport,\n  DownloadError,\n  EmptyResponseBodyError,\n  Agent as Experimental_Agent,\n  HttpChatTransport,\n  InvalidArgumentError,\n  InvalidDataContentError,\n  InvalidMessageRoleError,\n  InvalidPromptError,\n  InvalidResponseDataError,\n  InvalidStreamPartError,\n  InvalidToolInputError,\n  JSONParseError,\n  JsonToSseTransformStream,\n  LoadAPIKeyError,\n  LoadSettingError,\n  MessageConversionError,\n  NoContentGeneratedError,\n  NoImageGeneratedError,\n  NoObjectGeneratedError,\n  NoOutputGeneratedError,\n  NoOutputSpecifiedError,\n  NoSpeechGeneratedError,\n  NoSuchModelError,\n  NoSuchProviderError,\n  NoSuchToolError,\n  output_exports as Output,\n  RetryError,\n  SerialJobExecutor,\n  TextStreamChatTransport,\n  TooManyEmbeddingValuesForCallError,\n  ToolCallRepairError,\n  TypeValidationError,\n  UI_MESSAGE_STREAM_HEADERS,\n  UnsupportedFunctionalityError,\n  UnsupportedModelVersionError,\n  asSchema5 as asSchema,\n  assistantModelMessageSchema,\n  callCompletionApi,\n  consumeStream,\n  convertFileListToFileUIParts,\n  convertToCoreMessages,\n  convertToModelMessages,\n  coreAssistantMessageSchema,\n  coreMessageSchema,\n  coreSystemMessageSchema,\n  coreToolMessageSchema,\n  coreUserMessageSchema,\n  cosineSimilarity,\n  createGateway,\n  createIdGenerator5 as createIdGenerator,\n  createProviderRegistry,\n  createTextStreamResponse,\n  createUIMessageStream,\n  createUIMessageStreamResponse,\n  customProvider,\n  defaultSettingsMiddleware,\n  dynamicTool,\n  embed,\n  embedMany,\n  experimental_createProviderRegistry,\n  experimental_customProvider,\n  generateImage as experimental_generateImage,\n  generateSpeech as experimental_generateSpeech,\n  transcribe as experimental_transcribe,\n  extractReasoningMiddleware,\n  gateway2 as gateway,\n  generateId2 as generateId,\n  generateObject,\n  generateText,\n  getTextFromDataUrl,\n  getToolName,\n  getToolOrDynamicToolName,\n  hasToolCall,\n  isDataUIPart,\n  isDeepEqualData,\n  isFileUIPart,\n  isReasoningUIPart,\n  isTextUIPart,\n  isToolOrDynamicToolUIPart,\n  isToolUIPart,\n  jsonSchema,\n  lastAssistantMessageIsCompleteWithToolCalls,\n  modelMessageSchema,\n  parseJsonEventStream3 as parseJsonEventStream,\n  parsePartialJson,\n  pipeTextStreamToResponse,\n  pipeUIMessageStreamToResponse,\n  pruneMessages,\n  readUIMessageStream,\n  safeValidateUIMessages,\n  simulateReadableStream,\n  simulateStreamingMiddleware,\n  smoothStream,\n  stepCountIs,\n  streamObject,\n  streamText,\n  systemModelMessageSchema,\n  tool,\n  toolModelMessageSchema,\n  uiMessageChunkSchema,\n  userModelMessageSchema,\n  validateUIMessages,\n  wrapLanguageModel,\n  wrapProvider,\n  zodSchema3 as zodSchema\n};\n//# sourceMappingURL=index.mjs.map","function throttle(function_, wait) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first argument to be a \\`function\\`, got \\`${typeof function_}\\`.`);\n\t}\n\n\t// TODO: Add `wait` validation too in the next major version.\n\n\tlet timeoutId;\n\tlet lastCallTime = 0;\n\n\treturn function throttled(...arguments_) { // eslint-disable-line func-names\n\t\tclearTimeout(timeoutId);\n\n\t\tconst now = Date.now();\n\t\tconst timeSinceLastCall = now - lastCallTime;\n\t\tconst delayForNextCall = wait - timeSinceLastCall;\n\n\t\tif (delayForNextCall <= 0) {\n\t\t\tlastCallTime = now;\n\t\t\tfunction_.apply(this, arguments_);\n\t\t} else {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tlastCallTime = Date.now();\n\t\t\t\tfunction_.apply(this, arguments_);\n\t\t\t}, delayForNextCall);\n\t\t}\n\t};\n}\n\nmodule.exports = throttle;\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\n\n// src/use-chat.ts\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\n\n// src/chat.react.ts\nimport { AbstractChat } from \"ai\";\n\n// src/throttle.ts\nimport throttleFunction from \"throttleit\";\nfunction throttle(fn, waitMs) {\n  return waitMs != null ? throttleFunction(fn, waitMs) : fn;\n}\n\n// src/chat.react.ts\nvar _messages, _status, _error, _messagesCallbacks, _statusCallbacks, _errorCallbacks, _callMessagesCallbacks, _callStatusCallbacks, _callErrorCallbacks;\nvar ReactChatState = class {\n  constructor(initialMessages = []) {\n    __privateAdd(this, _messages, void 0);\n    __privateAdd(this, _status, \"ready\");\n    __privateAdd(this, _error, void 0);\n    __privateAdd(this, _messagesCallbacks, /* @__PURE__ */ new Set());\n    __privateAdd(this, _statusCallbacks, /* @__PURE__ */ new Set());\n    __privateAdd(this, _errorCallbacks, /* @__PURE__ */ new Set());\n    this.pushMessage = (message) => {\n      __privateSet(this, _messages, __privateGet(this, _messages).concat(message));\n      __privateGet(this, _callMessagesCallbacks).call(this);\n    };\n    this.popMessage = () => {\n      __privateSet(this, _messages, __privateGet(this, _messages).slice(0, -1));\n      __privateGet(this, _callMessagesCallbacks).call(this);\n    };\n    this.replaceMessage = (index, message) => {\n      __privateSet(this, _messages, [\n        ...__privateGet(this, _messages).slice(0, index),\n        // We deep clone the message here to ensure the new React Compiler (currently in RC) detects deeply nested parts/metadata changes:\n        this.snapshot(message),\n        ...__privateGet(this, _messages).slice(index + 1)\n      ]);\n      __privateGet(this, _callMessagesCallbacks).call(this);\n    };\n    this.snapshot = (value) => structuredClone(value);\n    this[\"~registerMessagesCallback\"] = (onChange, throttleWaitMs) => {\n      const callback = throttleWaitMs ? throttle(onChange, throttleWaitMs) : onChange;\n      __privateGet(this, _messagesCallbacks).add(callback);\n      return () => {\n        __privateGet(this, _messagesCallbacks).delete(callback);\n      };\n    };\n    this[\"~registerStatusCallback\"] = (onChange) => {\n      __privateGet(this, _statusCallbacks).add(onChange);\n      return () => {\n        __privateGet(this, _statusCallbacks).delete(onChange);\n      };\n    };\n    this[\"~registerErrorCallback\"] = (onChange) => {\n      __privateGet(this, _errorCallbacks).add(onChange);\n      return () => {\n        __privateGet(this, _errorCallbacks).delete(onChange);\n      };\n    };\n    __privateAdd(this, _callMessagesCallbacks, () => {\n      __privateGet(this, _messagesCallbacks).forEach((callback) => callback());\n    });\n    __privateAdd(this, _callStatusCallbacks, () => {\n      __privateGet(this, _statusCallbacks).forEach((callback) => callback());\n    });\n    __privateAdd(this, _callErrorCallbacks, () => {\n      __privateGet(this, _errorCallbacks).forEach((callback) => callback());\n    });\n    __privateSet(this, _messages, initialMessages);\n  }\n  get status() {\n    return __privateGet(this, _status);\n  }\n  set status(newStatus) {\n    __privateSet(this, _status, newStatus);\n    __privateGet(this, _callStatusCallbacks).call(this);\n  }\n  get error() {\n    return __privateGet(this, _error);\n  }\n  set error(newError) {\n    __privateSet(this, _error, newError);\n    __privateGet(this, _callErrorCallbacks).call(this);\n  }\n  get messages() {\n    return __privateGet(this, _messages);\n  }\n  set messages(newMessages) {\n    __privateSet(this, _messages, [...newMessages]);\n    __privateGet(this, _callMessagesCallbacks).call(this);\n  }\n};\n_messages = new WeakMap();\n_status = new WeakMap();\n_error = new WeakMap();\n_messagesCallbacks = new WeakMap();\n_statusCallbacks = new WeakMap();\n_errorCallbacks = new WeakMap();\n_callMessagesCallbacks = new WeakMap();\n_callStatusCallbacks = new WeakMap();\n_callErrorCallbacks = new WeakMap();\nvar _state;\nvar Chat = class extends AbstractChat {\n  constructor({ messages, ...init }) {\n    const state = new ReactChatState(messages);\n    super({ ...init, state });\n    __privateAdd(this, _state, void 0);\n    this[\"~registerMessagesCallback\"] = (onChange, throttleWaitMs) => __privateGet(this, _state)[\"~registerMessagesCallback\"](onChange, throttleWaitMs);\n    this[\"~registerStatusCallback\"] = (onChange) => __privateGet(this, _state)[\"~registerStatusCallback\"](onChange);\n    this[\"~registerErrorCallback\"] = (onChange) => __privateGet(this, _state)[\"~registerErrorCallback\"](onChange);\n    __privateSet(this, _state, state);\n  }\n};\n_state = new WeakMap();\n\n// src/use-chat.ts\nfunction useChat({\n  experimental_throttle: throttleWaitMs,\n  resume = false,\n  ...options\n} = {}) {\n  const chatRef = useRef(\n    \"chat\" in options ? options.chat : new Chat(options)\n  );\n  const shouldRecreateChat = \"chat\" in options && options.chat !== chatRef.current || \"id\" in options && chatRef.current.id !== options.id;\n  if (shouldRecreateChat) {\n    chatRef.current = \"chat\" in options ? options.chat : new Chat(options);\n  }\n  const subscribeToMessages = useCallback(\n    (update) => chatRef.current[\"~registerMessagesCallback\"](update, throttleWaitMs),\n    // `chatRef.current.id` is required to trigger re-subscription when the chat ID changes\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [throttleWaitMs, chatRef.current.id]\n  );\n  const messages = useSyncExternalStore(\n    subscribeToMessages,\n    () => chatRef.current.messages,\n    () => chatRef.current.messages\n  );\n  const status = useSyncExternalStore(\n    chatRef.current[\"~registerStatusCallback\"],\n    () => chatRef.current.status,\n    () => chatRef.current.status\n  );\n  const error = useSyncExternalStore(\n    chatRef.current[\"~registerErrorCallback\"],\n    () => chatRef.current.error,\n    () => chatRef.current.error\n  );\n  const setMessages = useCallback(\n    (messagesParam) => {\n      if (typeof messagesParam === \"function\") {\n        messagesParam = messagesParam(chatRef.current.messages);\n      }\n      chatRef.current.messages = messagesParam;\n    },\n    [chatRef]\n  );\n  useEffect(() => {\n    if (resume) {\n      chatRef.current.resumeStream();\n    }\n  }, [resume, chatRef]);\n  return {\n    id: chatRef.current.id,\n    messages,\n    setMessages,\n    sendMessage: chatRef.current.sendMessage,\n    regenerate: chatRef.current.regenerate,\n    clearError: chatRef.current.clearError,\n    stop: chatRef.current.stop,\n    error,\n    resumeStream: chatRef.current.resumeStream,\n    status,\n    /**\n     * @deprecated Use `addToolOutput` instead.\n     */\n    addToolResult: chatRef.current.addToolOutput,\n    addToolOutput: chatRef.current.addToolOutput\n  };\n}\n\n// src/use-completion.ts\nimport {\n  callCompletionApi\n} from \"ai\";\nimport { useCallback as useCallback2, useEffect as useEffect2, useId, useRef as useRef2, useState } from \"react\";\nimport useSWR from \"swr\";\nfunction useCompletion({\n  api = \"/api/completion\",\n  id,\n  initialCompletion = \"\",\n  initialInput = \"\",\n  credentials,\n  headers,\n  body,\n  streamProtocol = \"data\",\n  fetch: fetch2,\n  onFinish,\n  onError,\n  experimental_throttle: throttleWaitMs\n} = {}) {\n  const hookId = useId();\n  const completionId = id || hookId;\n  const { data, mutate } = useSWR([api, completionId], null, {\n    fallbackData: initialCompletion\n  });\n  const { data: isLoading = false, mutate: mutateLoading } = useSWR(\n    [completionId, \"loading\"],\n    null\n  );\n  const [error, setError] = useState(void 0);\n  const completion = data;\n  const [abortController, setAbortController] = useState(null);\n  const extraMetadataRef = useRef2({\n    credentials,\n    headers,\n    body\n  });\n  useEffect2(() => {\n    extraMetadataRef.current = {\n      credentials,\n      headers,\n      body\n    };\n  }, [credentials, headers, body]);\n  const triggerRequest = useCallback2(\n    async (prompt, options) => callCompletionApi({\n      api,\n      prompt,\n      credentials: extraMetadataRef.current.credentials,\n      headers: { ...extraMetadataRef.current.headers, ...options == null ? void 0 : options.headers },\n      body: {\n        ...extraMetadataRef.current.body,\n        ...options == null ? void 0 : options.body\n      },\n      streamProtocol,\n      fetch: fetch2,\n      // throttle streamed ui updates:\n      setCompletion: throttle(\n        (completion2) => mutate(completion2, false),\n        throttleWaitMs\n      ),\n      setLoading: mutateLoading,\n      setError,\n      setAbortController,\n      onFinish,\n      onError\n    }),\n    [\n      mutate,\n      mutateLoading,\n      api,\n      extraMetadataRef,\n      setAbortController,\n      onFinish,\n      onError,\n      setError,\n      streamProtocol,\n      fetch2,\n      throttleWaitMs\n    ]\n  );\n  const stop = useCallback2(() => {\n    if (abortController) {\n      abortController.abort();\n      setAbortController(null);\n    }\n  }, [abortController]);\n  const setCompletion = useCallback2(\n    (completion2) => {\n      mutate(completion2, false);\n    },\n    [mutate]\n  );\n  const complete = useCallback2(\n    async (prompt, options) => {\n      return triggerRequest(prompt, options);\n    },\n    [triggerRequest]\n  );\n  const [input, setInput] = useState(initialInput);\n  const handleSubmit = useCallback2(\n    (event) => {\n      var _a;\n      (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);\n      return input ? complete(input) : void 0;\n    },\n    [input, complete]\n  );\n  const handleInputChange = useCallback2(\n    (e) => {\n      setInput(e.target.value);\n    },\n    [setInput]\n  );\n  return {\n    completion,\n    complete,\n    error,\n    setCompletion,\n    stop,\n    input,\n    setInput,\n    handleInputChange,\n    handleSubmit,\n    isLoading\n  };\n}\n\n// src/use-object.ts\nimport {\n  isAbortError,\n  safeValidateTypes\n} from \"@ai-sdk/provider-utils\";\nimport {\n  asSchema,\n  isDeepEqualData,\n  parsePartialJson\n} from \"ai\";\nimport { useCallback as useCallback3, useId as useId2, useRef as useRef3, useState as useState2 } from \"react\";\nimport useSWR2 from \"swr\";\nvar getOriginalFetch = () => fetch;\nfunction useObject({\n  api,\n  id,\n  schema,\n  // required, in the future we will use it for validation\n  initialValue,\n  fetch: fetch2,\n  onError,\n  onFinish,\n  headers,\n  credentials\n}) {\n  const hookId = useId2();\n  const completionId = id != null ? id : hookId;\n  const { data, mutate } = useSWR2(\n    [api, completionId],\n    null,\n    { fallbackData: initialValue }\n  );\n  const [error, setError] = useState2(void 0);\n  const [isLoading, setIsLoading] = useState2(false);\n  const abortControllerRef = useRef3(null);\n  const stop = useCallback3(() => {\n    var _a;\n    try {\n      (_a = abortControllerRef.current) == null ? void 0 : _a.abort();\n    } catch (ignored) {\n    } finally {\n      setIsLoading(false);\n      abortControllerRef.current = null;\n    }\n  }, []);\n  const submit = async (input) => {\n    var _a;\n    try {\n      clearObject();\n      setIsLoading(true);\n      const abortController = new AbortController();\n      abortControllerRef.current = abortController;\n      const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch();\n      const response = await actualFetch(api, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          ...headers\n        },\n        credentials,\n        signal: abortController.signal,\n        body: JSON.stringify(input)\n      });\n      if (!response.ok) {\n        throw new Error(\n          (_a = await response.text()) != null ? _a : \"Failed to fetch the response.\"\n        );\n      }\n      if (response.body == null) {\n        throw new Error(\"The response body is empty.\");\n      }\n      let accumulatedText = \"\";\n      let latestObject = void 0;\n      await response.body.pipeThrough(new TextDecoderStream()).pipeTo(\n        new WritableStream({\n          async write(chunk) {\n            accumulatedText += chunk;\n            const { value } = await parsePartialJson(accumulatedText);\n            const currentObject = value;\n            if (!isDeepEqualData(latestObject, currentObject)) {\n              latestObject = currentObject;\n              mutate(currentObject);\n            }\n          },\n          async close() {\n            setIsLoading(false);\n            abortControllerRef.current = null;\n            if (onFinish != null) {\n              const validationResult = await safeValidateTypes({\n                value: latestObject,\n                schema: asSchema(schema)\n              });\n              onFinish(\n                validationResult.success ? { object: validationResult.value, error: void 0 } : { object: void 0, error: validationResult.error }\n              );\n            }\n          }\n        })\n      );\n    } catch (error2) {\n      if (isAbortError(error2)) {\n        return;\n      }\n      if (onError && error2 instanceof Error) {\n        onError(error2);\n      }\n      setIsLoading(false);\n      setError(error2 instanceof Error ? error2 : new Error(String(error2)));\n    }\n  };\n  const clear = () => {\n    stop();\n    clearObject();\n  };\n  const clearObject = () => {\n    setError(void 0);\n    setIsLoading(false);\n    mutate(void 0);\n  };\n  return {\n    submit,\n    object: data,\n    error,\n    isLoading,\n    stop,\n    clear\n  };\n}\nvar experimental_useObject = useObject;\nexport {\n  Chat,\n  experimental_useObject,\n  useChat,\n  useCompletion\n};\n//# sourceMappingURL=index.mjs.map","import { useChat, UseChatOptions, UseChatHelpers } from '@ai-sdk/react';\nimport { UIMessage } from 'ai';\nimport { useCallback, useMemo, useRef } from 'react';\nimport { useAIOfficeStore } from '@/app/store/use-ai-office-store';\nimport { usePluginRuntime } from '@/core/react-adapter/context';\n\nconst useMsgAgentIdForAssistantMsg = (messages: UIMessage[]) => {\n  const messagesWithAgent = useMemo(() => {\n    let lastUserAgentId: string | undefined;\n    return messages.map((msg) => {\n      const agentId = (msg.metadata as any)?.agentId;\n      if (msg.role === 'user' && agentId) {\n        lastUserAgentId = agentId;\n        return msg;\n      }\n      if (msg.role === 'assistant' && lastUserAgentId && !agentId) {\n        return {\n          ...msg,\n          metadata: { ...((msg as any).metadata || {}), agentId: lastUserAgentId },\n        };\n      }\n      return msg;\n    });\n  }, [messages]);\n\n  return messagesWithAgent;\n};\n\n/**\n * 合并相同 ID 的消息的 parts\n */\nfunction mergeMessagesByIdForRender<T extends UIMessage>(messages: T[]): T[] {\n  const messageMap = new Map<string, T>();\n  const orderList: string[] = []; // 保持首次出现的顺序\n\n  const getCleanPartsFromMsg = (msg: T) => {\n    return msg.parts.filter((part) => {\n      if (part.type === 'text') {\n        const text = (part as any).text;\n        return text && text.trim() !== '';\n      }\n      if (part.type === 'step-start') {\n        return false;\n      }\n      return true;\n    });\n  };\n\n  for (const msg of messages) {\n    if (messageMap.has(msg.id)) {\n      // 相同 ID：合并 parts\n      const existing = messageMap.get(msg.id)!;\n\n      messageMap.set(msg.id, {\n        ...existing,\n        parts: [...getCleanPartsFromMsg(existing), ...getCleanPartsFromMsg(msg)],\n      } as T);\n    } else {\n      orderList.push(msg.id);\n      messageMap.set(msg.id, { ...msg, parts: getCleanPartsFromMsg(msg) } as T);\n    }\n  }\n\n  // 按首次出现顺序返回\n  return orderList.map((id) => messageMap.get(id)!).filter((msg) => msg.parts.length > 0);\n}\n\nexport function useOfficeChat<UI_MESSAGE extends UIMessage = UIMessage>(\n  options?: UseChatOptions<UI_MESSAGE>\n): UseChatHelpers<UI_MESSAGE> {\n  const chat = useChat<UI_MESSAGE>(options);\n\n  const botIdRef = useRef<string | undefined>(undefined);\n\n  const messagesWithAgent = useMsgAgentIdForAssistantMsg(chat.messages);\n  const mergedMessages = useMemo(\n    () => mergeMessagesByIdForRender(messagesWithAgent),\n    [messagesWithAgent]\n  );\n\n  const activeAgent = useAIOfficeStore((state) => state.activeAgent);\n  const activeAgentHelper = useAIOfficeStore((s) => s.activeAgentHelper);\n\n  const currentWorkingAgent = activeAgent?.id || activeAgentHelper?.agentId;\n\n  botIdRef.current = currentWorkingAgent;\n\n  const { uiService } = usePluginRuntime();\n\n  const msgSender = chat.sendMessage;\n\n  const sendMessage: typeof msgSender = useCallback(\n    async (msg, options) => {\n      const transformedBody = await uiService.runMiddlewares(\n        'transform-send-message-body',\n        options?.body || {}\n      );\n\n      if (!botIdRef.current) {\n        return msgSender(msg, { ...options, body: transformedBody });\n      }\n\n      const enhancedMsg = {\n        ...(msg || {}),\n        metadata: {\n          ...((msg as any)?.metadata || {}),\n          agentId: botIdRef.current,\n        },\n      };\n\n      return msgSender(enhancedMsg as typeof msg, {\n        ...options,\n        headers: {\n          ...options?.headers,\n          'X-Bot-Id': botIdRef.current || '',\n        },\n        body: transformedBody,\n      });\n    },\n    [msgSender, uiService]\n  );\n\n  return {\n    ...chat,\n    sendMessage,\n    messages: mergedMessages as UI_MESSAGE[],\n  };\n}\n","import { useMemo } from 'react';\nimport { DefaultChatTransport } from 'ai';\n\nexport interface IChatTransportConfig {\n  api: string;\n  headers?: () => Record<string, string>;\n}\n\nexport const useChatTransport = (config: IChatTransportConfig) => {\n  const transport = useMemo(() => {\n    return new DefaultChatTransport({\n      api: `${config.api}/common/connect`,\n      headers: config.headers,\n    });\n  }, [config.api, config.headers]);\n\n  return transport;\n};\n","import { ChatMessage } from '@baishuyun/types';\n\nexport const createCommonChatErrorHandler = (\n  setMessages: React.Dispatch<React.SetStateAction<ChatMessage[]>>\n) => {\n  return (err: Error) => {\n    setMessages((prevMessages) => [\n      ...prevMessages,\n      {\n        id: `error-${Date.now()}`,\n        role: 'assistant',\n        parts: [\n          {\n            type: 'text',\n            text: `Error: ${err.message || 'An error occurred during chat.'}`,\n            providerMetadata: {\n              raw: { data: { type: 'agent-error', error: '智能体内部错误，请稍后重试' } },\n            },\n          },\n        ],\n      },\n    ]);\n  };\n};\n","import { ComponentType, createContext, useContext, useEffect, useState } from 'react';\nimport type { IAiOfficePluginApi, IOfficeAgent, IRegisteredSlotComProps } from '@baishuyun/types';\nimport { AgentShortSummary, BsUIAutomationEvent, IAgentHelper, IBsHostContextService, ICtxDetail, PreviewerActionEvent } from '@baishuyun/types';\nimport { ChatStatus } from 'ai';\nimport type { PluginServiceRegistry, ServiceName } from '@baishuyun/types';\nimport { isCtxMatch } from '@baishuyun/ai-feat-utils';\n\n// 插件级上下文，方便在插件注册的组件中获取调用 host 能力\n// 使用 globalThis + Symbol.for 确保跨 bundle（主构建 & SDK 构建）共享同一个 Context 实例\nconst scopeKey = Symbol.for('__ai_office_plugin_scope__');\nconst globalCtx = (globalThis as Record<symbol, unknown>)[scopeKey] as React.Context<IAiOfficePluginApi | null> | undefined;\nconst PluginScopeContext: React.Context<IAiOfficePluginApi | null> =\n  globalCtx || createContext<IAiOfficePluginApi | null>(null);\n(globalThis as Record<symbol, unknown>)[scopeKey] = PluginScopeContext;\n\nexport const PluginScopeProvider = PluginScopeContext.Provider;\n\n\nexport const useUIAutoMationEvent = <K extends keyof BsUIAutomationEvent>(evtName: K, handler: (payload: BsUIAutomationEvent[K]) => void) => {\n  const automationService = useService('bsUIAutomation');\n  useEffect(() => {\n    const off = automationService?.uiEvtBus.on(evtName, handler);\n\n    return () => {\n      if (typeof off === 'function') {\n        off();\n      }\n    }\n  }, [evtName, handler, automationService]);\n}\n\nexport const useChatStatus = () => {\n  const api = useHostApi();\n  const [chatStatus, setChatStatus] = useState<ChatStatus>(() => api.host.chatStatus);\n\n  useEffect(() => {\n    const off = api.host.onChatStatusChange((status) => {\n      setChatStatus(status);\n      console.log(`[useChatStatus] chat status changed:`, status);\n    });\n\n    return () => {\n      if (typeof off === 'function') {\n        off();\n      }\n    };\n  }, [api]);\n\n  return chatStatus;\n}\n\nexport const useHostApi = (): IAiOfficePluginApi => {\n  const api = useContext(PluginScopeContext);\n  if (!api) {\n    throw new Error('useHostApi must be used within a PluginScopeContext.Provider');\n  }\n  return api;\n};\n\nexport const useSafeHostApi = (): IAiOfficePluginApi | null => {\n  const api = useContext(PluginScopeContext);\n  if (!api) {\n    return null;\n  }\n\n  return api;\n}\n\nexport interface PluginCtxTools<T> {\n  Ctx: React.Context<(() => T) | null>;\n  useCtx: () => T;\n  withCtx: (\n    useStore: () => T,\n    Component: React.ComponentType<IRegisteredSlotComProps>\n  ) => ComponentType<IRegisteredSlotComProps>;\n}\n\nexport const useFieldValueService = () => {\n  const api = useHostApi();\n\n  const fieldValueService = api.service.get('bsFieldValueService');\n\n  return fieldValueService;\n}\n\n\nexport function createPluginCtx<T>(api?: IAiOfficePluginApi): PluginCtxTools<T> {\n  const Ctx = createContext<(() => T) | null>(null);\n\n  const useCtx = (): T => {\n    const useStore = useContext(Ctx);\n    if (!useStore) {\n      throw new Error(\n        'useCtx must be used within a Plugin Context Provider. ' +\n          'Make sure your component is wrapped by withCtx().'\n      );\n    }\n    return useStore();\n  };\n\n  const withCtx = (\n    useStore: () => T,\n    Component: React.ComponentType<IRegisteredSlotComProps>\n  ): ComponentType<IRegisteredSlotComProps> => {\n    const WrappedComponent: React.FC<IRegisteredSlotComProps> = props => {\n      return (\n        <Ctx.Provider value={useStore}>\n          <Component {...props} />\n        </Ctx.Provider>\n      );\n    };\n\n    if (api) {\n      const scopedComp = (props: IRegisteredSlotComProps) => (\n        <PluginScopeProvider value={api}>\n          <WrappedComponent {...props} />\n        </PluginScopeProvider>\n      );\n\n      scopedComp.displayName = `WithPluginScope(${Component.displayName || Component.name || 'Component'})`;\n      return scopedComp;\n    }\n\n    WrappedComponent.displayName = `WithPluginCtx(${Component.displayName || Component.name || 'Component'})`;\n\n    return WrappedComponent;\n  };\n\n  return { Ctx, useCtx, withCtx };\n}\n\nexport * from '../app/components/chat/messages/error-boundary';\n\nexport const useService = <K extends ServiceName>(service: K): PluginServiceRegistry[K] | null => {\n  const api = useSafeHostApi();\n  if (!api) {\n    return null;\n  } \n\n  const s = api.service.get(service);\n  return s!;\n}\n\nexport const useBsHostCtx = (hostService?: IBsHostContextService) => {\n  const api = useSafeHostApi();\n  const bsHostCtxService = hostService ?? api?.service.get('bsHostContext');\n  const [ctxDetail, setCtxDetail] = useState<ICtxDetail | null>(bsHostCtxService?.currentContext || {\n    type: 'global',\n    params: {},\n  });\n\n  useEffect(() => {\n    if (!bsHostCtxService) {\n      return;\n    }\n\n    const off = bsHostCtxService.onCtxChange((detail) => {\n      setCtxDetail(detail);\n    });\n\n    return () => {\n      if (typeof off === 'function') {\n        off();\n      }\n    };\n  }, [bsHostCtxService])\n\n  return ctxDetail;\n}\n\nexport const usePreviewerEvent = <K extends keyof PreviewerActionEvent>(name: K, handler: (payload: PreviewerActionEvent[K]) => void) => {\n  const api = useHostApi();\n\n  const previewerService = api.service.get('previewerService');\n\n  useEffect(() => {\n    const off = previewerService?.evtBus.on(name, handler);\n\n    return () => {\n      if (typeof off === 'function') {\n        off()\n      }\n    }\n  }, [name, handler])\n\n}\n\nexport const useAgentsAndHelpers= (builtIn?: boolean) => {\n  const { agents, loading } = useAgents(builtIn);\n  const helpers = useAgentHelpers();\n  const api = useHostApi();\n  const hostService = api.host;\n\n  const helpers2agents = helpers.filter(h => h.enabled).map(helper => {\n    const a = hostService.getAgentById(helper.agentId);\n    return {\n      name: helper.helperName,\n      id: helper.id,\n      icon: a?.icon || '',\n      builtIn: false,\n    }\n  })\n\n  return {\n    data: [\n      ...agents,\n      ...helpers2agents\n    ],\n    loading,\n  }\n }\n\nexport const useCurrentWorkingAgent: () => { agent: AgentShortSummary; setAgent: (a:  AgentShortSummary) => void } = () => {\n    const host = useHostApi().host;\n\n    const currentWorkingAgent = useActiveAgent();\n\n    const isHelper = currentWorkingAgent && 'agentId' in currentWorkingAgent;\n\n    const result = !isHelper\n      ? currentWorkingAgent as AgentShortSummary\n      : {\n        id: currentWorkingAgent.id,\n        name: currentWorkingAgent.helperName,\n        icon: host.getAgentById(currentWorkingAgent.agentId)?.icon || '',\n        builtIn: false,\n      }\n\n    const helperService = useHostApi().service.get('agentHelperService');\n\n    return {\n      agent: result,\n      setAgent: async (a) => {\n        if (a.builtIn) {\n          const agent = host.getAgentById(a.id);\n          await host.setCurrentWorkingAgent(agent);\n\n          return;\n        }\n\n        const helper = helperService?.getHelperById(a.id) || null;\n        await host.setCurrentWorkingHelper(helper);\n      }\n    }\n}\n\nexport const useAgents = (builtIn?: boolean) => {\n  const api = useHostApi();\n  const [agents, setAgents] = useState<Array<IOfficeAgent>>([]);\n  const [loading, setLoading] = useState(true);\n  const ctxDetail = useBsHostCtx();\n  const globalCtx = new Set(['global']);\n\n  const fetchAgents = async () => {\n    setLoading(true);\n    try {\n      const result = await api.host.fetchAgentManifest();\n\n      setAgents(builtIn ? result.filter(x => {\n        const ctx = x.matchedCtx ?? globalCtx;\n        return ctx.has(ctxDetail?.type ?? '');\n      }) : result);\n    } catch (error) {\n      console.error('获取智能体列表失败:', error);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const ctxType = ctxDetail?.type || 'global';\n\n  useEffect(() => {\n    fetchAgents();\n  }, [ctxType]);\n\n  return { agents: builtIn ? agents.filter(a => a.builtIn) : agents, loading };\n};\n\n\nexport const useAgentHelpers = () => {\n  const api = useHostApi();\n  const agentHelperService = api.service.get('agentHelperService');\n  const [, setVersion] = useState(0);\n\n  const helperList = agentHelperService?.fetchAgentHelperList();\n\n  const [helpers, setHelpers] = useState<Array<IAgentHelper>>(Array.isArray(helperList) ? helperList : []);\n\n  const ctxDetail = useBsHostCtx();\n\n  useEffect(() => {\n    if (!agentHelperService) {\n      return;\n    }\n\n    const off = agentHelperService.onAgentHelperChange((list) => {\n      setHelpers(list);\n    });\n\n    return () => {\n      if (typeof off === 'function') {\n        off();\n      }\n    };\n  }, [agentHelperService]);\n\n  useEffect(() => {\n    const unsub = api.service.onRegistered('agentHelperService', () => {\n      setVersion((v) => v + 1);\n    });\n    return unsub;\n  }, [api.service]);\n\n  return helpers.filter(h => isCtxMatch(h, ctxDetail));\n};\n\nexport const useActiveAgentName = () => {\n  const a = useActiveAgent();\n\n  if (!a) {\n    return \"\";\n  }\n\n  const helper = a as IAgentHelper;\n  if (helper.helperName) {\n    return helper.helperName;\n  }\n\n  const agent = a as IOfficeAgent;\n\n  return agent.name;\n}\n\nexport const useActiveAgent = (): IOfficeAgent | IAgentHelper | null => {\n  const api = useHostApi();\n  const [activeAgent, setActiveAgent] = useState<IOfficeAgent | IAgentHelper | null>(\n    () => api.host.currentWorkingAgent || api.host.currentWorkingHelper\n  );\n\n  useEffect(() => {\n    const unsubscribe = api.host.onActiveAgentChange((agent) => {\n      if (!agent) {\n        return;\n      }\n\n      setActiveAgent(agent);\n    });\n\n    const unsubscribeHelper = api.host.onActiveHelperChange((helper) => {\n      if (!helper) {\n        return;\n      }\n\n      setActiveAgent(helper);\n    });\n\n    return () => {\n      unsubscribe();\n      unsubscribeHelper();\n    };\n  }, [api]);\n\n  return activeAgent;\n};\n\nexport const withStyle = (Component: React.ComponentType<IRegisteredSlotComProps>, style?: string) => {\n  if (!style) {\n    return Component;\n  }\n\n  return (props: IRegisteredSlotComProps) => (\n    <>\n      <style>{style}</style>\n      <Component {...props} />\n    </>\n  );\n};","import type {\n  IAiOfficePlugin,\n  IAiOfficePluginApi,\n  IRegisteredSlotComProps,\n  PluginID,\n  SlotName,\n} from '@baishuyun/types';\nimport { createPluginCtx, PluginCtxTools } from './react';\n\nexport abstract class BaseAiOfficePlugin<T = {}> implements IAiOfficePlugin {\n  readonly id: PluginID;\n\n  protected ctxUtils!: PluginCtxTools<T>;\n\n  protected api!: IAiOfficePluginApi;\n\n  constructor(id: PluginID) {\n    this.id = id;\n  }\n\n  registerSlot(\n    slotName: SlotName,\n    component: React.ComponentType<IRegisteredSlotComProps>,\n    matcher?: (payload: unknown) => boolean\n  ) {\n    const useStore = this.useStore ?? (() => ({}) as T);\n\n    this.api.ui.registerSlot(\n      slotName,\n      this.ctxUtils.withCtx(useStore, component),\n      this.id,\n      this.weight,\n      matcher\n    );\n  }\n\n  // registerStyledSlot(\n  //   slotName: SlotName,\n  //   component: React.ComponentType<IRegisteredSlotComProps>,\n  //   style?: string\n  // ) {\n  //   const useStore = this.useStore ?? (() => ({}) as T);\n\n  //   const styledComponent = withStyle(component, style);\n\n  //   const scopedCom = this.ctxUtils.withCtx(useStore, styledComponent);\n\n  //   this.api.ui.registerSlot(slotName, scopedCom, this.id, this.weight);\n  // }\n\n  registerShadowSlot(\n    slotName: SlotName,\n    component: React.ComponentType<IRegisteredSlotComProps>,\n    style?: string,\n    matcher?: (payload: unknown) => boolean\n  ) {\n    const useStore = this.useStore ?? (() => ({}) as T);\n\n    const scopedCom = this.ctxUtils.withCtx(useStore, component);\n\n    this.api.ui.registerSlot(slotName, scopedCom, this.id, this.weight, matcher, {\n      shadow: true,\n      style,\n    });\n  }\n\n  onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    this.ctxUtils = createPluginCtx(api);\n    this.api = api;\n  }\n\n  abstract weight?: number;\n\n  abstract useStore?: () => T;\n\n  onDestroy(): void | Promise<void> {\n    console.log(`Destroying plugin ${this.id} in base abstract class`);\n\n    this.ctxUtils = null as never;\n\n    const previewerService = this.api.service.get('previewerService');\n    if (previewerService) {\n      console.log('Plugin onDestroy: resetting previewerService state');\n      previewerService.reset();\n    }\n  }\n}\n","import { EventBus } from '@baishuyun/types';\n\nexport { type EventBus };\n\nexport function createEventBus<Events extends Record<string, unknown>>(): EventBus<Events> {\n  const listeners = new Map<keyof Events, Set<(data: Events[keyof Events]) => void>>();\n\n  return {\n    on<K extends keyof Events>(event: K, callback: (data: Events[K]) => void): () => void {\n      if (!listeners.has(event)) {\n        listeners.set(event, new Set());\n      }\n      const set = listeners.get(event)!;\n      const cb = callback as (data: Events[keyof Events]) => void;\n      set.add(cb);\n      return () => {\n        set.delete(cb);\n      };\n    },\n\n    emit<K extends keyof Events>(event: K, data: Events[K]): void {\n      const set = listeners.get(event);\n      if (!set) return;\n      set.forEach((callback) => callback(data as Events[keyof Events]));\n    },\n  };\n}\n","import { ChatStatus, UIMessage } from 'ai';\nimport { useAIOfficeStore } from '../store/use-ai-office-store';\nimport { usePluginRuntime } from '@/core/react-adapter/context';\nimport { useCallback, useEffect } from 'react';\nimport { isCtxMatch, safeParseJson } from '@baishuyun/ai-feat-utils';\nimport { useBsHostCtx } from '@/sdk';\n\nconst getLastMsgText = (msg: UIMessage): string => {\n  if (!msg) return '';\n\n  return msg.parts\n    .filter((part) => part.type === 'text')\n    .map((part) => (part as any).text)\n    .join('');\n};\n\n// 解析智能体发布配置，自动填充输出\nexport const usePublisherConfigParser = (messages: UIMessage[], status: ChatStatus) => {\n  const activeHelper = useAIOfficeStore((s) => s.activeAgentHelper);\n  const runtime = usePluginRuntime();\n  const hostCtxService = runtime.serviceRegistry.get('bsHostContext');\n\n  const hasValidConfig = activeHelper && activeHelper.outputParam?.length;\n  const outputConfig = activeHelper?.outputParam;\n\n  const fillWidget = runtime?.serviceRegistry.get('bsUIAutomation')?.fillWidget;\n  const get = runtime?.serviceRegistry.get('bsPlatformService')?.get;\n  const openFormModal = runtime?.serviceRegistry.get('bsUIAutomation')?.openFormModal;\n  const hostCtxDetail = useBsHostCtx(hostCtxService);\n  const isHelperCtxMatch = isCtxMatch(activeHelper, hostCtxDetail);\n\n  const parse = useCallback(async () => {\n    if (!isHelperCtxMatch) {\n      return;\n    }\n\n    if (!hasValidConfig) {\n      return;\n    }\n\n    if (status !== 'ready') {\n      return;\n    }\n\n    if (!get || !fillWidget || !openFormModal) {\n      return;\n    }\n\n    const lastBotMsg = messages.filter((msg) => msg.role === 'assistant').pop();\n    if (!lastBotMsg) {\n      return;\n    }\n\n    const parsedMsg = safeParseJson(getLastMsgText(lastBotMsg));\n    if (!parsedMsg) {\n      return;\n    }\n\n    for (const { targetField, sourceField } of outputConfig || []) {\n      const sourceFields = sourceField.fieldName.split('.');\n\n      const isSourceArray =\n        sourceFields.length > 1 && Array.isArray(get(parsedMsg, sourceFields[0]));\n\n      // 常规字段填充\n      if (!isSourceArray) {\n        const targetValue = get(parsedMsg, sourceField.fieldName);\n        if (targetValue !== undefined) {\n          await openFormModal();\n\n          const fields = targetField.fieldName.split('.');\n          const parentFieldName = fields.length > 1 ? fields[0] : undefined;\n          const fieldName = fields.length > 1 ? fields[1] : fields[0];\n\n          fillWidget({\n            field: {\n              widget: {\n                widgetName: fieldName,\n                value: targetValue,\n              },\n            },\n            checked: true,\n            parentFieldName,\n          });\n        }\n\n        continue;\n      }\n\n      // 数组数据源填充(多条子表单数据)\n      const source = get(parsedMsg, sourceFields[0]);\n      let idx = 0;\n      if (source.length) {\n        await openFormModal();\n        for (const _ of source) {\n          const path = `${sourceFields[0]}[${idx}].${sourceFields.slice(1).join('.')}`;\n          const targetValue = get(parsedMsg, path);\n          if (targetValue !== undefined) {\n            const fields = targetField.fieldName.split('.');\n            const parentFieldName = fields.length > 1 ? fields[0] : undefined;\n            const currentFieldName = fields.length > 1 ? fields[1] : fields[0];\n\n            fillWidget({\n              field: {\n                widget: {\n                  widgetName: currentFieldName,\n                  value: targetValue,\n                },\n              },\n              checked: true,\n              rowIndex: idx,\n              parentFieldName,\n            });\n          }\n          idx++;\n        }\n      }\n    }\n  }, [status, messages, fillWidget, get, hasValidConfig, outputConfig, openFormModal, isCtxMatch]);\n\n  useEffect(() => {\n    parse();\n  }, [status, messages, fillWidget, get, hasValidConfig, outputConfig, openFormModal]);\n};\n","import { useEffect } from 'react';\nimport { ChatStatus, UIMessage } from 'ai';\nimport { useAIOfficeStore } from '../store/use-ai-office-store';\nimport { usePluginRuntime } from '@/core/react-adapter/context';\nimport { isCtxMatch, safeParseJson } from '@baishuyun/ai-feat-utils';\nimport { useBsHostCtx } from '@/sdk';\n\nconst getLastMsgText = (msg: UIMessage): string => {\n  if (!msg) return '';\n\n  return msg.parts\n    .filter((part) => part.type === 'text')\n    .map((part) => (part as any).text)\n    .join('');\n};\n\nexport const useBotReadyJonsMsg = (\n  messages: UIMessage[],\n  status: ChatStatus,\n  onParsed: (parsed: unknown) => void\n) => {\n  // const [parsed, setParsed] = useState<unknown | null>(null);\n\n  const activeHelper = useAIOfficeStore((s) => s.activeAgentHelper);\n  const runtime = usePluginRuntime();\n  const hostCtxService = runtime.serviceRegistry.get('bsHostContext');\n\n  // const hostCtxDetail = useBsHostCtx(hostCtxService);\n\n  useEffect(() => {\n    const isHelperCtxMatch = isCtxMatch(activeHelper, hostCtxService?.currentContext!);\n    if (status !== 'ready') {\n      return;\n    }\n\n    if (!isHelperCtxMatch) {\n      return;\n    }\n\n    const lastBotMsg = messages.filter((msg) => msg.role === 'assistant').pop();\n    if (!lastBotMsg) {\n      return;\n    }\n\n    const parsedMsg = safeParseJson(getLastMsgText(lastBotMsg));\n    if (!parsedMsg) {\n      return;\n    }\n\n    onParsed?.(parsedMsg);\n  }, [messages, status, hostCtxService?.currentContext!]);\n};\n","import { ChatStatus, UIMessage } from 'ai';\nimport { useBotReadyJonsMsg } from './use-bot-ready-json-msg';\nimport { AIOffice } from '..';\nimport { IStdActionMsg } from '@baishuyun/types';\nimport { usePluginRuntime } from '@/core/react-adapter/context';\n\nexport const useStdActionTaskParser = (messages: UIMessage[], status: ChatStatus) => {\n  const taskQueue = AIOffice.getInstance().stdActionTasks;\n\n  const runTime = usePluginRuntime();\n  taskQueue.setRuntime(runTime);\n\n  useBotReadyJonsMsg(messages, status, (parsed: unknown) => {\n    const msg = parsed as IStdActionMsg<unknown>;\n    if (!msg.action || !msg.type) {\n      return;\n    }\n\n    if (msg.type !== 'std-action') {\n      return;\n    }\n\n    taskQueue.enqueue(msg);\n  });\n};\n","import { Messages } from '@/app/components/chat/messages';\nimport { ChatMessage } from '@baishuyun/types';\nimport { ChatFrame } from \"./chat-frame\";\nimport { InputArea } from \"./input-area\";\nimport { useOfficeChat } from \"@/app/hooks/useOfficeChat\";\nimport { IChatTransportConfig, useChatTransport } from \"@/app/hooks/useChatTransport\";\nimport { createCommonChatErrorHandler } from \"@/app/utils/createCommonChatErrorHandler\";\nimport { useEffect } from 'react';\nimport { AIOffice } from '@/app';\nimport { usePublisherConfigParser } from '@/app/hooks/use-publisher-config-parser';\nimport { useStdActionTaskParser } from '@/app/hooks/use-std-action-task-parser';\nimport { useOfficeEvent } from '@/app/hooks/use-office-event';\n\nexport interface IChatProps extends IChatClientProps {\n\n}\n\nexport interface IChatClientProps extends IChatTransportConfig {\n    style?: string;\n}\n\nexport const ChatClient = (props: IChatClientProps) => {\n  const transport = useChatTransport(props);\n\n  let errorHandler;\n\n  const { messages, sendMessage, status, id, setMessages, stop, addToolOutput, regenerate } =\n    useOfficeChat<ChatMessage>({\n      transport,\n      onError: errorHandler,\n    });\n\n  useEffect(() => {\n    AIOffice.getInstance().emit('chatStatusChange', status);\n  }, [status]);\n\n  errorHandler = createCommonChatErrorHandler(setMessages);\n\n  useOfficeEvent('appendLocalMessages', (msgs) => {\n    setMessages((prevMessages) => [\n      ...prevMessages,\n      ...(msgs as ChatMessage[]),\n    ]);\n  })\n\n  usePublisherConfigParser(messages, status);\n\n  useStdActionTaskParser(messages, status);\n\n  return (\n    <ChatFrame\n      messagesArea={\n        <Messages\n          regenerate={regenerate}\n          status={status}\n          messages={messages}\n          setMessages={setMessages}\n          sendMessage={sendMessage}\n          addToolOutput={addToolOutput}\n        />\n      }\n      inputArea={\n        <InputArea\n            api={props.api}\n            chatId={id}\n            status={status}\n            messages={messages}\n            regenerate={regenerate}\n            setMessages={setMessages}\n            sendMessage={sendMessage}\n            stop={stop}\n        />\n      }\n    />\n  )\n}","import type { PluginServiceRegistry } from '@baishuyun/types';\nimport type { ServiceRegistry } from './ServiceRegistry';\n\nconst empty = {};\n\nexport function createServiceProxy<K extends keyof PluginServiceRegistry>(\n  serviceId: K,\n  container: ServiceRegistry\n): PluginServiceRegistry[K] {\n  const boundMethods = new Map<string | symbol, unknown>();\n\n  return new Proxy({} as PluginServiceRegistry[K], {\n    get(_, prop, receiver) {\n      const actualService = container.getRawInstance(serviceId);\n\n      if (!actualService) {\n        if (!boundMethods.has(prop)) {\n          boundMethods.set(prop, (..._args: unknown[]) => {\n            console.warn(\n              `[System] Service ${serviceId} is currently unavailable. Call to ${String(prop)} ignored.`\n            );\n            return empty;\n          });\n        }\n        return boundMethods.get(prop);\n      }\n\n      const value = Reflect.get(actualService as object, prop, receiver);\n\n      if (value?.__legacy_slot_renderer__) {\n        return value;\n      }\n\n      if (typeof value !== 'function') {\n        return value;\n      }\n\n      if (!boundMethods.has(prop)) {\n        boundMethods.set(prop, value.bind(actualService));\n      }\n      return boundMethods.get(prop);\n    },\n  });\n}\n","import type { IServiceRegistry, PluginServiceRegistry } from '@baishuyun/types';\nimport { createServiceProxy } from './ServiceProxy';\nimport { createEventBus } from '@/plugin-sdk/eventBus';\n\ntype ServiceRegistryEvents = {\n  serviceRegistered: keyof PluginServiceRegistry;\n}\n\nexport class ServiceRegistry implements IServiceRegistry {\n  private services: Partial<PluginServiceRegistry> = {};\n  private proxyCache = new Map<\n    keyof PluginServiceRegistry,\n    PluginServiceRegistry[keyof PluginServiceRegistry]\n  >();\n  private eventBus = createEventBus<ServiceRegistryEvents>();\n\n  onRegistered = (id: keyof PluginServiceRegistry, listener: () => void): (() => void) => {\n    return this.eventBus.on('serviceRegistered', (registeredId) => {\n      if (registeredId === id) listener();\n    });\n  };\n\n  register<K extends keyof PluginServiceRegistry, T>(\n    id: K,\n    impl: T & (K extends keyof PluginServiceRegistry ? PluginServiceRegistry[K] : unknown)\n  ): void {\n    if (this.services[id]) {\n      console.warn(\n        `[ServiceRegistry] Service with id \"${id}\" is already registered. It will be overwritten.`\n      );\n    }\n    (this.services as Record<string, unknown>)[id as string] = impl;\n    this.proxyCache.delete(id);\n    this.eventBus.emit('serviceRegistered', id);\n  }\n  get<K extends keyof PluginServiceRegistry>(id: K): PluginServiceRegistry[K] | undefined {\n    const key = id;\n    if (!this.proxyCache.has(key)) {\n      this.proxyCache.set(key, createServiceProxy(id, this));\n    }\n    return this.proxyCache.get(key) as PluginServiceRegistry[K] | undefined;\n  }\n\n  getRawInstance<K extends keyof PluginServiceRegistry>(\n    id: K\n  ): PluginServiceRegistry[K] | undefined {\n    return this.services[id] as PluginServiceRegistry[K] | undefined;\n  }\n}\n","import type { IAiOfficePluginApi, ICoreService, ISystemUIService, IServiceRegistry } from '@baishuyun/types';\n\nexport interface IPluginApiDeps {\n  coreServices: ICoreService;\n  systemUIService: ISystemUIService;\n  serviceRegistry: IServiceRegistry;\n}\n\nexport const createPluginApi = (deps: IPluginApiDeps): IAiOfficePluginApi => {\n  return {\n    ui: {\n      registerSlot(slotName, component, pluginId, weight, matcher, shadowConfig) {\n        deps.systemUIService.registerSlot(\n          slotName,\n          component,\n          pluginId,\n          weight,\n          matcher,\n          shadowConfig\n        );\n      },\n\n      registerMiddleware(hookPoint, fn, weight) {\n        deps.systemUIService.registerMiddleware(hookPoint, fn, weight);\n      },\n    },\n\n    service: deps.serviceRegistry,\n\n    host: {\n      sendMessage(content, options) {\n        return deps.coreServices.sendMessage(content, options);\n      },\n\n      appendLocalMessages(msgs) {\n        return deps.coreServices.appendLocalMessages(msgs);\n      },\n\n      registerStdAction: (a, c) => {\n        return deps.coreServices.registerStdAction(a, c);\n      },\n\n      getAgentById(agentId) {\n        return deps.coreServices.getAgentById(agentId);\n      },\n\n      setCurrentWorkingHelper(helper) {\n        return deps.coreServices.setCurrentWorkingHelper(helper);\n      },\n\n      setCurrentWorkingAgent(agent) {\n        return deps.coreServices.setCurrentWorkingAgent(agent);\n      },\n\n      setFullscreenPart(part) {\n        deps.coreServices.setFullscreenPart(part);\n      },\n\n      async fetchAgentManifest() {\n        return deps.coreServices.fetchAgentManifest();\n      },\n\n      get currentWorkingAgent() {\n        return deps.coreServices.currentWorkingAgent;\n      },\n\n      get currentWorkingHelper() {\n        return deps.coreServices.currentWorkingHelper;\n      },\n\n      get fullscreenPart() {\n        return deps.coreServices.fullscreenPart;\n      },\n\n      onActiveAgentChange(callback) {\n        return deps.coreServices.onAgentChange(callback);\n      },\n\n      get chatStatus() {\n        return deps.coreServices.chatStatus;\n      },\n\n      onChatStatusChange(callback) {\n        return deps.coreServices.onChatStatusChange(callback);\n      },\n\n      onActiveHelperChange(callback) {\n        return deps.coreServices.onHelperChange(callback);\n      },\n\n      executeHelper(helper) {\n        return deps.coreServices.execAgentHelper(helper, deps.serviceRegistry);\n      },\n    },\n  };\n};\n","import type { IAiOfficePlugin, IPluginManager, PluginID, ICoreService, ISystemUIService, IServiceRegistry } from '@baishuyun/types';\nimport { createPluginApi } from './PluginApiAdapter';\n\nexport interface IPluginManagerDeps {\n  // 内置插件模块记录，key 是插件 ID，value 是一个函数，调用后动态导入插件模块\n  builtinPluginModules: Record<string, () => Promise<{ default: unknown }>>;\n  coreService: ICoreService;\n  systemUIService: ISystemUIService;\n  serviceRegistry: IServiceRegistry;\n}\n\nexport class PluginManager implements IPluginManager {\n  private activePlugins: Map<PluginID, IAiOfficePlugin> = new Map();\n\n  private loadingPlugins: Set<PluginID> = new Set();\n\n  private externalPlugins: Map<PluginID, IAiOfficePlugin> = new Map();\n\n  constructor(private deps: IPluginManagerDeps) {}\n\n  registerExternalPlugins(plugins: IAiOfficePlugin[]) {\n    for (const plugin of plugins) {\n      if (this.externalPlugins.has(plugin.id)) {\n        console.warn(`External plugin ${plugin.id} is already registered.`);\n        continue;\n      }\n      this.externalPlugins.set(plugin.id, plugin);\n    }\n  }\n\n  getExternalPluginIds(): PluginID[] {\n    return Array.from(this.externalPlugins.keys());\n  }\n\n  async installPlugin(pluginId: PluginID) {\n    if (this.activePlugins.has(pluginId)) {\n      console.warn(`Plugin ${pluginId} is already installed.`);\n      return;\n    }\n\n    if (this.loadingPlugins.has(pluginId)) {\n      console.warn(`Plugin ${pluginId} is loading ...`);\n      return;\n    }\n\n    // loading start\n    this.loadingPlugins.add(pluginId);\n\n    const modulePath = `./${pluginId}/index.ts`;\n    const pluginModuleLoader = this.deps.builtinPluginModules[modulePath];\n\n    if (!pluginModuleLoader) {\n      console.error(`Plugin module for ${pluginId} not found.`);\n      this.loadingPlugins.delete(pluginId);\n      return;\n    }\n\n    try {\n      const module = (await pluginModuleLoader()) as { default: IAiOfficePlugin };\n      const plugin = module.default;\n\n      const api = createPluginApi({\n        serviceRegistry: this.deps.serviceRegistry,\n        coreServices: this.deps.coreService,\n        systemUIService: this.deps.systemUIService,\n      });\n\n      if (typeof plugin.onInstall === 'function') {\n        await plugin.onInstall?.(api);\n      }\n\n      this.activePlugins.set(pluginId, plugin);\n    } catch (error) {\n      console.error(`Failed to load plugin ${pluginId}:`, error);\n    } finally {\n      this.loadingPlugins.delete(pluginId);\n    }\n  }\n\n  async installExternalPlugin(pluginId: PluginID) {\n    if (this.activePlugins.has(pluginId)) {\n      console.warn(`Plugin ${pluginId} is already installed.`);\n      return;\n    }\n\n    if (this.loadingPlugins.has(pluginId)) {\n      console.warn(`Plugin ${pluginId} is loading ...`);\n      return;\n    }\n\n    const plugin = this.externalPlugins.get(pluginId);\n    if (!plugin) {\n      console.error(`External plugin ${pluginId} not found.`);\n      return;\n    }\n\n    this.loadingPlugins.add(pluginId);\n\n    try {\n      const api = createPluginApi({\n        serviceRegistry: this.deps.serviceRegistry,\n        coreServices: this.deps.coreService,\n        systemUIService: this.deps.systemUIService,\n      });\n\n      if (typeof plugin.onInstall === 'function') {\n        await plugin.onInstall?.(api);\n      }\n\n      this.activePlugins.set(pluginId, plugin);\n    } catch (error) {\n      console.error(`Failed to install external plugin ${pluginId}:`, error);\n    } finally {\n      this.loadingPlugins.delete(pluginId);\n    }\n  }\n\n  isPluginInstalled(pluginId: PluginID): boolean {\n    return this.activePlugins.has(pluginId);\n  }\n\n  getPlugin(pluginId: PluginID): IAiOfficePlugin | undefined {\n    return this.activePlugins.get(pluginId);\n  }\n\n  async destroyPlugin(pluginId: PluginID) {\n    const plugin = this.activePlugins.get(pluginId);\n    if (!plugin) {\n      console.warn(`Plugin ${pluginId} is not installed.`);\n      return;\n    }\n\n    try {\n      await plugin.onDestroy?.();\n      this.activePlugins.delete(pluginId);\n      await this.deps.systemUIService.unregisterAllByPluginId(plugin.id);\n      await this.deps.coreService.notifyPluginDestroyed(plugin.id);\n    } catch (error) {\n      console.error(`Error while destroying plugin ${pluginId}:`, error);\n    } finally {\n      this.activePlugins.delete(pluginId);\n    }\n  }\n}\n","import type { SlotName, HookPoint, PluginID, IMiddlewareEntry, ISlotEntry, ISystemUIService, IRegisteredSlotComProps, IShadowConfig } from '@baishuyun/types';\nimport { createEventBus } from '@/plugin-sdk/eventBus';\n\nexport class SystemUIService implements ISystemUIService {\n  private slots: Map<SlotName, Array<ISlotEntry>> = new Map();\n  private middlewares: Map<HookPoint, Array<IMiddlewareEntry<unknown>>> = new Map();\n\n  private bus = createEventBus<{\n    slotsChange: void;\n    middlewareChange: HookPoint;\n  }>();\n\n  registerSlot: (\n    slotName: SlotName,\n    component: React.ComponentType<IRegisteredSlotComProps>,\n    pluginId: PluginID,\n    weight?: number,\n    matcher?: (payload: unknown) => boolean,\n    shadowConfig?: IShadowConfig\n  ) => void = (slotName, component, pluginId, weight = 0, matcher, shadowConfig) => {\n    const existing = this.slots.get(slotName) || [];\n\n    const slotEntry = {\n      id: `${pluginId}-${slotName}-${component.name || component.displayName || 'comp'}`,\n      pluginId,\n      component,\n      weight,\n      matcher,\n      shadow: shadowConfig?.shadow,\n      style: shadowConfig?.style,\n    };\n\n    const updated = [...existing, slotEntry].sort((a, b) => (b.weight || 0) - (a.weight || 0));\n\n    this.slots.set(slotName, updated);\n\n    this.bus.emit('slotsChange', undefined);\n  };\n\n  private defaultComponents: Array<ISlotEntry> = [];\n\n  onSlotsChange(listener: () => void) {\n    return this.bus.on('slotsChange', listener);\n  }\n\n  onMiddlewareChange(listener: (hook: HookPoint) => void) {\n    return this.bus.on('middlewareChange', listener);\n  }\n\n  getComponents(slotName: SlotName): Array<ISlotEntry> {\n    return this.slots.get(slotName) || this.defaultComponents;\n  }\n\n  registerMiddleware<T>(\n    hookPoint: HookPoint,\n    fn: (data: T) => T | Promise<T>,\n    pluginId: PluginID,\n    weight?: number\n  ): void {\n    const existing = this.middlewares.get(hookPoint) || [];\n    const newEntry: IMiddlewareEntry<unknown> = {\n      id: `${pluginId}-${hookPoint}-middleware`,\n      pluginId,\n      fn: fn as (data: unknown) => unknown | Promise<unknown>,\n      weight,\n    };\n    const updated = [...existing, newEntry].sort((a, b) => (b.weight || 0) - (a.weight || 0));\n    this.middlewares.set(hookPoint, updated);\n    this.bus.emit('middlewareChange', hookPoint);\n  }\n\n  unregisterAllByPluginId(pluginId: PluginID): void | Promise<void> {\n    let slotsChanged = false;\n    this.slots.forEach((entries, slotName) => {\n      const filtered = entries.filter((entry) => entry.pluginId !== pluginId);\n      if (filtered.length !== entries.length) {\n        this.slots.set(slotName, filtered);\n        slotsChanged = true;\n      }\n    });\n\n    this.middlewares.forEach((entries, point) => {\n      const filtered = entries.filter((entry) => entry.pluginId !== pluginId);\n      if (filtered.length !== entries.length) {\n        this.middlewares.set(point, filtered);\n        this.bus.emit('middlewareChange', point);\n      }\n    });\n\n    if (slotsChanged) {\n      this.bus.emit('slotsChange', undefined);\n    }\n  }\n\n  async runMiddlewares<T>(hookPoint: HookPoint, data: T): Promise<T> {\n    const fns = (this.middlewares.get(hookPoint) || []).map((entry) => entry.fn);\n    let result: unknown = data;\n\n    for (const fn of fns) {\n      result = await fn(result);\n    }\n\n    return result as typeof data;\n  }\n}\n","import { ServiceRegistry } from '@/core/plugin-system/ServiceRegistry';\nimport { PluginManager } from '@/core/plugin-system/PluginManager';\nimport { SystemUIService } from '@/core/services/SystemUIService';\nimport { IRuntimeConfig } from '@baishuyun/types';\n\nexport const createPluginRuntime = (config: IRuntimeConfig) => {\n  const uiService = new SystemUIService();\n  const serviceRegistry = new ServiceRegistry();\n\n  const pluginManager = new PluginManager({\n    builtinPluginModules: config.builtinPluginModules,\n    coreService: config.coreService,\n    systemUIService: uiService,\n    serviceRegistry,\n  });\n\n  if (config.externalPlugins && config.externalPlugins.length > 0) {\n    pluginManager.registerExternalPlugins(config.externalPlugins);\n  }\n\n  return {\n    pluginManager,\n    uiService,\n    coreService: config.coreService,\n    serviceRegistry,\n  };\n};\n\nexport type PluginRuntime = ReturnType<typeof createPluginRuntime>;\n","import type { IAiOfficePlugin, IPluginManifest } from '@baishuyun/types';\n\nexport const BuiltInPluginModules = import.meta.glob('../plugins/*/index.ts') as Record<\n  string,\n  () => Promise<{ default: IAiOfficePlugin }>\n>;\n\nexport const PLUGINS_MANIFEST: Array<IPluginManifest> = [\n  {\n    id: 'bot-selection-guard',\n    name: 'Bot Selection Guard',\n    description: '如果用户没有选择智能体，则展示推荐件智能体选择',\n  },\n  {\n    id: 'common-msg-part-viewer',\n    name: 'Common Msg Part Viewer',\n    description: '提供对话消息部分的通用预览、渲染能力，目前支持图片、文件等常见类型的预览',\n  },\n  {\n    id: 'bot-indicator-in-textarea',\n    name: 'Bot Indicator in Textarea',\n    description: '在输入框内展示当前选择的智能体，也可以切换',\n  },\n  {\n    id: 'entry-select',\n    name: 'Entry Select',\n    description: '在右侧列头展示表单选择组件',\n  },\n  {\n    id: 'tr-actions-bar',\n    name: 'Top Right Actions Bar',\n    description: '在对话界面右上角展示插件提供的操作按钮',\n  },\n  {\n    id: 'tl-actions-bar',\n    name: 'Top Left Actions Bar',\n    description: '在对话界面左上角展示插件提供的操作按钮',\n  },\n  {\n    id: 'agent-select',\n    name: 'Agent Select',\n    description: '智能体滑动选择',\n  },\n  {\n    id: 'agent-calling-confirm',\n    name: 'Agent Calling Confirm',\n    description: '智能体调用确认',\n  },\n  {\n    id: 'form-builder',\n    name: 'Form Builder',\n    description: '提供 AI 搭建能力',\n  },\n  {\n    id: 'form-builder-opening-lines',\n    name: 'Form Builder Opening Lines',\n    description: '提供 AI 搭建开场白组件',\n  },\n  {\n    id: 'previewer',\n    name: 'Previewer',\n    description: '提供通用预览 UI',\n  },\n  {\n    id: 'form-filling',\n    name: 'Form Filling',\n    description: '提供表单填充能力',\n  },\n  {\n    id: 'form-filling-input-enhancer',\n    name: 'Form Filling Input Enhancer',\n    description: '提供表单填充输入增强组件，补充填写模式、表单结构等信息到 request payload',\n  },\n  {\n    id: 'form-batch-filling',\n    name: 'Form Batch Filling',\n    description: '提供表单批量填充能力',\n  },\n  {\n    id: 'form-batch-filling-input-enhancer',\n    name: 'Form Batch Filling Input Enhancer',\n    description: '提供表单批量填充输入增强组件，补充填写模式、表单结构等信息到 request payload',\n  },\n  {\n    id: 'form-filling-opening-lines',\n    name: 'Form Filling Opening Lines',\n    description: '提供表单填充开场白组件',\n  },\n  {\n    id: 'form-batch-filling-opening-lines',\n    name: 'Form Batch Filling Opening Lines',\n    description: '提供表单批量填充开场白组件',\n  },\n  {\n    id: 'report-query',\n    name: 'Report Query',\n    description: '提供问数能力',\n  },\n  {\n    id: 'report-query-input-enhancer',\n    name: 'Report Query Input Enhancer',\n    description: '提供问数输入增强组件，补充 appId 等信息到 request payload',\n  },\n  {\n    id: 'agent-helper-manager',\n    name: 'Agent Helper Manager',\n    description: '提供一个智能体助手的统一管理平台',\n  },\n  {\n    id: 'std-actions',\n    name: 'Standard Actions',\n    description: '通过消息唤起的标准动作（交互过程）',\n  },\n];\n\nexport const PLUGINS_MANIFEST_MAP: Record<string, IPluginManifest> = PLUGINS_MANIFEST.reduce(\n  (acc, manifest) => {\n    acc[manifest.id] = manifest;\n    return acc;\n  },\n  {} as Record<string, IPluginManifest>\n);\n\n// 预安装的必备插件。\nexport const INSTALLED_PLUGINS = [\n  'previewer',\n  'common-msg-part-viewer',\n  'bot-selection-guard',\n  'agent-helper-manager',\n  'bot-indicator-in-textarea',\n  'entry-select',\n  'tr-actions-bar',\n  'tl-actions-bar',\n  'agent-select',\n  'agent-calling-confirm',\n  'form-builder',\n  'form-filling',\n  'form-batch-filling',\n  'report-query',\n  'report-query-input-enhancer',\n  'std-actions',\n];\n","import { usePluginRuntime } from '@/core/react-adapter/context';\nimport { INSTALLED_PLUGINS } from '@/plugins';\nimport { useEffect } from 'react';\n\nexport const usePreInstalledPlugins = () => {\n  const runtime = usePluginRuntime();\n\n  // TODO: 拓扑排序，处理插件间依赖关系，目前先简单地安装列表中的插件\n  const installPlugins = async () => {\n    for (const pluginId of runtime.pluginManager.getExternalPluginIds()) {\n      await runtime.pluginManager.installExternalPlugin(pluginId);\n    }\n    for (const pluginId of INSTALLED_PLUGINS) {\n      await runtime.pluginManager.installPlugin(pluginId);\n    }\n  };\n\n  useEffect(() => {\n    installPlugins();\n  }, []);\n};\n","export const fetchBots = async (apiEndpoint: string, headers?: Record<string, string>) => {\n  const response = await fetch(`${apiEndpoint}/agent/all-bots`, {\n    method: 'GET',\n    headers: {\n      'Content-Type': 'application/json',\n      ...headers,\n    },\n  });\n\n  if (!response.ok) {\n    console.error('Failed to fetch bots:', response.statusText);\n    return [];\n  }\n\n  const resJson = await response.json();\n  if (!Array.isArray(resJson) || !resJson.length) {\n    return [];\n  }\n\n  return resJson;\n};\n","import { IOfficeAgent } from '@/sdk';\nimport { BuiltInBot } from '@baishuyun/types';\n\nexport type BuiltInBotConfigMap = Record<\n  BuiltInBot,\n  Pick<IOfficeAgent, 'builtIn' | 'matchedCtx' | 'optionalPlugins'>\n>;\n\nexport const builtInBotConfigMap: BuiltInBotConfigMap = {\n  // 智能表单搭建\n  'form-builder': {\n    builtIn: true,\n    matchedCtx: new Set(['app', 'form']),\n    optionalPlugins: ['form-builder-opening-lines'],\n  },\n  // 表单填写\n  'form-filler': {\n    builtIn: true,\n    matchedCtx: new Set(['form']),\n    optionalPlugins: ['form-filling-input-enhancer', 'form-filling-opening-lines'],\n  },\n\n  // AI填报示例数据\n  'form-batch-filler': {\n    builtIn: true,\n    matchedCtx: new Set(['form']),\n    optionalPlugins: ['form-batch-filling-input-enhancer', 'form-batch-filling-opening-lines'],\n  },\n  // AI 问数\n  'report-query': {\n    builtIn: true,\n    matchedCtx: new Set(['report']),\n    optionalPlugins: ['report-query-input-enhancer'],\n  },\n};\n","export interface EventBus<Events extends Record<string, unknown>> {\n  on<K extends keyof Events>(event: K, callback: (data: Events[K]) => void): () => void;\n  emit<K extends keyof Events>(event: K, data: Events[K]): void;\n}\n\nexport function createEventBus<Events extends Record<string, unknown>>(): EventBus<Events> {\n  const listeners = new Map<keyof Events, Set<(data: Events[keyof Events]) => void>>();\n\n  return {\n    on<K extends keyof Events>(event: K, callback: (data: Events[K]) => void): () => void {\n      if (!listeners.has(event)) {\n        listeners.set(event, new Set());\n      }\n      const set = listeners.get(event)!;\n      const cb = callback as (data: Events[keyof Events]) => void;\n      set.add(cb);\n\n      return () => {\n        set.delete(cb);\n      };\n    },\n\n    emit<K extends keyof Events>(event: K, data: Events[K]): void {\n      const set = listeners.get(event);\n      if (!set) return;\n      set.forEach(callback => callback(data as Events[keyof Events]));\n    },\n  };\n}\n","import type { ICoreService, IOfficeAgent } from '@baishuyun/types';\nimport { AIOffice } from '@/app';\nimport { useAIOfficeStore } from '../store/use-ai-office-store';\nimport { PluginManager } from '@/core/plugin-system/PluginManager';\nimport { fetchBots } from './fetch-bots';\nimport { builtInBotConfigMap } from './built-in-bots-confit';\nimport { IAgentHelper, IFormAttachment } from '@baishuyun/types';\nimport { createEventBus } from '@/core/event-system/eventBus';\nimport { ChatRequestOptions, ChatStatus } from 'ai';\nimport { promptParser } from '@baishuyun/ai-feat-utils';\n\nconst collectAgentPluginIds = (agent: IOfficeAgent | null): Set<string> => {\n  if (!agent) return new Set();\n  return new Set([agent.corePlugin, ...(agent.optionalPlugins || [])].filter(Boolean) as string[]);\n};\n\ntype coreServiceEvent = {\n  agentChange: IOfficeAgent | null;\n  helperChange: IAgentHelper | null;\n};\n\nexport const createCoreService = (\n  apiEndpoint: string,\n  apiHeaders?: () => Record<string, string>,\n  pluginManager?: PluginManager\n): ICoreService => {\n  const evtBus = createEventBus<coreServiceEvent>();\n\n  let chatStatus: ChatStatus = 'ready';\n  AIOffice.getInstance().on('chatStatusChange', (status) => {\n    chatStatus = status;\n  });\n\n  // 订阅 Store 的 activeAgent 变化，转发给所有插件监听器\n  useAIOfficeStore.subscribe((state, prevState) => {\n    if (state.activeAgent !== prevState.activeAgent) {\n      evtBus.emit('agentChange', state.activeAgent);\n    }\n\n    if (state.activeAgentHelper !== prevState.activeAgentHelper) {\n      evtBus.emit('helperChange', state.activeAgentHelper);\n    }\n  });\n\n  const refreshAgentPlugins = async (agentId: string) => {\n    const store = useAIOfficeStore.getState();\n    const oldAgent = store.activeAgent;\n    const newAgent = store.agents.find((a) => a.id === agentId) ?? null;\n\n    if (!newAgent || oldAgent?.id === newAgent.id) return;\n\n    const pm = pluginManager;\n\n    // 1. 卸载旧智能体的可选插件（跳过新智能体也使用的插件）\n    if (oldAgent && pm) {\n      const newAgentPluginIds = collectAgentPluginIds(newAgent);\n      for (const pluginId of oldAgent.optionalPlugins || []) {\n        if (!newAgentPluginIds.has(pluginId) && pm.isPluginInstalled(pluginId)) {\n          await pm.destroyPlugin(pluginId);\n        }\n      }\n    }\n\n    // 3. 安装新智能体的核心插件（不会被卸载，如果尚未安装）\n    if (pm && newAgent.corePlugin && !pm.isPluginInstalled(newAgent.corePlugin)) {\n      await pm.installPlugin(newAgent.corePlugin);\n    }\n\n    // 4. 安装新智能体的可选插件（如果尚未安装）\n    if (pm) {\n      for (const pluginId of newAgent.optionalPlugins || []) {\n        if (!pm.isPluginInstalled(pluginId)) {\n          await pm.installPlugin(pluginId);\n          console.log(`${newAgent.name}'s optionalPlugins installed: ${pluginId}`);\n        }\n      }\n    }\n  };\n\n  const sendMessage = (\n    content: string,\n    options?: ChatRequestOptions,\n    attachmentsUrl?: Array<string>\n  ) => {\n    AIOffice.getInstance().emit('sendMessage', { content, options, attachmentsUrl });\n  };\n\n  return {\n    get currentWorkingAgent() {\n      return useAIOfficeStore.getState().activeAgent;\n    },\n\n    get currentWorkingHelper() {\n      return useAIOfficeStore.getState().activeAgentHelper;\n    },\n\n    get fullscreenPart() {\n      return useAIOfficeStore.getState().fullscreenPart;\n    },\n\n    setFullscreenPart: (part) => {\n      const { setFullscreenPart } = useAIOfficeStore.getState();\n      setFullscreenPart?.(part);\n    },\n\n    getAgentById: (agentId: string) => {\n      const { agents } = useAIOfficeStore.getState();\n      return agents.find((a) => a.id === agentId) ?? null;\n    },\n\n    registerStdAction: (action, ctor) => {\n      AIOffice.getInstance().stdActionTasks.register(action, ctor);\n    },\n\n    sendMessage: sendMessage,\n\n    appendLocalMessages: (msgs) => {\n      AIOffice.getInstance().emit('appendLocalMessages', msgs);\n    },\n\n    fetchAgentManifest: async () => {\n      const allBots = (await fetchBots(apiEndpoint, apiHeaders?.())) as Array<IOfficeAgent>;\n\n      const agents = allBots.map((bot) => {\n        if (bot.id && bot.builtInType && builtInBotConfigMap[bot.builtInType]) {\n          return {\n            ...bot,\n            ...builtInBotConfigMap[bot.builtInType],\n          };\n        }\n        return {\n          ...bot,\n          // matchedCtx: new Set<ctxType>(['app', 'form']),\n        };\n      });\n\n      useAIOfficeStore.getState().setAgents(agents);\n\n      return agents;\n    },\n\n    notifyPluginDestroyed: async (pluginId: string) => {\n      console.log(`Plugin destroyed: ${pluginId}`);\n    },\n\n    setCurrentWorkingHelper: async (helper: IAgentHelper | null) => {\n      if (!helper || !helper.agentId) return;\n\n      await refreshAgentPlugins(helper.agentId);\n\n      useAIOfficeStore.getState().setActiveAgent(null);\n      useAIOfficeStore.getState().setActiveAgentHelper?.(helper);\n      useAIOfficeStore.getState().setWorkerName(helper.helperName);\n    },\n\n    setCurrentWorkingAgent: async (agent: IOfficeAgent | null) => {\n      await refreshAgentPlugins(agent?.id ?? '');\n\n      useAIOfficeStore.getState().setActiveAgent(agent);\n      useAIOfficeStore.getState().setActiveAgentHelper(null);\n      useAIOfficeStore.getState().setWorkerName(agent?.name ?? '');\n    },\n\n    execAgentHelper: async (helper: IAgentHelper, service) => {\n      // 切换并设为当前工作助手（如果 helper 关联了智能体）\n      if (!helper || !helper.agentId) return;\n\n      await refreshAgentPlugins(helper.agentId);\n\n      useAIOfficeStore.getState().setActiveAgent(null);\n      useAIOfficeStore.getState().setActiveAgentHelper?.(helper);\n\n      const formService = service.get('bsFormService');\n      const formStructure =\n        (await formService?.getFormStructure({\n          appId: helper.appId ?? '',\n          entryId: helper.formId,\n        })) ?? [];\n\n      const automationService = service.get('bsUIAutomation');\n\n      // 提示次配置获取表单值来进行格式化\n      const valueGetter = automationService?.getWidgetValueForHuman!;\n\n      // 获取提示词，并发送消息触发智能体执行助手\n      const { translated: prompt, meta = [] } = promptParser(\n        helper.prompt,\n        formStructure,\n        valueGetter\n      );\n\n      if (prompt) {\n        sendMessage(\n          prompt,\n          undefined,\n          (meta as Array<IFormAttachment>)?.map((m) => m.downloadUrl)\n        );\n      }\n    },\n\n    onAgentChange: (callback) => {\n      return evtBus.on('agentChange', callback);\n    },\n\n    get chatStatus() {\n      return chatStatus;\n    },\n\n    onChatStatusChange: (callback) => {\n      return AIOffice.getInstance().on('chatStatusChange', callback);\n    },\n\n    onHelperChange: (callback) => {\n      return evtBus.on('helperChange', callback);\n    },\n  };\n};\n","import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { OfficeContainer, TooltipProvider } from '@baishuyun/ai-design';\nimport { IAIOfficeOptions } from '@/app/types/IAIOffice';\nimport { ChatClient } from '../chat';\nimport { PluginRuntimeProvider } from '@/core/react-adapter/context';\nimport { createPluginRuntime } from '@/core/runtime';\nimport { BuiltInPluginModules } from '@/plugins';\nimport { usePreInstalledPlugins } from '@/app/hooks/use-pre-installed-plugins';\nimport { createCoreService } from '@/app/service';\nimport type { IAiOfficePlugin, ICoreService } from '@baishuyun/types';\nimport { Slot } from '@/core/react-adapter/slots';\nimport { useAIOfficeStore } from '@/app/store/use-ai-office-store';\nimport { createPortal } from 'react-dom';\nimport { AIOffice } from '@/app';\n// import { useAIOfficeStore } from '@/app/store/use-ai-office-store';\n\nexport interface IAIOfficeProps {\n    apiEndpoint: string;\n    plugins?: IAiOfficePlugin[];\n    apiHeaders?: () => Record<string, string>;\n}\n\nconst RightColHeaderLayout = () => {\n    return (\n        <div className='flex items-center justify-between w-full h-full px-5 border-b border-[#e0e0e0] bg-white gap-2.5'>\n            <div className='flex items-center gap-2.5 grow min-w-0 h-full'>\n                <Slot slotName='rightColumnHeader:Left' />\n            </div>\n            <div className='flex items-center gap-2.5 shrink-0'>\n                <Slot slotName='rightColumnHeader:Right' />\n            </div>\n        </div>\n    );\n}\n\nconst LeftColHeaderLayout = () => (\n    <div className='flex items-center justify-between w-full h-full px-5 gap-2.5'>\n        <div className='flex items-center gap-2.5 grow min-w-0 h-full'>\n            <Slot slotName='leftColumnHeader:Left' />\n        </div>\n        <div className='flex items-center gap-2.5 shrink-0'>\n            <Slot slotName='leftColumnHeader:Right' />\n        </div>\n    </div>\n)\n\nconst AIOfficeApp : FC<IAIOfficeProps> = ({ apiEndpoint, apiHeaders, }) => {\n\n    usePreInstalledPlugins();\n\n    const fullscreenPart = useAIOfficeStore((state) => state.fullscreenPart);\n\n    const headerHeight = 52;\n    const minRightColWid = 340;\n    const maxRightColWid = 500;\n\n    const [leftColWid, setLeftColWid] = useState(window.innerWidth - minRightColWid);\n\n    const hostPortal = AIOffice.getInstance().hostPortalEle!\n    if (hostPortal) {\n        // set size style for hostPortal\n        Object.assign(hostPortal.style, {\n            position: 'absolute',\n            top: `${headerHeight}px`,\n            width: `${leftColWid}px`,\n            height: `calc(100% - ${headerHeight}px)`,\n            background: '#f5f7fa',\n            zIndex: 1,\n        });\n    }\n\n    return (\n        <OfficeContainer\n            className='bg-[#f5f7fa]'\n\n            fullscreenPart={fullscreenPart}\n\n            headerHeight={headerHeight}\n\n            rightColWidthRange={[minRightColWid, maxRightColWid]}\n\n            storageKey=\"ai-office-right-col-width\"\n\n            onResize={(lColWid, _) => {\n                setLeftColWid(lColWid);\n            }}\n\n            rightColCls='bg-[#F5F7FA] border-l border-[#e0e0e0]'\n\n            leftColContentElement={\n                <div className='h-full w-full min-h-0 min-w-0 relative'>\n                    <Slot slotName='leftColumnContent' />\n                </div>\n            }\n\n            leftColHeaderElement={\n                <LeftColHeaderLayout />\n            }\n\n            rightColHeaderElement={\n                <RightColHeaderLayout />\n            }\n\n            rightColContentElement={\n                <ChatClient\n                    api={apiEndpoint}\n                    headers={apiHeaders}\n                />\n            }\n        >\n            <Slot slotName='root-fullscreen' />\n            {createPortal(<Slot slotName='portalInHost' />, hostPortal)}\n        </OfficeContainer>\n    )\n\n}\n\nconst AIOfficeWrapper: FC<IAIOfficeProps> = ({ apiEndpoint, plugins, apiHeaders }) => {\n    const apiHeadersRef = useRef(apiHeaders);\n    apiHeadersRef.current = apiHeaders;\n\n    const [runtime] = useState(() => {\n      const pluginsRuntime = createPluginRuntime({\n        builtinPluginModules: BuiltInPluginModules,\n        coreService: undefined as unknown as ICoreService,\n        externalPlugins: plugins,\n      });\n      return pluginsRuntime;\n    });\n\n    const setApi = useAIOfficeStore(s => s.setApi);\n    setApi(apiEndpoint);\n\n    const coreService = useMemo(\n      () => createCoreService(\n        apiEndpoint,\n        () => apiHeadersRef.current?.()!,\n        runtime.pluginManager\n    ),\n      [apiEndpoint, runtime.pluginManager]\n    );\n\n    runtime.coreService = coreService;\n    (runtime.pluginManager as any).deps.coreService = coreService;\n\n    useEffect(() => {\n        coreService.fetchAgentManifest();\n    }, [coreService]);\n\n    return (\n        <TooltipProvider zIndex={10000}>\n            <PluginRuntimeProvider runtime={runtime}>\n                <AIOfficeApp\n                    apiEndpoint={apiEndpoint}\n                    apiHeaders={apiHeaders}\n                />\n            </PluginRuntimeProvider>\n        </TooltipProvider>\n    )\n}\n\nexport const createAIOfficeUI = (config: IAIOfficeOptions) => {\n    const { apiEndpoint, plugins } = config;\n    const apiHeaders = () => {\n        return config.apiHeaders || {};\n    };\n    return <AIOfficeWrapper apiEndpoint={apiEndpoint} plugins={plugins} apiHeaders={apiHeaders} />\n}","export const mountShadowElement = (\n  id: string,\n  rootEl: HTMLElement,\n  style?: string\n): HTMLElement => {\n  // 幂等：如果已经挂载过，直接返回现有的 container\n  const existing = document.getElementById(id);\n  if (existing && existing.getRootNode() instanceof ShadowRoot) {\n    return existing;\n  }\n\n  // 同时检查 wrapper 是否已存在，防止 DOM 污染\n  const existingWrapper = document.getElementById(`${id}-wrapper`);\n  if (existingWrapper) {\n    const shadowRoot = existingWrapper.shadowRoot;\n    if (shadowRoot) {\n      const container = shadowRoot.getElementById(id);\n      if (container) return container;\n    }\n    // 如果 wrapper 存在但没有 shadowRoot（异常情况），移除它重新创建\n    existingWrapper.remove();\n  }\n\n  const wrapper = document.createElement('div');\n  wrapper.id = `${id}-wrapper`;\n  wrapper.style.position = 'relative';\n  wrapper.style.width = '100%';\n  wrapper.style.height = '100%';\n\n  rootEl.appendChild(wrapper);\n\n  const shadowRoot = wrapper.attachShadow({ mode: 'open' });\n\n  const container = document.createElement('div');\n  container.id = id;\n  container.style.width = '100%';\n  container.style.height = '100%';\n  shadowRoot.appendChild(container);\n\n  if (style) {\n    const styleEl = document.createElement('style');\n    styleEl.textContent = style;\n    shadowRoot.appendChild(styleEl);\n  }\n\n  return container;\n};\n","import { mountShadowElement } from '@/app/utils/mount-shadow-element';\nimport styleCss from '@/style.css?inline';\n\nexport interface IOfficeRoot {\n  officeContainer: HTMLElement;\n  unmount: () => void;\n}\n\nexport const createOfficeRoot = (rootElement: HTMLElement, style: string = ''): IOfficeRoot => {\n  const sdkStyles = typeof __SDK_STYLES__ !== 'undefined' ? __SDK_STYLES__ : styleCss;\n  const finalContainerStyle = style + sdkStyles;\n\n  const officeContainer = mountShadowElement(\n    'ai-office-container',\n    rootElement,\n    finalContainerStyle\n  );\n  // return createRoot(officeContainer);\n\n  return {\n    officeContainer,\n    unmount() {\n      if (officeContainer && officeContainer.parentElement) {\n        officeContainer.parentElement.remove();\n      }\n    },\n  };\n};\n","import React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface PortalPayload {\n  container: Element | DocumentFragment;\n  node: React.ReactNode;\n}\n\nlet currentPortal: PortalPayload | null = null;\nlet triggerRender: (() => void) | null = null;\n\nexport function mountAIOfficePortal(container: Element | DocumentFragment, node: React.ReactNode) {\n  currentPortal = { container, node };\n  triggerRender?.();\n}\n\nexport function unmountAIOfficePortal() {\n  currentPortal = null;\n  triggerRender?.();\n}\n\nexport function AIOfficePortal() {\n  const [, forceUpdate] = useState(0);\n\n  useEffect(() => {\n    triggerRender = () => forceUpdate((t) => t + 1);\n    return () => {\n      triggerRender = null;\n    };\n  }, []);\n\n  if (!currentPortal) {\n    return null;\n  }\n\n  return createPortal(currentPortal.node, currentPortal.container);\n}","import {\n  ActionPayloadMap,\n  IPluginRuntime,\n  IStdActionMsg,\n  IStdActionTask,\n  IStdActionTaskQueue,\n  StdAction,\n  TaskCtor,\n} from '@baishuyun/types';\n\n/**\n * 标准动作任务队列\n */\nexport class StdActionTaskQueue implements IStdActionTaskQueue {\n  private queue: Array<{\n    task: IStdActionTask<any>;\n    payload: IStdActionMsg<any>;\n  }> = [];\n  private processing = false;\n  private drainWaiters: Array<() => void> = [];\n  private runtime: IPluginRuntime | null = null;\n  private taskFactory = new StdActionTaskFactory();\n\n  register<A extends StdAction>(action: A, ctor: TaskCtor<ActionPayloadMap[A]>): void {\n    this.taskFactory.register(action, ctor);\n  }\n\n  setRuntime: (runtime: IPluginRuntime) => void = (r) => {\n    this.runtime = r;\n  };\n\n  enqueue<T = unknown>(msg: IStdActionMsg<T>): void {\n    if (this.runtime === null) {\n      return;\n    }\n\n    const task: IStdActionTask<T> | null = this.taskFactory.create(msg, this.runtime);\n    if (task === null) {\n      return;\n    }\n\n    this.queue.push({ task, payload: msg });\n    this.process();\n  }\n\n  /**\n   * 返回 Promise，在队列**首次变为完全空闲**时 resolve。\n   * 若调用时已空闲，则立即 resolve。\n   */\n  async drain(): Promise<void> {\n    if (!this.processing && this.queue.length === 0) {\n      return Promise.resolve();\n    }\n    return new Promise<void>((resolve) => {\n      this.drainWaiters.push(resolve);\n    });\n  }\n\n  clearQueue(): void {\n    this.queue = [];\n    if (!this.processing && this.drainWaiters.length > 0) {\n      this.resolveDrainWaiters();\n    }\n  }\n\n  get pendingCount(): number {\n    return this.queue.length;\n  }\n\n  get isProcessing(): boolean {\n    return this.processing;\n  }\n\n  private process(): void {\n    if (this.processing || this.queue.length === 0) {\n      if (!this.processing && this.drainWaiters.length > 0) {\n        this.resolveDrainWaiters();\n      }\n      return;\n    }\n\n    this.processing = true;\n    const { task, payload } = this.queue.shift()!;\n\n    this.executeTask(task, payload).finally(() => {\n      this.processing = false;\n      this.process();\n    });\n  }\n\n  private async executeTask(task: IStdActionTask<unknown>, payload: any): Promise<void> {\n    let success = false;\n\n    try {\n      success = await task.exec(payload, this.runtime!);\n    } catch {\n      success = false;\n    }\n\n    try {\n      if (success) {\n        if (task.onSuccess) await task.onSuccess();\n      } else {\n        if (task.onError) await task.onError();\n      }\n    } catch {}\n\n    try {\n      if (task.onFinish) await task.onFinish();\n    } catch {}\n  }\n\n  private resolveDrainWaiters(): void {\n    const waiters = this.drainWaiters;\n    this.drainWaiters = [];\n    for (const resolve of waiters) {\n      resolve();\n    }\n  }\n}\n\nexport class StdActionTaskFactory {\n  private registry = new Map<StdAction, TaskCtor<any>>();\n\n  register<A extends StdAction>(action: A, ctor: TaskCtor<ActionPayloadMap[A]>): void {\n    this.registry.set(action, ctor);\n  }\n\n  create<T>(parsedMsg: IStdActionMsg<T>, runtime: IPluginRuntime): IStdActionTask<T> | null {\n    const Ctor = this.registry.get(parsedMsg.action as StdAction);\n    if (!Ctor) {\n      return null;\n    }\n\n    return new Ctor(runtime) as IStdActionTask<T>;\n  }\n}\n","import { createAIOfficeUI } from '@/app/components/ai-office';\nimport { IAIOffice, IAIOfficeOptions, IOfficeEvents } from '@/app/types/IAIOffice';\n\nimport { createOfficeRoot, IOfficeRoot } from '@/app/utils/createOfficeRoot';\nimport { createEventBus } from '@/plugin-sdk/eventBus';\nimport { mountAIOfficePortal, unmountAIOfficePortal } from './components/ai-office/portalHost';\nimport { IStdActionTaskQueue } from '@baishuyun/types';\nimport { StdActionTaskQueue } from '../core/std-action';\n\nexport class AIOffice implements IAIOffice {\n  private static instance: AIOffice;\n  // 标准动作任务队列\n  private root: IOfficeRoot | null = null;\n  // private options: IAIOfficeOptions | null = null;\n  private bus = createEventBus<IOfficeEvents>();\n\n  private constructor() {}\n\n  public rootEle: HTMLElement | null = null;\n\n  public hostPortalEle: HTMLElement | null = null;\n\n  public stdActionTasks: IStdActionTaskQueue = new StdActionTaskQueue();\n\n  public static getInstance(): AIOffice {\n    if (!AIOffice.instance) {\n      AIOffice.instance = new AIOffice();\n    }\n    return AIOffice.instance;\n  }\n\n  public init(options: IAIOfficeOptions) {\n    const { rootElement } = options;\n    if (!rootElement) {\n      throw new Error('Root element is required to initialize AIOffice.');\n    }\n\n    if (!options) {\n      throw new Error('Options are required to initialize AIOffice.');\n    }\n\n    this.rootEle = rootElement;\n\n    this.hostPortalEle = options.portalElement;\n\n    this.root = createOfficeRoot(rootElement, options.injectStyle);\n\n    mountAIOfficePortal(this.root.officeContainer, createAIOfficeUI(options));\n  }\n\n  public destroy() {\n    if (this.root) {\n      this.root.unmount();\n      unmountAIOfficePortal();\n      this.root = null;\n    }\n  }\n\n  // FOR EXTERNAL USAGE\n\n  // EVENT\n  // 事件发布、订阅\n  public on<K extends keyof IOfficeEvents>(\n    eventName: K,\n    handler: (payload: IOfficeEvents[K]) => void\n  ) {\n    return this.bus.on(eventName, handler);\n  }\n\n  public emit<K extends keyof IOfficeEvents>(eventName: K, payload: IOfficeEvents[K]) {\n    this.bus.emit(eventName, payload);\n  }\n\n  // DOM\n  public getLeftColElement(): HTMLElement | null {\n    return (\n      document\n        .getElementById('ai-office-container-wrapper')\n        ?.shadowRoot?.querySelector('.office-left-col') || null\n    );\n  }\n\n  public getRightColElement(): HTMLElement | null {\n    return (\n      document\n        .getElementById('ai-office-container-wrapper')\n        ?.shadowRoot?.querySelector('.office-right-col') || null\n    );\n  }\n\n  public getRightColWid(): number | null {\n    const rightCol = this.getRightColElement();\n    return rightCol ? rightCol.clientWidth : null;\n  }\n}\n\nexport { AIOfficePortal } from './components/ai-office/portalHost';\n","import { extractTextPartMeta } from '@baishuyun/ai-feat-utils';\nimport { IAgentCallingPayload } from './types';\n\nexport const GetAgentCallingResult = (part: unknown): IAgentCallingPayload | null => {\n  const payload = extractTextPartMeta(part);\n  if (payload?.type !== 'agent-calling') {\n    return null;\n  }\n\n  const result = payload.result;\n  console.log('agent calling result raw data:', result);\n  try {\n    return JSON.parse(result) as IAgentCallingPayload;\n  } catch (e) {\n    console.error('invalid agent calling result data');\n    return null;\n  }\n};\n","import { IRegisteredSlotComProps, useHostApi } from '@/sdk';\nimport { FC } from 'react';\nimport { GetAgentCallingResult } from '../utils';\nimport { CollapsibleTxtMsg, PrimaryConfirmBtn } from '@baishuyun/ai-design';\n\nexport const AgentCallingConfirmCom: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n\n  const api = useHostApi();\n\n  if (!payload) {\n    return null;\n  }\n\n  const result = GetAgentCallingResult(payload);\n  if (!result) {\n    return null;\n  }\n\n  const agent = api.host.getAgentById(result.agent);\n  if (!agent) {\n    return null;\n  }\n\n\n  return (\n    <div className='flex flex-col gap-2.5'>\n      <CollapsibleTxtMsg\n        defaultOpen\n        title=\"发起内置智能体调用\" \n        content={`将用提示词「${result.prompt}」调用智能体「${agent?.name}」`}\n      />\n      <PrimaryConfirmBtn\n        onClick={async () => {\n          await api.host.switchAgent(agent.id);\n          api.host.sendMessage(result.prompt, { agentId: agent.id });\n        }}\n      >\n        确认调用？\n      </PrimaryConfirmBtn>\n    </div>\n  );\n\n};\n","import { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { IAiOfficePluginApi } from '@/sdk';\nimport { AgentCallingConfirmCom } from './components';\n\nexport class AgentCallingConfirmPlugin extends BaseAiOfficePlugin {\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    // no slot, only provide api for other plugins to call\n    super.onInstall(api);\n\n    super.registerSlot('agent-calling-part', AgentCallingConfirmCom);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new AgentCallingConfirmPlugin('agent-calling-confirm');\n","import { create } from 'zustand';\nimport { IAgentHelperActions, IAgentHelperState } from '../types/store';\n\nexport const useAgentHelperStore = create<IAgentHelperActions & IAgentHelperState>((set) => ({\n  show: false,\n\n  showForm: false,\n\n  showLog: false,\n\n  logViewingHelperId: undefined,\n\n  setShowLog: (showLog) => {\n    if (!showLog) {\n      return set({ showLog: false, logViewingHelperId: undefined });\n    }\n    return set({ showLog });\n  },\n\n  showAgentSelectView: false,\n\n  currentEditingHelper: undefined,\n\n  setSelectedAgent: (agentId) => set({ selectedAgent: agentId }),\n\n  setShowAgentSelectView: (showAgentSelectView) => set({ showAgentSelectView }),\n\n  selectedAgent: undefined,\n\n  setCurrentEditingHelper: (helper) => set({ currentEditingHelper: helper }),\n\n  clearCurrentEditingHelper: () => set({ currentEditingHelper: undefined }),\n\n  setShowForm: (showForm: boolean) => set({ showForm }),\n\n  setShow: (show: boolean) => set({ show }),\n\n  agentHelpers: [],\n\n  addAgentHelper: (agentHelper) =>\n    set((state) => ({\n      agentHelpers: [...state.agentHelpers, agentHelper],\n    })),\n\n  updateAgentHelper: (agentHelper) =>\n    set((state) => ({\n      agentHelpers: state.agentHelpers.map((ah) =>\n        ah.id === agentHelper.id ? { ...ah, ...agentHelper } : ah\n      ),\n    })),\n\n  deleteAgentHelper: (agentHelperId) =>\n    set((state) => ({\n      agentHelpers: state.agentHelpers.filter((ah) => ah.id !== agentHelperId),\n    })),\n\n  setLogViewingHelperId: (helperId) => {\n    if (helperId) {\n      return set({ logViewingHelperId: helperId, showLog: true });\n    }\n    return set({ logViewingHelperId: undefined, showLog: false });\n  },\n}));\n","import { IRegisteredSlotComProps, useService } from \"@/sdk\";\nimport { IconBtn, SettingIcon } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\nimport { useAgentHelperStore } from \"../store/useAgentHelperStore\";\n\nexport const AgentHelperManagerCom: FC<IRegisteredSlotComProps> = (_) => {\n  const showManager = useAgentHelperStore((state) => state.setShow);\n\n  const automationService = useService('bsUIAutomation');\n\n  const platformUtils = useService('bsPlatformService');\n  \n  if (!showManager || !platformUtils?.hasManagePerm()) {\n    return null;\n  }\n\n  return (\n    <IconBtn\n      icon={(<SettingIcon />)}\n      onClick={() => {\n        // 关闭可能打开的弹窗\n        automationService?.closeMaskLayer();\n\n        showManager(true);\n      }}\n    />\n  )\n}","import { IAgentHelperFieldProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, Input } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const AgentNameField: FC<IAgentHelperFieldProps> = ({\n  form\n}) => {\n  return (\n      <FormField\n        control={form.control}\n        name=\"helperName\"\n        render={({ field }) => (\n          <FormItem data-field-name=\"helperName\">\n            <FormLabel required>名称</FormLabel>\n            <FormControl>\n              <Input placeholder=\"未命名智能体助手\" {...field} />\n            </FormControl>\n            <FormMessage />\n          </FormItem>\n        )}\n      />\n  )\n}","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { useHostApi } from \"@/sdk\";\nimport { AppSelect, groupsToAppTreeNodes } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const AppSelectField: FC<AgentHelperControllerRenderProps<'appId'>> = (props) => {\n\n  const api = useHostApi();\n  const appGroups = api.service.get('bsHostContext')?.appGroups;\n  if (!appGroups || !appGroups.length) {\n    return null;\n  }\n\n  const nodes = appGroups && appGroups.length ? groupsToAppTreeNodes(appGroups) : [];\n\n  return (\n    <AppSelect\n      nodes={nodes}\n      mode=\"single\"\n      {...props}\n    />\n  );\n}","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FormActionTriggerSelect } from \"@baishuyun/ai-design\";\n\nexport const FormActionTriggerSelectField: React.FC<AgentHelperControllerRenderProps<'formActionTriggerType'>> = (props) => {\n  const { form, ...rest } = props;\n  return (\n    <FormActionTriggerSelect\n      multiple\n      {...rest}\n    />\n  )\n}","import { useHostApi } from '@/sdk';\nimport { useAgentHelperForm } from '../types/form';\nimport { useEffect, useState } from 'react';\nimport { IField } from '@baishuyun/types';\n\nexport const useFormStructure = (form: useAgentHelperForm) => {\n  const appId = form.watch('appId');\n  const formId = form.watch('formId');\n\n  const api = useHostApi();\n  const formService = api.service.get('bsFormService');\n\n  const [fields, setFields] = useState<Array<IField>>([]);\n  const [loading, setLoading] = useState(false);\n\n  console.log('useFormStructure', { appId, formId });\n\n  useEffect(() => {\n    if (!appId || !formId || !formService) {\n      setFields([]);\n      return;\n    }\n\n    let cancelled = false;\n\n    const fetchFormStructure = async () => {\n      setLoading(true);\n      try {\n        const structure = await formService.getFormStructure({ appId, entryId: formId });\n        if (!cancelled) {\n          setFields(structure);\n        }\n      } finally {\n        if (!cancelled) {\n          setLoading(false);\n        }\n      }\n    };\n\n    fetchFormStructure();\n\n    return () => {\n      cancelled = true;\n    };\n  }, [appId, formId, formService]);\n\n  return {\n    fields: loading ? [] : fields,\n    loading,\n  };\n};\n","import { useFormStructure } from \"@/plugins/agent-helper-manager/hooks/useFormStructure\";\nimport { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FieldSelect } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const FormFieldSelectField: FC<AgentHelperControllerRenderProps<'triggerFieldWidgetName'>> = (props) => {\n  const { value, form, onChange, ...rest } = props;\n\n  const { fields } = useFormStructure(form)\n\n  const targetField = fields.find(field => field.widget?.widgetName === value);\n\n  return (\n    <FieldSelect\n      fields={fields}\n      {...rest}\n      value={targetField?.widget?.widgetName || ''}\n      onChange={(field, _) => {\n        const widgetName = field.widget?.widgetName;\n        onChange?.(widgetName as string);\n      }}\n    />\n  )\n}","import { useHostApi } from '@/sdk';\nimport { useAgentHelperForm } from '../types/form';\nimport { useState, useEffect } from 'react';\nimport { FormSelectItem, getEntries } from '@baishuyun/ai-design';\n\nexport const useAppForms = (\n  form: useAgentHelperForm\n): {\n  loading: boolean;\n  forms: Array<FormSelectItem>;\n} => {\n  const appIdField = form.watch('appId');\n  const api = useHostApi();\n  const hostContext = api.service.get('bsHostContext');\n  const [loading, setLoading] = useState(false);\n  const [forms, setForms] = useState<Array<FormSelectItem>>([]);\n\n  useEffect(() => {\n    if (!appIdField || !hostContext) {\n      setForms([]);\n      return;\n    }\n\n    let cancelled = false;\n\n    const fetchAppDetail = async (appId: string) => {\n      setLoading(true);\n      try {\n        const appDetail = await hostContext.fetchAppDetail(appId);\n        if (cancelled) return;\n\n        setForms(getEntries(appDetail));\n      } finally {\n        if (!cancelled) {\n          setLoading(false);\n        }\n      }\n    };\n\n    fetchAppDetail(appIdField);\n\n    return () => {\n      cancelled = true;\n    };\n  }, [appIdField, hostContext]);\n\n  return { loading, forms };\n};\n","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FC } from \"react\";\nimport { FormSelect } from \"@baishuyun/ai-design\";\nimport { useAppForms } from \"@/plugins/agent-helper-manager/hooks/useAppForms\";\n\nexport const FormSelectField: FC<AgentHelperControllerRenderProps<'formId'>> = (props) => {\n  const { value, onChange, form, ...rest } = props;\n  const { forms } = useAppForms(form);\n\n  const selectedForm = forms.find(f => f.id === value);\n\n  return (\n    <FormSelect\n      {...rest}\n      value={selectedForm?.id}\n      onChange={(selected) => {\n        onChange(selected?.form.id || '');\n      }}\n      items={forms}\n    />\n  )\n}","import { useHostApi } from '@/sdk';\nimport { useAgentHelperStore } from '../store/useAgentHelperStore';\nimport { OutputParam } from '@baishuyun/types';\n\nexport const useAgentPublishConfig: () => OutputParam[] = () => {\n  const selectedAgent = useAgentHelperStore((s) => s.selectedAgent);\n\n  const api = useHostApi();\n\n  const agentInfo = api.host.getAgentById(selectedAgent ?? '');\n\n  if (!agentInfo) {\n    return [];\n  }\n\n  return agentInfo.publisherConfig?.outputParams ?? [];\n};\n","import { useAgentPublishConfig } from \"@/plugins/agent-helper-manager/hooks/useAgentPublishConfig\";\nimport { useFormStructure } from \"@/plugins/agent-helper-manager/hooks/useFormStructure\";\nimport { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { OutputConfigEditor } from \"@baishuyun/ai-design\";\n\nexport const OutputConfigField: React.FC<AgentHelperControllerRenderProps<'outputParam'>> = (props) => {\n  const { fields } = useFormStructure(props.form);\n  const config = useAgentPublishConfig();\n\n  console.log(props.value);\n\n  return (\n    <OutputConfigEditor\n      value={props.value || []}\n      onChange={props.onChange}\n      sourceFields={config}\n      targetFields={fields}\n    />\n  );\n};\n","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FC } from \"react\";\nimport { PromptInput } from \"@baishuyun/ai-design\";\nimport { useFormStructure} from '../../../hooks/useFormStructure';\n\nexport const PromptInputField: FC<AgentHelperControllerRenderProps<'prompt'>> = (props) => {\n  const value = typeof props.value === \"string\" ? props.value : undefined;\n\n  const { fields } = useFormStructure(props.form);\n\n  console.log(props.value, fields);\n  return (\n    <PromptInput\n      fields={fields}\n      {...props}\n      value={value}\n    />\n  )\n}","import { useFieldValueService } from \"@/plugin-sdk/react\";\nimport { useFormStructure } from \"@/plugins/agent-helper-manager/hooks/useFormStructure\";\nimport { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { ConditionInput } from \"@baishuyun/ai-design\";\nimport { FLOW_NODE_ACTION_CONFIG_LIST } from \"@baishuyun/ai-design/agent-helper/flow-node-action-trigger-select/index\";\nimport { FORM_ACTION_CONFIG_LIST } from \"@baishuyun/ai-design/agent-helper/form-action-trigger-select/index\";\nimport { FC } from \"react\";\n\nexport const TriggerConditionField: FC<AgentHelperControllerRenderProps<'triggerCondition'>> = (props) => {\n  const { form } = props;\n\n  const triggerType = form.watch('triggerType');\n\n  const formTriggerType = form.watch('formActionTriggerType');\n  const selectedTriggerSet = new Set(formTriggerType || []);\n\n  const nodeTriggerType = form.watch('flowNodeTriggerType');\n  const selectedNodeTriggerSet = new Set(nodeTriggerType || []);\n\n  const fieldValueService = useFieldValueService()\n\n  const appId = form.watch('appId');\n  const formId = form.watch('formId');\n\n  if (appId && formId) {\n    fieldValueService?.setContext(appId, formId );\n  }\n\n  const label = FORM_ACTION_CONFIG_LIST.filter(item => selectedTriggerSet.has(item.type)).map(item => item.title).join(' 或 ');\n  const nodeLabel = FLOW_NODE_ACTION_CONFIG_LIST.filter(item => selectedNodeTriggerSet.has(item.type)).map(item => item.title).join(' 或 ');\n\n  const { fields } = useFormStructure(form);\n\n  const labelStr = triggerType === 'form_action'\n    ? label\n    : triggerType === 'form_flow_node'\n      ? nodeLabel\n      : '表单';\n\n  return (\n    <ConditionInput targetName={labelStr} fields={fields} {...props} service={fieldValueService} />\n  )\n}\n\nexport const FlowTriggerConditionField: FC<AgentHelperControllerRenderProps<'triggerCondition'>> = (props) => {\n  const { form } = props;\n\n  const { fields } = useFormStructure(form);\n\n  const fieldValueService = useFieldValueService();\n\n  // const labelStr = triggerType === 'form_action'\n  //   ? label\n  //   : triggerType === 'form_flow_node'\n  //     ? nodeLabel\n  //     : '';\n\n  return (\n    <ConditionInput targetName={'流程结束'} fields={fields} {...props} service={fieldValueService} />\n  )\n}","import { useFormStructure } from \"@/plugins/agent-helper-manager/hooks/useFormStructure\";\nimport { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FieldEditPreferenceSelect } from \"@baishuyun/ai-design\";\n\nexport const EditFormFieldPreferenceSelectField: React.FC<AgentHelperControllerRenderProps<'formFieldEditPreference'>> = (props) => {\n  const { fields } = useFormStructure(props.form);\n  return (\n    <FieldEditPreferenceSelect\n      fields={fields}\n      {...props}\n    />\n  )\n}\n","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FlowNodeActionTriggerSelect } from \"@baishuyun/ai-design\";\n\nexport const FlowNodeTriggerSelectField: React.FC<AgentHelperControllerRenderProps<'flowNodeTriggerType'>> = (props) => {\n  return (\n    <FlowNodeActionTriggerSelect\n      multiple\n      {...props}\n    />\n  )\n}","import { useAppForms } from \"@/plugins/agent-helper-manager/hooks/useAppForms\";\nimport { useFormStructure } from \"@/plugins/agent-helper-manager/hooks/useFormStructure\";\nimport { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { TriggerTimePreferenceSelect } from \"@baishuyun/ai-design/agent-helper/trigger-time-preference-select/index\";\nimport { FC } from \"react\";\n\nexport const TriggerTimePreferenceSelectField: FC<AgentHelperControllerRenderProps<'triggerTimePreference'>> = (props) => {\n  const { form, ...rest } = props;\n  const { forms } = useAppForms(form);\n  const { fields } = useFormStructure(form);\n\n  return (\n    <TriggerTimePreferenceSelect\n      forms={forms}\n      fields={fields}\n      {...rest}\n    />\n  )\n}","import { AgentHelperControllerRenderProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { RepeatPreferenceSelect } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const RepeatPreferenceSelectField: FC<AgentHelperControllerRenderProps<'triggerRepeatPreference'>> = (props) => {\n\n  return (\n    <RepeatPreferenceSelect\n      {...props}\n    />\n  )\n};","import { AppSelectField } from '../../components/agent-helper-configuration-form/fields/app-select-field';\nimport { FormActionTriggerSelectField } from '../../components/agent-helper-configuration-form/fields/form-action-trigger-select-field';\nimport { FormFieldSelectField } from '../../components/agent-helper-configuration-form/fields/form-field-select-field';\nimport { FormSelectField } from '../../components/agent-helper-configuration-form/fields/form-select-field';\nimport { OutputConfigField } from '../../components/agent-helper-configuration-form/fields/output-config-field';\nimport { PromptInputField } from '../../components/agent-helper-configuration-form/fields/prompt-input-field';\nimport { TriggerConditionField } from '../../components/agent-helper-configuration-form/fields/trigger-condition-field';\nimport { IAgentHelperFormFieldConfig } from '../../types/form';\nimport { EditFormFieldPreferenceSelectField } from '../../components/agent-helper-configuration-form/fields/edit-form-field-preference-select-field';\nimport { FlowNodeTriggerSelectField } from '../../components/agent-helper-configuration-form/fields/flow-node-trigger-select-field';\nimport { TriggerTimePreferenceSelectField } from '../../components/agent-helper-configuration-form/fields/trigger-time-preference-select-field';\nimport { RepeatPreferenceSelectField } from '../../components/agent-helper-configuration-form/fields/repeat-preference-select-field';\nimport { TriggerDeadlineField } from '../../components/agent-helper-configuration-form/fields/trigger-deadline-field';\n\nexport const AppRangeConfig: IAgentHelperFormFieldConfig<'appId'> = {\n  label: '应用范围',\n  name: 'appId',\n  Component: AppSelectField,\n  halfWidth: true,\n};\n\nexport const FormRangeConfig: IAgentHelperFormFieldConfig<'formId'> = {\n  label: '表单范围',\n  name: 'formId',\n  Component: FormSelectField,\n  halfWidth: true,\n};\n\nexport const TriggerFormConfig: IAgentHelperFormFieldConfig<'formId'> = {\n  label: '触发表单',\n  name: 'formId',\n  Component: FormSelectField,\n  halfWidth: true,\n};\n\nexport const PromptConfig: IAgentHelperFormFieldConfig<'prompt'> = {\n  label: '提示词配置',\n  name: 'prompt',\n  Component: PromptInputField,\n};\n\nexport const OutputConfig: IAgentHelperFormFieldConfig<'outputParam'> = {\n  label: '输出配置',\n  name: 'outputParam',\n  Component: OutputConfigField,\n};\n\nexport const TriggerFieldConfig: IAgentHelperFormFieldConfig<'triggerFieldWidgetName'> = {\n  label: '触发字段',\n  name: 'triggerFieldWidgetName',\n  Component: FormFieldSelectField,\n};\n\nexport const FormActionTriggerConfig: IAgentHelperFormFieldConfig<'formActionTriggerType'> = {\n  label: '选择触发动作',\n  name: 'formActionTriggerType',\n  Component: FormActionTriggerSelectField,\n};\n\nexport const FlowNodeTriggerConfig: IAgentHelperFormFieldConfig<'flowNodeTriggerType'> = {\n  label: '选择触发动作',\n  name: 'flowNodeTriggerType',\n  Component: FlowNodeTriggerSelectField,\n};\n\nexport const TriggerConditionConfig: IAgentHelperFormFieldConfig<'triggerCondition'> = {\n  label: '触发条件',\n  name: 'triggerCondition',\n  Component: TriggerConditionField,\n  visibilityChecker: (form) => {\n    const trigger = form.watch('triggerType');\n    const triggerType = form.watch('formActionTriggerType');\n    const nodeTriggerType = form.watch('flowNodeTriggerType');\n\n    const initOnly = triggerType?.length === 1 && triggerType?.includes('init');\n\n    return (\n      ((!!triggerType?.length || !!nodeTriggerType?.length) && !initOnly) || trigger === 'scheduler'\n    );\n  },\n};\n\nexport const FieldEditPreferenceConfig: IAgentHelperFormFieldConfig<'formFieldEditPreference'> = {\n  label: '编辑字段',\n  name: 'formFieldEditPreference',\n  Component: EditFormFieldPreferenceSelectField,\n  visibilityChecker: (form) => {\n    const formActionTriggerType = form.watch('formActionTriggerType');\n    console.log('[FieldEditPreferenceConfig.visibilityChecker]', { formActionTriggerType });\n    return !!formActionTriggerType?.includes('edit');\n  },\n};\n\nexport const TriggerTimePreferenceConfig: IAgentHelperFormFieldConfig<'triggerTimePreference'> = {\n  label: '触发时间类型',\n  name: 'triggerTimePreference',\n  Component: TriggerTimePreferenceSelectField,\n};\n\nexport const TriggerRepeatPreferenceConfig: IAgentHelperFormFieldConfig<'triggerRepeatPreference'> =\n  {\n    label: '重复触发',\n    name: 'triggerRepeatPreference',\n    Component: RepeatPreferenceSelectField,\n  };\n\nexport const TriggerDeadlineConfig: IAgentHelperFormFieldConfig<'triggerDeadline'> = {\n  label: '触发截止时间',\n  name: 'triggerDeadline',\n  Component: TriggerDeadlineField,\n  visibilityChecker: (form) => {\n    const triggerTimePreference = form.watch('triggerTimePreference');\n    return triggerTimePreference?.type === 'custom';\n  },\n};\n","import { IAgentHelperConfigurationForm, triggerType } from '@baishuyun/types';\nimport { IAgentHelperFormFieldConfig } from '../types/form';\n\nimport {\n  AppRangeConfig,\n  FieldEditPreferenceConfig,\n  FlowNodeTriggerConfig,\n  FormActionTriggerConfig,\n  FormRangeConfig,\n  OutputConfig,\n  PromptConfig,\n  TriggerConditionConfig,\n  TriggerFieldConfig,\n  TriggerFormConfig,\n  TriggerRepeatPreferenceConfig,\n  TriggerTimePreferenceConfig,\n} from './fields-config';\n\ntype AgentHelperAnyFieldConfig = {\n  [K in keyof IAgentHelperConfigurationForm]: IAgentHelperFormFieldConfig<K>;\n}[keyof IAgentHelperConfigurationForm];\n\nexport const defaultConfiguration: IAgentHelperConfigurationForm = {\n  helperName: '',\n  triggerType: 'universal',\n  appId: '',\n  formId: '',\n  prompt: '',\n};\n\nexport const triggerTypeFieldConfigListMap: Record<\n  triggerType,\n  Array<AgentHelperAnyFieldConfig>\n> = {\n  universal: [AppRangeConfig, FormRangeConfig],\n  form_field: [AppRangeConfig, FormRangeConfig, TriggerFieldConfig, PromptConfig, OutputConfig],\n  form_action: [\n    AppRangeConfig,\n    TriggerFormConfig,\n    FormActionTriggerConfig,\n    FieldEditPreferenceConfig,\n    TriggerConditionConfig,\n    PromptConfig,\n    OutputConfig,\n  ],\n  form_flow_node: [\n    AppRangeConfig,\n    TriggerFormConfig,\n    FlowNodeTriggerConfig,\n    TriggerConditionConfig,\n    PromptConfig,\n    OutputConfig,\n  ],\n  scheduler: [\n    AppRangeConfig,\n    TriggerFormConfig,\n    TriggerTimePreferenceConfig,\n    TriggerRepeatPreferenceConfig,\n    TriggerConditionConfig,\n    PromptConfig,\n    OutputConfig,\n  ],\n};\n","import { IAgentHelperFieldProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, TriggerSelect } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const TriggerTypeField: FC<IAgentHelperFieldProps> = ({\n  form\n}) => {\n  return (\n      <FormField\n        control={form.control}\n        name=\"triggerType\"\n        render={({ field }) => (\n          <FormItem data-field-name=\"triggerType\">\n            <FormLabel required>触发方式</FormLabel>\n            <FormControl>\n              <TriggerSelect {...field} />\n            </FormControl>\n            <FormMessage />\n          </FormItem>\n        )}\n      />\n  )\n}","import { IAgentHelperFieldProps } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FormDivider, TriggerConfigList } from \"@baishuyun/ai-design\";\nimport { FC } from \"react\";\n\nexport const TriggerDividerField: FC<IAgentHelperFieldProps> = ({\n  form\n}) => {\n  const currentTriggerType = form.watch('triggerType');\n\n  const currentTriggerConfig = TriggerConfigList.find(config => config.triggerType === currentTriggerType);\n  return (\n    <FormDivider>{currentTriggerConfig?.title}配置</FormDivider>\n  )\n};","import { triggerTypeFieldConfigListMap } from \"@/plugins/agent-helper-manager/consts\";\nimport { ITriggerFieldsRouterProps, useAgentHelperForm, type IAgentHelperFormFieldConfig } from \"@/plugins/agent-helper-manager/types/form\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@baishuyun/ai-design\";\nimport type { ControllerRenderProps } from \"@baishuyun/ai-design\";\nimport { type FC, useMemo } from \"react\";\nimport { mergeConsecutiveTargets } from \"@baishuyun/ai-feat-utils\";\nimport { IAgentHelperConfigurationForm } from \"@baishuyun/types\";\n\ntype AnyFieldConfig = IAgentHelperFormFieldConfig<keyof IAgentHelperConfigurationForm>;\ntype FieldComponent = FC<ControllerRenderProps<IAgentHelperConfigurationForm> & { form: useAgentHelperForm }>;\n\nconst TriggerFieldRenderer: FC<{\n  config: AnyFieldConfig;\n  form: ITriggerFieldsRouterProps['form'];\n}> = ({ config, form }) => {\n  const C = config.Component as FieldComponent;\n\n  if (!C) return null;\n\n  if (config.visibilityChecker) {\n    const visible = config.visibilityChecker(form);\n    if (!visible) {\n      return null;\n    }\n  }\n\n  return (\n    <FormField\n      control={form.control}\n      name={config.name}\n      render={({ field }) => (\n        <FormItem data-field-name={config.name}>\n          <FormLabel required={config.required}>{config.label}</FormLabel>\n          <FormControl>\n            <C {...field} form={form} />\n          </FormControl>\n          <FormMessage />\n        </FormItem>\n      )}\n    />\n  );\n};\n\nexport const TriggerFieldsRouter: FC<ITriggerFieldsRouterProps> = ({\n  form\n}) => {\n\n  const currentTriggerType = form.watch('triggerType');\n  const fieldConfig = triggerTypeFieldConfigListMap[currentTriggerType];\n\n  const mergeConfig = useMemo(\n    () => fieldConfig ? mergeConsecutiveTargets(fieldConfig, (item) => !!item?.halfWidth, 2) : [],\n    [fieldConfig]\n  );\n\n  if (!fieldConfig) return null;\n\n  return (\n    <>\n      {\n        mergeConfig.map((config) => {\n          if (Array.isArray(config)) {\n            return (\n              <div className=\"grid grid-cols-2 gap-4\" key={config.map(c => c?.name).join('-')}>\n                {config.map((c) => (\n                  <TriggerFieldRenderer key={c?.name} config={c as AnyFieldConfig} form={form} />\n                ))}\n              </div>\n            );\n          }\n\n          return (\n            <TriggerFieldRenderer key={(config as AnyFieldConfig).name} config={config as AnyFieldConfig} form={form} />\n          );\n        })\n      }\n    </>\n  );\n\n}","import type { IAgentHelperConfigurationForm } from \"@baishuyun/types\";\nimport type { IAgentHelperFormFieldConfig, useAgentHelperForm } from \"../../types/form\";\nimport { triggerTypeFieldConfigListMap } from \"../../consts\";\n\ntype AnyFieldConfig = IAgentHelperFormFieldConfig<keyof IAgentHelperConfigurationForm>;\n\nfunction scrollToFirstError(fieldName: string, rootNode: Document | ShadowRoot | Node) {\n  requestAnimationFrame(() => {\n    requestAnimationFrame(() => {\n      const el = (rootNode as ParentNode).querySelector(`[data-field-name=\"${fieldName}\"]`);\n      el?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n    });\n  });\n}\n\nexport function validateAgentHelperForm(\n  data: IAgentHelperConfigurationForm,\n  form: useAgentHelperForm,\n  rootNode: Document | ShadowRoot | Node\n): boolean {\n  let hasError = false;\n  let firstErrorFieldName = \"\";\n\n  const setError = (name: string, message: string) => {\n    if (!firstErrorFieldName) {\n      firstErrorFieldName = name;\n    }\n    form.setError(name as any, { message });\n    hasError = true;\n  };\n\n  // Static required fields\n  if (!data.helperName?.trim()) {\n    setError(\"helperName\", \"请输入智能体助手名称\");\n  }\n\n  if (!data.triggerType) {\n    setError(\"triggerType\", \"请选择触发方式\");\n  }\n\n  // Dynamic fields based on trigger type\n  const fieldConfigs = triggerTypeFieldConfigListMap[data.triggerType];\n  if (fieldConfigs) {\n    for (const config of fieldConfigs) {\n      const c = config as AnyFieldConfig;\n\n      if (!c.required) continue;\n      if (c.visibilityChecker && !c.visibilityChecker(form)) continue;\n\n      const value = data[c.name];\n      let isEmpty = false;\n\n      if (Array.isArray(value)) {\n        isEmpty = value.length === 0;\n      } else if (typeof value === \"string\") {\n        isEmpty = !value.trim();\n      } else {\n        isEmpty = !value;\n      }\n\n      if (isEmpty) {\n        const message =\n          c.name === \"prompt\"\n            ? `请输入${c.label}`\n            : `请选择${c.label}`;\n        setError(c.name as string, message);\n      }\n    }\n  }\n\n  if (hasError && firstErrorFieldName) {\n    scrollToFirstError(firstErrorFieldName, rootNode);\n  }\n\n  return !hasError;\n}\n","import { Button, Form, useForm } from \"@baishuyun/ai-design\";\nimport { AgentNameField } from \"./fields/agent-name-field\";\nimport { defaultConfiguration } from \"../../consts\";\nimport { TriggerTypeField } from \"./fields/trigger-type-field\";\nimport { TriggerDividerField } from \"./fields/trigger-divider-field\";\nimport { TriggerFieldsRouter } from \"./trigger-fields-router\";\nimport { IAgentHelperConfigurationForm } from \"@baishuyun/types\";\nimport { useAgentHelperStore } from \"../../store/useAgentHelperStore\";\nimport { validateAgentHelperForm } from \"./validate-agent-helper-form\";\nimport { useRef } from \"react\";\n\nexport const BaseAgentHelperConfigurationForm = ({\n  onSubmit,\n  setSubmitBtnRef,\n}: { onSubmit: (data: IAgentHelperConfigurationForm) => void; setSubmitBtnRef: React.Ref<HTMLButtonElement> }) => {\n  const currentEditingHelper = useAgentHelperStore((state) => state.currentEditingHelper);\n  const formRef = useRef<HTMLFormElement>(null);\n\n  const form = useForm<IAgentHelperConfigurationForm>({\n    defaultValues: currentEditingHelper || defaultConfiguration,\n  })\n\n  const handleSubmit = (data: IAgentHelperConfigurationForm) => {\n    if (validateAgentHelperForm(data, form, formRef.current?.getRootNode() ?? document)) {\n      onSubmit(data);\n    }\n  };\n\n  return (\n    <Form\n      ref={formRef}\n      formMethods={form}\n      onSubmit={form.handleSubmit(handleSubmit)}\n      className=\"flex flex-col gap-[22px] w-full\"\n    >\n      {/* 智能体名称 */}\n      <AgentNameField form={form} />\n\n      {/* 触发方式 */}\n      <TriggerTypeField form={form} />\n\n      {/* 触发方式分割线 */}\n      <TriggerDividerField form={form} />\n\n      {/* 触发方式动态路由字段 */}\n      <TriggerFieldsRouter form={form} />\n\n      {/* make invisible */}\n      <Button type=\"submit\" ref={setSubmitBtnRef} className=\"hidden\">\n        提交\n      </Button>\n    </Form>\n  );\n}","import { Drawer, DrawerBody, DrawerHeader, DrawerContent, DrawerTitle, DrawerCloseButton, DrawerTrigger, DrawerFooter } from \"@baishuyun/ai-design/ui/drawer\";\nimport { useAgentHelperStore } from \"../../store/useAgentHelperStore\";\nimport { IFormDrawerProps } from \"../../types/form\";\nimport { Button } from \"@baishuyun/ai-design\";\n\nexport const FormDrawer = ({\n  trigger,\n  title,\n  children,\n  onSaveClick,\n}: IFormDrawerProps) => {\n  const showForm = useAgentHelperStore((state) => state.showForm);\n  const setShowForm = useAgentHelperStore((state) => state.setShowForm);\n\n  // if (!showForm) {\n  //   return null; \n  // }\n\n  return (\n      <Drawer open={showForm} onOpenChange={(open) => useAgentHelperStore.getState().setShowForm(open)}>\n        <DrawerTrigger asChild>\n          {trigger}\n        </DrawerTrigger>\n        <DrawerContent className='h-[calc(100vh-52px)]'>\n          <DrawerHeader>\n            <DrawerTitle>{title}</DrawerTitle>\n            <DrawerCloseButton />\n          </DrawerHeader>\n          <DrawerBody>\n            {children}\n          </DrawerBody>\n          <DrawerFooter>\n            <Button className=\"bg-[#0265ff] hover:bg-[#0265ff]/90 text-white w-[94px]\" onClick={onSaveClick}>保存</Button>\n            <Button variant=\"outline\" className=\"border-[#E0E0E0] text-[#030303] w-[94px]\" onClick={() => {\n              setShowForm(false);\n            }}>取消</Button>\n          </DrawerFooter>\n        </DrawerContent>\n      </Drawer>\n  )\n}","import { IFormDrawerProps } from \"../../types/form\";\nimport { BaseAgentHelperConfigurationForm } from \"./agent-helper-configuration-form\";\nimport { FormDrawer } from \"./form-drawer\";\nimport { useRef } from \"react\";\nimport { useAgentHelperStore } from \"../../store/useAgentHelperStore\";\nimport { useHostApi } from \"@/sdk\";\n\nexport const AgentHelperConfigurationForm = (props: Omit<IFormDrawerProps, 'children' | 'onSaveClick'>) => {\n  const submitBtnRef = useRef<HTMLButtonElement>(null);\n  const setFormShow = useAgentHelperStore((state) => state.setShowForm);\n\n  const currentEditingHelper = useAgentHelperStore((state) => state.currentEditingHelper);\n  const isEditing = !!currentEditingHelper;\n\n  const selectedAgent = useAgentHelperStore((state) => state.selectedAgent);\n\n  const agentHelperService = useHostApi().service.get('agentHelperService');\n\n  return (\n    <FormDrawer\n      {...props}\n      onSaveClick={() => {\n        if (submitBtnRef.current) {\n          submitBtnRef.current.click();\n        }\n      }}\n    >\n      <BaseAgentHelperConfigurationForm\n        setSubmitBtnRef={submitBtnRef}\n        onSubmit={(formData) => {\n          if (isEditing) {\n            agentHelperService?.updateHelper({\n              ...currentEditingHelper,\n              ...formData,\n            });\n            setFormShow(false);\n            return;\n          }\n\n          agentHelperService?.createHelper({\n            ...formData,\n            id: `agent-helper-${Date.now()}`,\n            enabled: false,\n            agentId: selectedAgent || \"\",\n            logs: []\n          });\n\n          setFormShow(false);\n\n          useAgentHelperStore.getState().setShowAgentSelectView(false);\n        }}\n      />\n    </FormDrawer>\n  );\n}\n\n","import { Button } from \"@baishuyun/ai-design/ui/button\";\nimport { Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from \"@baishuyun/ai-design/ui/drawer\";\n\nexport interface IBsDrawerProps {\n  title?: string;\n  trigger?: React.ReactNode;\n  children?: React.ReactNode;\n  onSaveClick?: () => void;\n  onOpenChange?: (open: boolean) => void;\n}\n\nexport const BsDrawer = ({\n  trigger,\n  title,\n  children,\n  onSaveClick,\n  hideFooter,\n  open,\n  onOpenChange,\n}: IBsDrawerProps & {\n  hideFooter?: boolean;\n  open?: boolean;\n}) => {\n  return (\n      <Drawer open={open} onOpenChange={(o) => onOpenChange?.(o)}>\n        <DrawerTrigger asChild>\n          {trigger}\n        </DrawerTrigger>\n        <DrawerContent className='h-[calc(100vh-52px)]'>\n          <DrawerHeader>\n            <DrawerTitle>{title}</DrawerTitle>\n            <DrawerCloseButton />\n          </DrawerHeader>\n          <DrawerBody full>\n            {children}\n          </DrawerBody>\n          {!hideFooter && (\n            <DrawerFooter>\n              <Button className=\"bg-[#0265ff] hover:bg-[#0265ff]/90 text-white w-[94px]\" onClick={onSaveClick}>保存</Button>\n              <Button variant=\"outline\" className=\"border-[#E0E0E0] text-[#030303] w-[94px]\" onClick={() => {\n                onOpenChange?.(false);\n              }}>取消</Button>\n            </DrawerFooter>\n          )}\n        </DrawerContent>\n      </Drawer>\n  )\n}","import { useState, useEffect, useCallback } from 'react';\nimport { createColumnHelper, DataTable, ExecLogFilter } from \"@baishuyun/ai-design\";\nimport type { ExecLogFilterValue } from \"@baishuyun/ai-design\";\nimport { Button } from \"@baishuyun/ai-design/ui/button\";\nimport { IExecLog, triggerType } from \"@baishuyun/types\";\nimport { BsDrawer, IBsDrawerProps } from \"./BsDrawer\";\nimport { useHostApi } from \"@/sdk\";\n\nconst columnHelper = createColumnHelper<IExecLog>();\n\nconst TRIGGER_TYPE_LABEL_MAP: Record<triggerType, string> = {\n  universal: '通用型',\n  form_field: '表单字段触发',\n  form_action: '表单动作触发',\n  form_flow_node: '表单流程节点触发',\n  scheduler: '计划任务触发',\n};\n\nexport interface IAgentHelperExecLogDrawerProps extends Omit<IBsDrawerProps, 'children' | 'title'> {\n  open: boolean;\n  onOpenChange?: (open: boolean) => void;\n  agentHelperUuid?: string;\n}\n\nconst logColumns = [\n  columnHelper.accessor('execDateTime', {\n    header: '执行时间',\n    cell: (info) => info.getValue(),\n    size: 200,\n  }),\n  columnHelper.accessor('execUserId', {\n    header: '执行人',\n    cell: (info) => info.getValue(),\n    size: 140,\n  }),\n  columnHelper.accessor('triggerType', {\n    header: '触发类型',\n    cell: (info) => TRIGGER_TYPE_LABEL_MAP[info.getValue()] ?? info.getValue(),\n    size: 146,\n  }),\n  columnHelper.accessor('triggerType', {\n    header: '触发动作',\n    cell: (_) => {\n      return (\n        <div className=\"flex flex-col gap-[10px]\">\n        </div>\n      );\n    },\n    size: 280,\n  }),\n  columnHelper.accessor('execResult', {\n    header: '执行结果',\n    cell: (info) => {\n      const { result, detail } = info.getValue();\n      const success = result === 1;\n      const label = success ? '执行成功' : '执行失败';\n      const textColor = success ? 'text-[#52c41a]' : 'text-[#ff4d4f]';\n      return (\n        <div className=\"flex flex-col gap-[10px]\">\n          <span className={`text-[14px] font-medium ${textColor}`}>{label}</span>\n          {detail ? <span className=\"text-[#999] text-[12px]\">{detail}</span> : null}\n        </div>\n      );\n    },\n    size: 400,\n  }),\n  columnHelper.accessor('usedTokens', {\n    header: 'token消耗数',\n    cell: (info) => info.getValue().toLocaleString(),\n  }),\n];\n\nexport const AgentHelperExecLogDrawer = ({\n  open,\n  onOpenChange,\n  agentHelperUuid,\n}: IAgentHelperExecLogDrawerProps) => {\n  const agentHelperService = useHostApi().service.get('agentHelperService');\n\n  const [logs, setLogs] = useState<IExecLog[]>([]);\n  const [total, setTotal] = useState(0);\n  const [filters, setFilters] = useState<ExecLogFilterValue>({});\n  const [page, setPage] = useState(0);\n  const pageSize = 20;\n\n  const fetchLogs = useCallback(async (filterOverrides?: ExecLogFilterValue) => {\n    if (!agentHelperUuid || !agentHelperService) return;\n    const f = filterOverrides ?? filters;\n    try {\n      const response = await agentHelperService.queryLogs({\n        agentHelperUuid,\n        triggerType: f.triggerType,\n        result: f.execResult !== undefined && f.execResult !== '' ? parseInt(f.execResult, 10) : undefined,\n        operator: f.execUserId,\n        startTime: f.startDate\n          ? Math.floor(f.startDate.getTime() / 1000)\n          : undefined,\n        endTime: f.endDate\n          ? Math.floor(f.endDate.getTime() / 1000) + 86400\n          : undefined,\n        page,\n        pageSize,\n      });\n      setLogs(response.items);\n      setTotal(response.total);\n    } catch (err) {\n      console.error('[AgentHelperExecLogDrawer] Failed to fetch logs', err);\n      setLogs([]);\n      setTotal(0);\n    }\n  }, [agentHelperUuid, agentHelperService, filters, page]);\n\n  useEffect(() => {\n    if (open && agentHelperUuid) {\n      fetchLogs();\n    }\n  }, [open, agentHelperUuid, page]);\n\n  const handleFilter = useCallback((value: ExecLogFilterValue) => {\n    setFilters(value);\n    setPage(0);\n    fetchLogs(value);\n  }, [fetchLogs]);\n\n  const totalPages = Math.max(1, Math.ceil(total / pageSize));\n\n  return (\n    <BsDrawer\n      title=\"执行日志\"\n      hideFooter\n      onOpenChange={onOpenChange}\n      open={open}\n    >\n      <div className=\"flex flex-col gap-[10px] h-full\">\n        <ExecLogFilter\n          value={filters}\n          onChange={setFilters}\n          onFilter={handleFilter}\n          execResultOptions={[\n            { value: '1', label: '执行成功' },\n            { value: '0', label: '执行失败' },\n          ]}\n        />\n        <DataTable\n          columns={logColumns}\n          data={logs}\n          className=\"flex-1 min-h-0\"\n        />\n        {total > 0 && (\n          <div className=\"flex items-center justify-between pt-[10px] shrink-0\">\n            <span className=\"text-[14px] text-[#999]\">共 {total} 条</span>\n            <div className=\"flex items-center gap-[12px]\">\n              <Button\n                variant=\"outline\"\n                size=\"sm\"\n                disabled={page === 0}\n                onClick={() => setPage((p) => Math.max(0, p - 1))}\n              >\n                上一页\n              </Button>\n              <span className=\"text-[14px] text-[#333]\">\n                第 {page + 1} / {totalPages} 页\n              </span>\n              <Button\n                variant=\"outline\"\n                size=\"sm\"\n                disabled={page >= totalPages - 1}\n                onClick={() => setPage((p) => p + 1)}\n              >\n                下一页\n              </Button>\n            </div>\n          </div>\n        )}\n      </div>\n    </BsDrawer>\n  );\n};\n","import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@baishuyun/ai-design\"\nimport { useAgents } from \"@/plugin-sdk/react\";\nimport { triggerType } from \"@baishuyun/types\";\n\nconst triggerTypeOptions: Array<{ value: triggerType | 'all'; label: string }> = [\n  { value: 'all', label: '全部' },\n  { value: 'universal', label: '通用型' },\n  { value: 'form_field', label: '表单字段触发' },\n  { value: 'form_action', label: '表单动作触发' },\n  { value: 'form_flow_node', label: '表单流程节点触发' },\n  { value: 'scheduler', label: '计划任务触发' },\n];\n\ninterface AgentHelperFilterProps {\n  triggerType: triggerType | 'all';\n  onTriggerTypeChange: (value: triggerType | 'all') => void;\n  agentId: string | undefined;\n  onAgentChange: (value: string) => void;\n}\n\nexport const AgentHelperFilter = ({\n  triggerType,\n  onTriggerTypeChange,\n  agentId,\n  onAgentChange,\n}: AgentHelperFilterProps) => {\n  const { agents } = useAgents();\n\n  return (\n    <div className=\"flex items-center gap-[10px]\">\n        <Select value={triggerType} onValueChange={onTriggerTypeChange}>\n          <SelectTrigger className=\"flex-1 min-w-[200px]\">\n            <SelectValue placeholder=\"触发方式\" />\n          </SelectTrigger>\n          <SelectContent>\n            {triggerTypeOptions.map((opt) => (\n              <SelectItem key={opt.value} value={opt.value}>\n                {opt.label}\n              </SelectItem>\n            ))}\n          </SelectContent>\n        </Select>\n\n        <Select value={agentId ?? ''} onValueChange={onAgentChange}>\n          <SelectTrigger className=\"flex-1 min-w-[260px]\">\n            <SelectValue placeholder=\"请选择智能体\" />\n          </SelectTrigger>\n          <SelectContent>\n            {agents.map((agent) => (\n              <SelectItem key={agent.id} value={agent.id}>\n                {agent.name}\n              </SelectItem>\n            ))}\n          </SelectContent>\n        </Select>\n    </div>\n  )\n}","import { IRegisteredSlotComProps, useHostApi, useService } from \"@/sdk\";\nimport { useAgentHelperStore } from \"../store/useAgentHelperStore\";\nimport { FC, useMemo, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { AddIcon, AgentHelperCardList, AgentHelperMainLayout, ALL_APPS_VALUE, AppSelect, BackIcon, Button, groupsToAppTreeNodes, IconBtn, Input, PlaceholderCard } from \"@baishuyun/ai-design\";\nimport { AgentHelperConfigurationForm } from \"./agent-helper-configuration-form\";\nimport { AgentHelperExecLogDrawer } from \"./agent-helper-exec-log-drawer\";\nimport { AgentHelperFilter } from \"./agent-helper-filter\";\nimport { IAgentHelper, triggerType } from \"@baishuyun/types\";\n\nconst Header = () => {\n    const setVisible = useAgentHelperStore((state) => state.setShow);\n    return (\n      <div className=\"px-[20px] w-full items-center flex\">\n          <IconBtn icon={<BackIcon />} onClick={() => setVisible(false)} />\n          <span className=\"text-[16px] font-bold text-[#333] ml-[12px]\">设置智能体助手</span>\n      </div>\n    );\n}\n\nexport const Empty = () => {\n  return (\n    <div className=\"content-stretch flex flex-col items-center justify-center py-[40px] px-[20px] w-full bg-[#F5F7FA]\">\n      <PlaceholderCard\n        description=\"您暂时还没有添加智能体助手。\"\n        detailAddress=\"\"\n        onCreateClick={() => {\n          useAgentHelperStore.getState().clearCurrentEditingHelper();\n          useAgentHelperStore.getState().setShowAgentSelectView(true)\n        }}\n      />\n    </div>\n  )\n}\n\ninterface ContentProps {\n  filteredHelpers: IAgentHelper[];\n  filterTriggerType: triggerType | 'all';\n  onFilterTriggerTypeChange: (value: triggerType | 'all') => void;\n  filterAgentId: string | undefined;\n  onFilterAgentChange: (value: string) => void;\n  filterKeyword: string;\n  onFilterKeywordChange: (value: string) => void;\n}\n\nconst Content: FC<ContentProps> = ({\n  filteredHelpers,\n  filterTriggerType,\n  onFilterTriggerTypeChange,\n  filterAgentId,\n  onFilterAgentChange,\n  filterKeyword,\n  onFilterKeywordChange,\n}) => {\n  const agentHelpers = useAgentHelperStore((state) => state.agentHelpers);\n  const showLog = useAgentHelperStore((state) => state.showLog);\n  const setShowLog = useAgentHelperStore((state) => state.setShowLog);\n  const logViewingHelperId = useAgentHelperStore((state) => state.logViewingHelperId);\n\n  const platformService = useHostApi().service.get('bsPlatformService');\n  const agentHelperService = useHostApi().service.get('agentHelperService');\n  const formService = useService('bsFormService');\n\n  return (\n    <div className=\"flex flex-col h-full w-full\">\n      <div className=\"shrink-0 h-[56px] flex items-center justify-between px-[20px] bg-white\">\n        <AgentHelperFilter\n          triggerType={filterTriggerType}\n          onTriggerTypeChange={onFilterTriggerTypeChange}\n          agentId={filterAgentId}\n          onAgentChange={onFilterAgentChange}\n        />\n        <div className=\"flex items-center gap-[10px]\">\n          <Input\n            placeholder=\"搜索智能体助手\"\n            value={filterKeyword}\n            onChange={(e) => onFilterKeywordChange(e.target.value)}\n          />\n\n          <Button\n            onClick={() => {\n              useAgentHelperStore.getState().clearCurrentEditingHelper();\n              useAgentHelperStore.getState().setShowAgentSelectView(true)\n            }}\n          >\n            <AddIcon />\n            新建\n          </Button>\n        </div>\n      </div>\n      <div className=\"p-[20px] grow min-h-0 shrink overflow-y-auto\" style={{ scrollbarGutter: \"stable\" }}>\n        <AgentHelperCardList\n          formService={formService!}\n          onCopy={(id) => {\n            const exist = agentHelpers.find((h) => h.id === id);\n            if (exist) {\n              const newHelper = {\n                ...exist,\n                id: `${Date.now()}`,\n                helperName: `${exist.helperName}-复制`,\n              }\n              agentHelperService?.createHelper(newHelper);\n\n              platformService?.toast({\n                type: 'success',\n                msg: '复制成功',\n              })\n            }\n          }}\n          onEdit={(id) => {\n            const thisHelper = agentHelpers.find((h) => h.id === id);\n            if (thisHelper) {\n              useAgentHelperStore.getState().setSelectedAgent(thisHelper.agentId);\n              useAgentHelperStore.getState().setCurrentEditingHelper(thisHelper);\n              useAgentHelperStore.getState().setShowForm(true);\n            }\n          }}\n          onEnabledChange={(id, enabled) => {\n            agentHelperService?.toggleHelperEnabled(id, enabled);\n          }}\n          onDelete={(id) => agentHelperService?.deleteHelper(id)}\n          items={filteredHelpers}\n          onViewLogs={(id) => {\n            useAgentHelperStore.getState().setLogViewingHelperId(id);\n          }}\n        />\n        <AgentHelperExecLogDrawer open={showLog} onOpenChange={setShowLog} agentHelperUuid={logViewingHelperId} />\n      </div>\n    </div>\n  );\n\n}\n\nexport const AgentHelperEntry: FC<IRegisteredSlotComProps> = () => {\n  const visible = useAgentHelperStore((state) => state.show);\n  const agentHelpers = useAgentHelperStore((state) => state.agentHelpers);\n  const isEmpty = !agentHelpers || agentHelpers.length === 0;\n\n  const api = useHostApi();\n  const isEdit = useAgentHelperStore((state) => !!state.currentEditingHelper);\n  const drawerTitle = isEdit ? \"编辑智能体助手\" : \"新建智能体助手\";\n\n  const [filterAppId, setFilterAppId] = useState<string>('');\n  const [filterTriggerType, setFilterTriggerType] = useState<triggerType | 'all'>('all');\n  const [filterAgentId, setFilterAgentId] = useState<string>('');\n  const [filterKeyword, setFilterKeyword] = useState('');\n\n  const filteredHelpers = useMemo(() => {\n    return agentHelpers.filter((h) => {\n      if (filterAppId && h.appId !== filterAppId) return false;\n      if (filterTriggerType !== 'all' && h.triggerType !== filterTriggerType) return false;\n      if (filterAgentId && h.agentId !== filterAgentId) return false;\n      if (filterKeyword && !h.helperName.toLowerCase().includes(filterKeyword.toLowerCase())) return false;\n      return true;\n    });\n  }, [agentHelpers, filterAppId, filterTriggerType, filterAgentId, filterKeyword]);\n\n  const appGroups = api.service.get('bsHostContext')?.appGroups;\n  if (!appGroups || !appGroups.length) {\n    return null;\n  }\n\n  if (!visible) {\n    return null;\n  }\n\n  const nodes = appGroups && appGroups.length ? groupsToAppTreeNodes(appGroups) : [];\n\n  return (\n    <div className={classNames(\"absolute inset-0 z-20\")}>\n      <AgentHelperMainLayout>\n        <AgentHelperMainLayout.TopBar>\n          <Header />\n        </AgentHelperMainLayout.TopBar>\n        <AgentHelperMainLayout.Main>\n          {\n            isEmpty ? <Empty /> : (\n              <>\n                <AgentHelperMainLayout.SideBar>\n                  <div className=\"p-[20px]\">\n                    <AppSelect\n                      popoverContentOnly\n                      showAll\n                      nodes={nodes}\n                      value={filterAppId || undefined}\n                      mode=\"single\"\n                      onChange={(value) => {\n                        const id = Array.isArray(value) ? value[0] || '' : value || '';\n                        setFilterAppId(id === ALL_APPS_VALUE ? '' : id);\n                      }}\n                    />\n                  </div>\n                </AgentHelperMainLayout.SideBar>\n                <AgentHelperMainLayout.Content>\n                  <Content\n                    filteredHelpers={filteredHelpers}\n                    filterTriggerType={filterTriggerType}\n                    onFilterTriggerTypeChange={setFilterTriggerType}\n                    filterAgentId={filterAgentId || undefined}\n                    onFilterAgentChange={setFilterAgentId}\n                    filterKeyword={filterKeyword}\n                    onFilterKeywordChange={setFilterKeyword}\n                  />\n                </AgentHelperMainLayout.Content>\n              </>\n            )\n          }\n\n          <AgentHelperConfigurationForm\n            title={drawerTitle}\n          />\n        </AgentHelperMainLayout.Main>\n      </AgentHelperMainLayout>\n    </div>\n  )\n}","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport {\n  AgentCategorySelectMenu,\n  AgentEntryCard,\n  AgentHelperMainLayout,\n  AgentSortSelect,\n  BackIcon,\n  IconBtn,\n  SearchInput,\n  Spinner,\n} from \"@baishuyun/ai-design\";\nimport type { AgentCategory } from \"@baishuyun/types\";\nimport classNames from \"classnames\";\nimport { FC, useMemo, useState } from \"react\";\nimport { useAgentHelperStore } from \"../../store/useAgentHelperStore\";\nimport { useAgents } from \"@/plugin-sdk/react\";\nimport type { SortOrder } from \"@baishuyun/ai-design\";\nimport type { IOfficeAgent } from \"@baishuyun/types\";\n\nconst Header = () => {\n  const setShowAgentSelectView = useAgentHelperStore(\n    (state) => state.setShowAgentSelectView,\n  );\n  return (\n    <div className=\"px-[20px] w-full items-center flex\">\n      <IconBtn\n        icon={<BackIcon />}\n        onClick={() => setShowAgentSelectView(false)}\n      />\n      <span className=\"text-[16px] font-bold text-[#333] ml-[12px]\">\n        选择智能体\n      </span>\n    </div>\n  );\n};\n\ninterface ContentProps {\n  agents: IOfficeAgent[];\n  loading: boolean;\n  searchKeyword: string;\n  sortOrder: SortOrder;\n  onSearchChange: (value: string) => void;\n  onSortChange: (value: SortOrder) => void;\n}\n\nconst Content = ({\n  agents,\n  loading,\n  searchKeyword,\n  sortOrder,\n  onSearchChange,\n  onSortChange,\n}: ContentProps) => {\n  const filteredAgents = useMemo(() => {\n    let result = agents;\n\n    if (searchKeyword.trim()) {\n      const kw = searchKeyword.trim().toLowerCase();\n      result = result.filter(\n        (a) =>\n          a.name.toLowerCase().includes(kw) ||\n          a.description?.toLowerCase().includes(kw),\n      );\n    }\n\n    result = [...result].sort((a, b) => {\n      const aDate = a.lastUpdated ? new Date(a.lastUpdated).getTime() : 0;\n      const bDate = b.lastUpdated ? new Date(b.lastUpdated).getTime() : 0;\n      if (!aDate && !bDate) return 0;\n      if (!aDate) return 1;\n      if (!bDate) return -1;\n      return sortOrder === \"newest\" ? bDate - aDate : aDate - bDate;\n    });\n\n    return result;\n  }, [agents, searchKeyword, sortOrder]);\n\n  return (\n    <div className=\"flex flex-col h-full w-full\">\n      <div className=\"shrink-0 h-[56px] flex items-center justify-between px-[20px] bg-white\">\n        <div></div>\n        <div className=\"flex items-center gap-[10px]\">\n          <AgentSortSelect value={sortOrder} onChange={onSortChange} />\n          <div className=\"flex items-center gap-[10px]\">\n            <SearchInput\n              placeholder=\"搜索智能体\"\n              value={searchKeyword}\n              onChange={onSearchChange}\n            />\n          </div>\n        </div>\n      </div>\n\n      <div\n        className=\"p-[20px] grow min-h-0 shrink overflow-y-auto\"\n        style={{ scrollbarGutter: \"stable\" }}\n      >\n        {loading ? (\n          <div className=\"flex items-center justify-center h-full\">\n            <Spinner className=\"size-6 text-[#0265FF]\" />\n          </div>\n        ) : filteredAgents.length === 0 ? (\n          <div className=\"flex items-center justify-center h-full text-[14px] text-[#999]\">\n            暂无匹配的智能体\n          </div>\n        ) : (\n          <div className=\"flex flex-col h-full w-full gap-[16px]\">\n            {filteredAgents.map((agent) => (\n              <AgentEntryCard\n                key={agent.id}\n                agent={agent}\n                onLogClick={console.log}\n                onSelect={() => {\n                  useAgentHelperStore.getState().setSelectedAgent(agent.id);\n                  useAgentHelperStore.getState().setShowForm(true);\n                }}\n              />\n            ))}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst AgentSelectViewInner = () => {\n  const { agents, loading } = useAgents();\n  const [category, setCategory] = useState<AgentCategory>(\"all-agent\");\n  const [searchKeyword, setSearchKeyword] = useState(\"\");\n  const [sortOrder, setSortOrder] = useState<SortOrder>(\"newest\");\n\n  const filteredByCategory = useMemo(() => {\n    if (category === \"system-agent\") {\n      return agents.filter((a) => a.builtIn === true);\n    }\n    if (category === \"custom-agent\") {\n      return agents.filter((a) => a.builtIn !== true);\n    }\n    return agents;\n  }, [agents, category]);\n\n  return (\n    <div className={classNames(\"absolute inset-0 z-20\")}>\n      <AgentHelperMainLayout>\n        <AgentHelperMainLayout.TopBar>\n          <Header />\n        </AgentHelperMainLayout.TopBar>\n        <AgentHelperMainLayout.Main>\n          <AgentHelperMainLayout.SideBar>\n            <div className=\"p-[12px]\">\n              <AgentCategorySelectMenu\n                value={category}\n                onChange={setCategory}\n              />\n            </div>\n          </AgentHelperMainLayout.SideBar>\n          <AgentHelperMainLayout.Content>\n            <Content\n              agents={filteredByCategory}\n              loading={loading}\n              searchKeyword={searchKeyword}\n              sortOrder={sortOrder}\n              onSearchChange={setSearchKeyword}\n              onSortChange={setSortOrder}\n            />\n          </AgentHelperMainLayout.Content>\n        </AgentHelperMainLayout.Main>\n      </AgentHelperMainLayout>\n    </div>\n  );\n};\n\nexport const AgentSelectView: FC<IRegisteredSlotComProps> = () => {\n  if (!useAgentHelperStore((state) => state.showAgentSelectView)) {\n    return null;\n  }\n\n  return <AgentSelectViewInner />;\n};\n","import {\n  IAgentHelper,\n  IAgentHelperService,\n  IAgentHelperPersistentStorageService,\n  triggerType,\n  IExecLogQueryFilters,\n  IExecLogQueryResponse,\n  IAddExecLogParams,\n} from '@baishuyun/types';\nimport { useAgentHelperStore } from '../store/useAgentHelperStore';\nimport { IAgentHelperEvents } from '../types/store';\nimport { createEventBus, EventBus } from '@/plugin-sdk/eventBus';\n\nconst CONFIG_FIELDS = [\n  'triggerFieldWidgetName',\n  'formActionTriggerType',\n  'flowNodeTriggerType',\n  'formFieldEditPreference',\n  'triggerCondition',\n  'prompt',\n  'outputParam',\n  'triggerTimePreference',\n  'triggerRepeatPreference',\n  'triggerDeadline',\n] as const;\n\nconst TRIGGER_TYPE_MAP: Record<triggerType, number> = {\n  universal: 1,\n  form_field: 2,\n  form_action: 3,\n  form_flow_node: 4,\n  scheduler: 5,\n};\n\nfunction extractConfig(helper: IAgentHelper): Record<string, unknown> {\n  const config: Record<string, unknown> = {};\n  for (const field of CONFIG_FIELDS) {\n    if (helper[field] !== undefined) {\n      config[field] = helper[field];\n    }\n  }\n  return config;\n}\n\nexport class AgentHelperService implements IAgentHelperService {\n  private eventBus: EventBus<IAgentHelperEvents> = createEventBus<IAgentHelperEvents>();\n  private persistenceService: IAgentHelperPersistentStorageService | null = null;\n\n  constructor(persistenceService?: IAgentHelperPersistentStorageService) {\n    this.persistenceService = persistenceService ?? null;\n\n    useAgentHelperStore.subscribe((state, prevState) => {\n      if (state.agentHelpers !== prevState.agentHelpers) {\n        this.eventBus.emit('helpersUpdated', state.agentHelpers || []);\n      }\n    });\n\n    this._initFromPersistence();\n  }\n\n  private async _refreshFromPersistence() {\n    if (!this.persistenceService) return;\n    const response = await this.persistenceService.listHelpers();\n    if (response && Array.isArray(response.items)) {\n      useAgentHelperStore.setState({ agentHelpers: response.items });\n    }\n  }\n\n  private async _initFromPersistence() {\n    try {\n      await this._refreshFromPersistence();\n    } catch (err) {\n      console.warn(\n        '[AgentHelperService] Failed to load from persistence, using in-memory state.',\n        err\n      );\n    }\n  }\n\n  async createHelper(helper: IAgentHelper): Promise<IAgentHelper> {\n    if (!this.persistenceService) {\n      useAgentHelperStore.getState().addAgentHelper(helper);\n      return helper;\n    }\n    try {\n      await this.persistenceService.createHelper({\n        agentHelperName: helper.helperName,\n        agentId: helper.agentId,\n        triggerType: TRIGGER_TYPE_MAP[helper.triggerType] ?? 1,\n        appId: helper.appId || '',\n        formId: helper.formId,\n        config: extractConfig(helper),\n      });\n      await this._refreshFromPersistence();\n    } catch (err) {\n      console.error('[AgentHelperService] createHelper persistence failed', err);\n    }\n    return helper;\n  }\n\n  async updateHelper(helper: IAgentHelper): Promise<IAgentHelper> {\n    if (!this.persistenceService) {\n      useAgentHelperStore.getState().updateAgentHelper(helper);\n      return helper;\n    }\n    try {\n      await this.persistenceService.updateHelper(helper.id, {\n        agentHelperName: helper.helperName,\n        triggerType: TRIGGER_TYPE_MAP[helper.triggerType] ?? 1,\n        appId: helper.appId,\n        agentId: helper.agentId,\n        formId: helper.formId,\n        config: extractConfig(helper),\n      });\n    } catch (err) {\n      console.error('[AgentHelperService] updateHelper persistence failed', err);\n    }\n    useAgentHelperStore.getState().updateAgentHelper(helper);\n    return helper;\n  }\n\n  async deleteHelper(helperId: string): Promise<void> {\n    if (this.persistenceService) {\n      try {\n        await this.persistenceService.deleteHelper(helperId);\n      } catch (err) {\n        console.error('[AgentHelperService] deleteHelper persistence failed', err);\n      }\n    }\n    useAgentHelperStore.getState().deleteAgentHelper(helperId);\n  }\n\n  async toggleHelperEnabled(helperId: string, enabled: boolean): Promise<void> {\n    if (this.persistenceService) {\n      try {\n        await this.persistenceService.enableHelper(helperId, enabled);\n      } catch (err) {\n        console.error('[AgentHelperService] toggleHelperEnabled persistence failed', err);\n      }\n    }\n    const existing = useAgentHelperStore.getState().agentHelpers.find((h) => h.id === helperId);\n    if (existing) {\n      useAgentHelperStore.getState().updateAgentHelper({ ...existing, enabled });\n    }\n  }\n\n  getHelperById: (id: string) => IAgentHelper | undefined = (id) => {\n    const helperList = useAgentHelperStore.getState().agentHelpers;\n    return helperList?.find((helper) => helper.id === id);\n  };\n\n  onAgentHelperChange: (callback: (list: Array<IAgentHelper>) => void) => () => void = (\n    callback\n  ) => {\n    return this.eventBus.on('helpersUpdated', callback);\n  };\n\n  fetchAgentHelperList: () => Array<IAgentHelper> = () => {\n    const helperList = useAgentHelperStore.getState().agentHelpers;\n    return helperList || [];\n  };\n\n  async queryLogs(filters: IExecLogQueryFilters): Promise<IExecLogQueryResponse> {\n    if (!this.persistenceService) {\n      return { items: [], total: 0 };\n    }\n    try {\n      return await this.persistenceService.queryLogs(filters);\n    } catch (err) {\n      console.error('[AgentHelperService] queryLogs failed', err);\n      return { items: [], total: 0 };\n    }\n  }\n\n  async addLog(params: IAddExecLogParams): Promise<void> {\n    if (!this.persistenceService) return;\n    try {\n      await this.persistenceService.addLog(params);\n    } catch (err) {\n      console.error('[AgentHelperService] addLog failed', err);\n    }\n  }\n}\n","import { IAiOfficePluginApi } from '@/sdk';\nimport { isHelperCondMet } from '@baishuyun/ai-feat-utils';\nimport { IAgentHelper } from '@baishuyun/types';\n\n/**\n * 触发钩子监听管理器\n */\nexport class TriggerHooksListenerManager {\n  private _api: IAiOfficePluginApi;\n\n  public constructor(api: IAiOfficePluginApi) {\n    this._api = api;\n\n    const agentHelperService = this._api.service.get('agentHelperService')!;\n    // const hostService = this._api.host;\n\n    // 初始化钩子监听\n\n    // 监听智能体助手的变化，重新创建触发钩子监听\n    agentHelperService.onAgentHelperChange((list) => {\n      this.listenersOff?.();\n      this.listenersOff = this.createListenersByHelpers(list);\n    });\n  }\n\n  listenersOff: () => void = () => {};\n\n  private helperListFilter = (helper: Array<IAgentHelper>): Array<IAgentHelper> => {\n    return helper.filter((item) => {\n      // 通用型助手无需触发\n      if (item.triggerType === 'universal') {\n        return false;\n      }\n\n      return true;\n    });\n  };\n\n  private isCtxMatch = (item: IAgentHelper) => {\n    // 上下文不匹配条件的助手无需触发\n    const ctxService = this._api.service.get('bsHostContext');\n\n    const ctx = ctxService?.currentContext;\n    const currentAppId = ctx?.params.appId;\n\n    if (item.appId && item.appId !== currentAppId) {\n      return false;\n    }\n\n    if (item.formId && item.formId !== ctx?.params.formId) {\n      return false;\n    }\n\n    return true;\n  };\n\n  private createListenersByHelpers = (helper: Array<IAgentHelper>): (() => void) => {\n    const offList: Array<() => void> = [];\n\n    const triggerHookService = this._api.service.get('bsTriggerHooksService');\n\n    this.helperListFilter(helper).forEach((item) => {\n      // 建立表单动作触发监听\n      if (item.triggerType === 'form_action' && item.formActionTriggerType?.length) {\n        item.formActionTriggerType?.forEach((actionType) => {\n          offList.push(\n            triggerHookService?.eventBus.on(actionType, async (data) => {\n              const isCondMet =\n                actionType === 'init' ? true : isHelperCondMet(item, data.formValues!);\n\n              if (data.formId === item.formId && isCondMet && this.isCtxMatch(item)) {\n                await this._api.host.executeHelper(item);\n                await this.addExecLog(item, actionType);\n              }\n            })!\n          );\n        });\n      }\n\n      // 建立表单字段触发\n      if (item.triggerType === 'form_field') {\n        offList.push(\n          triggerHookService?.eventBus.on('form_field', async (data) => {\n            if (\n              data.fieldName === item.triggerFieldWidgetName &&\n              isHelperCondMet(item, data.formValues!)\n            ) {\n              await this._api.host.executeHelper(item);\n              await this.addExecLog(item, 'form_field');\n            }\n          })!\n        );\n      }\n\n      // 建立流程节点触发\n      if (item.triggerType === 'form_flow_node' && item.flowNodeTriggerType?.length) {\n        item.flowNodeTriggerType?.forEach((actionType) => {\n          offList.push(\n            triggerHookService?.eventBus.on(actionType, async (data) => {\n              if (item.formId === data.formId && isHelperCondMet(item, data.formValues!)) {\n                await this._api.host.executeHelper(item);\n                await this.addExecLog(item, actionType);\n              }\n            })!\n          );\n        });\n      }\n    });\n\n    // destroy listeners;\n    return () => {\n      offList.forEach((off) => off());\n    };\n  };\n\n  async addExecLog(helper: IAgentHelper, triggerAction: string) {\n    const execTime = Math.floor(Date.now() / 1000);\n    let result = 1;\n    let detail: string | undefined;\n    const agentHelperService = this._api.service.get('agentHelperService');\n    agentHelperService?.addLog({\n      agentHelperUuid: helper.id,\n      agentId: helper.agentId,\n      execTime,\n      triggerType: helper.triggerType,\n      triggerAction,\n      result,\n      detail,\n    });\n  }\n}\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { AgentHelperManagerCom } from './components';\nimport { IAgentHelperActions, IAgentHelperState } from './types/store';\nimport { useAgentHelperStore } from './store/useAgentHelperStore';\nimport { AgentHelperEntry } from './components/agent-helper-Entry';\nimport { AgentSelectView } from './components/agent-select-view';\nimport { AgentHelperService } from './service/agent-helper-service';\nimport { TriggerHooksListenerManager } from './service/trigger-hooks-listener-manager';\n\nexport class AgentHelperManagerPlugin extends BaseAiOfficePlugin<\n  IAgentHelperActions & IAgentHelperState\n> {\n  id = 'agent-helper-manager';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    const persistenceService = api.service.get('agentHelperPersistentStorage');\n    api.service.register(\n      'agentHelperService',\n      new AgentHelperService(persistenceService)\n    );\n\n    super.onInstall(api);\n    super.registerSlot('rightColumnHeader:Right', AgentHelperManagerCom);\n    super.registerSlot('root-fullscreen', AgentHelperEntry);\n    super.registerSlot('root-fullscreen', AgentSelectView);\n\n    this._triggerHooksListenerManager = new TriggerHooksListenerManager(api);\n  }\n\n  private _triggerHooksListenerManager: TriggerHooksListenerManager | null = null;\n\n  weight?: number | undefined;\n\n  useStore?: (() => IAgentHelperActions & IAgentHelperState) | undefined = useAgentHelperStore;\n\n  override onDestroy(): void | Promise<void> {\n    this._triggerHooksListenerManager?.listenersOff();\n    this._triggerHooksListenerManager = null;\n  }\n}\n\nexport default new AgentHelperManagerPlugin('agent-helper-manager');\n","import { useAgentsAndHelpers, useCurrentWorkingAgent } from \"@/plugin-sdk/react\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { FC } from \"react\";\nimport { AgentScrollSelector } from \"@baishuyun/ai-design\";\n\n\nexport const AgentSelectCom: FC<IRegisteredSlotComProps> = (_) => {\n  const { agent: currentWorkingAgent, setAgent } = useCurrentWorkingAgent();\n\n  const { data: agents } = useAgentsAndHelpers(true);\n\n  return (\n    <AgentScrollSelector\n      agents={agents}\n      onSelect={setAgent}\n      activeAgent={currentWorkingAgent ? { id: currentWorkingAgent.id } : null}\n    />\n  );\n}","import { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { IAiOfficePluginApi } from '@/sdk';\nimport { AgentSelectCom } from './components';\n\nexport class AgentSelectPlugin extends BaseAiOfficePlugin {\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    // no slot, only provide api for other plugins to call\n    super.onInstall(api);\n\n    super.registerSlot('rightColumnHeader:Left', AgentSelectCom);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new AgentSelectPlugin('agent-select');\n","import { useMemo } from 'react';\nimport type { IOfficeAgent } from '@baishuyun/types';\nimport { cn } from '@/lib/utils';\n\nexport interface IAgentSelectTriggerProps {\n  activeAgent?: IOfficeAgent | null;\n  open?: boolean;\n}\n\nexport const AgentSelectTrigger = ({ activeAgent, open }: IAgentSelectTriggerProps) => {\n  const displayName = useMemo(() => {\n    return activeAgent?.name ?? '';\n  }, [activeAgent]);\n\n  if (!activeAgent) {\n    return null;\n  }\n\n  return (\n    <div\n      className={cn(\n        'flex leading-5 items-center gap-1 rounded-[4px] px-1.5 h-5 cursor-pointer transition-colors',\n        open\n          ? 'bg-[#EFF0F6]'\n          : 'bg-white hover:bg-[#EFF0F6]'\n      )}\n    >\n      <span\n        className={cn(\n          'whitespace-nowrap',\n          activeAgent ? 'text-[#0265FF]' : 'text-[#0265FF]'\n        )}\n      >\n        {displayName}\n      </span>\n    </div>\n  );\n};\n","import { useCallback, useState, useRef, useEffect } from 'react';\nimport type { IRegisteredSlotComProps } from '@baishuyun/types';\nimport { FC } from 'react';\nimport { useAgentsAndHelpers, useCurrentWorkingAgent } from '@/plugin-sdk/react';\nimport { useHostApi } from '@/plugin-sdk/react';\nimport { AgentSelect, Popover, PopoverContent, PopoverTrigger } from '@baishuyun/ai-design';\nimport { AgentSelectTrigger } from './agent-select-trigger';\nimport type { AgentShortSummary } from '@baishuyun/types';\n\nexport const BotIndicatorInTextarea: FC<IRegisteredSlotComProps> = () => {\n  const api = useHostApi();\n  const { data: agents } = useAgentsAndHelpers(true);\n  const { agent: activeAgent, setAgent } = useCurrentWorkingAgent();\n  const [open, setOpen] = useState(false);\n  const triggerRef = useRef<HTMLButtonElement | null>(null);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    const triggerEl = triggerRef.current;\n    if (!triggerEl) {\n      return;\n    }\n\n    const rootNode = triggerEl.getRootNode();\n    if (rootNode instanceof ShadowRoot) {\n      const existing = rootNode.querySelector<HTMLElement>('[data-bs-popover-portal]');\n      if (existing) {\n        setPortalContainer(existing);\n        return;\n      }\n\n      const container = document.createElement('div');\n      container.setAttribute('data-bs-popover-portal', 'true');\n      rootNode.appendChild(container);\n      setPortalContainer(container);\n      return;\n    }\n\n    setPortalContainer(null);\n  }, []);\n\n  const handleSelect = useCallback(\n    async (a: AgentShortSummary) => {\n      setAgent(a);\n      setOpen(false);\n    },\n    [api]\n  );\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <button ref={triggerRef} className=\"flex items-center outline-none\">\n          <AgentSelectTrigger activeAgent={activeAgent} open={open} />\n        </button>\n      </PopoverTrigger>\n      <PopoverContent align=\"start\" sideOffset={4} portalContainer={portalContainer}>\n        <AgentSelect\n          agents={agents}\n          showSearch\n          activeAgent={activeAgent}\n          onSelect={handleSelect}\n        />\n      </PopoverContent>\n    </Popover>\n  );\n};\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { BotIndicatorInTextarea } from './components';\n\nexport class BotIndicatorInTextareaPlugin extends BaseAiOfficePlugin {\n  id = 'bot-indicator-in-textarea';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n    super.registerSlot('input-top-left', BotIndicatorInTextarea);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new BotIndicatorInTextareaPlugin('bot-indicator-in-textarea');\n","import { SpecialPart } from \"@baishuyun/types\"\nimport { AgentSelect } from \"@baishuyun/ai-design\";\nimport { useAgentsAndHelpers, useBsHostCtx, useCurrentWorkingAgent } from \"@/plugin-sdk/react\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { FC } from \"react\";\n\nexport const DefaultOpeningLines: FC<IRegisteredSlotComProps> = () => {\n  const { agent: currentWorkingAgent, setAgent }  = useCurrentWorkingAgent();\n  const { data: agents, loading }  = useAgentsAndHelpers(true);\n\n  useBsHostCtx();\n\n  const selected = !!currentWorkingAgent;\n  if (selected) {\n    return null;\n  }\n\n  if (loading) {\n    return null;\n  }\n\n  if (agents.length === 0) {\n    return (\n      <div className=\"flex flex-col gap-2.5\">\n        <div>请先选择您要工作的应用和表单,我们再给您推荐可以工作的智能体</div>\n      </div>\n    )\n  }\n\n\n  return (\n    <div className=\"flex flex-col gap-2.5\">\n      <div>请选择智能体开启你的高效智能化创作</div>\n      <AgentSelect\n        agents={agents}\n        onSelect={setAgent}\n      />\n    </div>\n  )\n}\n\nexport const BotSelectionGuardCom = ({\n  payload\n}: {\n  payload?: unknown\n}) => {\n  const { agent: currentWorkingAgent, setAgent }  = useCurrentWorkingAgent();\n  const { data: agents, loading } = useAgentsAndHelpers(true);\n\n  const type = (payload as SpecialPart);\n\n  useBsHostCtx();\n\n  if (loading) {\n    return null;\n  }\n\n  if (agents.length === 0) {\n    return (\n      <div className=\"flex flex-col gap-2.5\">\n        <div>请先选择您要工作的应用和表单,我们再给您推荐可以工作的智能体</div>\n      </div>\n    )\n  }\n\n  if (type !== 'error-bot-id-required') {\n    return <></>\n  }\n\n\n\n  const selected = !!currentWorkingAgent;\n\n  return (\n    <div className=\"flex flex-col gap-2.5\">\n      <div>请选择智能体开启你的高效智能化创作</div>\n      <AgentSelect\n        agents={agents}\n        onSelect={setAgent}\n      />\n      {selected && <div className=\"text-[#121111]\">\n        已选择\n        <span className=\"text-[#0265FF]\">\n        {currentWorkingAgent?.name}\n        </span>\n        </div>\n        }\n    </div>\n  )\n}","import type { IAiOfficePluginApi, PluginID } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { BotSelectionGuardCom, DefaultOpeningLines } from './components';\n\nexport class BotSelectionGuardPlugin extends BaseAiOfficePlugin {\n  id: PluginID = 'bot-selection-guard';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    // call base method to init ctxUtils\n    super.onInstall(api);\n\n    super.registerSlot('empty-bot-part', BotSelectionGuardCom);\n\n    super.registerSlot('opening-lines', DefaultOpeningLines);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new BotSelectionGuardPlugin('bot-selection-guard');\n","import { IRegisteredSlotComProps, useHostApi } from '@/sdk';\nimport { MsgPartCompProps } from '@baishuyun/types/src/chat/plugin';\nimport { AttachmentPart, FilePart } from '@baishuyun/ai-design';\nimport { FC } from 'react';\nimport { FileUIPart } from 'ai';\nimport { imageUrlToBase64 } from '@baishuyun/ai-feat-utils';\n\nexport const AttachmentMsgPart: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n  const specialPayload = payload as MsgPartCompProps;\n\n  const part = specialPayload.part;\n\n  const hostApi = useHostApi();\n  const bsPlatformBasicService = hostApi.service.get('bsPlatformService');\n\n  if (!part) {\n    return null;\n  }\n\n  const { id, index } = specialPayload;\n\n  const key = `message-${id}-part-${index}-${Array.isArray(part) ? 'file-group' : part.type}`;\n\n  const handlePartClick = async (part: FilePart) => {\n    const isImage = part.mediaType?.startsWith('image/');\n    const resolvedUrl = isImage\n      ? await imageUrlToBase64(part.url, part.mediaType)\n      : part.url;\n\n    bsPlatformBasicService?.previewAttachment?.({\n      widgetType: isImage ? 'image' : 'file',\n      title: part.name,\n      files: [{\n        imageUrl: isImage ? resolvedUrl : undefined,\n      }],\n      currentItem: 0,\n      autoClose: false,\n    })\n  }\n\n\n  return (\n    <AttachmentPart key={key} part={part as FileUIPart} iconOnly onClick={handlePartClick} />\n  );\n};\n","import { IsErrorPart, IsFileGroupPart, IsFilePart, IsFakeMsgPart } from '@baishuyun/ai-feat-utils';\nimport { MsgPartCompProps } from '@baishuyun/types';\n\nexport const IsFileAttachmentPart = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part;\n\n  return IsFilePart(part);\n};\n\nexport const IsFileAttachmentGroupPart = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part;\n\n  return IsFileGroupPart(part);\n};\n\nconst createMatcher = (checker: (payload: unknown) => boolean) => {\n  return (payload: unknown) => {\n    const specialPayload = payload as MsgPartCompProps;\n    const part = specialPayload?.part;\n\n    return checker(part);\n  };\n};\n\nexport const IsErrorMsgPart = createMatcher(IsErrorPart);\n\nexport const IsFakeMessagePart = createMatcher(IsFakeMsgPart);\n","import { IRegisteredSlotComProps, useHostApi } from \"@/sdk\";\nimport { AttachmentPartGroup } from \"@baishuyun/ai-design/attachment-part-group\";\nimport { MsgPartCompProps } from \"@baishuyun/types\";\nimport { FileUIPart } from \"ai\";\nimport type { FilePart } from '@baishuyun/ai-design/attachment-part';\nimport { imageUrlToBase64 } from \"@baishuyun/ai-feat-utils\";\nimport { FC } from \"react\";\n\nexport const AttachmentGroupParCom: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n  const specialPayload = payload as MsgPartCompProps;\n  const hostApi = useHostApi();\n  const bsPlatformBasicService = hostApi.service.get('bsPlatformService');\n\n  const part = specialPayload.part;\n\n  if (!part) {\n    return null;\n  }\n\n  const handlePartClick = async (part: FilePart) => {\n    const isImage = part.mediaType?.startsWith('image/');\n    const resolvedUrl = isImage\n      ? await imageUrlToBase64(part.url, part.mediaType)\n      : part.url;\n\n    bsPlatformBasicService?.previewAttachment?.({\n      widgetType: isImage ? 'image' : 'file',\n      title: part.name,\n      files: [{\n        imageUrl: isImage ? resolvedUrl : undefined,\n      }],\n      currentItem: 0,\n      autoClose: false,\n    })\n  }\n\n  return <AttachmentPartGroup key={specialPayload.key} parts={part as FileUIPart[]} iconOnly onPartClick={handlePartClick} />;\n}","import { GetPartErrMsg } from \"@baishuyun/ai-feat-utils\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { WarningMessage } from \"@baishuyun/ai-design/warning-msg\";\nimport { FC } from \"react\";\n\nexport const ErrorMsgPart: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n  const specialPayload = payload as any;\n\n  const part = specialPayload?.part;\n\n  if (!part) {\n    return null;\n  }\n\n  const errMsg = GetPartErrMsg(part);\n\n  return <WarningMessage key={specialPayload.key} message={errMsg}></WarningMessage>;\n}","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport { FakeBotMessage } from \"@baishuyun/ai-design/fake-bot-msg\";\nimport { getMetaErrorMsg } from \"@baishuyun/ai-feat-utils\";\nimport { FC } from \"react\";\n\nexport const FakeMsgPart: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n  const specialPayload = payload as any;\n\n  const part = specialPayload?.part;\n\n  if (!part) {\n    return null;\n  }\n\n  const errMsg = getMetaErrorMsg(part);\n  return (\n    <FakeBotMessage key={specialPayload.key} headless>\n      {errMsg}\n    </FakeBotMessage>\n  );\n}","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { AttachmentMsgPart } from './components/attachment-part';\nimport {\n  IsErrorMsgPart,\n  IsFakeMessagePart,\n  IsFileAttachmentGroupPart,\n  IsFileAttachmentPart,\n} from './matcher';\nimport { AttachmentGroupParCom } from './components/attachment-group-part';\nimport { ErrorMsgPart } from './components/error-msg-part';\nimport { FakeMsgPart } from './components/fake-msg-part';\n\nexport class CommonMsgPartViewerPlugin extends BaseAiOfficePlugin {\n  id = 'common-msg-part-viewer';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    super.registerSlot('msg-part', AttachmentMsgPart, IsFileAttachmentPart);\n    super.registerSlot('msg-part', AttachmentGroupParCom, IsFileAttachmentGroupPart);\n    super.registerSlot('msg-part', ErrorMsgPart, IsErrorMsgPart);\n    super.registerSlot('msg-part', FakeMsgPart, IsFakeMessagePart);\n  }\n\n  weight?: number | undefined;\n\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new CommonMsgPartViewerPlugin('common-msg-part-viewer');\n","import { useHostApi } from '@/sdk';\nimport { IAppDetail } from '@baishuyun/types';\nimport { useState, useEffect, useMemo } from 'react';\n\nexport const useCurrentBsAppInfo = () => {\n  const api = useHostApi();\n  const ctxService = api.service.get('bsHostContext');\n  const [app, setApp] = useState<IAppDetail | null>(ctxService?.currentApp || null);\n  useEffect(() => {\n    if (!ctxService) {\n      return;\n    }\n    const unsubscribe = ctxService.subscribeCurrentAppChange((newApp) => {\n      setApp(newApp);\n      setDetails({ ...ctxService.appDetailsMap });\n    });\n\n    return () => {\n      const isFn = typeof unsubscribe === 'function';\n      if (isFn) {\n        unsubscribe();\n        console.log('unsubscribed from current app changes');\n      }\n    };\n  }, [ctxService]);\n\n  const [details, setDetails] = useState<Record<string, IAppDetail>>(\n    ctxService ? { ...ctxService.appDetailsMap } : {},\n  );\n\n  useEffect(() => {\n    if (ctxService) {\n      setDetails({ ...ctxService.appDetailsMap });\n    }\n  }, [ctxService]);\n\n  const currentAppId = useMemo(() => {\n    if (!app) return undefined;\n    for (const [key, val] of Object.entries(details)) {\n      if (val === app) return key;\n    }\n    for (const [key, val] of Object.entries(details)) {\n      if (val.name === app.name) return key;\n    }\n    return undefined;\n  }, [app, details]);\n\n  console.log('currentAppId:', currentAppId, 'currentApp:', app, 'details:', details);\n\n  return {\n    currentApp: app,\n    currentAppId,\n    details,\n    goto: ctxService?.redirectTo,\n  };\n};\n","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport { BsEntrySelect } from \"@baishuyun/ai-design\";\nimport { useCurrentBsAppInfo } from \"../hooks\";\nimport { useBsHostCtx } from \"@/plugin-sdk/react\";\n\nexport const EntrySelectCom: React.FC<IRegisteredSlotComProps> = () => {\n  const { currentAppId, details, goto } = useCurrentBsAppInfo();\n  const bsCtx = useBsHostCtx();\n\n  if (!currentAppId) {\n    return null;\n  }\n\n  console.log('defaultValue', bsCtx?.params.formId);\n\n  return (\n    <BsEntrySelect\n      showCurrentAppEntriesOnly\n      appDetails={details}\n      defaultValue={bsCtx?.params.formId}\n      sliderVariant=\"tabs\"\n      currentAppId={currentAppId}\n      onChange={(result) => {\n        if (result) {\n          goto?.(result.appId, result.entry.entryId, result.entry.type);\n        }\n      }}\n    />\n  );\n};\n","import type { IAiOfficePluginApi, PluginID } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { EntrySelectCom } from './components/entry-select-com';\n\nexport class EntrySelectPlugin extends BaseAiOfficePlugin {\n  id: PluginID = 'entry-select';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    // call base method to init ctxUtils\n    super.onInstall(api);\n\n    super.registerSlot('leftColumnHeader:Left', EntrySelectCom);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new EntrySelectPlugin('entry-select');\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\n\nexport class FormFillingInputEnhancer extends BaseAiOfficePlugin {\n  id = 'form-batch-filling-input-enhancer';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    api.ui.registerMiddleware(\n      'transform-send-message-body',\n      this.transformSendMessageBody,\n      this.id\n    );\n  }\n\n  private async getFormStructure() {\n    const formService = this.api.service.get('bsFormService');\n    const ctxService = this.api.service.get('bsHostContext');\n\n    if (!formService || !ctxService || typeof formService.getFormStructure !== 'function') {\n      console.info('FormFillingInputEnhancer: Required services are not ready');\n      return [];\n    }\n\n    const currentContext = await ctxService?.currentContext;\n    if (!currentContext || !currentContext.params?.appId || !currentContext.params?.formId) {\n      console.info('FormFillingInputEnhancer: No current context available');\n      return [];\n    }\n\n    try {\n      const formStructure = await formService.getFormStructure({\n        appId: currentContext.params.appId,\n        entryId: currentContext.params.formId,\n      });\n      return formStructure;\n    } catch (error) {\n      console.info('FormFillingInputEnhancer: Failed to get form structure', error);\n      console.info(\n        'FormFillingInputEnhancer: Critical service',\n        JSON.parse(JSON.stringify(formService))\n      );\n      return [];\n    }\n  }\n\n  transformSendMessageBody = async (\n    body: Record<string, unknown>\n  ): Promise<Record<string, unknown>> => {\n    return {\n      ...(body || {}),\n      stage: 'fill',\n      formStructure: await this.getFormStructure(),\n      mode: 'batch',\n    };\n  };\n\n  weight?: number | undefined;\n\n  useStore?: (() => {}) | undefined;\n}\n\nexport default new FormFillingInputEnhancer('form-batch-filling-input-enhancer');\n","import { IRegisteredSlotComProps, useHostApi, useService } from \"@/sdk\";\nimport { PrimaryConfirmBtn } from \"@baishuyun/ai-design/primary-confirm-btn\";\nimport { FC } from \"react\";\n\nexport const FillingOpeningLines: FC<IRegisteredSlotComProps> = (_) => {\n\n  const hostApi = useHostApi();\n\n  const utilsService = useService('bsPlatformService');\n\n  const handleClick = utilsService?.debounce(() => {\n    hostApi.host.sendMessage(`添加 10 条示例数据`);\n  }, 500)\n\n  return (\n    <div className=\"flex flex-col gap-2.5\">\n      需要测试数据？试试AI示例数据功能。如果您对添加的数据有具体要求也可以告诉我。\n      <PrimaryConfirmBtn\n        className=\"bg-white\"\n        light\n        onClick={handleClick}\n        text=\"直接添加\"\n      />\n    </div>\n  );\n}","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { FillingOpeningLines } from './opening-lines';\n\nexport class FormFillingOpeningLinesPlugin extends BaseAiOfficePlugin {\n  id = 'form--batch-filling-opening-lines';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    // 开场白\n    super.registerSlot('opening-lines', FillingOpeningLines);\n  }\n\n  weight?: number | undefined;\n\n  useStore?: (() => {}) | undefined;\n}\n\nexport default new FormFillingOpeningLinesPlugin('form-batch-filling-opening-lines');\n","import { create } from 'zustand';\nimport { IBatchFillingStore } from '../types';\n\nexport const useBatchFillingStore = create<IBatchFillingStore>((set, get) => ({\n  counterMap: new Map<string, number>(),\n\n  allMessageIds: new Set<string>(),\n\n  uncheckedMessageIds: new Set<string>(),\n\n  setCount: (messageId: string, count: number) => {\n    const { counterMap } = get();\n    counterMap.set(messageId, count);\n    set({ counterMap: new Map(counterMap) });\n  },\n\n  setTimestamp: () => {\n    set({ updateTime: new Date().toISOString() });\n  },\n\n  getCount: (messageId: string) => {\n    return get().counterMap.get(messageId) || 0;\n  },\n\n  addMessageId: (messageId: string) => {\n    const { allMessageIds } = get();\n    allMessageIds.add(messageId);\n    set({ allMessageIds: new Set(allMessageIds) });\n  },\n\n  setChecked: (messageId: string, checked: boolean) => {\n    const { uncheckedMessageIds } = get();\n    if (checked) {\n      uncheckedMessageIds.delete(messageId);\n    } else {\n      uncheckedMessageIds.add(messageId);\n    }\n    set({\n      uncheckedMessageIds: new Set(uncheckedMessageIds),\n      updateTime: new Date().toISOString(),\n    });\n  },\n\n  getCheckedMessageIds: () => {\n    const { allMessageIds, uncheckedMessageIds } = get();\n    const checkedMessageIds = new Set<string>();\n    for (const messageId of allMessageIds) {\n      if (!uncheckedMessageIds.has(messageId)) {\n        checkedMessageIds.add(messageId);\n      }\n    }\n    return checkedMessageIds;\n  },\n\n  clear: () => {\n    set({\n      counterMap: new Map(),\n      allMessageIds: new Set(),\n      uncheckedMessageIds: new Set(),\n    });\n  },\n}));\n","import {\n  createPartTypeChecker,\n  createGetFieldJsonInfo,\n  createFieldPartsExtractor,\n} from '@baishuyun/ai-feat-utils';\n\nexport const IsBatchFillingFieldsJsonPart = createPartTypeChecker('batch-filling-fields-json');\n\nexport const extractFieldParts = createFieldPartsExtractor(IsBatchFillingFieldsJsonPart);\n\nexport const GetFieldJsonInfo = createGetFieldJsonInfo('batch-filling-fields-json');\n","import { MsgPartCompProps } from '@baishuyun/types';\nimport { TextUIPart } from 'ai';\nimport { extractFieldParts } from '../utils/get-fields-data';\n\nexport const isBatchFillingFieldsPart = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  const fieldsParts = extractFieldParts(part);\n\n  return fieldsParts.length > 0;\n};\n","import { CircleChecker } from '@baishuyun/ai-design/circle-checker';\n\nexport const GeneratedDataCounter = ({\n  count,\n  handleCheckChange,\n}: {\n  count: number;\n  handleCheckChange: (checked: boolean) => void;\n}) => {\n  return (\n    <div className=\"flex items-center w-full py-2.5 px-4 gap-1.5\">\n      <CircleChecker defaultChecked onCheckedChange={handleCheckChange}>\n        已生成{count}条数据\n      </CircleChecker>\n    </div>\n  );\n};\n","import { GenerateAnimation } from '@baishuyun/ai-design/generate-animation';\nimport BorderAnimation from '@baishuyun/ai-design/border-animation';\nimport { memo } from 'react';\n\nexport const FirstBatchGeneratingAnimation = memo(() => {\n  return (\n    <BorderAnimation borderRadius={4} height={40}>\n      <div className='w-full h-full bg-white px-2.5 flex items-center'>\n        <GenerateAnimation>数据生成中，可点击下方按钮暂停</GenerateAnimation>\n      </div>\n    </BorderAnimation>\n  );\n});\n","import { GenerateAnimation } from '@baishuyun/ai-design/generate-animation';\nimport { PrimaryConfirmBtn } from '@baishuyun/ai-design/primary-confirm-btn';\nimport { memo } from 'react';\nimport BorderAnimation from '@baishuyun/ai-design/border-animation';\nimport { DATA_COUNT_PER_BATCH } from '../consts';\n\nexport const NonFirstBatchGeneratingAnimation = memo(() => {\n  return (\n    <BorderAnimation borderRadius={10} height={110}>\n      <div className=\"flex flex-col gap-2.5 w-full pt-1 h-full bg-white\">\n        <GenerateAnimation className='ml-4 py-2.5'>继续生成中，可点击下方暂停按钮暂停</GenerateAnimation>\n        <PrimaryConfirmBtn\n          className=\"w-75 mx-auto\"\n        text={`继续生成${DATA_COUNT_PER_BATCH}条`} disabled />\n      </div>\n    </BorderAnimation>\n  );\n});\n","import { useHostApi } from '@/sdk';\nimport { useCallback, useEffect } from 'react';\n\nexport const useDataPreviewer = (autoShow?: boolean) => {\n  const hostApi = useHostApi();\n  const formService = hostApi.service.get('bsFormService');\n  const previewerService = hostApi.service.get('previewerService');\n\n  useEffect(() => {\n    previewerService?.setContentComponent(formService?.dataTableRenderer ?? null);\n    previewerService?.setTitle('AI 示例数据填报');\n    previewerService?.setHeadless(true);\n  }, []);\n\n  const showPreviewer = useCallback(() => {\n    previewerService?.setVisible(true);\n  }, []);\n\n  useEffect(() => {\n    if (autoShow) {\n      showPreviewer();\n    }\n  }, [autoShow, showPreviewer]);\n\n  return {\n    showPreviewer,\n  };\n};\n","import { PrimaryConfirmBtn } from '@baishuyun/ai-design/primary-confirm-btn';\nimport { TextUIPart } from 'ai';\nimport { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { ChatMessage, UseChatHelpers } from '@baishuyun/types';\nimport { type Field } from '../types';\nimport { GeneratedDataCounter } from './generated-data-counter';\nimport { FirstBatchGeneratingAnimation } from './first-batch-generating-animation';\nimport { NonFirstBatchGeneratingAnimation } from './non-first-batch-generating-animation';\nimport { useHostApi, useService } from '@/plugin-sdk/react';\nimport { useBatchFillingStore } from '../store/useBatchFillingStore';\nimport { GetSafeFormStructure, valueNormalizer } from '@baishuyun/ai-feat-utils';\nimport { DATA_COUNT_PER_BATCH } from '../consts';\nimport { useDataPreviewer } from '../hooks/usePreviewer';\n\ntype FilledField = {\n  fieldName: string;\n  fieldType: string;\n  value: unknown;\n  label: string;\n  row?: number;\n};\n\nconst usePartParser = (\n  part: TextUIPart | undefined,\n  onParse: (fields: Array<Field>, currentField: Field) => void\n) => {\n  const lastFieldRef = useRef<FilledField | null>(null);\n  useEffect(() => {\n    if (!part) {\n      return;\n    }\n\n    const text = part.text;\n    const cleanedText = text?.replace(/,\\s*$/, '');\n    const fullJson = `[${cleanedText}]`;\n\n    try {\n      const parsedFields = JSON.parse(fullJson) as Array<Field>;\n      if (!Array.isArray(parsedFields) || parsedFields.length === 0) {\n        return;\n      }\n\n      const lastField = parsedFields[parsedFields.length - 1];\n\n      if (lastFieldRef.current?.fieldName === lastField?.fieldName) {\n        return;\n      }\n\n      onParse(parsedFields, lastField);\n\n      lastFieldRef.current = lastField;\n    } catch (error) {\n      console.error('Failed to parse fields JSON:', error, fullJson);\n    }\n  }, [part]);\n};\n\ninterface BatchGeneratorActionProps {\n  sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n  setMessages: UseChatHelpers<ChatMessage>['setMessages'];\n  status: UseChatHelpers<ChatMessage>['status'];\n  id: string;\n  parts?: Array<TextUIPart>;\n  fields?: Array<Field>;\n}\n\nconst BaseBatchGeneratorAction = ({\n  sendMessage,\n  status,\n  id,\n  fields,\n}: BatchGeneratorActionProps) => {\n  const hostApi = useHostApi();\n  const [streamingState, setStreamingState] = useState(status === 'streaming');\n\n  const getCount = useBatchFillingStore((s) => s.getCount);\n  const setCount = useBatchFillingStore((s) => s.setCount);\n  const addMessageId = useBatchFillingStore((s) => s.addMessageId);\n  const setChecked = useBatchFillingStore((s) => s.setChecked);\n\n  const existingCount = getCount(id);\n  const [totalCount, setTotalCount] = useState(existingCount);\n\n  const getRowNum = useCallback(() => {\n    if (!fields || fields.length === 0) {\n      return 0;\n    }\n\n    const lastField = fields[fields.length - 1];\n    return lastField.row || 0;\n  }, [fields]);\n\n  useEffect(() => {\n    if (status === 'ready' || status === 'error') {\n      setStreamingState(false);\n    }\n  }, [status]);\n\n  useEffect(() => {\n    if (streamingState) {\n      return;\n    }\n\n    const newRows = getRowNum();\n    setCount(id, newRows);\n    // addMessageId(id);\n\n    setTotalCount(getCount(id) || 0);\n  }, [streamingState, getRowNum, id, setCount, addMessageId, getCount]);\n\n  const handleCheckChange = useCallback(\n    (checked: boolean) => {\n      setChecked(id, checked);\n    },\n    [id, setChecked]\n  );\n\n  const handleContinue = useCallback(async () => {\n    if (status === 'streaming' || streamingState) {\n      return;\n    }\n\n    setStreamingState(true);\n\n    const bsFormService = hostApi.service.get('bsFormService');\n    const bsHostCtx = hostApi.service.get('bsHostContext');\n\n    let formStructure: Array<any> = [];\n\n    if (bsFormService && bsHostCtx) {\n      const currentContext = await bsHostCtx.currentContext;\n      if (currentContext?.params?.appId && currentContext?.params?.formId) {\n        try {\n          formStructure = await bsFormService.getFormStructure({\n            appId: currentContext.params.appId,\n            entryId: currentContext.params.formId,\n          });\n        } catch (error) {\n          console.error('Failed to get form structure for continue:', error);\n        }\n      }\n    }\n\n    sendMessage(\n      { text: '' },\n      {\n        body: {\n          mode: 'batch',\n          count: DATA_COUNT_PER_BATCH,\n          msg: `继续生成${DATA_COUNT_PER_BATCH}条`,\n          formStructure: GetSafeFormStructure(formStructure),\n          continueMessageId: id,\n        },\n      }\n    );\n  }, [status, streamingState, hostApi, sendMessage, id]);\n\n  if (!streamingState) {\n    return (\n      <div className=\"rounded-lg border border-(--e0e0e0,#E0E0E0) w-full flex items-center flex-col gap-2.5 p-1 pb-5 bg-white\">\n        <GeneratedDataCounter count={totalCount} handleCheckChange={handleCheckChange} />\n\n        <PrimaryConfirmBtn\n          text={`继续生成 ${DATA_COUNT_PER_BATCH} 条`}\n          className=\"w-75\"\n          light\n          onClick={handleContinue}\n        />\n      </div>\n    );\n  }\n\n  const isFirstBatch = existingCount === 0;\n  if (isFirstBatch) {\n    return <FirstBatchGeneratingAnimation />;\n  }\n\n  return <NonFirstBatchGeneratingAnimation />;\n};\n\nconst PartParser = ({ parts, ...rest }: BatchGeneratorActionProps) => {\n  const [fields, setFields] = useState<Array<Field>>([]);\n\n  const formService = useService('bsFormService');\n\n  const lastPart = parts?.length ? (parts?.[parts.length - 1] as TextUIPart) : undefined;\n\n  const setTimestamp = useBatchFillingStore((s) => s.setTimestamp);\n  const addMessageId = useBatchFillingStore((s) => s.addMessageId);\n\n  const { showPreviewer } = useDataPreviewer(true);\n\n  const emit = useCallback(\n    (f: Field) => {\n      if (!formService) {\n        return;\n      }\n\n      const normalizedValue = valueNormalizer(f.value as string | string[]);\n\n      showPreviewer();\n\n      formService.syncWidgetUpdateDetail({\n        field: {\n          label: f.label,\n          widget: {\n            widgetName: f.fieldName,\n            type: f.fieldType,\n            value: normalizedValue,\n            row: f.row || 0,\n          },\n        },\n        messageId: rest.id,\n        checked: true,\n      });\n\n      addMessageId(rest.id);\n\n      setTimestamp();\n    },\n    [formService, rest.id, setTimestamp]\n  );\n\n  usePartParser(lastPart, (all, latestField) => {\n    setFields(all);\n    emit(latestField);\n  });\n\n  if (!lastPart) {\n    return null;\n  }\n\n  return <BaseBatchGeneratorAction fields={fields} {...rest} />;\n};\n\nexport const BatchGeneratorAction = memo(PartParser, (prevProps, nextProps) => {\n  const lastPart = nextProps.parts?.length\n    ? (nextProps.parts?.[nextProps.parts.length - 1] as TextUIPart)\n    : undefined;\n  const prevLastPart = prevProps.parts?.length\n    ? (prevProps.parts?.[prevProps.parts.length - 1] as TextUIPart)\n    : undefined;\n\n  return (\n    prevProps.parts?.length === nextProps.parts?.length &&\n    prevLastPart?.text === lastPart?.text &&\n    prevProps.status === nextProps.status &&\n    prevProps.id === nextProps.id\n  );\n});\n","import { MsgPartCompProps } from \"@baishuyun/types\";\nimport { BatchGeneratorAction } from \"./batch-generator-action\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { IExtraPartProps } from \"@/plugins/form-builder/types\";\nimport { extractFieldParts } from \"../utils/get-fields-data\";\nimport { useDataPreviewer } from \"../hooks/usePreviewer\";\n\nexport const BatchFillPart: React.FC<IRegisteredSlotComProps> = (props) => {\n    const payload = props.payload as MsgPartCompProps & IExtraPartProps\n\n    const { id, setMessages, status, sendMessage, part } = payload;\n\n    const fieldsParts = extractFieldParts(part);\n\n    useDataPreviewer(true);\n\n    return (\n      <BatchGeneratorAction\n        id={id}\n        setMessages={setMessages}\n        status={status}\n        parts={fieldsParts}\n        sendMessage={sendMessage}\n      />\n    )\n}","import { IBatchFillService } from '@baishuyun/types';\nimport { useBatchFillingStore } from '../store/useBatchFillingStore';\n\nexport class FormBatchFillingService implements IBatchFillService {\n  clear: () => void = () => {\n    useBatchFillingStore.getState().clear();\n  };\n  getCheckedMessageIds: () => Set<string> = () => {\n    return useBatchFillingStore.getState().getCheckedMessageIds();\n  };\n  onUpdate = (cbFn: () => void) => {\n    return useBatchFillingStore.subscribe((state, prevState) => {\n      if (state.updateTime !== prevState.updateTime) {\n        cbFn();\n      }\n    });\n  };\n}\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { useBatchFillingStore } from './store/useBatchFillingStore';\nimport { IBatchFillingStore } from './types';\nimport { isBatchFillingFieldsPart } from './matcher';\nimport { BatchFillPart } from './components/batch-fill-part';\nimport { IsBatchFillingFieldsJsonPart } from './utils/get-fields-data';\nimport { mergeConsecutiveTargets } from '@/lib/utils';\nimport type { MsgPartCompProps, ValueOf } from '@baishuyun/types';\nimport { FormBatchFillingService } from './service';\n\ntype part = ValueOf<Pick<MsgPartCompProps, 'part'>>;\n\nexport class FormBatchFillingPlugin extends BaseAiOfficePlugin<IBatchFillingStore> {\n  id = 'form-batch-filling';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    api.service.register('batchFillingService', new FormBatchFillingService());\n\n    super.registerSlot('msg-part', BatchFillPart, isBatchFillingFieldsPart);\n\n    api.ui.registerMiddleware('transform-preview-message-parts', this.mergeFieldsParts, this.id);\n  }\n\n  weight?: number | undefined;\n\n  useStore = useBatchFillingStore;\n\n  mergeFieldsParts = (parts: Array<part>): part[] => {\n    return mergeConsecutiveTargets<part>(parts, IsBatchFillingFieldsJsonPart) as part[];\n  };\n}\n\nexport default new FormBatchFillingPlugin('form-batch-filling');\n","import { Card } from '@baishuyun/ai-design/card';\nimport { UserIcon, BagIcon, BuildingIcon } from '@baishuyun/ai-design/bs-icons';\nimport { ISuggestion } from '@baishuyun/types';\n// import { useBuilderStore } from '../store/useBuilderStore';\nimport { getIconValue } from '@/lib/utils';\nimport { IRegisteredSlotComProps, useHostApi } from '@/sdk';\n\nconst defaultSuggestions: ISuggestion[] = [\n  {\n    icon: <UserIcon />,\n    iconCode: '&#xe814;',\n    title: '供应商管理，子表单为产品信息',\n    description:\n      '用于记录和管理企业供应商的基本信息、资质认证、合作状态等，便于采购部门进行供应商评估和选择。',\n  },\n  {\n    icon: <BagIcon />,\n    iconCode: '&#xe806;',\n    title: '搭建订单表',\n    description:\n      '子表单为商品列表（包含：商品ID、商品名称、商品供应商为关联数据字段、商品原价、商品销售价、商品型号为关联查询字段）',\n  },\n  {\n    icon: <BuildingIcon />,\n    iconCode: '&#xe81d;',\n    title: '创建合同表关联供应商信息管理表',\n    description:\n      '创建合同表用于记录与供应商签订的合同信息，并与供应商信息管理表进行关联，方便查询和管理合同相关的供应商信息。',\n  },\n];\n\nexport const FormBuilderOpeningLines = (_: IRegisteredSlotComProps) => {\n  // const setPickedIconValue = useBuilderStore((s) => s.setPickedIconValue);\n  const hostApi = useHostApi();\n\n  const handleSelect = (title: string, iconCode?: string) => {\n    const iconValue = getIconValue(iconCode);\n    if (iconValue !== undefined) {\n      // setPickedIconValue(iconValue);\n    }\n    hostApi.host.sendMessage(title);\n  };\n\n  return (\n    <>\n      👋 你好，你想创建什么表单呢，不知道的话，可以试试下面的建议~\n      {defaultSuggestions.map((item, index) => (\n        <Card\n          key={index}\n          icon={<div className=\"text-[#0265FF]\">{item.icon}</div>}\n          iconCode={item.iconCode}\n          index={index + 1}\n          title={item.title}\n          desc={item.description}\n          onClick={handleSelect}\n        />\n      ))}\n    </>\n  );\n};\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { FormBuilderOpeningLines } from './opening-lines';\n\nexport class FormBuilderOpeningLinesPlugin extends BaseAiOfficePlugin {\n  id = 'form-builder-opening-lines';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    // 开场白\n    super.registerSlot('opening-lines', FormBuilderOpeningLines);\n  }\n\n  weight?: number | undefined;\n\n  useStore?: (() => {}) | undefined;\n}\n\nexport default new FormBuilderOpeningLinesPlugin('form-builder-opening-lines');\n","import { IFieldDesignInfo } from '@baishuyun/types';\nimport { extractFormName } from '@/lib/utils';\nimport { FieldType } from '@baishuyun/types';\nimport type { DesignInfo, Field, FormInfo, LinkInfo } from '../types';\n\nconst DEFAULT_DATA_LOAD_CONF = {\n  //数据加载的配置\n  mode: 'tree', //显示模式  tree 树菜单  list 列表\n  extendSet: {\n    sort: ['datahelp', 'module', 'formEvent'],\n    status: true,\n    triggerField: '',\n    triggerFieldMode: 'none',\n  },\n  dataloadmode: ['add', 'cover'],\n};\n\nexport function getMatchResult(origin: string, pattern: RegExp) {\n  const matches = origin.match(pattern);\n  return matches ? matches[1] : '';\n}\n\nexport const parseDesc = (desc: string) => {\n  const splitDesc = desc.split('-');\n  if (splitDesc.length > 1) {\n    return {\n      isSubForm: splitDesc[0].trim().toLowerCase() === '子表单',\n      formName: splitDesc[1].trim(),\n    };\n  }\n\n  return {\n    isSubForm: false,\n    formName: '',\n  };\n};\n\nexport function parseRawFormText(rawText: string): IFieldDesignInfo[] {\n  // 按行分割原始文本\n  const lines = rawText.split('\\n').filter((line) => line.trim());\n  const fields: IFieldDesignInfo[] = [];\n\n  let subFormName = '';\n  lines.forEach((line) => {\n    // 分割字段名和属性（如：合同编号 | 类型：流水号 | 必填：是 | 说明：xxx）\n    let [fieldName, typePart, requiredPart, descPart, relationPart = ''] = line\n      .split('|')\n      .map((item) => item.trim());\n\n    if (!fieldName || !typePart || !requiredPart || !descPart) {\n      return;\n    }\n\n    // 提取类型\n    const typeMatch = typePart.match(/类型：(.*)/);\n    const type = typeMatch ? typeMatch[1] : '';\n\n    if (type === '子表单') {\n      subFormName = fieldName;\n    }\n\n    // 提取必填状态\n    const requiredMatch = requiredPart.match(/必填：(\\w+)/);\n    const required = requiredMatch ? requiredMatch[1] === '是' : false;\n\n    // 提取说明\n    const descMatch = descPart.match(/说明：(.+)/);\n    const description = descMatch ? descMatch[1] : '';\n\n    // 提取关联字段说明（如果有的话）\n    // 关系：（关联来源:供应商信息管理表，关联字段:供应商ID、供应商名称、联系人、联系方式）\n    const relationDesc = getMatchResult(relationPart, /关系：(.+)/);\n\n    // 名称清理，去掉可能的序号（如\"1. 合同编号\" -> \"合同编号\"）\n    fieldName = fieldName.replace(/^\\d+\\.\\s*/, '');\n\n    const parsedDesc = parseDesc(description);\n\n    const splitFieldName = fieldName.split('-');\n    const isFieldInSubForm =\n      splitFieldName.length > 1 ||\n      parsedDesc.isSubForm ||\n      // description.includes('子表单字段') ||\n      // description.includes('子表单内') ||\n      description.includes('子表单');\n\n    const parentFormName =\n      (isFieldInSubForm ? splitFieldName[0] || parsedDesc.formName : undefined) || subFormName;\n\n    fields.push({\n      fieldName: isFieldInSubForm ? splitFieldName[splitFieldName.length - 1] : fieldName,\n      type,\n      required,\n      description,\n      relationDesc,\n      isSubForm: type === '子表单' || parsedDesc.isSubForm,\n      isFieldInSubForm,\n      parentFormName,\n    });\n  });\n\n  return fields;\n}\n\nexport interface FormField {\n  fieldName: string; // 字段名称（如合同编号、关联供应商）\n  type: string; // 字段类型（如流水号、关联查询）\n  required: boolean; // 是否必填\n  description: string; // 字段说明\n  relationDesc?: string; // 关联字段说明\n}\n\nfunction extraFormNameFromFieldDesc(desc?: string) {\n  if (!desc) {\n    return '';\n  }\n\n  // 模式库\n  const patternLib = [/关联来源:(.*)表?，/, /关联(.*)表?/, /（从(.*)表?中查询）/, /来自(.*)表?/];\n\n  for (const pattern of patternLib) {\n    return getMatchResult(desc, pattern);\n  }\n\n  return '';\n}\n\nfunction extractLinkInfo(fields: IFieldDesignInfo[]): Map<string, LinkInfo> {\n  // 存储提取结果\n  const linkInfoMap: Map<string, LinkInfo> = new Map();\n\n  // 遍历所有字段\n  fields.forEach((field) => {\n    // 仅处理关联查询类型的字段\n    if (field.type === '关联查询' || field.type === '关联数据') {\n      const targetFormName =\n        extraFormNameFromFieldDesc(field.description) ||\n        extraFormNameFromFieldDesc(field.relationDesc);\n      const fieldNameMatch = field.fieldName.match(/\\d+\\. (.*)/);\n      const fName = fieldNameMatch ? fieldNameMatch[1] : field.fieldName;\n\n      const subFormFieldNames = fName.split('-');\n\n      const finalName =\n        subFormFieldNames.length > 1 ? subFormFieldNames[subFormFieldNames.length - 1] : fName;\n\n      // 组装关联信息\n      linkInfoMap.set(finalName, {\n        fieldName: finalName, // 关联字段名（如\"关联供应商\"）\n        targetFormName,\n      });\n    }\n  });\n\n  return linkInfoMap;\n}\n\nexport const ensureCleanFormName = (name: string) => {\n  return name.replace(/表单|表|管理表/g, '').trim();\n};\n\n/**\n * 解析 mcp 返回的表单设计文档，提取关联信息\n * @param designDoc\n * @returns\n */\nexport const parseFormDesignInfo = (designDoc: string): DesignInfo => {\n  return {\n    linkInfoMap: extractLinkInfo(parseRawFormText(designDoc)),\n    formName: ensureCleanFormName(extractFormName(designDoc)),\n  };\n};\n\nexport const isFieldTypeEqual = (field: Field, type: FieldType) => {\n  if (!field || !field.widget) {\n    return false;\n  }\n\n  return field.widget.type === type;\n};\n\nexport const hasSubFields = (field: Field) => {\n  if (!isFieldTypeEqual(field, 'subform')) {\n    return false;\n  }\n\n  return Array.isArray(field.widget?.items) && field.widget.items.length > 0;\n};\n\nexport const isLinkField = (field: Field) => {\n  return isFieldTypeEqual(field, 'linkdata') || isFieldTypeEqual(field, 'linkquery');\n};\n\nexport const isSubFormField = (field: Field) => {\n  if (!field || !field.widget) {\n    return false;\n  }\n\n  return field.widget.type === 'subform';\n};\n\nexport const isSNField = (field: Field) => {\n  if (!field || !field.widget) {\n    return false;\n  }\n\n  return field.widget.type === 'sn';\n};\n\nexport const isTextField = (field: Field) => {\n  if (!field || !field.widget) {\n    return false;\n  }\n\n  return field.widget.type === 'text';\n};\n\nexport const hasLinkInfo = (designInfo: DesignInfo) => {\n  if (!designInfo) {\n    return false;\n  }\n\n  return designInfo.linkInfoMap && designInfo.linkInfoMap.size > 0;\n};\n\nexport type FieldProcessor = (formInfo: FormInfo, field: Field, linkInfo: LinkInfo) => Field;\n\nexport interface FormFieldsWalkerConfig {\n  isTargetForm: (formName: string, info: FormInfo) => boolean;\n  isTargetField: (fieldName: string, linkInfo: LinkInfo) => boolean;\n  fieldProcessor: FieldProcessor;\n  onFormProcessed: (formInfo: FormInfo) => void;\n}\n\n/**\n * 表单字段遍历器，目标为 infoMap\n */\nexport const formFieldsWalker = (\n  // 上下文中全量表单信息\n  infoMap: Map<string, FormInfo>,\n  options: FormFieldsWalkerConfig\n) => {\n  const { isTargetForm, isTargetField, fieldProcessor, onFormProcessed } = options;\n\n  let isDirty;\n  for (const [name, info] of infoMap) {\n    isDirty = false;\n\n    if (!isTargetForm(ensureCleanFormName(name), info)) {\n      console.log('[formFieldsWalker]', '不是目标表单，不处理', name, info);\n      continue;\n    }\n\n    const linkMap = info.designInfo.linkInfoMap;\n\n    for (const [fieldName, linkInfo] of linkMap) {\n      if (!isTargetField(fieldName, linkInfo)) {\n        console.log('[formFieldsWalker]', '不是目标字段，不处理', name, info, fieldName);\n        continue;\n      }\n\n      const targetField = info.fieldMap.get(fieldName);\n      if (!targetField) {\n        console.log('[formFieldsWalker]', '未找到目标字段，不处理', name, info, fieldName);\n        continue;\n      }\n\n      const result = fieldProcessor(info, targetField, linkInfo);\n\n      isDirty = true;\n\n      info.fieldMap.set(fieldName, result);\n    }\n\n    if (isDirty) {\n      onFormProcessed(info);\n    }\n  }\n};\n\nexport const buildWidgetName: (prefix?: string, index?: number) => string = (\n  prefix: string = '_widget',\n  index?: number\n) => {\n  const baseName = `${prefix}_${Date.now()}`;\n\n  if (index === undefined) {\n    return baseName;\n  }\n\n  const idxLength = index.toString().length;\n  const slicedBaseName = baseName.slice(0, -idxLength);\n\n  return `${slicedBaseName}${index}`;\n};\n\n// 补全数据加载字段的信息\nexport const enhanceDataLoadField = (\n  field: Field,\n  linkInfo: LinkInfo,\n  formMap: Map<string, FormInfo>,\n  onEnhanced: (processed?: Field) => void\n) => {\n  if (!isFieldTypeEqual(field, 'dataload')) {\n    console.log('非数据加载字段，跳过处理', field);\n    return field;\n  }\n\n  // 无关联信息直接返回\n  if (!linkInfo.targetFormName) {\n    console.log('无关联信息，跳过处理', field);\n    return field;\n  }\n\n  // 无表单映射直接返回\n  if (formMap.size === 0) {\n    console.log('无表单映射，跳过处理', field);\n    return field;\n  }\n\n  // 未找到目标表单直接返回\n  const targetForm = formMap.get(linkInfo.targetFormName);\n  if (!targetForm) {\n    console.log('无表单映射，跳过处理', field);\n    field.widget.loaddataconfig = DEFAULT_DATA_LOAD_CONF;\n    return field;\n  }\n\n  const mapFields = field.widget?.loaddataconfig?.mapFields || [];\n  const dataLoadFields = field.widget?.loaddataconfig?.fields || [];\n\n  if (!mapFields || mapFields.length === 0 || mapFields.length !== dataLoadFields.length) {\n    console.log('无映射字段，跳过处理', field);\n    return field;\n  }\n\n  // 开始逐个补全\n  console.log('开始数据加载补全逻辑', field, targetForm);\n  field.widget.loaddataconfig!.forms = targetForm.formId;\n\n  for (let i = 0; i < mapFields.length; i++) {\n    const originMapField = mapFields[i];\n    const originDataLoadField = dataLoadFields[i];\n\n    const targetDepFieldName = originMapField.depend.field;\n    const targetDepFieldInfo = targetForm.fieldMap.get(targetDepFieldName);\n\n    if (!targetDepFieldInfo) {\n      console.log('未找到目标依赖字段，跳过处理该映射字段', originMapField);\n      continue;\n    }\n\n    const targetDepFieldTag = buildWidgetName('f', i);\n    originMapField.field = buildWidgetName('_widget', i);\n    originMapField.depend.field = targetDepFieldTag;\n\n    originDataLoadField.name = targetDepFieldInfo.widget.widgetName;\n    originDataLoadField.form = targetForm.formId;\n    originDataLoadField.tag = targetDepFieldTag;\n  }\n\n  console.log('数据加载字段信息已补全', field);\n  onEnhanced(field);\n  return field;\n};\n\n// 补全关联字段的信息\nexport const enhanceLinkField = (\n  field: Field,\n  linkInfo: LinkInfo,\n  formMap: Map<string, FormInfo>,\n  onEnhanced: (processed?: Field) => void\n): Field => {\n  console.log('开始关联字段处理', field, linkInfo, formMap);\n\n  // 非关联字段直接返回\n  if (!isLinkField(field)) {\n    console.log('[enhanceLinkField] 非关联字段，跳过处理', field);\n    return field;\n  }\n\n  // 无关联信息直接返回\n  if (!linkInfo.targetFormName) {\n    console.log('[enhanceLinkField] 无关联信息，跳过处理', field);\n    return field;\n  }\n\n  // 无表单映射直接返回\n  if (formMap.size === 0) {\n    console.log('[enhanceLinkField] 无表单映射，跳过处理', field);\n    return field;\n  }\n\n  // 未找到目标表单直接返回\n  const targetForm = formMap.get(ensureCleanFormName(linkInfo.targetFormName));\n  if (!targetForm) {\n    console.log('[enhanceLinkField] 未找到目标表单，跳过处理', formMap, linkInfo.targetFormName);\n    return field;\n  }\n\n  try {\n    field.widget.refAppId = targetForm.appId;\n    field.widget.linkForm = targetForm.formId;\n    // field.widget.type = \"linkdata\";\n  } catch (e) {\n    console.log('[enhanceLinkField] 尝试建立表单关联失败');\n    return field;\n  }\n\n  const targetSNFieldInTargetForm = targetForm.fields.find(isSNField);\n  if (!targetSNFieldInTargetForm) {\n    console.log('[enhanceLinkField] 未找到目标表单的主键字段，跳过处理', field);\n    return field;\n  }\n\n  if (isFieldTypeEqual(field, 'linkdata')) {\n    // 关联主键字段\n    try {\n      field.widget.linkKey = targetSNFieldInTargetForm.widget.widgetName;\n      field.widget.linkType = 'sn';\n    } catch (e) {\n      console.log('[enhanceLinkField] 尝试建立主键关联失败');\n      return field;\n    }\n  }\n\n  const targetTargetTextFieldInTargetForm = targetForm.fields.find(isTextField);\n  if (!targetTargetTextFieldInTargetForm) {\n    console.log('[enhanceLinkField] 未找到目标表单的显示字段，跳过处理', field);\n    return field;\n  }\n\n  // 关联显示字段, 默认显示标题\n  try {\n    field.widget!.linkFields = [\n      {\n        text: targetTargetTextFieldInTargetForm.label,\n        name: targetTargetTextFieldInTargetForm.widget?.widgetName,\n        type: 'text',\n      },\n      // {\n      //   name: \"label\",\n      //   text: \"标题\",\n      //   type: \"textarea\",\n      // },\n    ];\n  } catch (e) {\n    console.log('[enhanceLinkField] 尝试建立显示字段关联失败');\n    return field;\n  }\n\n  // 关联信息已补全\n  console.log('[enhanceLinkField] 关联字段信息已补全', field);\n  onEnhanced(field);\n  return field;\n};\n\nexport type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>;\n\n/**\n * 表单字段处理器工厂\n */\nexport const fieldProcessorFactory: PartialRecord<\n  FieldType,\n  (ctxInfo: Map<string, FormInfo>) => FieldProcessor\n> = {\n  linkdata: (formMap) => (formInfo: FormInfo, field: Field, linkInfo: LinkInfo) => {\n    return enhanceLinkField(field, linkInfo, formMap, (_) => {\n      formInfo.designInfo.linkInfoMap.delete(linkInfo.fieldName);\n    });\n  },\n\n  linkquery: (formMap) => (formInfo: FormInfo, field: Field, linkInfo: LinkInfo) => {\n    return enhanceLinkField(field, linkInfo, formMap, (_) => {\n      formInfo.designInfo.linkInfoMap.delete(linkInfo.fieldName);\n    });\n  },\n\n  dataload: (formMap) => (formInfo: FormInfo, field: Field, linkInfo: LinkInfo) => {\n    // todo: enhance data load Field;\n    return enhanceDataLoadField(field, linkInfo, formMap, (_) => {\n      formInfo.designInfo.linkInfoMap.delete(linkInfo.fieldName);\n    });\n  },\n};\n","interface FormParseResult {\n  formInfo: string;\n  fieldsListInfo: string;\n  designDescInfo: string;\n}\n\n/**\n * 动态解析表单设计 Markdown，支持不完整文本\n * 可处理以下不完整场景：\n * 1. 仅包含表单基本信息（无字段清单标记）\n * 2. 包含表单信息+部分字段（无设计说明）\n * 3. 字段列表未完结（正在输入中）\n * 4. 缺少结尾确认标记\n */\nexport function parseFormMarkdownDynamic(markdown: string): FormParseResult {\n  const text = markdown.trim();\n\n  // 定位关键标记位置（使用正则匹配中文冒号或英文冒号）\n  const fieldsMatch = text.match(/字段清单[：:]\\s*/);\n  const designMatch = text.match(/设计说明[：:]\\s*/);\n  const confirmMatch = text.match(/【确认搭建[：:][^】]*】\\s*$/);\n\n  const fieldsIndex = fieldsMatch ? fieldsMatch.index! : -1;\n  const designIndex = designMatch ? designMatch.index! : -1;\n  const confirmIndex = confirmMatch ? confirmMatch.index! : text.length; // 默认到结尾\n\n  let formInfo = '';\n  let fieldsListInfo = '';\n  let designDescInfo = '';\n\n  // 1. 提取 formInfo：开头到\"字段清单\"之前（如果没有字段清单则取全部）\n  if (fieldsIndex !== -1) {\n    formInfo = text.substring(0, fieldsIndex);\n  } else {\n    formInfo = text; // 不完整场景：还没有输入字段清单\n  }\n  // 清理开头可能的标记文本\n  formInfo = formInfo.replace(/^待搭建表单信息\\s*/, '').trim();\n\n  // 2. 提取 fieldsListInfo：字段清单标记后到设计说明之前（或结尾）\n  if (fieldsIndex !== -1) {\n    const start = fieldsIndex + fieldsMatch![0].length;\n    // 结束位置：如果有设计说明则从设计说明前结束，否则到确认标记前或文本结尾\n    const end = designIndex !== -1 ? designIndex : confirmMatch ? confirmIndex : text.length;\n    fieldsListInfo = text.substring(start, end).trim();\n  }\n\n  // 3. 提取 designDescInfo：设计说明标记后到确认标记前（或结尾）\n  if (designIndex !== -1) {\n    const start = designIndex + designMatch![0].length;\n    const end = confirmMatch ? confirmIndex : text.length;\n    designDescInfo = text.substring(start, end).trim();\n  }\n\n  return {\n    formInfo,\n    fieldsListInfo,\n    designDescInfo,\n  };\n}\n","import { MessageContent } from '@baishuyun/ai-design';\nimport { AnalysisIcon } from '@baishuyun/ai-design/bs-icons';\nimport { CollapsibleTxtMsg } from '@baishuyun/ai-design/collapsible-txt-msg';\nimport { cn, sanitizeText } from '@/lib/utils';\nimport { parseRawFormText } from '../../utils';\n\nimport { FieldsDesignInfoTable } from '@baishuyun/ai-design/fields-design-info-table';\nimport { parseFormMarkdownDynamic } from '@/lib/parse-design-doc';\nimport { MemoizedMarkdown } from '@baishuyun/ai-design';\n\nexport const DesignInfo = ({\n  designMarkdown,\n  id,\n  children,\n}: {\n  designMarkdown: string;\n  id: string;\n  children?: React.ReactNode;\n}) => {\n  if (!designMarkdown) {\n    return null;\n  }\n\n  const parsed = parseFormMarkdownDynamic(designMarkdown);\n  const fields = parseRawFormText(parsed.fieldsListInfo);\n\n  return (\n    <MessageContent\n      className={cn('text-[14px]', {\n        // \"w-fit wrap-break-words rounded-2 px-3 py-2 text-right text-white\":\n        //   role === \"user\",\n        'bg-transparent px-0 py-0 text-left': true,\n      })}\n      data-testid=\"message-content\"\n    >\n      <CollapsibleTxtMsg title={'表单设计'} icon={<AnalysisIcon />} defaultOpen>\n        <article className=\"prose\" style={{ fontSize: 14 }}>\n          <MemoizedMarkdown id={id + 'pre'} content={sanitizeText(parsed.formInfo)} />\n        </article>\n        {fields.length ? <FieldsDesignInfoTable fields={fields} /> : null}\n        <article className=\"prose\" style={{ fontSize: 14 }}>\n          <MemoizedMarkdown id={id + 'suff'} content={sanitizeText(parsed.designDescInfo)} />\n        </article>\n      </CollapsibleTxtMsg>\n      {children}\n    </MessageContent>\n  );\n};\n","import { create } from 'zustand';\nimport { BuilderActions, BuilderStore, FormInfo } from '../types';\nimport { FormBuilderWorkStage } from '@baishuyun/types/src/fields';\nimport { RealFormInfo } from '@baishuyun/types';\n\nexport const useBuilderStore = create<BuilderStore & BuilderActions>((set) => ({\n  formMap: new Map(),\n  workStage: 'design',\n  pickedIconValue: 33,\n  messageToForm: new Map(),\n\n  clearFormMap: () => set({ formMap: new Map(), messageToForm: new Map() }),\n\n  setWorkStage: (stage: FormBuilderWorkStage) =>\n    set((state) => {\n      const formName = state.currentWorkingFormName;\n      if (!formName) return { workStage: stage };\n      const newFormMap = new Map(state.formMap);\n      const form = newFormMap.get(formName);\n      if (form) {\n        newFormMap.set(formName, { ...form, workStage: stage });\n      }\n      return { workStage: stage, formMap: newFormMap };\n    }),\n\n  setPickedIconValue: (iconValue?: number) => set({ pickedIconValue: iconValue }),\n\n  resetPickedIconValue: () => set({ pickedIconValue: 33 }),\n\n  setCurrentWorkingFormName: (formName: string) => set({ currentWorkingFormName: formName }),\n\n  setMessageFormMapping: (messageId: string, formName: string) =>\n    set((state) => {\n      if (state.messageToForm.has(messageId)) return {};\n      const newMapping = new Map(state.messageToForm);\n      newMapping.set(messageId, formName);\n      return { messageToForm: newMapping };\n    }),\n\n  updateWithRealFormInfo: (formInfo: Partial<RealFormInfo>) =>\n    set((state) => {\n      const formName = formInfo.formName!;\n      const existingFormInfo = state.formMap.get(formName);\n      if (!existingFormInfo) {\n        console.warn(`Form with name ${formName} not found, cannot update.`);\n        return {};\n      }\n      const newFormMap = new Map(state.formMap);\n      newFormMap.set(formName, {\n        ...existingFormInfo,\n        ...formInfo,\n        // formId: formInfo.formId,\n        // appId: formInfo.appId,\n      });\n      return { formMap: newFormMap };\n    }),\n\n  updateFormInfo: (formName: string, updatedInfo: Partial<FormInfo>) =>\n    set((state) => {\n      const existingFormInfo = state.formMap.get(formName) || ({ formName } as FormInfo);\n      const newFormMap = new Map(state.formMap);\n      newFormMap.set(formName, { ...existingFormInfo, ...updatedInfo });\n      return { formMap: newFormMap };\n    }),\n}));\n","import { useRef, useState, memo, useCallback, useEffect } from 'react';\nimport { ChatMessage, RealFormInfo, UseChatHelpers } from '@baishuyun/types';\nimport { PrimaryConfirmBtn } from '@baishuyun/ai-design/primary-confirm-btn';\nimport FormInfoEditor from '@baishuyun/ai-design/form-info-editor';\nimport { FORM_ICON_OPTIONS } from '@/const/ui';\nimport { FakeBotMessage } from '@baishuyun/ai-design';\nimport { GenerateAnimation } from '@baishuyun/ai-design/generate-animation';\nimport { WarningMessage } from '@baishuyun/ai-design/warning-msg';\nimport { getIconOption } from '@/lib/utils';\nimport { parseFormDesignInfo } from '../../utils';\nimport { useBuilderStore } from '../../store/useBuilderStore';\nimport { useHostApi } from '@/sdk';\n\ntype CreateStage = 'idle' | 'creating' | 'success' | 'failed';\n\nconst DEFAULT_ICON_VALUE = 33;\n\nexport interface CreateFormConfirmProps {\n  designDoc: string;\n  sendMessage: UseChatHelpers<ChatMessage>['sendMessage'];\n}\n\nexport interface SuccessViewProps {\n  designInfo: ReturnType<typeof parseFormDesignInfo>;\n  formRef: React.MutableRefObject<RealFormInfo | null>;\n  onMounted?: () => void;\n}\n\nexport const SuccessView = memo(({ designInfo, formRef, onMounted }: SuccessViewProps) => {\n\n  const hostApi = useHostApi();\n  const formService = hostApi.service.get('bsFormService');\n\n  const handleConfirm = useCallback((name: string, icon: number) => {\n    if (!formRef.current) return;\n    formRef.current.formName = name;\n    formRef.current.formIcon = icon;\n    formService?.updateFormNameIcon(formRef.current);\n  }, [formRef]);\n\n  const handleNameChange = useCallback((name: string) => {\n    if (!formRef.current) return;\n    formRef.current.formName = name;\n  }, [formRef]);\n\n  const handleIconChange = useCallback((opt: { value: number }) => {\n    if (!formRef.current) return;\n    formRef.current.formIcon = opt.value;\n  }, [formRef]);\n\n  return (\n    <>\n      <span className=\"text-[#4d609f]\">已为你创建{designInfo.formName}</span>\n      <FormInfoEditor\n        selectedIcon={getIconOption()}\n        onConfirm={handleConfirm}\n        onNameChange={handleNameChange}\n        onIconChange={handleIconChange}\n        name={designInfo.formName}\n        iconOptions={FORM_ICON_OPTIONS}\n        className=\"w-full\"\n        onMount={onMounted}\n      />\n    </>\n  );\n});\n\nconst CreatingStatus = memo(({ failed }: { failed: boolean }) => {\n  if (failed) return <WarningMessage message=\"表单创建失败\" />;\n  return <GenerateAnimation>创建中</GenerateAnimation>;\n});\n\nexport const CreateFormConfirm = memo(({ designDoc, sendMessage }: CreateFormConfirmProps) => {\n  const [stage, setStage] = useState<CreateStage>('idle');\n  const formRef = useRef<RealFormInfo | null>(null);\n\n  const hostApi = useHostApi();\n  const formService = hostApi.service.get('bsFormService');\n  const hostCtxService = hostApi.service.get('bsHostContext');\n  const previewerService = hostApi.service.get('previewerService');\n\n  const updateFormInfo = useBuilderStore((s) => s.updateFormInfo);\n  const pickedIconValue = useBuilderStore((s) => s.pickedIconValue);\n  const setCurrentWorkingFormName = useBuilderStore((s) => s.setCurrentWorkingFormName);\n  const currentWorkingForm = useBuilderStore((s) => s.currentWorkingFormName);\n  const updateWithRealFormInfo = useBuilderStore((s) => s.updateWithRealFormInfo);\n  const setWorkStage = useBuilderStore((s) => s.setWorkStage);\n  const resetPickedIconValue = useBuilderStore((s) => s.resetPickedIconValue);\n\n  const designInfo = parseFormDesignInfo(designDoc);\n  const isConfirmed = stage !== 'idle';\n\n  useEffect(() => {\n    if (stage !== 'success') return;\n\n    const timer = setTimeout(() => {\n      sendMessage(\n        { text: '' },\n        { body: {\n           stage: 'build',\n           name: currentWorkingForm,\n          }\n        }\n      );\n    }, 500);\n\n    return () => clearTimeout(timer);\n  }, [stage, sendMessage]);\n\n  const handleConfirmBuild = useCallback(async () => {\n    const formName = designInfo.formName || 'Untitled Form';\n\n    updateFormInfo(formName, {\n      designInfo,\n      fields: [],\n      iconValue: pickedIconValue || DEFAULT_ICON_VALUE,\n      fieldMap: new Map(),\n      formName,\n      confirmedFieldsMessageId: undefined,\n    });\n\n    setCurrentWorkingFormName(formName);\n    setStage('creating');\n\n    // 清除历史数据，重置预览操作状态\n    formService?.clear();\n    previewerService?.setOperationElement(null);\n    previewerService?.setLoading(\"处理中\", false);\n    previewerService?.setNeedConfirmBeforeExit(true);\n\n\n    try {\n      const info = await formService?.createForm(\n        hostCtxService?.currentAppId || '',\n        formName,\n        pickedIconValue || DEFAULT_ICON_VALUE,\n      );\n\n      if (!info) {\n        setStage('failed');\n        return;\n      }\n\n      formRef.current = info;\n\n      updateWithRealFormInfo(info);\n      resetPickedIconValue();\n      setWorkStage('build');\n      setStage('success');\n    } catch {\n      setStage('failed');\n    }\n  }, [\n    designInfo,\n    pickedIconValue,\n    formService,\n    updateFormInfo,\n    setCurrentWorkingFormName,\n    updateWithRealFormInfo,\n    resetPickedIconValue,\n    setWorkStage,\n  ]);\n\n  return (\n    <>\n      <PrimaryConfirmBtn\n        disabled={isConfirmed}\n        prefixDesc={`确认搭建：${designInfo.formName}`}\n        onClick={handleConfirmBuild}\n      />\n\n      {!isConfirmed && (\n        <>\n          如果您希望“{designInfo.formName}”更具体地应用于某个行业（如教育、金融）、某种视图类型（如仪表盘视图、报表视图）或特定的权限管理策略，请补充说明，我可以帮您进一步细化字段设计和关联管理。\n        </>\n      )}\n\n      {isConfirmed && (\n        <FakeBotMessage>\n          {stage === 'success' ? (\n            <SuccessView\n              designInfo={designInfo}\n              formRef={formRef}\n           />\n          ) : (\n            <CreatingStatus failed={stage === 'failed'} />\n          )}\n        </FakeBotMessage>\n      )}\n    </>\n  );\n}, (prev, next) => prev.designDoc === next.designDoc);","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport { type TextUIPart } from \"ai\";\nimport { FC } from \"react\";\nimport { DesignInfo } from \"./design-info\";\nimport { MsgPartCompProps } from \"@baishuyun/types\";\nimport { CreateFormConfirm } from \"./create-form-confirm\";\n\nexport const DesignDocPart: FC<IRegisteredSlotComProps>\n = (props: IRegisteredSlotComProps) => {\n  const { payload } = props;\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload.part as TextUIPart;\n\n  \n  if (!part) {\n    return null;\n  }\n\n  const appendConfirmBtn =\n    part.text?.includes('【确认搭建');\n\n  return (\n    <DesignInfo designMarkdown={part.text} id={specialPayload.id}>\n      {appendConfirmBtn ? (\n        <CreateFormConfirm sendMessage={specialPayload.sendMessage} designDoc={part.text} />\n      ) : null}\n    </DesignInfo>\n  );\n\n}\n\nDesignDocPart.displayName = \"DesignDocPart\";","import { type TextUIPart } from 'ai';\nimport { MsgPartCompProps } from '@baishuyun/types';\nimport { IsFieldsJsonPart, IsSuggesstionPart, NeedToAppendFieldsSaveConfirm } from '@/lib/utils';\n\nexport const isDesignDoc = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const textPart = specialPayload.part as TextUIPart;\n\n  const isDesignDoc = textPart?.text?.startsWith('待搭建表单信息');\n  return isDesignDoc;\n};\n\nexport const isFieldsPart = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  const parts = Array.isArray(part) ? part : [part];\n\n  const fieldsParts = parts.filter(IsFieldsJsonPart);\n\n  return fieldsParts.length > 0;\n};\n\nexport const isSuggestions = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  return IsSuggesstionPart(part);\n};\n\nexport const isFieldsSaveConfirm = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  return NeedToAppendFieldsSaveConfirm(part);\n};\n","import { TextUIPart } from 'ai';\nimport { GetFieldJsonInfo, IsFieldsJsonPart } from '@/lib/utils';\nimport { FieldValueCheckerProps, FieldIcon } from '@baishuyun/ai-design';\nimport { useHostApi } from '@/sdk';\nimport { useCallback, useEffect } from 'react';\nimport { RealFormInfo, FieldType, ISubformField, WidgetItem } from '@baishuyun/types';\nimport { useBuilderStore } from '../store/useBuilderStore';\nimport { Field } from '../types';\nimport {\n  hasSubFields,\n  isFieldTypeEqual,\n  fieldProcessorFactory,\n} from '../utils';\nimport { useChatStatus, useService } from '@/plugin-sdk/react';\n\n/**\n * 根据消息 ID 解析所属表单名称。\n * 优先使用 messageToForm 映射（支持历史消息回滚），fallback 到 currentWorkingFormName。\n * 首次渲染时自动记录 messageId → formName 映射。\n */\nexport const useFormName = (messageId?: string): string => {\n  const messageFormName = useBuilderStore((s) =>\n    messageId ? s.messageToForm.get(messageId) : undefined\n  );\n  const currentWorkingForm = useBuilderStore((s) => s.currentWorkingFormName);\n\n  useEffect(() => {\n    if (messageId && currentWorkingForm && !messageFormName) {\n      useBuilderStore.getState().setMessageFormMapping(messageId, currentWorkingForm);\n    }\n  }, [messageId, currentWorkingForm, messageFormName]);\n\n  return messageFormName || currentWorkingForm || '';\n};\n\nexport const useFieldsPreviewer = () => {\n  const hostApi = useHostApi();\n  const formService = hostApi.service.get('bsFormService');\n  const previewerService = hostApi.service.get('previewerService');\n  const ctxService = useService('bsHostContext');\n\n  const chatStatus = useChatStatus();\n  const isLoading = chatStatus === 'streaming';\n\n  previewerService?.setLoading(isLoading ? \"字段生成中\" : \"\" ,isLoading);\n\n\n  const showPreviewer = useCallback((formInfo: RealFormInfo, actions?: {\n    onCancel?: () => void;\n    onConfirm?: () => void;\n  }) => {\n\n    previewerService?.setContentComponent(formService?.fieldsRenderer ?? null);\n    previewerService?.setTitle(formInfo.formName || '字段预览');\n    previewerService?.setVisible(true);\n    previewerService?.setConfirmInfo({\n      title: 'AI表单搭建有修改，是否保存？',\n      description: '您修改了AI表单搭建但没有保存，是否需要保存并继续？',\n      onCancel: () => {\n        previewerService?.setVisible(false);\n        actions?.onCancel?.()\n      },\n      onConfirm: async () => {\n        formService?.updateForm(formInfo);\n        previewerService?.setOperationElement(\n          <button\n            className='w-23.5 h-8.5 flex items-center justify-center rounded-[4px] bg-[#0265FF] hover:opacity-90 text-white text-[14px]'\n            onClick={() => {\n              window.open(`${window.location.origin}/dashboard/app/${formInfo.appId}/form/${formInfo.formId}/edit`, '_self');\n            }}\n          >\n            表单设计\n          </button>\n        );\n        await ctxService?.refreshAppData(formInfo.appId);\n        ctxService?.redirectTo(formInfo.appId, formInfo.formId, 'form')\n        actions?.onCancel?.()\n      },\n    })\n  }, []);\n\n  return {\n    showPreviewer,\n  }\n}\n\nexport const useBuildFieldsData = (part: TextUIPart, fieldsConfirmed: boolean) => {\n  const isFieldsJson = IsFieldsJsonPart(part);\n  const fieldsParts = Array.isArray(part) && part.length ? part : isFieldsJson ? [part] : [];\n  const hostApi = useHostApi();\n  const formService = hostApi.service.get('bsFormService');\n  const currentWorkingForm = useBuilderStore((s) => s.currentWorkingFormName);\n  const formMap = useBuilderStore((s) => s.formMap);\n\n  console.log(formMap, '当前的formMap');\n  console.log(currentWorkingForm, '当前的formName');\n  const { showPreviewer }= useFieldsPreviewer();\n\n  return fieldsParts\n    .map((p) => {\n      const field = GetFieldJsonInfo(p);\n\n      if (!field?.widget) {\n        return null;\n      }\n\n      return {\n        field,\n        disabled: fieldsConfirmed,\n        onLoaded: (rawField: Field) => {\n          const state = useBuilderStore.getState();\n          const cwfName = currentWorkingForm;\n          if (!cwfName) return;\n          const cwf = state.formMap.get(cwfName);\n          let enhancedField = rawField;\n\n          // Enhance non-subform fields (like onBeforeFieldCreate)\n          if (!isFieldTypeEqual(rawField, 'subform') && cwf) {\n            const processorCreator = fieldProcessorFactory[rawField.widget?.type as FieldType];\n            if (processorCreator) {\n              const processor = processorCreator(state.formMap);\n              const linkInfo = cwf.designInfo.linkInfoMap.get(rawField.label);\n              if (linkInfo) {\n                enhancedField = processor(cwf, rawField, linkInfo) || rawField;\n              }\n            }\n          }\n\n          // Handle subform fields recursively\n          if (hasSubFields(rawField) && cwf) {\n            rawField.widget.items = rawField.widget.items!.map((i: WidgetItem) => {\n              const subField = i as ISubformField;\n\n              const subCreator = fieldProcessorFactory[subField.widget?.type as FieldType];\n              if (subCreator) {\n                const subProcessor = subCreator(state.formMap);\n                const subLinkInfo = cwf.designInfo.linkInfoMap.get(subField.label);\n                if (subLinkInfo) {\n                  return subProcessor(cwf, subField, subLinkInfo) || subField;\n                }\n              }\n              return subField;\n            });\n          }\n\n          formService?.createField({\n            field: enhancedField,\n            checked: true,\n          });\n\n          // Update local store (like onAfterFieldCreate)\n          if (cwf) {\n            const newFieldMap = new Map(cwf.fieldMap);\n            newFieldMap.set(enhancedField.label, enhancedField);\n\n            // Flatten subform fields into map\n            if (hasSubFields(enhancedField)) {\n              enhancedField.widget.items!.forEach((i: WidgetItem) => {\n                const subField = i as ISubformField;\n                newFieldMap.set(subField.label, subField);\n              });\n            }\n\n            // Track dataload fields in linkInfoMap\n            if (isFieldTypeEqual(enhancedField, 'dataload')) {\n              cwf.designInfo.linkInfoMap.set(enhancedField.label, {\n                fieldName: enhancedField.label,\n                targetFormName: enhancedField.widget.loaddataconfig?.forms || '',\n              });\n            }\n\n            const alreadyExists = cwf.fields.some((f: Field) => f.label === enhancedField.label);\n            const newFields = alreadyExists ? cwf.fields : [...cwf.fields, enhancedField];\n\n            state.updateFormInfo(cwfName, {\n              fields: newFields,\n              fieldMap: newFieldMap,\n              designInfo: cwf.designInfo,\n            });\n          }\n\n          if (cwf) {\n            showPreviewer(cwf as RealFormInfo);\n          }\n        },\n        icon: <FieldIcon type={field.widget?.type} />,\n        onChange: (check: boolean, field: any, parentFieldName?: string, index?: number) => {\n            formService?.updateFieldChecked({\n              field,\n              checked: check,\n              parentFieldName,\n              index,\n            })\n        },\n      };\n    })\n    .filter(Boolean) as Array<FieldValueCheckerProps>;\n};\n","import { MessageContent } from '@baishuyun/ai-design';\nimport { MsgPartCompProps} from '@baishuyun/types';\nimport { useCallback, useRef } from 'react';\nimport {\n  FieldCheckerListMsg,\n  FieldCheckerListMsgRef,\n} from '@baishuyun/ai-design';\nimport { TextUIPart } from 'ai';\nimport { IRegisteredSlotComProps } from '@/sdk';\nimport { IExtraPartProps } from '../types';\nimport { useBuildFieldsData, useFormName } from '../hooks';\nimport { useBuilderStore } from '../store/useBuilderStore';\nimport {\n  formFieldsWalker,\n  hasLinkInfo,\n  ensureCleanFormName,\n  fieldProcessorFactory,\n} from '../utils';\nimport { FieldType } from '@baishuyun/types';\nimport { usePreviewerEvent, useService } from '@/plugin-sdk/react';\n\nexport const FieldsPart: React.FC<IRegisteredSlotComProps> = (props) => {\n  const payload = props.payload as MsgPartCompProps & IExtraPartProps\n\n  const { part, status, id: messageId } = payload;\n  const p = part as TextUIPart;\n\n  const formName = useFormName(messageId);\n  const formInfo = useBuilderStore((s) => (formName ? s.formMap.get(formName) : undefined));\n  const fieldsConfirmed = formInfo?.confirmedFieldsMessageId === messageId;\n  const fieldPropsArray = useBuildFieldsData(p, fieldsConfirmed);\n  const checkerRef = useRef<FieldCheckerListMsgRef>(null);\n  const previewService = useService('previewerService')!;\n\n  const handleSaveFields = useCallback(() => {\n    const state = useBuilderStore.getState();\n    const { formMap } = state;\n    const currentWorkingForm = formMap.get(formName);\n\n    if (currentWorkingForm) {\n      formFieldsWalker(formMap, {\n        isTargetForm: (targetFormName, formInfo) => {\n          if (ensureCleanFormName(targetFormName) === ensureCleanFormName(formName)) {\n            return false;\n          }\n          if (!hasLinkInfo(formInfo.designInfo)) {\n            return false;\n          }\n          return true;\n        },\n        isTargetField: (_, linkInfo) => {\n          return ensureCleanFormName(linkInfo.targetFormName) === ensureCleanFormName(formName);\n        },\n        fieldProcessor: (formInfo, field, linkInfo) => {\n          if (!field) return field;\n          const fieldType = field.widget?.type as FieldType;\n          if (!fieldProcessorFactory[fieldType]) return field;\n          const processorCreator = fieldProcessorFactory[fieldType];\n          const processor = processorCreator(formMap);\n          return processor(formInfo, field, linkInfo);\n        },\n        onFormProcessed: (processedFormInfo) => {\n          state.updateFormInfo(processedFormInfo.formName || '', processedFormInfo);\n        },\n      });\n    }\n\n    state.updateFormInfo(formName, { confirmedFieldsMessageId: messageId });\n\n    previewService?.setNeedConfirmBeforeExit(false); // since confirmed alrealdy.\n\n  }, [formName, messageId]);\n\n  usePreviewerEvent('confirm', handleSaveFields);\n\n  const fieldsPrefix = (\n    <div>\n      <b style={{ display: 'inline-block' }}>{formName}</b>\n      {` 已生成${fieldPropsArray.length}个字段`}\n    </div>\n  );\n\n  const fieldsSuffix =\n    status === 'ready' && !fieldsConfirmed\n      ? '请选择需要的字段添加到表单。您可以补充描述后重新生成，表单中已添加字段在下次生成时保留。'\n      : null;\n\n  return (\n    <MessageContent className=\"gap-2.5 py-0\" compact>\n      {fieldsPrefix}\n      <FieldCheckerListMsg\n        ref={checkerRef}\n        fields={fieldPropsArray}\n        streaming={status === 'streaming'}\n        confirmed={fieldsConfirmed}\n      />\n      {fieldsSuffix}\n    </MessageContent>\n  );\n};\n\nFieldsPart.displayName = 'FieldsPart';\n","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport { MsgPartCompProps } from \"@baishuyun/types\";\nimport { FC, useCallback } from \"react\";\nimport { BaseButton } from '@baishuyun/ai-design/base-button';\nimport { FontIcon } from '@baishuyun/ai-design/font-icon';\nimport { SuggestionCardProps } from '@baishuyun/types';\nimport { TextUIPart } from \"ai\";\nimport { FakeBotMessage } from \"@baishuyun/ai-design/fake-bot-msg\";\nimport { getIconValue } from '@/lib/utils';\nimport { useBuilderStore } from '../../store/useBuilderStore';\nimport { useFormName } from '../../hooks';\n\nconst extractFontIconCodeFrom = (desc: string) => {\n  const match = desc.match(/&#x[a-fA-F0-9]+;/);\n  return match ? match[0] : '&#xe817;';\n};\n\nexport const FollowUp: FC<SuggestionCardProps> = (props) => {\n  const code = extractFontIconCodeFrom(props.description);\n  const iconJsx = code ? <FontIcon code={code} className=\"text-[16px] text-[#999]\" /> : null;\n  const descriptionWithoutIcon = code\n    ? props.description.replace(code, '').trim()\n    : props.description;\n\n  const titleWithoutIcon = code ? props.title.replace(code, '').trim() : props.title;\n  return (\n    <BaseButton\n      icon={iconJsx}\n      className=\"self-start w-full px-2.5\"\n      hoverTextCls=\"text-[#121111]\"\n      onClick={() => {\n        props.onSelect?.(titleWithoutIcon, code || '');\n      }}\n    >\n      {descriptionWithoutIcon}\n    </BaseButton>\n  );\n}\n\nexport const SuggestionPrefixPart: React.FC<IRegisteredSlotComProps> = (props) => {\n  const payload = props.payload as MsgPartCompProps | undefined;\n  const formName = useFormName(payload?.id);\n  const isFieldsConfirmed = useBuilderStore(\n    (s) => !!s.formMap.get(formName)?.confirmedFieldsMessageId\n  );\n\n  if (!isFieldsConfirmed) {\n    return null;\n  }\n\n  return <FakeBotMessage>试试以下建议</FakeBotMessage>;\n};\n\nexport const FollowUpCom: FC<IRegisteredSlotComProps> = (props) => {\n  const payload = props.payload as MsgPartCompProps;\n  const { part: p, sendMessage, id: messageId } = payload;\n  const part = p as TextUIPart;\n  const formName = useFormName(messageId);\n\n  const setPickedIconValue = useBuilderStore((s) => s.setPickedIconValue);\n  const setWorkStage = useBuilderStore((s) => s.setWorkStage);\n  const isFieldsConfirmed = useBuilderStore(\n    (s) => !!s.formMap.get(formName)?.confirmedFieldsMessageId\n  );\n\n  const handleSelect = useCallback((title: string, iconCode?: string) => {\n    const iconValue = getIconValue(iconCode);\n    if (iconValue !== undefined) {\n      setPickedIconValue(iconValue);\n    }\n    setWorkStage('design');\n    sendMessage(\n      { text: title },\n      { body: { stage: 'design' } }\n    );\n  }, [sendMessage, setPickedIconValue, setWorkStage]);\n\n  if (!isFieldsConfirmed) {\n    return null;\n  }\n\n  return (\n    <>\n      <FollowUp\n        title={part.text}\n        description={part.text}\n        onSelect={handleSelect}\n        headless\n      />\n    </>\n  );\n\n}\n\nFollowUpCom.displayName = 'FollowUpCom';\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { DesignDocPart } from './components/design-doc';\nimport { isDesignDoc, isFieldsPart, isFieldsSaveConfirm, isSuggestions } from './matchers';\nimport { BuilderActions, BuilderStore } from './types';\nimport { useBuilderStore } from './store/useBuilderStore';\nimport { FieldsPart } from './components/fields-part';\nimport { MsgPartCompProps, ValueOf } from '@baishuyun/types/src/chat';\nimport { IsFieldsJsonPart, mergeConsecutiveTargets } from '@/lib/utils';\nimport { FollowUpCom, SuggestionPrefixPart } from './components/follow-up';\n\ntype part = ValueOf<Pick<MsgPartCompProps, 'part'>>;\n\n/**\n * 负责 AI 搭建特殊消息片段 UI 渲染的插件\n */\nexport class BuilderPartsPlugin extends BaseAiOfficePlugin<BuilderStore & BuilderActions> {\n  id = 'form-builder';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    // 1. 表单设计相关\n    super.registerSlot('msg-part', DesignDocPart, isDesignDoc);\n\n    // 2. 表单字段构建相关\n    super.registerSlot('msg-part', FieldsPart, isFieldsPart);\n\n    // 3. 建议\n    super.registerSlot('msg-part', SuggestionPrefixPart, isFieldsSaveConfirm);\n    super.registerSlot('msg-part', FollowUpCom, isSuggestions);\n\n    // 数据转换中间件注册\n    api.ui.registerMiddleware('transform-preview-message-parts', this.mergeFieldsParts, this.id);\n\n    // 发送消息时注入 stage + name 上下文\n    api.ui.registerMiddleware(\n      'transform-send-message-body',\n      (body: Record<string, unknown>) => {\n        const state = useBuilderStore.getState();\n        const form = state.currentWorkingFormName\n          ? state.formMap.get(state.currentWorkingFormName)\n          : undefined;\n\n        return {\n          ...(body || {}),\n          stage: form?.workStage || state.workStage,\n          name: state.currentWorkingFormName || (body as any)?.text || '',\n        };\n      },\n      this.id\n    );\n  }\n\n  mergeFieldsParts = (parts: Array<part>): part[] => {\n    return mergeConsecutiveTargets<part>(parts, IsFieldsJsonPart) as part[];\n  };\n\n  weight?: number | undefined;\n\n  useStore = useBuilderStore;\n}\n\nexport default new BuilderPartsPlugin('form-builder');\n","import { useHostApi } from '@/sdk';\nimport { TabRadioGroup } from '@baishuyun/ai-design/tab-radio-group';\nimport { FormFillingMode } from '@baishuyun/types';\n\nexport const ModeSelect = () => {\n  const api = useHostApi();\n  const formFillingService = api.service.get('formFillingService');\n\n  return (\n    <TabRadioGroup\n      onValueChange={(value) => {\n        formFillingService?.setFillMode(value as FormFillingMode);\n      }}\n      options={[\n        {\n          value: 'AI',\n          label: '✨智能填写',\n          tooltips: '✨AI根据输入内容智能推测或联网搜索相关信息，为你补全尽可能多的字段',\n        },\n        {\n          value: 'normal',\n          label: '普通填写',\n          tooltips: 'AI只填写输入内容中明确包含的字段',\n        },\n      ]}\n      defaultValue={formFillingService?.getFillMode() || 'AI'}\n    />\n  );\n};\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { ModeSelect } from './components/mode-select';\n\nexport class FormFillingInputEnhancer extends BaseAiOfficePlugin {\n  id = 'form-filling-input-enhancer';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    this.registerSlot('msg-input-top', ModeSelect);\n\n    api.ui.registerMiddleware(\n      'transform-send-message-body',\n      this.transformSendMessageBody,\n      this.id\n    );\n  }\n\n  private async getFormStructure() {\n    const formService = this.api.service.get('bsFormService');\n    const ctxService = this.api.service.get('bsHostContext');\n\n    if (!formService || !ctxService || typeof formService.getFormStructure !== 'function') {\n      console.info('FormFillingInputEnhancer: Required services are not ready');\n      return [];\n    }\n\n    const currentContext = await ctxService?.currentContext;\n    if (!currentContext || !currentContext.params?.appId || !currentContext.params?.formId) {\n      console.info('FormFillingInputEnhancer: No current context available');\n      return [];\n    }\n\n    try {\n      const formStructure = await formService.getFormStructure({\n        appId: currentContext.params.appId,\n        entryId: currentContext.params.formId,\n      });\n      return formStructure;\n    } catch (error) {\n      console.info('FormFillingInputEnhancer: Failed to get form structure', error);\n      console.info(\n        'FormFillingInputEnhancer: Critical service',\n        JSON.parse(JSON.stringify(formService))\n      );\n      return [];\n    }\n  }\n\n  private getMode = () => {\n    const formFillingService = this.api.service.get('formFillingService');\n    return formFillingService?.getFillMode() || 'AI';\n  };\n\n  transformSendMessageBody = async (\n    body: Record<string, unknown>\n  ): Promise<Record<string, unknown>> => {\n    return {\n      ...(body || {}),\n      stage: 'fill',\n      formStructure: await this.getFormStructure(),\n      mode: this.getMode(),\n    };\n  };\n\n  weight?: number | undefined;\n\n  useStore?: (() => {}) | undefined;\n}\n\nexport default new FormFillingInputEnhancer('form-filling-input-enhancer');\n","import { IRegisteredSlotComProps } from \"@/sdk\";\nimport { FC } from \"react\";\n\nexport const FillingOpeningLines: FC<IRegisteredSlotComProps> = (_) => {\n  return (\n    <div>\n      我可以为您解析文本内容，智能填写到表单字段，请方输入内容开始创建\n    </div>\n  );\n}","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { FillingOpeningLines } from './opening-lines';\n\nexport class FormFillingOpeningLinesPlugin extends BaseAiOfficePlugin {\n  id = 'form-filling-opening-lines';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    // 开场白\n    super.registerSlot('opening-lines', FillingOpeningLines);\n  }\n\n  weight?: number | undefined;\n\n  useStore?: (() => {}) | undefined;\n}\n\nexport default new FormFillingOpeningLinesPlugin('form-filling-opening-lines');\n","import { create } from 'zustand';\nimport { IFormFillingStore } from '../types';\nimport { IFormFillingService } from '@baishuyun/types';\n\nexport const useFormFillingStore = create<IFormFillingStore & IFormFillingService>((set, get) => ({\n  fieldMap: new Map(),\n\n  valueMap: new Map(),\n\n  subFieldsNameMap: new Map(),\n\n  conversationId: '',\n\n  fillMode: 'AI',\n\n  counterMap: new Map(),\n\n  setFillMode: (mode) => set({ fillMode: mode }),\n\n  getFillMode: () => {\n    return get().fillMode;\n  },\n\n  setFilledValue: (fieldName: string, value: unknown) => {\n    const { valueMap } = get();\n    valueMap.set(fieldName, value);\n    set({ valueMap });\n  },\n\n  setField: (fieldName, field) => {\n    const { fieldMap } = get();\n    fieldMap.set(fieldName, field);\n    set({ fieldMap });\n  },\n\n  setConversationId: (conversationId) => set({ conversationId }),\n}));\n","import { FormFillingMode, IField, IFormFillingService } from '@baishuyun/types';\nimport { useFormFillingStore } from '../store/useFormFillingStore';\n\nexport class FormFillingService implements IFormFillingService {\n  setFillMode = (mode: FormFillingMode) => {\n    useFormFillingStore.getState().setFillMode(mode);\n  };\n\n  getFillMode = (): FormFillingMode => {\n    return useFormFillingStore.getState().fillMode;\n  };\n\n  setConversationId: (conversationId: string) => void = (conversationId) => {\n    useFormFillingStore.getState().setConversationId(conversationId);\n  };\n\n  setField: (fieldName: string, field: IField) => void = (fieldName, field) => {\n    useFormFillingStore.getState().setField(fieldName, field);\n  };\n}\n","import { TextUIPart } from 'ai';\nimport { FieldValueCheckerProps } from '@baishuyun/ai-design';\nimport {\n  extractTextPartMeta,\n  mergeConsecutiveTargets,\n  valueNormalizer,\n} from '@baishuyun/ai-feat-utils';\nimport { createGetFieldJsonInfo, createFieldPartsExtractor } from '@baishuyun/ai-feat-utils';\nimport { IFieldsData } from '../types';\nimport { useFormFillingStore } from '../store/useFormFillingStore';\nimport { IBsUIAutomationService } from '@baishuyun/types';\n\nexport const IsFillingFieldsJsonPart = (part: any): boolean => {\n  const payload = extractTextPartMeta(part);\n  return payload?.type === 'filling-fields-json';\n};\n\nexport const extractFillingFieldParts = createFieldPartsExtractor(IsFillingFieldsJsonPart);\n\ninterface FieldConfig {\n  field: FieldValueCheckerProps['field'];\n  onLoaded: (f: any) => void;\n  onChange: FieldValueCheckerProps['onChange'];\n}\n\nexport const GetFieldJsonInfo = createGetFieldJsonInfo('filling-fields-json');\n\nconst createFieldConfig = (\n  part: TextUIPart,\n  automationService: IBsUIAutomationService\n): FieldConfig | null => {\n  const field = GetFieldJsonInfo(part);\n\n  if (!field) return null;\n\n  const normalizedValue = valueNormalizer(field.value as string | string[]);\n\n  const setFilledValue = useFormFillingStore.getState().setFilledValue;\n\n  return {\n    field: {\n      label: field.label,\n      widget: {\n        widgetName: field.fieldName,\n        type: field.fieldType,\n        value: field.value,\n      },\n    },\n    onLoaded: (instance) => {\n      instance.widget.value = normalizedValue;\n      setFilledValue(instance.widget?.widgetName, normalizedValue);\n\n      automationService.fillWidget({\n        field: instance,\n        checked: true,\n      });\n    },\n    onChange: (checked, instance, parentFieldName, rowIndex) => {\n      if (checked) {\n        setFilledValue(instance.widget?.widgetName, normalizedValue);\n      }\n\n      const detail = {\n        field: instance,\n        checked,\n        parentFieldName,\n        rowIndex,\n      };\n\n      automationService.fillWidget(detail);\n    },\n  };\n};\n\nexport const extractFieldsData = (\n  part: TextUIPart,\n  automationService: IBsUIAutomationService\n): IFieldsData => {\n  let currentSubformFieldName = '';\n  const rawFieldParts =\n    // 处理子表单\n    mergeConsecutiveTargets(extractFillingFieldParts(part), (p) => {\n      const isSubformField = p?.providerMetadata?.raw?.data?.field?.fieldType === 'subform';\n      const subformFieldName = p?.providerMetadata?.raw?.data?.field?.fieldName;\n      return (\n        isSubformField &&\n        (currentSubformFieldName === '' || currentSubformFieldName === subformFieldName)\n      );\n    }).map((p) => {\n      if (!Array.isArray(p)) {\n        return p;\n      }\n\n      if (!p.length) {\n        return null;\n      }\n\n      const lastIdx = p.length - 1;\n      return p[lastIdx];\n    });\n\n  const mode = useFormFillingStore.getState().fillMode;\n  const isSingleMode = mode !== 'batch';\n\n  const fieldConfigs = !isSingleMode\n    ? []\n    : rawFieldParts\n        .map((p) => createFieldConfig(p, automationService))\n        .filter((config): config is FieldConfig => config !== null);\n\n  return {\n    fieldsParts: rawFieldParts,\n    fieldPropsArray: fieldConfigs,\n    filledFields: fieldConfigs.filter(Boolean),\n  };\n};\n","import { MsgPartCompProps } from '@baishuyun/types';\nimport { TextUIPart } from 'ai';\nimport { extractFillingFieldParts } from '../utils';\n\nexport const isFillingFieldsMsgPart = (payload: unknown): boolean => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  const fieldsParts = extractFillingFieldParts(part);\n\n  const isFillingFields = fieldsParts.length > 0;\n\n  return isFillingFields;\n};\n","import { MsgPartCompProps } from \"@baishuyun/types\";\nimport { MessageContent } from \"@baishuyun/ai-design\";\nimport { FieldValueCheckerListMsg } from \"@baishuyun/ai-design\";\nimport { useEffect, useState } from \"react\";\nimport { extractFieldsData  } from \"../utils\";\nimport { IExtraPartProps } from \"@/plugins/form-builder/types\";\nimport { TextUIPart } from \"ai\";\nimport { IRegisteredSlotComProps, useService, useUIAutoMationEvent } from \"@/sdk\";\n// import { useFormPreviewer } from \"../hooks/usePreviewer\";\n\nexport const SingleFillPart: React.FC<IRegisteredSlotComProps> = (props) => {\n\n  const payload = props.payload as MsgPartCompProps & IExtraPartProps\n  const [modalLoading, setModalLoading] = useState(true);\n  const automationService = useService('bsUIAutomation')!;\n\n  const { part, status } = payload;\n  const p = part as TextUIPart;\n  const  { filledFields } = extractFieldsData(p, automationService)\n  const [confirmed, setConfirmed] = useState(false);\n\n  const prefixTips = status === 'ready' ? `已为你填写${filledFields.length}个字段` : null;\n  const suffixTips = status === 'ready'\n      ? '请选择需要的字段添加到表单。你可以补充描述后重新生成，表单中已添加字段在下次生成时保留。'\n      : null;\n\n  // const confirmedText = confirmed ? '已确认' : '确认';\n\n  useEffect(() => {\n      automationService.openFormModal().finally(() => {\n        setModalLoading(false);\n      });\n  }, [])\n\n  useUIAutoMationEvent('formSubmit', () => {\n    setConfirmed(true);\n  })\n\n  if (modalLoading) {\n    return null;\n  }\n\n  return (\n    <MessageContent className=\"py-0\" compact>\n      {prefixTips}\n      <FieldValueCheckerListMsg\n        props={filledFields}\n        readonly={confirmed}\n        streaming={status === 'streaming'}\n      />\n      {suffixTips}\n    </MessageContent>\n  )\n}","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { useFormFillingStore } from './store/useFormFillingStore';\nimport { IFormFillingStore } from './types';\nimport { FormFillingService } from './service/form-filling-service';\nimport type { IFormFillingService, MsgPartCompProps, ValueOf } from '@baishuyun/types';\nimport { isFillingFieldsMsgPart } from './matchers';\nimport { IsFillingFieldsJsonPart } from './utils';\nimport { SingleFillPart } from './components/single-fill-part';\nimport { mergeConsecutiveTargets } from '@/lib/utils';\n\ntype part = ValueOf<Pick<MsgPartCompProps, 'part'>>;\n\nexport class FormFillingPlugin extends BaseAiOfficePlugin<IFormFillingService & IFormFillingStore> {\n  id = 'form-filling';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    super.registerSlot('msg-part', SingleFillPart, isFillingFieldsMsgPart);\n\n    // 在这里注册表单填充相关的组件和中间件\n    api.service.register('formFillingService', new FormFillingService());\n\n    api.ui.registerMiddleware('transform-preview-message-parts', this.mergeFieldsParts, this.id);\n  }\n\n  weight?: number | undefined;\n\n  useStore = useFormFillingStore;\n\n  mergeFieldsParts = (parts: Array<part>): part[] => {\n    return mergeConsecutiveTargets<part>(parts, IsFillingFieldsJsonPart) as part[];\n  };\n}\n\nexport default new FormFillingPlugin('form-filling');\n","import { create } from 'zustand';\nimport { IPreviewerActions, IPreviewerPluginStore } from '@baishuyun/types';\n\nconst defaultState: IPreviewerPluginStore = {\n  visible: false,\n  loading: false,\n  loadingText: '处理中...',\n  showActions: false,\n  contentComponent: null,\n  title: '',\n  tooltip: undefined,\n  headless: false,\n  needConfirm: true,\n};\n\nexport const usePreviewStore = create<IPreviewerPluginStore & IPreviewerActions>((set) => ({\n  ...defaultState,\n\n  setNeedConfirmBeforeExit: (needConfirm) => set({ needConfirm }),\n  setHeadless: (headless) => set({ headless }),\n  setTitle: (title, tooltip) => set({ title, tooltip }),\n  setVisible: (visible) => set({ visible }),\n  setLoading: (loadingText, loading) => set({ loading, loadingText: loadingText || '正在加载...' }),\n  setShowActions: (show) => set({ showActions: show }),\n  setContentComponent: (component) => set({ contentComponent: component }),\n  setConfirmInfo: (confirmInfo) => set({ confirmInfo }),\n  setOperationElement: (operationElement) => set({ operationElement }),\n  reset: () => set(defaultState),\n}));\n","import { EventBus, IPreviewerService, PreviewerActionEvent } from '@baishuyun/types';\nimport { usePreviewStore } from '../store/usePreviewStore';\nimport { createEventBus } from '@/sdk';\n\nexport class PreviewerService implements IPreviewerService {\n  private previewState;\n\n  evtBus: EventBus<PreviewerActionEvent> = createEventBus();\n\n  constructor() {\n    this.previewState = usePreviewStore.getState();\n  }\n\n  setHeadless: (headless: boolean) => void = (headless) => {\n    this.previewState.setHeadless(headless);\n  };\n\n  setTitle = (title: string, tooltip?: string) => {\n    this.previewState.setTitle(title, tooltip);\n  };\n\n  setNeedConfirmBeforeExit: (needConfirm: boolean) => void = (needConfirm) => {\n    this.previewState.setNeedConfirmBeforeExit(needConfirm);\n  };\n\n  reset = () => {\n    this.previewState.reset();\n  };\n\n  setVisible = (visible: boolean) => {\n    this.previewState.setVisible(visible);\n  };\n\n  setLoading = (loadingText: string, loading: boolean) => {\n    this.previewState.setLoading(loadingText, loading);\n  };\n\n  setShowActions = (show: boolean) => {\n    this.previewState.setShowActions(show);\n  };\n\n  setContentComponent = (component: React.ComponentType<any> | null) => {\n    this.previewState.setContentComponent(component);\n  };\n\n  setConfirmInfo = (info: { title: string; description: string } | undefined) => {\n    this.previewState.setConfirmInfo(info);\n  };\n\n  setOperationElement = (element: React.ReactNode) => {\n    this.previewState.setOperationElement(element);\n  };\n}\n","import { IRegisteredSlotComProps, useHostApi, PluginScopeProvider } from \"@/sdk\";\nimport { FC, useEffect, useRef, useState } from \"react\";\nimport { usePreviewStore } from \"../store/usePreviewStore\";\nimport { AbsFullscreenGradientBg, FieldsPreviewer } from \"@baishuyun/ai-design\";\nimport { createPortal } from \"react-dom\";\nimport { ErrorBoundary } from \"@/app/components/chat/messages/error-boundary\";\nimport { injectHostStylesIntoShadow } from \"@baishuyun/ai-feat-utils\";\n\nexport const ShadowfiedContent: FC<{ component: React.ComponentType<any>; style?: string }> = ({ component: Component, style }) => {\n  const hostRef = useRef<HTMLDivElement>(null);\n  const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    const host = hostRef.current;\n    if (!host) return;\n\n    const shadowRoot = host.shadowRoot || host.attachShadow({ mode: 'open' });\n\n    injectHostStylesIntoShadow(shadowRoot, host);\n\n    if (style) {\n      const styleEl = document.createElement('style');\n      styleEl.textContent = style;\n      shadowRoot.appendChild(styleEl);\n    }\n\n    const mountPoint = document.createElement('div');\n    mountPoint.style.display = 'contents';\n    shadowRoot.appendChild(mountPoint);\n    setPortalContainer(mountPoint);\n\n    return () => {\n      setPortalContainer(null);\n      shadowRoot.removeChild(mountPoint);\n    };\n  }, [style]);\n\n  return (\n    <div ref={hostRef} style={{ display: 'contents' }}>\n      {portalContainer && createPortal(\n        <ErrorBoundary>\n          <Component />\n        </ErrorBoundary>\n        , portalContainer)}\n    </div>\n  );\n}\n\nexport const Previewer: FC<IRegisteredSlotComProps> = (_) => {\n  const api = useHostApi();\n  const title = usePreviewStore((state) => state.title);\n  const visible = usePreviewStore((state) => state.visible);\n  const streaming = usePreviewStore((state) => state.loading);\n  const streamingText = usePreviewStore((state) => state.loadingText);\n  const confirmInfo = usePreviewStore((state) => state.confirmInfo);\n  const contentComponent = usePreviewStore((state) => state.contentComponent);\n  const operations = usePreviewStore((state) => state.operationElement);\n  const headless = usePreviewStore((state) => state.headless);\n  const needConfirm = usePreviewStore((s) => s.needConfirm);\n\n  const previewService = api.service.get('previewerService');\n\n  const Content = contentComponent as React.ComponentType;\n\n  const isShadowContent = contentComponent && typeof contentComponent !== 'function' && 'component' in contentComponent && contentComponent.shadow;\n\n  const ContentCompJsx = isShadowContent ? <ShadowfiedContent component={contentComponent.component} style={contentComponent.style} /> : <Content />;\n\n  if (!visible || !contentComponent) {\n    return null;\n  }\n\n\n  if (headless) {\n    return (\n      <AbsFullscreenGradientBg disableGradient zIndex={1}>\n        <PluginScopeProvider value={api}>\n          {ContentCompJsx}\n        </PluginScopeProvider>\n      </AbsFullscreenGradientBg>\n    );\n  }\n\n  return (\n    <FieldsPreviewer\n      title={title}\n      streaming={streaming}\n      streamingText={streamingText}\n      confirmContent={confirmInfo?.description}\n      confirmTitle={confirmInfo?.title}\n      disableConfirm={!needConfirm}\n      onCancel={() => {\n        confirmInfo?.onCancel?.();\n        previewService?.evtBus.emit('cancel', undefined);\n      }}\n      onSave={() => {\n        confirmInfo?.onConfirm?.();\n        previewService?.evtBus.emit('confirm', undefined);\n      }}\n      disableOperation={streaming}\n      disableShadowContainer\n      customOperationElement={operations}\n    >\n      <PluginScopeProvider value={api}>\n        {ContentCompJsx}\n      </PluginScopeProvider>\n    </FieldsPreviewer>\n  );\n}","import { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { IAiOfficePluginApi } from '@/sdk';\nimport { PreviewerService } from './service';\nimport { IPreviewerActions, IPreviewerPluginStore } from '@baishuyun/types';\nimport { usePreviewStore } from './store/usePreviewStore';\nimport { Previewer } from './components/previewer';\n\nexport class PreviewerPlugin extends BaseAiOfficePlugin<IPreviewerPluginStore & IPreviewerActions> {\n  id = 'previewer';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    api.service.register('previewerService', new PreviewerService());\n\n    this.registerSlot('leftColumnContent', Previewer);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => IPreviewerPluginStore & IPreviewerActions = usePreviewStore;\n}\n\nexport default new PreviewerPlugin('previewer');\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\n\nexport class ReportQueryInputEnhancer extends BaseAiOfficePlugin {\n  id = 'report-query-input-enhancer';\n\n  override onInstall(api: IAiOfficePluginApi): void | Promise<void> {\n    super.onInstall(api);\n\n    api.ui.registerMiddleware(\n      'transform-send-message-body',\n      this.transformSendMessageBody,\n      this.id\n    );\n  }\n\n  transformSendMessageBody = async (\n    body: Record<string, unknown>\n  ): Promise<Record<string, unknown>> => {\n    const ctxService = this.api.service.get('bsHostContext');\n\n    const currentContext = await ctxService?.currentContext;\n    const appIdParam = currentContext?.params?.appId\n      ? {\n          appId: currentContext.params.appId,\n        }\n      : {};\n\n    return {\n      ...(body || {}),\n      ...appIdParam,\n    };\n  };\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new ReportQueryInputEnhancer('report-query-input-enhancer');\n","import { QuerySourceType } from '@baishuyun/types';\nimport { ICreatedSourceConfig } from './types';\nimport { AggregateTableIcon, DataReportIcon, DataViewIcon } from '@baishuyun/ai-design/bs-icons';\n\nexport const PLUGIN_NAME = 'ReportQueryPlugin';\n\nexport const CreatedSourceConfigMap: Record<QuerySourceType, ICreatedSourceConfig> = {\n  etl: {\n    label: '数据视图',\n    color: '#0265ff',\n    iconComponent: DataViewIcon,\n  },\n  aggregate: {\n    label: '聚合表',\n    color: '#0265ff',\n    iconComponent: AggregateTableIcon,\n  },\n  report: {\n    label: '数据报表',\n    color: '#4ACC8C',\n    iconComponent: DataReportIcon,\n  },\n};\n","import { FakeBotMessage } from '@baishuyun/ai-design';\nimport { CollapsibleTxtMsg } from '@baishuyun/ai-design/collapsible-txt-msg';\nimport { QuerySourceType } from '@baishuyun/types';\nimport { CreatedSourceConfigMap } from '../../const'\nimport { useEffect } from 'react';\n// import { useFakeGlobalLoadingMessage } from '@/hooks/use-frame-mode';\n\nexport const HighlightMsg = ({ children }: { children: React.ReactNode }) => {\n  return <div className=\"text-[#4D609F]\">{children}</div>;\n};\n\nexport const CreatedSourceMsg = ({ type, title, /* done */ }: { type: QuerySourceType; title: string; done?: boolean }) => {\n  const config = CreatedSourceConfigMap[type];\n\n  // const loading = useFakeGlobalLoadingMessage();\n\n  useEffect(() => {\n    // if (done) {\n\n    // }\n    // loading?.clearGlobalFakeLoadingMessage();\n\n  }, [])\n\n  if (!config) {\n    return null;\n  }\n\n  const icon = <config.iconComponent />;\n  return (\n    <FakeBotMessage headless className=\"w-full\">\n      <HighlightMsg>已为你创建{config.label}</HighlightMsg>\n      <CollapsibleTxtMsg\n        icon={<span className={`text-[${config.color}]`}>{icon}</span>}\n        title={title}\n        disableExpand\n      />\n    </FakeBotMessage>\n  );\n};\n","import { DefaultFormIcon } from '@baishuyun/ai-design/bs-icons';\nimport { CardField } from '@baishuyun/ai-design/card-field';\nimport { IQueryResultMetric } from '@baishuyun/types/src/chat/plugin/query';\nimport { FormulaTag } from '@baishuyun/ai-design/formula-tag';\nimport { cn } from '@/lib/utils';\nimport type { ReactNode } from 'react';\nimport { FieldIcon } from '@baishuyun/ai-design';\n\nexport const DataSourceField = ({ name, children }: { name?: string; children?: string }) => {\n  return (\n    <CardField label=\"数据源\">\n      <div className=\"flex gap-1.5 items-center\">\n        <DefaultFormIcon />\n        {name || children || 'N/A'}\n      </div>\n    </CardField>\n  );\n};\n\nexport const DimensionField = ({ children, isCol }: { children?: string; isCol?: boolean }) => {\n  return <CardField label={`维度（${isCol ? '列' : '行'}）`}>{children}</CardField>;\n};\n\nexport const ConditionField = ({ children }: { children?: ReactNode }) => {\n  return <CardField label=\"筛选条件\">{children}</CardField>;\n};\n\nexport const MetricField = ({\n  metric,\n  className,\n}: {\n  metric: IQueryResultMetric;\n  className?: string;\n}) => {\n  return (\n    <div className={cn('flex items-center justify-between', className)}>\n      <div className=\"flex min-w-0 items-center gap-1.5\">\n        <span className=\"shrink-0 text-[#6f829e]\">\n          <FieldIcon type={metric.type} />\n        </span>\n        <span className=\"truncate text-sm leading-normal text-[#030303]\">{metric.title}</span>\n      </div>\n      {metric.op && <FormulaTag type={metric.op} />}\n    </div>\n  );\n};\n","import type {\n  FilterMethod,\n  FilterTypeRelationMap,\n  IFilterField,\n  IQueryFilter,\n  MethodLabelMap,\n} from '@baishuyun/types';\nimport type { ReactNode } from 'react';\n\n/**\n * 方法到中文描述的默认映射\n */\nconst DEFAULT_METHOD_LABELS: MethodLabelMap = {\n  eq: '等于',\n  ne: '不等于',\n  in: '等于任意一个',\n  nin: '不等于任意一个',\n  like: '包含',\n  unlike: '不包含',\n  empty: '为空',\n  not_empty: '不为空',\n  gt: '大于',\n  lt: '小于',\n  gte: '大于等于',\n  lte: '小于等于',\n  range: '范围',\n  formula: '动态',\n  all: '同时包含',\n};\n\n/**\n * 类型到关系映射的定义\n * 某些类型对同一方法有不同的中文描述\n */\nconst TYPE_METHOD_OVERRIDES: FilterTypeRelationMap = {\n  user: {\n    in: '等于任意一个',\n    ne: '不等于',\n    eq: '等于',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  flowstate: {\n    ne: '不等于',\n    eq: '等于',\n    empty: '为空',\n  },\n  _id: {\n    eq: '等于',\n    ne: '不等于',\n    in: '等于任意一个',\n    nin: '不等于任意一个',\n    like: '包含',\n    unlike: '不包含',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  updateTime: {\n    eq: '等于',\n    ne: '不等于',\n    gte: '大于等于',\n    lte: '小于等于',\n    formula: '动态',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  createTime: {\n    eq: '等于',\n    ne: '不等于',\n    gte: '大于等于',\n    lte: '小于等于',\n    formula: '动态',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  creator: {\n    in: '等于任意一个',\n    ne: '不等于',\n    eq: '等于',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  assist_outtime: {\n    gt: '大于',\n    lt: '小于',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  assist_protime: {\n    gt: '大于',\n    lt: '小于',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  assist_prostatus: {\n    ne: '不等于',\n    eq: '等于',\n    empty: '为空',\n  },\n  assist_flowid: {\n    like: '包含',\n  },\n  flow_chargers: {\n    in: '等于任意一个',\n    ne: '不等于',\n    eq: '等于',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  flowdecision: {\n    in: '等于任意一个',\n  },\n  deptgroup: {\n    in: '包含任意一个',\n    all: '同时包含',\n    eq: '等于',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  usergroup: {\n    in: '包含任意一个',\n    all: '同时包含',\n    eq: '等于',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  dept: {\n    in: '等于任意一个',\n    ne: '不等于',\n    eq: '等于',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  text: {\n    eq: '等于',\n    ne: '不等于',\n    in: '等于任意一个',\n    nin: '不等于任意一个',\n    like: '包含',\n    unlike: '不包含',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  signature: {\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  upload: {\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  image: {\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  location: {\n    nin: '不包含',\n    all: '包含',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 单选类型\n  radiogroup: {\n    eq: '等于',\n    ne: '不等于',\n    in: '等于任意一个',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 多选类型\n  checkboxgroup: {\n    in: '包含任意一个',\n    all: '同时包含',\n    eq: '等于',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 数字类型\n  number: {\n    eq: '等于',\n    ne: '不等于',\n    gt: '大于',\n    lt: '小于',\n    gte: '大于等于',\n    lte: '小于等于',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 日期时间类型\n  datetime: {\n    eq: '等于',\n    ne: '不等于',\n    gte: '大于等于',\n    lte: '小于等于',\n    formula: '动态',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 日期类型\n  date: {\n    eq: '等于',\n    ne: '不等于',\n    gte: '大于等于',\n    lte: '小于等于',\n    formula: '动态',\n    range: '范围',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n  // 下拉选择类型（与单选类似）\n  select: {\n    eq: '等于',\n    ne: '不等于',\n    in: '等于任意一个',\n    nin: '不等于任意一个',\n    empty: '为空',\n    not_empty: '不为空',\n  },\n};\n\n/**\n * 获取方法的中文描述\n * @param method - 过滤方法\n * @param type - 字段类型\n * @returns 方法的中文描述\n */\nconst getMethodLabel = (method: FilterMethod, type: string): string => {\n  // 优先使用类型特定的方法描述\n  const typeOverrides = TYPE_METHOD_OVERRIDES[type];\n  if (typeOverrides && typeOverrides[method]) {\n    return typeOverrides[method]!;\n  }\n  // 回退到默认描述\n  return DEFAULT_METHOD_LABELS[method] || method;\n};\n\n/**\n * 格式化过滤值为可读字符串\n * @param value - 过滤值数组\n * @param method - 过滤方法\n * @returns 格式化后的值字符串\n */\nconst formatValue = (value: IFilterField['value'], method: FilterMethod): string => {\n  // 为空/不为空 不需要显示值\n  if (method === 'empty' || method === 'not_empty') {\n    return '';\n  }\n\n  if (!value || value.length === 0) {\n    return '';\n  }\n\n  // 范围类型特殊处理\n  if (method === 'range' && value.length === 2) {\n    return `${value[0]} 至 ${value[1]}`;\n  }\n\n  // 多值用逗号连接\n  if (value.length > 1) {\n    return `[${value.map((v: string | number | boolean | null) => String(v)).join(', ')}]`;\n  }\n\n  return String(value[0]);\n};\n\nconst renderMethodLabel = (methodLabel: string): ReactNode => {\n  if (methodLabel.endsWith('一个')) {\n    const prefix = methodLabel.slice(0, -1);\n    const tail = methodLabel.slice(-1);\n    return (\n      <>\n        <span className=\"text-[#666]\">{prefix}</span>\n        <span className=\"text-[#999]\">{tail}</span>\n      </>\n    );\n  }\n\n  return <span className=\"text-[#666]\">{methodLabel}</span>;\n};\n\n/**\n * 根据方法类型生成更自然的人类可读描述模板\n * @param method - 过滤方法\n * @returns 描述模板结构\n */\nconst getHumanReadableTemplate = (method: FilterMethod): { prefix: string; suffix: string } => {\n  switch (method) {\n    case 'range':\n      return { prefix: '在', suffix: '之间' };\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte':\n      return { prefix: '', suffix: '' };\n    case 'like':\n    case 'unlike':\n      return { prefix: '', suffix: '' };\n    case 'in':\n    case 'nin':\n      return { prefix: '', suffix: '' };\n    case 'all':\n      return { prefix: '', suffix: '' };\n    case 'empty':\n    case 'not_empty':\n      return { prefix: '', suffix: '' };\n    default:\n      return { prefix: '', suffix: '' };\n  }\n};\n\n/**\n * 将单个过滤字段转换为人类可读描述\n * @param field - 过滤字段\n * @returns 人类可读的条件描述\n */\nconst filterToDesc = (field: IFilterField): ReactNode => {\n  const { title, method, value, type } = field;\n  const methodLabel = getMethodLabel(method, type);\n  const valueStr = formatValue(value, method);\n  const { prefix, suffix } = getHumanReadableTemplate(method);\n\n  // 为空/不为空 不需要显示值\n  if (method === 'empty' || method === 'not_empty') {\n    return (\n      <span className=\"leading-[normal]\">\n        <span className=\"text-[#030303]\">{title}</span>\n        <span className=\"text-[#4d609f]\">&nbsp;</span>\n        {renderMethodLabel(methodLabel)}\n      </span>\n    );\n  }\n\n  return (\n    <span className=\"leading-[normal]\">\n      <span className=\"text-[#030303]\">{title}</span>\n      <span className=\"text-[#4d609f]\">&nbsp;</span>\n      {prefix && <span className=\"text-[#666]\">{prefix}</span>}\n      {renderMethodLabel(methodLabel)}\n      <span className=\"text-[#4d609f]\">&nbsp;</span>\n      <span className=\"text-[#0265ff]\">{valueStr}</span>\n      {suffix && <span className=\"text-[#666]\">&nbsp;{suffix}</span>}\n    </span>\n  );\n};\n\nexport const FilterCondition = ({ conds, rel }: IQueryFilter): ReactNode => {\n  if (!conds || conds.length === 0) {\n    return null;\n  }\n\n  const relLabel = rel === 'or' ? '或' : '且';\n\n  return (\n    <span className=\"font-['Alibaba_PuHuiTi_2.0:55_Regular',sans-serif] text-[14px] text-[#030303] whitespace-pre-wrap\">\n      {conds.map((field, index) => (\n        <span key={`${field.name}-${index}`} className=\"leading-[normal]\">\n          {filterToDesc(field)}\n          {index < conds.length - 1 && <span className=\"text-[#999]\">&nbsp;{relLabel}&nbsp;</span>}\n        </span>\n      ))}\n    </span>\n  );\n};\n","import { IDashWidgetType } from '@baishuyun/types';\n\nexport const DASH_WIDGET_ICON_CODE_MAP: Record<IDashWidgetType, string> = {\n  metric_table: '&#xe88c;', // 指标图\n  gauge_chart: '&#xe88d;', // 仪表盘\n  column_chart: '&#xe892;', // 柱形图\n  funnel_chart: '&#xe89c;', // 漏斗图\n  line_chart: '&#xe88b;', // 折线图\n  pie_chart: '&#xe89e;', // 饼图\n  area_chart: '&#xe898;', // 面积图\n  radar_chart: '&#xe893;', // 雷达图\n  bar_chart: '&#xe896;', // 条形图\n  gantt: '&#xe899;', // 甘特图\n  multi_axes_chart: '&#xe88f;', // 双轴图\n  data_table: '&#xe894;', // 数据表\n  background_table: '&#xe894;', // 数据表（同 data_table）\n  pivot_table: '&#xe891;', // 透视图\n  map_chart: '&#xe89d;', // 地图\n  newMap: '&#xe89d;', // 地图\n  card: '&#xe8f4;', // 卡片\n  rili: '&#xe849;', // 日历（日期）\n  description: '&#xe88e;', // 文本组件\n  image: '&#xe890;', // 图片组件\n  gauge_imageMore: '&#xe88d;', // 仪表盘（同 gauge_chart）\n};\n","import { DASH_WIDGET_ICON_CODE_MAP } from '@/const';\nimport { IDashWidgetType } from '@baishuyun/types';\nimport { FontIcon } from '@baishuyun/ai-design/font-icon';\n\nexport const DashWidgetIcon = ({\n  type,\n  className,\n  style,\n}: {\n  type: IDashWidgetType;\n  className?: string;\n  style?: React.CSSProperties;\n}) => {\n  const code = DASH_WIDGET_ICON_CODE_MAP[type] || '&#xe894;';\n\n  return <FontIcon code={code} className={className} style={style} />;\n};\n","import { CollapsibleTxtMsg } from '@baishuyun/ai-design/collapsible-txt-msg';\nimport { IQueryResult } from '@baishuyun/types';\n// import { IReportQueryContext } from '../../types';\n// import { ReportQueryPlugin } from '../..';\nimport { /* useCallback, */ useEffect } from 'react';\nimport { ConditionField, /* DataSourceField, */ DimensionField, MetricField } from './DataTableFields';\nimport { CardFieldsWrapper } from '@baishuyun/ai-design/card-field';\nimport { FilterCondition } from './FilterCondition';\nimport { SplitLine } from '@baishuyun/ai-design/split-line';\nimport { DashWidgetIcon } from './dash-widget-icon';\n// import { useFakeGlobalLoadingMessage } from '@/hooks/use-frame-mode';\n\nexport const DataTableCard = (\n  props: IQueryResult & {\n    streaming?: boolean;\n  }\n) => {\n  // const ctx = usePluginCtx<IReportQueryContext, ReportQueryPlugin>(PLUGIN_NAME);\n\n  // const globalLoading = useFakeGlobalLoadingMessage();\n\n  // const getFormName = useCallback(\n  //   (id: string) => {\n  //     const form = ctx?.appInfo?.formMap?.get(id);\n  //     return form?.name || '';\n  //   },\n  //   [ctx]\n  // );\n\n  useEffect(() => {\n    // if (props.streaming) {\n    //   globalLoading.clearGlobalFakeLoadingMessage();\n    // }\n  }, [props.streaming]);\n\n  // const formId = props.formIds?.[0] || '';\n  // const name = formId ? getFormName(formId) : '';\n\n  const hasMetrics = props.metrics && props.metrics.length > 0;\n\n  return (\n    <CollapsibleTxtMsg\n      title={props?.title || ''}\n      icon={<DashWidgetIcon type={props.type} />}\n      defaultOpen\n    >\n      <CardFieldsWrapper>\n        {/* {name && <DataSourceField>{name}</DataSourceField>} */}\n\n        {props.fields?.length ? (\n          <DimensionField>{props.fields?.map((field) => field.title).join('、')}</DimensionField>\n        ) : null}\n\n        {props.xFields?.length ? (\n          <DimensionField isCol>\n            {props.xFields?.map((field) => field.title).join('、')}\n          </DimensionField>\n        ) : null}\n\n        {props.yFields?.length ? (\n          <DimensionField>{props.yFields.map((field) => field.title).join('、')}</DimensionField>\n        ) : null}\n\n        {props.filter?.conds?.length ? (\n          <ConditionField>\n            <FilterCondition {...props.filter} />\n          </ConditionField>\n        ) : null}\n\n        {hasMetrics ? <SplitLine /> : null}\n\n        {hasMetrics\n          ? props.metrics?.map((metric) => <MetricField key={metric.id} metric={metric} />)\n          : null}\n      </CardFieldsWrapper>\n    </CollapsibleTxtMsg>\n  );\n};\n","import { IExtraPartProps } from \"@/plugins/form-builder/types\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { GetQueryResult } from \"@baishuyun/ai-feat-utils\";\nimport { MsgPartCompProps } from \"@baishuyun/types\";\nimport { TextUIPart } from \"ai\";\nimport { FC } from \"react\";\nimport { CreatedSourceMsg } from \"./result-cards/CreatedSourceMsg\";\nimport { DataTableCard } from \"./result-cards/DataTableCard\";\n\nexport const ReportQueryPartCom: FC<IRegisteredSlotComProps> = (props) => {\n    const payload = props.payload as MsgPartCompProps & IExtraPartProps\n    const { part } = payload;\n    const textPart = part as TextUIPart;\n    const result = GetQueryResult(textPart);\n    if (!result) {\n      return null;\n    }\n\n\n    if (result.isAggregate) {\n      return (\n        <CreatedSourceMsg\n          type={'aggregate'}\n          title={result.title || ''}\n          done={textPart.state === 'done'}\n        />\n      );\n    }\n\n    console.log('queryResult', result);\n\n    // ctx.queryResult = result;\n    // ctx.queryResult.appID = ctx.appInfo?.appId || '';\n\n    return (\n      <>\n        {result.source && result.source !== 'aggregate' ? (\n          <CreatedSourceMsg\n            type={result.source}\n            title={result.title || ''}\n            done={textPart.state === 'done'}\n          />\n        ) : null}\n        <DataTableCard\n          {...(result || {})}\n          streaming={textPart?.state === 'streaming'}\n        ></DataTableCard>\n      </>\n    );\n\n}","import { IsQueryResultPart } from '@baishuyun/ai-feat-utils';\nimport { MsgPartCompProps } from '@baishuyun/types';\nimport { TextUIPart } from 'ai';\n\nexport const isReportQueryMsgPart = (payload: unknown) => {\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload?.part as TextUIPart;\n\n  return IsQueryResultPart(part);\n};\n","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { ReportQueryPartCom } from './components';\nimport { isReportQueryMsgPart } from './matcher';\n\nexport class ReportQueryPlugin extends BaseAiOfficePlugin {\n  id = 'report-query';\n\n  override onInstall(api: IAiOfficePluginApi) {\n    super.onInstall(api);\n    // 注册组件到指定插槽\n    super.registerSlot('msg-part', ReportQueryPartCom, isReportQueryMsgPart);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new ReportQueryPlugin('report-query');\n","export const FORM_NAME_PART = 'std-action-part-form-name';\nexport const FORM_FIELDS_PART = 'std-action-part-form-fields';\n","import type { ICoreService } from '@baishuyun/types';\nimport { createPayloadTypeChecker } from '@baishuyun/ai-feat-utils';\nimport { ILocalMsg } from '../types';\nimport { JSONValue } from 'ai';\nimport { FORM_FIELDS_PART, FORM_NAME_PART } from '../const';\n\nexport const formNamePartChecker = createPayloadTypeChecker(FORM_NAME_PART);\nexport const formFieldsPartChecker = createPayloadTypeChecker(FORM_FIELDS_PART);\n\nexport const createLocalBotMsgSender =\n  <T extends JSONValue = string>(coreService: ICoreService) =>\n  (msg: ILocalMsg<T>) => {\n    coreService.appendLocalMessages([\n      {\n        id: `${msg.id ?? Date.now()}`,\n        role: 'assistant',\n        parts: [\n          {\n            type: 'text',\n            text: msg.text,\n            providerMetadata: {\n              raw: {\n                data: {\n                  type: msg.type,\n                  value: msg.payload,\n                },\n              },\n            },\n          },\n        ],\n      },\n    ]);\n  };\n","import type { IPluginRuntime, RealFormInfo } from '@baishuyun/types';\nimport { rebuildFieldsJsonStructure } from '@baishuyun/ai-feat-utils';\nimport { FormBuildingPayload, IStdActionMsg, IStdActionTask } from '@baishuyun/types';\nimport { ILocalMsg } from '../types';\nimport { createLocalBotMsgSender } from '../utils';\nimport { FORM_FIELDS_PART, FORM_NAME_PART } from '../const';\nimport { JSONValue } from 'ai';\n\nexport class FormBuilderStdAction implements IStdActionTask<FormBuildingPayload> {\n  constructor(runtime: IPluginRuntime) {\n    this.sendBotMsg = createLocalBotMsgSender(runtime.coreService);\n  }\n\n  private sendBotMsg: <T extends JSONValue>(msg: ILocalMsg<T>) => void;\n\n  private _resolveTask: (() => void) | undefined;\n  private _rejectTask: ((value: boolean | PromiseLike<boolean>) => void) | undefined;\n\n  // 注意，需要存入插件级别 store 里\n  private _formInfo: RealFormInfo | null = null;\n\n  get formInfo() {\n    return this._formInfo;\n  }\n\n  exec: (msg: IStdActionMsg<FormBuildingPayload>, runtime: IPluginRuntime) => Promise<boolean> = (\n    msg,\n    runtime\n  ) => {\n    return new Promise(async (resolve, reject) => {\n      this._rejectTask = resolve;\n      this._rejectTask = reject;\n\n      // 校验基础上下文\n      const hostCtxService = runtime.serviceRegistry.get('bsHostContext');\n      const ctx = hostCtxService?.currentContext;\n\n      if (!ctx?.params.appId) {\n        reject();\n        return;\n      }\n\n      const fields = msg.payload.fields?.map((f) => {\n        return rebuildFieldsJsonStructure(f);\n      });\n\n      // 调用平台服务创建表单\n      const formService = runtime.serviceRegistry.get('bsFormService');\n      this._formInfo =\n        (await formService?.createForm(ctx.params.appId, msg.payload.formName)) ?? null;\n\n      hostCtxService?.redirectTo(ctx.params.appId, this._formInfo?.formId);\n\n      // 构造消息渲染卡片\n      this.sendBotMsg({\n        text: msg.payload.formName,\n        type: FORM_NAME_PART,\n        payload: msg.payload.formName,\n      });\n\n      // 构造字段渲染卡片\n      this.sendBotMsg({\n        text: 'test',\n        type: FORM_FIELDS_PART,\n        payload: {\n          fields,\n          task: this,\n        } as unknown as JSONValue,\n      });\n    });\n  };\n\n  terminate = (success: boolean) => {\n    if (success) {\n      this._resolveTask?.();\n      return;\n    }\n\n    this._rejectTask?.(false);\n  };\n\n  onSuccess?: (() => void | Promise<void>) | undefined = () => {\n    console.log('form build task exec success');\n  };\n  onError?: (() => void | Promise<void>) | undefined;\n  onFinish?: (() => void | Promise<void>) | undefined;\n}\n","import { SuccessView } from \"@/plugins/form-builder/components/design-doc/create-form-confirm\";\nimport { IRegisteredSlotComProps } from \"@/sdk\";\nimport { MsgPartCompProps, RealFormInfo } from \"@baishuyun/types\";\nimport { TextUIPart } from \"ai\";\nimport { FC, useRef } from \"react\";\n\nexport const FormCreateSuccess: FC<IRegisteredSlotComProps> = (props) => {\n  const { payload } = props;\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload.part as TextUIPart;\n\n  const formRef = useRef<RealFormInfo | null>(null);\n\n  if (!part) {\n    return null;\n  }\n\n  return (\n    <SuccessView\n      formRef={formRef}\n      designInfo={{\n        formName: part.text,\n        linkInfoMap: new Map(),\n      }}\n     />\n  );\n}","import { FieldCheckerListMsg, FieldCheckerListMsgRef, FieldIcon, FieldValueCheckerProps, MessageContent } from \"@baishuyun/ai-design\";\nimport { extractTextPartMeta } from \"@baishuyun/ai-feat-utils\";\nimport { IField, IRegisteredSlotComProps, MsgPartCompProps, RealFormInfo } from \"@baishuyun/types\";\nimport { TextUIPart } from \"ai\";\nimport { FC, useRef } from \"react\";\nimport { type FormBuilderStdAction } from \"../std-action-task-impl\";\nimport { useService } from \"@/sdk\";\nimport { useFieldsPreviewer } from \"@/plugins/form-builder/hooks\";\n\ntype Field = IField;\n\nexport const FormFieldsChecker: FC<IRegisteredSlotComProps> = (props) => {\n  const checkerRef = useRef<FieldCheckerListMsgRef>(null);\n\n  const formService = useService('bsFormService');\n\n  const { payload } = props;\n  const specialPayload = payload as MsgPartCompProps;\n  const part = specialPayload.part as TextUIPart;\n\n  const meta = extractTextPartMeta(part);\n  if (!meta.value) {\n    return null;\n  }\n\n  const { fields, task: t } = meta.value;\n\n  const { showPreviewer } = useFieldsPreviewer();\n\n  const task = t as FormBuilderStdAction;\n\n  const cwf = task.formInfo;\n\n  const fieldPropsArray = fields\n    .map((field: IField) => {\n      if (!field?.widget) {\n        return null;\n      }\n\n      return {\n        field,\n        disabled: false,\n        onLoaded: (rawField: Field) => {\n          let enhancedField = rawField;\n\n          formService?.createField({\n            field: enhancedField,\n            checked: true,\n          });\n\n\n          if (cwf) {\n            showPreviewer(cwf as RealFormInfo, {\n              onCancel: () => {\n                task.terminate(false);\n              },\n              onConfirm: () => {\n                task.terminate(true);\n              }\n            });\n          }\n        },\n        icon: <FieldIcon type={field.widget?.type} />,\n        onChange: (check: boolean, field: any, parentFieldName?: string, index?: number) => {\n            formService?.updateFieldChecked({\n              field,\n              checked: check,\n              parentFieldName,\n              index,\n            })\n        },\n      };\n    })\n    .filter(Boolean) as Array<FieldValueCheckerProps>;\n\n  const fieldsPrefix = (\n    <div>\n      {/* <b style={{ display: 'inline-block' }}>{formName}</b> */}\n      {` 已生成${fieldPropsArray.length}个字段`}\n    </div>\n  );\n\n\n  return (\n    <MessageContent className=\"gap-2.5 py-0\" compact>\n      {fieldsPrefix}\n      <FieldCheckerListMsg\n        ref={checkerRef}\n        fields={fieldPropsArray}\n        streaming={status === 'streaming'}\n        confirmed={false}\n      />\n    </MessageContent>\n  );\n  \n}","import type { IAiOfficePluginApi } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { FormBuilderStdAction } from './std-action-task-impl';\nimport { FormCreateSuccess } from './components/form-create-sucess';\nimport { formFieldsPartChecker, formNamePartChecker } from './utils';\nimport { FormFieldsChecker } from './components/form-fields-checker';\n\nexport class StdActionsPlugin extends BaseAiOfficePlugin {\n  id = 'std-actions';\n\n  override onInstall(api: IAiOfficePluginApi) {\n    super.onInstall(api);\n\n    this.registerFormBuildingAction();\n  }\n\n  /**\n   * 表单搭建标准动作\n   */\n  private registerFormBuildingAction = () => {\n    // 表单名称\n    super.registerSlot(\n      'msg-part',\n      FormCreateSuccess, // 表单名称\n      formNamePartChecker\n    );\n\n    // 表单字段\n    super.registerSlot('msg-part', FormFieldsChecker, formFieldsPartChecker);\n\n    /* 标准动作注册 */\n    this.api.host.registerStdAction('form-building', FormBuilderStdAction);\n  };\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new StdActionsPlugin('std-actions');\n","import { useHostApi } from \"@/sdk\"\nimport { HCollapseIcon, HExpandIcon } from \"@baishuyun/ai-design\";\n\nexport const ExpandIcon = () => {\n  const api = useHostApi();\n  const fullscreenPart = api.host.fullscreenPart;\n\n  return fullscreenPart === 'leftCol'\n    ? <HCollapseIcon />\n    : <HExpandIcon />;\n}","import { IActionItem } from '../types';\nimport { IAiOfficePluginApi } from '@/sdk';\nimport { ExpandIcon } from '../components/ExpandIcon';\n\nexport const createActions: (api: IAiOfficePluginApi) => IActionItem[] = (api) => {\n  return [\n    {\n      key: 'fullscreen',\n      tooltip: '全屏',\n      iconComponent: ExpandIcon,\n      onClick: () => {\n        api.host.setFullscreenPart('leftCol');\n      },\n    },\n  ];\n};\n","import { DividerIcon, IconBtn  } from '@baishuyun/ai-design';\nimport { FC } from 'react';\nimport { IActionItem } from '../types';\n\n\nexport const ActionBtn: FC<IActionItem> = ({ iconComponent: Icon, tooltip, onClick, disabled, isDivider }) => {\n  if (isDivider) {\n    return (\n      <DividerIcon />\n    )\n  }\n\n  const icon = Icon ? <Icon /> : undefined;\n\n  return (\n    <IconBtn\n      icon={icon}\n      tooltip={tooltip}\n      disabled={disabled}\n      onClick={onClick}\n    />\n  );\n}","import { IRegisteredSlotComProps, useHostApi } from \"@/sdk\";\nimport { FC } from \"react\";\nimport { createActions } from \"../consts\";\nimport { ActionBtn } from \"./ActionBtn\";\nimport { IActionItem } from \"../types\";\n\nexport const ActionsBarCom: FC<IRegisteredSlotComProps> = (_) => {\n  const api = useHostApi();\n  const actions = createActions(api);\n  return (\n    <div className=\"flex items-center gap-3.75\">\n      {actions.map((action: IActionItem) => (\n        <ActionBtn {...action} />\n      ))}\n    </div>\n  )\n}","import type { IAiOfficePluginApi, PluginID } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { ActionsBarCom } from './components';\n\nexport class TopLeftActionsBarPlugin extends BaseAiOfficePlugin {\n  id: PluginID = 'tl-actions-bar';\n\n  override onInstall(api: IAiOfficePluginApi) {\n    super.onInstall(api);\n\n    super.registerSlot('leftColumnHeader:Right', ActionsBarCom);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new TopLeftActionsBarPlugin('tl-actions-bar');\n","import { AIIcon /* FullscreenIcon,  SettingIcon */ } from '@baishuyun/ai-design';\nimport { IActionItem } from '../types';\nimport { IAiOfficePluginApi } from '@/sdk';\n\nexport const createActions: (api: IAiOfficePluginApi) => IActionItem[] = (api) => {\n  return [\n    // {\n    //   key: 'setting',\n    //   tooltip: '设置',\n    //   iconComponent: SettingIcon,\n    //   onClick: () => {},\n    // },\n    {\n      key: 'ai',\n      tooltip: '智能体开发',\n      iconComponent: AIIcon,\n      hidden: () => {\n        const platformService = api.service.get('bsPlatformService');\n        return !platformService?.hasManagePerm();\n      },\n      onClick: () => {\n        const platformService = api.service.get('bsPlatformService');\n        platformService?.loginToAiManagerPlatform();\n      },\n    },\n    // {\n    //   key: 'divider-1',\n    //   iconComponent: null,\n    //   onClick: () => {},\n    //   isDivider: true,\n    // },\n    // {\n    //   key: 'fullscreen',\n    //   tooltip: '全屏',\n    //   iconComponent: FullscreenIcon,\n    //   onClick: api.host.toggleRightColFullScreen,\n    // },\n  ];\n};\n","import { DividerIcon, IconBtn  } from '@baishuyun/ai-design';\nimport { FC } from 'react';\nimport { IActionItem } from '../types';\n\n\nexport const ActionBtn: FC<IActionItem> = ({ iconComponent: Icon, tooltip, onClick, disabled, isDivider }) => {\n  if (isDivider) {\n    return (\n      <DividerIcon />\n    )\n  }\n\n  const icon = Icon ? <Icon /> : undefined;\n\n  return (\n    <IconBtn\n      icon={icon}\n      tooltip={tooltip}\n      disabled={disabled}\n      onClick={onClick}\n    />\n  );\n}","import { IRegisteredSlotComProps, useHostApi } from \"@/sdk\";\nimport { FC } from \"react\";\nimport { createActions } from \"../consts\";\nimport { ActionBtn } from \"./ActionBtn\";\nimport { IActionItem } from \"../types\";\n\nexport const ActionsBarCom: FC<IRegisteredSlotComProps> = (_) => {\n  const api = useHostApi();\n  const actions = createActions(api);\n  return (\n    <div className=\"flex items-center gap-3.75\">\n      {actions.filter(a => !a.hidden?.()).map((action: IActionItem) => (\n        <ActionBtn {...action} />\n      ))}\n    </div>\n  )\n}","import type { IAiOfficePluginApi, PluginID } from '@baishuyun/types';\nimport { BaseAiOfficePlugin } from '@/plugin-sdk/plugin';\nimport { ActionsBarCom } from './components';\n\nexport class TopRightActionsBarPlugin extends BaseAiOfficePlugin {\n  id: PluginID = 'tr-actions-bar';\n\n  override onInstall(api: IAiOfficePluginApi) {\n    super.onInstall(api);\n\n    super.registerSlot('rightColumnHeader:Right', ActionsBarCom);\n  }\n\n  weight?: number | undefined;\n  useStore?: () => Record<string, unknown>;\n}\n\nexport default new TopRightActionsBarPlugin('tr-actions-bar');\n"],"names":["r","f","clsx","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","result","classRest","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","key","value","path","current","parts","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","twMerge","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cn","inputs","isOptionArray","item","toHumanReadable","type","v","lnglatXY","isSubformFieldEqual","f1","f2","widgetArrKey","_a","_b","subFields1","subFields2","subField1","subField2","useShadow","id","style","rootEl","containerClasses","wrapperClasses","wrapperStyle","extraHtml","shadowContainer","setShadowContainer","useState","wrapperRef","useRef","useEffect","wrapperEl","shadowRoot","styleEl","containerEl","error","BotImgUrl","WarningImgUrl","transCls","FORM_ICON_OPTIONS","FieldTypeNameMap","FIELD_ICON_CODE_MAP","CalendarIcon","jsx","setRef","ref","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","React","createSlot","ownerName","Slot2","props","forwardedRef","children","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","maybeSlottable","isSlottable","slottable","child","getSlottableElementFromSlottable","slottableElementRef","getElementRef","composedRef","createSlottableError","createSlotError","mergedProps","mergeProps","Slot","SLOTTABLE_IDENTIFIER","createSlottable","Slottable2","child2","childProps","overrideProps","propName","slotPropValue","childPropValue","element","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","size","asChild","Comp","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","createContext2","rootComponentName","defaultContext","Context","Provider","context","useContext2","consumerName","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","scope","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","useReactId","count","useId","deterministicId","setId","useLayoutEffect","reactId","useInsertionEffect","useControllableState","prop","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","NODES","Primitive","primitive","Node","primitiveProps","dispatchDiscreteCustomEvent","target","ReactDOM","useCallbackRef","callback","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","handleKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","name","handler","detail","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","first","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","isHidden","upTo","isSelectableInput","createFocusScopesStack","stack","activeFocusScope","arrayRemove","array","updatedArray","items","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useStateMachine","initialState","machine","state","nextState","Presence","present","presence","usePresence","React2","useStableComposedRefs","stylesRef","prevPresentRef","prevAnimationNameRef","send","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","timeoutId","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","refsRef","currentRefs","guards","useFocusGuards","createFocusGuard","start","end","__assign","s","n","p","__rest","e","t","__spreadArray","to","from","pack","l","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","a","innerCreateMedium","defaults","middleware","buffer","assigned","medium","data","x","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","options","SideCar","sideCar","rest","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","tag","nonce","injectStyles","css","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","left","top","right","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","gap","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","err","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","y","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","el","shouldCancelEvent","parent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","jsxs","Fragment","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description","__insertCSS","code","DrawerContext","React__default","useDrawerContext","isMobileFirefox","userAgent","isMac","testPlatform","isIPhone","isSafari","isIPad","isIOS","re","KEYBOARD_BUFFER","chain$1","visualViewport","getScrollParent","nonTextInputTypes","preventScrollCount","restore","usePreventScroll","isDisabled","preventScrollMobileSafari","scrollable","lastY","onTouchStart","onTouchMove","bottom","onTouchEnd","isInput","onFocus","scrollIntoView","onWindowScroll","scrollX","scrollY","restoreStyles","setStyle","removeEvents","addEvent","cur","root","scrollableTop","targetTop","targetBottom","keyboardHeight","set","ignoreCache","originalStyles","reset","isVertical","getTranslate","transform","mat","dampenValue","assignStyle","prevStyle","chain","fns","fn","TRANSITIONS","VELOCITY_THRESHOLD","CLOSE_THRESHOLD","SCROLL_LOCK_TIMEOUT","BORDER_RADIUS","NESTED_DISPLACEMENT","WINDOW_TOP_OFFSET","DRAG_CLASS","uncontrolledState","handleChange","useSnapPoints","activeSnapPointProp","setActiveSnapPointProp","snapPoints","drawerRef","overlayRef","fadeFromIndex","onSnapPointChange","snapToSequentialPoint","activeSnapPoint","setActiveSnapPoint","windowDimensions","setWindowDimensions","onResize","isLastSnapPoint","activeSnapPointIndex","_snapPoints_findIndex","snapPoint","shouldFade","snapPointsOffset","containerSize","_snapPoints_map","isPx","snapPointAsNumber","height","width","activeSnapPointOffset","snapToPoint","dimension","_snapPointsOffset_findIndex","newSnapPointIndex","snapPointDim","newIndex","onRelease","draggedDistance","closeDrawer","velocity","dismissible","currentPosition","isOverlaySnapPoint","isFirst","hasDraggedUp","closestSnapPoint","prev","curr","dim","dragDirection","onDrag","getPercentageDragged","absDraggedDistance","isDraggingDown","targetSnapPointIndex","snapPointDistance","percentageDragged","noop","useScaleBackground","isOpen","shouldScaleBackground","setBackgroundColorOnScale","noBodyStyles","timeoutIdRef","initialBackgroundColor","useMemo","getScale","wrapper","wrapperStylesCleanup","previousBodyPosition","usePositionFixed","nested","hasBeenOpened","preventScrollRestoration","activeUrl","setActiveUrl","scrollPos","setPositionFixed","innerHeight","bottomBarHeight","restorePositionSetting","onScroll","onDragProp","onReleaseProp","closeThreshold","scrollLockTimeout","handleOnly","fixed","onClose","disablePreventScroll","repositionInputs","onAnimationEnd","autoFocus","_drawerRef_current","_drawerRef_current1","setIsOpen","o","setHasBeenOpened","isDragging","setIsDragging","justReleased","setJustReleased","openTime","dragStartTime","dragEndTime","lastTimeDragPrevented","isAllowedToDrag","nestedOpenChangeTimer","pointerStart","keyboardIsOpen","shouldAnimate","previousDiffFromInitial","drawerHeightRef","drawerWidthRef","initialDrawerHeight","onReleaseSnapPoints","onDragSnapPoints","getSnapPointsPercentageDragged","onPress","shouldDrag","isDraggingInDirection","_window_getSelection","highlightedText","swipeAmount","date","directionMultiplier","noCloseSnapPointsPreCondition","drawerDimension","snapPointPercentageDragged","dampenedDraggedDistance","translateValue","opacityValue","scaleValue","borderRadiusValue","_window_visualViewport","onVisualViewportChange","visualViewportHeight","totalHeight","diffFromInitial","drawerHeight","isTallEnough","offsetFromTop","activeSnapPointHeight","newDrawerHeight","fromWithin","cancelDrag","resetDrawer","currentSwipeAmount","timeTaken","distMoved","_drawerRef_current_getBoundingClientRect_height","visibleDrawerHeight","_drawerRef_current_getBoundingClientRect_width","visibleDrawerWidth","isHorizontalSwipe","onNestedOpenChange","scale","initialTranslate","onNestedDrag","initialScale","newScale","newTranslate","onNestedRelease","translate","hasSnapPoints","onMouseUp","delayedSnapPoints","setDelayedSnapPoints","pointerStartRef","lastKnownPointerEventRef","wasBeyondThePointRef","isDeltaInDirection","threshold","isDeltaX","dFactor","handleOnPointerUp","yPosition","xPosition","swipeStartThreshold","LONG_HANDLE_PRESS_TIMEOUT","DOUBLE_TAP_TIMEOUT","Handle","preventCycle","closeTimeoutIdRef","shouldCancelInteractionRef","handleStartCycle","handleCancelInteraction","handleCycleSnapPoints","currentSnapIndex","point","nextSnapPoint","handleStartInteraction","Drawer","DialogPrimitive.Trigger","DialogPrimitive.Close","sides","min","max","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","commonX","commonY","commonAlign","coords","computePosition","strategy","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","detectOverflow","_await$platform$isEle","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","b","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","_e","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","_io","refresh","skip","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","deepEqual","keys","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","whileElementsMounted","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","NAME","Arrow","arrowProps","useSize","setSize","entry","borderSizeEntry","borderSize","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","placementState","setPlacementState","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","onAnchorChange","anchorRef","previousAnchor","sideAndAlign","getSideAndAlignFromPlacement","placedSide","placedAlign","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","handlePlaced","arrowX","_c","arrowY","_d","cannotCenterArrow","contentZIndex","setContentZIndex","_f","_g","_h","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Root2","Anchor","VISUALLY_HIDDEN_STYLES","VisuallyHidden","createTooltipContext","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","openTimerRef","wasOpenDelayedRef","open2","stateAttribute","handleOpen","handleClose","handleDelayedOpen","PopperPrimitive.Root","TooltipTrigger","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","PopperPrimitive.Anchor","TooltipPortal","TooltipContent","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","Slottable","ariaLabel","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","TooltipArrow","PopperPrimitive.Arrow","polygon","inside","j","ii","jj","xi","yi","xj","yj","points","newPoints","getHullPresorted","upperHull","q","lowerHull","Root3","Content2","Arrow2","TooltipZIndexContext","zIndex","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","portalContainer","zIndexFromProvider","TooltipPrimitive.Portal","TooltipPrimitive.Content","TooltipPrimitive.Arrow","BsTooltip","setPortalContainer","triggerEl","rootNode","existing","IconBtn","forwardRef","icon","tooltip","rounded","btn","CloseIcon","UserIcon","BagIcon","BuildingIcon","PlaneIcon","AddIcon","TrashIcon","AnalysisIcon","MagicIcon","ChevronIcon","EmptyCardIcon","FormFieldIcon","LetterAIcon","LeftArrowIcon","SolidArrowDownIcon","DividerIcon","MicrophoneIcon","UploadIcon","StopIcon","SearchIcon","EditIcon","QuestionIcon","InfoIcon","RemoveCircleIcon","BackIcon","RefreshIcon","CopyIcon","XlsxIcon","UnknownFileIcon","CsvFileIcon","TxtFileIcon","CheckerInBoxIcon","CheckerIcon","FormulasIcon","ScrollArrowDownIcon","AggregateTableIcon","DataViewIcon","DataReportIcon","BrushIcon","AIIcon","SettingIcon","MenuLinesIcon","HCollapseIcon","HExpandIcon","CommonTypeIcon","fill","FlowNodeTypeIcon","FormTypeIcon","GoToFormIcon","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerOverlay","DrawerContent","autoContainer","setAutoContainer","setDetectorRef","vaulStyle","cloned","effectiveContainer","DrawerHeader","DrawerBody","bodyRef","handleWheel","atTop","atBottom","observer","DrawerFooter","DrawerTitle","DrawerCloseButton","POPOVER_NAME","createPopoverContext","PopoverProvider","usePopoverContext","Popover","__scopePopover","hasCustomAnchor","setHasCustomAnchor","PopoverAnchor","onCustomAnchorAdd","onCustomAnchorRemove","PopoverTrigger","PopoverPortal","PopoverContent","PopoverContentModal","PopoverContentNonModal","isRightClickOutsideRef","PopoverContentImpl","isRightClick","PopoverClose","PopoverArrow","PopoverPrimitive.Root","PopoverPrimitive.Trigger","onWheel","PopoverPrimitive.Portal","PopoverPrimitive.Content","toKebabCase","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","hasA11yProp","defaultAttributes","Icon","color","strokeWidth","absoluteStrokeWidth","iconNode","createElement","attrs","createLucideIcon","iconName","Component","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","ChevronsLeft","ChevronsRight","LoaderCircle","Send","X","Spinner","Loader2Icon","Label","required","LabelPrimitive.Root","Input","Textarea","createCollection","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","usePrevious","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","SelectProviderImpl","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","SelectProvider","__scopeSelect","valueProp","onValueChange","dir","autoComplete","disabled","form","internal_do_not_use_render","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","triggerPointerDownPosRef","isFormControl","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","option","handleNativeOptionAdd","handleNativeOptionRemove","optionsSet","Select","providerProps","Fragment2","SelectBubbleInput","SelectTrigger","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","currentItem","nextItem","findNextItem","pointerEvent","shouldShowPlaceholder","isTypingAhead","VALUE_NAME","SelectValue","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","showPlaceholder","ICON_NAME","SelectIcon","iconProps","SelectPortal","SelectContent","fragment","setFragment","SelectContentImpl","SelectContentFragment","SelectContentProvider","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","focusSelectedItem","pointerMoveDelta","handlePointerMove","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","isFirstItem","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","isFocused","setIsFocused","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","activeItem","SEPARATOR_NAME","SelectSeparator","separatorProps","SelectArrow","BUBBLE_INPUT_NAME","nativeOptions","selectValue","prevValue","selectProto","onSearchChange","handleSearchChange","timerRef","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","wrapArray","_","SelectPrimitive.Root","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.ScrollUpButton","SelectPrimitive.ScrollDownButton","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Label","SelectPrimitive.Item","SelectPrimitive.ItemText","SelectPrimitive.Separator","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","isObject","getEventValue","getFieldArrayParentNames","names","matches","isPlainObject","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","isArray","copy","isKey","isUndefined","val","compact","stringToPath","input","get","object","isBoolean","tempPath","lastIndex","objValue","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","FORM_ERROR_TYPE","ROOT_ERROR_TYPE","HookFormControlContext","useFormControlContext","getProxyFormState","formState","control","localProxyFormState","isRoot","_key","useFormState","formControl","exact","updateFormState","_localProxyFormState","isString","generateWatchOutput","_names","formValues","isGlobal","fieldName","isPrimitive","object1","object2","visited","keys1","keys2","val1","val2","useWatch","compute","_defaultValue","_compute","_computeFormValues","_prevControl","_prevName","updateValue","getCurrentOutput","values","refreshValue","computedFormValues","controlChanged","prevName","computedOutput","nameChanged","useController","shouldUnregister","isArrayField","defaultValueMemo","_props","_registerProps","fieldState","onBlur","elm","field","message","_shouldUnregisterField","updateMounted","Controller","HookFormContext","useFormContext","FormProvider","watch","getValues","getFieldState","setError","clearErrors","setValues","resetField","handleSubmit","unregister","register","setFocus","subscribe","memoizedValue","appendErrors","validateAllFieldCriteria","errors","convertToArrayPayload","createSubject","_observers","extractFormValues","fieldsState","fieldValue","nestedFieldsState","isEmptyObject","isFileInput","owner","isMultipleSelect","isRadioInput","isRadioOrCheckbox","live","baseGet","updatePath","isEmptyArray","obj","unset","paths","childObject","objectHasFunction","isTraversable","markFieldsDirty","fields","pruneDirtyFields","pruned","getDirtyFields","dirtyFieldsFromValues","formValue","defaultResult","validResult","getCheckboxValue","getFieldValueAs","valueAsNumber","valueAsDate","setValueAs","defaultReturn","getRadioValue","previous","getFieldValue","getResolverOptions","fieldsNames","_fields","criteriaMode","shouldUseNativeValidation","isRegex","getRuleValue","rule","getValidationModes","mode","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","validateFunction","hasValidation","isWatched","isBlurEvent","watchName","iterateFieldsByAction","action","abortEarly","currentField","schemaErrorLookup","foundError","shouldRenderFormState","formStateData","_proxyFormState","shouldSubscribeByName","signalName","currentName","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","updateFieldArrayRootError","fieldArrayErrors","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","isFieldArray","maxLength","minLength","pattern","validate","mount","inputValue","inputRef","setCustomValidity","isRadio","isCheckBox","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","time","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","defaultOptions","DEFAULT_FORM_STATE","createFormControl","_options","_formState","_defaultValues","_formValues","_state","delayErrorCallback","timer","defaultProxyFormState","_proxySubscribeFormState","_subjects","shouldDisplayAllAssociatedErrors","debounce","wait","_setValid","shouldUpdateValid","isValid","_runSchema","_updateIsValidating","executeBuiltInValidation","isValidating","_updateDirtyFields","_setFieldArray","method","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","hasExplicitNullIntermediate","segments","defaultValues","updateValidAndValue","shouldSkipSetValueAs","wasUnsetInFormValues","setFieldValue","updateTouchAndDirty","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","output","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","previousFieldError","updatedFormState","executeSchemaAndUpdateState","validateForm","eventType","onlyCheckValid","isFieldArrayRoot","isPromiseFunction","shouldTrackIsValidatingState","fieldError","_removeUnmounted","_getWatch","_getFieldArray","optionRef","checkboxRef","radioRef","setFieldValues","fieldKey","cloneValue","previousValue","isValueUnchanged","watched","arrayName","updatedFormValues","isFieldValueUpdated","_updateIsFieldValueUpdated","validationModeBeforeSubmit","validationModeAfterSubmit","shouldSkipValidation","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","inputName","currentError","currentRef","restOfErrorTree","payload","_subscribe","_setFormState","snapshot","_setDisabledField","disabledStateChanged","disabledIsDefined","shouldRevalidateRemount","fieldRef","radioOrCheckbox","_focusError","_disableForm","onValid","onInvalid","onValidError","_reset","keepStateOptions","updatedValues","cloneUpdatedValues","isEmptyResetValues","fieldsToCheck","isDirty","existingValue","methods","useForm","_formControl","_values","sub","FormFieldContext","FormItemContext","useFormField","fieldContext","Form","formMethods","FormField","FormItem","FormLabel","formItemId","FormControl","formDescriptionId","formMessageId","FormDescription","FormMessage","AbsFullscreenGradientBg","disableGradient","bgColor","AgentSelect","agents","showSearch","activeAgent","onSelect","searchQuery","setSearchQuery","groups","systemAgents","customAgents","g","useCallback","agent","groupIndex","isActive","AgentScrollSelector","showSlider","scrollRef","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","popoverOpen","setPopoverOpen","setTriggerRef","checkScroll","slider","ImgMsgPart","url","alt","onClick","FILE_TYPE_MAP","DEFAULT_FILE_CONFIG","isImageType","mediaType","getFileConfig","fileName","getDisplayFileName","FileMsgPart","iconSize","scaledIconSize","iconScale","hasFileName","AttachmentPart","iconOnly","handleClick","displayName","AttachmentPartGroup","onPartClick","LoaderIcon","ChevronDownIcon","ChevronRightIcon","ChevronLeftIcon","NavButton","GradientOverlay","visible","isLeft","AttachmentsPreviewer","attachments","imageSize","onImageClick","onImageRemove","showLeftNav","setShowLeftNav","showRightNav","setShowRightNav","scrollAmount","newScrollLeft","attachment","BaseButton","hoverTextCls","DEPTH_PADDING","getDepthPadding","depth","getEntryIconClass","newStr","buildEntryTreeFromAliasMap","appDetail","originMap","entryMap","entryList","formIdWhiteList","flattenEntryList","entryIdAliasMap","aliasKeys","childrenByParent","aliasItem","parentKey","allParentValues","rootParents","lowerQuery","buildRecursive","parentId","childIds","entryDetail","isGroup","selfMatch","rootId","flattenFormEntries","c","getEntries","whiteList","filterTreeBySearch","nameMatch","filteredChildren","SearchInput","BaseSearch","EntryItem","TreeItemNode","selectedEntryId","appId","section","expanded","setExpanded","hasOwn","arg","appendClass","parseValue","newClass","module","ScrollSlider","appDetails","currentAppId","onOverflowChange","showCurrentAppEntriesOnly","activeGroup","setActiveGroup","groupSearchQuery","setGroupSearchQuery","popoverStyle","setPopoverStyle","popoverRef","groupPillRefs","groupPortalContainer","setGroupPortalContainer","isTabs","flatNodes","appIds","currentFirst","otherNodes","tree","mapped","merged","filteredGroupTree","canLeft","canRight","hasOverflow","descendantToGroupId","map","collectDescendants","targetId","pill","updatePopoverPosition","closeGroupPopover","openGroupPopover","flatNode","handleGroupPopoverSelect","handleClickOutside","handleEscape","hasGroupSearch","sliderBody","isLeaf","isGroupActive","setPillRef","tabCls","createPortal","AppGroupFolder","hasSearch","OtherAppSection","EntryPopover","currentAppTree","otherAppIds","hasCurrentApp","hasOtherApps","hasAnyContent","BsEntrySelect","controlledValue","_placeholder","sliderVariant","internalValue","setInternalValue","sliderHasOverflow","setSliderHasOverflow","handleOverflowChange","handleToggle","handleResize","defaultGradient","BorderAnimation","duration","borderRadius","beamWidth","beamHeight","gradient","borderWidth","borderColor","BorderColorAnimation","bgInset","isNumSize","safeSize","safeInset","BotIcon","BotAvatarAndName","variantStyles","iconJsx","CardField","CardFieldsWrapper","Card","title","desc","iconCode","IconCard","iconBgColor","description","selected","badge","AgentTag","TriggerConfigList","TriggerTypeIcon","triggerType","minIcon","TriggerSelect","configList","COLLAPSIBLE_NAME","createCollapsibleContext","CollapsibleProvider","useCollapsibleContext","Collapsible","__scopeCollapsible","collapsibleProps","CollapsibleTrigger","CollapsibleContent","CollapsibleContentImpl","isPresent","setIsPresent","heightRef","widthRef","isMountAnimationPreventedRef","originalStylesRef","rAF","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","checkedProp","defaultChecked","onCheckedChange","checked","setChecked","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isIndeterminate","CheckboxTrigger","onKeyDown","checkboxProps","initialCheckedStateRef","prevChecked","Checkbox","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","controlSize","inputProto","bubbles","defaultCheckedRef","ENTRY_FOCUS","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","RovingFocusGroupItem","focusable","active","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","Item","RADIO_NAME","createRadioContext","createRadioScope","RadioProviderImpl","useRadioContext","RadioProvider","__scopeRadio","onCheck","RadioTrigger","radioProps","Radio","RadioBubbleInput","RadioIndicator","ARROW_KEYS","RADIO_GROUP_NAME","createRadioGroupContext","createContextScope2","useRovingFocusGroupScope","useRadioScope","RadioGroupProvider","useRadioGroupContext","RadioGroup","__scopeRadioGroup","rovingFocusGroupScope","jsx2","RovingFocusGroup.Root","Primitive2","ITEM_PROVIDER_NAME","ITEM_TRIGGER_NAME","ITEM_BUBBLE_INPUT_NAME","RadioGroupItemProvider","radioScope","RadioGroupItemTrigger","useComposedRefs2","isArrowKeyPressedRef","handleKeyUp","RovingFocusGroup.Item","composeEventHandlers2","RadioGroupItem","jsxs2","RadioGroupItemBubbleInput","bubbleProps","INDICATOR_NAME2","RadioGroupIndicator","SWITCH_NAME","createSwitchContext","SwitchProviderImpl","useSwitchContext","SwitchProvider","__scopeSwitch","SwitchTrigger","switchProps","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","TABS_NAME","createTabsContext","TabsProvider","useTabsContext","Tabs","__scopeTabs","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","TabsTrigger","triggerId","makeTriggerId","makeContentId","isAutomaticActivation","TabsContent","baseId","List","SwitchPrimitive.Root","SwitchPrimitive.Thumb","FORM_ACTION_LABELS","FLOW_NODE_ACTION_LABELS","useTriggerDescription","helper","formService","entryInfo","setEntryInfo","fetchEntryInfo","entryId","formName","widgetName","ret","actions","buildAgentInfo","agentName","agentIcon","AgentHelperCard","onEnabledChange","onViewLogs","onEdit","onCopy","onDelete","line","AgentHelperCardList","getAgentName","getAgentIcon","PlusIcon","PlaceholderCard","detailAddress","btnLabel","onCreateClick","AgentEntryCard","onLogClick","GridsIcon","CATEGORY_ITEMS","AgentCategorySelectMenu","usePortalContainer","portalName","ce","ge","me","pe","fe","ye","he","ve","C","N","Se","Ae","M","ke","Ce","Ne","xe","Me","qe","F","E","Fe","Ee","m","A","w","h","D","P","R","De","Pe","Te","B","Be","Oe","u","O","I","L","S","G","U","H","Q","z","Z","Y","K","V","J","ee","te","ne","ae","le","ie","oe","ue","se","de","getFormIconClass","AppIcon","FontIcon","getIconUnicode","SORT_OPTIONS","AgentSortSelect","currentLabel","FolderIcon","buildFormTree","allItemIds","allParentKeys","childItems","FormEntryItem","FormTreeItemNode","selectedFormId","FormPopover","FormSelect","selectedForm","reactRoot","eventTarget","rafId","poll","blockEvents","SquareInBoxIcon","SquareChecker","readonly","intermediate","generatedId","checkboxId","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","groupsToAppTreeNodes","app","ToggleIcon","MoreIcon","DropdownChevron","ALL_APPS_VALUE","flattenNodes","walk","AppSelect","popoverContentOnly","showAll","searchPlaceholder","maxVisibleChips","triggerWidth","setTriggerWidth","triggerBtnRef","expandedIds","setExpandedIds","initExpand","nodeMap","selectedIds","selectedLabels","selectedAppLabel","filteredNodes","filterTree","labelMatch","toggleExpanded","nodeId","currentIds","idx","handleRemoveChip","handleOpenChange","nextOpen","multiSelectedLabels","visibleChips","overflowCount","renderNodeRow","isExpanded","leftPad","hasMultiSelection","popoverContent","ids","CheckCard","controlledChecked","internalChecked","setInternalChecked","isChecked","isCheckedRef","newChecked","FORM_ACTION_CONFIG_LIST","FormActionTriggerSelect","multiple","selectedList","FLOW_NODE_ACTION_CONFIG_LIST","FlowNodeActionTriggerSelect","TriggerTimeSourceTypeOptions","TriggerTimeSourceTypeSelect","MIN_YEAR","MAX_YEAR","MONTH_NAMES","WEEK_NAMES","getFirstMondayOfMonth","year","month","daysToSubtract","getDaysInMonth","checkTimeValidate","curTotal","startTotal","endTotal","checkDateValidate","minDate","maxDate","week","minY","minM","maxY","maxM","getCloserDate","mn","mx","checkBeforeMenuClick","checkAfterMenuClick","formatDateByFormat","format","tdBase","tdDisabled","CalendarPanel","day","onYearReduce","onYearAdd","onMonthReduce","onMonthAdd","onMonthMenu","onYearMenu","onChangeDay","hasDayPart","calendarData","firstMonday","today","todayStr","rows","cursor","row","cell","ri","isOday","isToday","isWeekend","MonthPanel","showYear","onMountOk","checkValidate","rowIdx","colIdx","valid","YearPanel","showYearLabel","onYearFReduce","onYearFAdd","onSelectYear","startYear","endYear","yearGrid","colItemBase","TimePanel","hours","minutes","seconds","startTime","endTime","onHoursChange","onMinutesChange","onSecondsChange","hasMinutePart","hasSecondPart","renderColumn","colLen","labels","currentVal","isMinBoundary","isMaxBoundary","FooterPanel","hasTime","hasDay","todayCls","onToday","onOk","DatePicker","minDateProp","maxDateProp","weekProp","initialDate","setYear","setMonth","setDay","setHours","setMinutes","setSeconds","showMonth","setShowMonth","setShowYear","showHms","setShowHms","closerDate","fireOnChange","closeFloat","onDateUpdate","handleMonthReduce","newYear","newMonth","newDay","handleMonthAdd","handleYearReduce","handleYearAdd","handleYearFReduce","handleYearFAdd","handleSelectYear","selectedYear","newDate","handleMountOk","handleChangeDay","handleToDay","handleOkDay","checkValiToday","handleHoursChange","handleMinutesChange","handleSecondsChange","hasDatePart","hasTimePart","isMonthOnly","isYearOnly","openMonthMenu","openYearMenu","dataRangeMinHeight","DateInput","displayText","defaultPlaceholder","getPlaceholderByFormat","FIELD_TYPE_BADGE_MAP","textTypes","numberTypes","datetimeTypes","fileTypes","TypeBadge","buildNodeKey","buildItemNodeKey","buildFieldTree","parentWidgetName","subformItems","hasItems","rootKey","childWidgetName","fullWidgetName","childMatch","FieldSelectPopover","selectedKey","showTypeBadge","expandedKeys","setExpandedKeys","paddingLeft","handleRowClick","handleToggleClick","buildKeyLabelMap","fullKey","childKey","getLabelByKey","FieldSelect","internalSelectedKey","setInternalSelectedKey","displayLabel","nodeKey","OffsetTypeOptions","getOffsetTypeOptions","dateFieldType","opt","OffsetTypeSelect","OffsetUnitOptions","OffsetUnitSelect","MINUTES_PER_DAY","NUMBER_INPUT_CLASSES","getDefaults","validOffsetType","minutesToTimeDate","clamped","timeDateToMinutes","OffsetPreferenceSelect","effectiveType","showDaysInput","showNumberInput","showTimeInput","showUnitSelect","timeInMinutes","timeDate","daysCount","numberValue","handleOffsetTypeChange","newOffsetType","timeInMin","handleTimeChange","mins","days","handleDaysChange","raw","handleNumberChange","handleUnitChange","newUnit","isDateFieldPayload","buildDateFieldPayload","overrides","parseDateFromPayload","TriggerTimePreferenceSelect","forms","dateFormat","selectedType","dateFieldPayload","handleTypeChange","handleDateChange","handleFormChange","handleFieldChange","_field","handleOffsetPreferenceChange","offsetPref","RepeatPreferenceTypeOptions","RepeatPreferenceTypeSelect","ClearAllIcon","WeekdaysOptions","WeekdaysSelect","isHovering","setIsHovering","allSelected","someSelected","weekday","handleSelectAll","handleClearAll","handleRemove","hasSelection","showClear","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","MonthdaysOptions","LAST_DAY_OPTION","DAYS_PER_ROW","MonthdaysSelect","draftValue","setDraftValue","displayValue","numericSelected","hasLast","allDaysSelected","handleToggleDay","handleSelectAllDays","allDays","lastPart","handleSelectToday","handleToggleLast","handleConfirm","dayRows","RepeatByTypeOptions","RepeatByTypeSelect","defaultCustomRepeatPreference","RepeatPreferenceSelect","customPref","repeatBy","handleRepeatByChange","newRepeatBy","handleIntervalChange","interval","handleWeekdaysChange","handleMonthdaysChange","weekdaysValue","monthdaysValue","DecorativeLine","flipped","FormDivider","ALL_OPTIONS","OPERATOR_LABEL_MAP","RelationalOperatorSelect","operators","borderless","selectedLabel","CircleChecker","CollapsibleTxtMsg","disableExpand","ConfirmDialog","linkText","onLinkClick","cancelText","onCancel","confirmText","onConfirm","showLink","showCancel","btnStyle","groupFields","cellCls","FieldRow","isSubFormChild","SubFormGroup","toggle","FieldsDesignInfoTable","DotAnimation","FieldsGeneratingIndicator","loading","animationWidth","magicIconWidth","textRef","textWidth","setWidth","fullWidth","MessageContent","FakeBotMessage","headless","LinearGradientColorBgAnimation","childrenContainerStyle","PreviewerHeader","tips","confirmContent","confirmTitle","onBackClick","onSave","closeBtnLabel","onClear","dialogContainer","disableConfirm","disableOperation","customOperationElement","showConfirmDialog","setShowConfirmDialog","setLoading","setRootRef","btnResetStyle","isData","isFields","titleCls","operations","contentJsx","borderCls","paddingCls","PlaceholderDashedBox","FieldsPreviewer","fullscreen","empty","rightSpaceWidth","rightSpaceRef","rightElement","streaming","streamingText","disableShadowContainer","fullContent","containerStyle","pr","absContainer","setAbsContainer","contentCls","fullContentStyle","rightArea","PrimaryConfirmBtn","text","prefixDesc","light","FormIcon","fontSize","FormInfoEditor","memo","onNameChange","onMount","selectedIcon","iconOptions","onIconChange","controlledExpanded","onExpandedChange","internalExpanded","setInternalExpanded","isDropdownOpen","setIsDropdownOpen","nameVal","setNameVal","iconOpt","setIconOpt","FORMULA_OP_LABEL","FreezeMode","FORMULA_OP_COLOR","FormulaTag","GenerateAnimation","LineChecker","extra","confirmed","shortDesc","hasExtra","checker","T","be","Re","we","$e","Le","ze","Ie","He","Ze","Ge","Qe","je","Ue","W","Ke","We","Xe","Je","__publicField","ok","unreachable","stringify","settings","nameRe","nameReJsx","emptyOptions","whitespace","thing","Schema","normal","space","merge","definitions","definition","normalize","Info","attribute","powers","boolean","increment","booleanish","overloadedBoolean","number","spaceSeparated","commaSeparated","commaOrSpaceSeparated","checks","types","DefinedInfo","mask","mark","check","create","properties","normals","info","aria","caseSensitiveTransform","attributes","caseInsensitiveTransform","svg","xlink","xmlns","xml","hastToReact","cap","dash","find","schema","Type","camelcase","dashes","kebab","$0","htmlBase","svgBase","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","ASTERISK","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","lineno","column","updatePosition","str","lines","Position","msg","comments","rules","comment","pos","declaration","trim","declarations","decls","decl","cjs","__importDefault","this","StyleToObject","inline_style_parser_1","require$$0","iterator","styleObject","hasIterator","utilities","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","capitalize","character","trimHyphen","style_to_object_1","utilities_1","require$$1","StyleToJS","pointEnd","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","reason","legacyCause","own","emptyMap","tableCellElement","docs","toJsxRuntime","filePath","developmentCreate","productionCreate","one","mdxExpression","mdxJsxElement","mdxEsm","parentSchema","findComponentFromName","createElementProps","createChildren","addNode","addChildren","expression","assert","crashEstree","createJsxElementProps","jsxDEV","isStaticChildren","alignValue","createProperty","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","cause","allowExpression","identifiers","isIdentifierName","place","domCasing","cssCasing","transformStyleToCssCasing","toDash","urlAttributes","toString","includeImageAlt","includeHtml","all","decodeNamedCharacterReference","characterReference","splice","remove","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","constructs","before","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","normalizeUri","replace","factorySpace","effects","limit","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","lineStart","token","document","initializeDocument","containerConstruct","tokenizeContainer","self","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","stream","seen","nok","classifyCharacter","resolveAll","events","called","resolve","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","nextEvents","movePoint","attentionMarkers","marker","after","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","exit","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","test","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","enter","between","SpliceBuffer","initial","stop","deleteCount","removed","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","slice","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","heading","paragraph","flow","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","resolveText","createTokenizer","parser","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","now","sliceSerialize","sliceStream","write","main","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","accountForPotentialSkip","chunkIndex","go","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","startBufferIndex","endIndex","endBufferIndex","view","atTab","defaultConstructs","creator","postprocess","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","decode","$1","$2","hex","fromMarkdown","compiler","opener","link","onenterdata","codeFlow","emphasis","hardBreak","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","resume","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","siblings","referenceType","combined","remarkParse","blockquote","language","strikethrough","footnoteReference","clobberPrefix","safeId","reuseCounter","sup","revert","subtype","suffix","contents","imageReference","inlineCode","linkReference","results","loose","listLoose","listItemLoose","spread","table","firstRow","tableContent","tableRow","cellIndex","cells","tableCell","tab","trimLines","source","trimLine","handlers","ignore","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","as","out","unpair","arr","flags","deserialize","serialized","EMPTY","typeOf","asString","shouldSkip","TYPE","serializer","strict","json","pair","serialize","lossy","structuredClone$1","any","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","convert","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","is","step","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","footnoteCounts","defaultHandlers","applyData","patch","wrap","handle","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","destination","file","hastTree","bail","toStr","defineProperty","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","src","copyIsArray","clone","prototype","trough","pipeline","run","middlewareIndex","middelware","wrapped","fnExpectsCallback","done","exception","then","minpath","basename","dirname","extname","join","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","joined","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","pathname","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","proto","Processor","attacher","assertUnfrozen","transformer","realFile","vfile","assertParser","assertCompiler","executor","reject","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","namespace","addPlugin","addList","addPreset","add","plugin","plugins","entryIndex","primary","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","processor","createProcessor","createFile","post","rehypePlugins","remarkPlugins","remarkRehypeOptions","allowedElements","allowElement","components","disallowedElements","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","colon","questionMark","numberSign","parseMarkdownIntoBlocks","markdown","marked","MemoizedMarkdownBlock","ReactMarkdown","prevProps","nextProps","MemoizedMarkdown","block","OptionItem","CaretIcon","ExpandArrowIcon","outputParamsToOptions","params","fieldsToOptions","flattenSourceFields","findFieldByName","found","VALID_TYPE_MAP","EMPTY_SET","filterFieldsByType","targetType","selfMatches","generalMatches","OutputConfigEditor","sourceFields","targetFields","dropdownTarget","setDropdownTarget","searchText","setSearchText","collapsedParents","setCollapsedParents","sourceOptions","targetOptions","handleDropdownOpenChange","handleAdd","handleDelete","handleSelectSourceField","newItem","targetOption","handleSelectTargetField","toggleParent","matchSearch","filterFields","flatSourceFields","filteredSourceFields","searchedTargetFields","fieldRowCls","selectedSourceType","rowTargetFields","isParent","isCollapsed","ScrollToBottomBtn","SplitLine","TabRadioGroup","RadioGroupPrimitive.Root","TabRadioItem","tooltips","RadioGroupPrimitive.Item","UserTextMsgBubble","useResizableWidth","range","initialWidth","invertDrag","storageKey","minWidth","maxWidth","resolveInitialWidth","stored","parsed","stateRef","handleMouseMove","adjustedDelta","newWidth","hasDraggedRef","handleMouseUp","handleMouseDown","TRANSITION","TRANSITION_FALLBACK_MS","useColumnAppear","hidden","appearing","setAppearing","prevHiddenRef","colRef","onTransitionEnd","fallback","willChange","transitionStyle","OfficeContainer","headerHeight","hideLeftCol","leftColWidthRange","rightColWidthRange","leftColCls","rightColCls","leftColHeaderElement","leftColContentElement","rightColHeaderElement","rightColContentElement","fullscreenPart","isRightResizable","activeRange","transitioningRef","mountRef","isLeftFullscreen","isRightFullscreen","isFullscreen","leftHidden","rightHidden","leftColRef","leftTransitionStyle","rightColRef","rightTransitionStyle","leftColInnerRef","rightColInnerRef","getColWidth","col","raf","leftW","rightW","resolved","onWidthTransitionEnd","leftEl","rightEl","borderColorCls","leftFlexCls","rightFlexCls","WarningMessage","CollapsiblePrimitive.Root","CollapsiblePrimitive.CollapsibleContent","FieldIcon","FieldChecker","isSubField","onLoaded","widget","typeDesc","isSubForm","subFields","subCheckedMap","setSubCheckedMap","handleSubFieldChange","subChecked","subField","handleCheck","extraPadding","Checker","SubFieldChecker","handleCheckChange","SubformFieldsValueChecker","subformField","subformValue","subformRecords","openAll","setOpenAll","rowData","fData","FieldValueChecker","FieldCheckerListMsg","checkedMap","setCheckedMap","allChecked","someChecked","useImperativeHandle","handleToggleAll","newMap","parentFieldName","FieldValueCheckerListMsg","ClearIcon","CheckIcon","inputBaseCls","TextInput","showLabel","showDescription","FieldWrapper","NumberInput","TextareaInput","PasswordInput","show","setShow","DateTimeInput","dateValue","RangeNumberInput","rangeValue","RangeDateTimeInput","UploadInput","service","uploading","setUploading","fileRef","handleFileChange","currentFileName","chinaAddressData","it","ComboInput","asyncItems","setAsyncItems","staticItems","hasAsync","displayItems","CheckboxGroupInput","selectedValues","itemValue","RadioGroupInput","getSearchFn","AsyncPicker","keyword","setKeyword","setOptions","setSelectedLabel","nameMap","setNameMap","searchFn","selectedIdSet","users","doSearch","kw","nextMap","handleClear","handleRemoveMultiple","handleClearAllMultiple","hasSelectionMulti","showClearMulti","TextMultiSelect","labelMap","setLabelMap","selectedSet","provinceList","CascadingAddressInput","provinceRef","cityRef","districtRef","addrValue","selectedProvince","selectedCity","selectedDistrict","cityList","districtList","handleSelectProvince","province","handleSelectCity","city","handleSelectDistrict","district","scrollToSelected","SeparatorDisplay","ButtonDisplay","SubformPlaceholder","labelCls","descriptionCls","requiredCls","isRequired","FieldLabel","FieldDescription","FieldValueInput","operator","global","gecko","ie_upto10","ie_11up","edge","ie_version","qtwebkit","chrome","chrome_version","presto","safari","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","flipCtrlCmd","captureRightClick","classTest","cls","rmClass","removeChildren","removeChildrenAndAdd","elt","eltP","endNode","contains","activeElt","activeElement","addClass","joinClasses","selectInput","cm","bind","copyObj","overwrite","countColumn","tabSize","startValue","nextTab","Delayed","ms","indexOf","scrollerGap","Pass","sel_dontScroll","sel_mouse","sel_move","findColumn","goal","skipped","spaceStrs","spaceStr","lst","insertSorted","score","priority","createObj","nonASCIISingleCaseWordChar","isWordCharBasic","ch","isWordChar","extendingChars","isExtendingChar","skipExtendingChars","findFirst","pred","midF","mid","iterateBidiSections","bidiOther","getBidiPartAt","bidiOrdering","lowTypes","arabicTypes","charType","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","outerType","i$1","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","i$5","cur$1","type$4","i$6","end$1","replace$1","j$1","i$7","at","j$2","nstart","getOrder","noHandlers","on","emitter","getHandlers","off","signal","signalDOMEvent","override","e_defaultPrevented","signalCursorActivity","hasHandler","eventMixin","ctor","e_preventDefault","e_stopPropagation","e_stop","e_target","e_button","dragAndDrop","div","zwspSupported","zeroWidthElement","measure","badBidiRects","hasBadBidiRects","txt","r0","r1","splitLinesAuto","nl","rt","hasCopyEvent","badZoomedRects","hasBadZoomedRects","fromRange","modes","mimeModes","defineMode","defineMIME","mime","spec","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","prop$1","extendMode","copyState","nstate","innerMode","startState","a1","a2","StringStream","lineOracle","caseInsensitive","cased","substr","inner","oracle","getLine","sz","getBetween","getLines","updateLineHeight","diff","lineNo","no","lineAtHeight","outer","lh","isLine","lineNumberFor","Pos","cmp","equalCursorPos","copyPos","maxPos","minPos","clipLine","clipPos","clipToLen","linelen","clipPosArray","SavedContext","lookAhead","saved","highlightLine","forceToEnd","st","lineClasses","runMode","overlay","i_end","getLineStyles","updateFrontier","getContextBefore","resetState","precise","findStartLine","processLine","startAt","callBlankLine","readToken","Token","takeToken","asArray","tokens","extractLineClasses","lineClass","flattenSpans","curStart","curStyle","mName","minindent","minline","lim","indented","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","op","inThisOp","markedSpansBefore","old","startCh","isInsert","nw","startsBefore","endsAfter","markedSpansAfter","endCh","stretchSpansOverChange","change","oldFirst","oldLast","sameLine","span$1","found$1","clearEmptySpans","newMarkers","gapMarkers","removeReadOnlyRanges","markers","mk","newParts","dfrom","dto","detachMarkedSpans","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lineIsHidden","lineIsHiddenInner","heightAtLine","lineObj","lineLength","findMaxLine","Line","markedSpans","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","buildLineContent","lineView","builder","buildToken","buildTokenBadBidi","allowFrontierUpdate","insertLineContent","defaultSpecialCharPlaceholder","startStyle","endStyle","splitSpaces","special","mustWrap","txt$1","tabWidth","fullStyle","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","allText","nextChange","spanStyle","spanEndStyle","spanStartStyle","collapsed","foundBookmarks","endStyles","upto","tokenText","LineView","buildViewArray","nextPos","operationGroup","pushOperation","fireCallbacksForOps","finishOperation","endCb","orphanDelayedCallbacks","signalLater","fireOrphanDelayed","delayed","updateLineForChanges","dims","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","updateLineBackground","getLineContent","ext","built","textClass","wrap$1","gutterWrap","isWidget","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","ws","positionLineWidget","widgetHeight","parentStyle","eventInWidget","paddingTop","paddingVert","paddingH","scrollGap","displayWidth","displayHeight","ensureLineHeights","wrapping","curWidth","heights","mapFromLineView","updateExternalMeasurement","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","prepared","varHeight","measureCharInner","nullRect","nodeAndOffsetInLineMap","collapse","mStart","mEnd","getUsefulRect","maybeUpdateRectForZooming","rSpan","charWidth","rtop","rbot","bot","scaleX","scaleY","clearLineMeasurementCacheFor","clearLineMeasurementCache","clearCaches","pageScrollX","pageScrollY","widgetTopHeight","widgets","intoCoordSystem","includeWidgets","yOff","lOff","xOff","fromCoordSystem","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","coordsCharInner","rangeEnd","wrappedLineExtent","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","chAround","boxAround","baseX","atLeft","atStart","_lineNo","closestDist","endX","dist","measureText","textHeight","pre","gutterLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","e$1","colDiff","regChange","lendiff","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","dirty","updateSelection","prepareSelection","curFragment","selFragment","customCursor","drawSelectionCursor","drawSelectionRange","charPos","otherCursor","cmpCoords","leftSide","rightSide","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","extent","fromPos","toPos","openStart","openEnd","openLeft","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","ensureFocus","delayBlurEvent","updateHeightsInViewport","prevBottom","viewTop","oldHeight","mustScroll","updateWidgetHeight","chWidth","visibleLines","ensureFrom","ensureTo","maybeScrollWindow","doScroll","scrollNode","scrollPosIntoView","margin","changed","endCoords","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","screen","docBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","isScroller","alignHorizontally","measureForScrollbars","gutterW","docH","NativeScrollbars","vert","horiz","needsH","needsV","sWidth","totalWidth","bar","delay","maybeDisable","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","scrollbarModel","initScrollbars","nextOpId","startOperation","endOperation","endOperations","ops","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","maybeClipScrollbars","DisplayUpdate","updateDisplayIfNeeded","takeFocus","setDocumentHeight","postUpdateDisplay","unhidden","runInOp","operation","methodOp","docMethodOp","highlightWorker","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","selectionSnapshot","sel","restoreSelection","maybeUpdateLineNumberWidth","different","toUpdate","selSnapshot","patchDisplay","barMeasure","updateNumbersFrom","lineNumbers","rm","updateNumber","updateGutterSpace","comp","innerW","getGutters","gutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","dy","wheelEventPixels","onScrollWheel","pixelsPerUnit","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","ranges","primIndex","here","there","Range","normalizeSelection","mayTouch","prim","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","changes","hint","oldPrev","newPrev","loadMode","resetModeState","isWholeLineUpdate","updateDoc","spansFor","linesFor","firstLine","lastLine","lastText","lastSpans","nlines","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","sharedHist","rel","shared","attachDoc","setDirectionClass","directionChanged","History","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","pushSelectionToHistory","selectionEventCanBeMerged","addSelectionToHistory","dest","removeClearedSpans","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","newSel","replaceOneSelection","setSimpleSelection","filterSelectionChange","setSelectionReplaceHistory","setSelectionNoUndo","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","preventCursorRight","near","movePos","far","selectAll","filterChange","makeChange","ignoreReadOnly","split","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","shiftDoc","distance","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","rebaseHistSelSingle","rebaseHistArray","changeLine","changeType","LeafChunk","BranchChunk","remaining","leaf","spilled","sibling","myIndex","used","LineWidget","adjustScrollWhenAboveVisible","this$1","oldH","addLineWidget","aboveVisible","nextMarkerId","TextMarker","withOp","visual","dHeight","markText","markTextShared","curLine","updateMaxLine","SharedTextMarker","findSharedMarkers","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","linked","subMarker","nextDocId","Doc","lineSep","dup","undone","forceSplit","gen","histData","gutterID","where","realOpts","sepSize","copyHistory","CodeMirror","splitIds","lastDrop","onDrop","clearDragCursor","files","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","reader","text$1","onDragStart","img","onDragOver","frag","forEachCodeMirror","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","keyNames","keyMap","normalizeKeyName","ctrl","cmd","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","addModifierNames","keyName","deleteNearSelection","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","moveInStorageOrder","prep","moveVisually","bidi","mv","getWrappedLineExtent","searchInVisualLine","getRes","res","nextCh","commands","leftPos","rightPos","lineStartSmart","lineEnd","sels","firstNonWS","inWS","doHandleBinding","bound","dropShift","prevShift","lookupKeyForEditor","stopSeq","dispatchKey","seq","dispatchKeyInner","handleKeyBinding","handleCharBinding","lastStoppedKey","handled","showCrossHair","lineDiv","up","onKeyUp","onKeyPress","keyCode","charCode","DOUBLECLICK_DELAY","PastClick","button","lastClick","lastDoubleClick","clickRepeat","onMouseDown","clickInGutter","repeat","handleMappedButton","leftButtonDown","configureMouse","behavior","contained","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","e2","rangeForUnit","unit","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","oldRange","ranges$1","bidiSimplify","editorSize","curCount","move","anchorLine","headIndex","usePart","gutterEvent","prevent","mX","mY","lineBox","gutter","onContextMenu","contextMenuInGutter","themeChanged","Init","optionHandlers","defineOptions","deflt","notOnInit","newBreaks","wrappingChanged","integer","dragDropChanged","wasOn","funcs","registerEventHandlers","initHooks","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","farAway","inp","indentLine","how","aggressive","curSpace","curSpaceString","indentation","indentString","pos$1","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","updateInput","changeEvent","triggerElectric","handlePaste","pasted","copyableRanges","lineRange","disableBrowserMagic","spellcheck","autocorrect","autocapitalize","hiddenTextarea","addEditorMethods","helpers","maps","overlays","newRanges","help","vspace","hspace","amount","findPosH","goalColumn","findPosV","goals","headPos","startChar","scroller","interpret","phraseText","phrases","predicate","origDir","lineDir","findNextLine","moveOnce","boundToLine","astral","sawType","pageSize","moveAmount","ContentEditableInput","belongsToInput","onCopyCut","kludge","hadFocus","curAnchor","domToPos","curFocus","posToDOM","rng","isInGutter","fromIndex","fromNode","toIndex","toNode","newText","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","scan","badPos","bad","closing","extraLinebreak","recognizeMarker","addText","cmText","markerID","isBlock","lineNode","locateNodeInLineView","textNode","topNode","curNode","dist$1","prepareCopyCut","_display","opts","wrapOff","lineOff","drawn","typing","missed","prevInput","same","oldCSS","oldWrapperCSS","wrapperBox","oldScrollY","rehide","prepareSelectAllHack","extval","mouseup","fromTextArea","textarea","hasFocus","save","realSubmit","wrappedSubmit","addLegacyProps","dontDelegate","createFieldTagDom","iconSpan","textSpan","resolveFieldWidgetInfo","dotIndex","parentName","childName","addFieldToCM","tagNode","getTemplateFromCM","lineElements","lineEl","lineText","walkLineNode","setTemplateToCM","template","PromptInput","cmRef","insertBtnRef","isInternalUpdateRef","fieldsRef","instance","updatePlaceholder","prevFieldsLenRef","currentTemplate","fieldsBecameAvailable","handleFieldSelect","setInsertBtnRef","AgentHelperMainLayout","TopBar","Main","SideBar","OPTIONS","ConditonQuantifierSelect","ConditonTriggerDescription","targetName","quantifier","defaultQuantifier","onQuantifierChange","quantifierPrefixStr","quantifierSuffixStr","findFieldKey","targetField","generateId","ConditionItem","onRemoveClick","idRef","internalField","setInternalField","internalKey","setInternalKey","internalOperator","setInternalOperator","getDefaultOperator","currentKey","currentOperator","currentValue","fieldType","availableOperators","getAvailableOperators","emitChange","newOperator","handleOperatorChange","isEmptyOp","isRangeOp","isMultiOp","handleValueChange","hideValueInput","ConditionGroup","handleItemChange","nextItems","handleRemoveItem","createEmptyItem","FilterFieldTypeBlacklist","ConditionInput","allFields","defaultCondition","handleQuantifierChange","nextQuantifier","handleAddCondition","handleDeleteAll","showDeleteAll","RadioUnchecked","RadioChecked","FieldChip","onRemove","FieldEditPreferenceSelect","selectedFields","handleModeChange","newMode","handleAddField","_nodeKey","newFields","handleRemoveField","isSpecified","createColumnHelper","accessor","functionalUpdate","updater","makeStateUpdater","isNumberArray","flattenBy","getChildren","flat","recurse","subArr","getDeps","depArgs","depTime","newDeps","dep","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","num","getMemoOptions","tableOptions","debugLevel","_tableOptions$debugAl","define_process_env_default","createCell","columnId","getRenderValue","_cell$getValue","feature","createColumn","columnDef","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","_options$id","header","leafHeaders","recurseHeader","Headers","allColumns","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","_row$getValue","parentRows","currentRow","parentRow","allCells","ColumnFaceting","includesString","filterValue","_filterValue$toString","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","defaultState","_table$initialState$c","_table$initialState","aggregationFns","_leafRows","childRows","sum","leafRows","nums","_columnId","ColumnGrouping","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","ColumnOrdering","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","supported","ColumnVisibility","childColumns","makeVisibleColumnsMethod","getColumns","_value","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","_selection$row$id","_row$subRows3","allChildrenSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","builtInFeatures","firstRows","_table$options$sortin","_table$options$sortin2","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","createTable","_options$_features","_options$initialState","_features","mergeOptions","_feature$getInitialSt","queuedTimeout","coreInstance","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","accessRows","originalRows","_row$originalSubRows","flexRender","isReactComponent","component","isClassComponent","isExoticComponent","useReactTable","resolvedOptions","tableRef","setState","EmptyTableIcon","DataTable","emptyText","emptyIcon","TRIGGER_TYPE_OPTIONS","ExecLogFilter","onFilter","execUserOptions","execResultOptions","startDate","setStartDate","endDate","setEndDate","execUserId","setExecUserId","setTriggerType","execResult","setExecResult","handleStartDateChange","handleEndDateChange","handleExecUserIdChange","handleTriggerTypeChange","handleExecResultChange","handleFilter","allExecUserOptions","allExecResultOptions","allTriggerTypeOptions","triggerTypePortalContainer","setTriggerTypeTriggerRef","execResultPortalContainer","setExecResultTriggerRef","DEFAULT_SPRING_ANIMATION","STICK_TO_BOTTOM_OFFSET_PX","SIXTY_FPS_INTERVAL_MS","RETAIN_ANIMATION_DURATION_MS","mouseDown","useStickToBottom","escapedFromLock","updateEscapedFromLock","isAtBottom","updateIsAtBottom","isNearBottom","setIsNearBottom","optionsRef","isSelecting","setIsAtBottom","setEscapedFromLock","lastCalculation","scrollBehavior","targetScrollTop","calculatedScrollTop","scrollToBottom","scrollOptions","waitElapsed","mergeAnimations","ignoreEscapes","durationElapsed","startTarget","promise","tick","tickDelta","stopScroll","ignoreScrollToTop","lastScrollTop","isScrollingDown","isScrollingUp","useRefCallback","previousHeight","difference","animation","animationCache","animations","instant","StickToBottomContext","StickToBottom","resize","mass","damping","stiffness","currentTargetScrollTop","contextRef","customTargetScrollTop","defaultInstance","scrollClassName","useStickToBottomContext","useContext","Conversation","ConversationContent","ConversationScrollButton","handleScrollToBottom","extractTextPartMeta","IsFieldsJsonPart","IsAgentCallingPart","GetSpecialPartType","GetFieldJsonInfo","IsSuggesstionPart","NeedToAppendFieldsSaveConfirm","extractFormName","sanitizeText","mergeConsecutiveTargets","isTarget","getIconValue","getIconOption","iconValue","ensureEndSlash","formatJSONIfValid","MIME_MAP","getMimeType","filename","serverType","downloadFile","response","blob","disposition","utf8Match","asciiMatch","contentType","uploadFile","uploadEndpoint","formData","createStoreImpl","listeners","partial","previousState","listener","api","createStore","identity","useStore","createImpl","useBoundStore","useAIOfficeStore","newPart","PreviewMessageWrapper","role","requiresScrollPadding","hasTextPart","hasFileType","agentId","isLoading","onGenerate","isBot","isUser","showAction","visibilityCls","pointerEventsCls","getAgent","msgAgent","avatarJsx","actionBarJsx","MarkdownMsgpart","collapsible","collapsibleTitle","status","typoCls","rawContent","displayContent","formattedJSON","ErrorFallbackMsg","ErrorBoundary","PluginRuntimeContext","usePluginRuntime","runtime","PluginRuntimeProvider","useSlotCom","slotName","uiService","setComponents","unsubscribeSlotsChange","comps","SlotComSandBox","_error","errorInfo","ShadowSlotRender","hostRef","host","injectHostStylesIntoShadow","visibleComponents","matcher","shadow","Com","asyncNoop","useMiddlewareRunner","hookPoint","onMiddlewareChange","unsubscribe","changedHook","useTransformedData","setResult","runnerRef","useMsgRegenerator","regenerate","currentWorkingAgent","handleGenerate","useServiceGetter","PreviewMessage","addToolOutput","sendMessage","setMessages","subP","transformedParts","bsPlatformBasicService","generator","handleCopy","textParts","OpeningLines","Messages","messagesContainerRef","messages","isLast","ChatFrame","messagesArea","inputArea","fastDeepEqual","equal","SelectPrimitive.ItemIndicator","latin1BidiTypes","nonLatin1BidiRanges","classifyCodePoint","codePoint","lo","hi","computeBidiLevels","sawBidi","codeUnitLength","second","startLevel","levels","sor","lastType","bDir","computeSegmentLevels","normalized","segStarts","bidiLevels","segLevels","collapsibleWhitespaceRunRe","needsWhitespaceNormalizationRe","getWhiteSpaceProfile","whiteSpace","normalizeWhitespaceNormal","normalizeWhitespacePreWrap","sharedWordSegmenter","segmenterLocale","getSharedWordSegmenter","arabicScriptRe","combiningMarkRe","decimalDigitRe","containsArabicScript","isCJKCodePoint","isCJK","endsWithLineStartProhibitedText","getLastCodePoint","kinsokuStart","leftStickyPunctuation","keepAllGlueChars","containsCJKText","endsWithKeepAllGlueText","canContinueKeepAllTextRun","previousText","kinsokuEnd","forwardStickyGlue","arabicNoSpaceTrailingPunctuation","myanmarMedialGlue","closingQuoteChars","isLeftStickyPunctuationSegment","segment","isEscapedQuoteClusterSegment","sawPunctuation","isCJKLineStartProhibitedSegment","isForwardStickyClusterSegment","sawQuote","previousCodePointStart","lastCodeUnit","maybeHigh","highCodeUnit","splitTrailingForwardStickyCluster","chars","splitIndex","getRepeatableSingleCharRunChar","isWordLike","materializeDeferredSingleCharRun","texts","lengths","materialized","hasArabicNoSpacePunctuation","containsArabic","lastCodePoint","endsWithMyanmarMedialGlue","splitLeadingSpaceAndMarks","marks","endsWithClosingQuote","classifySegmentBreakChar","whiteSpaceProfile","breakCharRe","joinTextParts","joinReversedPrefixParts","prefixParts","splitSegmentByBreakKind","pieces","currentKind","currentTextParts","currentStart","currentWordLike","wordLike","isTextRunBoundary","urlSchemeSegmentRe","isUrlLikeRunStart","segmentation","isUrlQueryBoundarySegment","mergeUrlLikeRuns","kinds","starts","mergedParts","endsQueryPrefix","compactLen","mergeUrlQueryRuns","queryParts","queryStart","numericJoinerChars","asciiPunctuationChainSegmentRe","asciiPunctuationChainTrailingJoinersRe","segmentContainsDecimalDigit","isNumericRunSegment","mergeNumericRuns","mergeAsciiPunctuationChains","endsWithJoiners","nextText","splitHyphenatedNumericRuns","shouldSplit","splitText","mergeGlueConnectedTextRuns","glueParts","glueStart","glueText","carryTrailingForwardStickyAcrossCJKBoundary","buildMergedSegmentation","profile","wordSegmenter","mergedLen","mergedTexts","mergedTextParts","mergedWordLike","mergedKinds","mergedStarts","mergedSingleCharRunChars","mergedSingleCharRunLengths","mergedContainsCJK","mergedContainsArabicScript","mergedEndsWithClosingQuote","mergedEndsWithMyanmarMedialGlue","mergedHasArabicNoSpacePunctuation","piece","appendPieceToPrevious","prevIndex","pieceContainsCJK","pieceContainsArabicScript","pieceEndsWithClosingQuote","pieceEndsWithMyanmarMedialGlue","pieceLastCodePoint","isText","repeatableSingleCharRunChar","forwardStickyPrefixParts","nextLiveIndex","compacted","withMergedUrls","compileAnalysisChunks","startSegmentIndex","mergeKeepAllTextSegments","pendingTextParts","pendingWordLike","pendingStart","pendingContainsCJK","pendingCanContinue","flushPendingText","textContainsCJK","textCanContinue","analyzeText","wordBreak","measureContext","segmentMetricCaches","cachedEngineProfile","MAX_PREFIX_FIT_GRAPHEMES","emojiPresentationRe","maybeEmojiRe","sharedGraphemeSegmenter","emojiCorrectionCache","getMeasureContext","getSegmentMetricCache","font","getSegmentMetrics","seg","metrics","getEngineProfile","ua","isChromium","parseFontSize","getSharedGraphemeSegmenter","isEmojiGrapheme","textMayContainEmoji","getEmojiCorrection","correction","ctx","canvasW","domW","countEmojiGraphemes","graphemeSegmenter","getEmojiCount","getCorrectedSegmentWidth","emojiCorrection","getSegmentBreakableFitAdvances","graphemes","gs","advances","grapheme","graphemeMetrics","previousGrapheme","previousWidth","currentWidth","pairMetrics","prefixWidth","prefixMetrics","nextPrefixWidth","getFontMeasurementState","needsEmojiCorrection","consumesAtLineStart","breaksAfter","normalizeLineStartSegmentIndex","segmentIndex","endSegmentIndex","getTabAdvance","lineWidth","tabStopAdvance","remainder","getLeadingLetterSpacing","hasContent","getLineEndContribution","leadingSpacing","segmentContribution","getTabTrailingLetterSpacing","getWholeSegmentFitContribution","segmentWidth","getBreakOpportunityFitContribution","getLineEndPaintContribution","getBreakableGraphemeAdvance","baseAdvance","getBreakableCandidateFitWidth","candidatePaintWidth","fitSoftHyphenBreak","graphemeFitAdvances","lineFitEpsilon","discretionaryHyphenWidth","letterSpacing","fitCount","fittedWidth","nextWidth","walkPreparedLinesSimple","onLine","widths","breakableFitAdvances","fitLimit","lineCount","lineW","lineStartSegmentIndex","lineStartGraphemeIndex","lineEndSegmentIndex","lineEndGraphemeIndex","pendingBreakSegmentIndex","pendingBreakPaintWidth","clearPendingBreak","emitCurrentLine","endGraphemeIndex","startLineAtSegment","startLineAtGrapheme","graphemeIndex","appendWholeSegment","appendBreakableSegmentFrom","startGraphemeIndex","fitAdvances","gw","breakAfter","walkPreparedLinesRaw","engineProfile","pendingBreakFitWidth","pendingBreakKind","advance","updatePendingBreakForWholeSegment","fitAdvance","paintAdvance","baseGw","continueSoftHyphenBreakableSegment","fitWidths","emitEmptyChunk","currentBreakFitWidth","currentBreakPaintWidth","nextSegmentIndex","finalPaintWidth","createEmptyPrepared","includeSegments","buildBaseCjkUnits","segText","units","unitParts","unitStart","unitContainsCJK","unitEndsWithClosingQuote","unitIsSingleKinsokuEnd","pushUnit","startUnit","graphemeContainsCJK","appendToUnit","graphemeEndsWithClosingQuote","addInternalLetterSpacing","graphemeCount","measureAnalysis","analysis","lineEndFitAdvances","lineEndPaintAdvances","simpleLineWalkFastPath","spacingGraphemeCounts","preparedStartByAnalysisIndex","pushMeasuredSegment","lineEndFitAdvance","lineEndPaintAdvance","breakableFitAdvance","spacingGraphemeCount","pushMeasuredTextSegment","allowOverflowBreaks","textMetrics","baseLineEndFitAdvance","fitMode","mi","segWordLike","segKind","segStart","segMetrics","measuredUnits","mapAnalysisChunksToPreparedChunks","preparedEndSegmentIndex","preparedChunks","consumedEndSegmentIndex","prepareInternal","prepareWithSegments","getInternalPrepared","measureNaturalWidth","useTextareaIndent","PromptInputTextarea","react","minHeight","maxHeight","disableAutoResize","resizeOnNewLinesOnly","indent","PromptInputToolbar","PromptInputTools","getIconForStatus","Loader","XIcon","SendIcon","PromptInputSubmit","PureAttachmentPreviewList","uploadQueue","previewItems","AttachmentPreviewList","PureAttachmentsButton","fileInputRef","AttachmentsButton","useVoiceInput","endpoint","onText","onDone","onError","isRecording","setIsRecording","isConnecting","setIsConnecting","isRecognizing","setIsRecognizing","audioContextRef","processorRef","sourceRef","wsRef","streamRef","track","audioContext","hasReceivedResult","inputData","pcmData","float32ToInt16","float32Array","int16Array","PureVoiceButton","VoiceButton","ControlledVoiceButton","onOutput","savedInputRef","stopRecording","toggleRecording","ClearBtn","chatId","clearMsg","PureStopButton","StopButton","MAX_ATTACHMENT_COUNT","MAX_FILE_SIZE_MB","ACCEPT_FILE_TYPES","useFileUpload","fileUploadEndpoint","setAttachments","textareaRef","setUploadQueue","uploadAbortControllers","clearAttachmentsAndUploadQueue","upload","uploadPromises","controller","uploadedAttachments","successfullyUploadedAttachments","currentAttachments","imageItems","handleRemoveAttachment","PureInputToolbar","asrEndpoint","setInput","canSubmit","hasAcceptableFileType","InputToolbar","useTextInput","adjustHeight","resetHeight","finalValue","useMessageSubmit","overrideAttachments","useOfficeEvent","eventName","officeInst","AIOffice","useEventMsgSubmit","submitForm","handleMsg","attachmentsUrl","baseUrl","PureMultimodalInput","handleInput","MultimodalInput","getAsrProtocol","InputArea","multiModalInputJsx","symbol","AISDKError","_AISDKError","name14","marker15","markerSymbol","getErrorMessage","name3","marker4","symbol4","_a4","_b4","InvalidArgumentError","name6","marker7","symbol7","_a7","_b7","JSONParseError","name12","marker13","symbol13","_a13","_b13","TypeValidationError","_TypeValidationError","ParseError","_arg","createParser","onEvent","onRetry","onComment","incompleteLine","isFirstChunk","feed","newChunk","incomplete","splitLines","parseLine","dispatchEvent","fieldSeparatorIndex","processField","searchIndex","crIndex","lfIndex","EventSourceParserStream","$constructor","initializer","init","def","Parent","Definition","$ZodAsyncError","$ZodEncodeError","globalConfig","newConfig","getEnumValues","numericValues","jsonStringifyReplacer","cached","nullish","cleanRegex","floatSafeRemainder","valDecCount","stepString","stepDecCount","decCount","valInt","stepInt","EVALUATING","defineLazy","assignProp","mergeDefs","defs","mergedDescriptors","descriptors","esc","slugify","captureStackTrace","_args","allowsEval","prot","shallowClone","propertyKeyTypes","escapeRegex","cl","normalizeParams","_params","optionalKeys","shape","NUMBER_FORMAT_RANGES","pick","currDef","newShape","omit","existingShape","_shape","safeExtend","Class","oldShape","aborted","prefixIssues","issues","iss","unwrapMessage","finalizeIssue","full","_k","_j","_i","getLengthableOrigin","issue","util.jsonStringifyReplacer","$ZodError","$ZodRealError","flattenError","mapper","fieldErrors","formErrors","formatError","processError","_parse","_Err","_ctx","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","_parseAsync","_safeParse","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","guid","uuid","version","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","e164","dateSource","timeSource","hhmm","timeRegex","_null","lowercase","uppercase","$ZodCheck","core.$constructor","numericOriginMap","$ZodCheckLessThan","bag","$ZodCheckGreaterThan","$ZodCheckMultipleOf","util.floatSafeRemainder","$ZodCheckNumberFormat","isInt","minimum","maximum","util.NUMBER_FORMAT_RANGES","regexes.integer","$ZodCheckMaxLength","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","$ZodCheckStringFormat","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","minIndent","dedented","$ZodType","runChecks","isAborted","util.aborted","asyncResult","currLen","handleCanaryResult","canary","checkResult","util.defineLazy","$ZodString","regexes.string","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","trimmed","$ZodEmoji","regexes.emoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","regexes.time","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","address","prefixNum","isValidBase64","$ZodBase64","regexes.base64","isValidBase64URL","regexes.base64url","padded","$ZodBase64URL","$ZodE164","regexes.e164","isValidJWT","algorithm","tokensParts","parsedHeader","$ZodJWT","$ZodNumber","regexes.number","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","$ZodNull","regexes.null","$ZodUnknown","$ZodNever","handleArrayResult","final","util.prefixIssues","$ZodArray","proms","handlePropertyResult","isOptionalOut","normalizeDef","okeys","util.optionalKeys","handleCatchall","unrecognized","keySet","_catchall","$ZodObject","sh","newSh","_normalized","util.cached","propValues","util.isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","parseStr","util.esc","fastpass","jit","core.globalConfig","fastEnabled","util.allowsEval","handleUnionResults","nonaborted","$ZodUnion","patterns","util.cleanRegex","single","async","$ZodDiscriminatedUnion","_super","pv","disc","$ZodIntersection","handleIntersectionResults","mergeValues","util.isPlainObject","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","unrecKeys","unrecIssue","bothKeys","$ZodRecord","recordKeys","keyResult","retryResult","$ZodEnum","util.getEnumValues","valuesSet","util.propertyKeyTypes","$ZodLiteral","$ZodTransform","core.$ZodEncodeError","_out","handleOptionalResult","$ZodOptional","$ZodExactOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","$ZodReadonly","handleReadonlyResult","$ZodLazy","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_meta","pm","registry","globalRegistry","_string","util.normalizeParams","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_number","_int","_boolean","_unknown","_never","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_regex","checks.$ZodCheckRegex","_lowercase","checks.$ZodCheckLowerCase","_uppercase","checks.$ZodCheckUpperCase","_includes","includes","checks.$ZodCheckIncludes","_startsWith","checks.$ZodCheckStartsWith","_endsWith","checks.$ZodCheckEndsWith","_overwrite","tx","checks.$ZodCheckOverwrite","_normalize","_trim","_toLowerCase","_toUpperCase","_slugify","util.slugify","_array","_custom","norm","_refine","_superRefine","_check","_issue","initializeContext","process","overrideSchema","_json","isTransforming","extractDefs","idToSchema","makeURI","defsSegment","externalId","uriGenerator","defUriPrefix","defId","extractToDef","finalize","flattenRef","zodSchema","_cached","refSeen","refSchema","parentSeen","finalized","createStandardJSONSchemaMethod","_err","_schema","createToJSONSchemaMethod","processors","libraryOptions","formatMap","stringProcessor","contentEncoding","regexes","numberProcessor","multipleOf","exclusiveMaximum","exclusiveMinimum","booleanProcessor","bigintProcessor","symbolProcessor","nullProcessor","undefinedProcessor","voidProcessor","neverProcessor","anyProcessor","unknownProcessor","dateProcessor","enumProcessor","literalProcessor","vals","nanProcessor","templateLiteralProcessor","fileProcessor","successProcessor","customProcessor","functionProcessor","transformProcessor","mapProcessor","setProcessor","arrayProcessor","objectProcessor","allKeys","requiredKeys","unionProcessor","isExclusive","intersectionProcessor","isSimpleIntersection","allOf","tupleProcessor","prefixPath","restPath","prefixItems","recordProcessor","keyType","keyBag","valueSchema","keyValues","validKeyValues","nullableProcessor","nonoptionalProcessor","defaultProcessor","prefaultProcessor","catchProcessor","catchValue","pipeProcessor","innerType","readonlyProcessor","promiseProcessor","optionalProcessor","lazyProcessor","allProcessors","toJSONSchema","schemas","external","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","ZodRealError","core.formatError","core.flattenError","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","encode","core._encode","core._decode","encodeAsync","core._encodeAsync","decodeAsync","core._decodeAsync","safeEncode","core._safeEncode","safeDecode","core._safeDecode","safeEncodeAsync","core._safeEncodeAsync","safeDecodeAsync","core._safeDecodeAsync","ZodType","core.$ZodType","util.mergeDefs","core.clone","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","refine","refinement","superRefine","checks.overwrite","optional","exactOptional","nullable","nonoptional","union","intersection","pipe","_default","prefault","_catch","core.globalRegistry","_ZodString","core.$ZodString","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","ZodString","core._email","ZodEmail","core._url","ZodURL","core._jwt","ZodJWT","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","core._string","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","core.$ZodNumber","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","int","checks.multipleOf","core._number","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodBoolean","core.$ZodBoolean","processors.booleanProcessor","core._boolean","ZodNull","core.$ZodNull","processors.nullProcessor","core._null","ZodUnknown","core.$ZodUnknown","processors.unknownProcessor","unknown","core._unknown","ZodNever","core.$ZodNever","processors.neverProcessor","never","core._never","ZodArray","core.$ZodArray","processors.arrayProcessor","core._array","ZodObject","core.$ZodObjectJIT","processors.objectProcessor","_enum","incoming","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","ZodOptional","util.required","ZodNonOptional","strictObject","ZodUnion","core.$ZodUnion","processors.unionProcessor","ZodDiscriminatedUnion","core.$ZodDiscriminatedUnion","discriminatedUnion","discriminator","ZodIntersection","core.$ZodIntersection","processors.intersectionProcessor","ZodRecord","core.$ZodRecord","processors.recordProcessor","record","valueType","ZodEnum","core.$ZodEnum","processors.enumProcessor","newEntries","ZodLiteral","core.$ZodLiteral","processors.literalProcessor","literal","ZodTransform","core.$ZodTransform","processors.transformProcessor","core.$ZodOptional","processors.optionalProcessor","ZodExactOptional","core.$ZodExactOptional","ZodNullable","core.$ZodNullable","processors.nullableProcessor","ZodDefault","core.$ZodDefault","processors.defaultProcessor","util.shallowClone","ZodPrefault","core.$ZodPrefault","processors.prefaultProcessor","core.$ZodNonOptional","processors.nonoptionalProcessor","ZodCatch","core.$ZodCatch","processors.catchProcessor","ZodPipe","core.$ZodPipe","processors.pipeProcessor","in_","ZodReadonly","core.$ZodReadonly","processors.readonlyProcessor","ZodLazy","core.$ZodLazy","processors.lazyProcessor","lazy","ZodCustom","core.$ZodCustom","processors.customProcessor","custom","core._custom","core._refine","core._superRefine","_instanceof","util","assertIs","assertNever","_x","validKeys","filtered","joinValues","separator","objectUtil","ZodError","subs","actualProto","_mapper","firstEl","errorUtil","ZodFirstPartyTypeKind","createIdGenerator","alphabet","alphabetLength","getRuntimeEnvironmentUserAgent","globalThisAny","normalizeHeaders","withUserAgentSuffix","userAgentSuffixParts","normalizedHeaders","currentUserAgentHeader","suspectProtoRx","suspectConstructorRx","secureJsonParse","stackTraceLimit","validatorSymbol","isValidator","lazyValidator","createValidator","validator2","asValidator","standardSchemaValidator","standardSchema","validateTypes","safeValidateTypes","TypeValidationError2","safeParseJSON","parseJsonEventStream","addAdditionalPropertiesToJsonSchema","jsonSchema2","getRelativePath","pathA","pathB","ignoreOverride","getDefaultOptions","parseAnyDef","parseArrayDef","parseDef","parseBigintDef","parseBooleanDef","parseBrandedDef","_def","parseCatchDef","parseDateDef","overrideDateStrategy","integerDateParser","parseDefaultDef","parseEffectsDef","parseEnumDef","isJsonSchema7AllOfType","parseIntersectionDef","mergedAllOf","nestedSchema","additionalProperties","parseLiteralDef","parsedType","emojiRegex","zodPatterns","parseStringDef","addFormat","addPattern","escapeLiteralCheckValue","escapeNonAlphaNumeric","ALPHA_NUMERIC","stringifyRegExpWithFlags","isEscaped","inCharGroup","inCharRange","parseRecordDef","ZodFirstPartyTypeKind2","parseMapDef","parseNativeEnumDef","actualValues","parsedTypes","parseNeverDef","parseNullDef","primitiveMappings","parseUnionDef","types2","uniqueTypes","x2","asAnyOf","anyOf","parseNullableDef","parseNumberDef","parseObjectDef","propDef","propOptional","safeIsOptional","parsedDef","decideAdditionalProperties","parseOptionalDef","innerSchema","parsePipelineDef","parsePromiseDef","parseSetDef","parseTupleDef","parseUndefinedDef","parseUnknownDef","parseReadonlyDef","selectParser","typeName","ZodFirstPartyTypeKind3","forceResolution","seenItem","overrideResult","seenSchema","get$ref","jsonSchemaOrGetter","addMeta","postProcessResult","getRefs","currentPath","zodToJsonSchema","name2","schema2","_a2","zod_to_json_schema_default","zod3Schema","zodSchema2","useReferences","jsonSchema","zod4Schema","z4.toJSONSchema","z4.safeParseAsync","isZod4Schema","schemaSymbol","isSchema","asSchema","__defProp","__export","name16","marker6","symbol6","_a6","NoObjectGeneratedError","AISDKError6","text2","usage","finishReason","VERSION","dataContentSchema","z.union","z.string","z.instanceof","z.custom","_a16","jsonValueSchema","z2.lazy","z2.union","z2.null","z2.string","z2.number","z2.boolean","z2.record","z2.array","providerMetadataSchema","z3.record","z3.string","textPartSchema","z4.object","z4.literal","z4.string","imagePartSchema","z4.union","z4.instanceof","filePartSchema","reasoningPartSchema","toolCallPartSchema","z4.unknown","z4.boolean","outputSchema","z4.discriminatedUnion","z4.array","toolResultPartSchema","systemModelMessageSchema","z5.object","z5.literal","z5.string","userModelMessageSchema","z5.union","z5.array","assistantModelMessageSchema","toolModelMessageSchema","uiMessageChunkSchema","z7.union","z7.strictObject","z7.literal","z7.string","z7.boolean","z7.unknown","z7.custom","z7.enum","isDataUIMessageChunk","mergeObjects","overridesValue","baseValue","isSourceObject","isTargetObject","fixJson","lastValidIndex","literalStart","processValueStart","swapState","processAfterObjectValue","processAfterArrayValue","partialLiteral","parsePartialJson","jsonText","safeParseJSON2","isToolUIPart","isDynamicToolUIPart","isToolOrDynamicToolUIPart","getToolName","createStreamingUIMessageState","lastMessage","messageId","processUIMessageStream","messageMetadataSchema","dataPartSchemas","runUpdateMessageJob","onToolCall","onData","getToolInvocation","toolCallId","toolInvocation","invocation","getDynamicToolInvocation","updateToolPart","_a17","part2","anyOptions","anyPart","updateDynamicToolPart","_b2","updateMessageMetadata","metadata","mergedMetadata","textPart","reasoningPart","toolInvocations","partialToolCall","partialArgs","dataChunk","existingUIPart","chunkArg","consumeStream","createIdGenerator2","createIdGenerator3","SerialJobExecutor","job","resolve2","createIdGenerator4","output_exports","inputSchema","asSchema4","_exhaustiveCheck","parseResult","safeParseJSON4","safeValidateTypes4","convertFileListToFileUIParts","dataUrl","readerEvent","HttpChatTransport","credentials","fetch2","prepareSendMessagesRequest","prepareReconnectToStreamRequest","abortSignal","resolvedBody","resolvedHeaders","resolvedCredentials","baseHeaders","preparedRequest","withUserAgentSuffix10","getRuntimeEnvironmentUserAgent3","DefaultChatTransport","parseJsonEventStream2","AbstractChat","generateId3","generateIdFunc","transport","onFinish","sendAutomaticallyWhen","uiMessage","messageIndex","tool2","errorText","isAbort","isDisconnect","isError","activeResponse","reconnect","throttle","function_","lastCallTime","arguments_","timeSinceLastCall","delayForNextCall","throttleit","__accessCheck","member","__privateGet","__privateAdd","__privateSet","setter","waitMs","throttleFunction","_messages","_status","_messagesCallbacks","_statusCallbacks","_errorCallbacks","_callMessagesCallbacks","_callStatusCallbacks","_callErrorCallbacks","ReactChatState","initialMessages","throttleWaitMs","newStatus","newError","newMessages","Chat","useChat","chatRef","subscribeToMessages","useSyncExternalStore","messagesParam","useMsgAgentIdForAssistantMsg","lastUserAgentId","mergeMessagesByIdForRender","messageMap","orderList","getCleanPartsFromMsg","useOfficeChat","chat","botIdRef","messagesWithAgent","mergedMessages","activeAgentHelper","msgSender","transformedBody","enhancedMsg","useChatTransport","createCommonChatErrorHandler","prevMessages","scopeKey","PluginScopeContext","PluginScopeProvider","useUIAutoMationEvent","evtName","automationService","useService","useChatStatus","useHostApi","chatStatus","setChatStatus","useSafeHostApi","useFieldValueService","createPluginCtx","Ctx","WrappedComponent","scopedComp","useBsHostCtx","hostService","bsHostCtxService","ctxDetail","setCtxDetail","usePreviewerEvent","previewerService","useAgentsAndHelpers","builtIn","useAgents","useAgentHelpers","helpers2agents","useCurrentWorkingAgent","useActiveAgent","helperService","setAgents","globalCtx","fetchAgents","ctxType","agentHelperService","setVersion","helperList","setHelpers","isCtxMatch","setActiveAgent","unsubscribeHelper","BaseAiOfficePlugin","scopedCom","createEventBus","getLastMsgText","usePublisherConfigParser","activeHelper","hostCtxService","hasValidConfig","outputConfig","fillWidget","openFormModal","hostCtxDetail","isHelperCtxMatch","lastBotMsg","parsedMsg","safeParseJson","sourceField","targetValue","currentFieldName","useBotReadyJonsMsg","onParsed","useStdActionTaskParser","taskQueue","runTime","ChatClient","msgs","createServiceProxy","serviceId","boundMethods","receiver","actualService","ServiceRegistry","registeredId","impl","createPluginApi","pluginId","weight","shadowConfig","PluginManager","modulePath","pluginModuleLoader","SystemUIService","slotEntry","updated","newEntry","slotsChanged","createPluginRuntime","serviceRegistry","pluginManager","BuiltInPluginModules","manifest","INSTALLED_PLUGINS","usePreInstalledPlugins","installPlugins","fetchBots","apiEndpoint","resJson","builtInBotConfigMap","collectAgentPluginIds","createCoreService","apiHeaders","evtBus","prevState","refreshAgentPlugins","oldAgent","newAgent","newAgentPluginIds","setFullscreenPart","formStructure","valueGetter","prompt","promptParser","RightColHeaderLayout","LeftColHeaderLayout","AIOfficeApp","minRightColWid","maxRightColWid","leftColWid","setLeftColWid","hostPortal","lColWid","AIOfficeWrapper","apiHeadersRef","coreService","createAIOfficeUI","mountShadowElement","existingWrapper","createOfficeRoot","rootElement","finalContainerStyle","styleCss","officeContainer","currentPortal","triggerRender","mountAIOfficePortal","unmountAIOfficePortal","AIOfficePortal","forceUpdate","StdActionTaskQueue","StdActionTaskFactory","task","success","waiters","Ctor","_AIOffice","rightCol","GetAgentCallingResult","AgentCallingConfirmCom","AgentCallingConfirmPlugin","index$E","useAgentHelperStore","showLog","showAgentSelectView","showForm","agentHelper","ah","agentHelperId","helperId","AgentHelperManagerCom","showManager","platformUtils","AgentNameField","AppSelectField","appGroups","FormActionTriggerSelectField","useFormStructure","formId","setFields","cancelled","structure","FormFieldSelectField","useAppForms","appIdField","hostContext","setForms","FormSelectField","useAgentPublishConfig","selectedAgent","agentInfo","OutputConfigField","PromptInputField","TriggerConditionField","formTriggerType","selectedTriggerSet","nodeTriggerType","selectedNodeTriggerSet","fieldValueService","nodeLabel","labelStr","EditFormFieldPreferenceSelectField","FlowNodeTriggerSelectField","TriggerTimePreferenceSelectField","RepeatPreferenceSelectField","AppRangeConfig","FormRangeConfig","TriggerFormConfig","PromptConfig","OutputConfig","TriggerFieldConfig","FormActionTriggerConfig","FlowNodeTriggerConfig","TriggerConditionConfig","initOnly","FieldEditPreferenceConfig","formActionTriggerType","TriggerTimePreferenceConfig","TriggerRepeatPreferenceConfig","defaultConfiguration","triggerTypeFieldConfigListMap","TriggerTypeField","TriggerDividerField","currentTriggerType","currentTriggerConfig","TriggerFieldRenderer","TriggerFieldsRouter","fieldConfig","mergeConfig","scrollToFirstError","validateAgentHelperForm","hasError","firstErrorFieldName","fieldConfigs","BaseAgentHelperConfigurationForm","onSubmit","setSubmitBtnRef","currentEditingHelper","formRef","FormDrawer","onSaveClick","setShowForm","AgentHelperConfigurationForm","submitBtnRef","setFormShow","isEditing","BsDrawer","hideFooter","columnHelper","TRIGGER_TYPE_LABEL_MAP","logColumns","textColor","AgentHelperExecLogDrawer","agentHelperUuid","logs","setLogs","total","setTotal","filters","setFilters","page","setPage","fetchLogs","filterOverrides","totalPages","triggerTypeOptions","AgentHelperFilter","onTriggerTypeChange","onAgentChange","Header","setVisible","Empty","filteredHelpers","filterTriggerType","onFilterTriggerTypeChange","filterAgentId","onFilterAgentChange","filterKeyword","onFilterKeywordChange","agentHelpers","setShowLog","logViewingHelperId","platformService","exist","newHelper","thisHelper","AgentHelperEntry","drawerTitle","filterAppId","setFilterAppId","setFilterTriggerType","setFilterAgentId","setFilterKeyword","setShowAgentSelectView","searchKeyword","sortOrder","onSortChange","filteredAgents","aDate","bDate","AgentSelectViewInner","category","setCategory","setSearchKeyword","setSortOrder","filteredByCategory","AgentSelectView","CONFIG_FIELDS","TRIGGER_TYPE_MAP","extractConfig","AgentHelperService","persistenceService","TriggerHooksListenerManager","ctxService","offList","triggerHookService","actionType","isCondMet","isHelperCondMet","triggerAction","execTime","AgentHelperManagerPlugin","index$C","AgentSelectCom","setAgent","AgentSelectPlugin","index$A","AgentSelectTrigger","BotIndicatorInTextarea","BotIndicatorInTextareaPlugin","index$y","DefaultOpeningLines","BotSelectionGuardCom","BotSelectionGuardPlugin","index$w","AttachmentMsgPart","specialPayload","handlePartClick","resolvedUrl","imageUrlToBase64","IsFileAttachmentPart","IsFilePart","IsFileAttachmentGroupPart","IsFileGroupPart","createMatcher","IsErrorMsgPart","IsErrorPart","IsFakeMessagePart","IsFakeMsgPart","AttachmentGroupParCom","ErrorMsgPart","errMsg","GetPartErrMsg","FakeMsgPart","getMetaErrorMsg","CommonMsgPartViewerPlugin","index$u","useCurrentBsAppInfo","setApp","newApp","setDetails","details","EntrySelectCom","goto","bsCtx","EntrySelectPlugin","index$s","currentContext","index$q","FormFillingInputEnhancer","FillingOpeningLines","hostApi","utilsService","index$o","FormFillingOpeningLinesPlugin","useBatchFillingStore","allMessageIds","uncheckedMessageIds","checkedMessageIds","IsBatchFillingFieldsJsonPart","createPartTypeChecker","extractFieldParts","createFieldPartsExtractor","isBatchFillingFieldsPart","GeneratedDataCounter","FirstBatchGeneratingAnimation","NonFirstBatchGeneratingAnimation","DATA_COUNT_PER_BATCH","useDataPreviewer","autoShow","showPreviewer","usePartParser","onParse","lastFieldRef","fullJson","parsedFields","lastField","BaseBatchGeneratorAction","streamingState","setStreamingState","getCount","setCount","addMessageId","existingCount","totalCount","setTotalCount","getRowNum","newRows","handleContinue","bsFormService","bsHostCtx","GetSafeFormStructure","PartParser","setTimestamp","emit","normalizedValue","valueNormalizer","latestField","BatchGeneratorAction","prevLastPart","BatchFillPart","fieldsParts","FormBatchFillingService","cbFn","FormBatchFillingPlugin","index$m","defaultSuggestions","FormBuilderOpeningLines","FormBuilderOpeningLinesPlugin","index$k","DEFAULT_DATA_LOAD_CONF","getMatchResult","parseDesc","splitDesc","parseRawFormText","rawText","subFormName","typePart","requiredPart","descPart","relationPart","typeMatch","requiredMatch","descMatch","relationDesc","parsedDesc","splitFieldName","isFieldInSubForm","parentFormName","extraFormNameFromFieldDesc","patternLib","extractLinkInfo","linkInfoMap","targetFormName","fieldNameMatch","fName","subFormFieldNames","finalName","ensureCleanFormName","parseFormDesignInfo","designDoc","isFieldTypeEqual","hasSubFields","isLinkField","isSNField","isTextField","hasLinkInfo","designInfo","formFieldsWalker","infoMap","isTargetForm","isTargetField","fieldProcessor","onFormProcessed","linkMap","linkInfo","buildWidgetName","baseName","idxLength","enhanceDataLoadField","formMap","onEnhanced","targetForm","mapFields","dataLoadFields","originMapField","originDataLoadField","targetDepFieldName","targetDepFieldInfo","targetDepFieldTag","enhanceLinkField","targetSNFieldInTargetForm","targetTargetTextFieldInTargetForm","fieldProcessorFactory","formInfo","parseFormMarkdownDynamic","fieldsMatch","designMatch","confirmMatch","fieldsIndex","designIndex","confirmIndex","fieldsListInfo","designDescInfo","DesignInfo","designMarkdown","useBuilderStore","stage","newFormMap","newMapping","existingFormInfo","updatedInfo","DEFAULT_ICON_VALUE","SuccessView","onMounted","handleNameChange","handleIconChange","CreatingStatus","failed","CreateFormConfirm","setStage","updateFormInfo","pickedIconValue","setCurrentWorkingFormName","currentWorkingForm","updateWithRealFormInfo","setWorkStage","resetPickedIconValue","isConfirmed","handleConfirmBuild","DesignDocPart","appendConfirmBtn","isDesignDoc","isFieldsPart","isSuggestions","isFieldsSaveConfirm","useFormName","messageFormName","useFieldsPreviewer","useBuildFieldsData","fieldsConfirmed","isFieldsJson","rawField","cwfName","cwf","enhancedField","processorCreator","subCreator","subProcessor","subLinkInfo","newFieldMap","FieldsPart","fieldPropsArray","checkerRef","previewService","handleSaveFields","processedFormInfo","fieldsPrefix","fieldsSuffix","extractFontIconCodeFrom","FollowUp","descriptionWithoutIcon","titleWithoutIcon","SuggestionPrefixPart","FollowUpCom","setPickedIconValue","isFieldsConfirmed","BuilderPartsPlugin","index$i","ModeSelect","formFillingService","index$g","index$e","useFormFillingStore","valueMap","fieldMap","conversationId","FormFillingService","IsFillingFieldsJsonPart","extractFillingFieldParts","createGetFieldJsonInfo","createFieldConfig","setFilledValue","extractFieldsData","currentSubformFieldName","rawFieldParts","isSubformField","lastIdx","isFillingFieldsMsgPart","SingleFillPart","modalLoading","setModalLoading","filledFields","setConfirmed","prefixTips","suffixTips","FormFillingPlugin","index$c","usePreviewStore","needConfirm","loadingText","confirmInfo","operationElement","PreviewerService","ShadowfiedContent","mountPoint","Previewer","contentComponent","ContentCompJsx","PreviewerPlugin","index$a","ReportQueryInputEnhancer","appIdParam","index$8","CreatedSourceConfigMap","HighlightMsg","CreatedSourceMsg","DimensionField","isCol","ConditionField","MetricField","metric","DEFAULT_METHOD_LABELS","TYPE_METHOD_OVERRIDES","getMethodLabel","typeOverrides","formatValue","renderMethodLabel","methodLabel","getHumanReadableTemplate","filterToDesc","valueStr","FilterCondition","conds","relLabel","DASH_WIDGET_ICON_CODE_MAP","DashWidgetIcon","DataTableCard","hasMetrics","ReportQueryPartCom","GetQueryResult","isReportQueryMsgPart","IsQueryResultPart","ReportQueryPlugin","index$6","FORM_NAME_PART","FORM_FIELDS_PART","formNamePartChecker","createPayloadTypeChecker","formFieldsPartChecker","createLocalBotMsgSender","FormBuilderStdAction","rebuildFieldsJsonStructure","FormCreateSuccess","FormFieldsChecker","StdActionsPlugin","index$4","ExpandIcon","createActions","ActionBtn","isDivider","ActionsBarCom","TopLeftActionsBarPlugin","index$2","TopRightActionsBarPlugin"],"mappings":"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KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,KAAQ,CACN,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,OACA,OACA,MACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,MACA,YACA,QAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,KACA,MACA,MACA,MACA,MAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,SACA,MACA,MACA,MACA,MACA,UACA,UACA,aACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,UACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,MACA,WAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KACA,KACA,KACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,KACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,OAAU,CACR,MAAS,CACP,MACA,MACA,MACA,MACA,QACA,OACA,QACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,MACA,SACA,MACA,QACA,MACA,WAAA,EAEF,IAAO,CACL,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,SACA,OACA,OACA,MACA,QACA,OACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,UACA,UACA,MACA,MACA,MACA,OACA,OAAA,EAEF,MAAS,CACP,MACA,OACA,OACA,OACA,QACA,OACA,MACA,MACA,OAAA,EAEF,MAAS,CACP,OACA,QACA,MACA,cACA,SACA,UACA,QACA,SACA,SACA,OACA,OACA,OACA,QACA,KAAA,EAEF,MAAS,CACP,MACA,MACA,MACA,QACA,QACA,QACA,MAAA,EAEF,MAAS,CACP,MACA,MACA,MACA,MACA,MACA,MACA,UACA,UACA,UACA,OACA,KAAA,EAEF,IAAO,CACL,QACA,OACA,UACA,UACA,OACA,KAAA,EAEF,MAAS,CACP,QACA,QACA,OACA,QACA,QACA,SACA,SACA,OACA,MACA,OACA,MACA,MACA,QAAA,EAEF,KAAQ,CACN,QACA,QACA,MAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,UACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,UACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,UACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,WACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,cACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,UACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,MACA,MACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,WACA,KAAA,EAEF,IAAO,CACL,MACA,cACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,SAAY,CACV,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,KAAQ,CACN,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,MAAS,CACP,MACA,MACA,MACA,OACA,QACA,OACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,OACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,YAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,OACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,QACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,OAAU,CACR,MACA,QACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,QAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,OACA,OACA,MACA,MACA,IAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,OACA,OACA,MACA,OACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,KAAA,EAEF,IAAO,CACL,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,KACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,KACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,YACA,cACA,cAAA,EAEF,IAAO,CACL,MACA,QACA,MACA,OACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,KACA,KAAA,EAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,MAAS,CACP,OAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,UACA,UACA,UACA,YACA,UACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,KAAA,EAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,YACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,QAAW,CACT,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,MACA,UACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,SAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,UACA,UACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,UACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,KAAQ,CACN,MAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,IAAO,CACL,KAAA,EAEF,QAAW,CACT,SAAA,EAEF,QAAW,CACT,SAAA,EAEF,QAAW,CACT,SAAA,EAEF,QAAW,CACT,SAAA,EAEF,UAAa,CACX,WAAA,EAEF,UAAa,CACX,WAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,WACA,aACA,aACA,YAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,KACA,KAAA,EAEF,KAAQ,CACN,KACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,UACA,UACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KAAA,EAEF,UAAa,CACX,OACA,MACA,KACA,KACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,QAAW,CACT,MACA,UACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,MACA,MACA,aACA,aACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,aACA,aACA,YAAA,EAEF,IAAO,CACL,OACA,MACA,MACA,MACA,MACA,MACA,cACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,UACA,MACA,MACA,aACA,MACA,WACA,SAAA,EAEF,YAAe,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,MACA,YACA,YACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,UACA,YACA,eACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,WACA,MACA,MACA,SAAA,EAEF,IAAO,CACL,MACA,aACA,WACA,UACA,YACA,gBACA,aACA,eACA,WACA,SAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,MACA,kBACA,YACA,SAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,UACA,MACA,MACA,MACA,MACA,MACA,cACA,MACA,SAAA,EAEF,UAAa,CACX,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KAAA,EAEF,UAAa,CACX,MACA,MACA,KAAA,EAEF,QAAW,CACT,MACA,UACA,MACA,MACA,MACA,UACA,YACA,MACA,MACA,MACA,MACA,KAAA,EAEF,WAAc,CACZ,MACA,KACA,MACA,MACA,KAAA,EAEF,SAAY,CACV,MACA,MACA,aACA,YAAA,EAEF,QAAW,CACT,QACA,MACA,UAAA,CACF,EAEF,MAAS,CACP,IAAO,CACL,MACA,QACA,MACA,MACA,MACA,MACA,MACA,OAAA,EAEF,KAAQ,CACN,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,QACA,MACA,MACA,MACA,MACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,OACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,MAAA,EAEF,IAAO,CACL,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,UAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,SAAA,EAEF,IAAO,CACL,MACA,WACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,WACA,aACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,KACA,MACA,MACA,MACA,KACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KACA,IAAA,EAEF,IAAO,CACL,MACA,KACA,KACA,MACA,KACA,MACA,KACA,KACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,SACA,iBAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,YACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,YACA,UACA,UACA,UAAA,EAEF,QAAW,CACT,UACA,MACA,MACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,UAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,MACA,MACA,MACA,MAAA,EAEF,WAAc,CACZ,OACA,OACA,MACA,MACA,MACA,MACA,cAAA,CACF,EAEF,QAAW,CACT,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,KAAQ,CACN,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,OACA,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,OACA,MACA,KAAA,CACF,EAEF,SAAY,CACV,MAAS,CACP,MACA,QACA,MACA,OACA,OACA,OACA,MACA,OAAA,EAEF,MAAS,CACP,OACA,QACA,OACA,MAAA,EAEF,KAAQ,CACN,MACA,MACA,MAAA,EAEF,IAAO,CACL,MACA,YACA,KAAA,EAEF,QAAW,CACT,MACA,MACA,OACA,OACA,MACA,QACA,UAAA,EAEF,UAAa,CACX,MACA,QACA,MACA,KAAA,EAEF,UAAa,CACX,OACA,MACA,MACA,MACA,MACA,UACA,MACA,MACA,KAAA,EAEF,MAAS,CACP,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,KAAA,EAEF,YAAe,CACb,OACA,OACA,OACA,KAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,aAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,SAAY,CACV,MACA,MACA,QACA,MACA,YACA,MACA,MACA,MACA,MACA,OACA,MAAA,EAEF,KAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,YAAA,EAEF,MAAS,CACP,OACA,OACA,MACA,MACA,OACA,MACA,MAAA,EAEF,KAAQ,CACN,MAAA,EAEF,KAAQ,CACN,MAAA,EAEF,MAAS,CACP,OAAA,EAEF,KAAQ,CACN,MAAA,EAEF,IAAO,CACL,KAAA,EAEF,KAAQ,CACN,MAAA,EAEF,IAAO,CACL,KAAA,EAEF,MAAS,CACP,OAAA,EAEF,IAAO,CACL,KAAA,EAEF,KAAQ,CACN,MAAA,EAEF,IAAO,CACL,KAAA,CACF,EAEF,IAAO,CACL,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,KACA,KACA,KAAA,EAEF,IAAO,CACL,KACA,IAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,MACA,MACA,KAAA,EAEF,IAAO,CACL,MACA,MACA,MACA,KAAA,CACF,EAEF,QAAW,CACT,QAAW,CACT,MACA,MACA,KACA,KACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KAAA,CACF,EAEF,QAAW,CACT,QAAW,CACT,QACA,OACA,OACA,MACA,OACA,OACA,QACA,QAAA,CACF,EAEF,GAAM,CACJ,GAAM,CACJ,IAAA,CACF,CAEJ,EClgIMtB,GACJ,qNAOF,SAASnjF,GAASoS,EAAoD,WACpE,OAAO/mB,GAAAxxC,GAAAD,EAAAw4D,EAAM,SAAN,YAAAx4D,EAAc,QAAd,YAAAC,EAAqB,OAAQ6qI,GAAO,OAAOA,EAAG,OAAU,YAAxD,KAAAr5F,EAAqF,CAAA,CAC9F,CAEA,SAASq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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACJ,EACaC,GAAsB,CAC/B,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,KAAK,EACpB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,IAAO,IAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,GAAG,EAClB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,IAAI,EACnB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAO,KAAO,KAAK,EACpB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,GAAG,EACpB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,GAAG,EACpB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,KAAK,EACtB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,KAAQ,IAAI,EACrB,CAAC,KAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,GAAG,EACpB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,GAAG,EACpB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,GAAG,EACpB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,KAAK,EACtB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAQ,MAAQ,IAAI,EACrB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,GAAG,EACtB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,MAAS,MAAS,IAAI,EACvB,CAAC,MAAS,MAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,MAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,KAAK,EACxB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,GAAG,EACtB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAAI,EACvB,CAAC,OAAS,OAAS,IAA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","x_google_ignoreList":[0,1,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,53,54,55,56,62,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,83,84,85,86,87,89,105,120,121,122,123,124,125,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,341,350,351,355,356,360,361,377,381,382,383,384,385,386,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431]}