[
  {
    "path": ".eslintignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Repo files\n/demo\n/examples\n/dist\n/docs\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": ".eslintrc.cjs",
    "content": "module.exports = {\n    root: true,\n    extends: [\n        'eslint:recommended',\n        'plugin:@typescript-eslint/recommended',\n        'plugin:svelte/recommended',\n        'prettier'\n    ],\n    rules: {\n        indent: ['warn', 4, { SwitchCase: 1 }],\n        quotes: ['warn', 'single'],\n        'prefer-rest-params': 'off',\n        'svelte/valid-compile': 'off',\n        'svelte/no-at-html-tags': 'off',\n        '@typescript-eslint/no-unused-vars': [\n            'error',\n            {\n                argsIgnorePattern: '_',\n                varsIgnorePattern: '_',\n                caughtErrorsIgnorePattern: '_'\n            }\n        ]\n    },\n    parser: '@typescript-eslint/parser',\n    plugins: ['@typescript-eslint'],\n    parserOptions: {\n        sourceType: 'module',\n        ecmaVersion: 2020,\n        extraFileExtensions: ['.svelte']\n    },\n    env: {\n        browser: true,\n        es2017: true,\n        node: true\n    },\n    overrides: [\n        {\n            files: ['*.svelte'],\n            parser: 'svelte-eslint-parser',\n            parserOptions: {\n                parser: '@typescript-eslint/parser'\n            }\n        },\n        {\n            files: ['src/**/*'],\n            rules: {\n                'no-console': ['error', { allow: ['warn', 'error'] }]\n            }\n        }\n    ]\n};\n"
  },
  {
    "path": ".gitignore",
    "content": ".vscode\n!.vscodesettings.json\n!.vscodetasks.json\n!.vscodelaunch.json\n!.vscodeextensions.json\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# next.js build output\n.next\n\n# nuxt.js build output\n.nuxt\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless\n\n#secrets\nto do.txt\n\n#.rpt2_cache\n.rpt2_cache/\n\n# npm published files\ndist/\n!docs/dist\n\n# svelte\n/.svelte-kit"
  },
  {
    "path": ".prettierignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Repo files\n/demo\n/examples\n/dist\n/docs\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n    \"useTabs\": false,\n    \"tabWidth\": 4,\n    \"arrowParens\": \"avoid\",\n    \"singleQuote\": true,\n    \"trailingComma\": \"none\",\n    \"printWidth\": 180,\n    \"plugins\": [\"prettier-plugin-svelte\"],\n    \"overrides\": [{ \"files\": \"*.svelte\", \"options\": { \"parser\": \"svelte\" } }]\n}\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "                               The MIT License\n\nCopyright (c) 2015-2016 Konstantin Tarkus, Kriasoft LLC. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n    <a href=\"https://anovokmet.github.io/svelte-gantt\" target=\"_blank\">\n        <img src=\"./packages/docs-mdsvex/static/favicon.svg\" width=\"150\"/>\n    </a>\n</div>\n\n<h1 align=\"center\">\n    svelte-gantt\n</h1>\n\n<br/>\n<p align=\"center\">\n    <a href=\"https://anovokmet.github.io/svelte-gantt\">Website</a>\n    ·\n    <a href=\"https://anovokmet.github.io/svelte-gantt/docs\">Quickstart</a>\n    ·\n    <a href=\"https://anovokmet.github.io/svelte-gantt/docs\">Documentation</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://www.npmjs.com/package/svelte-gantt\">\n        <img src=\"https://img.shields.io/npm/v/svelte-gantt\" alt=\"npm\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/svelte-gantt\">\n        <img src=\"https://img.shields.io/npm/dm/svelte-gantt\" alt=\"npm downloads\">\n    </a>\n    <a href=\"https://github.com/ANovokmet/svelte-gantt/blob/main/LICENSE.txt\">\n        <img src=\"https://img.shields.io/github/license/ANovokmet/svelte-gantt\" alt=\"MIT\">\n    </a>\n<p>\n\nA **lightweight** and **fast** interactive gantt chart/resource booking component made with [Svelte](https://svelte.technology/). Compatible with any JS library or framework. ZERO dependencies.\n\n![svelte-gantt](https://i.imgur.com/IqT5PL4.png)\n\n# Features\n\n- High performance - display large datasets\n- Interactive - drag and drop elements\n- Tree view\n- Zoom in/out\n- Dependencies\n- Date ranges\n- ...\n\n# Getting started\n\n```\nnpm install svelte-gantt\n```\n\nImport the component:\n\n```js\nimport { SvelteGantt } from 'svelte-gantt';\n```\n\nor use the IIFE build:\n\n```html\n<script src=\"node_modules/svelte-gantt/index.iife.js\"></script>\n```\n\nInitialize svelte-gantt:\n\n```js\nvar options = {\n    /* ... */\n};\n\nvar gantt = new SvelteGantt({\n    // target a DOM element\n    target: document.getElementById('example-gantt'),\n    // svelte-gantt options\n    props: options\n});\n```\n\n# Need help?\n\nI am happy to help you. [Post an issue](https://github.com/ANovokmet/svelte-gantt/issues) or [contact me](https://github.com/ANovokmet).\n"
  },
  {
    "path": "docs/.nojekyll",
    "content": ""
  },
  {
    "path": "docs/404.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"/svelte-gantt/favicon.svg\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/entry/start.Dwci9Oks.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/chunks/entry.0-2BfHub.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/chunks/scheduler.lruobs1Y.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/chunks/paths.oQcPQ3IF.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/chunks/control.CYgJF_JY.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/entry/app.2rUmdrbe.js\">\n\t\t<link rel=\"modulepreload\" href=\"/svelte-gantt/_app/immutable/chunks/index.DyGm78TJ.js\">\n\t\t<!-- <link rel=\"stylesheet\" href=\"./app.css\"> -->\n\t\t<link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\" rel=\"stylesheet\">\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">\n\t\t\t<script>\n\t\t\t\t{\n\t\t\t\t\t__sveltekit_btsuk1 = {\n\t\t\t\t\t\tbase: \"/svelte-gantt\",\n\t\t\t\t\t\tassets: \"/svelte-gantt\"\n\t\t\t\t\t};\n\n\t\t\t\t\tconst element = document.currentScript.parentElement;\n\n\t\t\t\t\tPromise.all([\n\t\t\t\t\t\timport(\"/svelte-gantt/_app/immutable/entry/start.Dwci9Oks.js\"),\n\t\t\t\t\t\timport(\"/svelte-gantt/_app/immutable/entry/app.2rUmdrbe.js\")\n\t\t\t\t\t]).then(([kit, app]) => {\n\t\t\t\t\t\tkit.start(app, element);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t</script>\n\t\t</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "docs/_app/immutable/assets/0.D0MXDcq-.css",
    "content": ".landing-page .nav-category{display:none!important}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:none;text-shadow:0 1px rgba(0,0,0,.3);font-family:Monaco,Consolas,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#263e52}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#5c98cd}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:#f05e5d}.token.boolean,.token.number{color:#bc94f9}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#fcfcd6}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.function,.token.class-name{color:#66d8ef}.token.keyword{color:#6eb26e}.token.regex,.token.important{color:#f05e5d}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \"\"}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}.font-mono{font-variant-ligatures:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.prose{color:rgb(var(--sg-color-soft));max-width:none}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:#1d4ed8;text-decoration:none;font-weight:400;border-bottom:1px solid #2563eb}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=\"1\"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;padding-left:1.25rem}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:rgb(var(--sg-color-inverse))}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:rgb(var(--sg-color-border));border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:\"“\"\"”\"\"‘\"\"’\";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:1.75em;margin-bottom:.6666666666666666em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:2.4em;margin-bottom:.6em;line-height:1.4}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.75em;margin-bottom:.5em;line-height:1.5;font-size:1.125em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#334155;font-weight:500;font-size:.875em;font-variant-ligatures:none;background-color:#f1f5f9;border-radius:4px;padding:3px 6px}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--sg-code-fence-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em;box-shadow:none;display:flex}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;flex:none;min-width:100%}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:start;font-size:.875em;line-height:1.7142857;margin:0;border-collapse:collapse}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:rgb(var(--sg-color-border));color:rgb(var(--sg-color-inverse))}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;padding-top:0}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:rgb(var(--sg-color-border));font-size:.875rem}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline;white-space:normal}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: rgb(var(--sg-color-inverse));--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: rgb(var(--sg-color-inverse));--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em;position:relative;padding-left:.25rem}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0;padding-left:.5714286em}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0;padding-right:.5714286em}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(h1,h2,h3):not(:where([class~=not-prose],[class~=not-prose] *)){letter-spacing:-.025em}.prose :where(h2 small,h3 small,h4 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-family:monospace;font-weight:500}.prose :where(h2 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.125rem;line-height:1.75rem}.prose :where(h3 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1rem;line-height:1.5rem}.prose :where(h4 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875rem;line-height:1.25rem}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:\"\";width:.75em;height:.125em;position:absolute;top:.8125em;left:0;border-radius:999px}.prose :where(li>p):not(:where([class~=not-prose],[class~=not-prose] *)){margin:0}.prose :where(a:hover):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:2px}.prose :where(p+pre):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:-.2857142857142857em}.prose :where(tbody):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tbody code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875rem}.prose :where(tbody td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.5714286em}.prose :where(tbody td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:.5714286em}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#2563eb;padding-left:8px}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)):before{display:none}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)):after{display:none}.prose :where(figure figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:center;font-style:italic}.prose :where(figure>figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8571428571428571em}.prose :where(blockQuote):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgb(var(--sg-color-inverse));border-radius:2px;border-color:currentColor}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-10{bottom:2.5rem}.left-0{left:0}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-12{margin-top:3rem;margin-bottom:3rem}.-ml-px{margin-left:-1px}.mb-12{margin-bottom:3rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-3\\.5{margin-bottom:.875rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-2\\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-12{width:3rem;height:3rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.\\!h-auto{height:auto!important}.h-12{height:3rem}.h-20{height:5rem}.h-4{height:1rem}.h-40{height:10rem}.h-6{height:1.5rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\\[60vh\\]{max-height:60vh}.max-h-\\[none\\]{max-height:none}.max-h-screen{max-height:100vh}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[calc\\(100vh-var\\(--sg--navbar-height\\)\\)\\]{min-height:calc(100vh - var(--sg--navbar-height))}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-4{width:1rem}.w-6{width:1.5rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-60{min-width:15rem}.min-w-\\[40px\\]{min-width:40px}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\\[var\\(--sg-article-max-width\\)\\]{max-width:var(--sg-article-max-width)}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-x-3{--tw-translate-x: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-border) / var(--tw-border-opacity))}.border-brand{--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}.border-inverse{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.border-slate-900\\/10{border-color:#0f172a1a}.border-transparent{border-color:transparent}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity))}.bg-body{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity))}.bg-body\\/20{background-color:rgb(var(--sg-color-body) / .2)}.bg-inverse{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-inverse) / var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity: 1;background-color:rgb(219 39 119 / var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.bg-slate-200\\/40{background-color:#e2e8f066}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-pink-500{--tw-gradient-from: #ec4899 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-pink-600{--tw-gradient-from: #db2777 var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-violet-500{--tw-gradient-to: #8b5cf6 var(--tw-gradient-to-position)}.to-violet-600{--tw-gradient-to: #7c3aed var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-\\[bottom_1px_center\\]{background-position:bottom 1px center}.bg-bottom{background-position:bottom}.bg-no-repeat{background-repeat:no-repeat}.fill-blue-400{fill:#60a5fa}.fill-blue-500{fill:#3b82f6}.fill-blue-700{fill:#1d4ed8}.fill-blue-950{fill:#172554}.p-2{padding:.5rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-20{padding-bottom:5rem}.pl-4{padding-left:1rem}.pt-1{padding-top:.25rem}.pt-12{padding-top:3rem}.pt-20{padding-top:5rem}.pt-32{padding-top:8rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\\[15px\\]{font-size:15px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-6{line-height:1.5rem}.tracking-tight{letter-spacing:-.025em}.text-body{--tw-text-opacity: 1;color:rgb(var(--sg-color-body) / var(--tw-text-opacity))}.text-brand{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-inverse{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.text-soft{--tw-text-opacity: 1;color:rgb(var(--sg-color-soft) / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-violet-50{--tw-text-opacity: 1;color:rgb(245 243 255 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-75{transition-duration:75ms}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.will-change-transform{will-change:transform}.\\[localhost\\:5173\\]{localhost:5173}body{height:100vh;width:100vw;font-family:Inter,sans-serif}.js-focus-visible :focus:not([data-focus-visible-added]){outline:2px solid transparent;outline-offset:2px}.js-focus-visible [data-focus-visible-added]{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--sg-color-focus)}*{-webkit-tap-highlight-color:transparent}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}@media screen and (min-width: 1280px){.scroll-contain{overscroll-behavior:contain}}.scroll-contain-mobile{overscroll-behavior:contain}.scrollbar{scrollbar-width:thin;--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / .3);--sg-scrollbar-thumb-bg: rgb(var(--sg-color-border))}.dark .scrollbar{--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / .2)}@media screen and (prefers-reduced-motion: no-preference){.scrollbar{scroll-behavior:smooth}}.scrollbar::-webkit-scrollbar{height:.375rem!important;width:5px!important;background-color:transparent!important}.scrollbar::-webkit-scrollbar-track{border-radius:.25rem!important;background-color:var(--sg-scrollbar-track-bg)!important}.scrollbar::-webkit-scrollbar-thumb{border-radius:.25rem!important;background-color:var(--sg-scrollbar-thumb-bg)!important}.blur-bg{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity));--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.blur-bg:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity))}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))) or (-webkit-backdrop-filter: blur(0)){.blur-bg{background-color:rgb(var(--sg-color-body) / .2)}.blur-bg:is(.dark *){background-color:rgb(var(--sg-color-body) / .6)}}.svg-responsive>svg{width:100%;height:100%}.sg-docs pre{tab-size:2;-o-tab-size:2;-moz-tab-size:2}.sg-docs p+.admonition,.sg-docs p+.steps{margin-top:2.5rem}.sg-docs .steps+p{margin-top:4rem}.sg-docs .admonition+.steps{margin-top:3.5rem}.sg-docs .admonition+table{margin-top:4rem}.sg-docs .code-fence .code pre{margin:0}.sg-docs .code-fence.lang-bash pre span{color:#fafafa!important}.sg-docs .code-fence.lang-bash pre .line:not(:empty):before{content:\"> \";font-weight:700;color:var(--sg-terminal-line-pointer)}.sg-docs .step .description>code{color:var(--sg-color-inverse)}.sg-docs .step .code-fence{margin:0;padding:0}.sg-docs .code-fence+.code-fence{margin-top:.5rem}.sg-docs h1+.steps,.sg-docs h2+.steps,.sg-docs h3+.steps{margin-top:2.5rem}.sg-docs .header-anchor{margin-left:.25em;padding:0 .23em;font-size:.9em;opacity:0;border:0;background-color:none}.sg-docs h1:focus,.sg-docs h2:focus,.sg-docs h3:focus,.sg-docs h4:focus,.sg-docs h5:focus,.sg-docs h6:focus{outline:none}@media (hover: hover) and (pointer: fine){.sg-docs h1:hover .header-anchor,.sg-docs h2:hover .header-anchor,.sg-docs h3:hover .header-anchor,.sg-docs h4:hover .header-anchor,.sg-docs h5:hover .header-anchor,.sg-docs h6:hover .header-anchor{opacity:1}}@media (pointer: coarse){.sg-docs h1:focus .header-anchor,.sg-docs h2:focus .header-anchor,.sg-docs h3:focus .header-anchor,.sg-docs h4:focus .header-anchor,.sg-docs h5:focus .header-anchor,.sg-docs h6:focus .header-anchor{opacity:1}}.sg-docs .header-anchor:focus{opacity:1}.dark\\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders);color:rgb(var(--sg-color-soft))}.dark\\:prose-invert:is(.dark *) :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#a5b4fc}.dark\\:prose-invert:is(.dark *) :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:rgb(var(--sg-color-border))}.first\\:mt-0:first-child{margin-top:0}.first\\:mt-6:first-child{margin-top:1.5rem}.hover\\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:scale-\\[1\\.1\\]:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:border-inverse:hover{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.hover\\:bg-inverse\\/90:hover{background-color:rgb(var(--sg-color-inverse) / .9)}.hover\\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.hover\\:bg-violet-600:hover{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity))}.hover\\:text-brand:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.hover\\:text-inverse:hover{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.focus-visible\\:border-inverse:focus-visible{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.focus-visible\\:text-inverse:focus-visible{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.active\\:bg-slate-200:active{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.group:hover .group-hover\\:visible{visibility:visible}.group:hover .group-hover\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\\:opacity-100{opacity:1}.dark\\:border-b:is(.dark *){border-bottom-width:1px}.dark\\:border-slate-100\\/5:is(.dark *){border-color:#f1f5f90d}.dark\\:bg-body\\/60:is(.dark *){background-color:rgb(var(--sg-color-body) / .6)}.dark\\:bg-slate-900\\/70:is(.dark *){background-color:#0f172ab3}.dark\\:bg-bottom:is(.dark *){background-position:bottom}.dark\\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity))}.dark\\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.dark\\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\\:ring-1:is(.dark *){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.dark\\:ring-inset:is(.dark *){--tw-ring-inset: inset}.dark\\:ring-white\\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\\:backdrop-blur:is(.dark *){--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}@media (min-width: 640px){.sm\\:mx-0{margin-left:0;margin-right:0}.sm\\:mb-24{margin-bottom:6rem}.sm\\:mt-10{margin-top:2.5rem}.sm\\:mt-24{margin-top:6rem}.sm\\:rounded-xl{border-radius:.75rem}.sm\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:pt-24{padding-top:6rem}.sm\\:text-5xl{font-size:3rem;line-height:1}}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1024px){.lg\\:sticky{position:sticky}.lg\\:top-20{top:5rem}.lg\\:z-0{z-index:0}.lg\\:mb-32{margin-bottom:8rem}.lg\\:mt-32{margin-top:8rem}.lg\\:block{display:block}.lg\\:flex{display:flex}.lg\\:hidden{display:none}.lg\\:h-\\[34\\.6875rem\\]{height:34.6875rem}.lg\\:min-h-64{min-height:16rem}.lg\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\\:border-0{border-width:0px}.lg\\:px-0{padding-left:0;padding-right:0}.lg\\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\\:px-4{padding-left:1rem;padding-right:1rem}.lg\\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\\:pb-0{padding-bottom:0}.lg\\:pt-20{padding-top:5rem}.lg\\:pt-32{padding-top:8rem}.lg\\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1280px){.xl\\:h-\\[31\\.625rem\\]{height:31.625rem}}:root,.prefers-light-scheme{--sg-color-focus: 79 70 229;--sg-color-soft: 68 78 94;--sg-color-body: 250 250 250;--sg-color-elevate: 243 244 246;--sg-color-inverse: 5 11 23;--sg-color-border: 209 213 219}:root{font-size:16px;scroll-padding-top:6rem;--sg-breadcrumbs-height: 5rem;--sg-article-max-width: 98ch}@media screen and (min-width: 992px){:root{--sg-breadcrumbs-height: 0px}}:root.dark,.prefers-dark-scheme{color-scheme:dark;--sg-color-soft: 150 155 166;--sg-color-inverse: 245 245 245;--sg-color-border: 38 48 64;--sg-color-elevate: 10 19 33;--sg-color-body: 5 11 23;--sg-color-focus: 129 140 248}\n"
  },
  {
    "path": "docs/_app/immutable/assets/17.CKKkePFl.css",
    "content": ".example.svelte-5zals3 .blue{--tw-bg-opacity:1;background-color:rgb(96 165 250 / var(--tw-bg-opacity))}.example.svelte-5zals3 .orange{--tw-bg-opacity:1;background-color:rgb(251 146 60 / var(--tw-bg-opacity))}.example.svelte-5zals3 .violet{--tw-bg-opacity:1;background-color:rgb(167 139 250 / var(--tw-bg-opacity))}\n"
  },
  {
    "path": "docs/_app/immutable/assets/3.D4zGWEJI.css",
    "content": ".example.svelte-1decuf8 .task-pink{--tw-bg-opacity:1;background-color:rgb(219 39 119 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-pink:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77 / var(--tw-bg-opacity))}.example.svelte-1decuf8 .task-slate{--tw-bg-opacity:1;background-color:rgb(148 163 184 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-slate:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.example.svelte-1decuf8 .task-blue{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-blue:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}\n"
  },
  {
    "path": "docs/_app/immutable/assets/5.HrAC0il4.css",
    "content": ".example.svelte-ovg8kz .sg-tree-expander .fa-angle-right:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" /></svg>');width:1rem;height:1rem}.example.svelte-ovg8kz .sg-tree-expander .fa-angle-down:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\" /></svg>');width:1rem;height:1rem}.example.svelte-199ryr9 .row-gradient{background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position);opacity:.5}\n"
  },
  {
    "path": "docs/_app/immutable/assets/6.DZf7PkB2.css",
    "content": ".example.svelte-k9bk9f .gradient{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position) }.example.svelte-k9bk9f .gradient:hover{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#db2777 var(--tw-gradient-from-position);--tw-gradient-to:rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#7c3aed var(--tw-gradient-to-position);--tw-shadow:0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.task{padding:1rem;border-radius:6px!important;display:flex;flex-direction:column;background-color:#fff!important;box-shadow:#091e4240 0 4px 8px -2px,#091e4214 0 0 0 1px}.task__header{padding-left:1rem;border-left:4px solid #fbbf24;position:relative;margin-bottom:.5rem}.task__title{font-weight:600;color:#1e293b}.task__subtitle{font-size:.9rem;color:#64748b}.task__menu{position:absolute;top:0;right:0;height:1.75rem;width:1.75rem;display:flex;justify-content:center;align-items:center}.task__tags{display:flex;align-items:center;gap:.5rem}.task__tag{display:flex;align-items:center;height:100%;padding:.2rem .5rem;border-radius:4px;font-size:.9rem;box-shadow:#e2e8f0 0 1px 1px,#f8fafc 0 0 1px 1px}.task__icon-archive-box:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m20.25 7.5-.625 10.632a2.25 2.25 0 0 1-2.247 2.118H6.622a2.25 2.25 0 0 1-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z\" /></svg>');width:1.25rem;height:1.25rem}.task__tag.amber{background:#fcd34d;background:linear-gradient(0deg,#fcd34d,#fde68a 10%,#fde68a 90%,#fffbeb);color:#d97706}.task__tag.violet{background:#c4b5fd;background:linear-gradient(0deg,#c4b5fd,#ddd6fe 10%,#ddd6fe 90%,#f5f3ff);color:#8b5cf6}.task__footer{display:flex;padding-left:1rem}.task__assignees{margin-left:auto;display:flex}.task__assignee{border-radius:50%;display:block;height:2rem;width:2rem;border:2px solid white;background:#bbf7d0;font-size:.75rem;color:#16a34a;margin-left:-.75rem;display:flex;justify-content:center;align-items:center;font-weight:600}\n"
  },
  {
    "path": "docs/_app/immutable/assets/7.zCu19reB.css",
    "content": ".example.svelte-134mm6g .gradient{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position);background-size:unset!important}.example.svelte-134mm6g .gradient:hover{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#db2777 var(--tw-gradient-from-position);--tw-gradient-to:rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#7c3aed var(--tw-gradient-to-position);--tw-shadow:0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_layout.DvZDmv7a.css",
    "content": ".landing-page .nav-category{display:none!important}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:none;text-shadow:0 1px rgba(0,0,0,.3);font-family:Monaco,Consolas,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#263e52}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#5c98cd}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:#f05e5d}.token.boolean,.token.number{color:#bc94f9}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#fcfcd6}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.function,.token.class-name{color:#66d8ef}.token.keyword{color:#6eb26e}.token.regex,.token.important{color:#f05e5d}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \"\"}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}.font-mono{font-variant-ligatures:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.prose{color:rgb(var(--sg-color-soft));max-width:none}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:#1d4ed8;text-decoration:none;font-weight:400;border-bottom:1px solid #2563eb}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=\"1\"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;padding-left:1.25rem}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:rgb(var(--sg-color-inverse))}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:rgb(var(--sg-color-border));border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:\"“\"\"”\"\"‘\"\"’\";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:1.75em;margin-bottom:.6666666666666666em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:2.4em;margin-bottom:.6em;line-height:1.4}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.75em;margin-bottom:.5em;line-height:1.5;font-size:1.125em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#334155;font-weight:500;font-size:.875em;font-variant-ligatures:none;background-color:#f1f5f9;border-radius:4px;padding:3px 6px}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--sg-code-fence-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em;box-shadow:none;display:flex}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;flex:none;min-width:100%}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:start;font-size:.875em;line-height:1.7142857;margin:0;border-collapse:collapse}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:rgb(var(--sg-color-border));color:rgb(var(--sg-color-inverse))}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;padding-top:0}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:rgb(var(--sg-color-border));font-size:.875rem}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline;white-space:normal}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: rgb(var(--sg-color-inverse));--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: rgb(var(--sg-color-inverse));--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em;position:relative;padding-left:.25rem}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0;padding-left:.5714286em}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0;padding-right:.5714286em}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(h1,h2,h3):not(:where([class~=not-prose],[class~=not-prose] *)){letter-spacing:-.025em}.prose :where(h2 small,h3 small,h4 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-family:monospace;font-weight:500}.prose :where(h2 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.125rem;line-height:1.75rem}.prose :where(h3 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1rem;line-height:1.5rem}.prose :where(h4 small):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875rem;line-height:1.25rem}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:\"\";width:.75em;height:.125em;position:absolute;top:.8125em;left:0;border-radius:999px}.prose :where(li>p):not(:where([class~=not-prose],[class~=not-prose] *)){margin:0}.prose :where(a:hover):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:2px}.prose :where(p+pre):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:-.2857142857142857em}.prose :where(tbody):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tbody code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875rem}.prose :where(tbody td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.5714286em}.prose :where(tbody td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:.5714286em}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#2563eb;padding-left:8px}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)):before{display:none}.prose :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)):after{display:none}.prose :where(figure figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:center;font-style:italic}.prose :where(figure>figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8571428571428571em}.prose :where(blockQuote):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgb(var(--sg-color-inverse));border-radius:2px;border-color:currentColor}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-10{bottom:2.5rem}.left-0{left:0}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-12{margin-top:3rem;margin-bottom:3rem}.-ml-px{margin-left:-1px}.mb-12{margin-bottom:3rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-3\\.5{margin-bottom:.875rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-2\\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-12{width:3rem;height:3rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.\\!h-auto{height:auto!important}.h-12{height:3rem}.h-20{height:5rem}.h-4{height:1rem}.h-40{height:10rem}.h-6{height:1.5rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\\[60vh\\]{max-height:60vh}.max-h-\\[none\\]{max-height:none}.max-h-screen{max-height:100vh}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[calc\\(100vh-var\\(--sg--navbar-height\\)\\)\\]{min-height:calc(100vh - var(--sg--navbar-height))}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-4{width:1rem}.w-6{width:1.5rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-60{min-width:15rem}.min-w-\\[40px\\]{min-width:40px}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\\[var\\(--sg-article-max-width\\)\\]{max-width:var(--sg-article-max-width)}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-x-3{--tw-translate-x: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-border) / var(--tw-border-opacity))}.border-brand{--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}.border-inverse{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.border-slate-900\\/10{border-color:#0f172a1a}.border-transparent{border-color:transparent}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity))}.bg-body{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity))}.bg-body\\/20{background-color:rgb(var(--sg-color-body) / .2)}.bg-inverse{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-inverse) / var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity: 1;background-color:rgb(219 39 119 / var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.bg-slate-200\\/40{background-color:#e2e8f066}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-pink-500{--tw-gradient-from: #ec4899 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-pink-600{--tw-gradient-from: #db2777 var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-violet-500{--tw-gradient-to: #8b5cf6 var(--tw-gradient-to-position)}.to-violet-600{--tw-gradient-to: #7c3aed var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-\\[bottom_1px_center\\]{background-position:bottom 1px center}.bg-bottom{background-position:bottom}.bg-no-repeat{background-repeat:no-repeat}.fill-blue-400{fill:#60a5fa}.fill-blue-500{fill:#3b82f6}.fill-blue-700{fill:#1d4ed8}.fill-blue-950{fill:#172554}.p-2{padding:.5rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-20{padding-bottom:5rem}.pl-4{padding-left:1rem}.pt-1{padding-top:.25rem}.pt-12{padding-top:3rem}.pt-20{padding-top:5rem}.pt-32{padding-top:8rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\\[15px\\]{font-size:15px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-6{line-height:1.5rem}.tracking-tight{letter-spacing:-.025em}.text-body{--tw-text-opacity: 1;color:rgb(var(--sg-color-body) / var(--tw-text-opacity))}.text-brand{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-inverse{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.text-soft{--tw-text-opacity: 1;color:rgb(var(--sg-color-soft) / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-violet-50{--tw-text-opacity: 1;color:rgb(245 243 255 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-75{transition-duration:75ms}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.will-change-transform{will-change:transform}.\\[localhost\\:5173\\]{localhost:5173}body{height:100vh;width:100vw;font-family:Inter,sans-serif}.js-focus-visible :focus:not([data-focus-visible-added]){outline:2px solid transparent;outline-offset:2px}.js-focus-visible [data-focus-visible-added]{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--sg-color-focus)}*{-webkit-tap-highlight-color:transparent}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}@media screen and (min-width: 1280px){.scroll-contain{overscroll-behavior:contain}}.scroll-contain-mobile{overscroll-behavior:contain}.scrollbar{scrollbar-width:thin;--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / .3);--sg-scrollbar-thumb-bg: rgb(var(--sg-color-border))}.dark .scrollbar{--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / .2)}@media screen and (prefers-reduced-motion: no-preference){.scrollbar{scroll-behavior:smooth}}.scrollbar::-webkit-scrollbar{height:.375rem!important;width:5px!important;background-color:transparent!important}.scrollbar::-webkit-scrollbar-track{border-radius:.25rem!important;background-color:var(--sg-scrollbar-track-bg)!important}.scrollbar::-webkit-scrollbar-thumb{border-radius:.25rem!important;background-color:var(--sg-scrollbar-thumb-bg)!important}.blur-bg{--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity));--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.blur-bg:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(var(--sg-color-body) / var(--tw-bg-opacity))}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))) or (-webkit-backdrop-filter: blur(0)){.blur-bg{background-color:rgb(var(--sg-color-body) / .2)}.blur-bg:is(.dark *){background-color:rgb(var(--sg-color-body) / .6)}}.svg-responsive>svg{width:100%;height:100%}.sg-docs pre{tab-size:2;-o-tab-size:2;-moz-tab-size:2}.sg-docs p+.admonition,.sg-docs p+.steps{margin-top:2.5rem}.sg-docs .steps+p{margin-top:4rem}.sg-docs .admonition+.steps{margin-top:3.5rem}.sg-docs .admonition+table{margin-top:4rem}.sg-docs .code-fence .code pre{margin:0}.sg-docs .code-fence.lang-bash pre span{color:#fafafa!important}.sg-docs .code-fence.lang-bash pre .line:not(:empty):before{content:\"> \";font-weight:700;color:var(--sg-terminal-line-pointer)}.sg-docs .step .description>code{color:var(--sg-color-inverse)}.sg-docs .step .code-fence{margin:0;padding:0}.sg-docs .code-fence+.code-fence{margin-top:.5rem}.sg-docs h1+.steps,.sg-docs h2+.steps,.sg-docs h3+.steps{margin-top:2.5rem}.sg-docs .header-anchor{margin-left:.25em;padding:0 .23em;font-size:.9em;opacity:0;border:0;background-color:none}.sg-docs h1:focus,.sg-docs h2:focus,.sg-docs h3:focus,.sg-docs h4:focus,.sg-docs h5:focus,.sg-docs h6:focus{outline:none}@media (hover: hover) and (pointer: fine){.sg-docs h1:hover .header-anchor,.sg-docs h2:hover .header-anchor,.sg-docs h3:hover .header-anchor,.sg-docs h4:hover .header-anchor,.sg-docs h5:hover .header-anchor,.sg-docs h6:hover .header-anchor{opacity:1}}@media (pointer: coarse){.sg-docs h1:focus .header-anchor,.sg-docs h2:focus .header-anchor,.sg-docs h3:focus .header-anchor,.sg-docs h4:focus .header-anchor,.sg-docs h5:focus .header-anchor,.sg-docs h6:focus .header-anchor{opacity:1}}.sg-docs .header-anchor:focus{opacity:1}.dark\\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders);color:rgb(var(--sg-color-soft))}.dark\\:prose-invert:is(.dark *) :where(tbody tr td:first-child code):not(:where([class~=not-prose],[class~=not-prose] *)){color:#a5b4fc}.dark\\:prose-invert:is(.dark *) :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:rgb(var(--sg-color-border))}.first\\:mt-0:first-child{margin-top:0}.first\\:mt-6:first-child{margin-top:1.5rem}.hover\\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:scale-\\[1\\.1\\]:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:border-inverse:hover{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.hover\\:bg-inverse\\/90:hover{background-color:rgb(var(--sg-color-inverse) / .9)}.hover\\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.hover\\:bg-violet-600:hover{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity))}.hover\\:text-brand:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.hover\\:text-inverse:hover{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.focus-visible\\:border-inverse:focus-visible{--tw-border-opacity: 1;border-color:rgb(var(--sg-color-inverse) / var(--tw-border-opacity))}.focus-visible\\:text-inverse:focus-visible{--tw-text-opacity: 1;color:rgb(var(--sg-color-inverse) / var(--tw-text-opacity))}.active\\:bg-slate-200:active{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.group:hover .group-hover\\:visible{visibility:visible}.group:hover .group-hover\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\\:opacity-100{opacity:1}.dark\\:border-b:is(.dark *){border-bottom-width:1px}.dark\\:border-slate-100\\/5:is(.dark *){border-color:#f1f5f90d}.dark\\:bg-body\\/60:is(.dark *){background-color:rgb(var(--sg-color-body) / .6)}.dark\\:bg-slate-900\\/70:is(.dark *){background-color:#0f172ab3}.dark\\:bg-bottom:is(.dark *){background-position:bottom}.dark\\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity))}.dark\\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.dark\\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\\:ring-1:is(.dark *){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.dark\\:ring-inset:is(.dark *){--tw-ring-inset: inset}.dark\\:ring-white\\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\\:backdrop-blur:is(.dark *){--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}@media (min-width: 640px){.sm\\:mx-0{margin-left:0;margin-right:0}.sm\\:mb-24{margin-bottom:6rem}.sm\\:mt-10{margin-top:2.5rem}.sm\\:mt-24{margin-top:6rem}.sm\\:rounded-xl{border-radius:.75rem}.sm\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:pt-24{padding-top:6rem}.sm\\:text-5xl{font-size:3rem;line-height:1}}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1024px){.lg\\:sticky{position:sticky}.lg\\:top-20{top:5rem}.lg\\:z-0{z-index:0}.lg\\:mb-32{margin-bottom:8rem}.lg\\:mt-32{margin-top:8rem}.lg\\:block{display:block}.lg\\:flex{display:flex}.lg\\:hidden{display:none}.lg\\:h-\\[34\\.6875rem\\]{height:34.6875rem}.lg\\:min-h-64{min-height:16rem}.lg\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\\:border-0{border-width:0px}.lg\\:px-0{padding-left:0;padding-right:0}.lg\\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\\:px-4{padding-left:1rem;padding-right:1rem}.lg\\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\\:pb-0{padding-bottom:0}.lg\\:pt-20{padding-top:5rem}.lg\\:pt-32{padding-top:8rem}.lg\\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1280px){.xl\\:h-\\[31\\.625rem\\]{height:31.625rem}}:root,.prefers-light-scheme{--sg-color-focus: 79 70 229;--sg-color-soft: 68 78 94;--sg-color-body: 250 250 250;--sg-color-elevate: 243 244 246;--sg-color-inverse: 5 11 23;--sg-color-border: 209 213 219}:root{font-size:16px;scroll-padding-top:6rem;--sg-breadcrumbs-height: 5rem;--sg-article-max-width: 98ch}@media screen and (min-width: 992px){:root{--sg-breadcrumbs-height: 0px}}:root.dark,.prefers-dark-scheme{color-scheme:dark;--sg-color-soft: 150 155 166;--sg-color-inverse: 245 245 245;--sg-color-border: 38 48 64;--sg-color-elevate: 10 19 33;--sg-color-body: 5 11 23;--sg-color-focus: 129 140 248}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_page.BMXDRz-s.css",
    "content": ".example.svelte-k9bk9f .gradient{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position) }.example.svelte-k9bk9f .gradient:hover{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#db2777 var(--tw-gradient-from-position);--tw-gradient-to:rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#7c3aed var(--tw-gradient-to-position);--tw-shadow:0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.task{padding:1rem;border-radius:6px!important;display:flex;flex-direction:column;background-color:#fff!important;box-shadow:#091e4240 0 4px 8px -2px,#091e4214 0 0 0 1px}.task__header{padding-left:1rem;border-left:4px solid #fbbf24;position:relative;margin-bottom:.5rem}.task__title{font-weight:600;color:#1e293b}.task__subtitle{font-size:.9rem;color:#64748b}.task__menu{position:absolute;top:0;right:0;height:1.75rem;width:1.75rem;display:flex;justify-content:center;align-items:center}.task__tags{display:flex;align-items:center;gap:.5rem}.task__tag{display:flex;align-items:center;height:100%;padding:.2rem .5rem;border-radius:4px;font-size:.9rem;box-shadow:#e2e8f0 0 1px 1px,#f8fafc 0 0 1px 1px}.task__icon-archive-box:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m20.25 7.5-.625 10.632a2.25 2.25 0 0 1-2.247 2.118H6.622a2.25 2.25 0 0 1-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z\" /></svg>');width:1.25rem;height:1.25rem}.task__tag.amber{background:#fcd34d;background:linear-gradient(0deg,#fcd34d,#fde68a 10% 90%,#fffbeb);color:#d97706}.task__tag.violet{background:#c4b5fd;background:linear-gradient(0deg,#c4b5fd,#ddd6fe 10% 90%,#f5f3ff);color:#8b5cf6}.task__footer{display:flex;padding-left:1rem}.task__assignees{margin-left:auto;display:flex}.task__assignee{border-radius:50%;display:block;height:2rem;width:2rem;border:2px solid white;background:#bbf7d0;font-size:.75rem;color:#16a34a;margin-left:-.75rem;display:flex;justify-content:center;align-items:center;font-weight:600}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_page.CKKkePFl.css",
    "content": ".example.svelte-5zals3 .blue{--tw-bg-opacity:1;background-color:rgb(96 165 250 / var(--tw-bg-opacity))}.example.svelte-5zals3 .orange{--tw-bg-opacity:1;background-color:rgb(251 146 60 / var(--tw-bg-opacity))}.example.svelte-5zals3 .violet{--tw-bg-opacity:1;background-color:rgb(167 139 250 / var(--tw-bg-opacity))}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_page.D4zGWEJI.css",
    "content": ".example.svelte-1decuf8 .task-pink{--tw-bg-opacity:1;background-color:rgb(219 39 119 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-pink:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77 / var(--tw-bg-opacity))}.example.svelte-1decuf8 .task-slate{--tw-bg-opacity:1;background-color:rgb(148 163 184 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-slate:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.example.svelte-1decuf8 .task-blue{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.example.svelte-1decuf8 .task-blue:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_page.HrAC0il4.css",
    "content": ".example.svelte-ovg8kz .sg-tree-expander .fa-angle-right:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" /></svg>');width:1rem;height:1rem}.example.svelte-ovg8kz .sg-tree-expander .fa-angle-down:before{display:block;content:url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\" /></svg>');width:1rem;height:1rem}.example.svelte-199ryr9 .row-gradient{background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position);opacity:.5}\n"
  },
  {
    "path": "docs/_app/immutable/assets/_page.zCu19reB.css",
    "content": ".example.svelte-134mm6g .gradient{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#ec4899 var(--tw-gradient-from-position);--tw-gradient-to:rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#8b5cf6 var(--tw-gradient-to-position);background-size:unset!important}.example.svelte-134mm6g .gradient:hover{border-radius:.375rem;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from:#db2777 var(--tw-gradient-from-position);--tw-gradient-to:rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to:#7c3aed var(--tw-gradient-to-position);--tw-shadow:0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"
  },
  {
    "path": "docs/_app/immutable/assets/index.DV1K06M3.css",
    "content": ".sg-label-bottom.svelte-3whqv0.svelte-3whqv0{position:absolute;top:calc(100% + 10px);color:#888}.debug.svelte-3whqv0.svelte-3whqv0{position:absolute;top:-10px;right:0;font-size:8px;color:#000}.sg-task.svelte-3whqv0.svelte-3whqv0{position:absolute;border-radius:2px;white-space:nowrap;transition:background-color .2s,opacity .2s;pointer-events:all;touch-action:none}.sg-task-background.svelte-3whqv0.svelte-3whqv0{position:absolute;height:100%;top:0}.sg-task-content.svelte-3whqv0.svelte-3whqv0{position:absolute;height:100%;top:0;padding-left:14px;font-size:14px;display:flex;align-items:center;justify-content:flex-start;-webkit-user-select:none;-moz-user-select:none;user-select:none}.sg-task.animating.svelte-3whqv0.svelte-3whqv0:not(.moving){transition:left .2s,top .2s,transform .2s,background-color .2s,width .2s,height .2s}.sg-task--sticky.svelte-3whqv0.svelte-3whqv0:not(.moving){transition:left .2s,top .2s,transform .2s,background-color .2s,width .2s,height .2s}.sg-task--sticky.svelte-3whqv0>.sg-task-content.svelte-3whqv0{position:sticky;left:0;max-width:100px}.sg-task.moving.svelte-3whqv0.svelte-3whqv0{z-index:10000;opacity:.5}.sg-task.resize-enabled.svelte-3whqv0.svelte-3whqv0:hover:before{content:\"\";width:4px;height:50%;top:25%;position:absolute;border-style:solid;border-color:#ffffff80;cursor:ew-resize;margin-left:3px;left:0;border-width:0 1px;z-index:1}.sg-task.resize-enabled.svelte-3whqv0.svelte-3whqv0:hover:after{content:\"\";width:4px;height:50%;top:25%;position:absolute;border-style:solid;border-color:#ffffff80;cursor:ew-resize;margin-right:3px;right:0;border-width:0 1px;z-index:1}.sg-task-reflected.svelte-3whqv0.svelte-3whqv0{opacity:.5}.sg-task-instant.svelte-3whqv0.svelte-3whqv0{width:2px!important;margin-left:-1px}.sg-task-background.svelte-3whqv0.svelte-3whqv0{background:#0003}.sg-task-default{color:#fff;background:#74bfff}.sg-task-default:hover{background:#62a1d8}.sg-task-default.selected{background:#457096}.sg-task-selected{outline:2px solid rgba(3,169,244,.5);outline-offset:3px;z-index:1}.sg-milestone.svelte-3whqv0.svelte-3whqv0{width:20px!important;min-width:40px;margin-left:-20px}.sg-task.sg-milestone.svelte-3whqv0.svelte-3whqv0{background:transparent}.sg-milestone.svelte-3whqv0 .sg-milestone__diamond.svelte-3whqv0{position:relative}.sg-milestone.svelte-3whqv0 .sg-milestone__diamond.svelte-3whqv0:before{position:absolute;top:0;left:50%;content:\" \";height:28px;width:28px;transform-origin:0 0;transform:rotate(45deg)}.sg-milestone__diamond:before{background:#74bfff}.sg-row.svelte-7u5y5s{position:relative;width:100%;box-sizing:border-box}.sg-time-range.svelte-w7p5la{height:100%;position:absolute;display:flex;flex-direction:column;align-items:center;background-image:linear-gradient(-45deg,#0000 46%,#e03218 49%,#e03218 51%,#0000 55%);background-size:6px 6px!important;color:red;font-weight:400}.sg-time-range-label.svelte-w7p5la{margin-top:10px;background:#fff;white-space:nowrap;padding:4px;font-weight:400;font-size:10px}.sg-time-range-control.svelte-w4nglp{position:absolute}.sg-time-range-handle-left.svelte-w4nglp{position:absolute;left:0}.sg-time-range-handle-right.svelte-w4nglp{position:absolute;right:0}.sg-time-range-disabled.svelte-w4nglp{display:none}.sg-time-range-handle-left.svelte-w4nglp:before,.sg-time-range-handle-right.svelte-w4nglp:before{position:absolute;content:\"\";bottom:4px;border-radius:6px 6px 6px 0;border:2px solid #b0b0b7;width:9px;height:9px;transform:translate(-50%) rotate(-45deg);background-color:#fff;border-color:#e03218;cursor:ew-resize}.column.svelte-1pipta1{position:absolute;height:100%;box-sizing:border-box;border-right:#efefef 1px solid}.column-header-row.svelte-1fuvacf.svelte-1fuvacf{position:relative;white-space:nowrap;height:32px}.column-header-cell.svelte-1fuvacf.svelte-1fuvacf{position:absolute;height:100%;box-sizing:border-box;text-overflow:clip;text-align:center;display:inline-flex;justify-content:center;align-items:center;font-size:1em;font-size:14px;font-weight:300;transition:background .2s;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-right:#efefef 1px solid;border-bottom:#efefef 1px solid}.column-header-cell.svelte-1fuvacf.svelte-1fuvacf:hover{background:#f9f9f9}.column-header-cell.sticky.svelte-1fuvacf>.column-header-cell-label.svelte-1fuvacf{position:sticky;left:1rem}.sg-columns.svelte-1uqfnup{position:absolute;height:100%;width:100%}.sg-columns--background.svelte-1uqfnup{overflow:hidden;background-repeat:repeat;background-position-x:-1px}.sg-column.svelte-1uqfnup{position:absolute;height:100%;width:100%;box-sizing:border-box}.sg-context-menu.svelte-1a9x2in{position:absolute;background:#fff;border:1px solid #ccc;padding:.25em 0;font-size:10px;transition:opacity .4s ease 0s;opacity:1;box-shadow:#00000052 1px 1px 3px}.context-option.svelte-1a9x2in:hover{background:#eee}.context-option.svelte-1a9x2in{cursor:default;padding:.2em 1em}.sg-resize.svelte-1vzamdy{z-index:2;background:#e9eaeb;width:5px;cursor:col-resize;position:absolute;height:100%;transition:width .2s,transform .2s}.sg-resize.svelte-1vzamdy:hover{transform:translate(-2px);width:10px}.sg-disable-transition.svelte-1csmpwr .sg-task,.sg-disable-transition.svelte-1csmpwr .sg-milestone{transition:transform 0s,background-color .2s,width 0s!important}.sg-view:not(:first-child){margin-left:5px}.sg-timeline.svelte-1csmpwr{flex:1 1 0%;display:flex;flex-direction:column;overflow-x:auto}.sg-gantt.svelte-1csmpwr{display:flex;width:100%;height:100%;position:relative}.sg-foreground.svelte-1csmpwr{box-sizing:border-box;overflow:hidden;top:0;left:0;position:absolute;width:100%;height:100%;z-index:1;pointer-events:none}.sg-rows.svelte-1csmpwr{width:100%;box-sizing:border-box;overflow:hidden}.sg-timeline-body.svelte-1csmpwr{overflow:auto;flex:1 1 auto}.sg-header-scroller.svelte-1csmpwr{overflow:hidden;position:relative}.content.svelte-1csmpwr{position:relative}*{box-sizing:border-box}.sg-tree-expander.svelte-1tk4vqn{cursor:pointer;min-width:1.4em;display:flex;justify-content:center;align-items:center}.sg-cell-inner.svelte-1tk4vqn{display:flex}.sg-table-row.svelte-1puymdp.svelte-1puymdp{display:inline-flex;min-width:100%;align-items:stretch;position:relative;font-weight:400;font-size:14px;transition:height .2s}.sg-table-cell.svelte-1puymdp.svelte-1puymdp{border-right:1px solid #eee}.sg-table-cell.svelte-1puymdp.svelte-1puymdp:last-child{border-right:0}.sg-table-body-cell.svelte-1puymdp.svelte-1puymdp{border-bottom:#efefef 1px solid;background-color:#fff;font-weight:700}.sg-table-row.svelte-1puymdp:last-child>.sg-table-body-cell.svelte-1puymdp{border-bottom:0}.sg-resource-image.svelte-1puymdp.svelte-1puymdp{width:2.4em;height:2.4em;border-radius:50%;margin-right:.6em;background:#047c69}.sg-resource-info.svelte-1puymdp.svelte-1puymdp{flex:1;height:100%;display:flex;flex-direction:row;align-items:center}.sg-table-icon.svelte-1puymdp.svelte-1puymdp{margin-right:.5em}.sg-table.svelte-1pxxfqb{overflow-x:auto;display:flex;flex-direction:column}.sg-table-scroller.svelte-1pxxfqb{width:100%;overflow-y:hidden}.sg-table-header.svelte-1pxxfqb{display:flex;align-items:stretch;overflow:hidden;border-bottom:#efefef 1px solid;background-color:#fbfbfb}.sg-table-body.svelte-1pxxfqb{display:flex;flex:1 1 0;width:100%;overflow-y:hidden}.sg-table-header-cell.svelte-1pxxfqb{font-size:14px;font-weight:400}.sg-table-cell{white-space:nowrap;overflow:hidden;display:flex;align-items:center;flex-shrink:0;padding:0 .5em;height:100%}.sg-table-cell:last-child{flex-grow:1}.sg-dependency.svelte-12syssu{position:absolute;width:100%;height:100%}.arrow.svelte-12syssu{position:absolute;left:0;pointer-events:none}.select-area.svelte-12syssu{pointer-events:visible;position:absolute}.dependency-container.svelte-epxabx{position:absolute;width:100%;height:100%;pointer-events:none;top:0;float:left;overflow:hidden;z-index:0}\n"
  },
  {
    "path": "docs/_app/immutable/assets/index.LyGRdlRZ.css",
    "content": ".sg-label-bottom.svelte-3whqv0.svelte-3whqv0{position:absolute;top:calc(100% + 10px);color:#888}.debug.svelte-3whqv0.svelte-3whqv0{position:absolute;top:-10px;right:0;font-size:8px;color:#000}.sg-task.svelte-3whqv0.svelte-3whqv0{position:absolute;border-radius:2px;white-space:nowrap;transition:background-color .2s,opacity .2s;pointer-events:all;touch-action:none}.sg-task-background.svelte-3whqv0.svelte-3whqv0{position:absolute;height:100%;top:0}.sg-task-content.svelte-3whqv0.svelte-3whqv0{position:absolute;height:100%;top:0;padding-left:14px;font-size:14px;display:flex;align-items:center;justify-content:flex-start;-webkit-user-select:none;-moz-user-select:none;user-select:none}.sg-task.animating.svelte-3whqv0.svelte-3whqv0:not(.moving){transition:left .2s,top .2s,transform .2s,background-color .2s,width .2s,height .2s}.sg-task--sticky.svelte-3whqv0.svelte-3whqv0:not(.moving){transition:left .2s,top .2s,transform .2s,background-color .2s,width .2s,height .2s}.sg-task--sticky.svelte-3whqv0>.sg-task-content.svelte-3whqv0{position:sticky;left:0;max-width:100px}.sg-task.moving.svelte-3whqv0.svelte-3whqv0{z-index:10000;opacity:.5}.sg-task.resize-enabled.svelte-3whqv0.svelte-3whqv0:hover:before{content:\"\";width:4px;height:50%;top:25%;position:absolute;border-style:solid;border-color:#ffffff80;cursor:ew-resize;margin-left:3px;left:0;border-width:0 1px;z-index:1}.sg-task.resize-enabled.svelte-3whqv0.svelte-3whqv0:hover:after{content:\"\";width:4px;height:50%;top:25%;position:absolute;border-style:solid;border-color:#ffffff80;cursor:ew-resize;margin-right:3px;right:0;border-width:0 1px;z-index:1}.sg-task-reflected.svelte-3whqv0.svelte-3whqv0{opacity:.5}.sg-task-instant.svelte-3whqv0.svelte-3whqv0{width:2px!important;margin-left:-1px}.sg-task-background.svelte-3whqv0.svelte-3whqv0{background:#0003}.sg-task-default{color:#fff;background:#74bfff}.sg-task-default:hover{background:#62a1d8}.sg-task-default.selected{background:#457096}.sg-task-selected{outline:2px solid rgba(3,169,244,.5);outline-offset:3px;z-index:1}.sg-milestone.svelte-3whqv0.svelte-3whqv0{width:20px!important;min-width:40px;margin-left:-20px}.sg-task.sg-milestone.svelte-3whqv0.svelte-3whqv0{background:transparent}.sg-milestone.svelte-3whqv0 .sg-milestone__diamond.svelte-3whqv0{position:relative}.sg-milestone.svelte-3whqv0 .sg-milestone__diamond.svelte-3whqv0:before{position:absolute;top:0;left:50%;content:\" \";height:28px;width:28px;transform-origin:0 0;transform:rotate(45deg)}.sg-milestone__diamond:before{background:#74bfff}.sg-row.svelte-7u5y5s{position:relative;width:100%;box-sizing:border-box}.sg-time-range.svelte-w7p5la{height:100%;position:absolute;display:flex;flex-direction:column;align-items:center;background-image:linear-gradient(-45deg,#0000 46%,#e03218 49% 51%,#0000 55%);background-size:6px 6px!important;color:red;font-weight:400}.sg-time-range-label.svelte-w7p5la{margin-top:10px;background:#fff;white-space:nowrap;padding:4px;font-weight:400;font-size:10px}.sg-time-range-control.svelte-w4nglp{position:absolute}.sg-time-range-handle-left.svelte-w4nglp{position:absolute;left:0}.sg-time-range-handle-right.svelte-w4nglp{position:absolute;right:0}.sg-time-range-disabled.svelte-w4nglp{display:none}.sg-time-range-handle-left.svelte-w4nglp:before,.sg-time-range-handle-right.svelte-w4nglp:before{position:absolute;content:\"\";bottom:4px;border-radius:6px 6px 6px 0;border:2px solid #b0b0b7;width:9px;height:9px;transform:translate(-50%) rotate(-45deg);background-color:#fff;border-color:#e03218;cursor:ew-resize}.column.svelte-1pipta1{position:absolute;height:100%;box-sizing:border-box;border-right:#efefef 1px solid}.column-header-row.svelte-1fuvacf.svelte-1fuvacf{position:relative;white-space:nowrap;height:32px}.column-header-cell.svelte-1fuvacf.svelte-1fuvacf{position:absolute;height:100%;box-sizing:border-box;text-overflow:clip;text-align:center;display:inline-flex;justify-content:center;align-items:center;font-size:1em;font-size:14px;font-weight:300;transition:background .2s;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-right:#efefef 1px solid;border-bottom:#efefef 1px solid}.column-header-cell.svelte-1fuvacf.svelte-1fuvacf:hover{background:#f9f9f9}.column-header-cell.sticky.svelte-1fuvacf>.column-header-cell-label.svelte-1fuvacf{position:sticky;left:1rem}.sg-columns.svelte-1uqfnup{position:absolute;height:100%;width:100%}.sg-columns--background.svelte-1uqfnup{overflow:hidden;background-repeat:repeat;background-position-x:-1px}.sg-column.svelte-1uqfnup{position:absolute;height:100%;width:100%;box-sizing:border-box}.sg-context-menu.svelte-1a9x2in{position:absolute;background:#fff;border:1px solid #ccc;padding:.25em 0;font-size:10px;transition:opacity .4s ease 0s;opacity:1;box-shadow:#00000052 1px 1px 3px}.context-option.svelte-1a9x2in:hover{background:#eee}.context-option.svelte-1a9x2in{cursor:default;padding:.2em 1em}.sg-resize.svelte-1vzamdy{z-index:2;background:#e9eaeb;width:5px;cursor:col-resize;position:absolute;height:100%;transition:width .2s,transform .2s}.sg-resize.svelte-1vzamdy:hover{transform:translate(-2px);width:10px}.sg-disable-transition.svelte-1csmpwr .sg-task,.sg-disable-transition.svelte-1csmpwr .sg-milestone{transition:transform 0s,background-color .2s,width 0s!important}.sg-view:not(:first-child){margin-left:5px}.sg-timeline.svelte-1csmpwr{flex:1 1 0%;display:flex;flex-direction:column;overflow-x:auto}.sg-gantt.svelte-1csmpwr{display:flex;width:100%;height:100%;position:relative}.sg-foreground.svelte-1csmpwr{box-sizing:border-box;overflow:hidden;top:0;left:0;position:absolute;width:100%;height:100%;z-index:1;pointer-events:none}.sg-rows.svelte-1csmpwr{width:100%;box-sizing:border-box;overflow:hidden}.sg-timeline-body.svelte-1csmpwr{overflow:auto;flex:1 1 auto}.sg-header-scroller.svelte-1csmpwr{overflow:hidden;position:relative}.content.svelte-1csmpwr{position:relative}*{box-sizing:border-box}.sg-tree-expander.svelte-1tk4vqn{cursor:pointer;min-width:1.4em;display:flex;justify-content:center;align-items:center}.sg-cell-inner.svelte-1tk4vqn{display:flex}.sg-table-row.svelte-1puymdp.svelte-1puymdp{display:inline-flex;min-width:100%;align-items:stretch;position:relative;font-weight:400;font-size:14px;transition:height .2s}.sg-table-cell.svelte-1puymdp.svelte-1puymdp{border-right:1px solid #eee}.sg-table-cell.svelte-1puymdp.svelte-1puymdp:last-child{border-right:0}.sg-table-body-cell.svelte-1puymdp.svelte-1puymdp{border-bottom:#efefef 1px solid;background-color:#fff;font-weight:700}.sg-table-row.svelte-1puymdp:last-child>.sg-table-body-cell.svelte-1puymdp{border-bottom:0}.sg-resource-image.svelte-1puymdp.svelte-1puymdp{width:2.4em;height:2.4em;border-radius:50%;margin-right:.6em;background:#047c69}.sg-resource-info.svelte-1puymdp.svelte-1puymdp{flex:1;height:100%;display:flex;flex-direction:row;align-items:center}.sg-table-icon.svelte-1puymdp.svelte-1puymdp{margin-right:.5em}.sg-table.svelte-1pxxfqb{overflow-x:auto;display:flex;flex-direction:column}.sg-table-scroller.svelte-1pxxfqb{width:100%;overflow-y:hidden}.sg-table-header.svelte-1pxxfqb{display:flex;align-items:stretch;overflow:hidden;border-bottom:#efefef 1px solid;background-color:#fbfbfb}.sg-table-body.svelte-1pxxfqb{display:flex;flex:1 1 0;width:100%;overflow-y:hidden}.sg-table-header-cell.svelte-1pxxfqb{font-size:14px;font-weight:400}.sg-table-cell{white-space:nowrap;overflow:hidden;display:flex;align-items:center;flex-shrink:0;padding:0 .5em;height:100%}.sg-table-cell:last-child{flex-grow:1}.sg-dependency.svelte-12syssu{position:absolute;width:100%;height:100%}.arrow.svelte-12syssu{position:absolute;left:0;pointer-events:none}.select-area.svelte-12syssu{pointer-events:visible;position:absolute}.dependency-container.svelte-epxabx{position:absolute;width:100%;height:100%;pointer-events:none;top:0;float:left;overflow:hidden;z-index:0}\n"
  },
  {
    "path": "docs/_app/immutable/chunks/A.201zTarD.js",
    "content": "import{s as _,q as h,e as m,c,b as d,f,r as o,i as p,v as b,w as $,x as g}from\"./scheduler.lruobs1Y.js\";import{S as v,i as q,a as A,t as S}from\"./index.DyGm78TJ.js\";import{b as u}from\"./paths.oQcPQ3IF.js\";function W(a){let s,n,r;const i=a[2].default,t=h(i,a,a[1],null);return{c(){s=m(\"a\"),t&&t.c(),this.h()},l(e){s=c(e,\"A\",{href:!0});var l=d(s);t&&t.l(l),l.forEach(f),this.h()},h(){o(s,\"href\",n=a[0].startsWith(\"/\")?`${u}${a[0]}`:a[0])},m(e,l){p(e,s,l),t&&t.m(s,null),r=!0},p(e,[l]){t&&t.p&&(!r||l&2)&&b(t,i,e,e[1],r?g(i,e[1],l,null):$(e[1]),null),(!r||l&1&&n!==(n=e[0].startsWith(\"/\")?`${u}${e[0]}`:e[0]))&&o(s,\"href\",n)},i(e){r||(A(t,e),r=!0)},o(e){S(t,e),r=!1},d(e){e&&f(s),t&&t.d(e)}}}function w(a,s,n){let{$$slots:r={},$$scope:i}=s,{href:t}=s;return a.$$set=e=>{\"href\"in e&&n(0,t=e.href),\"$$scope\"in e&&n(1,i=e.$$scope)},[t,i,r]}class k extends v{constructor(s){super(),q(this,s,w,W,_,{href:0})}}export{k as A};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/Button.De7jzsKF.js",
    "content": "import{s as M,l as O,i as E,f as c,m as U,o as N,p as Q,q as H,e as k,a as S,c as v,b as y,g as A,r as d,u as P,h as b,v as I,w as J,x as K,t as q,d as T}from\"./scheduler.lruobs1Y.js\";import{S as R,i as V,g as W,t as B,c as X,a as C}from\"./index.DyGm78TJ.js\";import{g as L}from\"./spread.CgU5AtxT.js\";function Y(f){let e,t,l,r,u,i=f[0]===\"left\"&&z(f);const h=f[11].default,a=H(h,f,f[10],null);let n=f[0]===\"right\"&&D(f),_=[{class:f[4]},f[5]],m={};for(let s=0;s<_.length;s+=1)m=N(m,_[s]);return{c(){e=k(\"a\"),i&&i.c(),t=S(),l=k(\"span\"),a&&a.c(),r=S(),n&&n.c(),this.h()},l(s){e=v(s,\"A\",{class:!0});var o=y(e);i&&i.l(o),t=A(o),l=v(o,\"SPAN\",{class:!0});var g=y(l);a&&a.l(g),g.forEach(c),r=A(o),n&&n.l(o),o.forEach(c),this.h()},h(){d(l,\"class\",f[3]),P(e,m)},m(s,o){E(s,e,o),i&&i.m(e,null),b(e,t),b(e,l),a&&a.m(l,null),b(e,r),n&&n.m(e,null),u=!0},p(s,o){s[0]===\"left\"?i?i.p(s,o):(i=z(s),i.c(),i.m(e,t)):i&&(i.d(1),i=null),a&&a.p&&(!u||o&1024)&&I(a,h,s,s[10],u?K(h,s[10],o,null):J(s[10]),null),(!u||o&8)&&d(l,\"class\",s[3]),s[0]===\"right\"?n?n.p(s,o):(n=D(s),n.c(),n.m(e,null)):n&&(n.d(1),n=null),P(e,m=L(_,[(!u||o&16)&&{class:s[4]},o&32&&s[5]]))},i(s){u||(C(a,s),u=!0)},o(s){B(a,s),u=!1},d(s){s&&c(e),i&&i.d(),a&&a.d(s),n&&n.d()}}}function Z(f){let e,t,l,r,u,i=f[0]===\"left\"&&F(f);const h=f[11].default,a=H(h,f,f[10],null);let n=f[0]===\"right\"&&G(f),_=[{class:f[4]},f[5]],m={};for(let s=0;s<_.length;s+=1)m=N(m,_[s]);return{c(){e=k(\"button\"),i&&i.c(),t=S(),l=k(\"span\"),a&&a.c(),r=S(),n&&n.c(),this.h()},l(s){e=v(s,\"BUTTON\",{class:!0});var o=y(e);i&&i.l(o),t=A(o),l=v(o,\"SPAN\",{class:!0});var g=y(l);a&&a.l(g),g.forEach(c),r=A(o),n&&n.l(o),o.forEach(c),this.h()},h(){d(l,\"class\",f[3]),P(e,m)},m(s,o){E(s,e,o),i&&i.m(e,null),b(e,t),b(e,l),a&&a.m(l,null),b(e,r),n&&n.m(e,null),e.autofocus&&e.focus(),u=!0},p(s,o){s[0]===\"left\"?i?i.p(s,o):(i=F(s),i.c(),i.m(e,t)):i&&(i.d(1),i=null),a&&a.p&&(!u||o&1024)&&I(a,h,s,s[10],u?K(h,s[10],o,null):J(s[10]),null),(!u||o&8)&&d(l,\"class\",s[3]),s[0]===\"right\"?n?n.p(s,o):(n=G(s),n.c(),n.m(e,null)):n&&(n.d(1),n=null),P(e,m=L(_,[(!u||o&16)&&{class:s[4]},o&32&&s[5]]))},i(s){u||(C(a,s),u=!0)},o(s){B(a,s),u=!1},d(s){s&&c(e),i&&i.d(),a&&a.d(s),n&&n.d()}}}function z(f){let e,t;return{c(){e=k(\"span\"),t=q(\"<-\"),this.h()},l(l){e=v(l,\"SPAN\",{class:!0});var r=y(e);t=T(r,\"<-\"),r.forEach(c),this.h()},h(){d(e,\"class\",f[2])},m(l,r){E(l,e,r),b(e,t)},p(l,r){r&4&&d(e,\"class\",l[2])},d(l){l&&c(e)}}}function D(f){let e,t;return{c(){e=k(\"span\"),t=q(\"->\"),this.h()},l(l){e=v(l,\"SPAN\",{class:!0});var r=y(e);t=T(r,\"->\"),r.forEach(c),this.h()},h(){d(e,\"class\",f[2])},m(l,r){E(l,e,r),b(e,t)},p(l,r){r&4&&d(e,\"class\",l[2])},d(l){l&&c(e)}}}function F(f){let e,t;return{c(){e=k(\"span\"),t=q(\"<-\"),this.h()},l(l){e=v(l,\"SPAN\",{class:!0});var r=y(e);t=T(r,\"<-\"),r.forEach(c),this.h()},h(){d(e,\"class\",f[2])},m(l,r){E(l,e,r),b(e,t)},p(l,r){r&4&&d(e,\"class\",l[2])},d(l){l&&c(e)}}}function G(f){let e,t;return{c(){e=k(\"span\"),t=q(\"->\"),this.h()},l(l){e=v(l,\"SPAN\",{class:!0});var r=y(e);t=T(r,\"->\"),r.forEach(c),this.h()},h(){d(e,\"class\",f[2])},m(l,r){E(l,e,r),b(e,t)},p(l,r){r&4&&d(e,\"class\",l[2])},d(l){l&&c(e)}}}function w(f){let e,t,l,r;const u=[Z,Y],i=[];function h(a,n){return a[1]?0:1}return e=h(f),t=i[e]=u[e](f),{c(){t.c(),l=O()},l(a){t.l(a),l=O()},m(a,n){i[e].m(a,n),E(a,l,n),r=!0},p(a,[n]){let _=e;e=h(a),e===_?i[e].p(a,n):(W(),B(i[_],1,1,()=>{i[_]=null}),X(),t=i[e],t?t.p(a,n):(t=i[e]=u[e](a),t.c()),C(t,1),t.m(l.parentNode,l))},i(a){r||(C(t),r=!0)},o(a){B(t),r=!1},d(a){a&&c(l),i[e].d(a)}}}function x(f,e,t){let l,r,u,i;const h=[\"primary\",\"type\",\"arrow\",\"as\",\"class\"];let a=U(e,h),{$$slots:n={},$$scope:_}=e,{primary:m=!1}=e,{type:s=\"flat\"}=e,{arrow:o=null}=e,{as:g=\"button\"}=e,{class:j=\"\"}=e;return f.$$set=p=>{e=N(N({},e),Q(p)),t(5,a=U(e,h)),\"primary\"in p&&t(6,m=p.primary),\"type\"in p&&t(7,s=p.type),\"arrow\"in p&&t(0,o=p.arrow),\"as\"in p&&t(8,g=p.as),\"class\"in p&&t(9,j=p.class),\"$$scope\"in p&&t(10,_=p.$$scope)},f.$$.update=()=>{t(1,l=g===\"button\"&&!a.href),f.$$.dirty&706&&t(4,r=`group transform-gpu text-base font-medium transition-all hover:scale-105\n    ${s===\"raised\"&&\"flex items-center justify-center\"}\n    ${(l||s===\"raised\")&&\"rounded-md px-4 992:px-5 py-2\"}\n    ${s===\"raised\"?m?\"bg-inverse text-body hover:bg-inverse/90\":\"bg-body border-2 border-inverse text-inverse\":\"text-soft hover:text-inverse\"}\n    ${j}`),f.$$.dirty&1&&t(3,u=`inline-block transform transition-transform duration-100 group-hover:translate-x-0 ${o===\"left\"&&\"-translate-x-3 \"} ${o===\"right\"&&\"translate-x-2\"}`),f.$$.dirty&1&&t(2,i=`${o&&\"opacity-0 transition-opacity duration-100 group-hover:visible group-hover:opacity-100\"} ${o?\"inline-block\":\"hidden\"}`)},[o,l,i,u,r,a,m,s,g,j,_,n]}class le extends R{constructor(e){super(),V(this,e,x,w,M,{primary:6,type:7,arrow:0,as:8,class:9})}}export{le as B};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/control.CYgJF_JY.js",
    "content": "class i{constructor(t,s){this.status=t,typeof s==\"string\"?this.body={message:s}:s?this.body=s:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class o{constructor(t,s){this.status=t,this.location=s}}class a extends Error{constructor(t,s,e){super(e),this.status=t,this.text=s}}export{i as H,o as R,a as S};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/each.DqwAsWNO.js",
    "content": "import{t as z,a as B}from\"./index.DyGm78TJ.js\";import{A as C}from\"./scheduler.lruobs1Y.js\";function G(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function H(n,o){z(n,1,1,()=>{o.delete(n.key)})}function I(n,o,S,D,x,g,f,j,p,k,w,q){let i=n.length,d=g.length,c=i;const a={};for(;c--;)a[n[c].key]=c;const h=[],u=new Map,m=new Map,M=[];for(c=d;c--;){const e=q(x,g,c),s=S(e);let t=f.get(s);t?M.push(()=>t.p(e,o)):(t=k(s,e),t.c()),u.set(s,h[c]=t),s in a&&m.set(s,Math.abs(c-a[s]))}const v=new Set,A=new Set;function y(e){B(e,1),e.m(j,w),f.set(e.key,e),w=e.first,d--}for(;i&&d;){const e=h[d-1],s=n[i-1],t=e.key,l=s.key;e===s?(w=e.first,i--,d--):u.has(l)?!f.has(t)||v.has(t)?y(e):A.has(l)?i--:m.get(t)>m.get(l)?(A.add(t),y(e)):(v.add(l),i--):(p(s,f),i--)}for(;i--;){const e=n[i];u.has(e.key)||p(e,f)}for(;d;)y(h[d-1]);return C(M),h}export{G as e,H as o,I as u};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/entry.0-2BfHub.js",
    "content": "import{n as G,ae as it,A as ct,s as lt,O as ft,L as ut}from\"./scheduler.lruobs1Y.js\";import{a as dt,b as P}from\"./paths.oQcPQ3IF.js\";import{H as re,S as _e,R as $e}from\"./control.CYgJF_JY.js\";new URL(\"sveltekit-internal://\");function ht(e,n){return e===\"/\"||n===\"ignore\"?e:n===\"never\"?e.endsWith(\"/\")?e.slice(0,-1):e:n===\"always\"&&!e.endsWith(\"/\")?e+\"/\":e}function pt(e){return e.split(\"%25\").map(decodeURI).join(\"%25\")}function gt(e){for(const n in e)e[n]=decodeURIComponent(e[n]);return e}function ue({href:e}){return e.split(\"#\")[0]}const mt=[\"href\",\"pathname\",\"search\",\"toString\",\"toJSON\"];function _t(e,n,t){const a=new URL(e);Object.defineProperty(a,\"searchParams\",{value:new Proxy(a.searchParams,{get(r,o){if(o===\"get\"||o===\"getAll\"||o===\"has\")return s=>(t(s),r[o](s));n();const i=Reflect.get(r,o);return typeof i==\"function\"?i.bind(r):i}}),enumerable:!0,configurable:!0});for(const r of mt)Object.defineProperty(a,r,{get(){return n(),e[r]},enumerable:!0,configurable:!0});return a}const yt=\"/__data.json\",wt=\".html__data.json\";function vt(e){return e.endsWith(\".html\")?e.replace(/\\.html$/,wt):e.replace(/\\/$/,\"\")+yt}function bt(...e){let n=5381;for(const t of e)if(typeof t==\"string\"){let a=t.length;for(;a;)n=n*33^t.charCodeAt(--a)}else if(ArrayBuffer.isView(t)){const a=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);let r=a.length;for(;r;)n=n*33^a[--r]}else throw new TypeError(\"value must be a string or TypedArray\");return(n>>>0).toString(36)}function Et(e){const n=atob(e),t=new Uint8Array(n.length);for(let a=0;a<n.length;a++)t[a]=n.charCodeAt(a);return t.buffer}const Ce=window.fetch;window.fetch=(e,n)=>((e instanceof Request?e.method:(n==null?void 0:n.method)||\"GET\")!==\"GET\"&&H.delete(ye(e)),Ce(e,n));const H=new Map;function kt(e,n){const t=ye(e,n),a=document.querySelector(t);if(a!=null&&a.textContent){let{body:r,...o}=JSON.parse(a.textContent);const i=a.getAttribute(\"data-ttl\");return i&&H.set(t,{body:r,init:o,ttl:1e3*Number(i)}),a.getAttribute(\"data-b64\")!==null&&(r=Et(r)),Promise.resolve(new Response(r,o))}return window.fetch(e,n)}function At(e,n,t){if(H.size>0){const a=ye(e,t),r=H.get(a);if(r){if(performance.now()<r.ttl&&[\"default\",\"force-cache\",\"only-if-cached\",void 0].includes(t==null?void 0:t.cache))return new Response(r.body,r.init);H.delete(a)}}return window.fetch(n,t)}function ye(e,n){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(n!=null&&n.headers||n!=null&&n.body){const r=[];n.headers&&r.push([...new Headers(n.headers)].join(\",\")),n.body&&(typeof n.body==\"string\"||ArrayBuffer.isView(n.body))&&r.push(n.body),a+=`[data-hash=\"${bt(...r)}\"]`}return a}const St=/^(\\[)?(\\.\\.\\.)?(\\w+)(?:=(\\w+))?(\\])?$/;function Rt(e){const n=[];return{pattern:e===\"/\"?/^\\/$/:new RegExp(`^${Lt(e).map(a=>{const r=/^\\[\\.\\.\\.(\\w+)(?:=(\\w+))?\\]$/.exec(a);if(r)return n.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),\"(?:/(.*))?\";const o=/^\\[\\[(\\w+)(?:=(\\w+))?\\]\\]$/.exec(a);if(o)return n.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),\"(?:/([^/]+))?\";if(!a)return;const i=a.split(/\\[(.+?)\\](?!\\])/);return\"/\"+i.map((c,l)=>{if(l%2){if(c.startsWith(\"x+\"))return de(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith(\"u+\"))return de(String.fromCharCode(...c.slice(2).split(\"-\").map(f=>parseInt(f,16))));const u=St.exec(c),[,h,p,d,g]=u;return n.push({name:d,matcher:g,optional:!!h,rest:!!p,chained:p?l===1&&i[0]===\"\":!1}),p?\"(.*?)\":h?\"([^/]*)?\":\"([^/]+?)\"}return de(c)}).join(\"\")}).join(\"\")}/?$`),params:n}}function It(e){return!/^\\([^)]+\\)$/.test(e)}function Lt(e){return e.slice(1).split(\"/\").filter(It)}function Pt(e,n,t){const a={},r=e.slice(1),o=r.filter(s=>s!==void 0);let i=0;for(let s=0;s<n.length;s+=1){const c=n[s];let l=r[s-i];if(c.chained&&c.rest&&i&&(l=r.slice(s-i,s+1).filter(u=>u).join(\"/\"),i=0),l===void 0){c.rest&&(a[c.name]=\"\");continue}if(!c.matcher||t[c.matcher](l)){a[c.name]=l;const u=n[s+1],h=r[s+1];u&&!u.rest&&u.optional&&h&&c.chained&&(i=0),!u&&!h&&Object.keys(a).length===o.length&&(i=0);continue}if(c.optional&&c.chained){i++;continue}return}if(!i)return a}function de(e){return e.normalize().replace(/[[\\]]/g,\"\\\\$&\").replace(/%/g,\"%25\").replace(/\\//g,\"%2[Ff]\").replace(/\\?/g,\"%3[Ff]\").replace(/#/g,\"%23\").replace(/[.*+?^${}()|\\\\]/g,\"\\\\$&\")}function Ut({nodes:e,server_loads:n,dictionary:t,matchers:a}){const r=new Set(n);return Object.entries(t).map(([s,[c,l,u]])=>{const{pattern:h,params:p}=Rt(s),d={id:s,exec:g=>{const f=h.exec(g);if(f)return Pt(f,p,a)},errors:[1,...u||[]].map(g=>e[g]),layouts:[0,...l||[]].map(i),leaf:o(c)};return d.errors.length=d.layouts.length=Math.max(d.errors.length,d.layouts.length),d});function o(s){const c=s<0;return c&&(s=~s),[c,e[s]]}function i(s){return s===void 0?s:[r.has(s),e[s]]}}function Ve(e,n=JSON.parse){try{return n(sessionStorage[e])}catch{}}function Pe(e,n,t=JSON.stringify){const a=t(n);try{sessionStorage[e]=a}catch{}}const O=[];function xt(e,n){return{subscribe:oe(e,n).subscribe}}function oe(e,n=G){let t;const a=new Set;function r(s){if(lt(e,s)&&(e=s,t)){const c=!O.length;for(const l of a)l[1](),O.push(l,e);if(c){for(let l=0;l<O.length;l+=2)O[l][0](O[l+1]);O.length=0}}}function o(s){r(s(e))}function i(s,c=G){const l=[s,c];return a.add(l),a.size===1&&(t=n(r,o)||G),s(e),()=>{a.delete(l),a.size===0&&t&&(t(),t=null)}}return{set:r,update:o,subscribe:i}}function cn(e,n,t){const a=!Array.isArray(e),r=a?[e]:e;if(!r.every(Boolean))throw new Error(\"derived() expects stores as input, got a falsy value\");const o=n.length<2;return xt(t,(i,s)=>{let c=!1;const l=[];let u=0,h=G;const p=()=>{if(u)return;h();const g=n(a?l[0]:l,i,s);o?i(g):h=ft(g)?g:G},d=r.map((g,f)=>it(g,_=>{l[f]=_,u&=~(1<<f),c&&p()},()=>{u|=1<<f}));return c=!0,p(),function(){ct(d),h(),c=!1}})}const Tt=\"1723125560024\",Fe=\"sveltekit:snapshot\",qe=\"sveltekit:scroll\",Ge=\"sveltekit:states\",Nt=\"sveltekit:pageurl\",$=\"sveltekit:history\",B=\"sveltekit:navigation\",J={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Y=location.origin;function He(e){if(e instanceof URL)return e;let n=document.baseURI;if(!n){const t=document.getElementsByTagName(\"base\");n=t.length?t[0].href:document.URL}return new URL(e,n)}function we(){return{x:pageXOffset,y:pageYOffset}}function j(e,n){return e.getAttribute(`data-sveltekit-${n}`)}const Ue={...J,\"\":J.hover};function Me(e){let n=e.assignedSlot??e.parentNode;return(n==null?void 0:n.nodeType)===11&&(n=n.host),n}function Be(e,n){for(;e&&e!==n;){if(e.nodeName.toUpperCase()===\"A\"&&e.hasAttribute(\"href\"))return e;e=Me(e)}}function pe(e,n){let t;try{t=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,r=!t||!!a||se(t,n)||(e.getAttribute(\"rel\")||\"\").split(/\\s+/).includes(\"external\"),o=(t==null?void 0:t.origin)===Y&&e.hasAttribute(\"download\");return{url:t,external:r,target:a,download:o}}function X(e){let n=null,t=null,a=null,r=null,o=null,i=null,s=e;for(;s&&s!==document.documentElement;)a===null&&(a=j(s,\"preload-code\")),r===null&&(r=j(s,\"preload-data\")),n===null&&(n=j(s,\"keepfocus\")),t===null&&(t=j(s,\"noscroll\")),o===null&&(o=j(s,\"reload\")),i===null&&(i=j(s,\"replacestate\")),s=Me(s);function c(l){switch(l){case\"\":case\"true\":return!0;case\"off\":case\"false\":return!1;default:return}}return{preload_code:Ue[a??\"off\"],preload_data:Ue[r??\"off\"],keepfocus:c(n),noscroll:c(t),reload:c(o),replace_state:c(i)}}function xe(e){const n=oe(e);let t=!0;function a(){t=!0,n.update(i=>i)}function r(i){t=!1,n.set(i)}function o(i){let s;return n.subscribe(c=>{(s===void 0||t&&c!==s)&&i(s=c)})}return{notify:a,set:r,subscribe:o}}function Ot(){const{set:e,subscribe:n}=oe(!1);let t;async function a(){clearTimeout(t);try{const r=await fetch(`${dt}/_app/version.json`,{headers:{pragma:\"no-cache\",\"cache-control\":\"no-cache\"}});if(!r.ok)return!1;const i=(await r.json()).version!==Tt;return i&&(e(!0),clearTimeout(t)),i}catch{return!1}}return{subscribe:n,check:a}}function se(e,n){return e.origin!==Y||!e.pathname.startsWith(n)}const jt=-1,Dt=-2,$t=-3,Ct=-4,Vt=-5,Ft=-6;function qt(e,n){if(typeof e==\"number\")return r(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error(\"Invalid input\");const t=e,a=Array(t.length);function r(o,i=!1){if(o===jt)return;if(o===$t)return NaN;if(o===Ct)return 1/0;if(o===Vt)return-1/0;if(o===Ft)return-0;if(i)throw new Error(\"Invalid input\");if(o in a)return a[o];const s=t[o];if(!s||typeof s!=\"object\")a[o]=s;else if(Array.isArray(s))if(typeof s[0]==\"string\"){const c=s[0],l=n==null?void 0:n[c];if(l)return a[o]=l(r(s[1]));switch(c){case\"Date\":a[o]=new Date(s[1]);break;case\"Set\":const u=new Set;a[o]=u;for(let d=1;d<s.length;d+=1)u.add(r(s[d]));break;case\"Map\":const h=new Map;a[o]=h;for(let d=1;d<s.length;d+=2)h.set(r(s[d]),r(s[d+1]));break;case\"RegExp\":a[o]=new RegExp(s[1],s[2]);break;case\"Object\":a[o]=Object(s[1]);break;case\"BigInt\":a[o]=BigInt(s[1]);break;case\"null\":const p=Object.create(null);a[o]=p;for(let d=1;d<s.length;d+=2)p[s[d]]=r(s[d+1]);break;default:throw new Error(`Unknown type ${c}`)}}else{const c=new Array(s.length);a[o]=c;for(let l=0;l<s.length;l+=1){const u=s[l];u!==Dt&&(c[l]=r(u))}}else{const c={};a[o]=c;for(const l in s){const u=s[l];c[l]=r(u)}}return a[o]}return r(0)}const Ke=new Set([\"load\",\"prerender\",\"csr\",\"ssr\",\"trailingSlash\",\"config\"]);[...Ke];const Gt=new Set([...Ke]);[...Gt];function Ht(e){return e.filter(n=>n!=null)}const Mt=\"x-sveltekit-invalidated\",Bt=\"x-sveltekit-trailing-slash\";function Z(e){return e instanceof re||e instanceof _e?e.status:500}function Kt(e){return e instanceof _e?e.text:\"Internal Error\"}const N=Ve(qe)??{},K=Ve(Fe)??{},x={url:xe({}),page:xe({}),navigating:oe(null),updated:Ot()};function ve(e){N[e]=we()}function zt(e,n){let t=e+1;for(;N[t];)delete N[t],t+=1;for(t=n+1;K[t];)delete K[t],t+=1}function V(e){return location.href=e.href,new Promise(()=>{})}function Te(){}let ie,ge,Q,U,me,F;const ze=[],ee=[];let R=null;const Ye=[],Yt=[];let D=[],y={branch:[],error:null,url:null},be=!1,te=!1,Ne=!0,z=!1,q=!1,We=!1,Ee=!1,ke,A,L,I,ne;const M=new Set;async function ln(e,n,t){var r,o;document.URL!==location.href&&(location.href=location.href),F=e,ie=Ut(e),U=document.documentElement,me=n,ge=e.nodes[0],Q=e.nodes[1],ge(),Q(),A=(r=history.state)==null?void 0:r[$],L=(o=history.state)==null?void 0:o[B],A||(A=L=Date.now(),history.replaceState({...history.state,[$]:A,[B]:L},\"\"));const a=N[A];a&&(history.scrollRestoration=\"manual\",scrollTo(a.x,a.y)),t?await nn(me,t):en(location.href,{replaceState:!0}),tn()}function Wt(){ze.length=0,Ee=!1}function Je(e){ee.some(n=>n==null?void 0:n.snapshot)&&(K[e]=ee.map(n=>{var t;return(t=n==null?void 0:n.snapshot)==null?void 0:t.capture()}))}function Xe(e){var n;(n=K[e])==null||n.forEach((t,a)=>{var r,o;(o=(r=ee[a])==null?void 0:r.snapshot)==null||o.restore(t)})}function Oe(){ve(A),Pe(qe,N),Je(L),Pe(Fe,K)}async function Ze(e,n,t,a){return W({type:\"goto\",url:He(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:t,nav_token:a,accept:()=>{n.invalidateAll&&(Ee=!0)}})}async function Jt(e){if(e.id!==(R==null?void 0:R.id)){const n={};M.add(n),R={id:e.id,token:n,promise:et({...e,preload:n}).then(t=>(M.delete(n),t.type===\"loaded\"&&t.state.error&&(R=null),t))}}return R.promise}async function he(e){const n=ie.find(t=>t.exec(tt(e)));n&&await Promise.all([...n.layouts,n.leaf].map(t=>t==null?void 0:t[1]()))}function Qe(e,n,t){var o;y=e.state;const a=document.querySelector(\"style[data-sveltekit]\");a&&a.remove(),I=e.props.page,ke=new F.root({target:n,props:{...e.props,stores:x,components:ee},hydrate:t}),Xe(L);const r={from:null,to:{params:y.params,route:{id:((o=y.route)==null?void 0:o.id)??null},url:new URL(location.href)},willUnload:!1,type:\"enter\",complete:Promise.resolve()};D.forEach(i=>i(r)),te=!0}async function ae({url:e,params:n,branch:t,status:a,error:r,route:o,form:i}){let s=\"never\";if(P&&(e.pathname===P||e.pathname===P+\"/\"))s=\"always\";else for(const d of t)(d==null?void 0:d.slash)!==void 0&&(s=d.slash);e.pathname=ht(e.pathname,s),e.search=e.search;const c={type:\"loaded\",state:{url:e,params:n,branch:t,error:r,route:o},props:{constructors:Ht(t).map(d=>d.node.component),page:I}};i!==void 0&&(c.props.form=i);let l={},u=!I,h=0;for(let d=0;d<Math.max(t.length,y.branch.length);d+=1){const g=t[d],f=y.branch[d];(g==null?void 0:g.data)!==(f==null?void 0:f.data)&&(u=!0),g&&(l={...l,...g.data},u&&(c.props[`data_${h}`]=l),h+=1)}return(!y.url||e.href!==y.url.href||y.error!==r||i!==void 0&&i!==I.form||u)&&(c.props.page={error:r,params:n,route:{id:(o==null?void 0:o.id)??null},state:{},status:a,url:new URL(e),form:i??null,data:u?l:I.data}),c}async function Ae({loader:e,parent:n,url:t,params:a,route:r,server_data_node:o}){var u,h,p;let i=null,s=!0;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if((u=l.universal)!=null&&u.load){let d=function(...f){for(const _ of f){const{href:b}=new URL(_,t);c.dependencies.add(b)}};const g={route:new Proxy(r,{get:(f,_)=>(s&&(c.route=!0),f[_])}),params:new Proxy(a,{get:(f,_)=>(s&&c.params.add(_),f[_])}),data:(o==null?void 0:o.data)??null,url:_t(t,()=>{s&&(c.url=!0)},f=>{s&&c.search_params.add(f)}),async fetch(f,_){let b;f instanceof Request?(b=f.url,_={body:f.method===\"GET\"||f.method===\"HEAD\"?void 0:await f.blob(),cache:f.cache,credentials:f.credentials,headers:f.headers,integrity:f.integrity,keepalive:f.keepalive,method:f.method,mode:f.mode,redirect:f.redirect,referrer:f.referrer,referrerPolicy:f.referrerPolicy,signal:f.signal,..._}):b=f;const S=new URL(b,t);return s&&d(S.href),S.origin===t.origin&&(b=S.href.slice(t.origin.length)),te?At(b,S.href,_):kt(b,_)},setHeaders:()=>{},depends:d,parent(){return s&&(c.parent=!0),n()},untrack(f){s=!1;try{return f()}finally{s=!0}}};i=await l.universal.load.call(null,g)??null}return{node:l,loader:e,server:o,universal:(h=l.universal)!=null&&h.load?{type:\"data\",data:i,uses:c}:null,data:i??(o==null?void 0:o.data)??null,slash:((p=l.universal)==null?void 0:p.trailingSlash)??(o==null?void 0:o.slash)}}function je(e,n,t,a,r,o){if(Ee)return!0;if(!r)return!1;if(r.parent&&e||r.route&&n||r.url&&t)return!0;for(const i of r.search_params)if(a.has(i))return!0;for(const i of r.params)if(o[i]!==y.params[i])return!0;for(const i of r.dependencies)if(ze.some(s=>s(new URL(i))))return!0;return!1}function Se(e,n){return(e==null?void 0:e.type)===\"data\"?e:(e==null?void 0:e.type)===\"skip\"?n??null:null}function Xt(e,n){if(!e)return new Set(n.searchParams.keys());const t=new Set([...e.searchParams.keys(),...n.searchParams.keys()]);for(const a of t){const r=e.searchParams.getAll(a),o=n.searchParams.getAll(a);r.every(i=>o.includes(i))&&o.every(i=>r.includes(i))&&t.delete(a)}return t}function De({error:e,url:n,route:t,params:a}){return{type:\"loaded\",state:{error:e,url:n,route:t,params:a,branch:[]},props:{page:I,constructors:[]}}}async function et({id:e,invalidating:n,url:t,params:a,route:r,preload:o}){if((R==null?void 0:R.id)===e)return M.delete(R.token),R.promise;const{errors:i,layouts:s,leaf:c}=r,l=[...s,c];i.forEach(m=>m==null?void 0:m().catch(()=>{})),l.forEach(m=>m==null?void 0:m[1]().catch(()=>{}));let u=null;const h=y.url?e!==y.url.pathname+y.url.search:!1,p=y.route?r.id!==y.route.id:!1,d=Xt(y.url,t);let g=!1;const f=l.map((m,v)=>{var T;const E=y.branch[v],k=!!(m!=null&&m[0])&&((E==null?void 0:E.loader)!==m[1]||je(g,p,h,d,(T=E.server)==null?void 0:T.uses,a));return k&&(g=!0),k});if(f.some(Boolean)){try{u=await rt(t,f)}catch(m){const v=await C(m,{url:t,params:a,route:{id:e}});return M.has(o)?De({error:v,url:t,params:a,route:r}):ce({status:Z(m),error:v,url:t,route:r})}if(u.type===\"redirect\")return u}const _=u==null?void 0:u.nodes;let b=!1;const S=l.map(async(m,v)=>{var le;if(!m)return;const E=y.branch[v],k=_==null?void 0:_[v];if((!k||k.type===\"skip\")&&m[1]===(E==null?void 0:E.loader)&&!je(b,p,h,d,(le=E.universal)==null?void 0:le.uses,a))return E;if(b=!0,(k==null?void 0:k.type)===\"error\")throw k;return Ae({loader:m[1],url:t,params:a,route:r,parent:async()=>{var Le;const Ie={};for(let fe=0;fe<v;fe+=1)Object.assign(Ie,(Le=await S[fe])==null?void 0:Le.data);return Ie},server_data_node:Se(k===void 0&&m[0]?{type:\"skip\"}:k??null,m[0]?E==null?void 0:E.server:void 0)})});for(const m of S)m.catch(()=>{});const w=[];for(let m=0;m<l.length;m+=1)if(l[m])try{w.push(await S[m])}catch(v){if(v instanceof $e)return{type:\"redirect\",location:v.location};if(M.has(o))return De({error:await C(v,{params:a,url:t,route:{id:r.id}}),url:t,params:a,route:r});let E=Z(v),k;if(_!=null&&_.includes(v))E=v.status??E,k=v.error;else if(v instanceof re)k=v.body;else{if(await x.updated.check())return await V(t);k=await C(v,{params:a,url:t,route:{id:r.id}})}const T=await Zt(m,w,i);return T?await ae({url:t,params:a,branch:w.slice(0,T.idx).concat(T.node),status:E,error:k,route:r}):await at(t,{id:r.id},k,E)}else w.push(void 0);return await ae({url:t,params:a,branch:w,status:200,error:null,route:r,form:n?void 0:null})}async function Zt(e,n,t){for(;e--;)if(t[e]){let a=e;for(;!n[a];)a-=1;try{return{idx:a+1,node:{node:await t[e](),loader:t[e],data:{},server:null,universal:null}}}catch{continue}}}async function ce({status:e,error:n,url:t,route:a}){const r={};let o=null;if(F.server_loads[0]===0)try{const l=await rt(t,[!0]);if(l.type!==\"data\"||l.nodes[0]&&l.nodes[0].type!==\"data\")throw 0;o=l.nodes[0]??null}catch{(t.origin!==Y||t.pathname!==location.pathname||be)&&await V(t)}const s=await Ae({loader:ge,url:t,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Se(o)}),c={node:await Q(),loader:Q,universal:null,server:null,data:null};return await ae({url:t,params:r,branch:[s,c],status:e,error:n,route:null})}function Re(e,n){if(!e||se(e,P))return;let t;try{t=F.hooks.reroute({url:new URL(e)})??e.pathname}catch{return}const a=tt(t);for(const r of ie){const o=r.exec(a);if(o)return{id:e.pathname+e.search,invalidating:n,route:r,params:gt(o),url:e}}}function tt(e){return pt(e.slice(P.length)||\"/\")}function nt({url:e,type:n,intent:t,delta:a}){let r=!1;const o=st(y,t,e,n);a!==void 0&&(o.navigation.delta=a);const i={...o.navigation,cancel:()=>{r=!0,o.reject(new Error(\"navigation cancelled\"))}};return z||Ye.forEach(s=>s(i)),r?null:o}async function W({type:e,url:n,popped:t,keepfocus:a,noscroll:r,replace_state:o,state:i={},redirect_count:s=0,nav_token:c={},accept:l=Te,block:u=Te}){const h=Re(n,!1),p=nt({url:n,type:e,delta:t==null?void 0:t.delta,intent:h});if(!p){u();return}const d=A,g=L;l(),z=!0,te&&x.navigating.set(p.navigation),ne=c;let f=h&&await et(h);if(!f){if(se(n,P))return await V(n);f=await at(n,{id:null},await C(new _e(404,\"Not Found\",`Not found: ${n.pathname}`),{url:n,params:{},route:{id:null}}),404)}if(n=(h==null?void 0:h.url)||n,ne!==c)return p.reject(new Error(\"navigation aborted\")),!1;if(f.type===\"redirect\")if(s>=20)f=await ce({status:500,error:await C(new Error(\"Redirect loop\"),{url:n,params:{},route:{id:null}}),url:n,route:{id:null}});else return Ze(new URL(f.location,n).href,{},s+1,c),!1;else f.props.page.status>=400&&await x.updated.check()&&await V(n);if(Wt(),ve(d),Je(g),f.props.page.url.pathname!==n.pathname&&(n.pathname=f.props.page.url.pathname),i=t?t.state:i,!t){const w=o?0:1,m={[$]:A+=w,[B]:L+=w,[Ge]:i};(o?history.replaceState:history.pushState).call(history,m,\"\",n),o||zt(A,L)}if(R=null,f.props.page.state=i,te){y=f.state,f.props.page&&(f.props.page.url=n);const w=(await Promise.all(Yt.map(m=>m(p.navigation)))).filter(m=>typeof m==\"function\");if(w.length>0){let m=function(){D=D.filter(v=>!w.includes(v))};w.push(m),D.push(...w)}ke.$set(f.props),We=!0}else Qe(f,me,!1);const{activeElement:_}=document;await ut();const b=t?t.scroll:r?we():null;if(Ne){const w=n.hash&&document.getElementById(decodeURIComponent(n.hash.slice(1)));b?scrollTo(b.x,b.y):w?w.scrollIntoView():scrollTo(0,0)}const S=document.activeElement!==_&&document.activeElement!==document.body;!a&&!S&&an(),Ne=!0,f.props.page&&(I=f.props.page),z=!1,e===\"popstate\"&&Xe(L),p.fulfil(void 0),D.forEach(w=>w(p.navigation)),x.navigating.set(null)}async function at(e,n,t,a){return e.origin===Y&&e.pathname===location.pathname&&!be?await ce({status:a,error:t,url:e,route:n}):await V(e)}function Qt(){let e;U.addEventListener(\"mousemove\",o=>{const i=o.target;clearTimeout(e),e=setTimeout(()=>{a(i,2)},20)});function n(o){a(o.composedPath()[0],1)}U.addEventListener(\"mousedown\",n),U.addEventListener(\"touchstart\",n,{passive:!0});const t=new IntersectionObserver(o=>{for(const i of o)i.isIntersecting&&(he(i.target.href),t.unobserve(i.target))},{threshold:0});function a(o,i){const s=Be(o,U);if(!s)return;const{url:c,external:l,download:u}=pe(s,P);if(l||u)return;const h=X(s);if(!h.reload)if(i<=h.preload_data){const p=Re(c,!1);p&&Jt(p)}else i<=h.preload_code&&he(c.pathname)}function r(){t.disconnect();for(const o of U.querySelectorAll(\"a\")){const{url:i,external:s,download:c}=pe(o,P);if(s||c)continue;const l=X(o);l.reload||(l.preload_code===J.viewport&&t.observe(o),l.preload_code===J.eager&&he(i.pathname))}}D.push(r),r()}function C(e,n){if(e instanceof re)return e.body;const t=Z(e),a=Kt(e);return F.hooks.handleError({error:e,event:n,status:t,message:a})??{message:a}}function en(e,n={}){return e=He(e),e.origin!==Y?Promise.reject(new Error(\"goto: invalid URL\")):Ze(e,n,0)}function tn(){var n;history.scrollRestoration=\"manual\",addEventListener(\"beforeunload\",t=>{let a=!1;if(Oe(),!z){const r=st(y,void 0,null,\"leave\"),o={...r.navigation,cancel:()=>{a=!0,r.reject(new Error(\"navigation cancelled\"))}};Ye.forEach(i=>i(o))}a?(t.preventDefault(),t.returnValue=\"\"):history.scrollRestoration=\"auto\"}),addEventListener(\"visibilitychange\",()=>{document.visibilityState===\"hidden\"&&Oe()}),(n=navigator.connection)!=null&&n.saveData||Qt(),U.addEventListener(\"click\",t=>{var p;if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const a=Be(t.composedPath()[0],U);if(!a)return;const{url:r,external:o,target:i,download:s}=pe(a,P);if(!r)return;if(i===\"_parent\"||i===\"_top\"){if(window.parent!==window)return}else if(i&&i!==\"_self\")return;const c=X(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol===\"https:\"||r.protocol===\"http:\")||s)return;if(o||c.reload){nt({url:r,type:\"link\"})?z=!0:t.preventDefault();return}const[u,h]=r.href.split(\"#\");if(h!==void 0&&u===ue(location)){const[,d]=y.url.href.split(\"#\");if(d===h){t.preventDefault(),h===\"\"||h===\"top\"&&a.ownerDocument.getElementById(\"top\")===null?window.scrollTo({top:0}):(p=a.ownerDocument.getElementById(h))==null||p.scrollIntoView();return}if(q=!0,ve(A),e(r),!c.replace_state)return;q=!1}t.preventDefault(),W({type:\"link\",url:r,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??r.href===location.href})}),U.addEventListener(\"submit\",t=>{if(t.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if(((r==null?void 0:r.formMethod)||a.method)!==\"get\")return;const i=new URL((r==null?void 0:r.hasAttribute(\"formaction\"))&&(r==null?void 0:r.formAction)||a.action);if(se(i,P))return;const s=t.target,c=X(s);if(c.reload)return;t.preventDefault(),t.stopPropagation();const l=new FormData(s),u=r==null?void 0:r.getAttribute(\"name\");u&&l.append(u,(r==null?void 0:r.getAttribute(\"value\"))??\"\"),i.search=new URLSearchParams(l).toString(),W({type:\"form\",url:i,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??i.href===location.href})}),addEventListener(\"popstate\",async t=>{var a;if((a=t.state)!=null&&a[$]){const r=t.state[$];if(ne={},r===A)return;const o=N[r],i=t.state[Ge]??{},s=new URL(t.state[Nt]??location.href),c=t.state[B],l=ue(location)===ue(y.url);if(c===L&&(We||l)){e(s),N[A]=we(),o&&scrollTo(o.x,o.y),i!==I.state&&(I={...I,state:i},ke.$set({page:I})),A=r;return}const h=r-A;await W({type:\"popstate\",url:s,popped:{state:i,scroll:o,delta:h},accept:()=>{A=r,L=c},block:()=>{history.go(-h)},nav_token:ne})}else if(!q){const r=new URL(location.href);e(r)}}),addEventListener(\"hashchange\",()=>{q&&(q=!1,history.replaceState({...history.state,[$]:++A,[B]:L},\"\",location.href))});for(const t of document.querySelectorAll(\"link\"))t.rel===\"icon\"&&(t.href=t.href);addEventListener(\"pageshow\",t=>{t.persisted&&x.navigating.set(null)});function e(t){y.url=t,x.page.set({...I,url:t}),x.page.notify()}}async function nn(e,{status:n=200,error:t,node_ids:a,params:r,route:o,data:i,form:s}){be=!0;const c=new URL(location.href);({params:r={},route:o={id:null}}=Re(c,!1)||{});let l;try{const u=a.map(async(d,g)=>{const f=i[g];return f!=null&&f.uses&&(f.uses=ot(f.uses)),Ae({loader:F.nodes[d],url:c,params:r,route:o,parent:async()=>{const _={};for(let b=0;b<g;b+=1)Object.assign(_,(await u[b]).data);return _},server_data_node:Se(f)})}),h=await Promise.all(u),p=ie.find(({id:d})=>d===o.id);if(p){const d=p.layouts;for(let g=0;g<d.length;g++)d[g]||h.splice(g,0,void 0)}l=await ae({url:c,params:r,branch:h,status:n,error:t,form:s,route:p??null})}catch(u){if(u instanceof $e){await V(new URL(u.location,location.href));return}l=await ce({status:Z(u),error:await C(u,{url:c,params:r,route:o}),url:c,route:o})}l.props.page&&(l.props.page.state={}),Qe(l,e,!0)}async function rt(e,n){var r;const t=new URL(e);t.pathname=vt(e.pathname),e.pathname.endsWith(\"/\")&&t.searchParams.append(Bt,\"1\"),t.searchParams.append(Mt,n.map(o=>o?\"1\":\"0\").join(\"\"));const a=await Ce(t.href);if(!a.ok){let o;throw(r=a.headers.get(\"content-type\"))!=null&&r.includes(\"application/json\")?o=await a.json():a.status===404?o=\"Not Found\":a.status===500&&(o=\"Internal Error\"),new re(a.status,o)}return new Promise(async o=>{var h;const i=new Map,s=a.body.getReader(),c=new TextDecoder;function l(p){return qt(p,{Promise:d=>new Promise((g,f)=>{i.set(d,{fulfil:g,reject:f})})})}let u=\"\";for(;;){const{done:p,value:d}=await s.read();if(p&&!u)break;for(u+=!d&&u?`\n`:c.decode(d,{stream:!0});;){const g=u.indexOf(`\n`);if(g===-1)break;const f=JSON.parse(u.slice(0,g));if(u=u.slice(g+1),f.type===\"redirect\")return o(f);if(f.type===\"data\")(h=f.nodes)==null||h.forEach(_=>{(_==null?void 0:_.type)===\"data\"&&(_.uses=ot(_.uses),_.data=l(_.data))}),o(f);else if(f.type===\"chunk\"){const{id:_,data:b,error:S}=f,w=i.get(_);i.delete(_),S?w.reject(l(S)):w.fulfil(l(b))}}}})}function ot(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}function an(){const e=document.querySelector(\"[autofocus]\");if(e)e.focus();else{const n=document.body,t=n.getAttribute(\"tabindex\");n.tabIndex=-1,n.focus({preventScroll:!0,focusVisible:!1}),t!==null?n.setAttribute(\"tabindex\",t):n.removeAttribute(\"tabindex\");const a=getSelection();if(a&&a.type!==\"None\"){const r=[];for(let o=0;o<a.rangeCount;o+=1)r.push(a.getRangeAt(o));setTimeout(()=>{if(a.rangeCount===r.length){for(let o=0;o<a.rangeCount;o+=1){const i=r[o],s=a.getRangeAt(o);if(i.commonAncestorContainer!==s.commonAncestorContainer||i.startContainer!==s.startContainer||i.endContainer!==s.endContainer||i.startOffset!==s.startOffset||i.endOffset!==s.endOffset)return}a.removeAllRanges()}})}}}function st(e,n,t,a){var c,l;let r,o;const i=new Promise((u,h)=>{r=u,o=h});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url},to:t&&{params:(n==null?void 0:n.params)??null,route:{id:((l=n==null?void 0:n.route)==null?void 0:l.id)??null},url:t},willUnload:!n,type:a,complete:i},fulfil:r,reject:o}}export{ln as a,cn as d,x as s,oe as w};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/index.DyGm78TJ.js",
    "content": "var b=Object.defineProperty;var E=(t,e,n)=>e in t?b(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var _=(t,e,n)=>(E(t,typeof e!=\"symbol\"?e+\"\":e,n),n);import{A as $,n as c,M as p,b as O,f as C,N as I,O as v,P as M,Q as x,R as N,S as P,T as w,U as R,V as U,W as V,X as j,Y as A}from\"./scheduler.lruobs1Y.js\";const u=new Set;let f;function z(){f={r:0,c:[],p:f}}function D(){f.r||$(f.c),f=f.p}function B(t,e){t&&t.i&&(u.delete(t),t.i(e))}function F(t,e,n,a){if(t&&t.o){if(u.has(t))return;u.add(t),f.c.push(()=>{u.delete(t),a&&(n&&t.d(1),a())}),t.o(e)}else a&&a()}function G(t){t&&t.c()}function H(t,e){t&&t.l(e)}function L(t,e,n){const{fragment:a,after_update:i}=t.$$;a&&a.m(e,n),x(()=>{const d=t.$$.on_mount.map(R).filter(v);t.$$.on_destroy?t.$$.on_destroy.push(...d):$(d),t.$$.on_mount=[]}),i.forEach(x)}function Q(t,e){const n=t.$$;n.fragment!==null&&(N(n.after_update),$(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function T(t,e){t.$$.dirty[0]===-1&&(U.push(t),V(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<<e%31}function J(t,e,n,a,i,d,l=null,S=[-1]){const o=P;w(t);const s=t.$$={fragment:null,ctx:[],props:d,update:c,not_equal:i,bound:p(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(o?o.$$.context:[])),callbacks:p(),dirty:S,skip_bound:!1,root:e.target||o.$$.root};l&&l(s.root);let h=!1;if(s.ctx=n?n(t,e.props||{},(r,g,...m)=>{const y=m.length?m[0]:g;return s.ctx&&i(s.ctx[r],s.ctx[r]=y)&&(!s.skip_bound&&s.bound[r]&&s.bound[r](y),h&&T(t,r)),g}):[],s.update(),h=!0,$(s.before_update),s.fragment=a?a(s.ctx):!1,e.target){if(e.hydrate){j();const r=O(e.target);s.fragment&&s.fragment.l(r),r.forEach(C)}else s.fragment&&s.fragment.c();e.intro&&B(t.$$.fragment),L(t,e.target,e.anchor),A(),I()}w(o)}class K{constructor(){_(this,\"$$\");_(this,\"$$set\")}$destroy(){Q(this,1),this.$destroy=c}$on(e,n){if(!v(n))return c;const a=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return a.push(n),()=>{const i=a.indexOf(n);i!==-1&&a.splice(i,1)}}$set(e){this.$$set&&!M(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const W=\"4\";typeof window<\"u\"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(W);export{K as S,B as a,G as b,D as c,H as d,Q as e,z as g,J as i,L as m,F as t};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/index.Up5bhyj0.js",
    "content": "var nl=Object.defineProperty;var sl=(e,t,n)=>t in e?nl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ls=(e,t,n)=>(sl(e,typeof t!=\"symbol\"?t+\"\":t,n),n);import{s as Ve,e as F,a as De,c as U,b as z,g as pe,f as v,r as Y,J as W,a6 as X,i as H,h as G,a7 as xt,G as yt,O as hr,n as Ae,A as mr,a1 as ve,k as Z,H as Zt,z as Xt,t as Qt,d as Jt,j as Kt,a8 as ks,l as $,q as gr,v as _r,w as wr,x as yr,$ as Gn,a9 as an,a0 as _e,a2 as go,D as qt,Q as di,aa as ci,ab as fi,m as hi,B as _o,o as Wt,p as rl,K as vs,L as mi,C as An,ac as bs,ad as gi}from\"./scheduler.lruobs1Y.js\";import{S as Be,i as Ge,a as q,t as J,g as nt,c as st,b as He,d as ze,m as Ie,e as Le}from\"./index.DyGm78TJ.js\";import{e as ye,u as ms,o as gs}from\"./each.DqwAsWNO.js\";import{g as dn,a as cn}from\"./spread.CgU5AtxT.js\";import{d as kr,w as Pe}from\"./entry.0-2BfHub.js\";import\"./paths.oQcPQ3IF.js\";import\"./store.CCmTIowZ.js\";function Qs(){const{subscribe:e,set:t,update:n}=Pe({ids:[],entities:{}});return{set:t,_update:n,subscribe:e,add:s=>n(({ids:r,entities:i})=>({ids:[...r,s.model.id],entities:{...i,[s.model.id]:s}})),delete:s=>n(r=>{const{[s]:i,...o}=r.entities;return{ids:r.ids.filter(a=>a!==s),entities:o}}),deleteAll:s=>n(r=>{const i={...r.entities},o=new Set(s);for(let a=0;a<r.ids.length;a++)o.has(r.ids[a])&&delete i[r.ids[a]];return{ids:r.ids.filter(a=>!o.has(a)),entities:i}}),update:s=>n(({ids:r,entities:i})=>({ids:r,entities:{...i,[s.model.id]:s}})),upsert:s=>n(({ids:r,entities:i})=>({ids:r.indexOf(s.model.id)!==-1?r:[...r,s.model.id],entities:{...i,[s.model.id]:s}})),upsertAll:s=>n(r=>{const i={...r.entities},o=[...r.ids];for(let a=0;a<s.length;a++)o.indexOf(s[a].model.id)===-1&&o.push(s[a].model.id),i[s[a].model.id]=s[a];return{ids:o,entities:i}}),addAll:s=>{const r=[],i={};for(let o=0;o<s.length;o++)r.push(s[o].model.id),i[s[o].model.id]=s[o];t({ids:r,entities:i})},refresh:()=>n(s=>({...s}))}}function Js(e){return kr(e,({ids:t,entities:n})=>{const s=[];for(let r=0;r<t.length;r++)s.push(n[t[r]]);return s})}function il(){const e=Qs(),t=Qs(),n=Qs(),s=Js(e),r=Js(t),i=Js(n),o=kr(s,a=>{const l={};for(let u=0;u<a.length;u++){const c=a[u];l[c.model.resourceId]||(l[c.model.resourceId]=[]),l[c.model.resourceId].push(c.model.id)}return l});return{taskStore:e,rowStore:t,timeRangeStore:n,allTasks:s,allRows:r,allTimeRanges:i,rowTaskCache:o}}function wo(e){return e.which===1}function wn(e,t){const n=e.getBoundingClientRect(),s=t.clientX-n.left,r=t.clientY-n.top;return{x:s,y:r}}function ol(e,t){const n=e.getBoundingClientRect(),s=t.clientX-n.left,r=t.clientY-n.top;return[s,r]}function al(e,t,n,s,r){e.addEventListener(t,function i(){e.removeEventListener(t,i,r),n.apply(this,arguments,s)})}function Ds(e,t=document.body){t.style.cursor=e}function xn(e){return e?typeof e==\"string\"?e:Array.isArray(e)?e.join(\" \"):\"\":\"\"}function ll(e,t){let n=!1;return function(){n||(e.apply(null,arguments),n=!0,setTimeout(function(){n=!1},t))}}const us=40,ds=40;function ul(e,t){return{left:e.clientX-t.left<0+us,top:e.clientY-t.top<0+us,right:e.clientX-t.left>t.width-us,bottom:e.clientY-t.top>t.height-us}}const yo=ll((e,t)=>{const n=t.getBoundingClientRect(),s=ul(e,n);(s.left||s.right)&&t.scrollTo({left:t.scrollLeft+(s.left?-ds:ds),behavior:\"smooth\"}),(s.top||s.bottom)&&t.scrollTo({top:t.scrollTop+(s.top?-ds:ds),behavior:\"smooth\"})},250);function dl(e){const n=document.elementsFromPoint(e.clientX,e.clientY).find(s=>!!s.getAttribute(\"data-row-id\"));return n!==void 0?n.getAttribute(\"data-row-id\"):null}function cl(e){return{getPositionByDate(t){return vr(t,e.from,e.to,e.width)},getDateByPosition(t){return fl(t,e.from,e.to,e.width)},roundTo(t){return e.dateAdapter?e.dateAdapter.roundTo(t,e.magnetUnit,e.magnetOffset):null}}}function vr(e,t,n,s){if(!e)return;const r=e-t,i=n-t;return r/i*s}function fl(e,t,n,s){const r=e/s*(n-t);return t+r}function ir(e,t,n,s){let r=-1,i=e.length;for(;i-r>1;){const o=Math.floor((r+i)/2);n(e[o])<=t?r=o:i=o}return e[r]!==void 0&&n(e[r])===t&&(i=r),[r,i]}function ko(e,t,n,s){const r=ir(e,t,n);return[e[r[0]],e[r[1]]]}function Ks(e){return e.draggable??e.enableDragging??!0}function fn(e){return e.resizable??e.enableResize??!0}function _i(e){let t;return{c(){t=F(\"div\"),this.h()},l(n){t=U(n,\"DIV\",{class:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"sg-milestone__diamond svelte-3whqv0\")},m(n,s){H(n,t,s)},d(n){n&&v(t)}}}function wi(e){let t;return{c(){t=F(\"div\"),this.h()},l(n){t=U(n,\"DIV\",{class:!0,style:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"sg-task-background svelte-3whqv0\"),W(t,\"width\",e[0].amountDone+\"%\")},m(n,s){H(n,t,s)},p(n,s){s&1&&W(t,\"width\",n[0].amountDone+\"%\")},d(n){n&&v(t)}}}function hl(e){let t=e[0].label+\"\",n;return{c(){n=Qt(t)},l(s){n=Jt(s,t)},m(s,r){H(s,n,r)},p(s,r){r&1&&t!==(t=s[0].label+\"\")&&Kt(n,t)},d(s){s&&v(n)}}}function ml(e){let t,n=e[12](e[0])+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&1&&n!==(n=r[12](r[0])+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function gl(e){let t,n=e[0].html+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&1&&n!==(n=r[0].html+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function yi(e){let t,n,s=e[0].buttonHtml+\"\",r,i,o;return{c(){t=F(\"span\"),n=new Zt(!1),this.h()},l(a){t=U(a,\"SPAN\",{class:!0,role:!0,tabindex:!0});var l=z(t);n=Xt(l,!1),l.forEach(v),this.h()},h(){n.a=null,Y(t,\"class\",r=\"sg-task-button \"+e[0].buttonClasses+\" svelte-3whqv0\"),Y(t,\"role\",\"button\"),Y(t,\"tabindex\",\"0\")},m(a,l){H(a,t,l),n.m(s,t),i||(o=yt(t,\"click\",e[15]),i=!0)},p(a,l){l&1&&s!==(s=a[0].buttonHtml+\"\")&&n.p(s),l&1&&r!==(r=\"sg-task-button \"+a[0].buttonClasses+\" svelte-3whqv0\")&&Y(t,\"class\",r)},d(a){a&&v(t),i=!1,o()}}}function ki(e){let t,n=e[0].labelBottom+\"\",s;return{c(){t=F(\"span\"),s=Qt(n),this.h()},l(r){t=U(r,\"SPAN\",{class:!0});var i=z(t);s=Jt(i,n),i.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-label-bottom svelte-3whqv0\")},m(r,i){H(r,t,i),G(t,s)},p(r,i){i&1&&n!==(n=r[0].labelBottom+\"\")&&Kt(s,n)},d(r){r&&v(t)}}}function _l(e){let t,n,s,r,i,o,a,l,u,c,b,h=e[0].type===\"milestone\"&&_i(),T=e[0].amountDone&&wi(e);function M(_,m){return _[0].html?gl:_[12]?ml:hl}let S=M(e),f=S(e),w=e[0].showButton&&yi(e),g=e[0].labelBottom&&ki(e);return{c(){t=F(\"div\"),h&&h.c(),n=De(),T&&T.c(),s=De(),r=F(\"div\"),f.c(),i=De(),w&&w.c(),o=De(),g&&g.c(),this.h()},l(_){t=U(_,\"DIV\",{\"data-task-id\":!0,class:!0,style:!0});var m=z(t);h&&h.l(m),n=pe(m),T&&T.l(m),s=pe(m),r=U(m,\"DIV\",{class:!0});var I=z(r);f.l(I),i=pe(I),w&&w.l(I),I.forEach(v),o=pe(m),g&&g.l(m),m.forEach(v),this.h()},h(){Y(r,\"class\",\"sg-task-content svelte-3whqv0\"),Y(t,\"data-task-id\",a=e[0].id),Y(t,\"class\",l=\"sg-task \"+e[9]+\" svelte-3whqv0\"),W(t,\"width\",e[4]+\"px\"),W(t,\"height\",e[1]+\"px\"),W(t,\"left\",e[2]+\"px\"),W(t,\"top\",e[3]+\"px\"),X(t,\"sg-milestone\",e[0].type===\"milestone\"),X(t,\"moving\",e[8]),X(t,\"animating\",e[6]),X(t,\"sg-task-reflected\",e[5]),X(t,\"sg-task-selected\",e[10][e[0].id]),X(t,\"resize-enabled\",e[7]),X(t,\"sg-task--sticky\",e[0].stickyLabel),X(t,\"sg-ignore-click\",vi),X(t,\"sg-task-instant\",e[4]===0)},m(_,m){H(_,t,m),h&&h.m(t,null),G(t,n),T&&T.m(t,null),G(t,s),G(t,r),f.m(r,null),G(r,i),w&&w.m(r,null),G(t,o),g&&g.m(t,null),c||(b=[xt(u=e[14].call(null,t,e[0])),yt(t,\"pointerdown\",e[19])],c=!0)},p(_,[m]){_[0].type===\"milestone\"?h||(h=_i(),h.c(),h.m(t,n)):h&&(h.d(1),h=null),_[0].amountDone?T?T.p(_,m):(T=wi(_),T.c(),T.m(t,s)):T&&(T.d(1),T=null),S===(S=M(_))&&f?f.p(_,m):(f.d(1),f=S(_),f&&(f.c(),f.m(r,i))),_[0].showButton?w?w.p(_,m):(w=yi(_),w.c(),w.m(r,null)):w&&(w.d(1),w=null),_[0].labelBottom?g?g.p(_,m):(g=ki(_),g.c(),g.m(t,null)):g&&(g.d(1),g=null),m&1&&a!==(a=_[0].id)&&Y(t,\"data-task-id\",a),m&512&&l!==(l=\"sg-task \"+_[9]+\" svelte-3whqv0\")&&Y(t,\"class\",l),m&16&&W(t,\"width\",_[4]+\"px\"),m&2&&W(t,\"height\",_[1]+\"px\"),m&4&&W(t,\"left\",_[2]+\"px\"),m&8&&W(t,\"top\",_[3]+\"px\"),u&&hr(u.update)&&m&1&&u.update.call(null,_[0]),m&513&&X(t,\"sg-milestone\",_[0].type===\"milestone\"),m&768&&X(t,\"moving\",_[8]),m&576&&X(t,\"animating\",_[6]),m&544&&X(t,\"sg-task-reflected\",_[5]),m&1537&&X(t,\"sg-task-selected\",_[10][_[0].id]),m&640&&X(t,\"resize-enabled\",_[7]),m&513&&X(t,\"sg-task--sticky\",_[0].stickyLabel),m&512&&X(t,\"sg-ignore-click\",vi),m&528&&X(t,\"sg-task-instant\",_[4]===0)},i:Ae,o:Ae,d(_){_&&v(t),h&&h.d(),T&&T.d(),f.d(),w&&w.d(),g&&g.d(),c=!1,mr(b)}}}let vi=!1;function wl(e,t,n){let s,r,i,{model:o}=t,{height:a}=t,{left:l}=t,{top:u}=t,{width:c}=t,{reflected:b=!1}=t,{animating:h=!0}=t,{dragging:T=!1}=t,{resizing:M=!1}=t;const{rowStore:S}=ve(\"dataStore\");Z(e,S,V=>n(18,r=V));const{taskContent:f,onTaskButtonClick:w,taskElementHook:g}=ve(\"options\"),{selectionManager:_}=ve(\"services\"),m=_._selectedTasks;Z(e,m,V=>n(10,i=V));function I(V,Oe){if(g)return g(V,Oe)}function L(V){w&&w(o,V)}let me,ue;function dt(V){ks.call(this,e,V)}return e.$$set=V=>{\"model\"in V&&n(0,o=V.model),\"height\"in V&&n(1,a=V.height),\"left\"in V&&n(2,l=V.left),\"top\"in V&&n(3,u=V.top),\"width\"in V&&n(4,c=V.width),\"reflected\"in V&&n(5,b=V.reflected),\"animating\"in V&&n(6,h=V.animating),\"dragging\"in V&&n(16,T=V.dragging),\"resizing\"in V&&n(17,M=V.resizing)},e.$$.update=()=>{if(e.$$.dirty&1&&n(9,s=o.classes?xn(o.classes):\"sg-task-default\"),e.$$.dirty&262145){const V=r.entities[o.resourceId].model;n(7,me=o.type!==\"milestone\"&&fn(V)&&fn(o))}e.$$.dirty&196608&&n(8,ue=T||M)},[o,a,l,u,c,b,h,me,ue,s,i,S,f,m,I,L,T,M,r,dt]}class yl extends Be{constructor(t){super(),Ge(this,t,wl,_l,Ve,{model:0,height:1,left:2,top:3,width:4,reflected:5,animating:6,dragging:16,resizing:17})}}function bi(e){let t,n=e[0].model.contentHtml+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&1&&n!==(n=r[0].model.contentHtml+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function kl(e){let t,n,s,r=e[0].model.contentHtml&&bi(e);return{c(){t=F(\"div\"),r&&r.c(),this.h()},l(i){t=U(i,\"DIV\",{class:!0,\"data-row-id\":!0,style:!0});var o=z(t);r&&r.l(o),o.forEach(v),this.h()},h(){Y(t,\"class\",n=\"sg-row \"+e[1]+\" svelte-7u5y5s\"),Y(t,\"data-row-id\",s=e[0].model.id),W(t,\"height\",e[0].height+\"px\"),X(t,\"sg-hover\",e[2]==e[0].model.id),X(t,\"sg-selected\",e[3]==e[0].model.id)},m(i,o){H(i,t,o),r&&r.m(t,null)},p(i,[o]){i[0].model.contentHtml?r?r.p(i,o):(r=bi(i),r.c(),r.m(t,null)):r&&(r.d(1),r=null),o&2&&n!==(n=\"sg-row \"+i[1]+\" svelte-7u5y5s\")&&Y(t,\"class\",n),o&1&&s!==(s=i[0].model.id)&&Y(t,\"data-row-id\",s),o&1&&W(t,\"height\",i[0].height+\"px\"),o&7&&X(t,\"sg-hover\",i[2]==i[0].model.id),o&11&&X(t,\"sg-selected\",i[3]==i[0].model.id)},i:Ae,o:Ae,d(i){i&&v(t),r&&r.d()}}}function vl(e,t,n){let s,r,i,{row:o}=t;const{hoveredRow:a,selectedRow:l}=ve(\"gantt\");return Z(e,a,u=>n(2,r=u)),Z(e,l,u=>n(3,i=u)),e.$$set=u=>{\"row\"in u&&n(0,o=u.row)},e.$$.update=()=>{e.$$.dirty&1&&n(1,s=xn(o.model.classes))},[o,s,r,i,a,l]}class bl extends Be{constructor(t){super(),Ge(this,t,vl,kl,Ve,{row:0})}}function Di(e){let t,n=e[0].label+\"\",s;return{c(){t=F(\"div\"),s=Qt(n),this.h()},l(r){t=U(r,\"DIV\",{class:!0});var i=z(t);s=Jt(i,n),i.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-time-range-label svelte-w7p5la\")},m(r,i){H(r,t,i),G(t,s)},p(r,i){i&1&&n!==(n=r[0].label+\"\")&&Kt(s,n)},d(r){r&&v(t)}}}function Dl(e){let t,n,s=e[0].label&&Di(e);return{c(){t=F(\"div\"),s&&s.c(),this.h()},l(r){t=U(r,\"DIV\",{class:!0,style:!0});var i=z(t);s&&s.l(i),i.forEach(v),this.h()},h(){Y(t,\"class\",n=\"sg-time-range \"+e[4]+\" svelte-w7p5la\"),W(t,\"width\",e[2]+\"px\"),W(t,\"left\",e[1]+\"px\"),X(t,\"moving\",e[3])},m(r,i){H(r,t,i),s&&s.m(t,null)},p(r,[i]){r[0].label?s?s.p(r,i):(s=Di(r),s.c(),s.m(t,null)):s&&(s.d(1),s=null),i&16&&n!==(n=\"sg-time-range \"+r[4]+\" svelte-w7p5la\")&&Y(t,\"class\",n),i&4&&W(t,\"width\",r[2]+\"px\"),i&2&&W(t,\"left\",r[1]+\"px\"),i&24&&X(t,\"moving\",r[3])},i:Ae,o:Ae,d(r){r&&v(t),s&&s.d()}}}function pl(e,t,n){let s,{model:r}=t,{left:i}=t,{width:o}=t,{resizing:a=!1}=t;return e.$$set=l=>{\"model\"in l&&n(0,r=l.model),\"left\"in l&&n(1,i=l.left),\"width\"in l&&n(2,o=l.width),\"resizing\"in l&&n(3,a=l.resizing)},e.$$.update=()=>{e.$$.dirty&1&&n(4,s=xn(r.classes))},[r,i,o,a,s]}class Sl extends Be{constructor(t){super(),Ge(this,t,pl,Dl,Ve,{model:0,left:1,width:2,resizing:3})}}const Ml=2,Tl=2;function pi(e){return e instanceof Function?()=>e():()=>e}function vo(e,t){const n=bo(t);return e.addEventListener(\"pointerdown\",n),{destroy(){e.removeEventListener(\"pointerdown\",n,!1)}}}function bo(e){let t,n,s,r,i=!1,o=!1,a,l,u=!1;const c=pi(e.dragAllowed),b=pi(e.resizeAllowed);function h(S){if(!wo(S))return;S.stopPropagation(),S.preventDefault();const f=c(),w=b();if(!f&&!w)return;const g=e.getX(S),_=e.getY(S),m=e.getWidth();a=S.clientX,l=S.clientY,s=g+m,t=wn(e.container,S).x-g,n=wn(e.container,S).y-_,w&&t<=e.resizeHandleWidth&&(r=\"left\",o=!0),w&&t>=m-e.resizeHandleWidth&&(r=\"right\",o=!0),f&&!o&&(i=!0),(i||o)&&e.onDown&&e.onDown({mouseEvent:S,x:g,width:m,y:_,resizing:o,dragging:i}),window.addEventListener(\"pointermove\",T,!1),al(window,\"pointerup\",M)}function T(S){if(!u)if(Math.abs(S.clientX-a)>Ml||Math.abs(S.clientY-l)>Tl)u=!0;else return;if(S.preventDefault(),o){const f=wn(e.container,S),w=e.getX(S),g=e.getWidth();let _,m;r===\"left\"?s-f.x<=0?(r=\"right\",_=s,m=s-f.x,s=s+g):(_=f.x,m=s-f.x):r===\"right\"&&(f.x-w<=0?(r=\"left\",_=f.x,m=f.x-w,s=w):(_=w,m=f.x-w)),e.onResize&&e.onResize({x:_,width:m,event:S})}if(i&&e.onDrag){const f=wn(e.container,S);e.onDrag({x:f.x-t,y:f.y-n,event:S})}}function M(S){const f=e.getX(S),w=e.getY(S),g=e.getWidth();e.onMouseUp&&e.onMouseUp(),u&&e.onDrop&&e.onDrop({mouseEvent:S,x:f,y:w,width:g,dragging:i,resizing:o}),t=null,n=null,s=null,i=!1,o=!1,a=null,l=null,u=!1,window.removeEventListener(\"pointermove\",T,!1)}return h}const Yl=e=>({}),Si=e=>({context:e[6]});function Ol(e){let t;const n=e[9].default,s=gr(n,e,e[8],Si);return{c(){s&&s.c()},l(r){s&&s.l(r)},m(r,i){s&&s.m(r,i),t=!0},p(r,[i]){s&&s.p&&(!t||i&256)&&_r(s,n,r,r[8],t?yr(n,r[8],i,Yl):wr(r[8]),Si)},i(r){t||(q(s,r),t=!0)},o(r){J(s,r),t=!1},d(r){s&&s.d(r)}}}function Cl(e,t,n){let s,r,i,o,a,l,{$$slots:u={},$$scope:c}=t,{items:b={}}=t,h=[];const T=Pe(!1);Z(e,T,C=>n(15,a=C));const M=Pe({});Z(e,M,C=>n(13,i=C));const{taskStore:S,rowStore:f}=ve(\"dataStore\");Z(e,S,C=>n(14,o=C)),Z(e,f,C=>n(12,r=C));const w=ve(\"gantt\"),{rowPadding:g}=ve(\"options\");Z(e,g,C=>n(11,s=C));const{api:_,utils:m,columnService:I,selectionManager:L}=ve(\"services\"),me=Gn(),ue=L._selectedTasks;Z(e,ue,C=>n(16,l=C));const dt={rootState:M,dragAllowed({model:C}){const te=r.entities[C.resourceId].model;return Ks(te)&&Ks(C)},resizeAllowed({model:C}){const te=r.entities[C.resourceId].model;return C.type!==\"milestone\"&&fn(te)&&fn(C)},off(C){delete i[C]},save(C,te,ce){Ds(ce.dragging?\"move\":\"e-resize\");const{mouseEvent:ke}=ce;let K=[te];if(ke.ctrlKey)for(const[de,Se]of Object.entries(l))Se&&de!==String(te.model.id)&&K.push(o.entities[de]);h=[];for(const de of K)h.push(de.model.id),_e(M,i[de.model.id]={xDelta:de.left-C.x,yDelta:de.top-C.y,width:de.width,bWidth:C.width,widthDelta:de.width-C.width},i);me(\"itemsChange\",{items:i})},dropAll(C){if(!C.dragging&&!C.resizing)return;_e(T,a=!1,a);const te=[];for(const ce of h){const ke=i[ce],K=o.entities[ce],de=K.model.id===ce,Se=Oe({...C,mouseEvent:{...C.mouseEvent,clientX:C.mouseEvent.clientX+ke.xDelta,clientY:C.mouseEvent.clientY+ke.yDelta},x:C.x+ke.xDelta,y:C.y+ke.yDelta,width:Math.abs((de?C.width:ke.bWidth)+ke.widthDelta)},K);te.push({valid:Se.valid,task:Se.task,targetRow:Se.targetRow,sourceRow:Se.sourceRow,current:Se.current,previous:Se.previous})}me(\"change\",{changes:te}),_e(M,i={},i),h=[],me(\"itemsChange\",{items:i})},moveAll({x:C,y:te,width:ce,event:ke},K,de){var Se;yo(ke,w.mainContainer),de.dragging&&_.tasks.raise.move(K.model),de.resizing&&_.tasks.raise.resize(K.model);for(const ge of h){const B=i[ge],ct=K.model.id===ge,Ee={x:C!=null?C+B.xDelta:null,y:te!=null?te+B.yDelta:null,width:ce!=null?Math.abs((ct?ce:B.bWidth)+B.widthDelta):null};_e(M,i[ge]={...i[ge],...de,x:Ee.x,y:Ee.y,width:Ee.width??((Se=i[ge])==null?void 0:Se.width)},i)}},setState(C,te){_e(M,i[C.model.id]={...i[C.model.id],...te},i)},mouseUp({model:C}){Ds(\"default\"),_.tasks.raise.moveEnd(C)}};function V(C,te){_e(M,i[te]={...i[te],...C},i)}function Oe(C,te){const ce=te.model,ke=r.entities[ce.resourceId];let K;if(C.dragging){const je=dl(C.mouseEvent),mt=r.entities[je];Ks(mt.model)&&(K=mt)}else K=r.entities[ce.resourceId];V({dragging:!1,resizing:!1},ce.id),setTimeout(()=>{V({ignoreClick:!1},ce.id)});const de=m.roundTo(I.getDateByPosition(C.x)),Se=m.roundTo(I.getDateByPosition(C.x+C.width)),ge=I.getPositionByDate(de)|0,B=I.getPositionByDate(Se)|0,ct=ge,Ee=B-ge,ft=s+((K==null?void 0:K.y)??0),xe={left:ct,top:ft,width:Ee,from:de,to:Se},ht={left:te.left,width:te.width,top:te.top,from:ce.from,to:ce.to};return{valid:!0,task:te,current:xe,previous:ht,dragging:C.dragging,resizing:C.resizing,sourceRow:ke,targetRow:K}}return an(\"drag\",dt),e.$$set=C=>{\"items\"in C&&n(7,b=C.items),\"$$scope\"in C&&n(8,c=C.$$scope)},e.$$.update=()=>{e.$$.dirty&128&&_e(M,i=b,i)},[T,M,S,f,g,ue,dt,b,c,u]}class Rl extends Be{constructor(t){super(),Ge(this,t,Cl,Ol,Ve,{items:7})}}const Pl=e=>({state:e&1}),Mi=e=>({state:e[0],onPointerDown:e[2]});function Wl(e){let t;const n=e[14].default,s=gr(n,e,e[13],Mi);return{c(){s&&s.c()},l(r){s&&s.l(r)},m(r,i){s&&s.m(r,i),t=!0},p(r,[i]){s&&s.p&&(!t||i&8193)&&_r(s,n,r,r[13],t?yr(n,r[13],i,Pl):wr(r[13]),Mi)},i(r){t||(q(s,r),t=!0)},o(r){J(s,r),t=!1},d(r){s&&s.d(r)}}}function El(e,t,n){let s,r,i,o,a,{$$slots:l={},$$scope:u}=t,{task:c}=t,b,h,T;const{rowContainer:M,mainContainer:S}=ve(\"gantt\"),{resizeHandleWidth:f}=ve(\"options\"),w=ve(\"drag\"),g=w.rootState;Z(e,g,L=>n(12,a=L));const _=null,m=null,I=bo({container:M,resizeHandleWidth:f,getX:()=>b,getY:()=>h,getWidth:()=>T,dragAllowed(){return(w.dragAllowed??(()=>!0))(c)},resizeAllowed(){return(w.resizeAllowed??(()=>!0))(c)},onDown(L){w.save(L,c,L)},onMouseUp(){w.mouseUp(c)},onResize(L){w.moveAll(L,c,{x:L.x,y:L.width,resizing:!0,ignoreClick:!0})},onDrag(L){w.moveAll(L,c,{x:L.x,y:L.y,dragging:!0,ignoreClick:!0}),yo(L.event,S)},onDrop(L){w.dropAll(L)}});return go(()=>{w.off(c.model.id)}),e.$$set=L=>{\"task\"in L&&n(3,c=L.task),\"$$scope\"in L&&n(13,u=L.$$scope)},e.$$.update=()=>{e.$$.dirty&4104&&n(9,s=a[c.model.id]),e.$$.dirty&512&&n(11,r=(s==null?void 0:s.dragging)??!1),e.$$.dirty&512&&n(10,i=(s==null?void 0:s.resizing)??!1),e.$$.dirty&512&&(s==null||s.ignoreClick),e.$$.dirty&3592&&(r||i?(n(6,b=(s==null?void 0:s.x)??c.left),n(7,h=(s==null?void 0:s.y)??c.top),n(8,T=(s==null?void 0:s.width)??c.width)):(n(6,b=c.left),n(7,h=c.top),n(8,T=c.width))),e.$$.dirty&3520&&n(0,o={x:b,y:h,width:T,dragging:r,resizing:i})},[o,g,I,c,_,m,b,h,T,s,i,r,a,u,l]}class Hl extends Be{constructor(t){super(),Ge(this,t,El,Wl,Ve,{task:3,dragAllowed:4,resizeAllowed:5})}get dragAllowed(){return this.$$.ctx[4]}get resizeAllowed(){return this.$$.ctx[5]}}function Il(e){let t,n,s,r,i,o,a;return{c(){t=F(\"div\"),n=F(\"div\"),s=De(),r=F(\"div\"),this.h()},l(l){t=U(l,\"DIV\",{class:!0,style:!0});var u=z(t);n=U(u,\"DIV\",{class:!0}),z(n).forEach(v),s=pe(u),r=U(u,\"DIV\",{class:!0}),z(r).forEach(v),u.forEach(v),this.h()},h(){Y(n,\"class\",\"sg-time-range-handle-left svelte-w4nglp\"),Y(r,\"class\",\"sg-time-range-handle-right svelte-w4nglp\"),Y(t,\"class\",i=\"sg-time-range-control \"+e[2]+\" svelte-w4nglp\"),W(t,\"width\",e[1].width+\"px\"),W(t,\"left\",e[1].x+\"px\"),X(t,\"sg-time-range-disabled\",!fn(e[0]))},m(l,u){H(l,t,u),G(t,n),G(t,s),G(t,r),o||(a=[xt(e[3].call(null,n)),xt(e[3].call(null,r))],o=!0)},p(l,[u]){u&4&&i!==(i=\"sg-time-range-control \"+l[2]+\" svelte-w4nglp\")&&Y(t,\"class\",i),u&2&&W(t,\"width\",l[1].width+\"px\"),u&2&&W(t,\"left\",l[1].x+\"px\"),u&5&&X(t,\"sg-time-range-disabled\",!fn(l[0]))},i:Ae,o:Ae,d(l){l&&v(t),o=!1,mr(a)}}}function Ll(e,t,n){const{rowContainer:s}=ve(\"gantt\"),{api:r,utils:i,columnService:o}=ve(\"services\"),{resizeHandleWidth:a}=ve(\"options\"),{timeRangeStore:l}=ve(\"dataStore\");let{model:u}=t,{width:c}=t,{left:b}=t;const h={width:c,x:b};function T(S){const f=_=>{const m=i.roundTo(o.getDateByPosition(_.x)),I=i.roundTo(o.getDateByPosition(_.x+_.width)),L=o.getPositionByDate(m),me=o.getPositionByDate(I);Object.assign(u,{from:m,to:I}),w({left:L,width:me-L,model:u,resizing:!1}),r.timeranges.raise.changed({model:u,left:_.x,width:_.width}),window.removeEventListener(\"pointermove\",onmousemove,!1)};function w(_){l.update(_),n(1,h.x=_.left,h),n(1,h.width=_.width,h)}const g=vo(S,{onDown:_=>{r.timeranges.raise.clicked({model:u}),w({left:_.x,width:_.width,model:u,resizing:!0})},onResize:_=>{r.timeranges.raise.resized({model:u,left:_.x,width:_.width}),w({left:_.x,width:_.width,model:u,resizing:!0})},dragAllowed:!1,resizeAllowed:()=>fn(u),onDrop:f,container:s,resizeHandleWidth:a,getX:()=>h.x,getY:()=>0,getWidth:()=>h.width});return{destroy:()=>g.destroy()}}let M;return e.$$set=S=>{\"model\"in S&&n(0,u=S.model),\"width\"in S&&n(4,c=S.width),\"left\"in S&&n(5,b=S.left)},e.$$.update=()=>{e.$$.dirty&48&&(n(1,h.x=b,h),n(1,h.width=c,h)),e.$$.dirty&1&&n(2,M=xn(u.classes))},[u,h,M,T,c,b]}class Nl extends Be{constructor(t){super(),Ge(this,t,Ll,Il,Ve,{model:0,width:4,left:5})}}function Al(e,t=1){switch(e){case\"y\":case\"year\":return t*31536e6;case\"month\":return t*30*24*60*60*1e3;case\"week\":return t*7*24*60*60*1e3;case\"d\":case\"day\":return t*24*60*60*1e3;case\"h\":case\"hour\":return t*60*60*1e3;case\"m\":case\"minute\":return t*60*1e3;case\"s\":case\"second\":return t*1e3;default:throw new Error(`Unknown unit: ${e}`)}}function Fl(e,t=1){return e.setSeconds(e.getSeconds()+t),e}function Ul(e,t=1){return e.setMinutes(e.getMinutes()+t),e}function zl(e,t=1){return e.setHours(e.getHours()+t),e}function Vl(e,t=1){return e.setDate(e.getDate()+t),e.setHours(0,0,0),e}function Bl(e,t=1){const n=e,s=n.getDay(),r=n.getDate()-s+(s==0?-6:1);return n.setDate(r),n.setHours(0,0,0),n.setDate(n.getDate()+7*t),n}function Gl(e,t=1){return e.setMonth(e.getMonth()+t),e.setDate(1),e.setHours(0,0,0),e}function xl(e,t=1){return e.setFullYear(e.getFullYear()+t),e.setMonth(0),e.setDate(1),e.setHours(0,0,0),e}function Ti(e,t,n){switch(t){case\"y\":case\"year\":return xl(e,n);case\"month\":return Gl(e,n);case\"week\":return Bl(e,n);case\"d\":case\"day\":return Vl(e,n);case\"h\":case\"hour\":return zl(e,n);case\"m\":case\"minute\":return Ul(e,n);case\"s\":case\"second\":return Fl(e,n)}}const jl=[\"y\",\"year\",\"month\",\"week\",\"d\",\"day\",\"h\",\"hour\",\"m\",\"minute\",\"s\",\"second\"];function Do(e,t,n,s=1,r){if(jl.indexOf(n)!==-1){let i=0,o=0;const a=new Date(e),l=new Date(e);let u=Ti(l,n,s),c=u.getTime();const b=u.getTime()-e,h=[{from:e,to:u.getTime(),duration:b,isHighlighted:r&&Yi(a,r)}];if(c<t){for(;c<t;)i=c,u=Ti(new Date(c),n,s),o=u.getTime()-c,h.push({from:c,to:u.getTime(),duration:o,isHighlighted:r&&Yi(new Date(c),r)}),c=u.getTime();const T=t-i;h[h.length-1].to=t,h[h.length-1].duration=T}return h}throw new Error(`Unknown unit: ${n}`)}function Yi(e,t){let n;switch(t.unit){case\"m\":case\"minute\":return n=e.getMinutes(),t.fractions.includes(n);case\"h\":case\"hour\":return n=e.getHours(),t.fractions.includes(n);case\"d\":case\"day\":return n=e.getDay(),t.fractions.includes(n);case\"week\":return t.fractions.includes(n);case\"dayinMonth\":return n=e.getDate(),t.fractions.includes(n);case\"month\":return n=e.getMonth(),t.fractions.includes(n);case\"y\":case\"year\":return n=e.getFullYear(),t.fractions.includes(n);default:throw new Error(`Invalid unit: ${t.unit}`)}}function Oi(e,t,n){const s=e.slice();return s[13]=t[n],s}function Ci(e){let t,n,s=(e[13].label||\"N/A\")+\"\",r,i,o,a;function l(){return e[10](e[13])}return{c(){t=F(\"div\"),n=F(\"div\"),r=Qt(s),i=De(),this.h()},l(u){t=U(u,\"DIV\",{class:!0,role:!0,tabindex:!0,style:!0});var c=z(t);n=U(c,\"DIV\",{class:!0});var b=z(n);r=Jt(b,s),b.forEach(v),i=pe(c),c.forEach(v),this.h()},h(){Y(n,\"class\",\"column-header-cell-label svelte-1fuvacf\"),Y(t,\"class\",\"column-header-cell svelte-1fuvacf\"),Y(t,\"role\",\"button\"),Y(t,\"tabindex\",\"0\"),W(t,\"left\",e[13].left+\"px\"),W(t,\"width\",e[13].width+\"px\"),X(t,\"sticky\",e[0].sticky)},m(u,c){H(u,t,c),G(t,n),G(n,r),G(t,i),o||(a=yt(t,\"click\",l),o=!0)},p(u,c){e=u,c&1&&s!==(s=(e[13].label||\"N/A\")+\"\")&&Kt(r,s),c&1&&W(t,\"left\",e[13].left+\"px\"),c&1&&W(t,\"width\",e[13].width+\"px\"),c&1&&X(t,\"sticky\",e[0].sticky)},d(u){u&&v(t),o=!1,a()}}}function ql(e){let t,n=ye(e[0].columns),s=[];for(let r=0;r<n.length;r+=1)s[r]=Ci(Oi(e,n,r));return{c(){t=F(\"div\");for(let r=0;r<s.length;r+=1)s[r].c();this.h()},l(r){t=U(r,\"DIV\",{class:!0});var i=z(t);for(let o=0;o<s.length;o+=1)s[o].l(i);i.forEach(v),this.h()},h(){Y(t,\"class\",\"column-header-row svelte-1fuvacf\")},m(r,i){H(r,t,i);for(let o=0;o<s.length;o+=1)s[o]&&s[o].m(t,null)},p(r,[i]){if(i&17){n=ye(r[0].columns);let o;for(o=0;o<n.length;o+=1){const a=Oi(r,n,o);s[o]?s[o].p(a,i):(s[o]=Ci(a),s[o].c(),s[o].m(t,null))}for(;o<s.length;o+=1)s[o].d(1);s.length=n.length}},i:Ae,o:Ae,d(r){r&&v(t),qt(s,r)}}}function Zl(e,t,n){let s,r,i;const o=Gn(),{from:a,to:l,width:u}=ve(\"dimensions\");Z(e,a,f=>n(9,i=f)),Z(e,l,f=>n(8,r=f)),Z(e,u,f=>n(7,s=f));const{dateAdapter:c}=ve(\"options\");let{header:b}=t,{ganttBodyColumns:h}=t,{ganttBodyUnit:T}=t;function M(f){o(\"dateSelected\",{from:f.from,to:f.to,unit:b.unit})}const S=f=>M(f);return e.$$set=f=>{\"header\"in f&&n(0,b=f.header),\"ganttBodyColumns\"in f&&n(5,h=f.ganttBodyColumns),\"ganttBodyUnit\"in f&&n(6,T=f.ganttBodyUnit)},e.$$.update=()=>{if(e.$$.dirty&993)if(b.unit===T)n(0,b.columns=h.map(f=>({...f,label:c.format(f.from,b.format)})),b);else{const f=Do(i.valueOf(),r.valueOf(),b.unit,b.offset);let w=0,g=0;n(0,b.columns=f.map(_=>(g=w,w=vr(_.to,i.valueOf(),r.valueOf(),s),{width:Math.min(w-g,s),label:c.format(_.from,b.format),from:_.from,to:_.to,left:g})),b)}},[b,a,l,u,M,h,T,s,r,i,S]}class Xl extends Be{constructor(t){super(),Ge(this,t,Zl,ql,Ve,{header:0,ganttBodyColumns:5,ganttBodyUnit:6})}}function Ri(e,t,n){const s=e.slice();return s[4]=t[n],s}function Pi(e){let t,n;return t=new Xl({props:{header:e[4],ganttBodyColumns:e[1],ganttBodyUnit:e[2]}}),t.$on(\"dateSelected\",e[3]),{c(){He(t.$$.fragment)},l(s){ze(t.$$.fragment,s)},m(s,r){Ie(t,s,r),n=!0},p(s,r){const i={};r&1&&(i.header=s[4]),r&2&&(i.ganttBodyColumns=s[1]),r&4&&(i.ganttBodyUnit=s[2]),t.$set(i)},i(s){n||(q(t.$$.fragment,s),n=!0)},o(s){J(t.$$.fragment,s),n=!1},d(s){Le(t,s)}}}function Ql(e){let t,n,s=ye(e[0]),r=[];for(let o=0;o<s.length;o+=1)r[o]=Pi(Ri(e,s,o));const i=o=>J(r[o],1,1,()=>{r[o]=null});return{c(){for(let o=0;o<r.length;o+=1)r[o].c();t=$()},l(o){for(let a=0;a<r.length;a+=1)r[a].l(o);t=$()},m(o,a){for(let l=0;l<r.length;l+=1)r[l]&&r[l].m(o,a);H(o,t,a),n=!0},p(o,[a]){if(a&7){s=ye(o[0]);let l;for(l=0;l<s.length;l+=1){const u=Ri(o,s,l);r[l]?(r[l].p(u,a),q(r[l],1)):(r[l]=Pi(u),r[l].c(),q(r[l],1),r[l].m(t.parentNode,t))}for(nt(),l=s.length;l<r.length;l+=1)i(l);st()}},i(o){if(!n){for(let a=0;a<s.length;a+=1)q(r[a]);n=!0}},o(o){r=r.filter(Boolean);for(let a=0;a<r.length;a+=1)J(r[a]);n=!1},d(o){o&&v(t),qt(r,o)}}}function Jl(e,t,n){let{headers:s}=t,{ganttBodyColumns:r}=t,{ganttBodyUnit:i}=t;function o(a){ks.call(this,e,a)}return e.$$set=a=>{\"headers\"in a&&n(0,s=a.headers),\"ganttBodyColumns\"in a&&n(1,r=a.ganttBodyColumns),\"ganttBodyUnit\"in a&&n(2,i=a.ganttBodyUnit)},[s,r,i,o]}class Kl extends Be{constructor(t){super(),Ge(this,t,Jl,Ql,Ve,{headers:0,ganttBodyColumns:1,ganttBodyUnit:2})}}function $l(e,t){try{const n=document.createElement(\"canvas\");n.width=(e.length-1)*e[0].width,n.height=20;const s=n.getContext(\"2d\");return s.shadowColor=\"rgba(128,128,128,0.5)\",s.shadowOffsetX=0,s.shadowOffsetY=0,s.shadowBlur=.5,s.lineWidth=t.columnStrokeWidth,s.lineCap=\"square\",s.strokeStyle=t.columnStrokeColor,s.translate(.5,.5),e.forEach(i=>{eu(s,i.left)}),`url(\"${n.toDataURL()}\")`}catch(n){console.error(\"[canvas] Render error\",n)}}function eu(e,t){e.beginPath(),e.moveTo(t,0),e.lineTo(t,20),e.stroke()}function Wi(e,t,n){const s=e.slice();return s[6]=t[n],s}function tu(e){let t,n=ye(e[0]),s=[];for(let r=0;r<n.length;r+=1)s[r]=Ei(Wi(e,n,r));return{c(){t=F(\"div\");for(let r=0;r<s.length;r+=1)s[r].c();this.h()},l(r){t=U(r,\"DIV\",{class:!0});var i=z(t);for(let o=0;o<s.length;o+=1)s[o].l(i);i.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-columns svelte-1uqfnup\")},m(r,i){H(r,t,i);for(let o=0;o<s.length;o+=1)s[o]&&s[o].m(t,null)},p(r,i){if(i&29){n=ye(r[0]);let o;for(o=0;o<n.length;o+=1){const a=Wi(r,n,o);s[o]?s[o].p(a,i):(s[o]=Ei(a),s[o].c(),s[o].m(t,null))}for(;o<s.length;o+=1)s[o].d(1);s.length=n.length}},d(r){r&&v(t),qt(s,r)}}}function nu(e){let t;return{c(){t=F(\"div\"),this.h()},l(n){t=U(n,\"DIV\",{class:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"sg-columns sg-columns--background svelte-1uqfnup\"),W(t,\"background-image\",e[5])},m(n,s){H(n,t,s)},p(n,s){s&32&&W(t,\"background-image\",n[5])},d(n){n&&v(t)}}}function Ei(e){let t;return{c(){t=F(\"div\"),this.h()},l(n){t=U(n,\"DIV\",{class:!0,style:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"sg-column svelte-1uqfnup\"),W(t,\"border-right\",(e[6].bgHighlightColor?0:e[2])+\"px solid \"+(e[6].bgHighlightColor||e[3])),W(t,\"left\",e[6].left+\"px\"),W(t,\"width\",e[6].width+\"px\"),W(t,\"background-color\",e[6].bgHighlightColor||e[4])},m(n,s){H(n,t,s)},p(n,s){s&13&&W(t,\"border-right\",(n[6].bgHighlightColor?0:n[2])+\"px solid \"+(n[6].bgHighlightColor||n[3])),s&1&&W(t,\"left\",n[6].left+\"px\"),s&1&&W(t,\"width\",n[6].width+\"px\"),s&17&&W(t,\"background-color\",n[6].bgHighlightColor||n[4])},d(n){n&&v(t)}}}function su(e){let t;function n(i,o){return i[1]?nu:tu}let s=n(e),r=s(e);return{c(){r.c(),t=$()},l(i){r.l(i),t=$()},m(i,o){r.m(i,o),H(i,t,o)},p(i,[o]){s===(s=n(i))&&r?r.p(i,o):(r.d(1),r=s(i),r&&(r.c(),r.m(t.parentNode,t)))},i:Ae,o:Ae,d(i){i&&v(t),r.d(i)}}}function ru(e,t,n){let{columns:s}=t,{useCanvasColumns:r=!0}=t,{columnStrokeWidth:i}=t,{columnStrokeColor:o}=t,{columnDefaultColor:a=\"#ffffff\"}=t,l;return e.$$set=u=>{\"columns\"in u&&n(0,s=u.columns),\"useCanvasColumns\"in u&&n(1,r=u.useCanvasColumns),\"columnStrokeWidth\"in u&&n(2,i=u.columnStrokeWidth),\"columnStrokeColor\"in u&&n(3,o=u.columnStrokeColor),\"columnDefaultColor\"in u&&n(4,a=u.columnDefaultColor)},e.$$.update=()=>{e.$$.dirty&13&&n(5,l=$l(s,{columnStrokeColor:o,columnStrokeWidth:i}))},[s,r,i,o,a,l]}class iu extends Be{constructor(t){super(),Ge(this,t,ru,su,Ve,{columns:0,useCanvasColumns:1,columnStrokeWidth:2,columnStrokeColor:3,columnDefaultColor:4})}}function ou(e){let t,n,s;return{c(){t=F(\"div\"),this.h()},l(r){t=U(r,\"DIV\",{class:!0,style:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"sg-resize svelte-1vzamdy\"),W(t,\"left\",e[0]+\"px\")},m(r,i){H(r,t,i),n||(s=xt(e[1].call(null,t)),n=!0)},p(r,[i]){i&1&&W(t,\"left\",r[0]+\"px\")},i:Ae,o:Ae,d(r){r&&v(t),n=!1,s()}}}function au(e,t,n){const s=Gn();let{x:r}=t,{container:i}=t;const o={onDrag:l=>{n(0,r=l.x),s(\"resize\",{left:r}),Ds(\"col-resize\")},onDrop:l=>{n(0,r=l.x),s(\"resize\",{left:r}),Ds(\"default\")},dragAllowed:!0,resizeAllowed:!1,container:i,getX:()=>r,getY:()=>0,getWidth:()=>0};function a(l){const u=vo(l,o);return{destroy:()=>u.destroy()}}return e.$$set=l=>{\"x\"in l&&n(0,r=l.x),\"container\"in l&&n(2,i=l.container)},e.$$.update=()=>{e.$$.dirty&4&&(o.container=i)},[r,a,i]}class lu extends Be{constructor(t){super(),Ge(this,t,au,ou,Ve,{x:0,container:2})}}function Ze(){const e=[];function t(...s){for(const r of e)r(s)}function n(s){return e.push(s),()=>{const i=e.indexOf(s);e.splice(i,1)}}return[n,t]}function $s(e){const t={on:{},raise:{}};for(const n in e){const[s,r]=e[n];t.on[n]=s,t.raise[n]=r}return t}const uu={};function du(){return an(uu,cu())}function cu(){return{tasks:$s({move:Ze(),resize:Ze(),select:Ze(),switchRow:Ze(),moveEnd:Ze(),change:Ze(),changed:Ze(),dblclicked:Ze()}),gantt:$s({viewChanged:Ze(),dateSelected:Ze()}),timeranges:$s({clicked:Ze(),resized:Ze(),changed:Ze()})}}function fu(e){return{createTask:t=>hu(t,e),reflectTask:(t,n)=>mu(t,n,e)}}function hu(e,t){e.amountDone=e.amountDone??0,e.showButton=e.showButton??!1,e.buttonClasses=e.buttonClasses??\"\",e.buttonHtml=e.buttonHtml??\"\";const n=t.getPositionByDate(e.from)|0,s=t.getPositionByDate(e.to)|0,r=t.rowEntities[e.resourceId],i=(r?r.height:void 0)-2*t.rowPadding,o=(r?r.y:-1e3)+t.rowPadding;return{model:e,left:n,width:s-n,height:i,top:o}}function mu(e,t,n){const s=`reflected-task-${String(e.model.id)}-${String(t.model.id)}`,r={...e.model,resourceId:t.model.id,id:s,enableDragging:!1};return{...e,model:r,top:t.y+n.rowPadding,reflected:!0,reflectedOnParent:!1,reflectedOnChild:!0,originalId:e.model.id}}function er(e,t){const n={y:0,result:[]};return po(e,n,t),n.result}function po(e,t,n,s=null,r=0,i=[]){const o=[],a=[];s&&(i=[...i,s]);for(const l of e){const u=gu(l,t.y,n);if(t.result.push(u),o.push(u),a.push(u),u.childLevel=r,u.parent=s,u.allParents=i,s&&(u.hidden=!(s.model.expanded||s.model.expanded==null)||s.hidden!=null&&s.hidden),u.hidden||(t.y+=u.height),l.children){const c=po(l.children,t,n,u,r+1,i);u.children=c.rows,u.allChildren=c.allRows,a.push(...c.allRows)}}return{rows:o,allRows:a}}function gu(e,t,n){const s=e.height??n.rowHeight;return{model:e,y:t,height:s}}function _u(e){e.model.expanded=!0,e.children&&Mo(e.children)}function wu(e){e.model.expanded=!1,e.children&&So(e.children)}function So(e){for(const t of e)t.children&&So(t.children),t.hidden=!0}function Mo(e,t=!1){for(const n of e)n.children&&Mo(n.children,!n.model.expanded),n.hidden=t}class yu{constructor(t){ls(this,\"columnService\");this.columnService=t}create(t){t.resizable=t.resizable===void 0?!0:t.resizable;const n=this.columnService.getPositionByDate(t.from),s=this.columnService.getPositionByDate(t.to);return{model:t,left:n,width:s-n,resizing:!1}}}class ku{constructor(t){ls(this,\"_selectedTasks\",Pe({}));this.taskStore=t}selectSingle(t){this.unSelectTasks(),this._selectedTasks.set({[t]:!0})}toggleSelection(t){this._selectedTasks.update(n=>({...n,[t]:!n[t]}))}unSelectTasks(){this._selectedTasks.set({})}}function vu(e){function t(s){const r=Du(e.columns,s);return r[0]?r[0]:r[1]}function n(s){const r=bu(e.columns,s);return r[0]?r[0]:r[1]}return{getColumnByDate:t,getColumnByPosition:n,getPositionByDate(s){if(!s)return null;const r=t(s),o=(s-r.from)/r.duration*r.width;return r.left+o},getDateByPosition(s){const r=n(s);s=s-r.left;let i=r.duration/r.width*s;return r.from+i},roundTo(s){return Math.round(s/e.magnetDuration)*e.magnetDuration}}}function bu(e,t){return ko(e,t,s=>s.left)}function Du(e,t){return ko(e,t,s=>s.from)}function pu(){const e={};return{onDelegatedEvent(t,n,s){e[t]||(e[t]={}),e[t][n]=s},offDelegatedEvent(t,n){delete e[t][n]},onEvent(t){const{type:n,target:s}=t,r=e[n];if(!r)return;let i,o=s;for(;o&&o!=t.currentTarget&&!(i=Su(r,o));)o=o.parentElement;i&&r[i.attr]?r[i.attr](t,i.data,o):r.empty&&r.empty(t,null,o)}}}function Su(e,t){let n;for(const s in e)if(n=t.getAttribute(s))return{attr:s,data:n}}class Mu{format(t,n){const s=new Date(t);switch(n){case\"H\":return s.getHours()+\"\";case\"HH\":return mn(s.getHours());case\"H:mm\":return`${s.getHours()}:${mn(s.getMinutes())}`;case\"hh:mm\":return`${mn(s.getHours())}:${mn(s.getMinutes())}`;case\"hh:mm:ss\":return`${s.getHours()}:${mn(s.getMinutes())}:${mn(s.getSeconds())}`;case\"dd/MM/yyyy\":return`${s.getDate()}/${s.getMonth()+1}/${s.getFullYear()}`;case\"dd/MM/yyyy hh:mm\":return`${s.getDate()}/${s.getMonth()+1}/${s.getFullYear()} ${s.getHours()}:${s.getMinutes()}`;case\"dd/MM/yyyy hh:mm:ss\":return`${s.getDate()}/${s.getMonth()+1}/${s.getFullYear()} ${s.getHours()}:${s.getMinutes()}:${s.getSeconds()}`;case\"YYYY\":return`${s.getFullYear()}`;case\"Q\":return`${Math.floor(s.getMonth()/3+1)}`;case\"[Q]Q\":return`Q${Math.floor(s.getMonth()/3+1)}`;case\"YYYY[Q]Q\":return`${s.getFullYear()}Q${Math.floor(s.getMonth()/3+1)}`;case\"MM\":{let r=String(s.getMonth()+1);return r.length==1&&(r=`0${r}`),`${r}`}case\"MMMM\":{const r=s.toLocaleString(\"default\",{month:\"long\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)}`}case\"MMMM - YYYY\":{const r=s.toLocaleString(\"default\",{month:\"long\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)}-${s.getFullYear()}`}case\"MMMM YYYY\":{const r=s.toLocaleString(\"default\",{month:\"long\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)} ${s.getFullYear()}`}case\"MMM\":{const r=s.toLocaleString(\"default\",{month:\"short\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)}`}case\"MMM - YYYY\":{const r=s.toLocaleString(\"default\",{month:\"short\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)} - ${s.getFullYear()}`}case\"MMM YYYY\":{const r=s.toLocaleString(\"default\",{month:\"short\"});return`${r.charAt(0).toUpperCase()}${r.substring(1)} ${s.getFullYear()}`}case\"W\":return`${Hi(s)}`;case\"WW\":{const r=Hi(s);return`${r.toString().length==1?\"0\":\"\"}${r}`}default:return console.warn(`Date Format '${n}' is not supported, use another date adapter.`),`${s.getDate()}/${s.getMonth()+1}/${s.getFullYear()}`}}roundTo(t,n,s){const r=Tu(n,s);return Math.round(t/r)*r}}function mn(e){let t=e.toString();for(let n=t.length;n<2;n++)t=\"0\"+t;return t}function Hi(e){e=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),e.setUTCDate(e.getUTCDate()+4-(e.getUTCDay()||7));const t=new Date(Date.UTC(e.getUTCFullYear(),0,1));return Math.ceil(((e.valueOf()-t.valueOf())/864e5+1)/7)}function Tu(e,t){switch(e){case\"y\":case\"year\":return t*31536e6;case\"month\":return t*30*24*60*60*1e3;case\"week\":return t*7*24*60*60*1e3;case\"d\":case\"day\":return t*24*60*60*1e3;case\"h\":case\"hour\":return t*60*60*1e3;case\"m\":case\"minute\":return t*60*1e3;case\"s\":case\"second\":return t*1e3;default:throw new Error(`Unknown unit: ${e}`)}}function Ii(e){const{taskStore:t,rowStore:n,rowHeight:s,rowPadding:r,rowReflectedTasks:i}=e;let o=0;const a={changed:!1};if(!e.invalidateFull){for(const u in e.invalidatedTasks)l(t.entities[u]);return a}for(const u of n.ids){const c=n.entities[u];c.y=o;const b=c.height;c.height=c.model.height||s,c.hidden||(o+=c.height),b!==c.height&&(a.changed=!0);const h=i[u];if(h)for(const T of h)l(T)}function l(u){const c=n.entities[u.model.resourceId];u.height=(c?c.height:void 0)-2*r,u.top=c.y+r}for(const u of t.ids)l(t.entities[u]);return a}function Li(e){return To(e,!1)}function Ni(e){return To(e,!0)}function To(e,t){const{taskStore:n,rowStore:s,rowTasks:r,rowHeight:i,rowPadding:o}=e;let a=0;for(const l of s.ids){const u=s.entities[l],c=r[l];u.y=a;const b=u.height;if(c){const h=c.map(T=>n.entities[T]);Yu(h,u,{rowHeight:i,rowPadding:o,expandRow:t})}u.hidden||(a+=u.height),u.height}}function Yu(e,t,n){if(!e.length)return;e.sort(Cu);const s={},r={},i=a=>r[a.model.id]??(r[a.model.id]={});let o=0;for(const a of e){const l=i(a);l.yPos=0;let u=!1;for(;!u;){const c=s[l.yPos]||[];u=!0;for(const b of c)if(Ou(a,b)){i(a).intersects=i(b).intersects=!0,l.yPos++,l.yPos>o&&(o=l.yPos),u=!1;break}else continue}s[l.yPos]||(s[l.yPos]=[]),s[l.yPos].push(a)}if(n.expandRow){const a=(t.model.height||n.rowHeight)-2*n.rowPadding;t.height=a*(o+1)+2*n.rowPadding;for(const l of e){const u=i(l);l.height=a,l.top=t.y+n.rowPadding+l.height*u.yPos}}else{t.height=t.model.height||n.rowHeight;const a=t.height-2*n.rowPadding;for(const l of e){const u=i(l);l.height=a/(o+1),l.top=t.y+n.rowPadding+l.height*u.yPos}}}function Ou(e,t){return e.left+e.width>t.left&&e.left<t.left+t.width}function Cu(e,t){return e.left-t.left||t.left+t.width-(e.left+e.width)}function Ru(){const{columnService:e,utils:t}=ve(\"services\");return function(s,r){return Eu(s,{columnService:e,utils:t,...r})}}const Pu=2,Wu=2;function Eu(e,t){let n,s,r,i,o,a,l=!1,u=10;const c=()=>t.container;function b(f,w){const g=t.boundsContainer.getBoundingClientRect(),_=w-g.top>=g.height-u,m=f-g.left>=g.width-u;return _||m}function h(f){if(!t.enabled||(f.stopPropagation(),f.preventDefault(),b(f.clientX,f.clientY)))return;const[w,g]=ol(c(),f),_=s=t.utils.roundTo(t.columnService.getDateByPosition(w)),m=n=t.columnService.getPositionByDate(_)|0,I=0;o=f.clientX,a=f.clientY,r=m+I,window.addEventListener(\"pointermove\",T,!1),window.addEventListener(\"pointerup\",S)}function T(f){if(!l)if(Math.abs(f.clientX-o)>Pu||Math.abs(f.clientY-a)>Wu)l=!0;else return;f.preventDefault();const{x:w,width:g,y:_}=M(f);t.onMove({from:s,to:s,x:w,width:g,y:_})}function M(f){const w=wn(c(),f),g=n,_=0;let m,I;return i===\"left\"?r-w.x<=0?(i=\"right\",m=r,I=r-w.x,r=r+_):(m=w.x,I=r-w.x):w.x-g<=0?(i=\"left\",m=w.x,I=w.x-g,r=g):(m=g,I=w.x-g),{x:m,width:I,y:w.y}}function S(f){if(window.removeEventListener(\"pointerup\",S),window.removeEventListener(\"pointermove\",T,!1),l){const{x:w,width:g,y:_}=M(f),m=t.utils.roundTo(t.columnService.getDateByPosition(w)),I=t.utils.roundTo(t.columnService.getDateByPosition(w+g)),L=t.columnService.getPositionByDate(m)|0,me=t.columnService.getPositionByDate(I)|0;t.onEnd({from:m,to:I,x:L,width:me-L,y:_})}r=null,o=null,a=null,l=!1}return e.addEventListener(\"pointerdown\",h),{destroy(){e.removeEventListener(\"pointerdown\",h),window.removeEventListener(\"pointermove\",T),window.removeEventListener(\"pointerup\",S)},update(f){Object.assign(t,f)}}}function Ai(e,t,n){const s=e.slice();return s[164]=t[n],s}function Fi(e,t,n){const s=e.slice();return s[167]=t[n],s}function Ui(e,t,n){const s=e.slice();return s[172]=t[n],s}function zi(e,t,n){const s=e.slice();return s[175]=t[n],s}function Vi(e,t,n){const s=e.slice();return s[172]=t[n],s}function Bi(e,t,n){const s=e.slice();return s[164]=t[n],s}function Gi(e){let t,n,s,r;const i=[{rowContainerHeight:e[12]},{paddingTop:e[25]},{tableWidth:e[2]},e[62],{visibleRows:e[13]}];var o=e[164];function a(l,u){let c={};for(let b=0;b<i.length;b+=1)c=Wt(c,i[b]);return u!==void 0&&u[0]&33566724|u[2]&1&&(c=Wt(c,dn(i,[u[0]&4096&&{rowContainerHeight:l[12]},u[0]&33554432&&{paddingTop:l[25]},u[0]&4&&{tableWidth:l[2]},u[2]&1&&cn(l[62]),u[0]&8192&&{visibleRows:l[13]}]))),{props:c}}return o&&(t=vs(o,a(e))),s=new lu({props:{x:e[2],container:e[18]}}),s.$on(\"resize\",e[54]),{c(){t&&He(t.$$.fragment),n=De(),He(s.$$.fragment)},l(l){t&&ze(t.$$.fragment,l),n=pe(l),ze(s.$$.fragment,l)},m(l,u){t&&Ie(t,l,u),H(l,n,u),Ie(s,l,u),r=!0},p(l,u){if(u[0]&16&&o!==(o=l[164])){if(t){nt();const b=t;J(b.$$.fragment,1,0,()=>{Le(b,1)}),st()}o?(t=vs(o,a(l,u)),He(t.$$.fragment),q(t.$$.fragment,1),Ie(t,n.parentNode,n)):t=null}else if(o){const b=u[0]&33566724|u[2]&1?dn(i,[u[0]&4096&&{rowContainerHeight:l[12]},u[0]&33554432&&{paddingTop:l[25]},u[0]&4&&{tableWidth:l[2]},u[2]&1&&cn(l[62]),u[0]&8192&&{visibleRows:l[13]}]):{};t.$set(b)}const c={};u[0]&4&&(c.x=l[2]),u[0]&262144&&(c.container=l[18]),s.$set(c)},i(l){r||(t&&q(t.$$.fragment,l),q(s.$$.fragment,l),r=!0)},o(l){t&&J(t.$$.fragment,l),J(s.$$.fragment,l),r=!1},d(l){l&&v(n),t&&Le(t,l),Le(s,l)}}}function xi(e,t){let n,s,r;const i=[t[172]];let o={};for(let a=0;a<i.length;a+=1)o=Wt(o,i[a]);return s=new Nl({props:o}),{key:e,first:null,c(){n=$(),He(s.$$.fragment),this.h()},l(a){n=$(),ze(s.$$.fragment,a),this.h()},h(){this.first=n},m(a,l){H(a,n,l),Ie(s,a,l),r=!0},p(a,l){t=a;const u=l[0]&536870912?dn(i,[cn(t[172])]):{};s.$set(u)},i(a){r||(q(s.$$.fragment,a),r=!0)},o(a){J(s.$$.fragment,a),r=!1},d(a){a&&v(n),Le(s,a)}}}function ji(e,t){let n,s,r;return s=new bl({props:{row:t[175]}}),{key:e,first:null,c(){n=$(),He(s.$$.fragment),this.h()},l(i){n=$(),ze(s.$$.fragment,i),this.h()},h(){this.first=n},m(i,o){H(i,n,o),Ie(s,i,o),r=!0},p(i,o){t=i;const a={};o[0]&8192&&(a.row=t[175]),s.$set(a)},i(i){r||(q(s.$$.fragment,i),r=!0)},o(i){J(s.$$.fragment,i),r=!1},d(i){i&&v(n),Le(s,i)}}}function qi(e,t){let n,s,r;const i=[t[172]];let o={};for(let a=0;a<i.length;a+=1)o=Wt(o,i[a]);return s=new Sl({props:o}),{key:e,first:null,c(){n=$(),He(s.$$.fragment),this.h()},l(a){n=$(),ze(s.$$.fragment,a),this.h()},h(){this.first=n},m(a,l){H(a,n,l),Ie(s,a,l),r=!0},p(a,l){t=a;const u=l[0]&536870912?dn(i,[cn(t[172])]):{};s.$set(u)},i(a){r||(q(s.$$.fragment,a),r=!0)},o(a){J(s.$$.fragment,a),r=!1},d(a){a&&v(n),Le(s,a)}}}function Hu(e){let t,n,s;const r=[e[167],{model:e[167].model},{left:e[170].x},{top:e[170].y},{width:e[170].width},{height:e[167].height},{dragging:e[170].dragging},{resizing:e[170].resizing}];let i={};for(let o=0;o<r.length;o+=1)i=Wt(i,r[o]);return t=new yl({props:i}),t.$on(\"pointerdown\",function(){hr(e[171])&&e[171].apply(this,arguments)}),{c(){He(t.$$.fragment),n=De()},l(o){ze(t.$$.fragment,o),n=pe(o)},m(o,a){Ie(t,o,a),H(o,n,a),s=!0},p(o,a){e=o;const l=a[0]&67108864|a[5]&32768?dn(r,[a[0]&67108864&&cn(e[167]),a[0]&67108864&&{model:e[167].model},a[5]&32768&&{left:e[170].x},a[5]&32768&&{top:e[170].y},a[5]&32768&&{width:e[170].width},a[0]&67108864&&{height:e[167].height},a[5]&32768&&{dragging:e[170].dragging},a[5]&32768&&{resizing:e[170].resizing}]):{};t.$set(l)},i(o){s||(q(t.$$.fragment,o),s=!0)},o(o){J(t.$$.fragment,o),s=!1},d(o){o&&v(n),Le(t,o)}}}function Zi(e,t){let n,s,r;return s=new Hl({props:{task:t[167],$$slots:{default:[Hu,({state:i,onPointerDown:o})=>({170:i,171:o}),({state:i,onPointerDown:o})=>[0,0,0,0,0,(i?32768:0)|(o?65536:0)]]},$$scope:{ctx:t}}}),{key:e,first:null,c(){n=$(),He(s.$$.fragment),this.h()},l(i){n=$(),ze(s.$$.fragment,i),this.h()},h(){this.first=n},m(i,o){H(i,n,o),Ie(s,i,o),r=!0},p(i,o){t=i;const a={};o[0]&67108864&&(a.task=t[167]),o[0]&67108864|o[5]&134316032&&(a.$$scope={dirty:o,ctx:t}),s.$set(a)},i(i){r||(q(s.$$.fragment,i),r=!0)},o(i){J(s.$$.fragment,i),r=!1},d(i){i&&v(n),Le(s,i)}}}function Iu(e){let t=[],n=new Map,s,r,i=ye(e[26]);const o=a=>a[167].model.id;for(let a=0;a<i.length;a+=1){let l=Fi(e,i,a),u=o(l);n.set(u,t[a]=Zi(u,l))}return{c(){for(let a=0;a<t.length;a+=1)t[a].c();s=$()},l(a){for(let l=0;l<t.length;l+=1)t[l].l(a);s=$()},m(a,l){for(let u=0;u<t.length;u+=1)t[u]&&t[u].m(a,l);H(a,s,l),r=!0},p(a,l){l[0]&67108864|l[5]&98304&&(i=ye(a[26]),nt(),t=ms(t,l,o,1,a,i,n,s.parentNode,gs,Zi,s,Fi),st())},i(a){if(!r){for(let l=0;l<i.length;l+=1)q(t[l]);r=!0}},o(a){for(let l=0;l<t.length;l+=1)J(t[l]);r=!1},d(a){a&&v(s);for(let l=0;l<t.length;l+=1)t[l].d(a)}}}function Xi(e){let t,n,s;const r=[{paddingTop:e[25]},{visibleRows:e[13]},e[62]];var i=e[164];function o(a,l){let u={};for(let c=0;c<r.length;c+=1)u=Wt(u,r[c]);return l!==void 0&&l[0]&33562624|l[2]&1&&(u=Wt(u,dn(r,[l[0]&33554432&&{paddingTop:a[25]},l[0]&8192&&{visibleRows:a[13]},l[2]&1&&cn(a[62])]))),{props:u}}return i&&(t=vs(i,o(e))),{c(){t&&He(t.$$.fragment),n=$()},l(a){t&&ze(t.$$.fragment,a),n=$()},m(a,l){t&&Ie(t,a,l),H(a,n,l),s=!0},p(a,l){if(l[0]&32&&i!==(i=a[164])){if(t){nt();const u=t;J(u.$$.fragment,1,0,()=>{Le(u,1)}),st()}i?(t=vs(i,o(a,l)),He(t.$$.fragment),q(t.$$.fragment,1),Ie(t,n.parentNode,n)):t=null}else if(i){const u=l[0]&33562624|l[2]&1?dn(r,[l[0]&33554432&&{paddingTop:a[25]},l[0]&8192&&{visibleRows:a[13]},l[2]&1&&cn(a[62])]):{};t.$set(u)}},i(a){s||(t&&q(t.$$.fragment,a),s=!0)},o(a){t&&J(t.$$.fragment,a),s=!1},d(a){a&&v(n),t&&Le(t,a)}}}function Lu(e){let t,n,s,r,i,o,a,l,u=[],c=new Map,b,h,T,M,S,f,w,g,_,m=[],I=new Map,L,me,ue=[],dt=new Map,V,Oe,C,te,ce,ke,K,de,Se,ge=ye(e[4]),B=[];for(let y=0;y<ge.length;y+=1)B[y]=Gi(Bi(e,ge,y));const ct=y=>J(B[y],1,1,()=>{B[y]=null});a=new Kl({props:{headers:e[1],ganttBodyColumns:e[23],ganttBodyUnit:e[0]}}),a.$on(\"dateSelected\",e[56]);let Ee=ye(e[29]);const ft=y=>y[172].model.id;for(let y=0;y<Ee.length;y+=1){let k=Vi(e,Ee,y),N=ft(k);c.set(N,u[y]=xi(N,k))}f=new iu({props:{columns:e[23],columnStrokeColor:e[7],columnStrokeWidth:e[8],useCanvasColumns:e[6]}});let xe=ye(e[13]);const ht=y=>y[175].model.id;for(let y=0;y<xe.length;y+=1){let k=zi(e,xe,y),N=ht(k);I.set(N,m[y]=ji(N,k))}let je=ye(e[29]);const mt=y=>y[172].model.id;for(let y=0;y<je.length;y+=1){let k=Ui(e,je,y),N=mt(k);dt.set(N,ue[y]=qi(N,k))}Oe=new Rl({props:{items:e[14],$$slots:{default:[Iu]},$$scope:{ctx:e}}}),Oe.$on(\"change\",e[60]),Oe.$on(\"itemsChange\",e[61]);let Qe=ye(e[5]),ie=[];for(let y=0;y<Qe.length;y+=1)ie[y]=Xi(Ai(e,Qe,y));const $t=y=>J(ie[y],1,1,()=>{ie[y]=null});return{c(){t=F(\"div\");for(let y=0;y<B.length;y+=1)B[y].c();n=De(),s=F(\"div\"),r=F(\"div\"),i=F(\"div\"),o=F(\"div\"),He(a.$$.fragment),l=De();for(let y=0;y<u.length;y+=1)u[y].c();T=De(),M=F(\"div\"),S=F(\"div\"),He(f.$$.fragment),w=De(),g=F(\"div\"),_=F(\"div\");for(let y=0;y<m.length;y+=1)m[y].c();L=De(),me=F(\"div\");for(let y=0;y<ue.length;y+=1)ue[y].c();V=De(),He(Oe.$$.fragment),C=De();for(let y=0;y<ie.length;y+=1)ie[y].c();this.h()},l(y){t=U(y,\"DIV\",{class:!0});var k=z(t);for(let be=0;be<B.length;be+=1)B[be].l(k);n=pe(k),s=U(k,\"DIV\",{class:!0});var N=z(s);r=U(N,\"DIV\",{class:!0,style:!0});var Je=z(r);i=U(Je,\"DIV\",{class:!0});var gt=z(i);o=U(gt,\"DIV\",{class:!0,style:!0});var j=z(o);ze(a.$$.fragment,j),l=pe(j);for(let be=0;be<u.length;be+=1)u[be].l(j);j.forEach(v),gt.forEach(v),Je.forEach(v),T=pe(N),M=U(N,\"DIV\",{class:!0});var Ke=z(M);S=U(Ke,\"DIV\",{class:!0,style:!0});var qe=z(S);ze(f.$$.fragment,qe),w=pe(qe),g=U(qe,\"DIV\",{class:!0,style:!0});var Lt=z(g);_=U(Lt,\"DIV\",{style:!0});var Nt=z(_);for(let be=0;be<m.length;be+=1)m[be].l(Nt);Nt.forEach(v),Lt.forEach(v),L=pe(qe),me=U(qe,\"DIV\",{class:!0});var At=z(me);for(let be=0;be<ue.length;be+=1)ue[be].l(At);V=pe(At),ze(Oe.$$.fragment,At),At.forEach(v),C=pe(qe);for(let be=0;be<ie.length;be+=1)ie[be].l(qe);qe.forEach(v),Ke.forEach(v),N.forEach(v),k.forEach(v),this.h()},h(){Y(o,\"class\",\"header-container\"),W(o,\"width\",e[16]+\"px\"),Y(i,\"class\",\"sg-header-scroller svelte-1csmpwr\"),Y(r,\"class\",\"sg-header\"),Y(r,\"style\",b=`padding-right: ${e[27]}px;`),di(()=>e[131].call(r)),W(_,\"transform\",\"translateY(\"+e[25]+\"px)\"),Y(g,\"class\",\"sg-rows svelte-1csmpwr\"),W(g,\"height\",e[12]+\"px\"),Y(me,\"class\",\"sg-foreground svelte-1csmpwr\"),Y(S,\"class\",\"content svelte-1csmpwr\"),W(S,\"width\",e[16]+\"px\"),Y(M,\"class\",\"sg-timeline-body svelte-1csmpwr\"),di(()=>e[134].call(M)),X(M,\"zooming\",e[24]),Y(s,\"class\",\"sg-timeline sg-view svelte-1csmpwr\"),Y(t,\"class\",ke=\"sg-gantt \"+e[3]+\" svelte-1csmpwr\"),X(t,\"sg-disable-transition\",e[22])},m(y,k){H(y,t,k);for(let N=0;N<B.length;N+=1)B[N]&&B[N].m(t,null);G(t,n),G(t,s),G(s,r),G(r,i),G(i,o),Ie(a,o,null),G(o,l);for(let N=0;N<u.length;N+=1)u[N]&&u[N].m(o,null);e[130](r),h=ci(r,e[131].bind(r)),G(s,T),G(s,M),G(M,S),Ie(f,S,null),G(S,w),G(S,g),G(g,_);for(let N=0;N<m.length;N+=1)m[N]&&m[N].m(_,null);e[132](g),G(S,L),G(S,me);for(let N=0;N<ue.length;N+=1)ue[N]&&ue[N].m(me,null);G(me,V),Ie(Oe,me,null),G(S,C);for(let N=0;N<ie.length;N+=1)ie[N]&&ie[N].m(S,null);e[133](M),te=ci(M,e[134].bind(M)),e[135](t),K=!0,de||(Se=[xt(e[53].call(null,i)),xt(e[52].call(null,M)),yt(M,\"wheel\",e[55]),xt(ce=e[59].call(null,M,{container:e[21],enabled:e[9],onMove:e[57],onEnd:e[58],boundsContainer:e[20]})),yt(t,\"pointerdown\",fi(e[51])),yt(t,\"click\",fi(e[51])),yt(t,\"dblclick\",e[51]),yt(t,\"pointerover\",e[51]),yt(t,\"pointerleave\",e[51])],de=!0)},p(y,k){if(k[0]&33828884|k[1]&8388608|k[2]&1){ge=ye(y[4]);let j;for(j=0;j<ge.length;j+=1){const Ke=Bi(y,ge,j);B[j]?(B[j].p(Ke,k),q(B[j],1)):(B[j]=Gi(Ke),B[j].c(),q(B[j],1),B[j].m(t,n))}for(nt(),j=ge.length;j<B.length;j+=1)ct(j);st()}const N={};k[0]&2&&(N.headers=y[1]),k[0]&8388608&&(N.ganttBodyColumns=y[23]),k[0]&1&&(N.ganttBodyUnit=y[0]),a.$set(N),k[0]&536870912&&(Ee=ye(y[29]),nt(),u=ms(u,k,ft,1,y,Ee,c,o,gs,xi,null,Vi),st()),(!K||k[0]&65536)&&W(o,\"width\",y[16]+\"px\"),(!K||k[0]&134217728&&b!==(b=`padding-right: ${y[27]}px;`))&&Y(r,\"style\",b);const Je={};k[0]&8388608&&(Je.columns=y[23]),k[0]&128&&(Je.columnStrokeColor=y[7]),k[0]&256&&(Je.columnStrokeWidth=y[8]),k[0]&64&&(Je.useCanvasColumns=y[6]),f.$set(Je),k[0]&8192&&(xe=ye(y[13]),nt(),m=ms(m,k,ht,1,y,xe,I,_,gs,ji,null,zi),st()),(!K||k[0]&33554432)&&W(_,\"transform\",\"translateY(\"+y[25]+\"px)\"),(!K||k[0]&4096)&&W(g,\"height\",y[12]+\"px\"),k[0]&536870912&&(je=ye(y[29]),nt(),ue=ms(ue,k,mt,1,y,je,dt,me,gs,qi,V,Ui),st());const gt={};if(k[0]&16384&&(gt.items=y[14]),k[0]&67108864|k[5]&134217728&&(gt.$$scope={dirty:k,ctx:y}),Oe.$set(gt),k[0]&33562656|k[2]&1){Qe=ye(y[5]);let j;for(j=0;j<Qe.length;j+=1){const Ke=Ai(y,Qe,j);ie[j]?(ie[j].p(Ke,k),q(ie[j],1)):(ie[j]=Xi(Ke),ie[j].c(),q(ie[j],1),ie[j].m(S,null))}for(nt(),j=Qe.length;j<ie.length;j+=1)$t(j);st()}(!K||k[0]&65536)&&W(S,\"width\",y[16]+\"px\"),ce&&hr(ce.update)&&k[0]&3146240&&ce.update.call(null,{container:y[21],enabled:y[9],onMove:y[57],onEnd:y[58],boundsContainer:y[20]}),(!K||k[0]&16777216)&&X(M,\"zooming\",y[24]),(!K||k[0]&8&&ke!==(ke=\"sg-gantt \"+y[3]+\" svelte-1csmpwr\"))&&Y(t,\"class\",ke),(!K||k[0]&4194312)&&X(t,\"sg-disable-transition\",y[22])},i(y){if(!K){for(let k=0;k<ge.length;k+=1)q(B[k]);q(a.$$.fragment,y);for(let k=0;k<Ee.length;k+=1)q(u[k]);q(f.$$.fragment,y);for(let k=0;k<xe.length;k+=1)q(m[k]);for(let k=0;k<je.length;k+=1)q(ue[k]);q(Oe.$$.fragment,y);for(let k=0;k<Qe.length;k+=1)q(ie[k]);K=!0}},o(y){B=B.filter(Boolean);for(let k=0;k<B.length;k+=1)J(B[k]);J(a.$$.fragment,y);for(let k=0;k<u.length;k+=1)J(u[k]);J(f.$$.fragment,y);for(let k=0;k<m.length;k+=1)J(m[k]);for(let k=0;k<ue.length;k+=1)J(ue[k]);J(Oe.$$.fragment,y),ie=ie.filter(Boolean);for(let k=0;k<ie.length;k+=1)J(ie[k]);K=!1},d(y){y&&v(t),qt(B,y),Le(a);for(let k=0;k<u.length;k+=1)u[k].d();e[130](null),h(),Le(f);for(let k=0;k<m.length;k+=1)m[k].d();e[132](null);for(let k=0;k<ue.length;k+=1)ue[k].d();Le(Oe),qt(ie,y),e[133](null),te(),e[135](null),de=!1,mr(Se)}}}function Qi(e){for(const t in e)if(e[t]==null)throw new Error(`\"${t}\" is not set`)}function cs(e){return e instanceof Date?e.valueOf():e}function Nu(e,t,n){const s=[\"rows\",\"tasks\",\"timeRanges\",\"rowPadding\",\"rowHeight\",\"from\",\"to\",\"minWidth\",\"fitWidth\",\"classes\",\"headers\",\"zoomLevels\",\"taskContent\",\"tableWidth\",\"resizeHandleWidth\",\"onTaskButtonClick\",\"dateAdapter\",\"magnetUnit\",\"magnetOffset\",\"columnUnit\",\"columnOffset\",\"ganttTableModules\",\"ganttBodyModules\",\"reflectOnParentRows\",\"reflectOnChildRows\",\"useCanvasColumns\",\"columnStrokeColor\",\"columnStrokeWidth\",\"highlightedDurations\",\"highlightColor\",\"taskElementHook\",\"layout\",\"columnService\",\"api\",\"timeRangeFactory\",\"utils\",\"refreshTimeRanges\",\"refreshTasks\",\"getRowContainer\",\"selectTask\",\"unselectTasks\",\"scrollToRow\",\"scrollToTask\",\"updateTask\",\"updateTasks\",\"removeTask\",\"removeTasks\",\"updateRow\",\"updateRows\",\"getRow\",\"getTask\",\"getTasks\",\"updateLayoutSync\",\"updateLayout\",\"enableCreateTask\",\"onCreateTask\",\"onCreatedTask\"];let r=hi(t,s),i,o,a,l,u,c,b,h,T,M,S,f,w,g,_,m,I,L,me,ue,dt,V,Oe,C,te,ce=[],ke=!1,{rows:K}=t,{tasks:de=[]}=t,{timeRanges:Se=[]}=t;Qi({rows:K});let{rowPadding:ge=6}=t,{rowHeight:B=52}=t;const ct=Pe(B);Z(e,ct,d=>n(147,me=d));const Ee=Pe(ge);Z(e,Ee,d=>n(146,L=d));let{from:ft}=t,{to:xe}=t;Qi({from:ft,to:xe});const ht=Pe(cs(ft));Z(e,ht,d=>n(129,T=d));const je=Pe(cs(xe));Z(e,je,d=>n(128,h=d));let{minWidth:mt=800}=t,{fitWidth:Qe=!1}=t;const ie=Pe(mt);Z(e,ie,d=>n(141,S=d));const $t=Pe(Qe);Z(e,$t,d=>n(140,M=d));let{classes:y=[]}=t,{headers:k=[{unit:\"day\",format:\"MMMM Do\"},{unit:\"hour\",format:\"H:mm\"}]}=t,{zoomLevels:N=[{headers:[{unit:\"day\",format:\"DD.MM.YYYY\"},{unit:\"hour\",format:\"HH\"}],minWidth:800,fitWidth:!0},{headers:[{unit:\"hour\",format:\"ddd D/M, H A\"},{unit:\"minute\",format:\"mm\",offset:15}],minWidth:5e3,fitWidth:!1}]}=t,{taskContent:Je=null}=t,{tableWidth:gt=240}=t,{resizeHandleWidth:j=10}=t,{onTaskButtonClick:Ke=null}=t,{dateAdapter:qe=new Mu}=t,{magnetUnit:Lt=\"minute\"}=t,{magnetOffset:Nt=15}=t,At;be(Lt,Nt);function be(d,D){d&&D&&(At=Al(d,D))}let{columnUnit:Mn=\"minute\"}=t,{columnOffset:Tn=15}=t,{ganttTableModules:Br=[]}=t,{ganttBodyModules:Gr=[]}=t,{reflectOnParentRows:Qn=!0}=t,{reflectOnChildRows:Jn=!1}=t,{useCanvasColumns:xr=!0}=t,{columnStrokeColor:jr=\"#efefef\"}=t,{columnStrokeWidth:qr=1}=t,{highlightedDurations:Fs}=t,{highlightColor:Us=\"#6eb859\"}=t,{taskElementHook:zs=null}=t,{layout:_t=\"overlap\"}=t;const Kn=Pe(_t);Z(e,Kn,d=>n(145,I=d));const Yn=Pe(null);Z(e,Yn,d=>n(17,g=d));const $n=Pe(null);Z(e,$n,d=>n(15,u=d));const es=Pe(null);Z(e,es,d=>n(28,ue=d));const Vs=kr([Yn,ie,$t],([d,D,R])=>R&&d>D?d:D);Z(e,Vs,d=>n(16,b=d));const Zr=il();an(\"dataStore\",Zr);const{rowStore:On,taskStore:$e,timeRangeStore:Xr,allTasks:Qr,allRows:Jr,allTimeRanges:Kr,rowTaskCache:$r}=Zr;Z(e,On,d=>n(125,a=d)),Z(e,$e,d=>n(126,l=d)),Z(e,Qr,d=>n(127,c=d)),Z(e,Jr,d=>n(123,i=d)),Z(e,Kr,d=>n(29,dt=d)),Z(e,$r,d=>n(124,o=d));const Ft=vu({get columns(){return Gs},get magnetDuration(){return At}});let Bs=!1;async function va(){n(22,Bs=!0),await mi(),V.offsetHeight,n(22,Bs=!1)}let Gs;function ba(d,D,R,A,oe){d instanceof Date&&(d=d.valueOf()),D instanceof Date&&(D=D.valueOf());let ne=[];const Ce=Do(d.valueOf(),D.valueOf(),R,A,Fs);let le=0,Me=0;return Ce.forEach(function(Te){le=Me,Me=vr(Te.to,T,h,b),ne.push({width:Me-le,from:Te.from,to:Te.to,left:le,duration:Te.duration,...Te.isHighlighted&&{bgHighlightColor:Us}})}),ne}let Cn,Rn,ts=Pe(Rn-u);Z(e,ts,d=>n(144,m=d));let ns=Pe(Cn-g);Z(e,ns,d=>n(27,_=d)),an(\"dimensions\",{from:ht,to:je,width:Vs,visibleWidth:Yn,visibleHeight:$n,headerHeight:es,bottomScrollbarVisible:ts,rightScrollbarVisible:ns}),an(\"options\",{dateAdapter:qe,taskElementHook:zs,taskContent:Je,rowPadding:Ee,rowHeight:ct,layout:Kn,resizeHandleWidth:j,reflectOnParentRows:Qn,reflectOnChildRows:Jn,onTaskButtonClick:Ke});const Pn=Pe(null);Z(e,Pn,d=>n(142,f=d));const Wn=Pe(null);Z(e,Wn,d=>n(143,w=d));const ei={rowContainer:null,mainContainer:null,mainHeaderContainer:null,scrollables:ce,hoveredRow:Pn,selectedRow:Wn,updateLayout:Mt,expandRow(d){_u(d),Mt()},collapseRow(d){wu(d),Mt()},invalidatePosition:tn};an(\"gantt\",ei);let en={},pt={},Ut=!0;function tn({task:d,row:D}){D&&(n(112,pt[D.model.id]=!0,pt),n(113,Ut=!1)),d&&(n(111,en[d.model.id]=!0,en),n(112,pt[d.model.resourceId]=!0,pt),n(113,Ut=!1))}_o(()=>{Object.assign(ei,{rowContainer:te,mainContainer:C,mainHeaderContainer:Oe}),n(110,ke=!0)});const{onDelegatedEvent:En,offDelegatedEvent:xs,onEvent:Da}=pu();En(\"click\",\"data-task-id\",(d,D,R)=>{const A=D,oe=l.entities[A];wo(d)&&!R.classList.contains(\"sg-task-reflected\")&&!R.classList.contains(\"sg-ignore-click\")&&(d.ctrlKey?nn.toggleSelection(A):nn.selectSingle(A)),St.tasks.raise.select(oe)}),En(\"pointerover\",\"data-row-id\",(d,D,R)=>{_e(Pn,f=D,f)}),En(\"click\",\"data-row-id\",(d,D,R)=>{if(nn.unSelectTasks(),w==D){_e(Wn,w=null,w);return}_e(Wn,w=D,w)}),En(\"dblclick\",\"data-task-id\",(d,D,R)=>{const A=D;St.tasks.raise.dblclicked(l.entities[A],d)}),En(\"pointerleave\",\"empty\",(d,D,R)=>{_e(Pn,f=null,f)}),go(()=>{xs(\"click\",\"data-task-id\"),xs(\"click\",\"data-row-id\"),xs(\"dblclick\",\"data-task-id\"),nn.unSelectTasks()});let Hn=0;function pa(d){const D=R=>{const{scrollTop:A,scrollLeft:oe}=d;ce.forEach(ne=>{ne.orientation===\"horizontal\"?ne.node.scrollLeft=oe:ne.node.scrollTop=A}),n(114,Hn=A)};return d.addEventListener(\"scroll\",D),{destroy(){d.removeEventListener(\"scroll\",D,!1)}}}function Sa(d){ce.push({node:d,orientation:\"horizontal\"})}function Ma(d){n(2,gt=d.detail.left)}let zt=0,js=!1;async function Ta(d){if(d.ctrlKey){d.preventDefault();const D=zt;if(d.deltaY>0?zt=Math.max(zt-1,0):zt=Math.min(zt+1,N.length-1),D!=zt&&N[zt]){const R={columnUnit:Mn,columnOffset:Tn,minWidth:S,...N[zt]},A=R.minWidth/b,oe=C,ne=wn(oe,d),Me=(oe.scrollLeft+ne.x)*A-ne.x+oe.clientWidth/2;n(0,Mn=R.columnUnit),n(63,Tn=R.columnOffset),_e(ie,S=R.minWidth,S),R.headers&&n(1,k=R.headers),R.fitWidth&&_e($t,M=R.fitWidth,M),St.gantt.raise.viewChanged(),n(24,js=!0),await mi(),oe.scrollLeft=Me,n(24,js=!1)}}}function Ya(d){_e(ht,T=d.detail.from,T),_e(je,h=d.detail.to,h),St.gantt.raise.dateSelected({from:T,to:h})}function Oa(d){const D=er(d,{rowHeight:B});On.addAll(D),Mt()}const{createTask:ss,reflectTask:ti}=fu({get rowEntities(){return a.entities},get rowPadding(){return ge},getPositionByDate:d=>Ft.getPositionByDate(d)});async function Ca(d){const D=[];for(const R of d){et[R.id]||delete et[R.id];const A=ss(R);D.push(A)}$e.addAll(D),Mt()}let Fe={};function Ra(d){const D=d.map(R=>ni.create(R));Xr.addAll(D)}const St=du(),nn=new ku($e),ni=new yu(Ft),si=cl({get from(){return T},get to(){return h},get width(){return b},get magnetOffset(){return Nt},get magnetUnit(){return Lt},get magnetDuration(){return At},get dateAdapter(){return qe}});an(\"services\",{utils:si,api:St,selectionManager:nn,columnService:Ft});function ri(){Xr._update(({ids:d,entities:D})=>(d.forEach(R=>{const A=D[R],oe=Ft.getPositionByDate(A.model.from)|0,ne=Ft.getPositionByDate(A.model.to)|0;A.left=oe,A.width=ne-oe}),{ids:d,entities:D}))}function ii(){c.forEach(d=>{const D=Ft.getPositionByDate(d.model.from)|0,R=Ft.getPositionByDate(d.model.to)|0;d.left=D,d.width=R-D}),$e.refresh()}function Pa(){return te}function Wa(d){l.entities[d]&&nn.selectSingle(d)}function Ea(){nn.unSelectTasks()}function Ha(d,D=\"auto\"){const{scrollTop:R,clientHeight:A}=C,oe=a.entities[d];if(!oe)return;const ne=oe.y;ne<R&&C.scrollTo({top:ne,behavior:D}),ne>R+A&&C.scrollTo({top:ne+oe.height-A,behavior:D})}function Ia(d,D=\"auto\"){const{scrollLeft:R,scrollTop:A,clientWidth:oe,clientHeight:ne}=C,Ce=l.entities[d];if(!Ce)return;const le=a.entities[Ce.model.resourceId],Me=Ce.left,Te=le.y,Vt={top:void 0,left:void 0,behavior:D};Me<R&&(Vt.left=Me),Me>R+oe&&(Vt.left=Me+Ce.width-oe),Te<A&&(Vt.top=Te),Te>A+ne&&(Vt.top=Te+le.height-ne),C.scrollTo(Vt)}function La(d){const D=ss(d);$e.upsert(D),tn({task:D}),rn()}function Na(d){const D=d.map(R=>ss(R));$e.upsertAll(D),D.forEach(R=>tn({task:R})),rn()}function Aa(d){const D=l.entities[d];if(!D)return;$e.delete(d);const R=a.entities[D.model.resourceId];R&&(tn({row:R}),rn())}function Fa(d){for(const D of d){const R=l.entities[D];if(!R)continue;const A=a.entities[R.model.resourceId];A&&tn({row:A})}$e.deleteAll(d),rn()}function Ua(d){const D=er([d],{rowHeight:B});On.upsertAll(D),Mt(),rn()}function za(d){const D=er(d,{rowHeight:B});On.upsertAll(D),Mt(),rn()}function Va(d){return a.entities[d]}function Ba(d){return l.entities[d]}function Ga(d){return o[d]?o[d].map(D=>l.entities[D]):null}let wt=[],rs=!0,is=0,sn,os,oi=0,as=[],ai,In={},qs={},li={};function rn(d){const D={taskStore:l,rowStore:a,rowTasks:o,rowHeight:B,rowPadding:ge,rowReflectedTasks:Fe,invalidatedRows:pt,invalidatedTasks:en,invalidateFull:d??Ut};_t===\"overlap\"&&Ii(D),_t===\"pack\"&&Li(D),_t===\"expand\"&&Ni(D),n(121,qs={}),n(113,Ut=!1),n(111,en={}),n(112,pt={})}function Mt(){n(122,li={}),n(113,Ut=!0)}let{enableCreateTask:ui=!1}=t,{onCreateTask:Zs=d=>({id:`creating-task-${(Math.random()+1).toString(36).substring(2,7)}`,label:\" \",...d})}=t,{onCreatedTask:Xs=d=>{}}=t,et={},We=null;function xa({from:d,to:D,x:R,width:A,y:oe}){if(!We){const Ce=i.find(le=>le.y<oe&&oe<le.y+le.height).model.id;We=ss(Zs({resourceId:Ce,from:d,to:D})),$e.upsert(We),n(14,et[We.model.id]={x:We.left,y:We.top,width:We.width,resizing:!0},et)}n(14,et[We.model.id].x=R,et),n(14,et[We.model.id].width=A,et)}function ja({from:d,to:D,x:R,width:A}){We.model.from=d,We.model.to=D,We.left=R,We.width=A,$e.upsert(We),delete et[We.model.id],Xs(We),We=null}const qa=Ru();function Za(d){if(!d.detail.changes.some(D=>!D.targetRow))for(const D of d.detail.changes){const{task:R,current:A,previous:oe,sourceRow:ne,targetRow:Ce}=D;if(!Ce)continue;const le=R.model;if(Ce&&St.tasks.raise.switchRow(R,Ce,ne),oe.from!=A.from||oe.to!=A.to||ne&&ne.model.id!==Ce.model.id){le.from=A.from,le.to=A.to,le.resourceId=Ce.model.id;const Te={...R,left:A.left,top:A.top,width:A.width};St.tasks.raise.change({task:Te,sourceRow:ne,targetRow:Ce,previousState:oe}),St.tasks.raise.changed({task:Te,sourceRow:ne,targetRow:Ce,previousState:oe}),$e.update(Te),tn({row:ne}),tn({task:Te})}}}function Xa(d){n(14,et={...d.detail.items})}function Qa(d){An[d?\"unshift\":\"push\"](()=>{Oe=d,n(19,Oe)})}function Ja(){ue=this.clientHeight,es.set(ue)}function Ka(d){An[d?\"unshift\":\"push\"](()=>{te=d,n(21,te)})}function $a(d){An[d?\"unshift\":\"push\"](()=>{C=d,n(20,C)})}function el(){u=this.clientHeight,$n.set(u),Rn=this.offsetHeight,g=this.clientWidth,Yn.set(g),Cn=this.offsetWidth,n(11,Rn),n(10,Cn)}function tl(d){An[d?\"unshift\":\"push\"](()=>{V=d,n(18,V)})}return e.$$set=d=>{t=Wt(Wt({},t),rl(d)),n(62,r=hi(t,s)),\"rows\"in d&&n(64,K=d.rows),\"tasks\"in d&&n(65,de=d.tasks),\"timeRanges\"in d&&n(66,Se=d.timeRanges),\"rowPadding\"in d&&n(67,ge=d.rowPadding),\"rowHeight\"in d&&n(68,B=d.rowHeight),\"from\"in d&&n(69,ft=d.from),\"to\"in d&&n(70,xe=d.to),\"minWidth\"in d&&n(71,mt=d.minWidth),\"fitWidth\"in d&&n(72,Qe=d.fitWidth),\"classes\"in d&&n(3,y=d.classes),\"headers\"in d&&n(1,k=d.headers),\"zoomLevels\"in d&&n(73,N=d.zoomLevels),\"taskContent\"in d&&n(74,Je=d.taskContent),\"tableWidth\"in d&&n(2,gt=d.tableWidth),\"resizeHandleWidth\"in d&&n(75,j=d.resizeHandleWidth),\"onTaskButtonClick\"in d&&n(76,Ke=d.onTaskButtonClick),\"dateAdapter\"in d&&n(77,qe=d.dateAdapter),\"magnetUnit\"in d&&n(78,Lt=d.magnetUnit),\"magnetOffset\"in d&&n(79,Nt=d.magnetOffset),\"columnUnit\"in d&&n(0,Mn=d.columnUnit),\"columnOffset\"in d&&n(63,Tn=d.columnOffset),\"ganttTableModules\"in d&&n(4,Br=d.ganttTableModules),\"ganttBodyModules\"in d&&n(5,Gr=d.ganttBodyModules),\"reflectOnParentRows\"in d&&n(80,Qn=d.reflectOnParentRows),\"reflectOnChildRows\"in d&&n(81,Jn=d.reflectOnChildRows),\"useCanvasColumns\"in d&&n(6,xr=d.useCanvasColumns),\"columnStrokeColor\"in d&&n(7,jr=d.columnStrokeColor),\"columnStrokeWidth\"in d&&n(8,qr=d.columnStrokeWidth),\"highlightedDurations\"in d&&n(82,Fs=d.highlightedDurations),\"highlightColor\"in d&&n(83,Us=d.highlightColor),\"taskElementHook\"in d&&n(84,zs=d.taskElementHook),\"layout\"in d&&n(85,_t=d.layout),\"enableCreateTask\"in d&&n(9,ui=d.enableCreateTask),\"onCreateTask\"in d&&n(108,Zs=d.onCreateTask),\"onCreatedTask\"in d&&n(109,Xs=d.onCreatedTask)},e.$$.update=()=>{if(e.$$.dirty[2]&4|e.$$.dirty[3]&131072&&ke&&Oa(K),e.$$.dirty[2]&8|e.$$.dirty[3]&131072&&ke&&Ca(de),e.$$.dirty[2]&16|e.$$.dirty[3]&131072&&ke&&Ra(Se),e.$$.dirty[2]&64&&_e(ct,me=B,me),e.$$.dirty[2]&32&&_e(Ee,L=ge,L),e.$$.dirty[2]&128&&_e(ht,T=cs(ft),T),e.$$.dirty[2]&256&&_e(je,h=cs(xe),h),e.$$.dirty[2]&1536&&(_e(ie,S=mt,S),_e($t,M=Qe,M)),e.$$.dirty[2]&196608&&be(Lt,Nt),e.$$.dirty[2]&8388608&&_e(Kn,I=_t,I),e.$$.dirty[0]&65537|e.$$.dirty[2]&2|e.$$.dirty[4]&48&&(n(23,Gs=ba(T,h,Mn,Tn)),va(),ri(),ii()),e.$$.dirty[0]&34816&&_e(ts,m=Rn-u,m),e.$$.dirty[0]&132096&&_e(ns,_=Cn-g,_),e.$$.dirty[2]&786432|e.$$.dirty[3]&4194304|e.$$.dirty[4]&10){n(115,Fe={});for(const d of c){const D=a.entities[d.model.resourceId];D&&(Jn&&D.allChildren&&D.allChildren.forEach(R=>{const A=ti(d,R);Fe[R.model.id]||n(115,Fe[R.model.id]=[],Fe),Fe[R.model.id].push(A)}),Qn&&D.allParents&&D.allParents.forEach(R=>{const A=ti(d,R);Fe[R.model.id]||n(115,Fe[R.model.id]=[],Fe),Fe[R.model.id].push(A)}))}}if(e.$$.dirty[2]&8388704|e.$$.dirty[3]&542900224|e.$$.dirty[4]&7){const d={taskStore:l,rowStore:a,rowTasks:o,rowHeight:B,rowPadding:ge,rowReflectedTasks:Fe,invalidatedRows:pt,invalidatedTasks:en,invalidateFull:Ut};_t===\"overlap\"&&Ii(d),_t===\"pack\"&&Li(d),_t===\"expand\"&&Ni(d),n(121,qs={}),n(113,Ut=!1),n(111,en={}),n(112,pt={})}if(e.$$.dirty[0]&4096|e.$$.dirty[2]&64|e.$$.dirty[3]&1350565888){n(116,wt=[]),n(12,is=0);const d=i[0];for(const D of i)D.hidden||(wt.push(D),d&&d.height!==D.height&&n(117,rs=!1),n(12,is+=D.height||B))}if(e.$$.dirty[0]&4096|e.$$.dirty[3]&27262976)if(rs){const d=is/wt.length;n(118,sn=Math.floor(Hn/d))}else n(118,sn=ir(wt,Hn,d=>d.y)[0]);if(e.$$.dirty[0]&32768|e.$$.dirty[2]&64|e.$$.dirty[3]&60817408&&(rs?n(119,os=Math.min(sn+Math.ceil(u/B),wt.length-1)):n(119,os=ir(wt,Hn+u,d=>d.y)[0])),e.$$.dirty[3]&41943040&&n(25,oi=wt[sn]?wt[sn].y:0),e.$$.dirty[3]&109051904&&n(13,as=wt.slice(sn,os+1)),e.$$.dirty[0]&24576|e.$$.dirty[3]&138412032|e.$$.dirty[4]&5){let d=function(le){D.push(le);const Me=le.model.id;In[Me]!=null?A[In[Me]]=le:ne=!1,oe[Me]=Ce++};const D=[],R={},A=[],oe={};let ne=!0,Ce=0;for(let le=0;le<as.length;le++){const Me=as[le];if(o[Me.model.id])for(let Te=0;Te<o[Me.model.id].length;Te++){const Vt=o[Me.model.id][Te];R[Vt]=!0,d(l.entities[Vt])}if(Fe[Me.model.id])for(const Te of Fe[Me.model.id])d(Te)}for(const le in et)R[le]||(R[le]=!0,d(l.entities[le]));A.length!==D.length&&(ne=!1),n(120,In=ne?In:oe),n(26,ai=ne?A:D)}e.$$.dirty[2]&8388620&&Mt()},[Mn,k,gt,y,Br,Gr,xr,jr,qr,ui,Cn,Rn,is,as,et,u,b,g,V,Oe,C,te,Bs,Gs,js,oi,ai,_,ue,dt,ct,Ee,ht,je,ie,$t,Kn,Yn,$n,es,Vs,On,$e,Qr,Jr,Kr,$r,ts,ns,Pn,Wn,Da,pa,Sa,Ma,Ta,Ya,xa,ja,qa,Za,Xa,r,Tn,K,de,Se,ge,B,ft,xe,mt,Qe,N,Je,j,Ke,qe,Lt,Nt,Qn,Jn,Fs,Us,zs,_t,Ft,St,ni,si,ri,ii,Pa,Wa,Ea,Ha,Ia,La,Na,Aa,Fa,Ua,za,Va,Ba,Ga,rn,Mt,Zs,Xs,ke,en,pt,Ut,Hn,Fe,wt,rs,sn,os,In,qs,li,i,o,a,l,c,h,T,Qa,Ja,Ka,$a,el,tl]}class Au extends Be{constructor(t){super(),Ge(this,t,Nu,Lu,Ve,{rows:64,tasks:65,timeRanges:66,rowPadding:67,rowHeight:68,from:69,to:70,minWidth:71,fitWidth:72,classes:3,headers:1,zoomLevels:73,taskContent:74,tableWidth:2,resizeHandleWidth:75,onTaskButtonClick:76,dateAdapter:77,magnetUnit:78,magnetOffset:79,columnUnit:0,columnOffset:63,ganttTableModules:4,ganttBodyModules:5,reflectOnParentRows:80,reflectOnChildRows:81,useCanvasColumns:6,columnStrokeColor:7,columnStrokeWidth:8,highlightedDurations:82,highlightColor:83,taskElementHook:84,layout:85,columnService:86,api:87,timeRangeFactory:88,utils:89,refreshTimeRanges:90,refreshTasks:91,getRowContainer:92,selectTask:93,unselectTasks:94,scrollToRow:95,scrollToTask:96,updateTask:97,updateTasks:98,removeTask:99,removeTasks:100,updateRow:101,updateRows:102,getRow:103,getTask:104,getTasks:105,updateLayoutSync:106,updateLayout:107,enableCreateTask:9,onCreateTask:108,onCreatedTask:109},null,[-1,-1,-1,-1,-1,-1])}get columnService(){return this.$$.ctx[86]}get api(){return this.$$.ctx[87]}get timeRangeFactory(){return this.$$.ctx[88]}get utils(){return this.$$.ctx[89]}get refreshTimeRanges(){return this.$$.ctx[90]}get refreshTasks(){return this.$$.ctx[91]}get getRowContainer(){return this.$$.ctx[92]}get selectTask(){return this.$$.ctx[93]}get unselectTasks(){return this.$$.ctx[94]}get scrollToRow(){return this.$$.ctx[95]}get scrollToTask(){return this.$$.ctx[96]}get updateTask(){return this.$$.ctx[97]}get updateTasks(){return this.$$.ctx[98]}get removeTask(){return this.$$.ctx[99]}get removeTasks(){return this.$$.ctx[100]}get updateRow(){return this.$$.ctx[101]}get updateRows(){return this.$$.ctx[102]}get getRow(){return this.$$.ctx[103]}get getTask(){return this.$$.ctx[104]}get getTasks(){return this.$$.ctx[105]}get updateLayoutSync(){return this.$$.ctx[106]}get updateLayout(){return this.$$.ctx[107]}}function Ji(e){let t,n,s;function r(a,l){return a[0].model.expanded?Uu:Fu}let i=r(e),o=i(e);return{c(){t=F(\"div\"),o.c(),this.h()},l(a){t=U(a,\"DIV\",{class:!0,role:!0,tabindex:!0});var l=z(t);o.l(l),l.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-tree-expander svelte-1tk4vqn\"),Y(t,\"role\",\"button\"),Y(t,\"tabindex\",\"0\")},m(a,l){H(a,t,l),o.m(t,null),n||(s=yt(t,\"click\",e[1]),n=!0)},p(a,l){i!==(i=r(a))&&(o.d(1),o=i(a),o&&(o.c(),o.m(t,null)))},d(a){a&&v(t),o.d(),n=!1,s()}}}function Fu(e){let t;return{c(){t=F(\"i\"),this.h()},l(n){t=U(n,\"I\",{class:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"fas fa-angle-right\")},m(n,s){H(n,t,s)},d(n){n&&v(t)}}}function Uu(e){let t;return{c(){t=F(\"i\"),this.h()},l(n){t=U(n,\"I\",{class:!0}),z(t).forEach(v),this.h()},h(){Y(t,\"class\",\"fas fa-angle-down\")},m(n,s){H(n,t,s)},d(n){n&&v(t)}}}function zu(e){let t,n,s,r=e[0].children&&Ji(e);const i=e[3].default,o=gr(i,e,e[2],null);return{c(){t=F(\"div\"),r&&r.c(),n=De(),o&&o.c(),this.h()},l(a){t=U(a,\"DIV\",{class:!0,style:!0});var l=z(t);r&&r.l(l),n=pe(l),o&&o.l(l),l.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-cell-inner svelte-1tk4vqn\"),W(t,\"padding-left\",e[0].childLevel*3+\"em\")},m(a,l){H(a,t,l),r&&r.m(t,null),G(t,n),o&&o.m(t,null),s=!0},p(a,[l]){a[0].children?r?r.p(a,l):(r=Ji(a),r.c(),r.m(t,n)):r&&(r.d(1),r=null),o&&o.p&&(!s||l&4)&&_r(o,i,a,a[2],s?yr(i,a[2],l,null):wr(a[2]),null),(!s||l&1)&&W(t,\"padding-left\",a[0].childLevel*3+\"em\")},i(a){s||(q(o,a),s=!0)},o(a){J(o,a),s=!1},d(a){a&&v(t),r&&r.d(),o&&o.d(a)}}}function Vu(e,t,n){let{$$slots:s={},$$scope:r}=t,{row:i}=t;const o=Gn();function a(){i.model.expanded||i.model.expanded==null?o(\"rowCollapsed\",{row:i}):o(\"rowExpanded\",{row:i})}return e.$$set=l=>{\"row\"in l&&n(0,i=l.row),\"$$scope\"in l&&n(2,r=l.$$scope)},[i,a,r,s]}class Bu extends Be{constructor(t){super(),Ge(this,t,Vu,zu,Ve,{row:0})}}function Ki(e,t,n){const s=e.slice();return s[10]=t[n],s}function Gu(e){let t,n,s=e[1].model.iconClass&&$i(e);function r(a,l){return a[1].model.headerHtml?Xu:a[10].renderer?Zu:a[10].type===\"resourceInfo\"?qu:ju}let i=r(e),o=i(e);return{c(){s&&s.c(),t=De(),o.c(),n=$()},l(a){s&&s.l(a),t=pe(a),o.l(a),n=$()},m(a,l){s&&s.m(a,l),H(a,t,l),o.m(a,l),H(a,n,l)},p(a,l){a[1].model.iconClass?s?s.p(a,l):(s=$i(a),s.c(),s.m(t.parentNode,t)):s&&(s.d(1),s=null),i===(i=r(a))&&o?o.p(a,l):(o.d(1),o=i(a),o&&(o.c(),o.m(n.parentNode,n)))},i:Ae,o:Ae,d(a){a&&(v(t),v(n)),s&&s.d(a),o.d(a)}}}function xu(e){let t,n;return t=new Bu({props:{row:e[1],$$slots:{default:[$u]},$$scope:{ctx:e}}}),t.$on(\"rowCollapsed\",e[7]),t.$on(\"rowExpanded\",e[8]),{c(){He(t.$$.fragment)},l(s){ze(t.$$.fragment,s)},m(s,r){Ie(t,s,r),n=!0},p(s,r){const i={};r&2&&(i.row=s[1]),r&8195&&(i.$$scope={dirty:r,ctx:s}),t.$set(i)},i(s){n||(q(t.$$.fragment,s),n=!0)},o(s){J(t.$$.fragment,s),n=!1},d(s){Le(t,s)}}}function $i(e){let t,n,s;return{c(){t=F(\"div\"),n=F(\"i\"),this.h()},l(r){t=U(r,\"DIV\",{class:!0});var i=z(t);n=U(i,\"I\",{class:!0}),z(n).forEach(v),i.forEach(v),this.h()},h(){Y(n,\"class\",s=bs(e[1].model.iconClass)+\" svelte-1puymdp\"),Y(t,\"class\",\"sg-table-icon svelte-1puymdp\")},m(r,i){H(r,t,i),G(t,n)},p(r,i){i&2&&s!==(s=bs(r[1].model.iconClass)+\" svelte-1puymdp\")&&Y(n,\"class\",s)},d(r){r&&v(t)}}}function ju(e){let t=e[1].model[e[10].property]+\"\",n;return{c(){n=Qt(t)},l(s){n=Jt(s,t)},m(s,r){H(s,n,r)},p(s,r){r&3&&t!==(t=s[1].model[s[10].property]+\"\")&&Kt(n,t)},d(s){s&&v(n)}}}function qu(e){let t,n,s,r,i=e[1].model[e[10].property]+\"\",o;return{c(){t=F(\"img\"),s=De(),r=F(\"div\"),o=Qt(i),this.h()},l(a){t=U(a,\"IMG\",{class:!0,src:!0,alt:!0}),s=pe(a),r=U(a,\"DIV\",{class:!0});var l=z(r);o=Jt(l,i),l.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-resource-image svelte-1puymdp\"),gi(t.src,n=e[1].model.imageSrc)||Y(t,\"src\",n),Y(t,\"alt\",\"\"),Y(r,\"class\",\"sg-resource-title\")},m(a,l){H(a,t,l),H(a,s,l),H(a,r,l),G(r,o)},p(a,l){l&2&&!gi(t.src,n=a[1].model.imageSrc)&&Y(t,\"src\",n),l&3&&i!==(i=a[1].model[a[10].property]+\"\")&&Kt(o,i)},d(a){a&&(v(t),v(s),v(r))}}}function Zu(e){let t,n=e[10].renderer(e[1])+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&3&&n!==(n=r[10].renderer(r[1])+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function Xu(e){let t,n=e[1].model.headerHtml+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&2&&n!==(n=r[1].model.headerHtml+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function eo(e){let t,n,s;return{c(){t=F(\"div\"),n=F(\"i\"),this.h()},l(r){t=U(r,\"DIV\",{class:!0});var i=z(t);n=U(i,\"I\",{class:!0}),z(n).forEach(v),i.forEach(v),this.h()},h(){Y(n,\"class\",s=bs(e[1].model.iconClass)+\" svelte-1puymdp\"),Y(t,\"class\",\"sg-table-icon svelte-1puymdp\")},m(r,i){H(r,t,i),G(t,n)},p(r,i){i&2&&s!==(s=bs(r[1].model.iconClass)+\" svelte-1puymdp\")&&Y(n,\"class\",s)},d(r){r&&v(t)}}}function Qu(e){let t=e[1].model[e[10].property]+\"\",n;return{c(){n=Qt(t)},l(s){n=Jt(s,t)},m(s,r){H(s,n,r)},p(s,r){r&3&&t!==(t=s[1].model[s[10].property]+\"\")&&Kt(n,t)},d(s){s&&v(n)}}}function Ju(e){let t,n=e[10].renderer(e[1])+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&3&&n!==(n=r[10].renderer(r[1])+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function Ku(e){let t,n=e[1].model.headerHtml+\"\",s;return{c(){t=new Zt(!1),s=$(),this.h()},l(r){t=Xt(r,!1),s=$(),this.h()},h(){t.a=s},m(r,i){t.m(n,r,i),H(r,s,i)},p(r,i){i&2&&n!==(n=r[1].model.headerHtml+\"\")&&t.p(n)},d(r){r&&(v(s),t.d())}}}function $u(e){let t,n,s=e[1].model.iconClass&&eo(e);function r(a,l){return a[1].model.headerHtml?Ku:a[10].renderer?Ju:Qu}let i=r(e),o=i(e);return{c(){s&&s.c(),t=De(),o.c(),n=$()},l(a){s&&s.l(a),t=pe(a),o.l(a),n=$()},m(a,l){s&&s.m(a,l),H(a,t,l),o.m(a,l),H(a,n,l)},p(a,l){a[1].model.iconClass?s?s.p(a,l):(s=eo(a),s.c(),s.m(t.parentNode,t)):s&&(s.d(1),s=null),i===(i=r(a))&&o?o.p(a,l):(o.d(1),o=i(a),o&&(o.c(),o.m(n.parentNode,n)))},d(a){a&&(v(t),v(n)),s&&s.d(a),o.d(a)}}}function to(e){let t,n,s,r,i;const o=[xu,Gu],a=[];function l(u,c){return u[10].type==\"tree\"?0:1}return n=l(e),s=a[n]=o[n](e),{c(){t=F(\"div\"),s.c(),r=De(),this.h()},l(u){t=U(u,\"DIV\",{class:!0,style:!0});var c=z(t);s.l(c),r=pe(c),c.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-table-body-cell sg-table-cell svelte-1puymdp\"),W(t,\"width\",e[10].width+\"px\")},m(u,c){H(u,t,c),a[n].m(t,null),G(t,r),i=!0},p(u,c){let b=n;n=l(u),n===b?a[n].p(u,c):(nt(),J(a[b],1,1,()=>{a[b]=null}),st(),s=a[n],s?s.p(u,c):(s=a[n]=o[n](u),s.c()),q(s,1),s.m(t,r)),(!i||c&1)&&W(t,\"width\",u[10].width+\"px\")},i(u){i||(q(s),i=!0)},o(u){J(s),i=!1},d(u){u&&v(t),a[n].d()}}}function ed(e){let t,n,s,r,i=ye(e[0]),o=[];for(let l=0;l<i.length;l+=1)o[l]=to(Ki(e,i,l));const a=l=>J(o[l],1,1,()=>{o[l]=null});return{c(){t=F(\"div\");for(let l=0;l<o.length;l+=1)o[l].c();this.h()},l(l){t=U(l,\"DIV\",{\"data-row-id\":!0,style:!0,class:!0});var u=z(t);for(let c=0;c<o.length;c+=1)o[c].l(u);u.forEach(v),this.h()},h(){Y(t,\"data-row-id\",n=e[1].model.id),W(t,\"height\",e[1].height+\"px\"),Y(t,\"class\",s=\"sg-table-row \"+e[2]+\" sg-table-row-level-\"+e[1].childLevel+\" svelte-1puymdp\"),X(t,\"sg-row-expanded\",e[1].model.expanded),X(t,\"sg-hover\",e[3]==e[1].model.id),X(t,\"sg-selected\",e[4]==e[1].model.id)},m(l,u){H(l,t,u);for(let c=0;c<o.length;c+=1)o[c]&&o[c].m(t,null);r=!0},p(l,[u]){if(u&3){i=ye(l[0]);let c;for(c=0;c<i.length;c+=1){const b=Ki(l,i,c);o[c]?(o[c].p(b,u),q(o[c],1)):(o[c]=to(b),o[c].c(),q(o[c],1),o[c].m(t,null))}for(nt(),c=i.length;c<o.length;c+=1)a(c);st()}(!r||u&2&&n!==(n=l[1].model.id))&&Y(t,\"data-row-id\",n),(!r||u&2)&&W(t,\"height\",l[1].height+\"px\"),(!r||u&6&&s!==(s=\"sg-table-row \"+l[2]+\" sg-table-row-level-\"+l[1].childLevel+\" svelte-1puymdp\"))&&Y(t,\"class\",s),(!r||u&6)&&X(t,\"sg-row-expanded\",l[1].model.expanded),(!r||u&14)&&X(t,\"sg-hover\",l[3]==l[1].model.id),(!r||u&22)&&X(t,\"sg-selected\",l[4]==l[1].model.id)},i(l){if(!r){for(let u=0;u<i.length;u+=1)q(o[u]);r=!0}},o(l){o=o.filter(Boolean);for(let u=0;u<o.length;u+=1)J(o[u]);r=!1},d(l){l&&v(t),qt(o,l)}}}function td(e,t,n){let s,r,i,{headers:o=null}=t,{row:a=null}=t;const{hoveredRow:l,selectedRow:u}=ve(\"gantt\");Z(e,l,h=>n(3,r=h)),Z(e,u,h=>n(4,i=h));function c(h){ks.call(this,e,h)}function b(h){ks.call(this,e,h)}return e.$$set=h=>{\"headers\"in h&&n(0,o=h.headers),\"row\"in h&&n(1,a=h.row)},e.$$.update=()=>{e.$$.dirty&2&&a.parent&&a.childLevel*3,e.$$.dirty&2&&n(2,s=xn(a.model.classes))},[o,a,s,r,i,l,u,c,b]}class nd extends Be{constructor(t){super(),Ge(this,t,td,ed,Ve,{headers:0,row:1})}}function no(e,t,n){const s=e.slice();return s[22]=t[n],s}function so(e,t,n){const s=e.slice();return s[25]=t[n],s}function ro(e){let t,n=e[25].title+\"\",s,r;return{c(){t=F(\"div\"),s=Qt(n),r=De(),this.h()},l(i){t=U(i,\"DIV\",{class:!0,style:!0});var o=z(t);s=Jt(o,n),r=pe(o),o.forEach(v),this.h()},h(){Y(t,\"class\",\"sg-table-header-cell sg-table-cell svelte-1pxxfqb\"),W(t,\"width\",e[25].width+\"px\")},m(i,o){H(i,t,o),G(t,s),G(t,r)},p(i,o){o&16&&n!==(n=i[25].title+\"\")&&Kt(s,n),o&16&&W(t,\"width\",i[25].width+\"px\")},d(i){i&&v(t)}}}function io(e){let t,n;return t=new nd({props:{row:e[22],headers:e[4]}}),t.$on(\"rowExpanded\",e[11]),t.$on(\"rowCollapsed\",e[12]),{c(){He(t.$$.fragment)},l(s){ze(t.$$.fragment,s)},m(s,r){Ie(t,s,r),n=!0},p(s,r){const i={};r&8&&(i.row=s[22]),r&16&&(i.headers=s[4]),t.$set(i)},i(s){n||(q(t.$$.fragment,s),n=!0)},o(s){J(t.$$.fragment,s),n=!1},d(s){Le(t,s)}}}function sd(e){let t,n,s,r,i,o,a,l,u,c,b=ye(e[4]),h=[];for(let f=0;f<b.length;f+=1)h[f]=ro(so(e,b,f));let T=ye(e[3]),M=[];for(let f=0;f<T.length;f+=1)M[f]=io(no(e,T,f));const S=f=>J(M[f],1,1,()=>{M[f]=null});return{c(){t=F(\"div\"),n=F(\"div\");for(let f=0;f<h.length;f+=1)h[f].c();s=De(),r=F(\"div\"),i=F(\"div\"),o=F(\"div\");for(let f=0;f<M.length;f+=1)M[f].c();this.h()},l(f){t=U(f,\"DIV\",{class:!0,style:!0});var w=z(t);n=U(w,\"DIV\",{class:!0,style:!0});var g=z(n);for(let L=0;L<h.length;L+=1)h[L].l(g);g.forEach(v),s=pe(w),r=U(w,\"DIV\",{class:!0,style:!0});var _=z(r);i=U(_,\"DIV\",{class:!0});var m=z(i);o=U(m,\"DIV\",{class:!0,style:!0});var I=z(o);for(let L=0;L<M.length;L+=1)M[L].l(I);I.forEach(v),m.forEach(v),_.forEach(v),w.forEach(v),this.h()},h(){Y(n,\"class\",\"sg-table-header svelte-1pxxfqb\"),W(n,\"height\",e[6]+\"px\"),Y(o,\"class\",\"sg-table-rows\"),W(o,\"padding-top\",e[1]+\"px\"),W(o,\"height\",e[2]+\"px\"),Y(i,\"class\",\"sg-table-scroller svelte-1pxxfqb\"),Y(r,\"class\",\"sg-table-body svelte-1pxxfqb\"),Y(r,\"style\",a=`padding-bottom: ${e[7]}px;`),Y(t,\"class\",\"sg-table sg-view svelte-1pxxfqb\"),W(t,\"width\",e[0]+\"px\")},m(f,w){H(f,t,w),G(t,n);for(let g=0;g<h.length;g+=1)h[g]&&h[g].m(n,null);e[13](n),G(t,s),G(t,r),G(r,i),G(i,o);for(let g=0;g<M.length;g+=1)M[g]&&M[g].m(o,null);l=!0,u||(c=xt(e[10].call(null,i)),u=!0)},p(f,[w]){if(w&16){b=ye(f[4]);let g;for(g=0;g<b.length;g+=1){const _=so(f,b,g);h[g]?h[g].p(_,w):(h[g]=ro(_),h[g].c(),h[g].m(n,null))}for(;g<h.length;g+=1)h[g].d(1);h.length=b.length}if((!l||w&64)&&W(n,\"height\",f[6]+\"px\"),w&6168){T=ye(f[3]);let g;for(g=0;g<T.length;g+=1){const _=no(f,T,g);M[g]?(M[g].p(_,w),q(M[g],1)):(M[g]=io(_),M[g].c(),q(M[g],1),M[g].m(o,null))}for(nt(),g=T.length;g<M.length;g+=1)S(g);st()}(!l||w&2)&&W(o,\"padding-top\",f[1]+\"px\"),(!l||w&4)&&W(o,\"height\",f[2]+\"px\"),(!l||w&128&&a!==(a=`padding-bottom: ${f[7]}px;`))&&Y(r,\"style\",a),(!l||w&1)&&W(t,\"width\",f[0]+\"px\")},i(f){if(!l){for(let w=0;w<T.length;w+=1)q(M[w]);l=!0}},o(f){M=M.filter(Boolean);for(let w=0;w<M.length;w+=1)J(M[w]);l=!1},d(f){f&&v(t),qt(h,f),e[13](null),qt(M,f),u=!1,c()}}}function Yo(e){for(const t of e)t.children&&Yo(t.children),t.hidden=!0}function Oo(e,t=!1){for(const n of e)n.children&&Oo(n.children,!n.model.expanded),n.hidden=t}function rd(e,t,n){let s,r;const i=Gn();let{tableWidth:o}=t,{paddingTop:a}=t,{rowContainerHeight:l}=t,{visibleRows:u}=t,{tableHeaders:c=[{title:\"Name\",property:\"label\",width:100}]}=t;const{headerHeight:b,bottomScrollbarVisible:h}=ve(\"dimensions\");Z(e,b,m=>n(6,s=m)),Z(e,h,m=>n(7,r=m)),ve(\"options\"),ve(\"dataStore\");const{scrollables:T,updateLayout:M}=ve(\"gantt\");_o(()=>{i(\"init\",{module:void 0})});let S;function f(m){T.push({node:m,orientation:\"vertical\"});function I(L){n(5,S.scrollLeft=m.scrollLeft,S)}return m.addEventListener(\"scroll\",I),{destroy(){m.removeEventListener(\"scroll\",I)}}}function w(m){const I=m.detail.row;I.model.expanded=!0,I.children&&Oo(I.children),M()}function g(m){const I=m.detail.row;I.model.expanded=!1,I.children&&Yo(I.children),M()}function _(m){An[m?\"unshift\":\"push\"](()=>{S=m,n(5,S)})}return e.$$set=m=>{\"tableWidth\"in m&&n(0,o=m.tableWidth),\"paddingTop\"in m&&n(1,a=m.paddingTop),\"rowContainerHeight\"in m&&n(2,l=m.rowContainerHeight),\"visibleRows\"in m&&n(3,u=m.visibleRows),\"tableHeaders\"in m&&n(4,c=m.tableHeaders)},e.$$.update=()=>{if(e.$$.dirty&16){let m=0;c.forEach(I=>{m+=I.width})}},[o,a,l,u,c,S,s,r,b,h,f,w,g,_]}class id extends Be{constructor(t){super(),Ge(this,t,rd,sd,Ve,{tableWidth:0,paddingTop:1,rowContainerHeight:2,visibleRows:3,tableHeaders:4})}}var od=id;class ad{constructor(t){ls(this,\"moment\");this.moment=t}format(t,n){return this.moment(t).format(n)}roundTo(t,n,s){const r=this.moment(t);return ld(r,s,n),r.valueOf()}}const oo={hour:\"hours\",minute:\"minutes\",second:\"seconds\",millisecond:\"milliseconds\"};function ld(e,t,n,s=\"round\"){t===1&&n===\"day\"&&(t=24,n=\"hours\"),oo[n]&&(n=oo[n]);const r={hours:24,minutes:60,seconds:60,milliseconds:1e3};r[n]||console.warn(`Rounding dates by ${n} is not supported`);let i=0,o=!1,a=1,l;for(const u in r)u===n?(i=e.get(n),l=r[u],o=!0):o&&(a*=r[u],i+=e.get(u)/a,e.set(u,0));return i=Math[s](i/t)*t,i=Math.min(i,l),e.set(n,i),e}const ym=Au;//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\nvar Co;function O(){return Co.apply(null,arguments)}function ud(e){Co=e}function at(e){return e instanceof Array||Object.prototype.toString.call(e)===\"[object Array]\"}function un(e){return e!=null&&Object.prototype.toString.call(e)===\"[object Object]\"}function se(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function br(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(se(e,t))return!1;return!0}function Ue(e){return e===void 0}function Et(e){return typeof e==\"number\"||Object.prototype.toString.call(e)===\"[object Number]\"}function jn(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function Ro(e,t){var n=[],s,r=e.length;for(s=0;s<r;++s)n.push(t(e[s],s));return n}function Bt(e,t){for(var n in t)se(t,n)&&(e[n]=t[n]);return se(t,\"toString\")&&(e.toString=t.toString),se(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function bt(e,t,n,s){return $o(e,t,n,s,!0).utc()}function dd(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function x(e){return e._pf==null&&(e._pf=dd()),e._pf}var or;Array.prototype.some?or=Array.prototype.some:or=function(e){var t=Object(this),n=t.length>>>0,s;for(s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};function Dr(e){var t=null,n=!1,s=e._d&&!isNaN(e._d.getTime());if(s&&(t=x(e),n=or.call(t.parsedDateParts,function(r){return r!=null}),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n),e._strict&&(s=s&&t.charsLeftOver===0&&t.unusedTokens.length===0&&t.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(e))e._isValid=s;else return s;return e._isValid}function Os(e){var t=bt(NaN);return e!=null?Bt(x(t),e):x(t).userInvalidated=!0,t}var ao=O.momentProperties=[],tr=!1;function pr(e,t){var n,s,r,i=ao.length;if(Ue(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),Ue(t._i)||(e._i=t._i),Ue(t._f)||(e._f=t._f),Ue(t._l)||(e._l=t._l),Ue(t._strict)||(e._strict=t._strict),Ue(t._tzm)||(e._tzm=t._tzm),Ue(t._isUTC)||(e._isUTC=t._isUTC),Ue(t._offset)||(e._offset=t._offset),Ue(t._pf)||(e._pf=x(t)),Ue(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)s=ao[n],r=t[s],Ue(r)||(e[s]=r);return e}function qn(e){pr(this,e),this._d=new Date(e._d!=null?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),tr===!1&&(tr=!0,O.updateOffset(this),tr=!1)}function lt(e){return e instanceof qn||e!=null&&e._isAMomentObject!=null}function Po(e){O.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function rt(e,t){var n=!0;return Bt(function(){if(O.deprecationHandler!=null&&O.deprecationHandler(null,e),n){var s=[],r,i,o,a=arguments.length;for(i=0;i<a;i++){if(r=\"\",typeof arguments[i]==\"object\"){r+=`\n[`+i+\"] \";for(o in arguments[0])se(arguments[0],o)&&(r+=o+\": \"+arguments[0][o]+\", \");r=r.slice(0,-2)}else r=arguments[i];s.push(r)}Po(e+`\nArguments: `+Array.prototype.slice.call(s).join(\"\")+`\n`+new Error().stack),n=!1}return t.apply(this,arguments)},t)}var lo={};function Wo(e,t){O.deprecationHandler!=null&&O.deprecationHandler(e,t),lo[e]||(Po(t),lo[e]=!0)}O.suppressDeprecationWarnings=!1;O.deprecationHandler=null;function Dt(e){return typeof Function<\"u\"&&e instanceof Function||Object.prototype.toString.call(e)===\"[object Function]\"}function cd(e){var t,n;for(n in e)se(e,n)&&(t=e[n],Dt(t)?this[n]=t:this[\"_\"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function ar(e,t){var n=Bt({},e),s;for(s in t)se(t,s)&&(un(e[s])&&un(t[s])?(n[s]={},Bt(n[s],e[s]),Bt(n[s],t[s])):t[s]!=null?n[s]=t[s]:delete n[s]);for(s in e)se(e,s)&&!se(t,s)&&un(e[s])&&(n[s]=Bt({},n[s]));return n}function Sr(e){e!=null&&this.set(e)}var lr;Object.keys?lr=Object.keys:lr=function(e){var t,n=[];for(t in e)se(e,t)&&n.push(t);return n};var fd={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function hd(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return Dt(s)?s.call(t,n):s}function vt(e,t,n){var s=\"\"+Math.abs(e),r=t-s.length,i=e>=0;return(i?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,r)).toString().substr(1)+s}var Mr=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,fs=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,nr={},kn={};function E(e,t,n,s){var r=s;typeof s==\"string\"&&(r=function(){return this[s]()}),e&&(kn[e]=r),t&&(kn[t[0]]=function(){return vt(r.apply(this,arguments),t[1],t[2])}),n&&(kn[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),e)})}function md(e){return e.match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\")}function gd(e){var t=e.match(Mr),n,s;for(n=0,s=t.length;n<s;n++)kn[t[n]]?t[n]=kn[t[n]]:t[n]=md(t[n]);return function(r){var i=\"\",o;for(o=0;o<s;o++)i+=Dt(t[o])?t[o].call(r,e):t[o];return i}}function _s(e,t){return e.isValid()?(t=Eo(t,e.localeData()),nr[t]=nr[t]||gd(t),nr[t](e)):e.localeData().invalidDate()}function Eo(e,t){var n=5;function s(r){return t.longDateFormat(r)||r}for(fs.lastIndex=0;n>=0&&fs.test(e);)e=e.replace(fs,s),fs.lastIndex=0,n-=1;return e}var _d={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function wd(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(Mr).map(function(s){return s===\"MMMM\"||s===\"MM\"||s===\"DD\"||s===\"dddd\"?s.slice(1):s}).join(\"\"),this._longDateFormat[e])}var yd=\"Invalid date\";function kd(){return this._invalidDate}var vd=\"%d\",bd=/\\d{1,2}/;function Dd(e){return this._ordinal.replace(\"%d\",e)}var pd={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function Sd(e,t,n,s){var r=this._relativeTime[n];return Dt(r)?r(e,t,n,s):r.replace(/%d/i,e)}function Md(e,t){var n=this._relativeTime[e>0?\"future\":\"past\"];return Dt(n)?n(t):n.replace(/%s/i,t)}var uo={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function it(e){return typeof e==\"string\"?uo[e]||uo[e.toLowerCase()]:void 0}function Tr(e){var t={},n,s;for(s in e)se(e,s)&&(n=it(s),n&&(t[n]=e[s]));return t}var Td={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Yd(e){var t=[],n;for(n in e)se(e,n)&&t.push({unit:n,priority:Td[n]});return t.sort(function(s,r){return s.priority-r.priority}),t}var Ho=/\\d/,Xe=/\\d\\d/,Io=/\\d{3}/,Yr=/\\d{4}/,Cs=/[+-]?\\d{6}/,he=/\\d\\d?/,Lo=/\\d\\d\\d\\d?/,No=/\\d\\d\\d\\d\\d\\d?/,Rs=/\\d{1,3}/,Or=/\\d{1,4}/,Ps=/[+-]?\\d{1,6}/,Dn=/\\d+/,Ws=/[+-]?\\d+/,Od=/Z|[+-]\\d\\d:?\\d\\d/gi,Es=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,Cd=/[+-]?\\d+(\\.\\d{1,3})?/,Zn=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,pn=/^[1-9]\\d?/,Cr=/^([1-9]\\d|\\d)/,ps;ps={};function P(e,t,n){ps[e]=Dt(t)?t:function(s,r){return s&&n?n:t}}function Rd(e,t){return se(ps,e)?ps[e](t._strict,t._locale):new RegExp(Pd(e))}function Pd(e){return Rt(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(t,n,s,r,i){return n||s||r||i}))}function Rt(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function tt(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function Q(e){var t=+e,n=0;return t!==0&&isFinite(t)&&(n=tt(t)),n}var ur={};function ae(e,t){var n,s=t,r;for(typeof e==\"string\"&&(e=[e]),Et(t)&&(s=function(i,o){o[t]=Q(i)}),r=e.length,n=0;n<r;n++)ur[e[n]]=s}function Xn(e,t){ae(e,function(n,s,r,i){r._w=r._w||{},t(n,r._w,r,i)})}function Wd(e,t,n){t!=null&&se(ur,e)&&ur[e](t,n._a,n,e)}function Hs(e){return e%4===0&&e%100!==0||e%400===0}var Ne=0,Ot=1,kt=2,Re=3,ot=4,Ct=5,ln=6,Ed=7,Hd=8;E(\"Y\",0,0,function(){var e=this.year();return e<=9999?vt(e,4):\"+\"+e});E(0,[\"YY\",2],0,function(){return this.year()%100});E(0,[\"YYYY\",4],0,\"year\");E(0,[\"YYYYY\",5],0,\"year\");E(0,[\"YYYYYY\",6,!0],0,\"year\");P(\"Y\",Ws);P(\"YY\",he,Xe);P(\"YYYY\",Or,Yr);P(\"YYYYY\",Ps,Cs);P(\"YYYYYY\",Ps,Cs);ae([\"YYYYY\",\"YYYYYY\"],Ne);ae(\"YYYY\",function(e,t){t[Ne]=e.length===2?O.parseTwoDigitYear(e):Q(e)});ae(\"YY\",function(e,t){t[Ne]=O.parseTwoDigitYear(e)});ae(\"Y\",function(e,t){t[Ne]=parseInt(e,10)});function Fn(e){return Hs(e)?366:365}O.parseTwoDigitYear=function(e){return Q(e)+(Q(e)>68?1900:2e3)};var Ao=Sn(\"FullYear\",!0);function Id(){return Hs(this.year())}function Sn(e,t){return function(n){return n!=null?(Fo(this,e,n),O.updateOffset(this,t),this):Un(this,e)}}function Un(e,t){if(!e.isValid())return NaN;var n=e._d,s=e._isUTC;switch(t){case\"Milliseconds\":return s?n.getUTCMilliseconds():n.getMilliseconds();case\"Seconds\":return s?n.getUTCSeconds():n.getSeconds();case\"Minutes\":return s?n.getUTCMinutes():n.getMinutes();case\"Hours\":return s?n.getUTCHours():n.getHours();case\"Date\":return s?n.getUTCDate():n.getDate();case\"Day\":return s?n.getUTCDay():n.getDay();case\"Month\":return s?n.getUTCMonth():n.getMonth();case\"FullYear\":return s?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Fo(e,t,n){var s,r,i,o,a;if(!(!e.isValid()||isNaN(n))){switch(s=e._d,r=e._isUTC,t){case\"Milliseconds\":return void(r?s.setUTCMilliseconds(n):s.setMilliseconds(n));case\"Seconds\":return void(r?s.setUTCSeconds(n):s.setSeconds(n));case\"Minutes\":return void(r?s.setUTCMinutes(n):s.setMinutes(n));case\"Hours\":return void(r?s.setUTCHours(n):s.setHours(n));case\"Date\":return void(r?s.setUTCDate(n):s.setDate(n));case\"FullYear\":break;default:return}i=n,o=e.month(),a=e.date(),a=a===29&&o===1&&!Hs(i)?28:a,r?s.setUTCFullYear(i,o,a):s.setFullYear(i,o,a)}}function Ld(e){return e=it(e),Dt(this[e])?this[e]():this}function Nd(e,t){if(typeof e==\"object\"){e=Tr(e);var n=Yd(e),s,r=n.length;for(s=0;s<r;s++)this[n[s].unit](e[n[s].unit])}else if(e=it(e),Dt(this[e]))return this[e](t);return this}function Ad(e,t){return(e%t+t)%t}var Ye;Array.prototype.indexOf?Ye=Array.prototype.indexOf:Ye=function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1};function Rr(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Ad(t,12);return e+=(t-n)/12,n===1?Hs(e)?29:28:31-n%7%2}E(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1});E(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)});E(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)});P(\"M\",he,pn);P(\"MM\",he,Xe);P(\"MMM\",function(e,t){return t.monthsShortRegex(e)});P(\"MMMM\",function(e,t){return t.monthsRegex(e)});ae([\"M\",\"MM\"],function(e,t){t[Ot]=Q(e)-1});ae([\"MMM\",\"MMMM\"],function(e,t,n,s){var r=n._locale.monthsParse(e,s,n._strict);r!=null?t[Ot]=r:x(n).invalidMonth=e});var Fd=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),Uo=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),zo=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,Ud=Zn,zd=Zn;function Vd(e,t){return e?at(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||zo).test(t)?\"format\":\"standalone\"][e.month()]:at(this._months)?this._months:this._months.standalone}function Bd(e,t){return e?at(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[zo.test(t)?\"format\":\"standalone\"][e.month()]:at(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function Gd(e,t,n){var s,r,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)i=bt([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(i,\"\").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(i,\"\").toLocaleLowerCase();return n?t===\"MMM\"?(r=Ye.call(this._shortMonthsParse,o),r!==-1?r:null):(r=Ye.call(this._longMonthsParse,o),r!==-1?r:null):t===\"MMM\"?(r=Ye.call(this._shortMonthsParse,o),r!==-1?r:(r=Ye.call(this._longMonthsParse,o),r!==-1?r:null)):(r=Ye.call(this._longMonthsParse,o),r!==-1?r:(r=Ye.call(this._shortMonthsParse,o),r!==-1?r:null))}function xd(e,t,n){var s,r,i;if(this._monthsParseExact)return Gd.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(r=bt([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp(\"^\"+this.months(r,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[s]=new RegExp(\"^\"+this.monthsShort(r,\"\").replace(\".\",\"\")+\"$\",\"i\")),!n&&!this._monthsParse[s]&&(i=\"^\"+this.months(r,\"\")+\"|^\"+this.monthsShort(r,\"\"),this._monthsParse[s]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&t===\"MMMM\"&&this._longMonthsParse[s].test(e))return s;if(n&&t===\"MMM\"&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}}function Vo(e,t){if(!e.isValid())return e;if(typeof t==\"string\"){if(/^\\d+$/.test(t))t=Q(t);else if(t=e.localeData().monthsParse(t),!Et(t))return e}var n=t,s=e.date();return s=s<29?s:Math.min(s,Rr(e.year(),n)),e._isUTC?e._d.setUTCMonth(n,s):e._d.setMonth(n,s),e}function Bo(e){return e!=null?(Vo(this,e),O.updateOffset(this,!0),this):Un(this,\"Month\")}function jd(){return Rr(this.year(),this.month())}function qd(e){return this._monthsParseExact?(se(this,\"_monthsRegex\")||Go.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(se(this,\"_monthsShortRegex\")||(this._monthsShortRegex=Ud),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function Zd(e){return this._monthsParseExact?(se(this,\"_monthsRegex\")||Go.call(this),e?this._monthsStrictRegex:this._monthsRegex):(se(this,\"_monthsRegex\")||(this._monthsRegex=zd),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function Go(){function e(l,u){return u.length-l.length}var t=[],n=[],s=[],r,i,o,a;for(r=0;r<12;r++)i=bt([2e3,r]),o=Rt(this.monthsShort(i,\"\")),a=Rt(this.months(i,\"\")),t.push(o),n.push(a),s.push(a),s.push(o);t.sort(e),n.sort(e),s.sort(e),this._monthsRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\")}function Xd(e,t,n,s,r,i,o){var a;return e<100&&e>=0?(a=new Date(e+400,t,n,s,r,i,o),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,s,r,i,o),a}function zn(e){var t,n;return e<100&&e>=0?(n=Array.prototype.slice.call(arguments),n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ss(e,t,n){var s=7+t-n,r=(7+zn(e,0,s).getUTCDay()-t)%7;return-r+s-1}function xo(e,t,n,s,r){var i=(7+n-s)%7,o=Ss(e,s,r),a=1+7*(t-1)+i+o,l,u;return a<=0?(l=e-1,u=Fn(l)+a):a>Fn(e)?(l=e+1,u=a-Fn(e)):(l=e,u=a),{year:l,dayOfYear:u}}function Vn(e,t,n){var s=Ss(e.year(),t,n),r=Math.floor((e.dayOfYear()-s-1)/7)+1,i,o;return r<1?(o=e.year()-1,i=r+Pt(o,t,n)):r>Pt(e.year(),t,n)?(i=r-Pt(e.year(),t,n),o=e.year()+1):(o=e.year(),i=r),{week:i,year:o}}function Pt(e,t,n){var s=Ss(e,t,n),r=Ss(e+1,t,n);return(Fn(e)-s+r)/7}E(\"w\",[\"ww\",2],\"wo\",\"week\");E(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\");P(\"w\",he,pn);P(\"ww\",he,Xe);P(\"W\",he,pn);P(\"WW\",he,Xe);Xn([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=Q(e)});function Qd(e){return Vn(e,this._week.dow,this._week.doy).week}var Jd={dow:0,doy:6};function Kd(){return this._week.dow}function $d(){return this._week.doy}function ec(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,\"d\")}function tc(e){var t=Vn(this,1,4).week;return e==null?t:this.add((e-t)*7,\"d\")}E(\"d\",0,\"do\",\"day\");E(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)});E(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)});E(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)});E(\"e\",0,0,\"weekday\");E(\"E\",0,0,\"isoWeekday\");P(\"d\",he);P(\"e\",he);P(\"E\",he);P(\"dd\",function(e,t){return t.weekdaysMinRegex(e)});P(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)});P(\"dddd\",function(e,t){return t.weekdaysRegex(e)});Xn([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){var r=n._locale.weekdaysParse(e,s,n._strict);r!=null?t.d=r:x(n).invalidWeekday=e});Xn([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=Q(e)});function nc(e,t){return typeof e!=\"string\"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e==\"number\"?e:null):parseInt(e,10)}function sc(e,t){return typeof e==\"string\"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pr(e,t){return e.slice(t,7).concat(e.slice(0,t))}var rc=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),jo=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),ic=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),oc=Zn,ac=Zn,lc=Zn;function uc(e,t){var n=at(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"];return e===!0?Pr(n,this._week.dow):e?n[e.day()]:n}function dc(e){return e===!0?Pr(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function cc(e){return e===!0?Pr(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function fc(e,t,n){var s,r,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)i=bt([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(i,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(i,\"\").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(i,\"\").toLocaleLowerCase();return n?t===\"dddd\"?(r=Ye.call(this._weekdaysParse,o),r!==-1?r:null):t===\"ddd\"?(r=Ye.call(this._shortWeekdaysParse,o),r!==-1?r:null):(r=Ye.call(this._minWeekdaysParse,o),r!==-1?r:null):t===\"dddd\"?(r=Ye.call(this._weekdaysParse,o),r!==-1||(r=Ye.call(this._shortWeekdaysParse,o),r!==-1)?r:(r=Ye.call(this._minWeekdaysParse,o),r!==-1?r:null)):t===\"ddd\"?(r=Ye.call(this._shortWeekdaysParse,o),r!==-1||(r=Ye.call(this._weekdaysParse,o),r!==-1)?r:(r=Ye.call(this._minWeekdaysParse,o),r!==-1?r:null)):(r=Ye.call(this._minWeekdaysParse,o),r!==-1||(r=Ye.call(this._weekdaysParse,o),r!==-1)?r:(r=Ye.call(this._shortWeekdaysParse,o),r!==-1?r:null))}function hc(e,t,n){var s,r,i;if(this._weekdaysParseExact)return fc.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(r=bt([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp(\"^\"+this.weekdays(r,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysShort(r,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysMin(r,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[s]||(i=\"^\"+this.weekdays(r,\"\")+\"|^\"+this.weekdaysShort(r,\"\")+\"|^\"+this.weekdaysMin(r,\"\"),this._weekdaysParse[s]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&t===\"dddd\"&&this._fullWeekdaysParse[s].test(e))return s;if(n&&t===\"ddd\"&&this._shortWeekdaysParse[s].test(e))return s;if(n&&t===\"dd\"&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}}function mc(e){if(!this.isValid())return e!=null?this:NaN;var t=Un(this,\"Day\");return e!=null?(e=nc(e,this.localeData()),this.add(e-t,\"d\")):t}function gc(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,\"d\")}function _c(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=sc(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function wc(e){return this._weekdaysParseExact?(se(this,\"_weekdaysRegex\")||Wr.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(se(this,\"_weekdaysRegex\")||(this._weekdaysRegex=oc),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function yc(e){return this._weekdaysParseExact?(se(this,\"_weekdaysRegex\")||Wr.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(se(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=ac),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function kc(e){return this._weekdaysParseExact?(se(this,\"_weekdaysRegex\")||Wr.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(se(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=lc),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wr(){function e(c,b){return b.length-c.length}var t=[],n=[],s=[],r=[],i,o,a,l,u;for(i=0;i<7;i++)o=bt([2e3,1]).day(i),a=Rt(this.weekdaysMin(o,\"\")),l=Rt(this.weekdaysShort(o,\"\")),u=Rt(this.weekdays(o,\"\")),t.push(a),n.push(l),s.push(u),r.push(a),r.push(l),r.push(u);t.sort(e),n.sort(e),s.sort(e),r.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\")}function Er(){return this.hours()%12||12}function vc(){return this.hours()||24}E(\"H\",[\"HH\",2],0,\"hour\");E(\"h\",[\"hh\",2],0,Er);E(\"k\",[\"kk\",2],0,vc);E(\"hmm\",0,0,function(){return\"\"+Er.apply(this)+vt(this.minutes(),2)});E(\"hmmss\",0,0,function(){return\"\"+Er.apply(this)+vt(this.minutes(),2)+vt(this.seconds(),2)});E(\"Hmm\",0,0,function(){return\"\"+this.hours()+vt(this.minutes(),2)});E(\"Hmmss\",0,0,function(){return\"\"+this.hours()+vt(this.minutes(),2)+vt(this.seconds(),2)});function qo(e,t){E(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}qo(\"a\",!0);qo(\"A\",!1);function Zo(e,t){return t._meridiemParse}P(\"a\",Zo);P(\"A\",Zo);P(\"H\",he,Cr);P(\"h\",he,pn);P(\"k\",he,pn);P(\"HH\",he,Xe);P(\"hh\",he,Xe);P(\"kk\",he,Xe);P(\"hmm\",Lo);P(\"hmmss\",No);P(\"Hmm\",Lo);P(\"Hmmss\",No);ae([\"H\",\"HH\"],Re);ae([\"k\",\"kk\"],function(e,t,n){var s=Q(e);t[Re]=s===24?0:s});ae([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e});ae([\"h\",\"hh\"],function(e,t,n){t[Re]=Q(e),x(n).bigHour=!0});ae(\"hmm\",function(e,t,n){var s=e.length-2;t[Re]=Q(e.substr(0,s)),t[ot]=Q(e.substr(s)),x(n).bigHour=!0});ae(\"hmmss\",function(e,t,n){var s=e.length-4,r=e.length-2;t[Re]=Q(e.substr(0,s)),t[ot]=Q(e.substr(s,2)),t[Ct]=Q(e.substr(r)),x(n).bigHour=!0});ae(\"Hmm\",function(e,t,n){var s=e.length-2;t[Re]=Q(e.substr(0,s)),t[ot]=Q(e.substr(s))});ae(\"Hmmss\",function(e,t,n){var s=e.length-4,r=e.length-2;t[Re]=Q(e.substr(0,s)),t[ot]=Q(e.substr(s,2)),t[Ct]=Q(e.substr(r))});function bc(e){return(e+\"\").toLowerCase().charAt(0)===\"p\"}var Dc=/[ap]\\.?m?\\.?/i,pc=Sn(\"Hours\",!0);function Sc(e,t,n){return e>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"}var Xo={calendar:fd,longDateFormat:_d,invalidDate:yd,ordinal:vd,dayOfMonthOrdinalParse:bd,relativeTime:pd,months:Fd,monthsShort:Uo,week:Jd,weekdays:rc,weekdaysMin:ic,weekdaysShort:jo,meridiemParse:Dc},we={},Ln={},Bn;function Mc(e,t){var n,s=Math.min(e.length,t.length);for(n=0;n<s;n+=1)if(e[n]!==t[n])return n;return s}function co(e){return e&&e.toLowerCase().replace(\"_\",\"-\")}function Tc(e){for(var t=0,n,s,r,i;t<e.length;){for(i=co(e[t]).split(\"-\"),n=i.length,s=co(e[t+1]),s=s?s.split(\"-\"):null;n>0;){if(r=Is(i.slice(0,n).join(\"-\")),r)return r;if(s&&s.length>=n&&Mc(i,s)>=n-1)break;n--}t++}return Bn}function Yc(e){return!!(e&&e.match(\"^[^/\\\\\\\\]*$\"))}function Is(e){var t=null,n;if(we[e]===void 0&&typeof module<\"u\"&&module&&module.exports&&Yc(e))try{t=Bn._abbr,n=require,n(\"./locale/\"+e),jt(t)}catch{we[e]=null}return we[e]}function jt(e,t){var n;return e&&(Ue(t)?n=Ht(e):n=Hr(e,t),n?Bn=n:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),Bn._abbr}function Hr(e,t){if(t!==null){var n,s=Xo;if(t.abbr=e,we[e]!=null)Wo(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),s=we[e]._config;else if(t.parentLocale!=null)if(we[t.parentLocale]!=null)s=we[t.parentLocale]._config;else if(n=Is(t.parentLocale),n!=null)s=n._config;else return Ln[t.parentLocale]||(Ln[t.parentLocale]=[]),Ln[t.parentLocale].push({name:e,config:t}),null;return we[e]=new Sr(ar(s,t)),Ln[e]&&Ln[e].forEach(function(r){Hr(r.name,r.config)}),jt(e),we[e]}else return delete we[e],null}function Oc(e,t){if(t!=null){var n,s,r=Xo;we[e]!=null&&we[e].parentLocale!=null?we[e].set(ar(we[e]._config,t)):(s=Is(e),s!=null&&(r=s._config),t=ar(r,t),s==null&&(t.abbr=e),n=new Sr(t),n.parentLocale=we[e],we[e]=n),jt(e)}else we[e]!=null&&(we[e].parentLocale!=null?(we[e]=we[e].parentLocale,e===jt()&&jt(e)):we[e]!=null&&delete we[e]);return we[e]}function Ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Bn;if(!at(e)){if(t=Is(e),t)return t;e=[e]}return Tc(e)}function Cc(){return lr(we)}function Ir(e){var t,n=e._a;return n&&x(e).overflow===-2&&(t=n[Ot]<0||n[Ot]>11?Ot:n[kt]<1||n[kt]>Rr(n[Ne],n[Ot])?kt:n[Re]<0||n[Re]>24||n[Re]===24&&(n[ot]!==0||n[Ct]!==0||n[ln]!==0)?Re:n[ot]<0||n[ot]>59?ot:n[Ct]<0||n[Ct]>59?Ct:n[ln]<0||n[ln]>999?ln:-1,x(e)._overflowDayOfYear&&(t<Ne||t>kt)&&(t=kt),x(e)._overflowWeeks&&t===-1&&(t=Ed),x(e)._overflowWeekday&&t===-1&&(t=Hd),x(e).overflow=t),e}var Rc=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Pc=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Wc=/Z|[+-]\\d\\d(?::?\\d\\d)?/,hs=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],sr=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],Ec=/^\\/?Date\\((-?\\d+)/i,Hc=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Ic={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Qo(e){var t,n,s=e._i,r=Rc.exec(s)||Pc.exec(s),i,o,a,l,u=hs.length,c=sr.length;if(r){for(x(e).iso=!0,t=0,n=u;t<n;t++)if(hs[t][1].exec(r[1])){o=hs[t][0],i=hs[t][2]!==!1;break}if(o==null){e._isValid=!1;return}if(r[3]){for(t=0,n=c;t<n;t++)if(sr[t][1].exec(r[3])){a=(r[2]||\" \")+sr[t][0];break}if(a==null){e._isValid=!1;return}}if(!i&&a!=null){e._isValid=!1;return}if(r[4])if(Wc.exec(r[4]))l=\"Z\";else{e._isValid=!1;return}e._f=o+(a||\"\")+(l||\"\"),Nr(e)}else e._isValid=!1}function Lc(e,t,n,s,r,i){var o=[Nc(e),Uo.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(r,10)];return i&&o.push(parseInt(i,10)),o}function Nc(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function Ac(e){return e.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function Fc(e,t,n){if(e){var s=jo.indexOf(e),r=new Date(t[0],t[1],t[2]).getDay();if(s!==r)return x(n).weekdayMismatch=!0,n._isValid=!1,!1}return!0}function Uc(e,t,n){if(e)return Ic[e];if(t)return 0;var s=parseInt(n,10),r=s%100,i=(s-r)/100;return i*60+r}function Jo(e){var t=Hc.exec(Ac(e._i)),n;if(t){if(n=Lc(t[4],t[3],t[2],t[5],t[6],t[7]),!Fc(t[1],n,e))return;e._a=n,e._tzm=Uc(t[8],t[9],t[10]),e._d=zn.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),x(e).rfc2822=!0}else e._isValid=!1}function zc(e){var t=Ec.exec(e._i);if(t!==null){e._d=new Date(+t[1]);return}if(Qo(e),e._isValid===!1)delete e._isValid;else return;if(Jo(e),e._isValid===!1)delete e._isValid;else return;e._strict?e._isValid=!1:O.createFromInputFallback(e)}O.createFromInputFallback=rt(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))});function _n(e,t,n){return e??t??n}function Vc(e){var t=new Date(O.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Lr(e){var t,n,s=[],r,i,o;if(!e._d){for(r=Vc(e),e._w&&e._a[kt]==null&&e._a[Ot]==null&&Bc(e),e._dayOfYear!=null&&(o=_n(e._a[Ne],r[Ne]),(e._dayOfYear>Fn(o)||e._dayOfYear===0)&&(x(e)._overflowDayOfYear=!0),n=zn(o,0,e._dayOfYear),e._a[Ot]=n.getUTCMonth(),e._a[kt]=n.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=s[t]=r[t];for(;t<7;t++)e._a[t]=s[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[Re]===24&&e._a[ot]===0&&e._a[Ct]===0&&e._a[ln]===0&&(e._nextDay=!0,e._a[Re]=0),e._d=(e._useUTC?zn:Xd).apply(null,s),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Re]=24),e._w&&typeof e._w.d<\"u\"&&e._w.d!==i&&(x(e).weekdayMismatch=!0)}}function Bc(e){var t,n,s,r,i,o,a,l,u;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(i=1,o=4,n=_n(t.GG,e._a[Ne],Vn(fe(),1,4).year),s=_n(t.W,1),r=_n(t.E,1),(r<1||r>7)&&(l=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,u=Vn(fe(),i,o),n=_n(t.gg,e._a[Ne],u.year),s=_n(t.w,u.week),t.d!=null?(r=t.d,(r<0||r>6)&&(l=!0)):t.e!=null?(r=t.e+i,(t.e<0||t.e>6)&&(l=!0)):r=i),s<1||s>Pt(n,i,o)?x(e)._overflowWeeks=!0:l!=null?x(e)._overflowWeekday=!0:(a=xo(n,s,r,i,o),e._a[Ne]=a.year,e._dayOfYear=a.dayOfYear)}O.ISO_8601=function(){};O.RFC_2822=function(){};function Nr(e){if(e._f===O.ISO_8601){Qo(e);return}if(e._f===O.RFC_2822){Jo(e);return}e._a=[],x(e).empty=!0;var t=\"\"+e._i,n,s,r,i,o,a=t.length,l=0,u,c;for(r=Eo(e._f,e._locale).match(Mr)||[],c=r.length,n=0;n<c;n++)i=r[n],s=(t.match(Rd(i,e))||[])[0],s&&(o=t.substr(0,t.indexOf(s)),o.length>0&&x(e).unusedInput.push(o),t=t.slice(t.indexOf(s)+s.length),l+=s.length),kn[i]?(s?x(e).empty=!1:x(e).unusedTokens.push(i),Wd(i,s,e)):e._strict&&!s&&x(e).unusedTokens.push(i);x(e).charsLeftOver=a-l,t.length>0&&x(e).unusedInput.push(t),e._a[Re]<=12&&x(e).bigHour===!0&&e._a[Re]>0&&(x(e).bigHour=void 0),x(e).parsedDateParts=e._a.slice(0),x(e).meridiem=e._meridiem,e._a[Re]=Gc(e._locale,e._a[Re],e._meridiem),u=x(e).era,u!==null&&(e._a[Ne]=e._locale.erasConvertYear(u,e._a[Ne])),Lr(e),Ir(e)}function Gc(e,t,n){var s;return n==null?t:e.meridiemHour!=null?e.meridiemHour(t,n):(e.isPM!=null&&(s=e.isPM(n),s&&t<12&&(t+=12),!s&&t===12&&(t=0)),t)}function xc(e){var t,n,s,r,i,o,a=!1,l=e._f.length;if(l===0){x(e).invalidFormat=!0,e._d=new Date(NaN);return}for(r=0;r<l;r++)i=0,o=!1,t=pr({},e),e._useUTC!=null&&(t._useUTC=e._useUTC),t._f=e._f[r],Nr(t),Dr(t)&&(o=!0),i+=x(t).charsLeftOver,i+=x(t).unusedTokens.length*10,x(t).score=i,a?i<s&&(s=i,n=t):(s==null||i<s||o)&&(s=i,n=t,o&&(a=!0));Bt(e,n||t)}function jc(e){if(!e._d){var t=Tr(e._i),n=t.day===void 0?t.date:t.day;e._a=Ro([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],function(s){return s&&parseInt(s,10)}),Lr(e)}}function qc(e){var t=new qn(Ir(Ko(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}function Ko(e){var t=e._i,n=e._f;return e._locale=e._locale||Ht(e._l),t===null||n===void 0&&t===\"\"?Os({nullInput:!0}):(typeof t==\"string\"&&(e._i=t=e._locale.preparse(t)),lt(t)?new qn(Ir(t)):(jn(t)?e._d=t:at(n)?xc(e):n?Nr(e):Zc(e),Dr(e)||(e._d=null),e))}function Zc(e){var t=e._i;Ue(t)?e._d=new Date(O.now()):jn(t)?e._d=new Date(t.valueOf()):typeof t==\"string\"?zc(e):at(t)?(e._a=Ro(t.slice(0),function(n){return parseInt(n,10)}),Lr(e)):un(t)?jc(e):Et(t)?e._d=new Date(t):O.createFromInputFallback(e)}function $o(e,t,n,s,r){var i={};return(t===!0||t===!1)&&(s=t,t=void 0),(n===!0||n===!1)&&(s=n,n=void 0),(un(e)&&br(e)||at(e)&&e.length===0)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=r,i._l=n,i._i=e,i._f=t,i._strict=s,qc(i)}function fe(e,t,n,s){return $o(e,t,n,s,!1)}var Xc=rt(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=fe.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:Os()}),Qc=rt(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=fe.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:Os()});function ea(e,t){var n,s;if(t.length===1&&at(t[0])&&(t=t[0]),!t.length)return fe();for(n=t[0],s=1;s<t.length;++s)(!t[s].isValid()||t[s][e](n))&&(n=t[s]);return n}function Jc(){var e=[].slice.call(arguments,0);return ea(\"isBefore\",e)}function Kc(){var e=[].slice.call(arguments,0);return ea(\"isAfter\",e)}var $c=function(){return Date.now?Date.now():+new Date},Nn=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function ef(e){var t,n=!1,s,r=Nn.length;for(t in e)if(se(e,t)&&!(Ye.call(Nn,t)!==-1&&(e[t]==null||!isNaN(e[t]))))return!1;for(s=0;s<r;++s)if(e[Nn[s]]){if(n)return!1;parseFloat(e[Nn[s]])!==Q(e[Nn[s]])&&(n=!0)}return!0}function tf(){return this._isValid}function nf(){return ut(NaN)}function Ls(e){var t=Tr(e),n=t.year||0,s=t.quarter||0,r=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,a=t.hour||0,l=t.minute||0,u=t.second||0,c=t.millisecond||0;this._isValid=ef(t),this._milliseconds=+c+u*1e3+l*6e4+a*1e3*60*60,this._days=+o+i*7,this._months=+r+s*3+n*12,this._data={},this._locale=Ht(),this._bubble()}function ws(e){return e instanceof Ls}function dr(e){return e<0?Math.round(-1*e)*-1:Math.round(e)}function sf(e,t,n){var s=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),i=0,o;for(o=0;o<s;o++)Q(e[o])!==Q(t[o])&&i++;return i+r}function ta(e,t){E(e,0,0,function(){var n=this.utcOffset(),s=\"+\";return n<0&&(n=-n,s=\"-\"),s+vt(~~(n/60),2)+t+vt(~~n%60,2)})}ta(\"Z\",\":\");ta(\"ZZ\",\"\");P(\"Z\",Es);P(\"ZZ\",Es);ae([\"Z\",\"ZZ\"],function(e,t,n){n._useUTC=!0,n._tzm=Ar(Es,e)});var rf=/([\\+\\-]|\\d\\d)/gi;function Ar(e,t){var n=(t||\"\").match(e),s,r,i;return n===null?null:(s=n[n.length-1]||[],r=(s+\"\").match(rf)||[\"-\",0,0],i=+(r[1]*60)+Q(r[2]),i===0?0:r[0]===\"+\"?i:-i)}function Fr(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(lt(e)||jn(e)?e.valueOf():fe(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),O.updateOffset(n,!1),n):fe(e).local()}function cr(e){return-Math.round(e._d.getTimezoneOffset())}O.updateOffset=function(){};function of(e,t,n){var s=this._offset||0,r;if(!this.isValid())return e!=null?this:NaN;if(e!=null){if(typeof e==\"string\"){if(e=Ar(Es,e),e===null)return this}else Math.abs(e)<16&&!n&&(e=e*60);return!this._isUTC&&t&&(r=cr(this)),this._offset=e,this._isUTC=!0,r!=null&&this.add(r,\"m\"),s!==e&&(!t||this._changeInProgress?ra(this,ut(e-s,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,O.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?s:cr(this)}function af(e,t){return e!=null?(typeof e!=\"string\"&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function lf(e){return this.utcOffset(0,e)}function uf(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(cr(this),\"m\")),this}function df(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var e=Ar(Od,this._i);e!=null?this.utcOffset(e):this.utcOffset(0,!0)}return this}function cf(e){return this.isValid()?(e=e?fe(e).utcOffset():0,(this.utcOffset()-e)%60===0):!1}function ff(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function hf(){if(!Ue(this._isDSTShifted))return this._isDSTShifted;var e={},t;return pr(e,this),e=Ko(e),e._a?(t=e._isUTC?bt(e._a):fe(e._a),this._isDSTShifted=this.isValid()&&sf(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function mf(){return this.isValid()?!this._isUTC:!1}function gf(){return this.isValid()?this._isUTC:!1}function na(){return this.isValid()?this._isUTC&&this._offset===0:!1}var _f=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,wf=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function ut(e,t){var n=e,s=null,r,i,o;return ws(e)?n={ms:e._milliseconds,d:e._days,M:e._months}:Et(e)||!isNaN(+e)?(n={},t?n[t]=+e:n.milliseconds=+e):(s=_f.exec(e))?(r=s[1]===\"-\"?-1:1,n={y:0,d:Q(s[kt])*r,h:Q(s[Re])*r,m:Q(s[ot])*r,s:Q(s[Ct])*r,ms:Q(dr(s[ln]*1e3))*r}):(s=wf.exec(e))?(r=s[1]===\"-\"?-1:1,n={y:on(s[2],r),M:on(s[3],r),w:on(s[4],r),d:on(s[5],r),h:on(s[6],r),m:on(s[7],r),s:on(s[8],r)}):n==null?n={}:typeof n==\"object\"&&(\"from\"in n||\"to\"in n)&&(o=yf(fe(n.from),fe(n.to)),n={},n.ms=o.milliseconds,n.M=o.months),i=new Ls(n),ws(e)&&se(e,\"_locale\")&&(i._locale=e._locale),ws(e)&&se(e,\"_isValid\")&&(i._isValid=e._isValid),i}ut.fn=Ls.prototype;ut.invalid=nf;function on(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function fo(e,t){var n={};return n.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function yf(e,t){var n;return e.isValid()&&t.isValid()?(t=Fr(t,e),e.isBefore(t)?n=fo(e,t):(n=fo(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function sa(e,t){return function(n,s){var r,i;return s!==null&&!isNaN(+s)&&(Wo(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),i=n,n=s,s=i),r=ut(n,s),ra(this,r,e),this}}function ra(e,t,n,s){var r=t._milliseconds,i=dr(t._days),o=dr(t._months);e.isValid()&&(s=s??!0,o&&Vo(e,Un(e,\"Month\")+o*n),i&&Fo(e,\"Date\",Un(e,\"Date\")+i*n),r&&e._d.setTime(e._d.valueOf()+r*n),s&&O.updateOffset(e,i||o))}var kf=sa(1,\"add\"),vf=sa(-1,\"subtract\");function ia(e){return typeof e==\"string\"||e instanceof String}function bf(e){return lt(e)||jn(e)||ia(e)||Et(e)||pf(e)||Df(e)||e===null||e===void 0}function Df(e){var t=un(e)&&!br(e),n=!1,s=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],r,i,o=s.length;for(r=0;r<o;r+=1)i=s[r],n=n||se(e,i);return t&&n}function pf(e){var t=at(e),n=!1;return t&&(n=e.filter(function(s){return!Et(s)&&ia(e)}).length===0),t&&n}function Sf(e){var t=un(e)&&!br(e),n=!1,s=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],r,i;for(r=0;r<s.length;r+=1)i=s[r],n=n||se(e,i);return t&&n}function Mf(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"}function Tf(e,t){arguments.length===1&&(arguments[0]?bf(arguments[0])?(e=arguments[0],t=void 0):Sf(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||fe(),s=Fr(n,this).startOf(\"day\"),r=O.calendarFormat(this,s)||\"sameElse\",i=t&&(Dt(t[r])?t[r].call(this,n):t[r]);return this.format(i||this.localeData().calendar(r,this,fe(n)))}function Yf(){return new qn(this)}function Of(e,t){var n=lt(e)?e:fe(e);return this.isValid()&&n.isValid()?(t=it(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf()):!1}function Cf(e,t){var n=lt(e)?e:fe(e);return this.isValid()&&n.isValid()?(t=it(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf()):!1}function Rf(e,t,n,s){var r=lt(e)?e:fe(e),i=lt(t)?t:fe(t);return this.isValid()&&r.isValid()&&i.isValid()?(s=s||\"()\",(s[0]===\"(\"?this.isAfter(r,n):!this.isBefore(r,n))&&(s[1]===\")\"?this.isBefore(i,n):!this.isAfter(i,n))):!1}function Pf(e,t){var n=lt(e)?e:fe(e),s;return this.isValid()&&n.isValid()?(t=it(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()===n.valueOf():(s=n.valueOf(),this.clone().startOf(t).valueOf()<=s&&s<=this.clone().endOf(t).valueOf())):!1}function Wf(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Ef(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Hf(e,t,n){var s,r,i;if(!this.isValid())return NaN;if(s=Fr(e,this),!s.isValid())return NaN;switch(r=(s.utcOffset()-this.utcOffset())*6e4,t=it(t),t){case\"year\":i=ys(this,s)/12;break;case\"month\":i=ys(this,s);break;case\"quarter\":i=ys(this,s)/3;break;case\"second\":i=(this-s)/1e3;break;case\"minute\":i=(this-s)/6e4;break;case\"hour\":i=(this-s)/36e5;break;case\"day\":i=(this-s-r)/864e5;break;case\"week\":i=(this-s-r)/6048e5;break;default:i=this-s}return n?i:tt(i)}function ys(e,t){if(e.date()<t.date())return-ys(t,e);var n=(t.year()-e.year())*12+(t.month()-e.month()),s=e.clone().add(n,\"months\"),r,i;return t-s<0?(r=e.clone().add(n-1,\"months\"),i=(t-s)/(s-r)):(r=e.clone().add(n+1,\"months\"),i=(t-s)/(r-s)),-(n+i)||0}O.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\";O.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function If(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function Lf(e){if(!this.isValid())return null;var t=e!==!0,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?_s(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):Dt(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",_s(n,\"Z\")):_s(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function Nf(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e=\"moment\",t=\"\",n,s,r,i;return this.isLocal()||(e=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",t=\"Z\"),n=\"[\"+e+'(\"]',s=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",r=\"-MM-DD[T]HH:mm:ss.SSS\",i=t+'[\")]',this.format(n+s+r+i)}function Af(e){e||(e=this.isUtc()?O.defaultFormatUtc:O.defaultFormat);var t=_s(this,e);return this.localeData().postformat(t)}function Ff(e,t){return this.isValid()&&(lt(e)&&e.isValid()||fe(e).isValid())?ut({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Uf(e){return this.from(fe(),e)}function zf(e,t){return this.isValid()&&(lt(e)&&e.isValid()||fe(e).isValid())?ut({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Vf(e){return this.to(fe(),e)}function oa(e){var t;return e===void 0?this._locale._abbr:(t=Ht(e),t!=null&&(this._locale=t),this)}var aa=rt(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return e===void 0?this.localeData():this.locale(e)});function la(){return this._locale}var Ms=1e3,vn=60*Ms,Ts=60*vn,ua=(365*400+97)*24*Ts;function bn(e,t){return(e%t+t)%t}function da(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-ua:new Date(e,t,n).valueOf()}function ca(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-ua:Date.UTC(e,t,n)}function Bf(e){var t,n;if(e=it(e),e===void 0||e===\"millisecond\"||!this.isValid())return this;switch(n=this._isUTC?ca:da,e){case\"year\":t=n(this.year(),0,1);break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=n(this.year(),this.month(),1);break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=bn(t+(this._isUTC?0:this.utcOffset()*vn),Ts);break;case\"minute\":t=this._d.valueOf(),t-=bn(t,vn);break;case\"second\":t=this._d.valueOf(),t-=bn(t,Ms);break}return this._d.setTime(t),O.updateOffset(this,!0),this}function Gf(e){var t,n;if(e=it(e),e===void 0||e===\"millisecond\"||!this.isValid())return this;switch(n=this._isUTC?ca:da,e){case\"year\":t=n(this.year()+1,0,1)-1;break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=n(this.year(),this.month()+1,1)-1;break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=Ts-bn(t+(this._isUTC?0:this.utcOffset()*vn),Ts)-1;break;case\"minute\":t=this._d.valueOf(),t+=vn-bn(t,vn)-1;break;case\"second\":t=this._d.valueOf(),t+=Ms-bn(t,Ms)-1;break}return this._d.setTime(t),O.updateOffset(this,!0),this}function xf(){return this._d.valueOf()-(this._offset||0)*6e4}function jf(){return Math.floor(this.valueOf()/1e3)}function qf(){return new Date(this.valueOf())}function Zf(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Xf(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Qf(){return this.isValid()?this.toISOString():null}function Jf(){return Dr(this)}function Kf(){return Bt({},x(this))}function $f(){return x(this).overflow}function eh(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}E(\"N\",0,0,\"eraAbbr\");E(\"NN\",0,0,\"eraAbbr\");E(\"NNN\",0,0,\"eraAbbr\");E(\"NNNN\",0,0,\"eraName\");E(\"NNNNN\",0,0,\"eraNarrow\");E(\"y\",[\"y\",1],\"yo\",\"eraYear\");E(\"y\",[\"yy\",2],0,\"eraYear\");E(\"y\",[\"yyy\",3],0,\"eraYear\");E(\"y\",[\"yyyy\",4],0,\"eraYear\");P(\"N\",Ur);P(\"NN\",Ur);P(\"NNN\",Ur);P(\"NNNN\",ch);P(\"NNNNN\",fh);ae([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(e,t,n,s){var r=n._locale.erasParse(e,s,n._strict);r?x(n).era=r:x(n).invalidEra=e});P(\"y\",Dn);P(\"yy\",Dn);P(\"yyy\",Dn);P(\"yyyy\",Dn);P(\"yo\",hh);ae([\"y\",\"yy\",\"yyy\",\"yyyy\"],Ne);ae([\"yo\"],function(e,t,n,s){var r;n._locale._eraYearOrdinalRegex&&(r=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Ne]=n._locale.eraYearOrdinalParse(e,r):t[Ne]=parseInt(e,10)});function th(e,t){var n,s,r,i=this._eras||Ht(\"en\")._eras;for(n=0,s=i.length;n<s;++n){switch(typeof i[n].since){case\"string\":r=O(i[n].since).startOf(\"day\"),i[n].since=r.valueOf();break}switch(typeof i[n].until){case\"undefined\":i[n].until=1/0;break;case\"string\":r=O(i[n].until).startOf(\"day\").valueOf(),i[n].until=r.valueOf();break}}return i}function nh(e,t,n){var s,r,i=this.eras(),o,a,l;for(e=e.toUpperCase(),s=0,r=i.length;s<r;++s)if(o=i[s].name.toUpperCase(),a=i[s].abbr.toUpperCase(),l=i[s].narrow.toUpperCase(),n)switch(t){case\"N\":case\"NN\":case\"NNN\":if(a===e)return i[s];break;case\"NNNN\":if(o===e)return i[s];break;case\"NNNNN\":if(l===e)return i[s];break}else if([o,a,l].indexOf(e)>=0)return i[s]}function sh(e,t){var n=e.since<=e.until?1:-1;return t===void 0?O(e.since).year():O(e.since).year()+(t-e.offset)*n}function rh(){var e,t,n,s=this.localeData().eras();for(e=0,t=s.length;e<t;++e)if(n=this.clone().startOf(\"day\").valueOf(),s[e].since<=n&&n<=s[e].until||s[e].until<=n&&n<=s[e].since)return s[e].name;return\"\"}function ih(){var e,t,n,s=this.localeData().eras();for(e=0,t=s.length;e<t;++e)if(n=this.clone().startOf(\"day\").valueOf(),s[e].since<=n&&n<=s[e].until||s[e].until<=n&&n<=s[e].since)return s[e].narrow;return\"\"}function oh(){var e,t,n,s=this.localeData().eras();for(e=0,t=s.length;e<t;++e)if(n=this.clone().startOf(\"day\").valueOf(),s[e].since<=n&&n<=s[e].until||s[e].until<=n&&n<=s[e].since)return s[e].abbr;return\"\"}function ah(){var e,t,n,s,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e)if(n=r[e].since<=r[e].until?1:-1,s=this.clone().startOf(\"day\").valueOf(),r[e].since<=s&&s<=r[e].until||r[e].until<=s&&s<=r[e].since)return(this.year()-O(r[e].since).year())*n+r[e].offset;return this.year()}function lh(e){return se(this,\"_erasNameRegex\")||zr.call(this),e?this._erasNameRegex:this._erasRegex}function uh(e){return se(this,\"_erasAbbrRegex\")||zr.call(this),e?this._erasAbbrRegex:this._erasRegex}function dh(e){return se(this,\"_erasNarrowRegex\")||zr.call(this),e?this._erasNarrowRegex:this._erasRegex}function Ur(e,t){return t.erasAbbrRegex(e)}function ch(e,t){return t.erasNameRegex(e)}function fh(e,t){return t.erasNarrowRegex(e)}function hh(e,t){return t._eraYearOrdinalRegex||Dn}function zr(){var e=[],t=[],n=[],s=[],r,i,o,a,l,u=this.eras();for(r=0,i=u.length;r<i;++r)o=Rt(u[r].name),a=Rt(u[r].abbr),l=Rt(u[r].narrow),t.push(o),e.push(a),n.push(l),s.push(o),s.push(a),s.push(l);this._erasRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+e.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\")}E(0,[\"gg\",2],0,function(){return this.weekYear()%100});E(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function Ns(e,t){E(0,[e,e.length],0,t)}Ns(\"gggg\",\"weekYear\");Ns(\"ggggg\",\"weekYear\");Ns(\"GGGG\",\"isoWeekYear\");Ns(\"GGGGG\",\"isoWeekYear\");P(\"G\",Ws);P(\"g\",Ws);P(\"GG\",he,Xe);P(\"gg\",he,Xe);P(\"GGGG\",Or,Yr);P(\"gggg\",Or,Yr);P(\"GGGGG\",Ps,Cs);P(\"ggggg\",Ps,Cs);Xn([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,n,s){t[s.substr(0,2)]=Q(e)});Xn([\"gg\",\"GG\"],function(e,t,n,s){t[s]=O.parseTwoDigitYear(e)});function mh(e){return fa.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function gh(e){return fa.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function _h(){return Pt(this.year(),1,4)}function wh(){return Pt(this.isoWeekYear(),1,4)}function yh(){var e=this.localeData()._week;return Pt(this.year(),e.dow,e.doy)}function kh(){var e=this.localeData()._week;return Pt(this.weekYear(),e.dow,e.doy)}function fa(e,t,n,s,r){var i;return e==null?Vn(this,s,r).year:(i=Pt(e,s,r),t>i&&(t=i),vh.call(this,e,t,n,s,r))}function vh(e,t,n,s,r){var i=xo(e,t,n,s,r),o=zn(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}E(\"Q\",0,\"Qo\",\"quarter\");P(\"Q\",Ho);ae(\"Q\",function(e,t){t[Ot]=(Q(e)-1)*3});function bh(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}E(\"D\",[\"DD\",2],\"Do\",\"date\");P(\"D\",he,pn);P(\"DD\",he,Xe);P(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});ae([\"D\",\"DD\"],kt);ae(\"Do\",function(e,t){t[kt]=Q(e.match(he)[0])});var ha=Sn(\"Date\",!0);E(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\");P(\"DDD\",Rs);P(\"DDDD\",Io);ae([\"DDD\",\"DDDD\"],function(e,t,n){n._dayOfYear=Q(e)});function Dh(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return e==null?t:this.add(e-t,\"d\")}E(\"m\",[\"mm\",2],0,\"minute\");P(\"m\",he,Cr);P(\"mm\",he,Xe);ae([\"m\",\"mm\"],ot);var ph=Sn(\"Minutes\",!1);E(\"s\",[\"ss\",2],0,\"second\");P(\"s\",he,Cr);P(\"ss\",he,Xe);ae([\"s\",\"ss\"],Ct);var Sh=Sn(\"Seconds\",!1);E(\"S\",0,0,function(){return~~(this.millisecond()/100)});E(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)});E(0,[\"SSS\",3],0,\"millisecond\");E(0,[\"SSSS\",4],0,function(){return this.millisecond()*10});E(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100});E(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3});E(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4});E(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5});E(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6});P(\"S\",Rs,Ho);P(\"SS\",Rs,Xe);P(\"SSS\",Rs,Io);var Gt,ma;for(Gt=\"SSSS\";Gt.length<=9;Gt+=\"S\")P(Gt,Dn);function Mh(e,t){t[ln]=Q((\"0.\"+e)*1e3)}for(Gt=\"S\";Gt.length<=9;Gt+=\"S\")ae(Gt,Mh);ma=Sn(\"Milliseconds\",!1);E(\"z\",0,0,\"zoneAbbr\");E(\"zz\",0,0,\"zoneName\");function Th(){return this._isUTC?\"UTC\":\"\"}function Yh(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var p=qn.prototype;p.add=kf;p.calendar=Tf;p.clone=Yf;p.diff=Hf;p.endOf=Gf;p.format=Af;p.from=Ff;p.fromNow=Uf;p.to=zf;p.toNow=Vf;p.get=Ld;p.invalidAt=$f;p.isAfter=Of;p.isBefore=Cf;p.isBetween=Rf;p.isSame=Pf;p.isSameOrAfter=Wf;p.isSameOrBefore=Ef;p.isValid=Jf;p.lang=aa;p.locale=oa;p.localeData=la;p.max=Qc;p.min=Xc;p.parsingFlags=Kf;p.set=Nd;p.startOf=Bf;p.subtract=vf;p.toArray=Zf;p.toObject=Xf;p.toDate=qf;p.toISOString=Lf;p.inspect=Nf;typeof Symbol<\"u\"&&Symbol.for!=null&&(p[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"});p.toJSON=Qf;p.toString=If;p.unix=jf;p.valueOf=xf;p.creationData=eh;p.eraName=rh;p.eraNarrow=ih;p.eraAbbr=oh;p.eraYear=ah;p.year=Ao;p.isLeapYear=Id;p.weekYear=mh;p.isoWeekYear=gh;p.quarter=p.quarters=bh;p.month=Bo;p.daysInMonth=jd;p.week=p.weeks=ec;p.isoWeek=p.isoWeeks=tc;p.weeksInYear=yh;p.weeksInWeekYear=kh;p.isoWeeksInYear=_h;p.isoWeeksInISOWeekYear=wh;p.date=ha;p.day=p.days=mc;p.weekday=gc;p.isoWeekday=_c;p.dayOfYear=Dh;p.hour=p.hours=pc;p.minute=p.minutes=ph;p.second=p.seconds=Sh;p.millisecond=p.milliseconds=ma;p.utcOffset=of;p.utc=lf;p.local=uf;p.parseZone=df;p.hasAlignedHourOffset=cf;p.isDST=ff;p.isLocal=mf;p.isUtcOffset=gf;p.isUtc=na;p.isUTC=na;p.zoneAbbr=Th;p.zoneName=Yh;p.dates=rt(\"dates accessor is deprecated. Use date instead.\",ha);p.months=rt(\"months accessor is deprecated. Use month instead\",Bo);p.years=rt(\"years accessor is deprecated. Use year instead\",Ao);p.zone=rt(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",af);p.isDSTShifted=rt(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",hf);function Oh(e){return fe(e*1e3)}function Ch(){return fe.apply(null,arguments).parseZone()}function ga(e){return e}var re=Sr.prototype;re.calendar=hd;re.longDateFormat=wd;re.invalidDate=kd;re.ordinal=Dd;re.preparse=ga;re.postformat=ga;re.relativeTime=Sd;re.pastFuture=Md;re.set=cd;re.eras=th;re.erasParse=nh;re.erasConvertYear=sh;re.erasAbbrRegex=uh;re.erasNameRegex=lh;re.erasNarrowRegex=dh;re.months=Vd;re.monthsShort=Bd;re.monthsParse=xd;re.monthsRegex=Zd;re.monthsShortRegex=qd;re.week=Qd;re.firstDayOfYear=$d;re.firstDayOfWeek=Kd;re.weekdays=uc;re.weekdaysMin=cc;re.weekdaysShort=dc;re.weekdaysParse=hc;re.weekdaysRegex=wc;re.weekdaysShortRegex=yc;re.weekdaysMinRegex=kc;re.isPM=bc;re.meridiem=Sc;function Ys(e,t,n,s){var r=Ht(),i=bt().set(s,t);return r[n](i,e)}function _a(e,t,n){if(Et(e)&&(t=e,e=void 0),e=e||\"\",t!=null)return Ys(e,t,n,\"month\");var s,r=[];for(s=0;s<12;s++)r[s]=Ys(e,s,n,\"month\");return r}function Vr(e,t,n,s){typeof e==\"boolean\"?(Et(t)&&(n=t,t=void 0),t=t||\"\"):(t=e,n=t,e=!1,Et(t)&&(n=t,t=void 0),t=t||\"\");var r=Ht(),i=e?r._week.dow:0,o,a=[];if(n!=null)return Ys(t,(n+i)%7,s,\"day\");for(o=0;o<7;o++)a[o]=Ys(t,(o+i)%7,s,\"day\");return a}function Rh(e,t){return _a(e,t,\"months\")}function Ph(e,t){return _a(e,t,\"monthsShort\")}function Wh(e,t,n){return Vr(e,t,n,\"weekdays\")}function Eh(e,t,n){return Vr(e,t,n,\"weekdaysShort\")}function Hh(e,t,n){return Vr(e,t,n,\"weekdaysMin\")}jt(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=Q(e%100/10)===1?\"th\":t===1?\"st\":t===2?\"nd\":t===3?\"rd\":\"th\";return e+n}});O.lang=rt(\"moment.lang is deprecated. Use moment.locale instead.\",jt);O.langData=rt(\"moment.langData is deprecated. Use moment.localeData instead.\",Ht);var Tt=Math.abs;function Ih(){var e=this._data;return this._milliseconds=Tt(this._milliseconds),this._days=Tt(this._days),this._months=Tt(this._months),e.milliseconds=Tt(e.milliseconds),e.seconds=Tt(e.seconds),e.minutes=Tt(e.minutes),e.hours=Tt(e.hours),e.months=Tt(e.months),e.years=Tt(e.years),this}function wa(e,t,n,s){var r=ut(t,n);return e._milliseconds+=s*r._milliseconds,e._days+=s*r._days,e._months+=s*r._months,e._bubble()}function Lh(e,t){return wa(this,e,t,1)}function Nh(e,t){return wa(this,e,t,-1)}function ho(e){return e<0?Math.floor(e):Math.ceil(e)}function Ah(){var e=this._milliseconds,t=this._days,n=this._months,s=this._data,r,i,o,a,l;return e>=0&&t>=0&&n>=0||e<=0&&t<=0&&n<=0||(e+=ho(fr(n)+t)*864e5,t=0,n=0),s.milliseconds=e%1e3,r=tt(e/1e3),s.seconds=r%60,i=tt(r/60),s.minutes=i%60,o=tt(i/60),s.hours=o%24,t+=tt(o/24),l=tt(ya(t)),n+=l,t-=ho(fr(l)),a=tt(n/12),n%=12,s.days=t,s.months=n,s.years=a,this}function ya(e){return e*4800/146097}function fr(e){return e*146097/4800}function Fh(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if(e=it(e),e===\"month\"||e===\"quarter\"||e===\"year\")switch(t=this._days+s/864e5,n=this._months+ya(t),e){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(t=this._days+Math.round(fr(this._months)),e){case\"week\":return t/7+s/6048e5;case\"day\":return t+s/864e5;case\"hour\":return t*24+s/36e5;case\"minute\":return t*1440+s/6e4;case\"second\":return t*86400+s/1e3;case\"millisecond\":return Math.floor(t*864e5)+s;default:throw new Error(\"Unknown unit \"+e)}}function It(e){return function(){return this.as(e)}}var ka=It(\"ms\"),Uh=It(\"s\"),zh=It(\"m\"),Vh=It(\"h\"),Bh=It(\"d\"),Gh=It(\"w\"),xh=It(\"M\"),jh=It(\"Q\"),qh=It(\"y\"),Zh=ka;function Xh(){return ut(this)}function Qh(e){return e=it(e),this.isValid()?this[e+\"s\"]():NaN}function hn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Jh=hn(\"milliseconds\"),Kh=hn(\"seconds\"),$h=hn(\"minutes\"),em=hn(\"hours\"),tm=hn(\"days\"),nm=hn(\"months\"),sm=hn(\"years\");function rm(){return tt(this.days()/7)}var Yt=Math.round,yn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function im(e,t,n,s,r){return r.relativeTime(t||1,!!n,e,s)}function om(e,t,n,s){var r=ut(e).abs(),i=Yt(r.as(\"s\")),o=Yt(r.as(\"m\")),a=Yt(r.as(\"h\")),l=Yt(r.as(\"d\")),u=Yt(r.as(\"M\")),c=Yt(r.as(\"w\")),b=Yt(r.as(\"y\")),h=i<=n.ss&&[\"s\",i]||i<n.s&&[\"ss\",i]||o<=1&&[\"m\"]||o<n.m&&[\"mm\",o]||a<=1&&[\"h\"]||a<n.h&&[\"hh\",a]||l<=1&&[\"d\"]||l<n.d&&[\"dd\",l];return n.w!=null&&(h=h||c<=1&&[\"w\"]||c<n.w&&[\"ww\",c]),h=h||u<=1&&[\"M\"]||u<n.M&&[\"MM\",u]||b<=1&&[\"y\"]||[\"yy\",b],h[2]=t,h[3]=+e>0,h[4]=s,im.apply(null,h)}function am(e){return e===void 0?Yt:typeof e==\"function\"?(Yt=e,!0):!1}function lm(e,t){return yn[e]===void 0?!1:t===void 0?yn[e]:(yn[e]=t,e===\"s\"&&(yn.ss=t-1),!0)}function um(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,s=yn,r,i;return typeof e==\"object\"&&(t=e,e=!1),typeof e==\"boolean\"&&(n=e),typeof t==\"object\"&&(s=Object.assign({},yn,t),t.s!=null&&t.ss==null&&(s.ss=t.s-1)),r=this.localeData(),i=om(this,!n,s,r),n&&(i=r.pastFuture(+this,i)),r.postformat(i)}var rr=Math.abs;function gn(e){return(e>0)-(e<0)||+e}function As(){if(!this.isValid())return this.localeData().invalidDate();var e=rr(this._milliseconds)/1e3,t=rr(this._days),n=rr(this._months),s,r,i,o,a=this.asSeconds(),l,u,c,b;return a?(s=tt(e/60),r=tt(s/60),e%=60,s%=60,i=tt(n/12),n%=12,o=e?e.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",l=a<0?\"-\":\"\",u=gn(this._months)!==gn(a)?\"-\":\"\",c=gn(this._days)!==gn(a)?\"-\":\"\",b=gn(this._milliseconds)!==gn(a)?\"-\":\"\",l+\"P\"+(i?u+i+\"Y\":\"\")+(n?u+n+\"M\":\"\")+(t?c+t+\"D\":\"\")+(r||s||e?\"T\":\"\")+(r?b+r+\"H\":\"\")+(s?b+s+\"M\":\"\")+(e?b+o+\"S\":\"\")):\"P0D\"}var ee=Ls.prototype;ee.isValid=tf;ee.abs=Ih;ee.add=Lh;ee.subtract=Nh;ee.as=Fh;ee.asMilliseconds=ka;ee.asSeconds=Uh;ee.asMinutes=zh;ee.asHours=Vh;ee.asDays=Bh;ee.asWeeks=Gh;ee.asMonths=xh;ee.asQuarters=jh;ee.asYears=qh;ee.valueOf=Zh;ee._bubble=Ah;ee.clone=Xh;ee.get=Qh;ee.milliseconds=Jh;ee.seconds=Kh;ee.minutes=$h;ee.hours=em;ee.days=tm;ee.weeks=rm;ee.months=nm;ee.years=sm;ee.humanize=um;ee.toISOString=As;ee.toString=As;ee.toJSON=As;ee.locale=oa;ee.localeData=la;ee.toIsoString=rt(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",As);ee.lang=aa;E(\"X\",0,0,\"unix\");E(\"x\",0,0,\"valueOf\");P(\"x\",Ws);P(\"X\",Cd);ae(\"X\",function(e,t,n){n._d=new Date(parseFloat(e)*1e3)});ae(\"x\",function(e,t,n){n._d=new Date(Q(e))});//! moment.js\nO.version=\"2.30.1\";ud(fe);O.fn=p;O.min=Jc;O.max=Kc;O.now=$c;O.utc=bt;O.unix=Oh;O.months=Rh;O.isDate=jn;O.locale=jt;O.invalid=Os;O.duration=ut;O.isMoment=lt;O.weekdays=Wh;O.parseZone=Ch;O.localeData=Ht;O.isDuration=ws;O.monthsShort=Ph;O.weekdaysMin=Hh;O.defineLocale=Hr;O.updateLocale=Oc;O.locales=Cc;O.weekdaysShort=Eh;O.normalizeUnits=it;O.relativeTimeRounding=am;O.relativeTimeThreshold=lm;O.calendarFormat=Mf;O.prototype=p;O.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"};function mo(e){return O(e,\"HH:mm\")}function km(e,t){return O(e).format(t)}const vm={dateAdapter:new ad(O),rows:[],tasks:[],headers:[{unit:\"day\",format:\"MMMM Do\"},{unit:\"hour\",format:\"H:mm\"}],fitWidth:!0,minWidth:400,from:mo(\"06:00\"),to:mo(\"14:00\"),tableHeaders:[{title:\"Label\",property:\"label\",width:140,type:\"tree\"}],tableWidth:180,ganttTableModules:[od]};export{ad as M,ym as S,od as a,wn as b,vm as d,km as f,dl as g,O as h,Ks as i,mo as t,vo as u};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/layout.zjTtpqzV.js",
    "content": "import{s as l,q as i,v as r,w as u,x as f}from\"./scheduler.lruobs1Y.js\";import{S as _,i as c,a as p,t as m}from\"./index.DyGm78TJ.js\";import\"./paths.oQcPQ3IF.js\";function $(a){let s;const n=a[1].default,e=i(n,a,a[0],null);return{c(){e&&e.c()},l(t){e&&e.l(t)},m(t,o){e&&e.m(t,o),s=!0},p(t,[o]){e&&e.p&&(!s||o&1)&&r(e,n,t,t[0],s?f(n,t[0],o,null):u(t[0]),null)},i(t){s||(p(e,t),s=!0)},o(t){m(e,t),s=!1},d(t){e&&e.d(t)}}}function d(a,s,n){let{$$slots:e={},$$scope:t}=s;return a.$$set=o=>{\"$$scope\"in o&&n(0,t=o.$$scope)},[t,e]}class v extends _{constructor(s){super(),c(this,s,d,$,l,{})}}export{v as L};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/paths.oQcPQ3IF.js",
    "content": "var s;const e=((s=globalThis.__sveltekit_btsuk1)==null?void 0:s.base)??\"/svelte-gantt\";var t;const a=((t=globalThis.__sveltekit_btsuk1)==null?void 0:t.assets)??e;export{a,e as b};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/scheduler.lruobs1Y.js",
    "content": "var G=Object.defineProperty;var I=(t,e,n)=>e in t?G(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var f=(t,e,n)=>(I(t,typeof e!=\"symbol\"?e+\"\":e,n),n);function j(){}function R(t,e){for(const n in e)t[n]=e[n];return t}function F(t){return t()}function dt(){return Object.create(null)}function U(t){t.forEach(F)}function J(t){return typeof t==\"function\"}function ht(t,e){return t!=t?e==e:t!==e||t&&typeof t==\"object\"||typeof t==\"function\"}let p;function mt(t,e){return t===e?!0:(p||(p=document.createElement(\"a\")),p.href=e,t===p.href)}function pt(t){return Object.keys(t).length===0}function K(t,...e){if(t==null){for(const i of e)i(void 0);return j}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function yt(t,e,n){t.$$.on_destroy.push(K(e,n))}function bt(t,e,n,i){if(t){const s=P(t,e,n,i);return t[0](s)}}function P(t,e,n,i){return t[1]&&i?R(n.ctx.slice(),t[1](i(e))):n.ctx}function gt(t,e,n,i){if(t[2]&&i){const s=t[2](i(n));if(e.dirty===void 0)return s;if(typeof s==\"object\"){const c=[],r=Math.max(e.dirty.length,s.length);for(let l=0;l<r;l+=1)c[l]=e.dirty[l]|s[l];return c}return e.dirty|s}return e.dirty}function xt(t,e,n,i,s,c){if(s){const r=P(e,n,i,c);t.p(r,s)}}function wt(t){if(t.ctx.length>32){const e=[],n=t.ctx.length/32;for(let i=0;i<n;i++)e[i]=-1;return e}return-1}function Et(t){const e={};for(const n in t)n[0]!==\"$\"&&(e[n]=t[n]);return e}function vt(t,e){const n={};e=new Set(e);for(const i in t)!e.has(i)&&i[0]!==\"$\"&&(n[i]=t[i]);return n}function Tt(t){return t??\"\"}function At(t,e,n){return t.set(n),e}function Nt(t){return t&&J(t.destroy)?t.destroy:j}let x=!1;function kt(){x=!0}function Ct(){x=!1}function Q(t,e,n,i){for(;t<e;){const s=t+(e-t>>1);n(s)<=i?t=s+1:e=s}return t}function V(t){if(t.hydrate_init)return;t.hydrate_init=!0;let e=t.childNodes;if(t.nodeName===\"HEAD\"){const o=[];for(let a=0;a<e.length;a++){const u=e[a];u.claim_order!==void 0&&o.push(u)}e=o}const n=new Int32Array(e.length+1),i=new Int32Array(e.length);n[0]=-1;let s=0;for(let o=0;o<e.length;o++){const a=e[o].claim_order,u=(s>0&&e[n[s]].claim_order<=a?s+1:Q(1,s,W=>e[n[W]].claim_order,a))-1;i[o]=n[u]+1;const C=u+1;n[C]=o,s=Math.max(C,s)}const c=[],r=[];let l=e.length-1;for(let o=n[s]+1;o!=0;o=i[o-1]){for(c.push(e[o-1]);l>=o;l--)r.push(e[l]);l--}for(;l>=0;l--)r.push(e[l]);c.reverse(),r.sort((o,a)=>o.claim_order-a.claim_order);for(let o=0,a=0;o<r.length;o++){for(;a<c.length&&r[o].claim_order>=c[a].claim_order;)a++;const u=a<c.length?c[a]:null;t.insertBefore(r[o],u)}}function X(t,e){t.appendChild(e)}function Y(t,e){if(x){for(V(t),(t.actual_end_child===void 0||t.actual_end_child!==null&&t.actual_end_child.parentNode!==t)&&(t.actual_end_child=t.firstChild);t.actual_end_child!==null&&t.actual_end_child.claim_order===void 0;)t.actual_end_child=t.actual_end_child.nextSibling;e!==t.actual_end_child?(e.claim_order!==void 0||e.parentNode!==t)&&t.insertBefore(e,t.actual_end_child):t.actual_end_child=e.nextSibling}else(e.parentNode!==t||e.nextSibling!==null)&&t.appendChild(e)}function Z(t,e,n){t.insertBefore(e,n||null)}function $(t,e,n){x&&!n?Y(t,e):(e.parentNode!==t||e.nextSibling!=n)&&t.insertBefore(e,n||null)}function b(t){t.parentNode&&t.parentNode.removeChild(t)}function Ht(t,e){for(let n=0;n<t.length;n+=1)t[n]&&t[n].d(e)}function A(t){return document.createElement(t)}function D(t){return document.createElementNS(\"http://www.w3.org/2000/svg\",t)}function N(t){return document.createTextNode(t)}function Lt(){return N(\" \")}function Mt(){return N(\"\")}function H(t,e,n,i){return t.addEventListener(e,n,i),()=>t.removeEventListener(e,n,i)}function St(t){return function(e){return e.stopPropagation(),t.call(this,e)}}function k(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}const tt=[\"width\",\"height\"];function et(t,e){const n=Object.getOwnPropertyDescriptors(t.__proto__);for(const i in e)e[i]==null?t.removeAttribute(i):i===\"style\"?t.style.cssText=e[i]:i===\"__value\"?t.value=t[i]=e[i]:n[i]&&n[i].set&&tt.indexOf(i)===-1?t[i]=e[i]:k(t,i,e[i])}function jt(t,e){for(const n in e)k(t,n,e[n])}function nt(t,e){Object.keys(e).forEach(n=>{it(t,n,e[n])})}function it(t,e,n){const i=e.toLowerCase();i in t?t[i]=typeof t[i]==\"boolean\"&&n===\"\"?!0:n:e in t?t[e]=typeof t[e]==\"boolean\"&&n===\"\"?!0:n:k(t,e,n)}function Pt(t){return/-/.test(t)?nt:et}function Dt(t){return t.dataset.svelteH}function Ot(t){let e;return{p(...n){e=n,e.forEach(i=>t.push(i))},r(){e.forEach(n=>t.splice(t.indexOf(n),1))}}}function zt(t){return Array.from(t.childNodes)}function O(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function z(t,e,n,i,s=!1){O(t);const c=(()=>{for(let r=t.claim_info.last_index;r<t.length;r++){const l=t[r];if(e(l)){const o=n(l);return o===void 0?t.splice(r,1):t[r]=o,s||(t.claim_info.last_index=r),l}}for(let r=t.claim_info.last_index-1;r>=0;r--){const l=t[r];if(e(l)){const o=n(l);return o===void 0?t.splice(r,1):t[r]=o,s?o===void 0&&t.claim_info.last_index--:t.claim_info.last_index=r,l}}return i()})();return c.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,c}function q(t,e,n,i){return z(t,s=>s.nodeName===e,s=>{const c=[];for(let r=0;r<s.attributes.length;r++){const l=s.attributes[r];n[l.name]||c.push(l.name)}c.forEach(r=>s.removeAttribute(r))},()=>i(e))}function qt(t,e,n){return q(t,e,n,A)}function Bt(t,e,n){return q(t,e,n,D)}function st(t,e){return z(t,n=>n.nodeType===3,n=>{const i=\"\"+e;if(n.data.startsWith(i)){if(n.data.length!==i.length)return n.splitText(i.length)}else n.data=i},()=>N(e),!0)}function Wt(t){return st(t,\" \")}function L(t,e,n){for(let i=n;i<t.length;i+=1){const s=t[i];if(s.nodeType===8&&s.textContent.trim()===e)return i}return-1}function Gt(t,e){const n=L(t,\"HTML_TAG_START\",0),i=L(t,\"HTML_TAG_END\",n+1);if(n===-1||i===-1)return new w(e);O(t);const s=t.splice(n,i-n+1);b(s[0]),b(s[s.length-1]);const c=s.slice(1,s.length-1);if(c.length===0)return new w(e);for(const r of c)r.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1;return new w(e,c)}function It(t,e){e=\"\"+e,t.data!==e&&(t.data=e)}function Rt(t,e){t.value=e??\"\"}function Ft(t,e,n,i){n==null?t.style.removeProperty(e):t.style.setProperty(e,n,\"\")}let y;function rt(){if(y===void 0){y=!1;try{typeof window<\"u\"&&window.parent&&window.parent.document}catch{y=!0}}return y}function Ut(t,e){getComputedStyle(t).position===\"static\"&&(t.style.position=\"relative\");const i=A(\"iframe\");i.setAttribute(\"style\",\"display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;\"),i.setAttribute(\"aria-hidden\",\"true\"),i.tabIndex=-1;const s=rt();let c;return s?(i.src=\"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}<\\/script>\",c=H(window,\"message\",r=>{r.source===i.contentWindow&&e()})):(i.src=\"about:blank\",i.onload=()=>{c=H(i.contentWindow,\"resize\",e),e()}),X(t,i),()=>{(s||c&&i.contentWindow)&&c(),b(i)}}function Jt(t,e,n){t.classList.toggle(e,!!n)}function ct(t,e,{bubbles:n=!1,cancelable:i=!1}={}){return new CustomEvent(t,{detail:e,bubbles:n,cancelable:i})}function Kt(t,e){const n=[];let i=0;for(const s of e.childNodes)if(s.nodeType===8){const c=s.textContent.trim();c===`HEAD_${t}_END`?(i-=1,n.push(s)):c===`HEAD_${t}_START`&&(i+=1,n.push(s))}else i>0&&n.push(s);return n}class ot{constructor(e=!1){f(this,\"is_svg\",!1);f(this,\"e\");f(this,\"n\");f(this,\"t\");f(this,\"a\");this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,n,i=null){this.e||(this.is_svg?this.e=D(n.nodeName):this.e=A(n.nodeType===11?\"TEMPLATE\":n.nodeName),this.t=n.tagName!==\"TEMPLATE\"?n:n.content,this.c(e)),this.i(i)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName===\"TEMPLATE\"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let n=0;n<this.n.length;n+=1)Z(this.t,this.n[n],e)}p(e){this.d(),this.h(e),this.i(this.a)}d(){this.n.forEach(b)}}class w extends ot{constructor(n=!1,i){super(n);f(this,\"l\");this.e=this.n=null,this.l=i}c(n){this.l?this.n=this.l:super.c(n)}i(n){for(let i=0;i<this.n.length;i+=1)$(this.t,this.n[i],n)}}function Qt(t,e){return new t(e)}let g;function E(t){g=t}function h(){if(!g)throw new Error(\"Function called outside component initialization\");return g}function Vt(t){h().$$.on_mount.push(t)}function Xt(t){h().$$.after_update.push(t)}function Yt(t){h().$$.on_destroy.push(t)}function Zt(){const t=h();return(e,n,{cancelable:i=!1}={})=>{const s=t.$$.callbacks[e];if(s){const c=ct(e,n,{cancelable:i});return s.slice().forEach(r=>{r.call(t,c)}),!c.defaultPrevented}return!0}}function $t(t,e){return h().$$.context.set(t,e),e}function te(t){return h().$$.context.get(t)}function ee(t,e){const n=t.$$.callbacks[e.type];n&&n.slice().forEach(i=>i.call(this,e))}const m=[],M=[];let d=[];const S=[],B=Promise.resolve();let T=!1;function lt(){T||(T=!0,B.then(ut))}function ne(){return lt(),B}function at(t){d.push(t)}const v=new Set;let _=0;function ut(){if(_!==0)return;const t=g;do{try{for(;_<m.length;){const e=m[_];_++,E(e),ft(e.$$)}}catch(e){throw m.length=0,_=0,e}for(E(null),m.length=0,_=0;M.length;)M.pop()();for(let e=0;e<d.length;e+=1){const n=d[e];v.has(n)||(v.add(n),n())}d.length=0}while(m.length);for(;S.length;)S.pop()();T=!1,v.clear(),E(t)}function ft(t){if(t.fragment!==null){t.update(),U(t.before_update);const e=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,e),t.after_update.forEach(at)}}function ie(t){const e=[],n=[];d.forEach(i=>t.indexOf(i)===-1?e.push(i):n.push(i)),n.forEach(i=>i()),d=e}export{Zt as $,U as A,Vt as B,M as C,Ht as D,Ot as E,Rt as F,H as G,w as H,Xt as I,Ft as J,Qt as K,ne as L,dt as M,ut as N,J as O,pt as P,at as Q,ie as R,g as S,E as T,F as U,m as V,lt as W,kt as X,Ct as Y,D as Z,Bt as _,Lt as a,At as a0,te as a1,Yt as a2,Pt as a3,jt as a4,Kt as a5,Jt as a6,Nt as a7,ee as a8,$t as a9,Ut as aa,St as ab,Tt as ac,mt as ad,K as ae,zt as b,qt as c,st as d,A as e,b as f,Wt as g,Y as h,$ as i,It as j,yt as k,Mt as l,vt as m,j as n,R as o,Et as p,bt as q,k as r,ht as s,N as t,et as u,xt as v,wt as w,gt as x,Dt as y,Gt as z};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/spread.CgU5AtxT.js",
    "content": "function r(t,s){const c={},u={},f={$$scope:1};let i=t.length;for(;i--;){const o=t[i],e=s[i];if(e){for(const n in o)n in e||(u[n]=1);for(const n in e)f[n]||(c[n]=e[n],f[n]=1);t[i]=e}else for(const n in o)f[n]=1}for(const o in u)o in c||(c[o]=void 0);return c}function a(t){return typeof t==\"object\"&&t!==null?t:{}}export{a,r as g};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/store.CCmTIowZ.js",
    "content": "import{d as o,w as n}from\"./entry.0-2BfHub.js\";import{p as d}from\"./stores.BxMDhJ8m.js\";const p=n(!1);let l=[{title:\"Getting started\",pages:[{href:\"/docs/getting-started/installation\",label:\"Installation\"},{href:\"/docs/getting-started/migrating\",label:\"Migrating\"}]},{title:\"Data\",pages:[{href:\"/docs/data/rows\",label:\"Rows\"},{href:\"/docs/data/tasks\",label:\"Tasks\"},{href:\"/docs/data/time-ranges\",label:\"Time ranges\"}]},{title:\"Options\",pages:[{href:\"/docs/options/gantt\",label:\"Gantt\"},{href:\"/docs/options/columns\",label:\"Columns\"},{href:\"/docs/options/headers\",label:\"Headers\"},{href:\"/docs/options/zoom\",label:\"Zoom\"},{href:\"/docs/options/layout\",label:\"Layout\"}]},{title:\"Modules\",pages:[{href:\"/docs/modules/dependencies\",label:\"Dependencies\"},{href:\"/docs/modules/table\",label:\"Table\"},{href:\"/docs/modules/external\",label:\"External\"},{href:\"/docs/modules/create-tasks\",label:\"Create tasks\"}]}];const r=o([d],([e])=>{for(const a of l)for(const s of a.pages)if(e.url.pathname.includes(s.href))return{category:a,page:s};return{}}),t=l.flatMap(e=>e.pages),c=o([r],([e])=>{if(!e.page)return null;const a=t.findIndex(s=>s.href==e.page.href);return t[a-1]}),g=o([r],([e])=>{if(!e.page)return null;const a=t.findIndex(s=>s.href==e.page.href);return t[a+1]});export{c as a,p as i,r as m,g as n,l as p};\n"
  },
  {
    "path": "docs/_app/immutable/chunks/stores.BxMDhJ8m.js",
    "content": "import{s as e}from\"./entry.0-2BfHub.js\";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};\n"
  },
  {
    "path": "docs/_app/immutable/entry/app.2rUmdrbe.js",
    "content": "const __vite__fileDeps=[\"../nodes/0.ZnGYbIXJ.js\",\"../chunks/scheduler.lruobs1Y.js\",\"../chunks/index.DyGm78TJ.js\",\"../chunks/Button.De7jzsKF.js\",\"../chunks/spread.CgU5AtxT.js\",\"../chunks/paths.oQcPQ3IF.js\",\"../chunks/store.CCmTIowZ.js\",\"../chunks/entry.0-2BfHub.js\",\"../chunks/control.CYgJF_JY.js\",\"../chunks/stores.BxMDhJ8m.js\",\"../assets/0.D0MXDcq-.css\",\"../nodes/1.MAtuXuJq.js\",\"../nodes/2.Dl5Bf6FQ.js\",\"../chunks/each.DqwAsWNO.js\",\"../nodes/3.CShdKmkC.js\",\"../chunks/index.Up5bhyj0.js\",\"../assets/index.DV1K06M3.css\",\"../assets/3.D4zGWEJI.css\",\"../nodes/4.C_seFb3q.js\",\"../nodes/5.BYIMj9Cv.js\",\"../chunks/layout.zjTtpqzV.js\",\"../assets/5.HrAC0il4.css\",\"../nodes/6.BjLYl_tC.js\",\"../chunks/A.201zTarD.js\",\"../assets/6.DZf7PkB2.css\",\"../nodes/7.DFYbvg6E.js\",\"../assets/7.zCu19reB.css\",\"../nodes/8.B7pihDEp.js\",\"../nodes/9.D5dLAYhx.js\",\"../nodes/10.BWBmmkzh.js\",\"../nodes/11.BcS0vyVB.js\",\"../nodes/12.BW2Gnzwn.js\",\"../nodes/13.Dz4XkGv4.js\",\"../nodes/14.CPQ9PDjB.js\",\"../nodes/15.BOQPdaD3.js\",\"../nodes/16.BJYGNx6n.js\",\"../nodes/17.Bo0pwz4z.js\",\"../assets/17.CKKkePFl.css\",\"../nodes/18.E34B3Q4g.js\"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);\nimport{s as U,a as j,l as d,g as z,i as E,f as w,I as J,B as K,e as W,c as F,b as G,r as V,J as L,t as H,d as Q,j as X,C as O,K as b,L as Y}from\"../chunks/scheduler.lruobs1Y.js\";import{S as Z,i as M,t as h,c as A,a as g,g as I,b as k,d as T,m as v,e as R}from\"../chunks/index.DyGm78TJ.js\";const x=\"modulepreload\",ee=function(a,e){return new URL(a,e).href},y={},u=function(e,n,o){let r=Promise.resolve();if(n&&n.length>0){const c=document.getElementsByTagName(\"link\"),t=document.querySelector(\"meta[property=csp-nonce]\"),s=(t==null?void 0:t.nonce)||(t==null?void 0:t.getAttribute(\"nonce\"));r=Promise.all(n.map(i=>{if(i=ee(i,o),i in y)return;y[i]=!0;const f=i.endsWith(\".css\"),l=f?'[rel=\"stylesheet\"]':\"\";if(!!o)for(let P=c.length-1;P>=0;P--){const D=c[P];if(D.href===i&&(!f||D.rel===\"stylesheet\"))return}else if(document.querySelector(`link[href=\"${i}\"]${l}`))return;const m=document.createElement(\"link\");if(m.rel=f?\"stylesheet\":x,f||(m.as=\"script\",m.crossOrigin=\"\"),m.href=i,s&&m.setAttribute(\"nonce\",s),document.head.appendChild(m),f)return new Promise((P,D)=>{m.addEventListener(\"load\",P),m.addEventListener(\"error\",()=>D(new Error(`Unable to preload CSS for ${i}`)))})}))}return r.then(()=>e()).catch(c=>{const t=new Event(\"vite:preloadError\",{cancelable:!0});if(t.payload=c,window.dispatchEvent(t),!t.defaultPrevented)throw c})},ce={};function te(a){let e,n,o;var r=a[1][0];function c(t,s){return{props:{data:t[3],form:t[2]}}}return r&&(e=b(r,c(a)),a[15](e)),{c(){e&&k(e.$$.fragment),n=d()},l(t){e&&T(e.$$.fragment,t),n=d()},m(t,s){e&&v(e,t,s),E(t,n,s),o=!0},p(t,s){if(s&2&&r!==(r=t[1][0])){if(e){I();const i=e;h(i.$$.fragment,1,0,()=>{R(i,1)}),A()}r?(e=b(r,c(t)),t[15](e),k(e.$$.fragment),g(e.$$.fragment,1),v(e,n.parentNode,n)):e=null}else if(r){const i={};s&8&&(i.data=t[3]),s&4&&(i.form=t[2]),e.$set(i)}},i(t){o||(e&&g(e.$$.fragment,t),o=!0)},o(t){e&&h(e.$$.fragment,t),o=!1},d(t){t&&w(n),a[15](null),e&&R(e,t)}}}function ne(a){let e,n,o;var r=a[1][0];function c(t,s){return{props:{data:t[3],$$slots:{default:[se]},$$scope:{ctx:t}}}}return r&&(e=b(r,c(a)),a[14](e)),{c(){e&&k(e.$$.fragment),n=d()},l(t){e&&T(e.$$.fragment,t),n=d()},m(t,s){e&&v(e,t,s),E(t,n,s),o=!0},p(t,s){if(s&2&&r!==(r=t[1][0])){if(e){I();const i=e;h(i.$$.fragment,1,0,()=>{R(i,1)}),A()}r?(e=b(r,c(t)),t[14](e),k(e.$$.fragment),g(e.$$.fragment,1),v(e,n.parentNode,n)):e=null}else if(r){const i={};s&8&&(i.data=t[3]),s&65591&&(i.$$scope={dirty:s,ctx:t}),e.$set(i)}},i(t){o||(e&&g(e.$$.fragment,t),o=!0)},o(t){e&&h(e.$$.fragment,t),o=!1},d(t){t&&w(n),a[14](null),e&&R(e,t)}}}function ie(a){let e,n,o;var r=a[1][1];function c(t,s){return{props:{data:t[4],form:t[2]}}}return r&&(e=b(r,c(a)),a[13](e)),{c(){e&&k(e.$$.fragment),n=d()},l(t){e&&T(e.$$.fragment,t),n=d()},m(t,s){e&&v(e,t,s),E(t,n,s),o=!0},p(t,s){if(s&2&&r!==(r=t[1][1])){if(e){I();const i=e;h(i.$$.fragment,1,0,()=>{R(i,1)}),A()}r?(e=b(r,c(t)),t[13](e),k(e.$$.fragment),g(e.$$.fragment,1),v(e,n.parentNode,n)):e=null}else if(r){const i={};s&16&&(i.data=t[4]),s&4&&(i.form=t[2]),e.$set(i)}},i(t){o||(e&&g(e.$$.fragment,t),o=!0)},o(t){e&&h(e.$$.fragment,t),o=!1},d(t){t&&w(n),a[13](null),e&&R(e,t)}}}function re(a){let e,n,o;var r=a[1][1];function c(t,s){return{props:{data:t[4],$$slots:{default:[oe]},$$scope:{ctx:t}}}}return r&&(e=b(r,c(a)),a[12](e)),{c(){e&&k(e.$$.fragment),n=d()},l(t){e&&T(e.$$.fragment,t),n=d()},m(t,s){e&&v(e,t,s),E(t,n,s),o=!0},p(t,s){if(s&2&&r!==(r=t[1][1])){if(e){I();const i=e;h(i.$$.fragment,1,0,()=>{R(i,1)}),A()}r?(e=b(r,c(t)),t[12](e),k(e.$$.fragment),g(e.$$.fragment,1),v(e,n.parentNode,n)):e=null}else if(r){const i={};s&16&&(i.data=t[4]),s&65575&&(i.$$scope={dirty:s,ctx:t}),e.$set(i)}},i(t){o||(e&&g(e.$$.fragment,t),o=!0)},o(t){e&&h(e.$$.fragment,t),o=!1},d(t){t&&w(n),a[12](null),e&&R(e,t)}}}function oe(a){let e,n,o;var r=a[1][2];function c(t,s){return{props:{data:t[5],form:t[2]}}}return r&&(e=b(r,c(a)),a[11](e)),{c(){e&&k(e.$$.fragment),n=d()},l(t){e&&T(e.$$.fragment,t),n=d()},m(t,s){e&&v(e,t,s),E(t,n,s),o=!0},p(t,s){if(s&2&&r!==(r=t[1][2])){if(e){I();const i=e;h(i.$$.fragment,1,0,()=>{R(i,1)}),A()}r?(e=b(r,c(t)),t[11](e),k(e.$$.fragment),g(e.$$.fragment,1),v(e,n.parentNode,n)):e=null}else if(r){const i={};s&32&&(i.data=t[5]),s&4&&(i.form=t[2]),e.$set(i)}},i(t){o||(e&&g(e.$$.fragment,t),o=!0)},o(t){e&&h(e.$$.fragment,t),o=!1},d(t){t&&w(n),a[11](null),e&&R(e,t)}}}function se(a){let e,n,o,r;const c=[re,ie],t=[];function s(i,f){return i[1][2]?0:1}return e=s(a),n=t[e]=c[e](a),{c(){n.c(),o=d()},l(i){n.l(i),o=d()},m(i,f){t[e].m(i,f),E(i,o,f),r=!0},p(i,f){let l=e;e=s(i),e===l?t[e].p(i,f):(I(),h(t[l],1,1,()=>{t[l]=null}),A(),n=t[e],n?n.p(i,f):(n=t[e]=c[e](i),n.c()),g(n,1),n.m(o.parentNode,o))},i(i){r||(g(n),r=!0)},o(i){h(n),r=!1},d(i){i&&w(o),t[e].d(i)}}}function $(a){let e,n=a[7]&&N(a);return{c(){e=W(\"div\"),n&&n.c(),this.h()},l(o){e=F(o,\"DIV\",{id:!0,\"aria-live\":!0,\"aria-atomic\":!0,style:!0});var r=G(e);n&&n.l(r),r.forEach(w),this.h()},h(){V(e,\"id\",\"svelte-announcer\"),V(e,\"aria-live\",\"assertive\"),V(e,\"aria-atomic\",\"true\"),L(e,\"position\",\"absolute\"),L(e,\"left\",\"0\"),L(e,\"top\",\"0\"),L(e,\"clip\",\"rect(0 0 0 0)\"),L(e,\"clip-path\",\"inset(50%)\"),L(e,\"overflow\",\"hidden\"),L(e,\"white-space\",\"nowrap\"),L(e,\"width\",\"1px\"),L(e,\"height\",\"1px\")},m(o,r){E(o,e,r),n&&n.m(e,null)},p(o,r){o[7]?n?n.p(o,r):(n=N(o),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(o){o&&w(e),n&&n.d()}}}function N(a){let e;return{c(){e=H(a[8])},l(n){e=Q(n,a[8])},m(n,o){E(n,e,o)},p(n,o){o&256&&X(e,n[8])},d(n){n&&w(e)}}}function ae(a){let e,n,o,r,c;const t=[ne,te],s=[];function i(l,p){return l[1][1]?0:1}e=i(a),n=s[e]=t[e](a);let f=a[6]&&$(a);return{c(){n.c(),o=j(),f&&f.c(),r=d()},l(l){n.l(l),o=z(l),f&&f.l(l),r=d()},m(l,p){s[e].m(l,p),E(l,o,p),f&&f.m(l,p),E(l,r,p),c=!0},p(l,[p]){let m=e;e=i(l),e===m?s[e].p(l,p):(I(),h(s[m],1,1,()=>{s[m]=null}),A(),n=s[e],n?n.p(l,p):(n=s[e]=t[e](l),n.c()),g(n,1),n.m(o.parentNode,o)),l[6]?f?f.p(l,p):(f=$(l),f.c(),f.m(r.parentNode,r)):f&&(f.d(1),f=null)},i(l){c||(g(n),c=!0)},o(l){h(n),c=!1},d(l){l&&(w(o),w(r)),s[e].d(l),f&&f.d(l)}}}function le(a,e,n){let{stores:o}=e,{page:r}=e,{constructors:c}=e,{components:t=[]}=e,{form:s}=e,{data_0:i=null}=e,{data_1:f=null}=e,{data_2:l=null}=e;J(o.page.notify);let p=!1,m=!1,P=null;K(()=>{const _=o.page.subscribe(()=>{p&&(n(7,m=!0),Y().then(()=>{n(8,P=document.title||\"untitled page\")}))});return n(6,p=!0),_});function D(_){O[_?\"unshift\":\"push\"](()=>{t[2]=_,n(0,t)})}function S(_){O[_?\"unshift\":\"push\"](()=>{t[1]=_,n(0,t)})}function C(_){O[_?\"unshift\":\"push\"](()=>{t[1]=_,n(0,t)})}function B(_){O[_?\"unshift\":\"push\"](()=>{t[0]=_,n(0,t)})}function q(_){O[_?\"unshift\":\"push\"](()=>{t[0]=_,n(0,t)})}return a.$$set=_=>{\"stores\"in _&&n(9,o=_.stores),\"page\"in _&&n(10,r=_.page),\"constructors\"in _&&n(1,c=_.constructors),\"components\"in _&&n(0,t=_.components),\"form\"in _&&n(2,s=_.form),\"data_0\"in _&&n(3,i=_.data_0),\"data_1\"in _&&n(4,f=_.data_1),\"data_2\"in _&&n(5,l=_.data_2)},a.$$.update=()=>{a.$$.dirty&1536&&o.page.set(r)},[t,c,s,i,f,l,p,m,P,o,r,D,S,C,B,q]}class ue extends Z{constructor(e){super(),M(this,e,le,ae,U,{stores:9,page:10,constructors:1,components:0,form:2,data_0:3,data_1:4,data_2:5})}}const me=[()=>u(()=>import(\"../nodes/0.ZnGYbIXJ.js\"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]),import.meta.url),()=>u(()=>import(\"../nodes/1.MAtuXuJq.js\"),__vite__mapDeps([11,1,2,9,7,5,8]),import.meta.url),()=>u(()=>import(\"../nodes/2.Dl5Bf6FQ.js\"),__vite__mapDeps([12,1,2,13,9,7,5,8,6,3,4]),import.meta.url),()=>u(()=>import(\"../nodes/3.CShdKmkC.js\"),__vite__mapDeps([14,1,2,15,13,4,7,5,8,6,9,16,17]),import.meta.url),()=>u(()=>import(\"../nodes/4.C_seFb3q.js\"),__vite__mapDeps([18,5,8]),import.meta.url),()=>u(()=>import(\"../nodes/5.BYIMj9Cv.js\"),__vite__mapDeps([19,1,2,4,20,5,15,13,7,8,6,9,16,21]),import.meta.url),()=>u(()=>import(\"../nodes/6.BjLYl_tC.js\"),__vite__mapDeps([22,1,2,4,20,5,15,13,7,8,6,9,16,23,24]),import.meta.url),()=>u(()=>import(\"../nodes/7.DFYbvg6E.js\"),__vite__mapDeps([25,1,2,4,20,5,15,13,7,8,6,9,16,26]),import.meta.url),()=>u(()=>import(\"../nodes/8.B7pihDEp.js\"),__vite__mapDeps([27,1,2,4,20,5,23]),import.meta.url),()=>u(()=>import(\"../nodes/9.D5dLAYhx.js\"),__vite__mapDeps([28,1,2,4,20,5]),import.meta.url),()=>u(()=>import(\"../nodes/10.BWBmmkzh.js\"),__vite__mapDeps([29,1,2,4,20,5,15,13,7,8,6,9,16]),import.meta.url),()=>u(()=>import(\"../nodes/11.BcS0vyVB.js\"),__vite__mapDeps([30,1,2,4,20,5]),import.meta.url),()=>u(()=>import(\"../nodes/12.BW2Gnzwn.js\"),__vite__mapDeps([31,1,2,4,20,5,15,13,7,8,6,9,16]),import.meta.url),()=>u(()=>import(\"../nodes/13.Dz4XkGv4.js\"),__vite__mapDeps([32,1,2,4,20,5,15,13,7,8,6,9,16]),import.meta.url),()=>u(()=>import(\"../nodes/14.CPQ9PDjB.js\"),__vite__mapDeps([33,1,2,4,20,5]),import.meta.url),()=>u(()=>import(\"../nodes/15.BOQPdaD3.js\"),__vite__mapDeps([34,1,2,4,20,5,23]),import.meta.url),()=>u(()=>import(\"../nodes/16.BJYGNx6n.js\"),__vite__mapDeps([35,1,2,4,20,5]),import.meta.url),()=>u(()=>import(\"../nodes/17.Bo0pwz4z.js\"),__vite__mapDeps([36,1,2,4,20,5,13,15,7,8,6,9,16,37]),import.meta.url),()=>u(()=>import(\"../nodes/18.E34B3Q4g.js\"),__vite__mapDeps([38,1,2,4,20,5,13,15,7,8,6,9,16,37]),import.meta.url)],pe=[],de={\"/\":[3],\"/docs\":[4,[2]],\"/docs/data/rows\":[5,[2]],\"/docs/data/tasks\":[6,[2]],\"/docs/data/time-ranges\":[7,[2]],\"/docs/getting-started/installation\":[8,[2]],\"/docs/getting-started/migrating\":[9,[2]],\"/docs/modules/create-tasks\":[10,[2]],\"/docs/modules/dependencies\":[11,[2]],\"/docs/modules/external\":[12,[2]],\"/docs/modules/table\":[13,[2]],\"/docs/options/columns\":[14,[2]],\"/docs/options/gantt\":[15,[2]],\"/docs/options/headers\":[16,[2]],\"/docs/options/layout\":[17,[2]],\"/docs/options/zoom\":[18,[2]]},he={handleError:({error:a})=>{console.error(a)},reroute:()=>{}};export{de as dictionary,he as hooks,ce as matchers,me as nodes,ue as root,pe as server_loads};\n"
  },
  {
    "path": "docs/_app/immutable/entry/start.Dwci9Oks.js",
    "content": "import{a as t}from\"../chunks/entry.0-2BfHub.js\";export{t as start};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/0.ZnGYbIXJ.js",
    "content": "import{s as D,l as Ie,i as O,f as u,q as Oe,o as R,e as $,c as x,b as h,a3 as Be,v as Me,w as Ne,x as Se,Z as E,_ as k,r as o,h as f,n as y,t as oe,d as ie,j as ve,a4 as ue,p as fe,J as V,a as N,g as S,G as je,k as _e,$ as Pe,a5 as Ve,a0 as ze}from\"../chunks/scheduler.lruobs1Y.js\";import{S as G,i as T,a as B,t as C,b as z,d as Z,m as A,e as Q}from\"../chunks/index.DyGm78TJ.js\";import{B as Ze}from\"../chunks/Button.De7jzsKF.js\";import{g as be}from\"../chunks/spread.CgU5AtxT.js\";import{b as ge}from\"../chunks/paths.oQcPQ3IF.js\";import{m as De,i as Ce}from\"../chunks/store.CCmTIowZ.js\";const Ae=!1,vt=Object.freeze(Object.defineProperty({__proto__:null,ssr:Ae},Symbol.toStringTag,{value:\"Module\"}));function pe(a){let e,t;const l=a[2].default,s=Oe(l,a,a[1],null);let r=[{class:\"min-w-[40px] min-h-[40px] flex items-center justify-center p-2 transform-gpu rounded-md border-0 transition-transform hover:scale-[1.1]\"},{href:a[0]}],n={};for(let i=0;i<r.length;i+=1)n=R(n,r[i]);return{c(){e=$(a[0]?\"a\":\"button\"),s&&s.c(),this.h()},l(i){e=x(i,((a[0]?\"a\":\"button\")||\"null\").toUpperCase(),{class:!0,href:!0});var c=h(e);s&&s.l(c),c.forEach(u),this.h()},h(){Be(a[0]?\"a\":\"button\")(e,n)},m(i,c){O(i,e,c),s&&s.m(e,null),t=!0},p(i,c){s&&s.p&&(!t||c&2)&&Me(s,l,i,i[1],t?Se(l,i[1],c,null):Ne(i[1]),null),Be(i[0]?\"a\":\"button\")(e,n=be(r,[{class:\"min-w-[40px] min-h-[40px] flex items-center justify-center p-2 transform-gpu rounded-md border-0 transition-transform hover:scale-[1.1]\"},(!t||c&1)&&{href:i[0]}]))},i(i){t||(B(s,i),t=!0)},o(i){C(s,i),t=!1},d(i){i&&u(e),s&&s.d(i)}}}function Qe(a){let e=a[0]?\"a\":\"button\",t,l,s=(a[0]?\"a\":\"button\")&&pe(a);return{c(){s&&s.c(),t=Ie()},l(r){s&&s.l(r),t=Ie()},m(r,n){s&&s.m(r,n),O(r,t,n),l=!0},p(r,[n]){r[0],e?D(e,r[0]?\"a\":\"button\")?(s.d(1),s=pe(r),e=r[0]?\"a\":\"button\",s.c(),s.m(t.parentNode,t)):s.p(r,n):(s=pe(r),e=r[0]?\"a\":\"button\",s.c(),s.m(t.parentNode,t))},i(r){l||(B(s,r),l=!0)},o(r){C(s,r),l=!1},d(r){r&&u(t),s&&s.d(r)}}}function Ge(a,e,t){let{$$slots:l={},$$scope:s}=e,{href:r=null}=e;return a.$$set=n=>{\"href\"in n&&t(0,r=n.href),\"$$scope\"in n&&t(1,s=n.$$scope)},[r,s,l]}class Te extends G{constructor(e){super(),T(this,e,Ge,Qe,D,{href:0})}}function Ue(a){let e,t;return{c(){e=E(\"svg\"),t=E(\"path\"),this.h()},l(l){e=k(l,\"svg\",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var s=h(e);t=k(s,\"path\",{\"fill-rule\":!0,\"clip-rule\":!0,d:!0});var r=h(t);r.forEach(u),s.forEach(u),this.h()},h(){o(t,\"fill-rule\",\"evenodd\"),o(t,\"clip-rule\",\"evenodd\"),o(t,\"d\",\"M12 2C6.477 2 2 6.463 2 11.97c0 4.404 2.865 8.14 6.839 9.458.5.092.682-.216.682-.48 0-.236-.008-.864-.013-1.695-2.782.602-3.369-1.337-3.369-1.337-.454-1.151-1.11-1.458-1.11-1.458-.908-.618.069-.606.069-.606 1.003.07 1.531 1.027 1.531 1.027.892 1.524 2.341 1.084 2.91.828.092-.643.35-1.083.636-1.332-2.22-.251-4.555-1.107-4.555-4.927 0-1.088.39-1.979 1.029-2.675-.103-.252-.446-1.266.098-2.638 0 0 .84-.268 2.75 1.022A9.607 9.607 0 0 1 12 6.82c.85.004 1.705.114 2.504.336 1.909-1.29 2.747-1.022 2.747-1.022.546 1.372.202 2.386.1 2.638.64.696 1.028 1.587 1.028 2.675 0 3.83-2.339 4.673-4.566 4.92.359.307.678.915.678 1.846 0 1.332-.012 2.407-.012 2.734 0 .267.18.577.688.48 3.97-1.32 6.833-5.054 6.833-9.458C22 6.463 17.522 2 12 2Z\"),o(e,\"xmlns\",\"http://www.w3.org/2000/svg\"),o(e,\"fill\",\"currentColor\"),o(e,\"viewBox\",\"0 0 24 24\"),o(e,\"class\",\"w-6 h-6\")},m(l,s){O(l,e,s),f(e,t)},p:y,i:y,o:y,d(l){l&&u(e)}}}class qe extends G{constructor(e){super(),T(this,e,null,Ue,D,{})}}function He(a){let e,t,l,s;return{c(){e=$(\"li\"),t=$(\"a\"),l=oe(a[0]),this.h()},l(r){e=x(r,\"LI\",{class:!0});var n=h(e);t=x(n,\"A\",{class:!0,href:!0});var i=h(t);l=ie(i,a[0]),i.forEach(u),n.forEach(u),this.h()},h(){o(t,\"class\",\"text-soft text-base font-base hover:underline hover:text-brand\"),o(t,\"href\",s=\"\"+(ge+a[1])),o(e,\"class\",\"mt-4 first:mt-0 992:mt-0\")},m(r,n){O(r,e,n),f(e,t),f(t,l)},p(r,[n]){n&1&&ve(l,r[0]),n&2&&s!==(s=\"\"+(ge+r[1]))&&o(t,\"href\",s)},i:y,o:y,d(r){r&&u(e)}}}function Je(a,e,t){let{title:l}=e,{href:s}=e;return a.$$set=r=>{\"title\"in r&&t(0,l=r.title),\"href\"in r&&t(1,s=r.href)},[l,s]}class Re extends G{constructor(e){super(),T(this,e,Je,He,D,{title:0,href:1})}}function Fe(a){let e,t;return{c(){e=E(\"svg\"),t=E(\"path\"),this.h()},l(l){e=k(l,\"svg\",{xmlns:!0,fill:!0,viewBox:!0,\"stroke-width\":!0,stroke:!0,class:!0});var s=h(e);t=k(s,\"path\",{\"stroke-linecap\":!0,\"stroke-linejoin\":!0,d:!0}),h(t).forEach(u),s.forEach(u),this.h()},h(){o(t,\"stroke-linecap\",\"round\"),o(t,\"stroke-linejoin\",\"round\"),o(t,\"d\",\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"),o(e,\"xmlns\",\"http://www.w3.org/2000/svg\"),o(e,\"fill\",\"none\"),o(e,\"viewBox\",\"0 0 24 24\"),o(e,\"stroke-width\",\"1.5\"),o(e,\"stroke\",\"currentColor\"),o(e,\"class\",\"size-6\")},m(l,s){O(l,e,s),f(e,t)},p:y,i:y,o:y,d(l){l&&u(e)}}}class Ke extends G{constructor(e){super(),T(this,e,null,Fe,D,{})}}function We(a){let e,t,l=[{xmlns:\"http://www.w3.org/2000/svg\"},{fill:\"none\"},{viewBox:\"0 0 24 24\"},{\"stroke-width\":\"1.5\"},{stroke:\"currentColor\"},a[0]],s={};for(let r=0;r<l.length;r+=1)s=R(s,l[r]);return{c(){e=E(\"svg\"),t=E(\"path\"),this.h()},l(r){e=k(r,\"svg\",{xmlns:!0,fill:!0,viewBox:!0,\"stroke-width\":!0,stroke:!0});var n=h(e);t=k(n,\"path\",{\"stroke-linecap\":!0,\"stroke-linejoin\":!0,d:!0}),h(t).forEach(u),n.forEach(u),this.h()},h(){o(t,\"stroke-linecap\",\"round\"),o(t,\"stroke-linejoin\",\"round\"),o(t,\"d\",\"M17.25 8.25 21 12m0 0-3.75 3.75M21 12H3\"),ue(e,s)},m(r,n){O(r,e,n),f(e,t)},p(r,[n]){ue(e,s=be(l,[{xmlns:\"http://www.w3.org/2000/svg\"},{fill:\"none\"},{viewBox:\"0 0 24 24\"},{\"stroke-width\":\"1.5\"},{stroke:\"currentColor\"},n&1&&r[0]]))},i:y,o:y,d(r){r&&u(e)}}}function Xe(a,e,t){return a.$$set=l=>{t(0,e=R(R({},e),fe(l)))},e=fe(e),[e]}class Ye extends G{constructor(e){super(),T(this,e,Xe,We,D,{})}}function et(a){let e,t,l,s,r,n,i,c,b,m,d=[{viewBox:\"0 0 64 64\"},{xmlns:\"http://www.w3.org/2000/svg\"},a[0]],p={};for(let v=0;v<d.length;v+=1)p=R(p,d[v]);return{c(){e=E(\"svg\"),t=E(\"defs\"),l=E(\"clipPath\"),s=E(\"path\"),r=E(\"g\"),n=E(\"path\"),i=E(\"path\"),c=E(\"path\"),b=E(\"path\"),m=E(\"path\"),this.h()},l(v){e=k(v,\"svg\",{viewBox:!0,xmlns:!0});var g=h(e);t=k(g,\"defs\",{});var F=h(t);l=k(F,\"clipPath\",{id:!0});var I=h(l);s=k(I,\"path\",{d:!0,style:!0}),h(s).forEach(u),I.forEach(u),F.forEach(u),r=k(g,\"g\",{style:!0});var w=h(r);n=k(w,\"path\",{d:!0,class:!0,style:!0}),h(n).forEach(u),i=k(w,\"path\",{d:!0,class:!0,style:!0}),h(i).forEach(u),c=k(w,\"path\",{d:!0,class:!0,style:!0}),h(c).forEach(u),b=k(w,\"path\",{d:!0,class:!0,style:!0}),h(b).forEach(u),w.forEach(u),m=k(g,\"path\",{style:!0,d:!0}),h(m).forEach(u),g.forEach(u),this.h()},h(){o(s,\"d\",\"M 27.148 4.445 Q 31.589 0.004 36.03 4.445 L 58.869 27.283 Q 63.31 31.724 58.869 36.165 L 36.03 59.003 Q 31.589 63.444 27.148 59.003 L 4.309 36.165 Q -0.132 31.724 4.309 27.283 Z\"),V(s,\"fill\",\"rgb(216, 216, 216)\"),o(l,\"id\",\"clip-0\"),o(n,\"d\",\"M 0 0 L 63 0 L 0 27 L 0 0 Z\"),o(n,\"class\",\"fill-blue-400\"),V(n,\"-fill\",\"rgb(255, 0, 0)\"),o(i,\"d\",\"M 0 27 L 63 0 L 0 63 L 0 27 Z\"),o(i,\"class\",\"fill-blue-950\"),V(i,\"-fill\",\"rgb(133, 31, 31)\"),o(c,\"d\",\"M 63 0 L 24 63 L 0 63 L 63 0 Z\"),o(c,\"class\",\"fill-blue-500\"),V(c,\"-fill\",\"rgb(89, 27, 27)\"),o(b,\"d\",\"M 63 0 L 63 63 L 24 63 L 63 0 Z\"),o(b,\"class\",\"fill-blue-700\"),o(b,\"style\",\"\"),V(r,\"clip-path\",\"url(#clip-0)\"),V(m,\"fill\",\"none\"),V(m,\"stroke\",\"rgb(255, 255, 255)\"),V(m,\"stroke-width\",\"7px\"),o(m,\"d\",\"M 31.107 20.88 C 28.239 17.67 17.482 16.875 16.077 27.656 C 14.118 42.686 41.127 40.817 46.388 37.717 C 51.041 34.975 54.128 28.569 47.601 24.075 C 43.849 21.491 37.477 22.666 35.264 26.058 C 32.373 30.489 32.769 34.965 31.186 40.483 C 29.791 45.347 23.348 48.693 19.161 48.852 C 12.369 49.111 0 39.463 0 37.898\"),ue(e,p)},m(v,g){O(v,e,g),f(e,t),f(t,l),f(l,s),f(e,r),f(r,n),f(r,i),f(r,c),f(r,b),f(e,m)},p(v,[g]){ue(e,p=be(d,[{viewBox:\"0 0 64 64\"},{xmlns:\"http://www.w3.org/2000/svg\"},g&1&&v[0]]))},i:y,o:y,d(v){v&&u(e)}}}function tt(a,e,t){return a.$$set=l=>{t(0,e=R(R({},e),fe(l)))},e=fe(e),[e]}class st extends G{constructor(e){super(),T(this,e,tt,et,D,{})}}function rt(a){let e,t,l,s;return t=new st({props:{class:\"inline-block size-12 mr-2\"}}),{c(){e=$(\"span\"),z(t.$$.fragment),l=oe(\" svelte-gantt\"),this.h()},l(r){e=x(r,\"SPAN\",{class:!0});var n=h(e);Z(t.$$.fragment,n),l=ie(n,\" svelte-gantt\"),n.forEach(u),this.h()},h(){o(e,\"class\",\"flex items-center\")},m(r,n){O(r,e,n),A(t,e,null),f(e,l),s=!0},p:y,i(r){s||(B(t.$$.fragment,r),s=!0)},o(r){C(t.$$.fragment,r),s=!1},d(r){r&&u(e),Q(t)}}}function lt(a){let e,t;return e=new qe({}),{c(){z(e.$$.fragment)},l(l){Z(e.$$.fragment,l)},m(l,s){A(e,l,s),t=!0},i(l){t||(B(e.$$.fragment,l),t=!0)},o(l){C(e.$$.fragment,l),t=!1},d(l){Q(e,l)}}}function at(a){var $e,xe;let e,t,l,s,r,n,i,c,b,m,d,p,v,g,F,I,w,U,te,ce,j,P,W=(($e=a[1].category)==null?void 0:$e.title)+\"\",se,de,q,he,K,X=((xe=a[1].page)==null?void 0:xe.label)+\"\",re,H,me,we;return s=new Ze({props:{href:ge+\"/\",class:\"block\",$$slots:{default:[rt]},$$scope:{ctx:a}}}),d=new Re({props:{href:\"/docs\",title:\"Documentation\"}}),g=new Te({props:{href:\"https://github.com/ANovokmet/svelte-gantt\",$$slots:{default:[lt]},$$scope:{ctx:a}}}),U=new Ke({}),q=new Ye({props:{class:\"size-4 mx-1\"}}),{c(){e=$(\"div\"),t=$(\"div\"),l=$(\"div\"),z(s.$$.fragment),r=N(),n=$(\"div\"),i=N(),c=$(\"div\"),b=$(\"nav\"),m=$(\"ul\"),z(d.$$.fragment),p=N(),v=$(\"div\"),z(g.$$.fragment),F=N(),I=$(\"div\"),w=$(\"button\"),z(U.$$.fragment),ce=N(),j=$(\"ol\"),P=$(\"li\"),se=oe(W),de=N(),z(q.$$.fragment),he=N(),K=$(\"li\"),re=oe(X),this.h()},l(_){e=x(_,\"DIV\",{class:!0});var L=h(e);t=x(L,\"DIV\",{class:!0});var M=h(t);l=x(M,\"DIV\",{class:!0});var Y=h(l);Z(s.$$.fragment,Y),Y.forEach(u),r=S(M),n=x(M,\"DIV\",{class:!0}),h(n).forEach(u),i=S(M),c=x(M,\"DIV\",{class:!0});var J=h(c);b=x(J,\"NAV\",{});var ee=h(b);m=x(ee,\"UL\",{class:!0});var Ee=h(m);Z(d.$$.fragment,Ee),Ee.forEach(u),ee.forEach(u),p=S(J),v=x(J,\"DIV\",{class:!0});var ke=h(v);Z(g.$$.fragment,ke),ke.forEach(u),J.forEach(u),M.forEach(u),F=S(L),I=x(L,\"DIV\",{class:!0});var le=h(I);w=x(le,\"BUTTON\",{id:!0,type:!0,class:!0,\"aria-controls\":!0,\"aria-expanded\":!0,\"aria-haspopup\":!0});var Le=h(w);Z(U.$$.fragment,Le),Le.forEach(u),ce=S(le),j=x(le,\"OL\",{class:!0});var ae=h(j);P=x(ae,\"LI\",{class:!0});var ne=h(P);se=ie(ne,W),de=S(ne),Z(q.$$.fragment,ne),ne.forEach(u),he=S(ae),K=x(ae,\"LI\",{class:!0});var ye=h(K);re=ie(ye,X),ye.forEach(u),ae.forEach(u),le.forEach(u),L.forEach(u),this.h()},h(){o(l,\"class\",\"logo\"),o(n,\"class\",\"flex-1\"),o(m,\"class\",\"flex items-center space-x-8\"),o(v,\"class\",\"hidden lg:flex items-center ml-6\"),o(c,\"class\",\"lg:flex items-center hidden\"),o(t,\"class\",\"flex items-center py-4 mx-4 border-b lg:border-0 border-slate-900/10 h-20\"),o(w,\"id\",\"main-sidebar-button\"),o(w,\"type\",\"button\"),o(w,\"class\",\"text-soft hover:text-inverse inline-flex justify-center rounded-md text-sm font-medium\"),o(w,\"aria-controls\",\"main-sidebar\"),o(w,\"aria-expanded\",te=a[0]?\"true\":\"false\"),o(w,\"aria-haspopup\",\"true\"),o(P,\"class\",\"flex items-center\"),o(K,\"class\",\"truncate font-semibold text-slate-900 dark:text-slate-200\"),o(j,\"class\",\"text-md text-soft flex items-center whitespace-nowrap leading-6 mt-px ml-2.5\"),o(I,\"class\",\"nav-category border lg:hidden flex w-full items-center p-4 h-12\"),o(e,\"class\",\"w-full mx-auto max-w-7xl\")},m(_,L){O(_,e,L),f(e,t),f(t,l),A(s,l,null),f(t,r),f(t,n),f(t,i),f(t,c),f(c,b),f(b,m),A(d,m,null),f(c,p),f(c,v),A(g,v,null),f(e,F),f(e,I),f(I,w),A(U,w,null),f(I,ce),f(I,j),f(j,P),f(P,se),f(P,de),A(q,P,null),f(j,he),f(j,K),f(K,re),H=!0,me||(we=je(w,\"click\",a[3]),me=!0)},p(_,[L]){var J,ee;const M={};L&64&&(M.$$scope={dirty:L,ctx:_}),s.$set(M);const Y={};L&64&&(Y.$$scope={dirty:L,ctx:_}),g.$set(Y),(!H||L&1&&te!==(te=_[0]?\"true\":\"false\"))&&o(w,\"aria-expanded\",te),(!H||L&2)&&W!==(W=((J=_[1].category)==null?void 0:J.title)+\"\")&&ve(se,W),(!H||L&2)&&X!==(X=((ee=_[1].page)==null?void 0:ee.label)+\"\")&&ve(re,X)},i(_){H||(B(s.$$.fragment,_),B(d.$$.fragment,_),B(g.$$.fragment,_),B(U.$$.fragment,_),B(q.$$.fragment,_),H=!0)},o(_){C(s.$$.fragment,_),C(d.$$.fragment,_),C(g.$$.fragment,_),C(U.$$.fragment,_),C(q.$$.fragment,_),H=!1},d(_){_&&u(e),Q(s),Q(d),Q(g),Q(U),Q(q),me=!1,we()}}}function nt(a,e,t){let l;_e(a,De,i=>t(1,l=i));const s=Pe();let{isSidebarOpen:r=!1}=e;const n=()=>s(\"open\");return a.$$set=i=>{\"isSidebarOpen\"in i&&t(0,r=i.isSidebarOpen)},[r,l,s,n]}class ot extends G{constructor(e){super(),T(this,e,nt,at,D,{isSidebarOpen:0})}}function it(a){let e,t,l,s,r,n,i,c;document.title=e=a[1],r=new ot({}),r.$on(\"open-popover\",a[6]),r.$on(\"close-popover\",a[7]),r.$on(\"open\",a[8]);const b=a[5].default,m=Oe(b,a,a[4],null);return{c(){t=N(),l=$(\"div\"),s=$(\"div\"),z(r.$$.fragment),i=N(),m&&m.c(),this.h()},l(d){Ve(\"svelte-1az6e94\",document.head).forEach(u),t=S(d),l=x(d,\"DIV\",{class:!0});var v=h(l);s=x(v,\"DIV\",{class:!0});var g=h(s);Z(r.$$.fragment,g),g.forEach(u),i=S(v),m&&m.l(v),v.forEach(u),this.h()},h(){o(s,\"class\",n=\"fixed top-0 z-30 w-full flex-none transform-gpu transition-transform duration-150 ease-out \"+(a[0]?\"\":\"blur-bg\")+\" translate-y-0 border-b border-slate-900/10\"),o(l,\"class\",\"sg-docs bg-body text-inverse min-h-screen min-w-full transition-transform duration-150 ease-out\")},m(d,p){O(d,t,p),O(d,l,p),f(l,s),A(r,s,null),f(l,i),m&&m.m(l,null),c=!0},p(d,[p]){(!c||p&2)&&e!==(e=d[1])&&(document.title=e),(!c||p&1&&n!==(n=\"fixed top-0 z-30 w-full flex-none transform-gpu transition-transform duration-150 ease-out \"+(d[0]?\"\":\"blur-bg\")+\" translate-y-0 border-b border-slate-900/10\"))&&o(s,\"class\",n),m&&m.p&&(!c||p&16)&&Me(m,b,d,d[4],c?Se(b,d[4],p,null):Ne(d[4]),null)},i(d){c||(B(r.$$.fragment,d),B(m,d),c=!0)},o(d){C(r.$$.fragment,d),C(m,d),c=!1},d(d){d&&(u(t),u(l)),Q(r),m&&m.d(d)}}}function ut(a,e,t){let l,s;_e(a,De,p=>t(3,l=p)),_e(a,Ce,p=>t(2,s=p));let{$$slots:r={},$$scope:n}=e,{isNavPopoverOpen:i=!1}=e,c=\"\";const b=()=>t(0,i=!0),m=()=>t(0,i=!1),d=()=>ze(Ce,s=!0,s);return a.$$set=p=>{\"isNavPopoverOpen\"in p&&t(0,i=p.isNavPopoverOpen),\"$$scope\"in p&&t(4,n=p.$$scope)},a.$$.update=()=>{var p;a.$$.dirty&8&&t(1,c=(p=l.page)!=null&&p.label?`${l.page.label} | svelte-gantt`:\"svelte-gantt\")},[i,c,s,l,n,r,b,m,d]}class _t extends G{constructor(e){super(),T(this,e,ut,it,D,{isNavPopoverOpen:0})}}export{_t as component,vt as universal};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/1.MAtuXuJq.js",
    "content": "import{s as x,e as u,t as h,a as S,c as d,b as v,d as g,f as m,g as j,i as _,h as b,j as E,n as $,k}from\"../chunks/scheduler.lruobs1Y.js\";import{S as q,i as y}from\"../chunks/index.DyGm78TJ.js\";import{p as C}from\"../chunks/stores.BxMDhJ8m.js\";function H(i){var f;let a,s=i[0].status+\"\",r,o,n,p=((f=i[0].error)==null?void 0:f.message)+\"\",c;return{c(){a=u(\"h1\"),r=h(s),o=S(),n=u(\"p\"),c=h(p)},l(e){a=d(e,\"H1\",{});var t=v(a);r=g(t,s),t.forEach(m),o=j(e),n=d(e,\"P\",{});var l=v(n);c=g(l,p),l.forEach(m)},m(e,t){_(e,a,t),b(a,r),_(e,o,t),_(e,n,t),b(n,c)},p(e,[t]){var l;t&1&&s!==(s=e[0].status+\"\")&&E(r,s),t&1&&p!==(p=((l=e[0].error)==null?void 0:l.message)+\"\")&&E(c,p)},i:$,o:$,d(e){e&&(m(a),m(o),m(n))}}}function P(i,a,s){let r;return k(i,C,o=>s(0,r=o)),[r]}class B extends q{constructor(a){super(),y(this,a,P,H,x,{})}}export{B as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/10.BWBmmkzh.js",
    "content": "import{s as I,e as f,a as _,c as g,b as F,y as w,g as h,f as c,r as b,i as u,h as P,n as N,o as M,p as A,H as W,z as q}from\"../chunks/scheduler.lruobs1Y.js\";import{S as R,i as U,b as H,d as S,m as L,a as G,t as j,e as E}from\"../chunks/index.DyGm78TJ.js\";import{g as z,a as Y}from\"../chunks/spread.CgU5AtxT.js\";import{L as B}from\"../chunks/layout.zjTtpqzV.js\";import{S as J,t as D,M as K,h as O,a as Q}from\"../chunks/index.Up5bhyj0.js\";function X(i){let a,s,o=\"Click and drag on the timeline to create a task.\",p,n,l;return n=new J({props:{from:D(\"06:00\"),to:D(\"14:00\"),fitWidth:!0,minWidth:400,dateAdapter:new K(O),rows:[{id:11,label:\"Petunia Mulliner\"},{id:12,label:\"Mélina Giacovetti\"},{id:13,label:\"Marlène Lasslett\"},{id:14,label:\"Adda Youell\"}],ganttTableModules:[Q],enableCreateTask:i[0].enableCreateTask,onCreateTask:i[0].onCreateTask,onCreatedTask:i[0].onCreatedTask}}),{c(){a=f(\"div\"),s=f(\"div\"),s.textContent=o,p=_(),H(n.$$.fragment),this.h()},l(e){a=g(e,\"DIV\",{class:!0});var k=F(a);s=g(k,\"DIV\",{class:!0,\"data-svelte-h\":!0}),w(s)!==\"svelte-12ji1id\"&&(s.textContent=o),p=h(k),S(n.$$.fragment,k),k.forEach(c),this.h()},h(){b(s,\"class\",\"text-center border-b\"),b(a,\"class\",\"border\")},m(e,k){u(e,a,k),P(a,s),P(a,p),L(n,a,null),l=!0},p:N,i(e){l||(G(n.$$.fragment,e),l=!0)},o(e){j(n.$$.fragment,e),l=!1},d(e){e&&c(a),E(n)}}}function Z(i){let a=0;return[{enableCreateTask:!0,onCreateTask:o=>(a++,{id:a,label:`New task ${a}`,...o}),onCreatedTask:o=>{console.log(\"task created\",o)}}]}class aa extends R{constructor(a){super(),U(this,a,Z,X,I,{})}}function ta(i){let a,s='Create tasks<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#create-tasks\">#</a>',o,p,n=\"Using the following options, tasks can be created by dragging on the chart:\",l,e,k=\"<li><code>enableCreateTask</code> (<code>boolean</code>) - Set to <code>true</code> to enable task creation.</li> <li><code>onCreateTask</code> (<code>Function</code>) - Triggers at the moment when a new task has started being dragged. It should return the new tasks model.</li> <li><code>onCreatedTask</code> (<code>Function</code>) - Triggers after task has been successfully created.</li>\",v,d,$,C,T,m,y,V=`<code class=\"language-js\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> SvelteGantt<span class=\"token punctuation\">,</span> SvelteGanttTable <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// ...</span>\n<span class=\"token keyword\">let</span> id <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\ngantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    <span class=\"token literal-property property\">enableCreateTask</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">onCreateTask</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span>\n        id<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> id<span class=\"token punctuation\">,</span>\n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">&#96;</span><span class=\"token string\">New task </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$&#123;</span>id<span class=\"token interpolation-punctuation punctuation\">&#125;</span></span><span class=\"token template-punctuation string\">&#96;</span></span><span class=\"token punctuation\">,</span>\n            <span class=\"token operator\">...</span>data\n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">onCreatedTask</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">task</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'task created'</span><span class=\"token punctuation\">,</span> task<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">&#125;</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,x;return d=new aa({}),{c(){a=f(\"h1\"),a.innerHTML=s,o=_(),p=f(\"p\"),p.textContent=n,l=_(),e=f(\"ul\"),e.innerHTML=k,v=_(),H(d.$$.fragment),$=_(),C=f(\"hr\"),T=_(),m=f(\"pre\"),y=new W(!1),this.h()},l(t){a=g(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),w(a)!==\"svelte-98k718\"&&(a.innerHTML=s),o=h(t),p=g(t,\"P\",{\"data-svelte-h\":!0}),w(p)!==\"svelte-2i3m6l\"&&(p.textContent=n),l=h(t),e=g(t,\"UL\",{\"data-svelte-h\":!0}),w(e)!==\"svelte-vobacb\"&&(e.innerHTML=k),v=h(t),S(d.$$.fragment,t),$=h(t),C=g(t,\"HR\",{}),T=h(t),m=g(t,\"PRE\",{class:!0});var r=F(m);y=q(r,!1),r.forEach(c),this.h()},h(){b(a,\"id\",\"create-tasks\"),b(a,\"tabindex\",\"-1\"),y.a=null,b(m,\"class\",\"language-js\")},m(t,r){u(t,a,r),u(t,o,r),u(t,p,r),u(t,l,r),u(t,e,r),u(t,v,r),L(d,t,r),u(t,$,r),u(t,C,r),u(t,T,r),u(t,m,r),y.m(V,m),x=!0},p:N,i(t){x||(G(d.$$.fragment,t),x=!0)},o(t){j(d.$$.fragment,t),x=!1},d(t){t&&(c(a),c(o),c(p),c(l),c(e),c(v),c($),c(C),c(T),c(m)),E(d,t)}}}function na(i){let a,s;const o=[i[0]];let p={$$slots:{default:[ta]},$$scope:{ctx:i}};for(let n=0;n<o.length;n+=1)p=M(p,o[n]);return a=new B({props:p}),{c(){H(a.$$.fragment)},l(n){S(a.$$.fragment,n)},m(n,l){L(a,n,l),s=!0},p(n,[l]){const e=l&1?z(o,[Y(n[0])]):{};l&2&&(e.$$scope={dirty:l,ctx:n}),a.$set(e)},i(n){s||(G(a.$$.fragment,n),s=!0)},o(n){j(a.$$.fragment,n),s=!1},d(n){E(a,n)}}}function ea(i,a,s){return i.$$set=o=>{s(0,a=M(M({},a),A(o)))},a=A(a),[a]}class ca extends R{constructor(a){super(),U(this,a,ea,na,I,{})}}export{ca as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/11.BcS0vyVB.js",
    "content": "import{s as I,o as C,p as q,e as h,a as g,H as z,c as k,y,g as v,b as E,z as P,f as s,r as H,i as o,n as G}from\"../chunks/scheduler.lruobs1Y.js\";import{S as B,i as A,b as N,d as R,m as U,a as W,t as F,e as J}from\"../chunks/index.DyGm78TJ.js\";import{g as K,a as O}from\"../chunks/spread.CgU5AtxT.js\";import{L as Q}from\"../chunks/layout.zjTtpqzV.js\";function V(_){let e,c='Dependencies<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#dependencies\">#</a>',p,d,n=\"Renders a dependency between two tasks. Used by <code>SvelteGanttDependencies</code> module:\",r,l,b,j=`<code class=\"language-js\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> SvelteGanttDependencies <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt'</span><span class=\"token punctuation\">;</span>\n\ngantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n        <span class=\"token literal-property property\">dependencies</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n            <span class=\"token punctuation\">&#123;</span>\n                <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">fromId</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">toId</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span>\n            <span class=\"token punctuation\">&#125;</span>\n        <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token literal-property property\">ganttBodyModules</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>SvelteGanttDependencies<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,x,i,$=\"Gantt props:\",L,u,M='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>dependencies</code></td> <td><code>object[]</code></td> <td>List of dependencies.</td> <td align=\"right\"></td></tr></tbody>',T,m,D=\"Each dependency contains these fields:\",w,f,S='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>id</code></td> <td><code>number | string</code></td> <td>Unique id of dependency. <strong>(required)</strong></td> <td align=\"right\"></td></tr> <tr><td><code>fromId</code></td> <td><code>number | string</code></td> <td>Id of dependent task. <strong>(required)</strong></td> <td align=\"right\"></td></tr> <tr><td><code>toId</code></td> <td><code>number | string</code></td> <td>Id of dependency task. <strong>(required)</strong></td> <td align=\"right\"></td></tr> <tr><td><code>stroke</code></td> <td><code>string</code></td> <td>Stroke color, eg. <code>&#39;red&#39;</code> or <code>&#39;#ff0000&#39;</code></td> <td align=\"right\"></td></tr> <tr><td><code>strokeWidth</code></td> <td><code>number</code></td> <td>Width of stroke.</td> <td align=\"right\"></td></tr> <tr><td><code>arrowSize</code></td> <td><code>number</code></td> <td>Size of the arrow head.</td> <td align=\"right\"></td></tr></tbody>';return{c(){e=h(\"h2\"),e.innerHTML=c,p=g(),d=h(\"p\"),d.innerHTML=n,r=g(),l=h(\"pre\"),b=new z(!1),x=g(),i=h(\"p\"),i.textContent=$,L=g(),u=h(\"table\"),u.innerHTML=M,T=g(),m=h(\"p\"),m.textContent=D,w=g(),f=h(\"table\"),f.innerHTML=S,this.h()},l(t){e=k(t,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),y(e)!==\"svelte-w7ol4d\"&&(e.innerHTML=c),p=v(t),d=k(t,\"P\",{\"data-svelte-h\":!0}),y(d)!==\"svelte-uzjrxo\"&&(d.innerHTML=n),r=v(t),l=k(t,\"PRE\",{class:!0});var a=E(l);b=P(a,!1),a.forEach(s),x=v(t),i=k(t,\"P\",{\"data-svelte-h\":!0}),y(i)!==\"svelte-1rqyyc2\"&&(i.textContent=$),L=v(t),u=k(t,\"TABLE\",{\"data-svelte-h\":!0}),y(u)!==\"svelte-1xwczqw\"&&(u.innerHTML=M),T=v(t),m=k(t,\"P\",{\"data-svelte-h\":!0}),y(m)!==\"svelte-oktsen\"&&(m.textContent=D),w=v(t),f=k(t,\"TABLE\",{\"data-svelte-h\":!0}),y(f)!==\"svelte-lgcnjl\"&&(f.innerHTML=S),this.h()},h(){H(e,\"id\",\"dependencies\"),H(e,\"tabindex\",\"-1\"),b.a=null,H(l,\"class\",\"language-js\")},m(t,a){o(t,e,a),o(t,p,a),o(t,d,a),o(t,r,a),o(t,l,a),b.m(j,l),o(t,x,a),o(t,i,a),o(t,L,a),o(t,u,a),o(t,T,a),o(t,m,a),o(t,w,a),o(t,f,a)},p:G,d(t){t&&(s(e),s(p),s(d),s(r),s(l),s(x),s(i),s(L),s(u),s(T),s(m),s(w),s(f))}}}function X(_){let e,c;const p=[_[0]];let d={$$slots:{default:[V]},$$scope:{ctx:_}};for(let n=0;n<p.length;n+=1)d=C(d,p[n]);return e=new Q({props:d}),{c(){N(e.$$.fragment)},l(n){R(e.$$.fragment,n)},m(n,r){U(e,n,r),c=!0},p(n,[r]){const l=r&1?K(p,[O(n[0])]):{};r&2&&(l.$$scope={dirty:r,ctx:n}),e.$set(l)},i(n){c||(W(e.$$.fragment,n),c=!0)},o(n){F(e.$$.fragment,n),c=!1},d(n){J(e,n)}}}function Y(_,e,c){return _.$$set=p=>{c(0,e=C(C({},e),q(p)))},e=q(e),[e]}class at extends B{constructor(e){super(),A(this,e,Y,X,I,{})}}export{at as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/12.BW2Gnzwn.js",
    "content": "var A=Object.defineProperty;var N=(o,n,t)=>n in o?A(o,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[n]=t;var $=(o,n,t)=>(N(o,typeof n!=\"symbol\"?n+\"\":n,t),t);import{s as z,e as h,a as v,c as b,b as C,y as D,f as d,g as y,r as _,i as g,h as E,B as V,C as P,o as R,p as I,H as q,z as X,n as Y}from\"../chunks/scheduler.lruobs1Y.js\";import{S as B,i as G,b as T,d as H,m as M,a as S,t as j,e as L}from\"../chunks/index.DyGm78TJ.js\";import{g as U,a as W}from\"../chunks/spread.CgU5AtxT.js\";import{L as F}from\"../chunks/layout.zjTtpqzV.js\";import{u as J,g as K,i as Q,b as Z,t as O,a as nn,S as tn}from\"../chunks/index.Up5bhyj0.js\";const sn={enabled:!0,elementContent:()=>{const o=document.createElement(\"div\");return o.innerHTML=\"New Task\",Object.assign(o.style,{position:\"absolute\",background:\"#eee\",padding:\"0.5em 1em\",fontSize:\"12px\",pointerEvents:\"none\"}),o}};class an{constructor(n,t){$(this,\"draggable\");$(this,\"element\");$(this,\"options\");this.options=Object.assign({},sn,t),this.draggable=J(n,{onDrag:this.onDrag.bind(this),dragAllowed:()=>this.options.enabled,resizeAllowed:!1,onDrop:this.onDrop.bind(this),container:document.body,getX:a=>a.pageX,getY:a=>a.pageY,getWidth:()=>0})}onDrag({x:n,y:t}){this.element||(this.element=this.options.elementContent(),document.body.appendChild(this.element),this.options.dragging=!0),this.element.style.top=t+\"px\",this.element.style.left=n+\"px\"}onDrop(n){var s,p,c,i;const t=this.options.gantt,a=K(n.mouseEvent),l=t.getRow(a);if(l&&Q(l.model)){const r=Z(t.getRowContainer(),n.mouseEvent),u=t.utils.getDateByPosition(r.x);(p=(s=this.options).onsuccess)==null||p.call(s,l,u,t)}else(i=(c=this.options).onfail)==null||i.call(c);document.body.removeChild(this.element),this.options.dragging=!1,this.element=null}}function en(o){let n,t,a,l=\"Drag to gantt\",s,p,c,i={from:O(\"8:00\"),to:O(\"14:00\"),tasks:o[2],rows:[{id:1,label:\"Resource #1\"},{id:2,label:\"Resource #2\"},{id:3,label:\"Resource #3\"},{id:4,label:\"Resource #4\"}],ganttTableModules:[nn]};return p=new tn({props:i}),o[4](p),{c(){n=h(\"div\"),t=h(\"div\"),a=h(\"div\"),a.textContent=l,s=v(),T(p.$$.fragment),this.h()},l(r){n=b(r,\"DIV\",{class:!0});var u=C(n);t=b(u,\"DIV\",{class:!0});var k=C(t);a=b(k,\"DIV\",{class:!0,\"data-svelte-h\":!0}),D(a)!==\"svelte-1r31gjq\"&&(a.textContent=l),k.forEach(d),s=y(u),H(p.$$.fragment,u),u.forEach(d),this.h()},h(){_(a,\"class\",\"px-2 border bg-slate-100 select-none\"),_(t,\"class\",\"flex p-2 border-b\"),_(n,\"class\",\"border\")},m(r,u){g(r,n,u),E(n,t),E(t,a),o[3](a),E(n,s),M(p,n,null),c=!0},p(r,[u]){const k={};u&4&&(k.tasks=r[2]),p.$set(k)},i(r){c||(S(p.$$.fragment,r),c=!0)},o(r){j(p.$$.fragment,r),c=!1},d(r){r&&d(n),o[3](null),o[4](null),L(p)}}}function on(o,n,t){let a,l,s=[];V(()=>{new an(a,{gantt:l,onsuccess:(i,r,u)=>{console.log(\"success\"),t(2,s=[...s,{id:s.length,resourceId:i.model.id,label:\"New task\",from:r,to:r+60*60*1e3}])},onfail:()=>{}})});function p(i){P[i?\"unshift\":\"push\"](()=>{a=i,t(0,a)})}function c(i){P[i?\"unshift\":\"push\"](()=>{l=i,t(1,l)})}return[a,l,s,p,c]}class pn extends B{constructor(n){super(),G(this,n,on,en,z,{})}}function ln(o){let n,t='External draggable<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#external-draggable\">#</a>',a,l,s=\"Enables external DOM elements to be draggable to svelte-gantt. Useful for creating new tasks:\",p,c,i,r=`<code class=\"language-js\"><span class=\"token keyword\">new</span> <span class=\"token class-name\">SvelteGanttExternal</span><span class=\"token punctuation\">(</span>\n    <span class=\"token comment\">// external DOM element</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'newTaskButton'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token comment\">// options</span>\n    <span class=\"token punctuation\">&#123;</span>\n        <span class=\"token comment\">// reference to instance of svelte-gantt</span>\n        gantt<span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// if enabled</span>\n        <span class=\"token literal-property property\">enabled</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// success callback</span>\n        <span class=\"token comment\">// row: row element was dropped on</span>\n        <span class=\"token comment\">// date: date element was dropped on</span>\n        <span class=\"token comment\">// gantt: instance of svelte-gantt</span>\n        <span class=\"token function-variable function\">onsuccess</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">row<span class=\"token punctuation\">,</span> date<span class=\"token punctuation\">,</span> gantt</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token comment\">// here you can add a task to row, see './public/main.js'</span>\n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// called when dragged outside main gantt area</span>\n        <span class=\"token function-variable function\">onfail</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span><span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// factory function, creates HTMLElement that will follow the mouse</span>\n        <span class=\"token function-variable function\">elementContent</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token keyword\">const</span> element <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'div'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            element<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">=</span> <span class=\"token string\">'New Task'</span><span class=\"token punctuation\">;</span>\n            Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>element<span class=\"token punctuation\">.</span>style<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">&#123;</span>\n                <span class=\"token literal-property property\">position</span><span class=\"token operator\">:</span> <span class=\"token string\">'absolute'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">background</span><span class=\"token operator\">:</span> <span class=\"token string\">'#eee'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">padding</span><span class=\"token operator\">:</span> <span class=\"token string\">'0.5em 1em'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">fontSize</span><span class=\"token operator\">:</span> <span class=\"token string\">'12px'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">pointerEvents</span><span class=\"token operator\">:</span> <span class=\"token string\">'none'</span>\n            <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span> element<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">&#125;</span>\n    <span class=\"token punctuation\">&#125;</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,u,k,w,f,x;return f=new pn({}),{c(){n=h(\"h1\"),n.innerHTML=t,a=v(),l=h(\"p\"),l.textContent=s,p=v(),c=h(\"pre\"),i=new q(!1),u=v(),k=h(\"hr\"),w=v(),T(f.$$.fragment),this.h()},l(e){n=b(e,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),D(n)!==\"svelte-17nt48i\"&&(n.innerHTML=t),a=y(e),l=b(e,\"P\",{\"data-svelte-h\":!0}),D(l)!==\"svelte-9075e2\"&&(l.textContent=s),p=y(e),c=b(e,\"PRE\",{class:!0});var m=C(c);i=X(m,!1),m.forEach(d),u=y(e),k=b(e,\"HR\",{}),w=y(e),H(f.$$.fragment,e),this.h()},h(){_(n,\"id\",\"external-draggable\"),_(n,\"tabindex\",\"-1\"),i.a=null,_(c,\"class\",\"language-js\")},m(e,m){g(e,n,m),g(e,a,m),g(e,l,m),g(e,p,m),g(e,c,m),i.m(r,c),g(e,u,m),g(e,k,m),g(e,w,m),M(f,e,m),x=!0},p:Y,i(e){x||(S(f.$$.fragment,e),x=!0)},o(e){j(f.$$.fragment,e),x=!1},d(e){e&&(d(n),d(a),d(l),d(p),d(c),d(u),d(k),d(w)),L(f,e)}}}function cn(o){let n,t;const a=[o[0]];let l={$$slots:{default:[ln]},$$scope:{ctx:o}};for(let s=0;s<a.length;s+=1)l=R(l,a[s]);return n=new F({props:l}),{c(){T(n.$$.fragment)},l(s){H(n.$$.fragment,s)},m(s,p){M(n,s,p),t=!0},p(s,[p]){const c=p&1?U(a,[W(s[0])]):{};p&2&&(c.$$scope={dirty:p,ctx:s}),n.$set(c)},i(s){t||(S(n.$$.fragment,s),t=!0)},o(s){j(n.$$.fragment,s),t=!1},d(s){L(n,s)}}}function rn(o,n,t){return o.$$set=a=>{t(0,n=R(R({},n),I(a)))},n=I(n),[n]}class hn extends B{constructor(n){super(),G(this,n,rn,cn,z,{})}}export{hn as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/13.Dz4XkGv4.js",
    "content": "import{s as W,e as d,c as m,b as B,f as p,r as y,i as r,n as F,o as M,p as N,a as h,H as Q,y as v,g,z as X}from\"../chunks/scheduler.lruobs1Y.js\";import{S as J,i as K,b as R,d as G,m as P,a as j,t as E,e as q}from\"../chunks/index.DyGm78TJ.js\";import{g as Y,a as I}from\"../chunks/spread.CgU5AtxT.js\";import{L as Z}from\"../chunks/layout.zjTtpqzV.js\";import{S as tt,t as U,a as et}from\"../chunks/index.Up5bhyj0.js\";function at(u){let e,l,o;return l=new tt({props:{from:U(\"8:00\"),to:U(\"14:00\"),tableHeaders:[{title:\"Name\",property:\"label\",width:150},{title:\"Age\",property:\"age\",width:50}],rows:[{id:1,label:\"Resource #1\",age:50},{id:2,label:\"Resource #2\",age:43},{id:3,label:\"Resource #3\",age:23},{id:4,label:\"Resource #4\",age:65}],ganttTableModules:[et]}}),{c(){e=d(\"div\"),R(l.$$.fragment),this.h()},l(n){e=m(n,\"DIV\",{class:!0});var a=B(e);G(l.$$.fragment,a),a.forEach(p),this.h()},h(){y(e,\"class\",\"border\")},m(n,a){r(n,e,a),P(l,e,null),o=!0},p:F,i(n){o||(j(l.$$.fragment,n),o=!0)},o(n){E(l.$$.fragment,n),o=!1},d(n){n&&p(e),q(l)}}}class nt extends J{constructor(e){super(),K(this,e,null,at,W,{})}}function st(u){let e,l='Table<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#table\">#</a>',o,n,a=\"Display row information in a table on the side.\",i,c,z='Table Header<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#table-header\">#</a>',$,f,A=\"Represents a single column rendered in SvelteGanttTable.\",x,k,D=\"<li><code>title</code> (<code>string</code>) Label to display in the table column header.</li> <li><code>property</code> (<code>string</code>) Property of row to display in table column cells.</li> <li><code>width</code> (<code>number</code>) Width of table column, in px.</li>\",T,_,w,H,C,b,L,O=`<code class=\"language-js\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> SvelteGantt<span class=\"token punctuation\">,</span> SvelteGanttTable <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// ...</span>\n\ngantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    <span class=\"token literal-property property\">tableHeaders</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'Name'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">property</span><span class=\"token operator\">:</span> <span class=\"token string\">'label'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">width</span><span class=\"token operator\">:</span> <span class=\"token number\">150</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'Age'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">property</span><span class=\"token operator\">:</span> <span class=\"token string\">'age'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">width</span><span class=\"token operator\">:</span> <span class=\"token number\">50</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">ganttTableModules</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>SvelteGanttTable<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,S;return _=new nt({}),{c(){e=d(\"h1\"),e.innerHTML=l,o=h(),n=d(\"p\"),n.textContent=a,i=h(),c=d(\"h2\"),c.innerHTML=z,$=h(),f=d(\"p\"),f.textContent=A,x=h(),k=d(\"ul\"),k.innerHTML=D,T=h(),R(_.$$.fragment),w=h(),H=d(\"hr\"),C=h(),b=d(\"pre\"),L=new Q(!1),this.h()},l(t){e=m(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),v(e)!==\"svelte-3iqkg0\"&&(e.innerHTML=l),o=g(t),n=m(t,\"P\",{\"data-svelte-h\":!0}),v(n)!==\"svelte-1w7o6c1\"&&(n.textContent=a),i=g(t),c=m(t,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),v(c)!==\"svelte-pfl7on\"&&(c.innerHTML=z),$=g(t),f=m(t,\"P\",{\"data-svelte-h\":!0}),v(f)!==\"svelte-1khqzyf\"&&(f.textContent=A),x=g(t),k=m(t,\"UL\",{\"data-svelte-h\":!0}),v(k)!==\"svelte-5ju2yx\"&&(k.innerHTML=D),T=g(t),G(_.$$.fragment,t),w=g(t),H=m(t,\"HR\",{}),C=g(t),b=m(t,\"PRE\",{class:!0});var s=B(b);L=X(s,!1),s.forEach(p),this.h()},h(){y(e,\"id\",\"table\"),y(e,\"tabindex\",\"-1\"),y(c,\"id\",\"table-header\"),y(c,\"tabindex\",\"-1\"),L.a=null,y(b,\"class\",\"language-js\")},m(t,s){r(t,e,s),r(t,o,s),r(t,n,s),r(t,i,s),r(t,c,s),r(t,$,s),r(t,f,s),r(t,x,s),r(t,k,s),r(t,T,s),P(_,t,s),r(t,w,s),r(t,H,s),r(t,C,s),r(t,b,s),L.m(O,b),S=!0},p:F,i(t){S||(j(_.$$.fragment,t),S=!0)},o(t){E(_.$$.fragment,t),S=!1},d(t){t&&(p(e),p(o),p(n),p(i),p(c),p($),p(f),p(x),p(k),p(T),p(w),p(H),p(C),p(b)),q(_,t)}}}function lt(u){let e,l;const o=[u[0],V];let n={$$slots:{default:[st]},$$scope:{ctx:u}};for(let a=0;a<o.length;a+=1)n=M(n,o[a]);return e=new Z({props:n}),{c(){R(e.$$.fragment)},l(a){G(e.$$.fragment,a)},m(a,i){P(e,a,i),l=!0},p(a,[i]){const c=i&1?Y(o,[i&1&&I(a[0]),i&0&&I(V)]):{};i&2&&(c.$$scope={dirty:i,ctx:a}),e.$set(c)},i(a){l||(j(e.$$.fragment,a),l=!0)},o(a){E(e.$$.fragment,a),l=!1},d(a){q(e,a)}}}const V={title:\"Table\",headers:null};function pt(u,e,l){return u.$$set=o=>{l(0,e=M(M({},e),N(o)))},e=N(e),[e]}class dt extends J{constructor(e){super(),K(this,e,pt,lt,W,{})}}export{dt as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/14.CPQ9PDjB.js",
    "content": "import{s as P,o as T,p as k,e as _,a as v,c as g,y as p,g as x,r as L,i as o,n as j,f as s}from\"../chunks/scheduler.lruobs1Y.js\";import{S as D,i as S,b as q,d as A,m as B,a as E,t as N,e as O}from\"../chunks/index.DyGm78TJ.js\";import{g as U,a as z}from\"../chunks/spread.CgU5AtxT.js\";import{L as F}from\"../chunks/layout.zjTtpqzV.js\";function G(f){let t,c='Columns<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#columns\">#</a>',d,i,n=\"eg. <code>columnUnit: &#39;minute&#39;, columnOffset: 15</code> will create a column for every 15 minutes.\",r,a,C='Highlighted durations<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#highlighted-durations\">#</a>',y,u,M=\"Highlight a repeating block of time spanning all rows:\",H,h,$='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>unit</code></td> <td><code>string</code></td> <td>Time unit of duration, e.g. <code>&#39;day&#39;</code>.</td> <td align=\"right\"></td></tr> <tr><td><code>fractions</code></td> <td><code>number[]</code></td> <td>List of fractions that should be highlighted, e.g. <code>{unit: &#39;day&#39;, fractions: [0,6]}</code> will highlight weekends.</td> <td align=\"right\"></td></tr></tbody>',b,m,w=\"Highlighting will only work correctly if <code>useCanvasColumns</code> is set to <code>false</code>, and if highlighted unit is the same or a constant fraction of the column unit eg. <code>day</code>, <code>hour</code>, <code>minute</code>.\";return{c(){t=_(\"h1\"),t.innerHTML=c,d=v(),i=_(\"p\"),i.innerHTML=n,r=v(),a=_(\"h2\"),a.innerHTML=C,y=v(),u=_(\"p\"),u.textContent=M,H=v(),h=_(\"table\"),h.innerHTML=$,b=v(),m=_(\"p\"),m.innerHTML=w,this.h()},l(e){t=g(e,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),p(t)!==\"svelte-5lxwj9\"&&(t.innerHTML=c),d=x(e),i=g(e,\"P\",{\"data-svelte-h\":!0}),p(i)!==\"svelte-gb53n8\"&&(i.innerHTML=n),r=x(e),a=g(e,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),p(a)!==\"svelte-lakx3g\"&&(a.innerHTML=C),y=x(e),u=g(e,\"P\",{\"data-svelte-h\":!0}),p(u)!==\"svelte-ndc96x\"&&(u.textContent=M),H=x(e),h=g(e,\"TABLE\",{\"data-svelte-h\":!0}),p(h)!==\"svelte-1v1kn7x\"&&(h.innerHTML=$),b=x(e),m=g(e,\"P\",{\"data-svelte-h\":!0}),p(m)!==\"svelte-j4s1nm\"&&(m.innerHTML=w),this.h()},h(){L(t,\"id\",\"columns\"),L(t,\"tabindex\",\"-1\"),L(a,\"id\",\"highlighted-durations\"),L(a,\"tabindex\",\"-1\")},m(e,l){o(e,t,l),o(e,d,l),o(e,i,l),o(e,r,l),o(e,a,l),o(e,y,l),o(e,u,l),o(e,H,l),o(e,h,l),o(e,b,l),o(e,m,l)},p:j,d(e){e&&(s(t),s(d),s(i),s(r),s(a),s(y),s(u),s(H),s(h),s(b),s(m))}}}function I(f){let t,c;const d=[f[0]];let i={$$slots:{default:[G]},$$scope:{ctx:f}};for(let n=0;n<d.length;n+=1)i=T(i,d[n]);return t=new F({props:i}),{c(){q(t.$$.fragment)},l(n){A(t.$$.fragment,n)},m(n,r){B(t,n,r),c=!0},p(n,[r]){const a=r&1?U(d,[z(n[0])]):{};r&2&&(a.$$scope={dirty:r,ctx:n}),t.$set(a)},i(n){c||(E(t.$$.fragment,n),c=!0)},o(n){N(t.$$.fragment,n),c=!1},d(n){O(t,n)}}}function J(f,t,c){return f.$$set=d=>{c(0,t=T(T({},t),k(d)))},t=k(t),[t]}class W extends D{constructor(t){super(),S(this,t,J,I,P,{})}}export{W as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/15.BOQPdaD3.js",
    "content": "import{s as ba,o as ad,p as ka,e as n,a,H as Xe,t as _,c as d,y as i,g as o,b as m,z as Ye,f as r,d as k,r as f,i as p,h as t}from\"../chunks/scheduler.lruobs1Y.js\";import{S as $a,i as Ca,b as kt,d as Ht,m as Mt,a as Lt,t as xt,e as bt}from\"../chunks/index.DyGm78TJ.js\";import{g as wa,a as ya}from\"../chunks/spread.CgU5AtxT.js\";import{L as Ra}from\"../chunks/layout.zjTtpqzV.js\";import{A as ge}from\"../chunks/A.201zTarD.js\";function Da(v){let u;return{c(){u=_(\"highlighting durations\")},l(h){u=k(h,\"highlighting durations\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function ja(v){let u;return{c(){u=_(\"columns\")},l(h){u=k(h,\"columns\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function Ea(v){let u;return{c(){u=_(\"columns\")},l(h){u=k(h,\"columns\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function Sa(v){let u;return{c(){u=_(\"Date adapter\")},l(h){u=k(h,\"Date adapter\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function Aa(v){let u;return{c(){u=_(\"Task element hook\")},l(h){u=k(h,\"Task element hook\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function Pa(v){let u;return{c(){u=_(\"layout\")},l(h){u=k(h,\"layout\")},m(h,g){p(h,u,g)},d(h){h&&r(u)}}}function qa(v){let u,h='Gantt<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#gantt\">#</a>',g,H,T=\"Pass options object as <code>props</code> to the SvelteGantt constructor.\",R,D,_e,Ha=`<code class=\"language-js\"><span class=\"token keyword\">const</span> gantt <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">SvelteGantt</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span> \n    <span class=\"token literal-property property\">target</span><span class=\"token operator\">:</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'example-gantt'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> \n    <span class=\"token literal-property property\">props</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">&#123;</span> \n        <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">&#125;</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,ke,K,od=\"To update use <code>$set</code>, eg.\",He,Q,Me,Ma=`<code class=\"language-js\">gantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,Le,z,$t,sd='<tr><th>Name</th> <th>Description</th> <th>Type</th> <th align=\"right\">Default</th></tr>',Je,s,Ct,ld='<td><code>rows</code></td> <td><code>Array</code></td> <td>Rows to load in the gantt, see below.</td> <td align=\"right\">undefined</td>',Ke,wt,rd='<td><code>tasks</code></td> <td><code>Array</code></td> <td>Tasks that display in the gantt, see below.</td> <td align=\"right\">undefined</td>',Qe,yt,id='<td><code>timeRanges</code></td> <td><code>Array</code></td> <td>Timeranges that display in the gantt, see below.</td> <td align=\"right\">undefined</td>',Ve,Rt,cd='<td><code>dependencies</code></td> <td><code>Array</code></td> <td>Dependencies that display in the gantt, used with the SvelteGanttDependencies module, see below.</td> <td align=\"right\">undefined</td>',Ze,Dt,ud='<td><code>from</code></td> <td><code>Moment</code></td> <td>Datetime timeline starts on.</td> <td align=\"right\">undefined</td>',tn,jt,pd='<td><code>to</code></td> <td><code>Moment</code></td> <td>Datetime timeline ends on.</td> <td align=\"right\">undefined</td>',en,Et,hd='<td><code>minWidth</code></td> <td><code>number</code></td> <td>Minimum width of gantt area in px.</td> <td align=\"right\">undefined</td>',nn,St,fd='<td><code>fitWidth</code></td> <td><code>boolean</code></td> <td>Should timeline stretch width to fit.</td> <td align=\"right\">undefined</td>',dn,M,At,gd=\"<code>highlightedDurations</code>\",an,Pt,Td=\"<code>Object</code>\",on,V,sn,B,ln,rn,Z,vd=\"undefined\",cn,qt,md='<td><code>highlightColor</code></td> <td><code>string</code></td> <td>Highlight color (for use with <code>highlightedDurations</code>).</td> <td align=\"right\">undefined</td>',un,Gt,_d='<td><code>magnetUnit</code></td> <td><code>string</code></td> <td>Minimum unit of time task date values will round to.</td> <td align=\"right\">‘minute’</td>',pn,zt,kd='<td><code>magnetOffset</code></td> <td><code>number</code></td> <td>Amount of units task date values will round to.</td> <td align=\"right\">15</td>',hn,L,Bt,Hd=\"<code>columnUnit</code>\",fn,Ot,Md=\"<code>string</code>\",gn,tt,Tn,O,vn,mn,et,Ld=\"‘minute’\",_n,x,Ut,xd=\"<code>columnOffset</code>\",kn,Wt,bd=\"<code>number</code>\",Hn,nt,Mn,U,Ln,xn,dt,$d=\"15\",bn,It,Cd='<td><code>headers</code></td> <td><code>Array</code></td> <td>List of headers used for main gantt area.</td> <td align=\"right\">undefined</td>',$n,b,Nt,wd=\"<code>dateAdapter</code>\",Cn,Ft,yd=\"<code>Object</code>\",wn,Te,W,yn,at,Rd=\"undefined\",Rn,Xt,Dd='<td><code>zoomLevels</code></td> <td><code>Array</code></td> <td>List of zoom levels for gantt. Gantt cycles trough these parameters on ctrl+scroll.</td> <td align=\"right\">undefined</td>',Dn,Yt,jd='<td><code>rowHeight</code></td> <td><code>number</code></td> <td>Height of a single row in px.</td> <td align=\"right\">undefined</td>',jn,Jt,Ed='<td><code>rowPadding</code></td> <td><code>number</code></td> <td>Padding of a single row in px.</td> <td align=\"right\">undefined</td>',En,Kt,Sd='<td><code>ganttTableModules</code></td> <td><code>Array</code></td> <td>Modules used in gantt table area. eg. <code>[SvelteGanttTable]</code></td> <td align=\"right\">undefined</td>',Sn,Qt,Ad='<td><code>ganttBodyModules</code></td> <td><code>Array</code></td> <td>Modules used in gantt body area. eg. <code>[SvelteGanttDependencies]</code></td> <td align=\"right\">undefined</td>',An,Vt,Pd='<td><code>reflectOnParentRows</code></td> <td><code>boolean</code></td> <td>When task is assigned to a child row display them on parent rows as well, used when rows are disabled as a tree.</td> <td align=\"right\">undefined</td>',Pn,Zt,qd='<td><code>reflectOnChildRows</code></td> <td><code>boolean</code></td> <td>When task is assigned to a parent row display them on child rows as well, used when rows are disabled as a tree.</td> <td align=\"right\">undefined</td>',qn,te,Gd='<td><code>classes</code></td> <td><code>string</code>|<code>Array</code></td> <td>Custom CSS classes to apply to gantt.</td> <td align=\"right\">undefined</td>',Gn,ee,zd='<td><code>resizeHandleWidth</code></td> <td><code>number</code></td> <td>Width of handle for resizing tasks, in px.</td> <td align=\"right\">undefined</td>',zn,ne,Bd='<td><code>onTaskButtonClick</code></td> <td><code>(task: Task) =&gt; void</code></td> <td>Callback for task button clicks.</td> <td align=\"right\">undefined</td>',Bn,de,Od='<td><code>taskContent</code></td> <td><code>(task: Task) =&gt; string</code></td> <td>Task content factory function.</td> <td align=\"right\">undefined</td>',On,$,ae,Ud=\"<code>taskElementHook</code>\",Un,oe,Wd=\"<code>Function</code>\",Wn,ve,I,In,ot,Id=\"undefined\",Nn,se,Nd='<td><code>tableWidth</code></td> <td><code>number</code></td> <td>Width of table, used with SvelteGanttTable module.</td> <td align=\"right\">undefined</td>',Fn,le,Fd='<td><code>tableHeaders</code></td> <td><code>Array</code></td> <td>Headers of table, used with SvelteGanttTable module.</td> <td align=\"right\">undefined</td>',Xn,re,Xd='<td><code>columnStrokeColor</code></td> <td><code>string</code></td> <td>Color of column lines. eg. <code>&#39;#efefef&#39;</code></td> <td align=\"right\">undefined</td>',Yn,ie,Yd='<td><code>columnStrokeWidth</code></td> <td><code>number</code></td> <td>Width of column lines.</td> <td align=\"right\">undefined</td>',Jn,C,ce,Jd=\"<code>layout</code>\",Kn,ue,Kd=\"<code>&#39;overlap&#39;</code>, <code>&#39;pack&#39;</code>, <code>&#39;expand&#39;</code>\",Qn,st,Vn,N,Zn,td,lt,Qd=\"undefined\",ed,pe,Vd='<td><code>enableCreateTask</code></td> <td><code>boolean</code></td> <td>Enables creating new tasks by dragging.</td> <td align=\"right\">undefined</td>',nd,he,Zd='<td><code>onCreateTask</code></td> <td><code>({ from: number; to: number; resourceId: string number; }) =&gt; TaskModel</code></td> <td>This function provides the new task model when dragging to create task.</td> <td align=\"right\">undefined</td>',dd,fe,ta='<td><code>onCreatedTask</code></td> <td><code>(task: SvelteTask) =&gt; void</code></td> <td>Called after task was created by dragging.</td> <td align=\"right\">undefined</td>',xe,j,ea='TaskContent<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#taskcontent\">#</a>',be,rt,na=\"eg.\",$e,it,Ce,La='<code class=\"language-js\"><span class=\"token punctuation\">(</span><span class=\"token parameter\">task</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">&#96;</span><span class=\"token string\">&lt;div>Task </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$&#123;</span>task<span class=\"token punctuation\">.</span>model<span class=\"token punctuation\">.</span>label<span class=\"token interpolation-punctuation punctuation\">&#125;</span></span><span class=\"token string\">&lt;/div></span><span class=\"token template-punctuation string\">&#96;</span></span></code>',we,E,da='Layout<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#layout\">#</a>',ye,ct,aa=\"Layout can be one of the following:\",Re,ut,oa=\"<li><code>&#39;overlap&#39;</code> Overlapping tasks display one over another (default).</li> <li><code>&#39;pack&#39;</code> Overlapping tasks shrink and display one above another.</li> <li><code>&#39;expand&#39;</code> Overlapping tasks display one above another and make the row expand.</li>\",De,S,sa='DateAdapter<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#dateadapter\">#</a>',je,pt,la=\"A date adapter is an object of interface <code>{ format(date: number, format: string): string; }</code> that formats a date in UNIX miliseconds to a string using the specified format template, eg. ‘MMMM Do’.\",Ee,A,ra='Methods<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#methods\">#</a>',Se,ht,ia='<thead><tr><th>Name</th> <th></th> <th>Type</th> <th align=\"right\">Description</th></tr></thead> <tbody><tr><td><code>selectTask(id)</code></td> <td></td> <td></td> <td align=\"right\">Selects task by id.</td></tr> <tr><td></td> <td><code>id</code></td> <td><code>number</code>|<code>string</code></td> <td align=\"right\">Id of task</td></tr> <tr><td><code>unselectTasks()</code></td> <td></td> <td></td> <td align=\"right\">Unselects tasks.</td></tr> <tr><td><code>scrollToTask(id, scrollBehavior)</code></td> <td></td> <td></td> <td align=\"right\">Scrolls the view to a task.</td></tr> <tr><td></td> <td><code>id</code></td> <td><code>number</code>|<code>string</code></td> <td align=\"right\">Id of task</td></tr> <tr><td></td> <td><code>scrollBehaviour</code></td> <td><code>string</code></td> <td align=\"right\"><code>auto</code> or <code>smooth</code>.</td></tr> <tr><td><code>scrollToRow(id, scrollBehavior)</code></td> <td></td> <td></td> <td align=\"right\">Scrolls the view to a row.</td></tr> <tr><td></td> <td><code>id</code></td> <td><code>number</code>|<code>string</code></td> <td align=\"right\">Id of row</td></tr> <tr><td></td> <td><code>scrollBehaviour</code></td> <td><code>string</code></td> <td align=\"right\"><code>auto</code> or <code>smooth</code>.</td></tr> <tr><td><code>updateTask(model)</code></td> <td></td> <td></td> <td align=\"right\">Updates or inserts task.</td></tr> <tr><td></td> <td><code>model</code></td> <td><code>Task</code></td> <td align=\"right\">Task object</td></tr> <tr><td><code>updateTasks(models)</code></td> <td></td> <td></td> <td align=\"right\">Updates or inserts tasks.</td></tr> <tr><td></td> <td><code>models</code></td> <td><code>Array&lt;Task&gt;</code></td> <td align=\"right\">Task objects</td></tr> <tr><td><code>updateRow(model)</code></td> <td></td> <td></td> <td align=\"right\">Updates or inserts row.</td></tr> <tr><td></td> <td><code>model</code></td> <td><code>Row</code></td> <td align=\"right\">Row object</td></tr> <tr><td><code>updateRows(models)</code></td> <td></td> <td></td> <td align=\"right\">Updates or inserts rows.</td></tr> <tr><td></td> <td><code>models</code></td> <td><code>Array&lt;Row&gt;</code></td> <td align=\"right\">Row objects</td></tr> <tr><td><code>getTask(id)</code></td> <td></td> <td></td> <td align=\"right\">Get task by id.</td></tr> <tr><td></td> <td><code>id</code></td> <td><code>number</code></td> <td align=\"right\"><code>string</code></td></tr> <tr><td><code>getRow(id)</code></td> <td></td> <td></td> <td align=\"right\">Get row by id.</td></tr> <tr><td></td> <td><code>id</code></td> <td><code>number</code></td> <td align=\"right\"><code>string</code></td></tr> <tr><td><code>getTasks(rowId)</code></td> <td></td> <td></td> <td align=\"right\">Get tasks by row id.</td></tr> <tr><td></td> <td><code>rowId</code></td> <td><code>number</code></td> <td align=\"right\"><code>string</code></td></tr></tbody>',Ae,P,ca='Events<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#events\">#</a>',Pe,ft,ua=\"Synchronously run callbacks on specific events. Subscribe to these after gantt is created.\",qe,gt,Ge,xa=`<code class=\"language-js\">gantt<span class=\"token punctuation\">.</span>api<span class=\"token punctuation\">.</span>tasks<span class=\"token punctuation\">.</span>on<span class=\"token punctuation\">.</span><span class=\"token function\">select</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">task</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Listener: task selected'</span><span class=\"token punctuation\">,</span> task<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,ze,q,pa='<code>gantt.api.tasks</code><a class=\"header-anchor\" aria-hidden=\"true\" href=\"#ganttapitasks\">#</a>',Be,Tt,ha=\"<thead><tr><th>Name</th> <th>Data</th> <th>Description</th></tr></thead> <tbody><tr><td><code>move</code></td> <td>[<code>task</code>]</td> <td>Runs while task is moving.</td></tr> <tr><td><code>switchRow</code></td> <td>[<code>task</code>, <code>row</code>, <code>previousRow</code>]</td> <td>Runs when user switches row of task.</td></tr> <tr><td><code>select</code></td> <td>[<code>task</code>]</td> <td>Runs when user selects task.</td></tr> <tr><td><code>moveEnd</code></td> <td>[<code>task</code>]</td> <td>Runs when user stops moving task.</td></tr> <tr><td><code>change</code></td> <td>[<code>task</code>]</td> <td>Runs after dropping a task, before it is updated.</td></tr> <tr><td><code>changed</code></td> <td>[<code>task</code>]</td> <td>Runs after dropping a task, after it is updated.</td></tr></tbody>\",Oe,G,fa='Available modules<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#available-modules\">#</a>',Ue,vt,ga=\"<li><code>SvelteGanttTable</code> Renders a table on the left side of gantt. Needed for row labels.</li> <li><code>SvelteGanttDependencies</code> Renders dependencies between tasks.</li> <li><code>SvelteGanttExternal</code> Enables external DOM elements to be draggable to svelte-gantt. Useful for creating new tasks:</li>\",We;return B=new ge({props:{href:\"/docs/options/columns#highlighted-durations\",$$slots:{default:[Da]},$$scope:{ctx:v}}}),O=new ge({props:{href:\"/docs/options/columns\",$$slots:{default:[ja]},$$scope:{ctx:v}}}),U=new ge({props:{href:\"/docs/options/columns\",$$slots:{default:[Ea]},$$scope:{ctx:v}}}),W=new ge({props:{href:\"#dateadapter\",$$slots:{default:[Sa]},$$scope:{ctx:v}}}),I=new ge({props:{href:\"/docs/data/tasks#taskelementhook\",$$slots:{default:[Aa]},$$scope:{ctx:v}}}),N=new ge({props:{href:\"#layout\",$$slots:{default:[Pa]},$$scope:{ctx:v}}}),{c(){u=n(\"h1\"),u.innerHTML=h,g=a(),H=n(\"p\"),H.innerHTML=T,R=a(),D=n(\"pre\"),_e=new Xe(!1),ke=a(),K=n(\"p\"),K.innerHTML=od,He=a(),Q=n(\"pre\"),Me=new Xe(!1),Le=a(),z=n(\"table\"),$t=n(\"thead\"),$t.innerHTML=sd,Je=a(),s=n(\"tbody\"),Ct=n(\"tr\"),Ct.innerHTML=ld,Ke=a(),wt=n(\"tr\"),wt.innerHTML=rd,Qe=a(),yt=n(\"tr\"),yt.innerHTML=id,Ve=a(),Rt=n(\"tr\"),Rt.innerHTML=cd,Ze=a(),Dt=n(\"tr\"),Dt.innerHTML=ud,tn=a(),jt=n(\"tr\"),jt.innerHTML=pd,en=a(),Et=n(\"tr\"),Et.innerHTML=hd,nn=a(),St=n(\"tr\"),St.innerHTML=fd,dn=a(),M=n(\"tr\"),At=n(\"td\"),At.innerHTML=gd,an=a(),Pt=n(\"td\"),Pt.innerHTML=Td,on=a(),V=n(\"td\"),sn=_(\"Pattern for \"),kt(B.$$.fragment),ln=_(\".\"),rn=a(),Z=n(\"td\"),Z.textContent=vd,cn=a(),qt=n(\"tr\"),qt.innerHTML=md,un=a(),Gt=n(\"tr\"),Gt.innerHTML=_d,pn=a(),zt=n(\"tr\"),zt.innerHTML=kd,hn=a(),L=n(\"tr\"),Bt=n(\"td\"),Bt.innerHTML=Hd,fn=a(),Ot=n(\"td\"),Ot.innerHTML=Md,gn=a(),tt=n(\"td\"),Tn=_(\"Duration unit of \"),kt(O.$$.fragment),vn=_(\".\"),mn=a(),et=n(\"td\"),et.textContent=Ld,_n=a(),x=n(\"tr\"),Ut=n(\"td\"),Ut.innerHTML=xd,kn=a(),Wt=n(\"td\"),Wt.innerHTML=bd,Hn=a(),nt=n(\"td\"),Mn=_(\"Duration width of \"),kt(U.$$.fragment),Ln=_(\".\"),xn=a(),dt=n(\"td\"),dt.textContent=$d,bn=a(),It=n(\"tr\"),It.innerHTML=Cd,$n=a(),b=n(\"tr\"),Nt=n(\"td\"),Nt.innerHTML=wd,Cn=a(),Ft=n(\"td\"),Ft.innerHTML=yd,wn=a(),Te=n(\"td\"),kt(W.$$.fragment),yn=a(),at=n(\"td\"),at.textContent=Rd,Rn=a(),Xt=n(\"tr\"),Xt.innerHTML=Dd,Dn=a(),Yt=n(\"tr\"),Yt.innerHTML=jd,jn=a(),Jt=n(\"tr\"),Jt.innerHTML=Ed,En=a(),Kt=n(\"tr\"),Kt.innerHTML=Sd,Sn=a(),Qt=n(\"tr\"),Qt.innerHTML=Ad,An=a(),Vt=n(\"tr\"),Vt.innerHTML=Pd,Pn=a(),Zt=n(\"tr\"),Zt.innerHTML=qd,qn=a(),te=n(\"tr\"),te.innerHTML=Gd,Gn=a(),ee=n(\"tr\"),ee.innerHTML=zd,zn=a(),ne=n(\"tr\"),ne.innerHTML=Bd,Bn=a(),de=n(\"tr\"),de.innerHTML=Od,On=a(),$=n(\"tr\"),ae=n(\"td\"),ae.innerHTML=Ud,Un=a(),oe=n(\"td\"),oe.innerHTML=Wd,Wn=a(),ve=n(\"td\"),kt(I.$$.fragment),In=a(),ot=n(\"td\"),ot.textContent=Id,Nn=a(),se=n(\"tr\"),se.innerHTML=Nd,Fn=a(),le=n(\"tr\"),le.innerHTML=Fd,Xn=a(),re=n(\"tr\"),re.innerHTML=Xd,Yn=a(),ie=n(\"tr\"),ie.innerHTML=Yd,Jn=a(),C=n(\"tr\"),ce=n(\"td\"),ce.innerHTML=Jd,Kn=a(),ue=n(\"td\"),ue.innerHTML=Kd,Qn=a(),st=n(\"td\"),Vn=_(\"The \"),kt(N.$$.fragment),Zn=_(\" used to arrange tasks in a row.\"),td=a(),lt=n(\"td\"),lt.textContent=Qd,ed=a(),pe=n(\"tr\"),pe.innerHTML=Vd,nd=a(),he=n(\"tr\"),he.innerHTML=Zd,dd=a(),fe=n(\"tr\"),fe.innerHTML=ta,xe=a(),j=n(\"h3\"),j.innerHTML=ea,be=a(),rt=n(\"p\"),rt.textContent=na,$e=a(),it=n(\"pre\"),Ce=new Xe(!1),we=a(),E=n(\"h3\"),E.innerHTML=da,ye=a(),ct=n(\"p\"),ct.textContent=aa,Re=a(),ut=n(\"ul\"),ut.innerHTML=oa,De=a(),S=n(\"h3\"),S.innerHTML=sa,je=a(),pt=n(\"p\"),pt.innerHTML=la,Ee=a(),A=n(\"h2\"),A.innerHTML=ra,Se=a(),ht=n(\"table\"),ht.innerHTML=ia,Ae=a(),P=n(\"h2\"),P.innerHTML=ca,Pe=a(),ft=n(\"p\"),ft.textContent=ua,qe=a(),gt=n(\"pre\"),Ge=new Xe(!1),ze=a(),q=n(\"h3\"),q.innerHTML=pa,Be=a(),Tt=n(\"table\"),Tt.innerHTML=ha,Oe=a(),G=n(\"h2\"),G.innerHTML=fa,Ue=a(),vt=n(\"ul\"),vt.innerHTML=ga,this.h()},l(e){u=d(e,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(u)!==\"svelte-11xw80u\"&&(u.innerHTML=h),g=o(e),H=d(e,\"P\",{\"data-svelte-h\":!0}),i(H)!==\"svelte-1tzmyha\"&&(H.innerHTML=T),R=o(e),D=d(e,\"PRE\",{class:!0});var c=m(D);_e=Ye(c,!1),c.forEach(r),ke=o(e),K=d(e,\"P\",{\"data-svelte-h\":!0}),i(K)!==\"svelte-10dhyu\"&&(K.innerHTML=od),He=o(e),Q=d(e,\"PRE\",{class:!0});var me=m(Q);Me=Ye(me,!1),me.forEach(r),Le=o(e),z=d(e,\"TABLE\",{});var mt=m(z);$t=d(mt,\"THEAD\",{\"data-svelte-h\":!0}),i($t)!==\"svelte-9d27rb\"&&($t.innerHTML=sd),Je=o(mt),s=d(mt,\"TBODY\",{});var l=m(s);Ct=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Ct)!==\"svelte-10j3ec2\"&&(Ct.innerHTML=ld),Ke=o(l),wt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(wt)!==\"svelte-1ij95le\"&&(wt.innerHTML=rd),Qe=o(l),yt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(yt)!==\"svelte-1dy0uq0\"&&(yt.innerHTML=id),Ve=o(l),Rt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Rt)!==\"svelte-m973gq\"&&(Rt.innerHTML=cd),Ze=o(l),Dt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Dt)!==\"svelte-l21yog\"&&(Dt.innerHTML=ud),tn=o(l),jt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(jt)!==\"svelte-n7k9ri\"&&(jt.innerHTML=pd),en=o(l),Et=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Et)!==\"svelte-vzc3se\"&&(Et.innerHTML=hd),nn=o(l),St=d(l,\"TR\",{\"data-svelte-h\":!0}),i(St)!==\"svelte-102unqw\"&&(St.innerHTML=fd),dn=o(l),M=d(l,\"TR\",{});var w=m(M);At=d(w,\"TD\",{\"data-svelte-h\":!0}),i(At)!==\"svelte-ne05mj\"&&(At.innerHTML=gd),an=o(w),Pt=d(w,\"TD\",{\"data-svelte-h\":!0}),i(Pt)!==\"svelte-cphmjm\"&&(Pt.innerHTML=Td),on=o(w),V=d(w,\"TD\",{});var _t=m(V);sn=k(_t,\"Pattern for \"),Ht(B.$$.fragment,_t),ln=k(_t,\".\"),_t.forEach(r),rn=o(w),Z=d(w,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(Z)!==\"svelte-19hhiyk\"&&(Z.textContent=vd),w.forEach(r),cn=o(l),qt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(qt)!==\"svelte-gl00kf\"&&(qt.innerHTML=md),un=o(l),Gt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Gt)!==\"svelte-4nqkpa\"&&(Gt.innerHTML=_d),pn=o(l),zt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(zt)!==\"svelte-117cxog\"&&(zt.innerHTML=kd),hn=o(l),L=d(l,\"TR\",{});var y=m(L);Bt=d(y,\"TD\",{\"data-svelte-h\":!0}),i(Bt)!==\"svelte-6ruc5t\"&&(Bt.innerHTML=Hd),fn=o(y),Ot=d(y,\"TD\",{\"data-svelte-h\":!0}),i(Ot)!==\"svelte-15o39ds\"&&(Ot.innerHTML=Md),gn=o(y),tt=d(y,\"TD\",{});var Ie=m(tt);Tn=k(Ie,\"Duration unit of \"),Ht(O.$$.fragment,Ie),vn=k(Ie,\".\"),Ie.forEach(r),mn=o(y),et=d(y,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(et)!==\"svelte-a8fvh7\"&&(et.textContent=Ld),y.forEach(r),_n=o(l),x=d(l,\"TR\",{});var F=m(x);Ut=d(F,\"TD\",{\"data-svelte-h\":!0}),i(Ut)!==\"svelte-ezwpbo\"&&(Ut.innerHTML=xd),kn=o(F),Wt=d(F,\"TD\",{\"data-svelte-h\":!0}),i(Wt)!==\"svelte-d28sc0\"&&(Wt.innerHTML=bd),Hn=o(F),nt=d(F,\"TD\",{});var Ne=m(nt);Mn=k(Ne,\"Duration width of \"),Ht(U.$$.fragment,Ne),Ln=k(Ne,\".\"),Ne.forEach(r),xn=o(F),dt=d(F,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(dt)!==\"svelte-1ge8rw2\"&&(dt.textContent=$d),F.forEach(r),bn=o(l),It=d(l,\"TR\",{\"data-svelte-h\":!0}),i(It)!==\"svelte-4qeu2c\"&&(It.innerHTML=Cd),$n=o(l),b=d(l,\"TR\",{});var X=m(b);Nt=d(X,\"TD\",{\"data-svelte-h\":!0}),i(Nt)!==\"svelte-warq58\"&&(Nt.innerHTML=wd),Cn=o(X),Ft=d(X,\"TD\",{\"data-svelte-h\":!0}),i(Ft)!==\"svelte-cphmjm\"&&(Ft.innerHTML=yd),wn=o(X),Te=d(X,\"TD\",{});var Ta=m(Te);Ht(W.$$.fragment,Ta),Ta.forEach(r),yn=o(X),at=d(X,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(at)!==\"svelte-19hhiyk\"&&(at.textContent=Rd),X.forEach(r),Rn=o(l),Xt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Xt)!==\"svelte-1mg19tc\"&&(Xt.innerHTML=Dd),Dn=o(l),Yt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Yt)!==\"svelte-yr77js\"&&(Yt.innerHTML=jd),jn=o(l),Jt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Jt)!==\"svelte-12x948u\"&&(Jt.innerHTML=Ed),En=o(l),Kt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Kt)!==\"svelte-14nru7y\"&&(Kt.innerHTML=Sd),Sn=o(l),Qt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Qt)!==\"svelte-60537z\"&&(Qt.innerHTML=Ad),An=o(l),Vt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Vt)!==\"svelte-1ylt871\"&&(Vt.innerHTML=Pd),Pn=o(l),Zt=d(l,\"TR\",{\"data-svelte-h\":!0}),i(Zt)!==\"svelte-tjnlm5\"&&(Zt.innerHTML=qd),qn=o(l),te=d(l,\"TR\",{\"data-svelte-h\":!0}),i(te)!==\"svelte-1lgge3l\"&&(te.innerHTML=Gd),Gn=o(l),ee=d(l,\"TR\",{\"data-svelte-h\":!0}),i(ee)!==\"svelte-430yj9\"&&(ee.innerHTML=zd),zn=o(l),ne=d(l,\"TR\",{\"data-svelte-h\":!0}),i(ne)!==\"svelte-fqwec4\"&&(ne.innerHTML=Bd),Bn=o(l),de=d(l,\"TR\",{\"data-svelte-h\":!0}),i(de)!==\"svelte-28kldz\"&&(de.innerHTML=Od),On=o(l),$=d(l,\"TR\",{});var Y=m($);ae=d(Y,\"TD\",{\"data-svelte-h\":!0}),i(ae)!==\"svelte-jd7ua1\"&&(ae.innerHTML=Ud),Un=o(Y),oe=d(Y,\"TD\",{\"data-svelte-h\":!0}),i(oe)!==\"svelte-1dx797x\"&&(oe.innerHTML=Wd),Wn=o(Y),ve=d(Y,\"TD\",{});var va=m(ve);Ht(I.$$.fragment,va),va.forEach(r),In=o(Y),ot=d(Y,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(ot)!==\"svelte-19hhiyk\"&&(ot.textContent=Id),Y.forEach(r),Nn=o(l),se=d(l,\"TR\",{\"data-svelte-h\":!0}),i(se)!==\"svelte-114nsmo\"&&(se.innerHTML=Nd),Fn=o(l),le=d(l,\"TR\",{\"data-svelte-h\":!0}),i(le)!==\"svelte-j84n6a\"&&(le.innerHTML=Fd),Xn=o(l),re=d(l,\"TR\",{\"data-svelte-h\":!0}),i(re)!==\"svelte-1iv7cp4\"&&(re.innerHTML=Xd),Yn=o(l),ie=d(l,\"TR\",{\"data-svelte-h\":!0}),i(ie)!==\"svelte-4vsjzn\"&&(ie.innerHTML=Yd),Jn=o(l),C=d(l,\"TR\",{});var J=m(C);ce=d(J,\"TD\",{\"data-svelte-h\":!0}),i(ce)!==\"svelte-185visv\"&&(ce.innerHTML=Jd),Kn=o(J),ue=d(J,\"TD\",{\"data-svelte-h\":!0}),i(ue)!==\"svelte-15yk9d3\"&&(ue.innerHTML=Kd),Qn=o(J),st=d(J,\"TD\",{});var Fe=m(st);Vn=k(Fe,\"The \"),Ht(N.$$.fragment,Fe),Zn=k(Fe,\" used to arrange tasks in a row.\"),Fe.forEach(r),td=o(J),lt=d(J,\"TD\",{align:!0,\"data-svelte-h\":!0}),i(lt)!==\"svelte-19hhiyk\"&&(lt.textContent=Qd),J.forEach(r),ed=o(l),pe=d(l,\"TR\",{\"data-svelte-h\":!0}),i(pe)!==\"svelte-1trgr5v\"&&(pe.innerHTML=Vd),nd=o(l),he=d(l,\"TR\",{\"data-svelte-h\":!0}),i(he)!==\"svelte-1xxgqb9\"&&(he.innerHTML=Zd),dd=o(l),fe=d(l,\"TR\",{\"data-svelte-h\":!0}),i(fe)!==\"svelte-mjyjb2\"&&(fe.innerHTML=ta),l.forEach(r),mt.forEach(r),xe=o(e),j=d(e,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(j)!==\"svelte-6dogi\"&&(j.innerHTML=ea),be=o(e),rt=d(e,\"P\",{\"data-svelte-h\":!0}),i(rt)!==\"svelte-oxvrpq\"&&(rt.textContent=na),$e=o(e),it=d(e,\"PRE\",{class:!0});var ma=m(it);Ce=Ye(ma,!1),ma.forEach(r),we=o(e),E=d(e,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(E)!==\"svelte-ghpu36\"&&(E.innerHTML=da),ye=o(e),ct=d(e,\"P\",{\"data-svelte-h\":!0}),i(ct)!==\"svelte-gcbvl4\"&&(ct.textContent=aa),Re=o(e),ut=d(e,\"UL\",{\"data-svelte-h\":!0}),i(ut)!==\"svelte-iqql1e\"&&(ut.innerHTML=oa),De=o(e),S=d(e,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(S)!==\"svelte-1ec2jfd\"&&(S.innerHTML=sa),je=o(e),pt=d(e,\"P\",{\"data-svelte-h\":!0}),i(pt)!==\"svelte-195jqdy\"&&(pt.innerHTML=la),Ee=o(e),A=d(e,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(A)!==\"svelte-zb6roy\"&&(A.innerHTML=ra),Se=o(e),ht=d(e,\"TABLE\",{\"data-svelte-h\":!0}),i(ht)!==\"svelte-1utpygz\"&&(ht.innerHTML=ia),Ae=o(e),P=d(e,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(P)!==\"svelte-vnc1od\"&&(P.innerHTML=ca),Pe=o(e),ft=d(e,\"P\",{\"data-svelte-h\":!0}),i(ft)!==\"svelte-omu1c1\"&&(ft.textContent=ua),qe=o(e),gt=d(e,\"PRE\",{class:!0});var _a=m(gt);Ge=Ye(_a,!1),_a.forEach(r),ze=o(e),q=d(e,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(q)!==\"svelte-6oenqn\"&&(q.innerHTML=pa),Be=o(e),Tt=d(e,\"TABLE\",{\"data-svelte-h\":!0}),i(Tt)!==\"svelte-qtmhpb\"&&(Tt.innerHTML=ha),Oe=o(e),G=d(e,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),i(G)!==\"svelte-9uj8ym\"&&(G.innerHTML=fa),Ue=o(e),vt=d(e,\"UL\",{\"data-svelte-h\":!0}),i(vt)!==\"svelte-u4ujmd\"&&(vt.innerHTML=ga),this.h()},h(){f(u,\"id\",\"gantt\"),f(u,\"tabindex\",\"-1\"),_e.a=null,f(D,\"class\",\"language-js\"),Me.a=null,f(Q,\"class\",\"language-js\"),f(Z,\"align\",\"right\"),f(et,\"align\",\"right\"),f(dt,\"align\",\"right\"),f(at,\"align\",\"right\"),f(ot,\"align\",\"right\"),f(lt,\"align\",\"right\"),f(j,\"id\",\"taskcontent\"),f(j,\"tabindex\",\"-1\"),Ce.a=null,f(it,\"class\",\"language-js\"),f(E,\"id\",\"layout\"),f(E,\"tabindex\",\"-1\"),f(S,\"id\",\"dateadapter\"),f(S,\"tabindex\",\"-1\"),f(A,\"id\",\"methods\"),f(A,\"tabindex\",\"-1\"),f(P,\"id\",\"events\"),f(P,\"tabindex\",\"-1\"),Ge.a=null,f(gt,\"class\",\"language-js\"),f(q,\"id\",\"ganttapitasks\"),f(q,\"tabindex\",\"-1\"),f(G,\"id\",\"available-modules\"),f(G,\"tabindex\",\"-1\")},m(e,c){p(e,u,c),p(e,g,c),p(e,H,c),p(e,R,c),p(e,D,c),_e.m(Ha,D),p(e,ke,c),p(e,K,c),p(e,He,c),p(e,Q,c),Me.m(Ma,Q),p(e,Le,c),p(e,z,c),t(z,$t),t(z,Je),t(z,s),t(s,Ct),t(s,Ke),t(s,wt),t(s,Qe),t(s,yt),t(s,Ve),t(s,Rt),t(s,Ze),t(s,Dt),t(s,tn),t(s,jt),t(s,en),t(s,Et),t(s,nn),t(s,St),t(s,dn),t(s,M),t(M,At),t(M,an),t(M,Pt),t(M,on),t(M,V),t(V,sn),Mt(B,V,null),t(V,ln),t(M,rn),t(M,Z),t(s,cn),t(s,qt),t(s,un),t(s,Gt),t(s,pn),t(s,zt),t(s,hn),t(s,L),t(L,Bt),t(L,fn),t(L,Ot),t(L,gn),t(L,tt),t(tt,Tn),Mt(O,tt,null),t(tt,vn),t(L,mn),t(L,et),t(s,_n),t(s,x),t(x,Ut),t(x,kn),t(x,Wt),t(x,Hn),t(x,nt),t(nt,Mn),Mt(U,nt,null),t(nt,Ln),t(x,xn),t(x,dt),t(s,bn),t(s,It),t(s,$n),t(s,b),t(b,Nt),t(b,Cn),t(b,Ft),t(b,wn),t(b,Te),Mt(W,Te,null),t(b,yn),t(b,at),t(s,Rn),t(s,Xt),t(s,Dn),t(s,Yt),t(s,jn),t(s,Jt),t(s,En),t(s,Kt),t(s,Sn),t(s,Qt),t(s,An),t(s,Vt),t(s,Pn),t(s,Zt),t(s,qn),t(s,te),t(s,Gn),t(s,ee),t(s,zn),t(s,ne),t(s,Bn),t(s,de),t(s,On),t(s,$),t($,ae),t($,Un),t($,oe),t($,Wn),t($,ve),Mt(I,ve,null),t($,In),t($,ot),t(s,Nn),t(s,se),t(s,Fn),t(s,le),t(s,Xn),t(s,re),t(s,Yn),t(s,ie),t(s,Jn),t(s,C),t(C,ce),t(C,Kn),t(C,ue),t(C,Qn),t(C,st),t(st,Vn),Mt(N,st,null),t(st,Zn),t(C,td),t(C,lt),t(s,ed),t(s,pe),t(s,nd),t(s,he),t(s,dd),t(s,fe),p(e,xe,c),p(e,j,c),p(e,be,c),p(e,rt,c),p(e,$e,c),p(e,it,c),Ce.m(La,it),p(e,we,c),p(e,E,c),p(e,ye,c),p(e,ct,c),p(e,Re,c),p(e,ut,c),p(e,De,c),p(e,S,c),p(e,je,c),p(e,pt,c),p(e,Ee,c),p(e,A,c),p(e,Se,c),p(e,ht,c),p(e,Ae,c),p(e,P,c),p(e,Pe,c),p(e,ft,c),p(e,qe,c),p(e,gt,c),Ge.m(xa,gt),p(e,ze,c),p(e,q,c),p(e,Be,c),p(e,Tt,c),p(e,Oe,c),p(e,G,c),p(e,Ue,c),p(e,vt,c),We=!0},p(e,c){const me={};c&2&&(me.$$scope={dirty:c,ctx:e}),B.$set(me);const mt={};c&2&&(mt.$$scope={dirty:c,ctx:e}),O.$set(mt);const l={};c&2&&(l.$$scope={dirty:c,ctx:e}),U.$set(l);const w={};c&2&&(w.$$scope={dirty:c,ctx:e}),W.$set(w);const _t={};c&2&&(_t.$$scope={dirty:c,ctx:e}),I.$set(_t);const y={};c&2&&(y.$$scope={dirty:c,ctx:e}),N.$set(y)},i(e){We||(Lt(B.$$.fragment,e),Lt(O.$$.fragment,e),Lt(U.$$.fragment,e),Lt(W.$$.fragment,e),Lt(I.$$.fragment,e),Lt(N.$$.fragment,e),We=!0)},o(e){xt(B.$$.fragment,e),xt(O.$$.fragment,e),xt(U.$$.fragment,e),xt(W.$$.fragment,e),xt(I.$$.fragment,e),xt(N.$$.fragment,e),We=!1},d(e){e&&(r(u),r(g),r(H),r(R),r(D),r(ke),r(K),r(He),r(Q),r(Le),r(z),r(xe),r(j),r(be),r(rt),r($e),r(it),r(we),r(E),r(ye),r(ct),r(Re),r(ut),r(De),r(S),r(je),r(pt),r(Ee),r(A),r(Se),r(ht),r(Ae),r(P),r(Pe),r(ft),r(qe),r(gt),r(ze),r(q),r(Be),r(Tt),r(Oe),r(G),r(Ue),r(vt)),bt(B),bt(O),bt(U),bt(W),bt(I),bt(N)}}}function Ga(v){let u,h;const g=[v[0]];let H={$$slots:{default:[qa]},$$scope:{ctx:v}};for(let T=0;T<g.length;T+=1)H=ad(H,g[T]);return u=new Ra({props:H}),{c(){kt(u.$$.fragment)},l(T){Ht(u.$$.fragment,T)},m(T,R){Mt(u,T,R),h=!0},p(T,[R]){const D=R&1?wa(g,[ya(T[0])]):{};R&2&&(D.$$scope={dirty:R,ctx:T}),u.$set(D)},i(T){h||(Lt(u.$$.fragment,T),h=!0)},o(T){xt(u.$$.fragment,T),h=!1},d(T){bt(u,T)}}}function za(v,u,h){return v.$$set=g=>{h(0,u=ad(ad({},u),ka(g)))},u=ka(u),[u]}class Na extends $a{constructor(u){super(),Ca(this,u,za,Ga,ba,{})}}export{Na as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/16.BJYGNx6n.js",
    "content": "import{s as U,o as D,p as Y,e as u,a as g,H as G,c as m,y as H,g as y,b as R,z as q,f as s,r as w,i as o,n as I}from\"../chunks/scheduler.lruobs1Y.js\";import{S as J,i as K,b as O,d as Q,m as V,a as W,t as X,e as Z}from\"../chunks/index.DyGm78TJ.js\";import{g as tt,a as B}from\"../chunks/spread.CgU5AtxT.js\";import{L as et}from\"../chunks/layout.zjTtpqzV.js\";function at(v){let e,d='Header<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#header\">#</a>',c,p,a=\"Represents a row of header cells that render over the gantt.\",l,r,$='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>unit</code></td> <td><code>string</code></td> <td>Time unit used to display header cells, eg. <code>&#39;day&#39;</code> will create a cell in the header for each day in the timeline.</td> <td align=\"right\"></td></tr> <tr><td><code>format</code></td> <td><code>string</code></td> <td>Datetime format used to label header cells, eg. <code>&#39;DD.MM.YYYY&#39;</code>, <code>&#39;HH&#39;</code></td> <td align=\"right\"></td></tr> <tr><td><code>offset</code></td> <td><code>number</code></td> <td>Duration width of header cell.</td> <td align=\"right\"></td></tr> <tr><td><code>sticky</code></td> <td><code>boolean</code></td> <td>Use sticky positioning for header labels.</td> <td align=\"right\"></td></tr></tbody>',x,i,A='Formatting<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#formatting\">#</a>',b,f,P=\"By default <code>svelte-gantt</code> is only able to format a small set of date templates, eg. <code>&#39;HH:mm&#39;</code>. For more you can use <code>MomentSvelteGanttDateAdapter</code> as <code>dateAdapter</code>:\",M,k,T,z=`<code class=\"language-js\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> MomentSvelteGanttDateAdapter <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> moment <span class=\"token keyword\">from</span> <span class=\"token string\">'Moment'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> options <span class=\"token operator\">=</span> <span class=\"token punctuation\">&#123;</span>\n    <span class=\"token literal-property property\">dateAdapter</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MomentSvelteGanttDateAdapter</span><span class=\"token punctuation\">(</span>moment<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">&#125;</span></code>`,L,h,E=\"…or a custom one, as long as it implements the interface <code>{ format(date: number, format: string): string; }</code>.\",j,_,C,N=`<code class=\"language-js\"><span class=\"token keyword\">import</span> dayjs <span class=\"token keyword\">from</span> <span class=\"token string\">'dayjs'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> options <span class=\"token operator\">=</span> <span class=\"token punctuation\">&#123;</span>\n    <span class=\"token literal-property property\">dateAdapter</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">&#123;</span>\n        <span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">date<span class=\"token punctuation\">,</span> format</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">dayjs</span><span class=\"token punctuation\">(</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span>format<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">&#125;</span>\n    <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n    <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">&#125;</span></code>`;return{c(){e=u(\"h1\"),e.innerHTML=d,c=g(),p=u(\"p\"),p.textContent=a,l=g(),r=u(\"table\"),r.innerHTML=$,x=g(),i=u(\"h3\"),i.innerHTML=A,b=g(),f=u(\"p\"),f.innerHTML=P,M=g(),k=u(\"pre\"),T=new G(!1),L=g(),h=u(\"p\"),h.innerHTML=E,j=g(),_=u(\"pre\"),C=new G(!1),this.h()},l(t){e=m(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),H(e)!==\"svelte-1qag11n\"&&(e.innerHTML=d),c=y(t),p=m(t,\"P\",{\"data-svelte-h\":!0}),H(p)!==\"svelte-1k5mmo7\"&&(p.textContent=a),l=y(t),r=m(t,\"TABLE\",{\"data-svelte-h\":!0}),H(r)!==\"svelte-8jxepk\"&&(r.innerHTML=$),x=y(t),i=m(t,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),H(i)!==\"svelte-1pliyh9\"&&(i.innerHTML=A),b=y(t),f=m(t,\"P\",{\"data-svelte-h\":!0}),H(f)!==\"svelte-fgg87n\"&&(f.innerHTML=P),M=y(t),k=m(t,\"PRE\",{class:!0});var n=R(k);T=q(n,!1),n.forEach(s),L=y(t),h=m(t,\"P\",{\"data-svelte-h\":!0}),H(h)!==\"svelte-105sdm8\"&&(h.innerHTML=E),j=y(t),_=m(t,\"PRE\",{class:!0});var S=R(_);C=q(S,!1),S.forEach(s),this.h()},h(){w(e,\"id\",\"header\"),w(e,\"tabindex\",\"-1\"),w(i,\"id\",\"formatting\"),w(i,\"tabindex\",\"-1\"),T.a=null,w(k,\"class\",\"language-js\"),C.a=null,w(_,\"class\",\"language-js\")},m(t,n){o(t,e,n),o(t,c,n),o(t,p,n),o(t,l,n),o(t,r,n),o(t,x,n),o(t,i,n),o(t,b,n),o(t,f,n),o(t,M,n),o(t,k,n),T.m(z,k),o(t,L,n),o(t,h,n),o(t,j,n),o(t,_,n),C.m(N,_)},p:I,d(t){t&&(s(e),s(c),s(p),s(l),s(r),s(x),s(i),s(b),s(f),s(M),s(k),s(L),s(h),s(j),s(_))}}}function nt(v){let e,d;const c=[v[0],F];let p={$$slots:{default:[at]},$$scope:{ctx:v}};for(let a=0;a<c.length;a+=1)p=D(p,c[a]);return e=new et({props:p}),{c(){O(e.$$.fragment)},l(a){Q(e.$$.fragment,a)},m(a,l){V(e,a,l),d=!0},p(a,[l]){const r=l&1?tt(c,[l&1&&B(a[0]),l&0&&B(F)]):{};l&2&&(r.$$scope={dirty:l,ctx:a}),e.$set(r)},i(a){d||(W(e.$$.fragment,a),d=!0)},o(a){X(e.$$.fragment,a),d=!1},d(a){Z(e,a)}}}const F={title:\"Headers\"};function st(v,e,d){return v.$$set=c=>{d(0,e=D(D({},e),Y(c)))},e=Y(e),[e]}class rt extends J{constructor(e){super(),K(this,e,st,nt,U,{})}}export{rt as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/17.Bo0pwz4z.js",
    "content": "import{s as U,e as $,a as k,c as b,b as D,y as E,g as T,f as h,r as L,i as x,h as g,D as F,E as O,t as M,d as H,F as J,G as K,o as w,p as G,n as Q}from\"../chunks/scheduler.lruobs1Y.js\";import{S as z,i as B,b as S,d as C,m as P,a as R,t as j,e as A}from\"../chunks/index.DyGm78TJ.js\";import{g as W,a as X}from\"../chunks/spread.CgU5AtxT.js\";import{L as Y}from\"../chunks/layout.zjTtpqzV.js\";import{e as N}from\"../chunks/each.DqwAsWNO.js\";import{S as Z,t as p,a as ee}from\"../chunks/index.Up5bhyj0.js\";function V(i,e,a){const s=i.slice();return s[4]=e[a],s}function q(i){let e,a,s,o,l,c,d=i[4]+\"\",m,v,_,r,t,u;return r=O(i[3][0]),{c(){e=$(\"span\"),a=$(\"input\"),s=k(),o=$(\"label\"),l=$(\"code\"),c=M(\"'\"),m=M(d),v=M(\"'\"),_=k(),this.h()},l(f){e=b(f,\"SPAN\",{});var n=D(e);a=b(n,\"INPUT\",{id:!0,type:!0}),s=T(n),o=b(n,\"LABEL\",{for:!0});var y=D(o);l=b(y,\"CODE\",{});var I=D(l);c=H(I,\"'\"),m=H(I,d),v=H(I,\"'\"),I.forEach(h),y.forEach(h),_=T(n),n.forEach(h),this.h()},h(){L(a,\"id\",i[4]),L(a,\"type\",\"radio\"),a.__value=i[4],J(a,a.__value),L(o,\"for\",i[4]),r.p(a)},m(f,n){x(f,e,n),g(e,a),a.checked=a.__value===i[0],g(e,s),g(e,o),g(o,l),g(l,c),g(l,m),g(l,v),g(e,_),t||(u=K(a,\"change\",i[2]),t=!0)},p(f,n){n&1&&(a.checked=a.__value===f[0])},d(f){f&&h(e),r.r(),t=!1,u()}}}function te(i){let e,a,s,o=\"<code>layout</code>:\",l,c,d,m,v,_=N(i[1]),r=[];for(let t=0;t<_.length;t+=1)r[t]=q(V(i,_,t));return m=new Z({props:{from:p(\"8:00\"),to:p(\"14:00\"),layout:i[0],rows:[{id:1,label:\"Resource #1\"},{id:2,label:\"Resource #2\"},{id:3,label:\"Resource #3\"},{id:4,label:\"Resource #4\"}],tasks:[{id:1,resourceId:1,from:p(\"8:00\"),to:p(\"10:00\"),label:\"Default\",classes:\"blue\"},{id:2,resourceId:1,from:p(\"9:00\"),to:p(\"11:00\"),label:\"Default\",classes:\"orange\"},{id:3,resourceId:1,from:p(\"9:30\"),to:p(\"12:00\"),label:\"Default\",classes:\"violet\"},{id:4,resourceId:2,from:p(\"9:00\"),to:p(\"11:00\"),label:\"Default\",classes:\"blue\"},{id:5,resourceId:2,from:p(\"9:30\"),to:p(\"11:00\"),label:\"Default\",classes:\"orange\"},{id:6,resourceId:2,from:p(\"11:00\"),to:p(\"13:00\"),label:\"Default\",classes:\"violet\"},{id:7,resourceId:3,from:p(\"9:00\"),to:p(\"11:00\"),label:\"Default\",classes:\"blue\"}],ganttTableModules:[ee]}}),{c(){e=$(\"div\"),a=$(\"div\"),s=$(\"span\"),s.innerHTML=o,l=k();for(let t=0;t<r.length;t+=1)r[t].c();c=k(),d=$(\"div\"),S(m.$$.fragment),this.h()},l(t){e=b(t,\"DIV\",{class:!0});var u=D(e);a=b(u,\"DIV\",{class:!0});var f=D(a);s=b(f,\"SPAN\",{\"data-svelte-h\":!0}),E(s)!==\"svelte-1f108v5\"&&(s.innerHTML=o),l=T(f);for(let y=0;y<r.length;y+=1)r[y].l(f);f.forEach(h),c=T(u),d=b(u,\"DIV\",{class:!0});var n=D(d);C(m.$$.fragment,n),n.forEach(h),u.forEach(h),this.h()},h(){L(a,\"class\",\"flex gap-2 justify-center border-b p-2\"),L(d,\"class\",\"example svelte-5zals3\"),L(e,\"class\",\"border\")},m(t,u){x(t,e,u),g(e,a),g(a,s),g(a,l);for(let f=0;f<r.length;f+=1)r[f]&&r[f].m(a,null);g(e,c),g(e,d),P(m,d,null),v=!0},p(t,[u]){if(u&3){_=N(t[1]);let n;for(n=0;n<_.length;n+=1){const y=V(t,_,n);r[n]?r[n].p(y,u):(r[n]=q(y),r[n].c(),r[n].m(a,null))}for(;n<r.length;n+=1)r[n].d(1);r.length=_.length}const f={};u&1&&(f.layout=t[0]),m.$set(f)},i(t){v||(R(m.$$.fragment,t),v=!0)},o(t){j(m.$$.fragment,t),v=!1},d(t){t&&h(e),F(r,t),A(m)}}}function ae(i,e,a){let s=\"overlap\";const o=[\"overlap\",\"pack\",\"expand\"],l=[[]];function c(){s=this.__value,a(0,s)}return[s,o,c,l]}class le extends z{constructor(e){super(),B(this,e,ae,te,U,{})}}function se(i){let e,a='Layout<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#layout\">#</a>',s,o,l=\"Multiple ways of displaying overlapped tasks are available as the <code>layout</code> option:\",c,d,m=\"<li><code>&#39;overlap&#39;</code> - Tasks cover each other.</li> <li><code>&#39;pack&#39;</code> - Tasks shrink to fit in the row.</li> <li><code>&#39;expand&#39;</code> - Row expands to fit tasks.</li>\",v,_,r;return _=new le({}),{c(){e=$(\"h1\"),e.innerHTML=a,s=k(),o=$(\"p\"),o.innerHTML=l,c=k(),d=$(\"ul\"),d.innerHTML=m,v=k(),S(_.$$.fragment),this.h()},l(t){e=b(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),E(e)!==\"svelte-1ke9jqa\"&&(e.innerHTML=a),s=T(t),o=b(t,\"P\",{\"data-svelte-h\":!0}),E(o)!==\"svelte-1xl6ejt\"&&(o.innerHTML=l),c=T(t),d=b(t,\"UL\",{\"data-svelte-h\":!0}),E(d)!==\"svelte-1w20rur\"&&(d.innerHTML=m),v=T(t),C(_.$$.fragment,t),this.h()},h(){L(e,\"id\",\"layout\"),L(e,\"tabindex\",\"-1\")},m(t,u){x(t,e,u),x(t,s,u),x(t,o,u),x(t,c,u),x(t,d,u),x(t,v,u),P(_,t,u),r=!0},p:Q,i(t){r||(R(_.$$.fragment,t),r=!0)},o(t){j(_.$$.fragment,t),r=!1},d(t){t&&(h(e),h(s),h(o),h(c),h(d),h(v)),A(_,t)}}}function re(i){let e,a;const s=[i[0]];let o={$$slots:{default:[se]},$$scope:{ctx:i}};for(let l=0;l<s.length;l+=1)o=w(o,s[l]);return e=new Y({props:o}),{c(){S(e.$$.fragment)},l(l){C(e.$$.fragment,l)},m(l,c){P(e,l,c),a=!0},p(l,[c]){const d=c&1?W(s,[X(l[0])]):{};c&2&&(d.$$scope={dirty:c,ctx:l}),e.$set(d)},i(l){a||(R(e.$$.fragment,l),a=!0)},o(l){j(e.$$.fragment,l),a=!1},d(l){A(e,l)}}}function ne(i,e,a){return i.$$set=s=>{a(0,e=w(w({},e),G(s)))},e=G(e),[e]}class _e extends z{constructor(e){super(),B(this,e,ne,re,U,{})}}export{_e as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/18.E34B3Q4g.js",
    "content": "import{s as Z,e as v,a as M,c as b,b as D,y as w,g as $,f,r as W,i as _,h as H,D as J,t as K,d as Q,G as X,o as L,p as P,H as nn,z as sn,n as an}from\"../chunks/scheduler.lruobs1Y.js\";import{S as B,i as G,b as S,d as T,m as C,a as E,t as j,e as I}from\"../chunks/index.DyGm78TJ.js\";import{g as tn,a as en}from\"../chunks/spread.CgU5AtxT.js\";import{L as pn}from\"../chunks/layout.zjTtpqzV.js\";import{e as R}from\"../chunks/each.DqwAsWNO.js\";import{S as on,d as rn,t as x,h as A}from\"../chunks/index.Up5bhyj0.js\";function N(o,n,a){const p=o.slice();return p[9]=n[a],p[11]=a,p}function V(o){let n,a,p=o[9]+\"\",i,e,u,c;function g(){return o[8](o[11])}return{c(){n=v(\"span\"),a=v(\"button\"),i=K(p),e=M(),this.h()},l(h){n=b(h,\"SPAN\",{});var r=D(n);a=b(r,\"BUTTON\",{class:!0});var l=D(a);i=Q(l,p),l.forEach(f),e=$(r),r.forEach(f),this.h()},h(){W(a,\"class\",\"border hover:bg-slate-100 px-1 py-1 text-sm active:bg-slate-200\")},m(h,r){_(h,n,r),H(n,a),H(a,i),H(n,e),u||(c=X(a,\"click\",g),u=!0)},p(h,r){o=h},d(h){h&&f(n),u=!1,c()}}}function ln(o){let n,a,p,i=\"Set zoom:\",e,u,c,g,h,r=R(o[4]),l=[];for(let s=0;s<r.length;s+=1)l[s]=V(N(o,r,s));return g=new on({props:{from:o[5],to:o[6],rows:[{id:1,label:\"Resource #1\"},{id:2,label:\"Resource #2\"},{id:3,label:\"Resource #3\"},{id:4,label:\"Resource #4\"}],headers:o[0],minWidth:o[1],fitWidth:cn,columnUnit:o[2],columnOffset:o[3],dateAdapter:rn.dateAdapter,zoomLevels:q,tasks:[{id:1,resourceId:1,from:x(\"8:00\"),to:x(\"16:00\"),label:\"Default\",classes:\"blue\"},{id:4,resourceId:2,from:x(\"9:00\"),to:x(\"17:00\"),label:\"Default\",classes:\"orange\"},{id:7,resourceId:3,from:x(\"10:00\"),to:x(\"18:00\"),label:\"Default\",classes:\"blue\"}]}}),{c(){n=v(\"div\"),a=v(\"div\"),p=v(\"span\"),p.textContent=i,e=M();for(let s=0;s<l.length;s+=1)l[s].c();u=M(),c=v(\"div\"),S(g.$$.fragment),this.h()},l(s){n=b(s,\"DIV\",{class:!0});var k=D(n);a=b(k,\"DIV\",{class:!0});var d=D(a);p=b(d,\"SPAN\",{\"data-svelte-h\":!0}),w(p)!==\"svelte-xoeh8v\"&&(p.textContent=i),e=$(d);for(let Y=0;Y<l.length;Y+=1)l[Y].l(d);d.forEach(f),u=$(k),c=b(k,\"DIV\",{class:!0});var m=D(c);T(g.$$.fragment,m),m.forEach(f),k.forEach(f),this.h()},h(){W(a,\"class\",\"flex gap-2 justify-center border-b p-2\"),W(c,\"class\",\"example svelte-5zals3\"),W(n,\"class\",\"border\")},m(s,k){_(s,n,k),H(n,a),H(a,p),H(a,e);for(let d=0;d<l.length;d+=1)l[d]&&l[d].m(a,null);H(n,u),H(n,c),C(g,c,null),h=!0},p(s,[k]){if(k&144){r=R(s[4]);let m;for(m=0;m<r.length;m+=1){const Y=N(s,r,m);l[m]?l[m].p(Y,k):(l[m]=V(Y),l[m].c(),l[m].m(a,null))}for(;m<l.length;m+=1)l[m].d(1);l.length=r.length}const d={};k&1&&(d.headers=s[0]),k&2&&(d.minWidth=s[1]),k&4&&(d.columnUnit=s[2]),k&8&&(d.columnOffset=s[3]),g.$set(d)},i(s){h||(E(g.$$.fragment,s),h=!0)},o(s){j(g.$$.fragment,s),h=!1},d(s){s&&f(n),J(l,s),I(g)}}}const q=[{headers:[{unit:\"month\",format:\"MMM YYYY\"}],minWidth:800,columnUnit:\"day\",columnOffset:1},{headers:[{unit:\"month\",format:\"MMM YYYY\"},{unit:\"week\",format:\"[week] w\"},{unit:\"day\",format:\"D\"}],minWidth:3200,columnUnit:\"hour\",columnOffset:4},{headers:[{unit:\"day\",format:\"MMM D, YYYY\"},{unit:\"hour\",format:\"HH\"}],minWidth:8e3,columnUnit:\"hour\",columnOffset:2},{headers:[{unit:\"day\",format:\"MMM D, YYYY\"},{unit:\"hour\",format:\"HH\"}],minWidth:16e3,columnUnit:\"hour\",columnOffset:2},{headers:[{unit:\"day\",format:\"MMM D, YYYY\"},{unit:\"hour\",format:\"HH\"}],minWidth:32e3,columnUnit:\"hour\",columnOffset:2}];let cn=!0;function un(o,n,a){const p=[\"hour\",\"day\",\"week\",\"month\"];let i=[{unit:\"month\",format:\"MMM YYYY\"}],e=800,u=\"day\",c=1,g=A().startOf(\"month\"),h=A().endOf(\"month\");function r(s){a(0,i=s.headers),a(1,e=s.minWidth),a(2,u=s.columnUnit),a(3,c=s.columnOffset)}return[i,e,u,c,p,g,h,r,s=>r(q[s])]}class kn extends B{constructor(n){super(),G(this,n,un,ln,Z,{})}}function dn(o){let n,a='Zoom level<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#zoom-level\">#</a>',p,i,e=`To zoom the chart, a list of zoom levels (<code>zoomLevels</code>) can be provided. When using <code>wheel</code> + <code>ctrl</code> the options cycle.\nEach of the levels can have the following fields:`,u,c,g='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>headers</code></td> <td><code>Header[]</code></td> <td>See above.</td> <td align=\"right\"></td></tr> <tr><td><code>minWidth</code></td> <td><code>number</code></td> <td>See above.</td> <td align=\"right\"></td></tr> <tr><td><code>fitWidth</code></td> <td><code>boolean</code></td> <td>See above.</td> <td align=\"right\"></td></tr> <tr><td><code>columnUnit</code></td> <td><code>string</code></td> <td>See above.</td> <td align=\"right\"></td></tr> <tr><td><code>columnOffset</code></td> <td><code>number</code></td> <td>See above.</td> <td align=\"right\"></td></tr></tbody>',h,r,l=\"You can have as many zoom levels as you need.\",s,k,d,m,Y,O,U,F=`<code class=\"language-js\">gantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    <span class=\"token literal-property property\">zoomLevels</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t<span class=\"token punctuation\">&#123;</span>\n\t\t\t<span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'month'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'MMM YYYY'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">minWidth</span><span class=\"token operator\">:</span> <span class=\"token number\">800</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnUnit</span><span class=\"token operator\">:</span> <span class=\"token string\">'day'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnOffset</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span>\n\t\t<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">&#123;</span>\n\t\t\t<span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'month'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'MMM YYYY'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'week'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'[week] w'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'day'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'D'</span> <span class=\"token punctuation\">&#125;</span>\n\t\t\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">minWidth</span><span class=\"token operator\">:</span> <span class=\"token number\">3200</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnUnit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnOffset</span><span class=\"token operator\">:</span> <span class=\"token number\">4</span>\n\t\t<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">&#123;</span>\n\t\t\t<span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'day'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'MMM D, YYYY'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'HH'</span> <span class=\"token punctuation\">&#125;</span>\n\t\t\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">minWidth</span><span class=\"token operator\">:</span> <span class=\"token number\">8000</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnUnit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnOffset</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span>\n\t\t<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">&#123;</span>\n\t\t\t<span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'day'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'MMM D, YYYY'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'HH'</span> <span class=\"token punctuation\">&#125;</span>\n\t\t\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">minWidth</span><span class=\"token operator\">:</span> <span class=\"token number\">16000</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnUnit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnOffset</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span>\n\t\t<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">&#123;</span>\n\t\t\t<span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'day'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'MMM D, YYYY'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">unit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">format</span><span class=\"token operator\">:</span> <span class=\"token string\">'HH'</span> <span class=\"token punctuation\">&#125;</span>\n\t\t\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">minWidth</span><span class=\"token operator\">:</span> <span class=\"token number\">32000</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnUnit</span><span class=\"token operator\">:</span> <span class=\"token string\">'hour'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token literal-property property\">columnOffset</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span>\n\t\t<span class=\"token punctuation\">&#125;</span>\n\t<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span></code>`,z;return k=new kn({}),{c(){n=v(\"h1\"),n.innerHTML=a,p=M(),i=v(\"p\"),i.innerHTML=e,u=M(),c=v(\"table\"),c.innerHTML=g,h=M(),r=v(\"p\"),r.textContent=l,s=M(),S(k.$$.fragment),d=M(),m=v(\"hr\"),Y=M(),O=v(\"pre\"),U=new nn(!1),this.h()},l(t){n=b(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),w(n)!==\"svelte-1dh5bt9\"&&(n.innerHTML=a),p=$(t),i=b(t,\"P\",{\"data-svelte-h\":!0}),w(i)!==\"svelte-1a7tjii\"&&(i.innerHTML=e),u=$(t),c=b(t,\"TABLE\",{\"data-svelte-h\":!0}),w(c)!==\"svelte-7xkajw\"&&(c.innerHTML=g),h=$(t),r=b(t,\"P\",{\"data-svelte-h\":!0}),w(r)!==\"svelte-1s3x395\"&&(r.textContent=l),s=$(t),T(k.$$.fragment,t),d=$(t),m=b(t,\"HR\",{}),Y=$(t),O=b(t,\"PRE\",{class:!0});var y=D(O);U=sn(y,!1),y.forEach(f),this.h()},h(){W(n,\"id\",\"zoom-level\"),W(n,\"tabindex\",\"-1\"),U.a=null,W(O,\"class\",\"language-js\")},m(t,y){_(t,n,y),_(t,p,y),_(t,i,y),_(t,u,y),_(t,c,y),_(t,h,y),_(t,r,y),_(t,s,y),C(k,t,y),_(t,d,y),_(t,m,y),_(t,Y,y),_(t,O,y),U.m(F,O),z=!0},p:an,i(t){z||(E(k.$$.fragment,t),z=!0)},o(t){j(k.$$.fragment,t),z=!1},d(t){t&&(f(n),f(p),f(i),f(u),f(c),f(h),f(r),f(s),f(d),f(m),f(Y),f(O)),I(k,t)}}}function mn(o){let n,a;const p=[o[0]];let i={$$slots:{default:[dn]},$$scope:{ctx:o}};for(let e=0;e<p.length;e+=1)i=L(i,p[e]);return n=new pn({props:i}),{c(){S(n.$$.fragment)},l(e){T(n.$$.fragment,e)},m(e,u){C(n,e,u),a=!0},p(e,[u]){const c=u&1?tn(p,[en(e[0])]):{};u&2&&(c.$$scope={dirty:u,ctx:e}),n.$set(c)},i(e){a||(E(n.$$.fragment,e),a=!0)},o(e){j(n.$$.fragment,e),a=!1},d(e){I(n,e)}}}function fn(o,n,a){return o.$$set=p=>{a(0,n=L(L({},n),P(p)))},n=P(n),[n]}class Yn extends B{constructor(n){super(),G(this,n,fn,mn,Z,{})}}export{Yn as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/2.Dl5Bf6FQ.js",
    "content": "import{s as Z,e as v,t as J,c as _,b as x,d as K,f as u,r as c,i as S,h,j as Q,n as T,k as G,q as ue,a as A,g as N,v as de,w as he,x as me,Z as ae,_ as ne,y as ee,G as pe,D as be,$ as ge,a0 as oe}from\"../chunks/scheduler.lruobs1Y.js\";import{S as W,i as X,a as w,t as C,b as j,d as q,m as H,e as R,c as le,g as re}from\"../chunks/index.DyGm78TJ.js\";import{e as ve}from\"../chunks/each.DqwAsWNO.js\";import{p as $e}from\"../chunks/stores.BxMDhJ8m.js\";import{b as O}from\"../chunks/paths.oQcPQ3IF.js\";import{p as xe,i as te,m as ke,a as we,n as Ee}from\"../chunks/store.CCmTIowZ.js\";import{B as _e}from\"../chunks/Button.De7jzsKF.js\";function ye(o){let e,t,l,a;return{c(){e=v(\"a\"),t=J(o[1]),this.h()},l(r){e=_(r,\"A\",{class:!0,href:!0});var s=x(e);t=K(s,o[1]),s.forEach(u),this.h()},h(){c(e,\"class\",l=\"lg:py-1 -ml-px flex items-center border-l py-2 pl-4 transition-all \"+(o[2]?\"text-brand font-semibold border-brand\":\"hover:border-inverse focus-visible:border-inverse text-soft hover:text-inverse focus-visible:text-inverse border-transparent font-normal\")),c(e,\"href\",a=\"\"+(O+o[0]))},m(r,s){S(r,e,s),h(e,t)},p(r,[s]){s&2&&Q(t,r[1]),s&4&&l!==(l=\"lg:py-1 -ml-px flex items-center border-l py-2 pl-4 transition-all \"+(r[2]?\"text-brand font-semibold border-brand\":\"hover:border-inverse focus-visible:border-inverse text-soft hover:text-inverse focus-visible:text-inverse border-transparent font-normal\"))&&c(e,\"class\",l),s&1&&a!==(a=\"\"+(O+r[0]))&&c(e,\"href\",a)},i:T,o:T,d(r){r&&u(e)}}}function Ce(o,e,t){let l,a;G(o,$e,n=>t(3,a=n));let{href:r}=e,{label:s}=e;return o.$$set=n=>{\"href\"in n&&t(0,r=n.href),\"label\"in n&&t(1,s=n.label)},o.$$.update=()=>{o.$$.dirty&9&&t(2,l=a.url.pathname.includes(r))},[r,s,l,a]}class Ie extends W{constructor(e){super(),X(this,e,Ce,ye,Z,{href:0,label:1})}}function Ae(o){let e,t,l,a,r,s,n;const i=o[2].default,f=ue(i,o,o[1],null);return{c(){e=v(\"li\"),t=v(\"h5\"),l=J(o[0]),a=A(),r=v(\"ul\"),s=v(\"li\"),f&&f.c(),this.h()},l(m){e=_(m,\"LI\",{class:!0});var d=x(e);t=_(d,\"H5\",{class:!0});var I=x(t);l=K(I,o[0]),I.forEach(u),a=N(d),r=_(d,\"UL\",{class:!0});var B=x(r);s=_(B,\"LI\",{class:!0});var z=x(s);f&&f.l(z),z.forEach(u),B.forEach(u),d.forEach(u),this.h()},h(){c(t,\"class\",\"text-strong 992:mb-3 mb-8 text-lg font-semibold\"),c(s,\"class\",\"first:mt-6\"),c(r,\"class\",\"border-border space-y-3 border-l\"),c(e,\"class\",\"992:mt-10 mt-12 first:mt-0\")},m(m,d){S(m,e,d),h(e,t),h(t,l),h(e,a),h(e,r),h(r,s),f&&f.m(s,null),n=!0},p(m,[d]){(!n||d&1)&&Q(l,m[0]),f&&f.p&&(!n||d&2)&&de(f,i,m,m[1],n?me(i,m[1],d,null):he(m[1]),null)},i(m){n||(w(f,m),n=!0)},o(m){C(f,m),n=!1},d(m){m&&u(e),f&&f.d(m)}}}function Ne(o,e,t){let{$$slots:l={},$$scope:a}=e,{title:r}=e;return o.$$set=s=>{\"title\"in s&&t(0,r=s.title),\"$$scope\"in s&&t(1,a=s.$$scope)},[r,a,l]}class De extends W{constructor(e){super(),X(this,e,Ne,Ae,Z,{title:0})}}function Se(o){let e,t;return{c(){e=ae(\"svg\"),t=ae(\"path\"),this.h()},l(l){e=ne(l,\"svg\",{xmlns:!0,fill:!0,viewBox:!0,\"stroke-width\":!0,stroke:!0,class:!0});var a=x(e);t=ne(a,\"path\",{\"stroke-linecap\":!0,\"stroke-linejoin\":!0,d:!0}),x(t).forEach(u),a.forEach(u),this.h()},h(){c(t,\"stroke-linecap\",\"round\"),c(t,\"stroke-linejoin\",\"round\"),c(t,\"d\",\"M6 18 18 6M6 6l12 12\"),c(e,\"xmlns\",\"http://www.w3.org/2000/svg\"),c(e,\"fill\",\"none\"),c(e,\"viewBox\",\"0 0 24 24\"),c(e,\"stroke-width\",\"1.5\"),c(e,\"stroke\",\"currentColor\"),c(e,\"class\",\"size-6\")},m(l,a){S(l,e,a),h(e,t)},p:T,i:T,o:T,d(l){l&&u(e)}}}class ze extends W{constructor(e){super(),X(this,e,null,Se,Z,{})}}function Be(o,e,t){const l=o.slice();return l[3]=e[t],l}function Le(o,e,t){const l=o.slice();return l[6]=e[t],l}function Pe(o){let e,t;return e=new Ie({props:{href:o[6].href,label:o[6].label}}),{c(){j(e.$$.fragment)},l(l){q(e.$$.fragment,l)},m(l,a){H(e,l,a),t=!0},p:T,i(l){t||(w(e.$$.fragment,l),t=!0)},o(l){C(e.$$.fragment,l),t=!1},d(l){R(e,l)}}}function Ve(o){let e,t,l=ve(o[3].pages),a=[];for(let r=0;r<l.length;r+=1)a[r]=Pe(Le(o,l,r));return{c(){for(let r=0;r<a.length;r+=1)a[r].c();e=A()},l(r){for(let s=0;s<a.length;s+=1)a[s].l(r);e=N(r)},m(r,s){for(let n=0;n<a.length;n+=1)a[n]&&a[n].m(r,s);S(r,e,s),t=!0},p:T,i(r){if(!t){for(let s=0;s<l.length;s+=1)w(a[s]);t=!0}},o(r){a=a.filter(Boolean);for(let s=0;s<a.length;s+=1)C(a[s]);t=!1},d(r){r&&u(e),be(a,r)}}}function Te(o){let e,t;return e=new De({props:{title:o[3].title,$$slots:{default:[Ve]},$$scope:{ctx:o}}}),{c(){j(e.$$.fragment)},l(l){q(e.$$.fragment,l)},m(l,a){H(e,l,a),t=!0},p(l,a){const r={};a&512&&(r.$$scope={dirty:a,ctx:l}),e.$set(r)},i(l){t||(w(e.$$.fragment,l),t=!0)},o(l){C(e.$$.fragment,l),t=!1},d(l){R(e,l)}}}function Me(o){let e,t,l,a,r,s,n,i,f=\"Close sidebar\",m,d,I,B,z,V,L;s=new ze({});let M=ve(xe),g=[];for(let b=0;b<M.length;b+=1)g[b]=Te(Be(o,M,b));return{c(){e=v(\"aside\"),t=v(\"div\"),l=v(\"div\"),a=A(),r=v(\"button\"),j(s.$$.fragment),n=A(),i=v(\"span\"),i.textContent=f,m=A(),d=v(\"nav\"),I=v(\"ul\");for(let b=0;b<g.length;b+=1)g[b].c();this.h()},l(b){e=_(b,\"ASIDE\",{id:!0,class:!0});var k=x(e);t=_(k,\"DIV\",{class:!0});var D=x(t);l=_(D,\"DIV\",{class:!0}),x(l).forEach(u),a=N(D),r=_(D,\"BUTTON\",{class:!0});var E=x(r);q(s.$$.fragment,E),n=N(E),i=_(E,\"SPAN\",{class:!0,\"data-svelte-h\":!0}),ee(i)!==\"svelte-13q18xv\"&&(i.textContent=f),E.forEach(u),D.forEach(u),m=N(k),d=_(k,\"NAV\",{class:!0});var $=x(d);I=_($,\"UL\",{class:!0});var U=x(I);for(let p=0;p<g.length;p+=1)g[p].l(U);U.forEach(u),$.forEach(u),k.forEach(u),this.h()},h(){c(l,\"class\",\"flex-1\"),c(i,\"class\",\"sr-only\"),c(r,\"class\",\"text-soft hover:text-inverse p-4 -mx-6\"),c(t,\"class\",\"lg:hidden sticky top-0 left-0 flex items-center\"),c(I,\"class\",\"mt-8 lg:pb-0\"),c(d,\"class\",\"lg:px-1 scrollbar\"),c(e,\"id\",\"main-sidebar\"),c(e,\"class\",B=\"sidebar fixed top-0 lg:top-20 left-0 transform bg-body z-50 border-border border-r scrollbar transform transition-transform duration-200 ease-out will-change-transform max-h-screen min-h-screen min-w-60 lg:translate-x-0 lg:block lg:sticky lg:z-0 overflow-y-auto px-6 md:px-6 lg:px-4 \"+(o[0]?\"translate-x-0\":\"-translate-x-full\"))},m(b,k){S(b,e,k),h(e,t),h(t,l),h(t,a),h(t,r),H(s,r,null),h(r,n),h(r,i),h(e,m),h(e,d),h(d,I);for(let D=0;D<g.length;D+=1)g[D]&&g[D].m(I,null);z=!0,V||(L=pe(r,\"pointerdown\",o[2]),V=!0)},p(b,[k]){(!z||k&1&&B!==(B=\"sidebar fixed top-0 lg:top-20 left-0 transform bg-body z-50 border-border border-r scrollbar transform transition-transform duration-200 ease-out will-change-transform max-h-screen min-h-screen min-w-60 lg:translate-x-0 lg:block lg:sticky lg:z-0 overflow-y-auto px-6 md:px-6 lg:px-4 \"+(b[0]?\"translate-x-0\":\"-translate-x-full\")))&&c(e,\"class\",B)},i(b){if(!z){w(s.$$.fragment,b);for(let k=0;k<M.length;k+=1)w(g[k]);z=!0}},o(b){C(s.$$.fragment,b),g=g.filter(Boolean);for(let k=0;k<g.length;k+=1)C(g[k]);z=!1},d(b){b&&u(e),R(s),be(g,b),V=!1,L()}}}function Oe(o,e,t){const l=ge();let{open:a=!1}=e;const r=()=>l(\"close\");return o.$$set=s=>{\"open\"in s&&t(0,a=s.open)},[a,l,r]}class je extends W{constructor(e){super(),X(this,e,Oe,Me,Z,{open:0})}}function ie(o){let e,t,l,a,r,s=o[2]&&fe(o),n=o[3]&&ce(o);return{c(){e=v(\"hr\"),t=A(),l=v(\"div\"),s&&s.c(),a=A(),n&&n.c(),this.h()},l(i){e=_(i,\"HR\",{class:!0}),t=N(i),l=_(i,\"DIV\",{class:!0});var f=x(l);s&&s.l(f),a=N(f),n&&n.l(f),f.forEach(u),this.h()},h(){c(e,\"class\",\"border-border mt-20\"),c(l,\"class\",\"992:text-xl flex items-center pt-12 pb-20 text-lg font-semibold text-gray-300\")},m(i,f){S(i,e,f),S(i,t,f),S(i,l,f),s&&s.m(l,null),h(l,a),n&&n.m(l,null),r=!0},p(i,f){i[2]?s?(s.p(i,f),f&4&&w(s,1)):(s=fe(i),s.c(),w(s,1),s.m(l,a)):s&&(re(),C(s,1,1,()=>{s=null}),le()),i[3]?n?(n.p(i,f),f&8&&w(n,1)):(n=ce(i),n.c(),w(n,1),n.m(l,null)):n&&(re(),C(n,1,1,()=>{n=null}),le())},i(i){r||(w(s),w(n),r=!0)},o(i){C(s),C(n),r=!1},d(i){i&&(u(e),u(t),u(l)),s&&s.d(),n&&n.d()}}}function fe(o){let e,t,l=\"Previous\",a,r,s;return r=new _e({props:{arrow:\"left\",href:\"\"+(O+o[2].href),class:\"hover:text-inverse\",\"data-sveltekit-prefetch\":!0,$$slots:{default:[qe]},$$scope:{ctx:o}}}),{c(){e=v(\"div\"),t=v(\"span\"),t.textContent=l,a=A(),j(r.$$.fragment),this.h()},l(n){e=_(n,\"DIV\",{class:!0});var i=x(e);t=_(i,\"SPAN\",{class:!0,\"data-svelte-h\":!0}),ee(t)!==\"svelte-bt3qg\"&&(t.textContent=l),a=N(i),q(r.$$.fragment,i),i.forEach(u),this.h()},h(){c(t,\"class\",\"text-inverse ml-3 mb-4 inline-block\"),c(e,\"class\",\"mb-4 flex flex-col items-start\")},m(n,i){S(n,e,i),h(e,t),h(e,a),H(r,e,null),s=!0},p(n,i){const f={};i&4&&(f.href=\"\"+(O+n[2].href)),i&132&&(f.$$scope={dirty:i,ctx:n}),r.$set(f)},i(n){s||(w(r.$$.fragment,n),s=!0)},o(n){C(r.$$.fragment,n),s=!1},d(n){n&&u(e),R(r)}}}function qe(o){let e=o[2].label+\"\",t;return{c(){t=J(e)},l(l){t=K(l,e)},m(l,a){S(l,t,a)},p(l,a){a&4&&e!==(e=l[2].label+\"\")&&Q(t,e)},d(l){l&&u(t)}}}function ce(o){let e,t,l=\"Next\",a,r,s;return r=new _e({props:{arrow:\"right\",href:\"\"+(O+o[3].href),class:\"hover:text-inverse\",\"data-sveltekit-prefetch\":!0,$$slots:{default:[He]},$$scope:{ctx:o}}}),{c(){e=v(\"div\"),t=v(\"span\"),t.textContent=l,a=A(),j(r.$$.fragment),this.h()},l(n){e=_(n,\"DIV\",{class:!0});var i=x(e);t=_(i,\"SPAN\",{class:!0,\"data-svelte-h\":!0}),ee(t)!==\"svelte-184xe5u\"&&(t.textContent=l),a=N(i),q(r.$$.fragment,i),i.forEach(u),this.h()},h(){c(t,\"class\",\"text-inverse mr-3 mb-4 inline-block\"),c(e,\"class\",\"ml-auto mb-4 flex flex-col items-end\")},m(n,i){S(n,e,i),h(e,t),h(e,a),H(r,e,null),s=!0},p(n,i){const f={};i&8&&(f.href=\"\"+(O+n[3].href)),i&136&&(f.$$scope={dirty:i,ctx:n}),r.$set(f)},i(n){s||(w(r.$$.fragment,n),s=!0)},o(n){C(r.$$.fragment,n),s=!1},d(n){n&&u(e),R(r)}}}function He(o){let e=o[3].label+\"\",t;return{c(){t=J(e)},l(l){t=K(l,e)},m(l,a){S(l,t,a)},p(l,a){a&8&&e!==(e=l[3].label+\"\")&&Q(t,e)},d(l){l&&u(t)}}}function Re(o){var U;let e,t,l,a,r,s,n,i,f,m,d=((U=o[1].category)==null?void 0:U.title)+\"\",I,B,z,V,L,M='<div class=\"\">@2024 Ante Novokmet - <a href=\"https://github.com/ANovokmet/\">ANovokmet</a></div> <div class=\"ml-auto\">Need more features? <a href=\"https://github.com/ANovokmet\" class=\"text-base font-base hover:underline hover:text-brand\">Contact</a></div>',g,b,k;t=new je({props:{open:o[0]}}),t.$on(\"close\",o[5]);const D=o[4].default,E=ue(D,o,o[7],null);let $=(o[2]||o[3])&&ie(o);return{c(){e=v(\"div\"),j(t.$$.fragment),l=A(),a=v(\"div\"),r=v(\"div\"),n=A(),i=v(\"main\"),f=v(\"article\"),m=v(\"p\"),I=J(d),B=A(),E&&E.c(),z=A(),$&&$.c(),V=A(),L=v(\"footer\"),L.innerHTML=M,this.h()},l(p){e=_(p,\"DIV\",{class:!0});var y=x(e);q(t.$$.fragment,y),l=N(y),a=_(y,\"DIV\",{class:!0});var F=x(a);r=_(F,\"DIV\",{class:!0}),x(r).forEach(u),F.forEach(u),n=N(y),i=_(y,\"MAIN\",{class:!0});var P=x(i);f=_(P,\"ARTICLE\",{class:!0});var Y=x(f);m=_(Y,\"P\",{class:!0});var se=x(m);I=K(se,d),se.forEach(u),B=N(Y),E&&E.l(Y),Y.forEach(u),z=N(P),$&&$.l(P),V=N(P),L=_(P,\"FOOTER\",{class:!0,\"data-svelte-h\":!0}),ee(L)!==\"svelte-cjsxg6\"&&(L.innerHTML=M),P.forEach(u),y.forEach(u),this.h()},h(){c(r,\"class\",s=\"pointer-events-auto fixed top-0 left-0 z-40 backdrop-blur-sm backdrop-filter transition-opacity duration-75 bg-body/20 dark:bg-body/60 h-screen w-screen \"+(o[0]?\"visible opacity-100\":\"invisible opacity-0\")),c(a,\"class\",\"lg:hidden z-40\"),c(m,\"class\",\"text-brand mb-3.5 text-[15px] font-semibold leading-6\"),c(f,\"class\",\"markdown prose dark:prose-invert z-10 max-w-[var(--sg-article-max-width)]\"),c(L,\"class\",\"flex text-center py-20 border-t text-slate-500\"),c(i,\"class\",\"w-full overflow-x-hidden lg:min-h-64 min-h-[calc(100vh-var(--sg--navbar-height))] px-8 992:px-16 pt-8\"),c(e,\"class\",\"mx-auto w-full flex flex-row min-h-full max-w-7xl pt-32 lg:pt-20 z-20\")},m(p,y){S(p,e,y),H(t,e,null),h(e,l),h(e,a),h(a,r),h(e,n),h(e,i),h(i,f),h(f,m),h(m,I),h(f,B),E&&E.m(f,null),h(i,z),$&&$.m(i,null),h(i,V),h(i,L),g=!0,b||(k=pe(r,\"click\",o[6]),b=!0)},p(p,[y]){var P;const F={};y&1&&(F.open=p[0]),t.$set(F),(!g||y&1&&s!==(s=\"pointer-events-auto fixed top-0 left-0 z-40 backdrop-blur-sm backdrop-filter transition-opacity duration-75 bg-body/20 dark:bg-body/60 h-screen w-screen \"+(p[0]?\"visible opacity-100\":\"invisible opacity-0\")))&&c(r,\"class\",s),(!g||y&2)&&d!==(d=((P=p[1].category)==null?void 0:P.title)+\"\")&&Q(I,d),E&&E.p&&(!g||y&128)&&de(E,D,p,p[7],g?me(D,p[7],y,null):he(p[7]),null),p[2]||p[3]?$?($.p(p,y),y&12&&w($,1)):($=ie(p),$.c(),w($,1),$.m(i,V)):$&&(re(),C($,1,1,()=>{$=null}),le())},i(p){g||(w(t.$$.fragment,p),w(E,p),w($),g=!0)},o(p){C(t.$$.fragment,p),C(E,p),C($),g=!1},d(p){p&&u(e),R(t),E&&E.d(p),$&&$.d(),b=!1,k()}}}function Ue(o,e,t){let l,a,r,s;G(o,te,d=>t(0,l=d)),G(o,ke,d=>t(1,a=d)),G(o,we,d=>t(2,r=d)),G(o,Ee,d=>t(3,s=d));let{$$slots:n={},$$scope:i}=e;const f=()=>oe(te,l=!1,l),m=()=>oe(te,l=!1,l);return o.$$set=d=>{\"$$scope\"in d&&t(7,i=d.$$scope)},[l,a,r,s,n,f,m,i]}class Xe extends W{constructor(e){super(),X(this,e,Ue,Re,Z,{})}}export{Xe as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/3.CShdKmkC.js",
    "content": "import{s as Y,q as ce,e as L,a as F,c as E,b as I,f as h,g as G,r as u,i as S,h as b,v as de,w as fe,x as ue,l as se,n as me,a1 as oe,k as ae,Z as re,_ as le,J as he,o as $e,y as pe,B as we,a2 as Ie,t as N,d as O}from\"../chunks/scheduler.lruobs1Y.js\";import{S as K,i as Q,a as R,t as H,g as ye,c as Le,b as W,d as j,m as B,e as P}from\"../chunks/index.DyGm78TJ.js\";import{S as Ee,t as x,a as De}from\"../chunks/index.Up5bhyj0.js\";import{e as ge,u as Se,o as Me}from\"../chunks/each.DqwAsWNO.js\";import{g as Te,a as Re}from\"../chunks/spread.CgU5AtxT.js\";import{b as He}from\"../chunks/paths.oQcPQ3IF.js\";const Ve=r=>({}),_e=r=>({}),Ze=r=>({}),be=r=>({});function Ae(r){let t,e,s,l,o;const d=r[1].title,a=ce(d,r,r[0],be),n=r[1].subtitle,i=ce(n,r,r[0],_e);return{c(){t=L(\"div\"),e=L(\"h2\"),a&&a.c(),s=F(),l=L(\"p\"),i&&i.c(),this.h()},l(c){t=E(c,\"DIV\",{class:!0});var g=I(t);e=E(g,\"H2\",{class:!0});var $=I(e);a&&a.l($),$.forEach(h),s=G(g),l=E(g,\"P\",{class:!0});var p=I(l);i&&i.l(p),p.forEach(h),g.forEach(h),this.h()},h(){u(e,\"class\",\"text-lg font-medium text-slate-500\"),u(l,\"class\",\"text-slate-400 pt-1\"),u(t,\"class\",\"bg-slate-200/40 p-4\")},m(c,g){S(c,t,g),b(t,e),a&&a.m(e,null),b(t,s),b(t,l),i&&i.m(l,null),o=!0},p(c,[g]){a&&a.p&&(!o||g&1)&&de(a,d,c,c[0],o?ue(d,c[0],g,Ze):fe(c[0]),be),i&&i.p&&(!o||g&1)&&de(i,n,c,c[0],o?ue(n,c[0],g,Ve):fe(c[0]),_e)},i(c){o||(R(a,c),R(i,c),o=!0)},o(c){H(a,c),H(i,c),o=!1},d(c){c&&h(t),a&&a.d(c),i&&i.d(c)}}}function Ce(r,t,e){let{$$slots:s={},$$scope:l}=t;return r.$$set=o=>{\"$$scope\"in o&&e(0,l=o.$$scope)},[l,s]}class te extends K{constructor(t){super(),Q(this,t,Ce,Ae,Y,{})}}function ve(r){let t,e,s,l;return{c(){t=L(\"div\"),e=re(\"svg\"),s=re(\"path\"),l=re(\"path\"),this.h()},l(o){t=E(o,\"DIV\",{class:!0,style:!0,\"data-dependency-id\":!0});var d=I(t);e=le(d,\"svg\",{class:!0,xmlns:!0,\"shape-rendering\":!0,height:!0,width:!0});var a=I(e);s=le(a,\"path\",{class:!0,d:!0,stroke:!0,\"stroke-width\":!0,fill:!0}),I(s).forEach(h),l=le(a,\"path\",{d:!0,fill:!0}),I(l).forEach(h),a.forEach(h),d.forEach(h),this.h()},h(){u(s,\"class\",\"select-area svelte-12syssu\"),u(s,\"d\",r[6]),u(s,\"stroke\",r[1]),u(s,\"stroke-width\",r[2]),u(s,\"fill\",\"transparent\"),u(l,\"d\",r[5]),u(l,\"fill\",r[1]),u(e,\"class\",\"arrow svelte-12syssu\"),u(e,\"xmlns\",\"http://www.w3.org/2000/svg\"),u(e,\"shape-rendering\",\"crispEdges\"),u(e,\"height\",\"100%\"),u(e,\"width\",\"100%\"),u(t,\"class\",\"sg-dependency svelte-12syssu\"),he(t,\"left\",\"0\"),he(t,\"top\",\"0\"),u(t,\"data-dependency-id\",r[0])},m(o,d){S(o,t,d),b(t,e),b(e,s),b(e,l)},p(o,d){d&64&&u(s,\"d\",o[6]),d&2&&u(s,\"stroke\",o[1]),d&4&&u(s,\"stroke-width\",o[2]),d&32&&u(l,\"d\",o[5]),d&2&&u(l,\"fill\",o[1]),d&1&&u(t,\"data-dependency-id\",o[0])},d(o){o&&h(t)}}}function Ne(r){let t,e=(!r[3]&&!r[4]||r[3]!==r[4])&&ve(r);return{c(){e&&e.c(),t=se()},l(s){e&&e.l(s),t=se()},m(s,l){e&&e.m(s,l),S(s,t,l)},p(s,[l]){!s[3]&&!s[4]||s[3]!==s[4]?e?e.p(s,l):(e=ve(s),e.c(),e.m(t.parentNode,t)):e&&(e.d(1),e=null)},i:me,o:me,d(s){s&&h(t),e&&e.d(s)}}}const V=12,C=5;function Oe(r,t,e){let s,l;const{rowStore:o,taskStore:d}=oe(\"dataStore\");ae(r,o,f=>e(13,s=f)),ae(r,d,f=>e(14,l=f));let{id:a}=t,{fromId:n}=t,{toId:i}=t,{stroke:c=\"red\"}=t,{strokeWidth:g=2}=t,$,p,v,M,m,Z;return r.$$set=f=>{\"id\"in f&&e(0,a=f.id),\"fromId\"in f&&e(9,n=f.fromId),\"toId\"in f&&e(10,i=f.toId),\"stroke\"in f&&e(1,c=f.stroke),\"strokeWidth\"in f&&e(2,g=f.strokeWidth)},r.$$.update=()=>{if(r.$$.dirty&32344){e(11,v=l.entities[n]),e(3,M=s.entities[v.model.resourceId].hidden),e(12,m=l.entities[i]),e(4,Z=s.entities[m.model.resourceId].hidden);let f=v.top+v.height/2,y=v.left+v.width,k=m.top+m.height/2,D=m.left,T=D-y,q=k-f;M?(e(6,p=`M${D} ${k}`),y+V>=D&&f!=k?e(6,p+=`L ${D+1.5-V} ${k}`):e(6,p+=`L ${D+1.5-T/2} ${k}`),e(6,p+=\"m -2 -2 a 2 2 0 1 1 0 4 a 2 2 0 1 1 0 -4\"),e(5,$=`M${m.left-C}  ${m.top+m.height/2-C} \n                            L${m.left} ${m.top+m.height/2} \n                            L${m.left-C} ${m.top+m.height/2+C} Z`)):Z?(e(6,p=`M${y} ${f}`),y+V>=D&&f!=k?e(6,p+=`L ${y+1.5+V} ${f}`):e(6,p+=`L ${y+1.5+T/2} ${f}`),e(6,p+=\"m -2 -2 a 2 2 0 1 1 0 4 a 2 2 0 1 1 0 -4\"),e(5,$=\"\")):!M&&!Z&&(e(6,p=`M${y} ${f}`),y+V>=D&&f!=k?e(6,p+=`L ${y+V} ${f} \n                            L ${y+V} ${f+q/2}\n                            L ${D-V} ${f+q/2}\n                            L ${D-V} ${k}\n                            L ${D-2} ${k}`):e(6,p+=`L ${y+T/2} ${f} \n                            L ${y+T/2} ${k}\n                            L ${D-2} ${k}`),e(5,$=`M${m.left-C} ${m.top+m.height/2-C} \n                            L${m.left} ${m.top+m.height/2} \n                            L${m.left-C} ${m.top+m.height/2+C} Z`))}},[a,c,g,M,Z,$,p,o,d,n,i,v,m,s,l]}class ze extends K{constructor(t){super(),Q(this,t,Oe,Ne,Y,{id:0,fromId:9,toId:10,stroke:1,strokeWidth:2})}}function ke(r,t,e){const s=r.slice();return s[7]=t[e],s}function xe(r,t){let e,s,l;const o=[t[7]];let d={};for(let a=0;a<o.length;a+=1)d=$e(d,o[a]);return s=new ze({props:d}),{key:r,first:null,c(){e=se(),W(s.$$.fragment),this.h()},l(a){e=se(),j(s.$$.fragment,a),this.h()},h(){this.first=e},m(a,n){S(a,e,n),B(s,a,n),l=!0},p(a,n){t=a;const i=n&1?Te(o,[Re(t[7])]):{};s.$set(i)},i(a){l||(R(s.$$.fragment,a),l=!0)},o(a){H(s.$$.fragment,a),l=!1},d(a){a&&h(e),P(s,a)}}}function Fe(r){let t,e=[],s=new Map,l,o=ge(r[0]);const d=a=>a[7].id;for(let a=0;a<o.length;a+=1){let n=ke(r,o,a),i=d(n);s.set(i,e[a]=xe(i,n))}return{c(){t=L(\"div\");for(let a=0;a<e.length;a+=1)e[a].c();this.h()},l(a){t=E(a,\"DIV\",{class:!0});var n=I(t);for(let i=0;i<e.length;i+=1)e[i].l(n);n.forEach(h),this.h()},h(){u(t,\"class\",\"dependency-container svelte-epxabx\")},m(a,n){S(a,t,n);for(let i=0;i<e.length;i+=1)e[i]&&e[i].m(t,null);l=!0},p(a,[n]){n&1&&(o=ge(a[0]),ye(),e=Se(e,n,d,1,a,o,s,t,Me,xe,null,ke),Le())},i(a){if(!l){for(let n=0;n<o.length;n+=1)R(e[n]);l=!0}},o(a){for(let n=0;n<e.length;n+=1)H(e[n]);l=!1},d(a){a&&h(t);for(let n=0;n<e.length;n+=1)e[n].d()}}}function Ge(r,t,e){let s,l;const{visibleHeight:o}=oe(\"dimensions\");ae(r,o,c=>e(5,s=c));const{taskStore:d}=oe(\"dataStore\");ae(r,d,c=>e(6,l=c));let{paddingTop:a}=t,{dependencies:n=[]}=t,i=[];return r.$$set=c=>{\"paddingTop\"in c&&e(3,a=c.paddingTop),\"dependencies\"in c&&e(4,n=c.dependencies)},r.$$.update=()=>{if(r.$$.dirty&120){const c=[];for(let g=0;g<n.length;g++){const $=n[g],p=l.entities,v=p[$.fromId],M=p[$.toId];v&&M&&Math.min(v.top,M.top)<=a+s&&Math.max(v.top,M.top)>=a&&c.push($)}e(0,i=c)}},[i,o,d,a,n,s,l]}class We extends K{constructor(t){super(),Q(this,t,Ge,Fe,Y,{paddingTop:3,dependencies:4})}}const je=We;function Be(r){let t,e,s;return e=new Ee({props:{from:x(\"8:00\"),to:x(\"16:00\"),fitWidth:!0,ganttTableModules:[De],ganttBodyModules:[je],rows:[{id:1,label:\"Jedd Balden\"},{id:2,label:\"Rozele McFarland\"},{id:3,label:\"Chrissy Bullard\"},{id:4,label:\"Patience Leschelle\"},{id:5,label:\"Rosette Henrie\"}],dependencies:[{id:1,fromId:3,toId:4,stroke:\"#64748b\"}],tasks:r[0],timeRanges:[{id:0,from:x(\"10:00\"),to:x(\"11:00\"),classes:\"time-range-lunch\",label:\"Lunch\",resizable:!1}]}}),{c(){t=L(\"div\"),W(e.$$.fragment),this.h()},l(l){t=E(l,\"DIV\",{class:!0});var o=I(t);j(e.$$.fragment,o),o.forEach(h),this.h()},h(){u(t,\"class\",\"example w-full svelte-1decuf8\")},m(l,o){S(l,t,o),B(e,t,null),s=!0},p(l,[o]){const d={};o&1&&(d.tasks=l[0]),e.$set(d)},i(l){s||(R(e.$$.fragment,l),s=!0)},o(l){H(e.$$.fragment,l),s=!1},d(l){l&&h(t),P(e)}}}function Pe(r,t,e){let s=[{id:1,resourceId:1,from:x(\"9:00\"),to:x(\"10:00\"),label:\"Site visit\",classes:\"task-slate\"},{id:2,resourceId:3,from:x(\"9:00\"),to:x(\"12:15\"),label:\"Development\",classes:\"task-slate\",enableDragging:!1,enableResize:!1},{id:3,resourceId:4,from:x(\"8:30\"),to:x(\"10:30\"),label:\"Design\",classes:\"task-blue\"},{id:4,resourceId:5,from:x(\"12:30\"),to:x(\"14:30\"),label:\"Review\",classes:\"task-blue\"},{id:5,resourceId:2,from:x(\"12:30\"),to:x(\"15:00\"),label:\"Review\",classes:\"task-pink\"}],l=0;const o=[{resourceId:1,from:x(\"9:00\"),to:x(\"10:00\"),classes:\"task-blue\"},{resourceId:2,from:x(\"8:30\"),to:x(\"11:30\"),classes:\"task-pink\"},{resourceId:3,from:x(\"12:30\"),to:x(\"14:30\"),classes:\"task-blue\"}];return setInterval(()=>{e(1,l++,l)},2e3),r.$$.update=()=>{if(r.$$.dirty&3){const d=o[l%o.length];Object.assign(s[0],d),e(0,s),e(1,l)}},[s,l]}class qe extends K{constructor(t){super(),Q(this,t,Pe,Be,Y,{})}}function Ue(r){let t;return{c(){t=N(\"Interactive\")},l(e){t=O(e,\"Interactive\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function Je(r){let t;return{c(){t=N(\"Items can be added, moved and resized. Select multiple to move them at once.\")},l(e){t=O(e,\"Items can be added, moved and resized. Select multiple to move them at once.\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function Xe(r){let t;return{c(){t=N(\"Fast\")},l(e){t=O(e,\"Fast\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function Ye(r){let t;return{c(){t=N(\"Display thousands of tasks assigned to thousands of resources. Update them in real-time.\")},l(e){t=O(e,\"Display thousands of tasks assigned to thousands of resources. Update them in real-time.\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function Ke(r){let t;return{c(){t=N(\"Zoom\")},l(e){t=O(e,\"Zoom\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function Qe(r){let t;return{c(){t=N(\"Zoom the chart in or out. Display different periods of time.\")},l(e){t=O(e,\"Zoom the chart in or out. Display different periods of time.\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function et(r){let t;return{c(){t=N(\"Layouts\")},l(e){t=O(e,\"Layouts\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function tt(r){let t;return{c(){t=N(\"Display tasks overlapped or spaced apart.\")},l(e){t=O(e,\"Display tasks overlapped or spaced apart.\")},m(e,s){S(e,t,s)},d(e){e&&h(t)}}}function st(r){let t,e,s,l=`<div class=\"absolute inset-0 bottom-10 bg-bottom bg-no-repeat bg-slate-200\"><div class=\"absolute inset-0 bg-grid-slate-900/[0.04] bg-[bottom_1px_center] dark:bg-grid-slate-400/[0.05] dark:bg-bottom dark:border-b dark:border-slate-100/5\"></div></div> <div class=\"relative max-w-5xl mx-auto pt-20 sm:pt-24 lg:pt-32\"><h1 class=\"text-slate-900 font-extrabold text-4xl sm:text-5xl lg:text-6xl tracking-tight text-center dark:text-white\">Lightweight and fast interactive <span class=\"bg-clip-text text-transparent bg-gradient-to-tr from-pink-500 to-violet-500\">Gantt chart.</span></h1> <p class=\"mt-6 text-lg text-slate-600 text-center max-w-3xl mx-auto dark:text-slate-400\"><span class=\"font-medium bg-clip-text text-transparent bg-gradient-to-tr from-pink-500 to-violet-500\">Svelte-gantt</span> is a lightweight and fast interactive gantt chart/resource booking component\n\t\t\t\t\tmade with Svelte. Compatible with React, Angular, Vue, Svelte... Zero dependencies.</p> <div class=\"mt-6 sm:mt-10 flex justify-center space-x-6 text-sm\"><a class=\"group text-white font-medium text-2xl transition-all hover:scale-105 px-6 py-3 text-soft mb-12 bg-gradient-to-tr from-pink-500 to-violet-500 hover:bg-violet-600 mx-auto transition-all\" href=\"${He}/docs/getting-started/installation\"><span class=\"inline-block transform transition-transform duration-100 group-hover:translate-x-0\">Get started</span></a></div></div>`,o,d,a,n,i,c,g,$,p,v,M,m,Z,f,y,k,D,T,q='<div class=\"relative max-w-5xl mx-auto\"><div class=\"text-slate-100\">@2024 Ante Novokmet - <a href=\"https://github.com/ANovokmet/\">ANovokmet</a></div></div>',ee;return i=new qe({}),v=new te({props:{$$slots:{subtitle:[Je],title:[Ue]},$$scope:{ctx:r}}}),m=new te({props:{$$slots:{subtitle:[Ye],title:[Xe]},$$scope:{ctx:r}}}),f=new te({props:{$$slots:{subtitle:[Qe],title:[Ke]},$$scope:{ctx:r}}}),k=new te({props:{$$slots:{subtitle:[tt],title:[et]},$$scope:{ctx:r}}}),{c(){t=L(\"main\"),e=L(\"header\"),s=L(\"div\"),s.innerHTML=l,o=F(),d=L(\"div\"),a=L(\"div\"),n=L(\"div\"),W(i.$$.fragment),c=F(),g=L(\"section\"),$=L(\"div\"),p=L(\"div\"),W(v.$$.fragment),M=F(),W(m.$$.fragment),Z=F(),W(f.$$.fragment),y=F(),W(k.$$.fragment),D=F(),T=L(\"footer\"),T.innerHTML=q,this.h()},l(_){t=E(_,\"MAIN\",{class:!0});var w=I(t);e=E(w,\"HEADER\",{class:!0});var z=I(e);s=E(z,\"DIV\",{class:!0,\"data-svelte-h\":!0}),pe(s)!==\"svelte-bmuix0\"&&(s.innerHTML=l),o=G(z),d=E(z,\"DIV\",{class:!0});var U=I(d);a=E(U,\"DIV\",{class:!0});var J=I(a);n=E(J,\"DIV\",{class:!0});var X=I(n);j(i.$$.fragment,X),X.forEach(h),J.forEach(h),U.forEach(h),z.forEach(h),c=G(w),g=E(w,\"SECTION\",{class:!0});var ne=I(g);$=E(ne,\"DIV\",{class:!0});var ie=I($);p=E(ie,\"DIV\",{class:!0});var A=I(p);j(v.$$.fragment,A),M=G(A),j(m.$$.fragment,A),Z=G(A),j(f.$$.fragment,A),y=G(A),j(k.$$.fragment,A),A.forEach(h),ie.forEach(h),ne.forEach(h),D=G(w),T=E(w,\"FOOTER\",{class:!0,\"data-svelte-h\":!0}),pe(T)!==\"svelte-5lbwz8\"&&(T.innerHTML=q),w.forEach(h),this.h()},h(){u(s,\"class\",\"px-4 sm:px-6 md:px-8 pt-12\"),u(n,\"class\",\"relative overflow-hidden shadow-xl flex bg-white max-h-[60vh] sm:rounded-xl lg:h-[34.6875rem] xl:h-[31.625rem] dark:bg-slate-900/70 dark:backdrop-blur dark:ring-1 dark:ring-inset dark:ring-white/10 !h-auto max-h-[none]\"),u(a,\"class\",\"-mx-4 sm:mx-0\"),u(d,\"class\",\"max-w-7xl mx-auto px-4 sm:px-6 md:px-8 mt-20 sm:mt-24 lg:mt-32\"),u(e,\"class\",\"relative\"),u(p,\"class\",\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\"),u($,\"class\",\"relative max-w-5xl mx-auto pt-20 sm:pt-24 lg:pt-32 mb-20 sm:mb-24 lg:mb-32 px-4 sm:px-6 md:px-8 lg:px-0\"),u(g,\"class\",\"grow\"),u(T,\"class\",\"h-40 bg-slate-400 flex items-center justify-center\"),u(t,\"class\",\"overflow-hidden flex flex-col min-h-screen\")},m(_,w){S(_,t,w),b(t,e),b(e,s),b(e,o),b(e,d),b(d,a),b(a,n),B(i,n,null),b(t,c),b(t,g),b(g,$),b($,p),B(v,p,null),b(p,M),B(m,p,null),b(p,Z),B(f,p,null),b(p,y),B(k,p,null),b(t,D),b(t,T),ee=!0},p(_,[w]){const z={};w&2&&(z.$$scope={dirty:w,ctx:_}),v.$set(z);const U={};w&2&&(U.$$scope={dirty:w,ctx:_}),m.$set(U);const J={};w&2&&(J.$$scope={dirty:w,ctx:_}),f.$set(J);const X={};w&2&&(X.$$scope={dirty:w,ctx:_}),k.$set(X)},i(_){ee||(R(i.$$.fragment,_),R(v.$$.fragment,_),R(m.$$.fragment,_),R(f.$$.fragment,_),R(k.$$.fragment,_),ee=!0)},o(_){H(i.$$.fragment,_),H(v.$$.fragment,_),H(m.$$.fragment,_),H(f.$$.fragment,_),H(k.$$.fragment,_),ee=!1},d(_){_&&h(t),P(i),P(v),P(m),P(f),P(k)}}}function at(r){let t=new IntersectionObserver(e=>{e.forEach(s=>{s.target.classList.remove(\"opacity-0\",\"translate-y-2\"),s.target.classList.add(\"opacity-100\",\"translate-y-0\")})});return we(()=>{document.body.classList.add(\"landing-page\"),document.querySelectorAll(\".loading\").forEach(e=>t.observe(e))}),Ie(()=>{document.body.classList.remove(\"landing-page\")}),[]}class dt extends K{constructor(t){super(),Q(this,t,at,st,Y,{})}}export{dt as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/4.C_seFb3q.js",
    "content": "import{b as o}from\"../chunks/paths.oQcPQ3IF.js\";import{R as r}from\"../chunks/control.CYgJF_JY.js\";function n(e,t){throw new r(e,t.toString())}new TextEncoder;const a=()=>{n(307,`${o}/docs/getting-started/installation`)},c=Object.freeze(Object.defineProperty({__proto__:null,load:a},Symbol.toStringTag,{value:\"Module\"}));export{c as universal};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/5.BYIMj9Cv.js",
    "content": "import{s as q,e as h,a as f,c as m,b as N,y as x,g,f as r,r as b,i,h as F,n as V,o as I,p as J,H as Z,z as tt}from\"../chunks/scheduler.lruobs1Y.js\";import{S as A,i as U,b as $,d as C,m as T,a as H,t as L,e as j}from\"../chunks/index.DyGm78TJ.js\";import{g as at,a as K}from\"../chunks/spread.CgU5AtxT.js\";import{L as et}from\"../chunks/layout.zjTtpqzV.js\";import{S as Q,t as D,a as X}from\"../chunks/index.Up5bhyj0.js\";function nt(d){let t,n,p=\"Click on row headers to expand and collapse.\",s,e,c;return e=new Q({props:{from:D(\"8:00\"),to:D(\"12:00\"),tableHeaders:[{title:\"Title\",property:\"label\",type:\"tree\"}],rows:[{id:1,label:\"Parent 1\",expanded:!1,children:[{id:11,label:\"Child 1\"},{id:12,label:\"Child 2\"}]},{id:2,label:\"Parent 2\",expanded:!0,children:[{id:21,label:\"Child 1\",children:[{id:211,label:\"Grandchild 1\"}]},{id:22,label:\"Child 2\"},{id:23,label:\"Child 3\"}]},{id:3,label:\"No children\"}],ganttTableModules:[X]}}),{c(){t=h(\"div\"),n=h(\"div\"),n.textContent=p,s=f(),$(e.$$.fragment),this.h()},l(o){t=m(o,\"DIV\",{class:!0});var u=N(t);n=m(u,\"DIV\",{class:!0,\"data-svelte-h\":!0}),x(n)!==\"svelte-jgvk8t\"&&(n.textContent=p),s=g(u),C(e.$$.fragment,u),u.forEach(r),this.h()},h(){b(n,\"class\",\"text-center border-b\"),b(t,\"class\",\"example border my-12 svelte-ovg8kz\")},m(o,u){i(o,t,u),F(t,n),F(t,s),T(e,t,null),c=!0},p:V,i(o){c||(H(e.$$.fragment,o),c=!0)},o(o){L(e.$$.fragment,o),c=!1},d(o){o&&r(t),j(e)}}}class st extends A{constructor(t){super(),U(this,t,null,nt,q,{})}}function ot(d){let t,n,p;return n=new Q({props:{from:D(\"8:00\"),to:D(\"12:00\"),rows:[{id:1,label:\"Using the label\"},{id:2,label:\"Apply custom classes\",classes:\"row-gradient\"},{id:3,label:\"With custom html content\",contentHtml:'<div class=\"h-full flex justify-center items-center\"><span class=\"bg-gradient-to-tr from-pink-500 to-violet-500 text-violet-50 px-1\">Custom html content</span></div>'},{id:4,headerHtml:'<div class=\"h-full flex justify-center items-center\"><span class=\"bg-gradient-to-tr from-pink-500 to-violet-500 text-violet-50 px-1\">This time in header</span></div>'}],ganttTableModules:[X]}}),{c(){t=h(\"div\"),$(n.$$.fragment),this.h()},l(s){t=m(s,\"DIV\",{class:!0});var e=N(t);C(n.$$.fragment,e),e.forEach(r),this.h()},h(){b(t,\"class\",\"example border my-12 svelte-199ryr9\")},m(s,e){i(s,t,e),T(n,t,null),p=!0},p:V,i(s){p||(H(n.$$.fragment,s),p=!0)},o(s){L(n.$$.fragment,s),p=!1},d(s){s&&r(t),j(n)}}}class pt extends A{constructor(t){super(),U(this,t,null,ot,q,{})}}function lt(d){let t,n='Row<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#row\">#</a>',p,s,e=\"Rows are defined as a list of objects. Rows can be rendered as a collapsible tree (rows are collapsed with SvelteGanttTable module). Row objects may have these parameters:\",c,o,u='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>id</code></td> <td><code>number | string</code></td> <td>Id of row, every row needs to have a unique one. <strong>(required)</strong></td> <td align=\"right\"></td></tr> <tr><td><code>classes</code></td> <td><code>string | string[]</code></td> <td>Custom CSS classes to apply to row.</td> <td align=\"right\"></td></tr> <tr><td><code>contentHtml</code></td> <td><code>string</code></td> <td>Html content of row, renders as background to a row.</td> <td align=\"right\"></td></tr> <tr><td><code>enableDragging</code></td> <td><code>boolean</code></td> <td>enable dragging of tasks to and from this row.</td> <td align=\"right\"><code>true</code></td></tr> <tr><td><code>draggable</code></td> <td><code>boolean</code></td> <td>enable dragging of tasks to and from this row. <em>(deprecated)</em></td> <td align=\"right\"><code>true</code></td></tr> <tr><td><code>enableResize</code></td> <td><code>boolean</code></td> <td>enable resize of tasks on this row.</td> <td align=\"right\"><code>true</code></td></tr> <tr><td><code>resizable</code></td> <td><code>boolean</code></td> <td>enable resize of tasks on this row. <em>(deprecated)</em></td> <td align=\"right\"><code>true</code></td></tr> <tr><td><code>label</code></td> <td><code>string</code></td> <td>Label of row, could be any other property, can be displayed with SvelteGanttTable.</td> <td align=\"right\"></td></tr> <tr><td><code>headerHtml</code></td> <td><code>string</code></td> <td>Html content of table row header, displayed in SvelteGanttTable.</td> <td align=\"right\"></td></tr> <tr><td><code>children</code></td> <td><code>object[]</code></td> <td>List of children row objects, these can have their own children.</td> <td align=\"right\"></td></tr> <tr><td><code>expanded</code></td> <td><code>boolean</code></td> <td>Used when tree view is enabled, controls the expanded state.</td> <td align=\"right\"></td></tr> <tr><td><code>height</code></td> <td><code>number</code></td> <td>The height of the row.</td> <td align=\"right\"><code>52</code></td></tr></tbody>',M,y,S,k,B='Collapsible rows<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#collapsible-rows\">#</a>',P,v,W=\"To use collapsible rows add row items to <code>row.children</code> property. To show a button for expanding rows, set <code>type: &#39;tree&#39;</code> to the table header.\",R,w,E,Y=`<code class=\"language-js\">gantt<span class=\"token punctuation\">.</span><span class=\"token function\">$set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    tableHeaders<span class=\"token operator\">=</span><span class=\"token punctuation\">&#123;</span><span class=\"token punctuation\">[</span> <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'Title'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">property</span><span class=\"token operator\">:</span> <span class=\"token string\">'label'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">type</span><span class=\"token operator\">:</span> <span class=\"token string\">'tree'</span> <span class=\"token punctuation\">&#125;</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n    rows<span class=\"token operator\">=</span><span class=\"token punctuation\">&#123;</span><span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Parent 1'</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">expanded</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">children</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">11</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Child 1'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span> \n                <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">12</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Child 2'</span> <span class=\"token punctuation\">&#125;</span>\n            <span class=\"token punctuation\">]</span>\n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span> \n        <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Parent 2'</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">expanded</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">children</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">21</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Child 1'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">children</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">211</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Grandchild 1'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span> \n                <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">22</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Child 2'</span> <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span> \n                <span class=\"token punctuation\">&#123;</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">23</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Child 3'</span> <span class=\"token punctuation\">&#125;</span>\n            <span class=\"token punctuation\">]</span>\n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">&#123;</span>\n            <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> \n            <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'No children'</span> \n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">&#125;</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code>`,G,_,z;return y=new pt({}),_=new st({}),{c(){t=h(\"h1\"),t.innerHTML=n,p=f(),s=h(\"p\"),s.textContent=e,c=f(),o=h(\"table\"),o.innerHTML=u,M=f(),$(y.$$.fragment),S=f(),k=h(\"h1\"),k.innerHTML=B,P=f(),v=h(\"p\"),v.innerHTML=W,R=f(),w=h(\"pre\"),E=new Z(!1),G=f(),$(_.$$.fragment),this.h()},l(a){t=m(a,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),x(t)!==\"svelte-m7yn88\"&&(t.innerHTML=n),p=g(a),s=m(a,\"P\",{\"data-svelte-h\":!0}),x(s)!==\"svelte-ah8mfk\"&&(s.textContent=e),c=g(a),o=m(a,\"TABLE\",{\"data-svelte-h\":!0}),x(o)!==\"svelte-6v2uat\"&&(o.innerHTML=u),M=g(a),C(y.$$.fragment,a),S=g(a),k=m(a,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),x(k)!==\"svelte-14pltb5\"&&(k.innerHTML=B),P=g(a),v=m(a,\"P\",{\"data-svelte-h\":!0}),x(v)!==\"svelte-skxylx\"&&(v.innerHTML=W),R=g(a),w=m(a,\"PRE\",{class:!0});var l=N(w);E=tt(l,!1),l.forEach(r),G=g(a),C(_.$$.fragment,a),this.h()},h(){b(t,\"id\",\"row\"),b(t,\"tabindex\",\"-1\"),b(k,\"id\",\"collapsible-rows\"),b(k,\"tabindex\",\"-1\"),E.a=null,b(w,\"class\",\"language-js\")},m(a,l){i(a,t,l),i(a,p,l),i(a,s,l),i(a,c,l),i(a,o,l),i(a,M,l),T(y,a,l),i(a,S,l),i(a,k,l),i(a,P,l),i(a,v,l),i(a,R,l),i(a,w,l),E.m(Y,w),i(a,G,l),T(_,a,l),z=!0},p:V,i(a){z||(H(y.$$.fragment,a),H(_.$$.fragment,a),z=!0)},o(a){L(y.$$.fragment,a),L(_.$$.fragment,a),z=!1},d(a){a&&(r(t),r(p),r(s),r(c),r(o),r(M),r(S),r(k),r(P),r(v),r(R),r(w),r(G)),j(y,a),j(_,a)}}}function rt(d){let t,n;const p=[d[0],O];let s={$$slots:{default:[lt]},$$scope:{ctx:d}};for(let e=0;e<p.length;e+=1)s=I(s,p[e]);return t=new et({props:s}),{c(){$(t.$$.fragment)},l(e){C(t.$$.fragment,e)},m(e,c){T(t,e,c),n=!0},p(e,[c]){const o=c&1?at(p,[c&1&&K(e[0]),c&0&&K(O)]):{};c&2&&(o.$$scope={dirty:c,ctx:e}),t.$set(o)},i(e){n||(H(t.$$.fragment,e),n=!0)},o(e){L(t.$$.fragment,e),n=!1},d(e){j(t,e)}}}const O={title:\"Rows\"};function ct(d,t,n){return d.$$set=p=>{n(0,t=I(I({},t),J(p)))},t=J(t),[t]}class mt extends A{constructor(t){super(),U(this,t,ct,rt,q,{})}}export{mt as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/6.BjLYl_tC.js",
    "content": "import{s as ct,e as c,c as u,b as R,f as o,r as b,i as l,n as Lt,o as rt,p as Ct,a as m,H as zt,y as h,g as f,z as Rt,h as v,t as At,d as jt}from\"../chunks/scheduler.lruobs1Y.js\";import{S as ut,i as pt,b as S,d as B,m as q,a as N,t as W,e as O}from\"../chunks/index.DyGm78TJ.js\";import{g as Pt,a as wt}from\"../chunks/spread.CgU5AtxT.js\";import{L as St}from\"../chunks/layout.zjTtpqzV.js\";import{S as Mt,t as p,f as Dt}from\"../chunks/index.Up5bhyj0.js\";import{A as Bt}from\"../chunks/A.201zTarD.js\";function qt(g){let e,a,i;return a=new Mt({props:{from:p(\"8:00\"),to:p(\"14:00\"),minWidth:200,fitWidth:!0,rows:[{id:1,label:\"Row 1\"},{id:2,label:\"Row 2\"},{id:3,label:\"Row 3\"},{id:4,label:\"Row 4\"},{id:5,label:\"Row 4\"},{id:6,label:\"Row 4\"}],tasks:[{id:1,resourceId:1,from:p(\"8:30\"),to:p(\"10:00\"),label:\"Default\"},{id:2,resourceId:2,from:p(\"9:00\"),to:p(\"10:30\"),label:\"25% done\",amountDone:25},{id:3,resourceId:3,from:p(\"9:30\"),to:p(\"11:00\"),label:\"Custom class\",classes:\"gradient\"},{id:4,resourceId:4,from:p(\"10:00\"),to:p(\"11:30\"),html:'<span class=\"flex items-center gap-2\"><span class=\"w-4 h-4 bg-blue-800\"></span>Html content</span>'},{id:5,resourceId:5,from:p(\"10:30\"),to:p(\"12:00\"),label:\"Resizable but not draggable\",enableDragging:!1},{id:6,resourceId:6,from:p(\"11:00\"),to:p(\"12:30\"),label:\"Draggable but not resizable\",enableResize:!1}]}}),{c(){e=c(\"div\"),S(a.$$.fragment),this.h()},l(n){e=u(n,\"DIV\",{class:!0});var d=R(e);B(a.$$.fragment,d),d.forEach(o),this.h()},h(){b(e,\"class\",\"example border my-12 svelte-k9bk9f\")},m(n,d){l(n,e,d),q(a,e,null),i=!0},p:Lt,i(n){i||(N(a.$$.fragment,n),i=!0)},o(n){W(a.$$.fragment,n),i=!1},d(n){n&&o(e),O(a)}}}class Nt extends ut{constructor(e){super(),pt(this,e,null,qt,ct,{})}}function Wt(g){let e,a,i;return a=new Mt({props:{from:p(\"8:00\"),to:p(\"14:00\"),minWidth:200,fitWidth:!0,rowHeight:140,taskElementHook:g[0],rows:[{id:1,label:\"Row 1\"},{id:2,label:\"Row 2\"}],tasks:[{id:1,resourceId:1,from:p(\"8:30\"),to:p(\"11:00\"),label:\" \",title:\"Employee Details page\",classes:\"task\",priority:\"Medium\",assignees:[\"AD\",\"BC\",\"TE\"]},{id:2,resourceId:2,from:p(\"9:30\"),to:p(\"13:00\"),label:\" \",title:\"Documentation page\",classes:\"task\",priority:\"High\",assignees:[\"AN\",\"TE\"]}]}}),{c(){e=c(\"div\"),S(a.$$.fragment),this.h()},l(n){e=u(n,\"DIV\",{class:!0});var d=R(e);B(a.$$.fragment,d),d.forEach(o),this.h()},h(){b(e,\"class\",\"example border\")},m(n,d){l(n,e,d),q(a,e,null),i=!0},p:Lt,i(n){i||(N(a.$$.fragment,n),i=!0)},o(n){W(a.$$.fragment,n),i=!1},d(n){n&&o(e),O(a)}}}function Ot(g){function e(a,i){const n=document.createElement(\"div\");n.className=\"\";function d(r){n.innerHTML=`\n<div class=\"task__header\">\n    <div class=\"task__title\">${r.title}</div>\n    <div class=\"task__subtitle\">${Dt(r.from,\"MMM DD\")} - ${Dt(r.to,\"H:mm\")}</div>\n\n    <div class=\"task__menu\">\n    <i class=\"fa fa-ellipsis-vertical\"></i>\n    </div>\n</div>\n<div class=\"task__footer\">\n    <div class=\"task__tags\">\n    <span class=\"task__tag violet\">\n        <i class=\"task__icon-archive-box\"></i>\n    </span>\n    <span class=\"task__tag amber\">\n        • ${r.priority}\n    </span>\n    </div>\n    <div class=\"task__assignees\">\n        ${r.assignees.map(k=>`<span class=\"task__assignee\">${k}</span>`)}\n    </div>\n</div>`}return d(i),a.appendChild(n),{update(r){console.log(r),d(r)},destroy(){a.remove()}}}return[e]}class Vt extends ut{constructor(e){super(),pt(this,e,Ot,Wt,ct,{})}}function Ft(g){let e;return{c(){e=At(\"Task element hook\")},l(a){e=jt(a,\"Task element hook\")},m(a,i){l(a,e,i)},d(a){a&&o(e)}}}function Gt(g){let e,a='Task<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#task\">#</a>',i,n,d=\"Tasks are intervals of time that are assigned to a resource. They are defined as a list of objects:\",r,k,mt='<thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>id</code></td> <td><code>number</code>|<code>string</code></td> <td>Id of task, every task needs to have a unique one.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>resourceId</code></td> <td><code>number</code>`string`</td> <td>Id of row, every task must specify a valid resourceId. <strong>(required)</strong></td> <td align=\"right\">undefined</td></tr> <tr><td><code>amountDone</code></td> <td><code>number</code></td> <td>Task completion in percent, indicated on task.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>classes</code></td> <td><code>string</code>|<code>Array</code></td> <td>Custom CSS classes to apply to task.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>from</code></td> <td><code>number</code></td> <td>Datetime task starts on.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>to</code></td> <td><code>number</code></td> <td>Datetime task ends on.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>label</code></td> <td><code>string</code></td> <td>Label of task.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>html</code></td> <td><code>string</code></td> <td>Html content of task, will override label.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>showButton</code></td> <td><code>boolean</code></td> <td>Show button bar.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>buttonClasses</code></td> <td><code>string</code>|<code>Array</code></td> <td>Button classes, useful for fontawesome icons.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>buttonHtml</code></td> <td><code>string</code></td> <td>Html content of button.</td> <td align=\"right\">undefined</td></tr> <tr><td><code>draggable</code></td> <td><code>boolean</code></td> <td>enable dragging of task.</td> <td align=\"right\">true</td></tr> <tr><td><code>enableDragging</code></td> <td><code>boolean</code></td> <td>enable dragging of task. <em>(deprecated)</em></td> <td align=\"right\">true</td></tr> <tr><td><code>resizable</code></td> <td><code>boolean</code></td> <td>enable resize of task.</td> <td align=\"right\">true</td></tr> <tr><td><code>resizeEnabled</code></td> <td><code>boolean</code></td> <td>enable resize of task. <em>(deprecated)</em></td> <td align=\"right\">true</td></tr></tbody>',Y,C,J,$,ft='TaskElementHook<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#taskelementhook\">#</a>',K,w,gt=\"Custom task components can be created by passing <code>taskElementHook</code> to gantt.\",Q,T,A,ht='<tr><th>Name</th> <th>Description</th> <th>Type</th> <th align=\"right\">Default</th></tr>',ot,V,_,j,kt=\"<code>taskElementHook</code>\",dt,P,_t=\"<code>function</code>\",lt,F,H,it,D,vt=\"undefined\",U,E,bt=\"Task element hook function is a svelte action, eg.\",X,L,Z,It=`<code class=\"language-js\"><span class=\"token punctuation\">(</span><span class=\"token parameter\">node<span class=\"token punctuation\">,</span> task</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">&#123;</span> \n    node<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> console<span class=\"token punctuation\">.</span>log<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">&#123;</span> \n        <span class=\"token function\">update</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">task</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">&#123;</span> \n            <span class=\"token comment\">// ...</span>\n        <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n        <span class=\"token function\">destroy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">&#123;</span>\n            node<span class=\"token punctuation\">.</span><span class=\"token function\">removeEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> console<span class=\"token punctuation\">.</span>log<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">&#125;</span> \n    <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">;</span> \n<span class=\"token punctuation\">&#125;</span></code>`,tt,M,$t=\"This enables you to add custom behaviour and look to tasks. For example, displaying a popup on hover, or rendering Angular components within the task.\",et,I,nt,x,xt='Milestones<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#milestones\">#</a>',at,z,Tt=\"TODO\",st;return C=new Nt({}),H=new Bt({props:{href:\"#taskelementhook\",$$slots:{default:[Ft]},$$scope:{ctx:g}}}),I=new Vt({}),{c(){e=c(\"h1\"),e.innerHTML=a,i=m(),n=c(\"p\"),n.textContent=d,r=m(),k=c(\"table\"),k.innerHTML=mt,Y=m(),S(C.$$.fragment),J=m(),$=c(\"h3\"),$.innerHTML=ft,K=m(),w=c(\"p\"),w.innerHTML=gt,Q=m(),T=c(\"table\"),A=c(\"thead\"),A.innerHTML=ht,ot=m(),V=c(\"tbody\"),_=c(\"tr\"),j=c(\"td\"),j.innerHTML=kt,dt=m(),P=c(\"td\"),P.innerHTML=_t,lt=m(),F=c(\"td\"),S(H.$$.fragment),it=m(),D=c(\"td\"),D.textContent=vt,U=m(),E=c(\"p\"),E.textContent=bt,X=m(),L=c(\"pre\"),Z=new zt(!1),tt=m(),M=c(\"p\"),M.textContent=$t,et=m(),S(I.$$.fragment),nt=m(),x=c(\"h3\"),x.innerHTML=xt,at=m(),z=c(\"p\"),z.textContent=Tt,this.h()},l(t){e=u(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),h(e)!==\"svelte-kalzzn\"&&(e.innerHTML=a),i=f(t),n=u(t,\"P\",{\"data-svelte-h\":!0}),h(n)!==\"svelte-9a8s4k\"&&(n.textContent=d),r=f(t),k=u(t,\"TABLE\",{\"data-svelte-h\":!0}),h(k)!==\"svelte-1jc588s\"&&(k.innerHTML=mt),Y=f(t),B(C.$$.fragment,t),J=f(t),$=u(t,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),h($)!==\"svelte-1u5cwzo\"&&($.innerHTML=ft),K=f(t),w=u(t,\"P\",{\"data-svelte-h\":!0}),h(w)!==\"svelte-1ehsgat\"&&(w.innerHTML=gt),Q=f(t),T=u(t,\"TABLE\",{});var s=R(T);A=u(s,\"THEAD\",{\"data-svelte-h\":!0}),h(A)!==\"svelte-9d27rb\"&&(A.innerHTML=ht),ot=f(s),V=u(s,\"TBODY\",{});var G=R(V);_=u(G,\"TR\",{});var y=R(_);j=u(y,\"TD\",{\"data-svelte-h\":!0}),h(j)!==\"svelte-jd7ua1\"&&(j.innerHTML=kt),dt=f(y),P=u(y,\"TD\",{\"data-svelte-h\":!0}),h(P)!==\"svelte-4c6y6l\"&&(P.innerHTML=_t),lt=f(y),F=u(y,\"TD\",{});var Ht=R(F);B(H.$$.fragment,Ht),Ht.forEach(o),it=f(y),D=u(y,\"TD\",{align:!0,\"data-svelte-h\":!0}),h(D)!==\"svelte-19hhiyk\"&&(D.textContent=vt),y.forEach(o),G.forEach(o),s.forEach(o),U=f(t),E=u(t,\"P\",{\"data-svelte-h\":!0}),h(E)!==\"svelte-1wv2ef2\"&&(E.textContent=bt),X=f(t),L=u(t,\"PRE\",{class:!0});var yt=R(L);Z=Rt(yt,!1),yt.forEach(o),tt=f(t),M=u(t,\"P\",{\"data-svelte-h\":!0}),h(M)!==\"svelte-1nfuzj5\"&&(M.textContent=$t),et=f(t),B(I.$$.fragment,t),nt=f(t),x=u(t,\"H3\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),h(x)!==\"svelte-gavn3t\"&&(x.innerHTML=xt),at=f(t),z=u(t,\"P\",{\"data-svelte-h\":!0}),h(z)!==\"svelte-1yyqpus\"&&(z.textContent=Tt),this.h()},h(){b(e,\"id\",\"task\"),b(e,\"tabindex\",\"-1\"),b($,\"id\",\"taskelementhook\"),b($,\"tabindex\",\"-1\"),b(D,\"align\",\"right\"),Z.a=null,b(L,\"class\",\"language-js\"),b(x,\"id\",\"milestones\"),b(x,\"tabindex\",\"-1\")},m(t,s){l(t,e,s),l(t,i,s),l(t,n,s),l(t,r,s),l(t,k,s),l(t,Y,s),q(C,t,s),l(t,J,s),l(t,$,s),l(t,K,s),l(t,w,s),l(t,Q,s),l(t,T,s),v(T,A),v(T,ot),v(T,V),v(V,_),v(_,j),v(_,dt),v(_,P),v(_,lt),v(_,F),q(H,F,null),v(_,it),v(_,D),l(t,U,s),l(t,E,s),l(t,X,s),l(t,L,s),Z.m(It,L),l(t,tt,s),l(t,M,s),l(t,et,s),q(I,t,s),l(t,nt,s),l(t,x,s),l(t,at,s),l(t,z,s),st=!0},p(t,s){const G={};s&2&&(G.$$scope={dirty:s,ctx:t}),H.$set(G)},i(t){st||(N(C.$$.fragment,t),N(H.$$.fragment,t),N(I.$$.fragment,t),st=!0)},o(t){W(C.$$.fragment,t),W(H.$$.fragment,t),W(I.$$.fragment,t),st=!1},d(t){t&&(o(e),o(i),o(n),o(r),o(k),o(Y),o(J),o($),o(K),o(w),o(Q),o(T),o(U),o(E),o(X),o(L),o(tt),o(M),o(et),o(nt),o(x),o(at),o(z)),O(C,t),O(H),O(I,t)}}}function Yt(g){let e,a;const i=[g[0],Et];let n={$$slots:{default:[Gt]},$$scope:{ctx:g}};for(let d=0;d<i.length;d+=1)n=rt(n,i[d]);return e=new St({props:n}),{c(){S(e.$$.fragment)},l(d){B(e.$$.fragment,d)},m(d,r){q(e,d,r),a=!0},p(d,[r]){const k=r&1?Pt(i,[r&1&&wt(d[0]),r&0&&wt(Et)]):{};r&2&&(k.$$scope={dirty:r,ctx:d}),e.$set(k)},i(d){a||(N(e.$$.fragment,d),a=!0)},o(d){W(e.$$.fragment,d),a=!1},d(d){O(e,d)}}}const Et={title:\"Tasks\"};function Jt(g,e,a){return g.$$set=i=>{a(0,e=rt(rt({},e),Ct(i)))},e=Ct(e),[e]}class ee extends ut{constructor(e){super(),pt(this,e,Jt,Yt,ct,{})}}export{ee as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/7.DFYbvg6E.js",
    "content": "import{s as z,e as f,c as g,b as E,f as l,r as w,i,n as M,o as T,p as j,a as v,H as A,y as x,g as $,z as W}from\"../chunks/scheduler.lruobs1Y.js\";import{S as B,i as P,b as D,d as C,m as L,a as H,t as R,e as S}from\"../chunks/index.DyGm78TJ.js\";import{g as G,a as I}from\"../chunks/spread.CgU5AtxT.js\";import{L as N}from\"../chunks/layout.zjTtpqzV.js\";import{S as U,t as d}from\"../chunks/index.Up5bhyj0.js\";function V(u){let n,e,p;return e=new U({props:{from:d(\"8:00\"),to:d(\"14:00\"),minWidth:400,fitWidth:!0,rows:[{id:1},{id:2}],timeRanges:[{id:1,from:d(\"8:00\"),to:d(\"9:00\"),classes:null,label:\"Breakfast\"},{id:0,from:d(\"10:00\"),to:d(\"11:00\"),classes:\"time-range-lunch\",label:\"Lunch\",resizable:!1},{id:2,from:d(\"12:00\"),to:d(\"13:00\"),label:\"Custom class\",classes:\"gradient\"}]}}),{c(){n=f(\"div\"),D(e.$$.fragment),this.h()},l(t){n=g(t,\"DIV\",{class:!0});var a=E(n);C(e.$$.fragment,a),a.forEach(l),this.h()},h(){w(n,\"class\",\"example border my-12 svelte-134mm6g\")},m(t,a){i(t,n,a),L(e,n,null),p=!0},p:M,i(t){p||(H(e.$$.fragment,t),p=!0)},o(t){R(e.$$.fragment,t),p=!1},d(t){t&&l(n),S(e)}}}class F extends B{constructor(n){super(),P(this,n,null,V,z,{})}}function J(u){let n,e='Time range<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#time-range\">#</a>',p,t,a=\"Renders a block of time spanning all the rows.\",c,r,O='<thead><tr><th>Name</th> <th>Description</th> <th>Type</th> <th align=\"right\">Default</th></tr></thead> <tbody><tr><td><code>id</code></td> <td>Unique id of time range.</td> <td><code>number</code>|<code>string</code></td> <td align=\"right\">undefined</td></tr> <tr><td><code>from</code></td> <td>Datetime timeRange starts on.</td> <td><code>number</code></td> <td align=\"right\">undefined</td></tr> <tr><td><code>to</code></td> <td>Datetime timeRange ends on.</td> <td><code>number</code></td> <td align=\"right\">undefined</td></tr> <tr><td><code>classes</code></td> <td>Custom CSS classes.</td> <td><code>string</code>|<code>Array</code></td> <td align=\"right\">undefined</td></tr> <tr><td><code>label</code></td> <td>Display label.</td> <td><code>string</code></td> <td align=\"right\">undefined</td></tr> <tr><td><code>resizable</code></td> <td>Should the time range be resizable.</td> <td><code>boolean</code></td> <td align=\"right\">false</td></tr></tbody>',y,k,h,q=`<code class=\"language-js\"><span class=\"token keyword\">const</span> options <span class=\"token operator\">=</span> <span class=\"token punctuation\">&#123;</span>\n    <span class=\"token comment\">// ...</span>\n    <span class=\"token literal-property property\">timeRanges</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n            <span class=\"token punctuation\">&#123;</span>\n                <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">from</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T08:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">to</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T09:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Breakfast'</span>\n            <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">&#123;</span>\n                <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">from</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T10:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">to</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T11:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">classes</span><span class=\"token operator\">:</span> <span class=\"token string\">'time-range-lunch'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Lunch'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">resizable</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">&#123;</span>\n                <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">from</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T11:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">to</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2024-02-01T12:00:00'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">label</span><span class=\"token operator\">:</span> <span class=\"token string\">'Custom class'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">classes</span><span class=\"token operator\">:</span> <span class=\"token string\">'gradient'</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">&#125;</span>\n    <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">&#125;</span></code>`,_,m,b;return m=new F({}),{c(){n=f(\"h1\"),n.innerHTML=e,p=v(),t=f(\"p\"),t.textContent=a,c=v(),r=f(\"table\"),r.innerHTML=O,y=v(),k=f(\"pre\"),h=new A(!1),_=v(),D(m.$$.fragment),this.h()},l(s){n=g(s,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),x(n)!==\"svelte-snhjny\"&&(n.innerHTML=e),p=$(s),t=g(s,\"P\",{\"data-svelte-h\":!0}),x(t)!==\"svelte-1ikt61s\"&&(t.textContent=a),c=$(s),r=g(s,\"TABLE\",{\"data-svelte-h\":!0}),x(r)!==\"svelte-1j6yvtm\"&&(r.innerHTML=O),y=$(s),k=g(s,\"PRE\",{class:!0});var o=E(k);h=W(o,!1),o.forEach(l),_=$(s),C(m.$$.fragment,s),this.h()},h(){w(n,\"id\",\"time-range\"),w(n,\"tabindex\",\"-1\"),h.a=null,w(k,\"class\",\"language-js\")},m(s,o){i(s,n,o),i(s,p,o),i(s,t,o),i(s,c,o),i(s,r,o),i(s,y,o),i(s,k,o),h.m(q,k),i(s,_,o),L(m,s,o),b=!0},p:M,i(s){b||(H(m.$$.fragment,s),b=!0)},o(s){R(m.$$.fragment,s),b=!1},d(s){s&&(l(n),l(p),l(t),l(c),l(r),l(y),l(k),l(_)),S(m,s)}}}function K(u){let n,e;const p=[u[0]];let t={$$slots:{default:[J]},$$scope:{ctx:u}};for(let a=0;a<p.length;a+=1)t=T(t,p[a]);return n=new N({props:t}),{c(){D(n.$$.fragment)},l(a){C(n.$$.fragment,a)},m(a,c){L(n,a,c),e=!0},p(a,[c]){const r=c&1?G(p,[I(a[0])]):{};c&2&&(r.$$scope={dirty:c,ctx:a}),n.$set(r)},i(a){e||(H(n.$$.fragment,a),e=!0)},o(a){R(n.$$.fragment,a),e=!1},d(a){S(n,a)}}}function Q(u,n,e){return u.$$set=p=>{e(0,n=T(T({},n),j(p)))},n=j(n),[n]}class an extends B{constructor(n){super(),P(this,n,Q,K,z,{})}}export{an as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/8.B7pihDEp.js",
    "content": "import{s as fe,o as Rt,p as le,e as l,a as o,H as E,t as L,c as p,y as d,g as c,b as h,z as H,f as e,d as M,r,i as s,h as T}from\"../chunks/scheduler.lruobs1Y.js\";import{S as ke,i as _e,b as St,d as Gt,m as It,a as zt,t as Ot,e as Dt}from\"../chunks/index.DyGm78TJ.js\";import{g as ve,a as he}from\"../chunks/spread.CgU5AtxT.js\";import{L as ge}from\"../chunks/layout.zjTtpqzV.js\";import{A as pe}from\"../chunks/A.201zTarD.js\";function xe(k){let n;return{c(){n=L(\"Rollup\")},l(u){n=M(u,\"Rollup\")},m(u,m){s(u,n,m)},d(u){u&&e(n)}}}function $e(k){let n;return{c(){n=L(\"localhost:5173\")},l(u){n=M(u,\"localhost:5173\")},m(u,m){s(u,n,m)},d(u){u&&e(n)}}}function we(k){let n,u='Installation<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#installation\">#</a>',m,f,i,P='<code class=\"language-undefined\">npm install svelte-gantt</code>',j,R,qt=\"Use ES6 imports in your code:\",Z,S,tt,oe=`<code class=\"language-js\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> SvelteGantt<span class=\"token punctuation\">,</span> SvelteGanttTable <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt'</span><span class=\"token punctuation\">;</span></code>`,et,G,At=\"or use the IIFE build:\",at,I,st,ce='<code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>node_modules/svelte-gantt/index.iife.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code>',nt,w,Bt=\"<li>Initialize svelte-gantt:</li>\",lt,z,pt,ue=`<code class=\"language-js\"><span class=\"token keyword\">var</span> options <span class=\"token operator\">=</span> <span class=\"token punctuation\">&#123;</span>\n    <span class=\"token comment\">/* ... */</span>\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">var</span> gantt <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">SvelteGantt</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">&#123;</span>\n    <span class=\"token comment\">// target a DOM element</span>\n    <span class=\"token literal-property property\">target</span><span class=\"token operator\">:</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'example-gantt'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token comment\">// svelte-gantt options</span>\n    <span class=\"token literal-property property\">props</span><span class=\"token operator\">:</span> options\n<span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code>`,ot,O,Nt=\"..or run the example by opening <em>./public/index.html</em>\",ct,g,Ut='Usage with svelte<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#usage-with-svelte\">#</a>',ut,D,Yt=\"To use svelte components import from <code>svelte-gantt/svelte</code>:\",it,q,rt,ie=`<code class=\"language-js\"><span class=\"token operator\">&lt;</span>script<span class=\"token operator\">></span>\n    <span class=\"token keyword\">import</span> <span class=\"token punctuation\">&#123;</span> SvelteGantt<span class=\"token punctuation\">,</span> SvelteGanttTable<span class=\"token punctuation\">,</span> MomentSvelteGanttDateAdapter <span class=\"token punctuation\">&#125;</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'svelte-gantt/svelte'</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> options <span class=\"token operator\">=</span> <span class=\"token punctuation\">&#123;</span>\n        <span class=\"token comment\">//</span>\n    <span class=\"token punctuation\">&#125;</span><span class=\"token punctuation\">;</span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>script<span class=\"token operator\">></span>\n<span class=\"token operator\">&lt;</span>div <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"container\"</span><span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span>SvelteGantt <span class=\"token punctuation\">&#123;</span><span class=\"token operator\">...</span>options<span class=\"token punctuation\">&#125;</span><span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>SvelteGantt<span class=\"token operator\">></span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span></code>`,dt,x,Ft='Development build<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#development-build\">#</a>',mt,A,Jt=`If you want to build from sources:\nInstall the dependencies…`,ft,B,kt,re=`<code class=\"language-bash\"><span class=\"token builtin class-name\">cd</span> svelte-gantt\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span>\n<span class=\"token builtin class-name\">cd</span> demo\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span></code>`,_t,_,Ht,J,Kt=\"cd ..\",Tt,b,Lt,vt,N,ht,de='<code class=\"language-bash\"><span class=\"token function\">npm</span> run demo:dev</code>',gt,v,Mt,C,Pt,K,Qt=\"src\",jt,xt,$,Vt='Build the package<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#build-the-package\">#</a>',$t,U,Wt=\"To build the package yourself:\",wt,Y,Xt=\"<li>Clone or download repository.</li> <li>Run the package build:</li>\",bt,F,Ct,me=`<code class=\"language-undefined\">npm install\nnpm run package</code>`,yt,y,Zt=\"<li>The package is built in <em>./dist</em></li>\",Et;return b=new pe({props:{href:\"https://rollupjs.org\",rel:\"nofollow\",$$slots:{default:[xe]},$$scope:{ctx:k}}}),C=new pe({props:{href:\"http://localhost:5173/\",rel:\"nofollow\",$$slots:{default:[$e]},$$scope:{ctx:k}}}),{c(){n=l(\"h1\"),n.innerHTML=u,m=o(),f=l(\"pre\"),i=new E(!1),j=o(),R=l(\"p\"),R.textContent=qt,Z=o(),S=l(\"pre\"),tt=new E(!1),et=o(),G=l(\"p\"),G.textContent=At,at=o(),I=l(\"pre\"),st=new E(!1),nt=o(),w=l(\"ol\"),w.innerHTML=Bt,lt=o(),z=l(\"pre\"),pt=new E(!1),ot=o(),O=l(\"p\"),O.innerHTML=Nt,ct=o(),g=l(\"h1\"),g.innerHTML=Ut,ut=o(),D=l(\"p\"),D.innerHTML=Yt,it=o(),q=l(\"pre\"),rt=new E(!1),dt=o(),x=l(\"h1\"),x.innerHTML=Ft,mt=o(),A=l(\"p\"),A.textContent=Jt,ft=o(),B=l(\"pre\"),kt=new E(!1),_t=o(),_=l(\"p\"),Ht=L(\"…then in the project root (\"),J=l(\"code\"),J.textContent=Kt,Tt=L(\") start \"),St(b.$$.fragment),Lt=L(\":\"),vt=o(),N=l(\"pre\"),ht=new E(!1),gt=o(),v=l(\"p\"),Mt=L(\"Navigate to \"),St(C.$$.fragment),Pt=L(\". You should see your app running. Edit a component file in \"),K=l(\"code\"),K.textContent=Qt,jt=L(\", save it, and reload the page to see your changes.\"),xt=o(),$=l(\"h2\"),$.innerHTML=Vt,$t=o(),U=l(\"p\"),U.textContent=Wt,wt=o(),Y=l(\"ol\"),Y.innerHTML=Xt,bt=o(),F=l(\"pre\"),Ct=new E(!1),yt=o(),y=l(\"ol\"),y.innerHTML=Zt,this.h()},l(t){n=p(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),d(n)!==\"svelte-1jis1gc\"&&(n.innerHTML=u),m=c(t),f=p(t,\"PRE\",{class:!0});var a=h(f);i=H(a,!1),a.forEach(e),j=c(t),R=p(t,\"P\",{\"data-svelte-h\":!0}),d(R)!==\"svelte-jv4cco\"&&(R.textContent=qt),Z=c(t),S=p(t,\"PRE\",{class:!0});var W=h(S);tt=H(W,!1),W.forEach(e),et=c(t),G=p(t,\"P\",{\"data-svelte-h\":!0}),d(G)!==\"svelte-qu7946\"&&(G.textContent=At),at=c(t),I=p(t,\"PRE\",{class:!0});var X=h(I);st=H(X,!1),X.forEach(e),nt=c(t),w=p(t,\"OL\",{start:!0,\"data-svelte-h\":!0}),d(w)!==\"svelte-uiw41d\"&&(w.innerHTML=Bt),lt=c(t),z=p(t,\"PRE\",{class:!0});var te=h(z);pt=H(te,!1),te.forEach(e),ot=c(t),O=p(t,\"P\",{\"data-svelte-h\":!0}),d(O)!==\"svelte-e0vh4f\"&&(O.innerHTML=Nt),ct=c(t),g=p(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),d(g)!==\"svelte-1o8atb4\"&&(g.innerHTML=Ut),ut=c(t),D=p(t,\"P\",{\"data-svelte-h\":!0}),d(D)!==\"svelte-1tp6tmz\"&&(D.innerHTML=Yt),it=c(t),q=p(t,\"PRE\",{class:!0});var ee=h(q);rt=H(ee,!1),ee.forEach(e),dt=c(t),x=p(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),d(x)!==\"svelte-vdkha5\"&&(x.innerHTML=Ft),mt=c(t),A=p(t,\"P\",{\"data-svelte-h\":!0}),d(A)!==\"svelte-1tz23hc\"&&(A.textContent=Jt),ft=c(t),B=p(t,\"PRE\",{class:!0});var ae=h(B);kt=H(ae,!1),ae.forEach(e),_t=c(t),_=p(t,\"P\",{});var Q=h(_);Ht=M(Q,\"…then in the project root (\"),J=p(Q,\"CODE\",{\"data-svelte-h\":!0}),d(J)!==\"svelte-c6eert\"&&(J.textContent=Kt),Tt=M(Q,\") start \"),Gt(b.$$.fragment,Q),Lt=M(Q,\":\"),Q.forEach(e),vt=c(t),N=p(t,\"PRE\",{class:!0});var se=h(N);ht=H(se,!1),se.forEach(e),gt=c(t),v=p(t,\"P\",{});var V=h(v);Mt=M(V,\"Navigate to \"),Gt(C.$$.fragment,V),Pt=M(V,\". You should see your app running. Edit a component file in \"),K=p(V,\"CODE\",{\"data-svelte-h\":!0}),d(K)!==\"svelte-1fkgjes\"&&(K.textContent=Qt),jt=M(V,\", save it, and reload the page to see your changes.\"),V.forEach(e),xt=c(t),$=p(t,\"H2\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),d($)!==\"svelte-3d5fmz\"&&($.innerHTML=Vt),$t=c(t),U=p(t,\"P\",{\"data-svelte-h\":!0}),d(U)!==\"svelte-1468c7d\"&&(U.textContent=Wt),wt=c(t),Y=p(t,\"OL\",{\"data-svelte-h\":!0}),d(Y)!==\"svelte-6y6xe8\"&&(Y.innerHTML=Xt),bt=c(t),F=p(t,\"PRE\",{class:!0});var ne=h(F);Ct=H(ne,!1),ne.forEach(e),yt=c(t),y=p(t,\"OL\",{start:!0,\"data-svelte-h\":!0}),d(y)!==\"svelte-16zbp9d\"&&(y.innerHTML=Zt),this.h()},h(){r(n,\"id\",\"installation\"),r(n,\"tabindex\",\"-1\"),i.a=null,r(f,\"class\",\"language-undefined\"),tt.a=null,r(S,\"class\",\"language-js\"),st.a=null,r(I,\"class\",\"language-html\"),r(w,\"start\",\"3\"),pt.a=null,r(z,\"class\",\"language-js\"),r(g,\"id\",\"usage-with-svelte\"),r(g,\"tabindex\",\"-1\"),rt.a=null,r(q,\"class\",\"language-js\"),r(x,\"id\",\"development-build\"),r(x,\"tabindex\",\"-1\"),kt.a=null,r(B,\"class\",\"language-bash\"),ht.a=null,r(N,\"class\",\"language-bash\"),r($,\"id\",\"build-the-package\"),r($,\"tabindex\",\"-1\"),Ct.a=null,r(F,\"class\",\"language-undefined\"),r(y,\"start\",\"3\")},m(t,a){s(t,n,a),s(t,m,a),s(t,f,a),i.m(P,f),s(t,j,a),s(t,R,a),s(t,Z,a),s(t,S,a),tt.m(oe,S),s(t,et,a),s(t,G,a),s(t,at,a),s(t,I,a),st.m(ce,I),s(t,nt,a),s(t,w,a),s(t,lt,a),s(t,z,a),pt.m(ue,z),s(t,ot,a),s(t,O,a),s(t,ct,a),s(t,g,a),s(t,ut,a),s(t,D,a),s(t,it,a),s(t,q,a),rt.m(ie,q),s(t,dt,a),s(t,x,a),s(t,mt,a),s(t,A,a),s(t,ft,a),s(t,B,a),kt.m(re,B),s(t,_t,a),s(t,_,a),T(_,Ht),T(_,J),T(_,Tt),It(b,_,null),T(_,Lt),s(t,vt,a),s(t,N,a),ht.m(de,N),s(t,gt,a),s(t,v,a),T(v,Mt),It(C,v,null),T(v,Pt),T(v,K),T(v,jt),s(t,xt,a),s(t,$,a),s(t,$t,a),s(t,U,a),s(t,wt,a),s(t,Y,a),s(t,bt,a),s(t,F,a),Ct.m(me,F),s(t,yt,a),s(t,y,a),Et=!0},p(t,a){const W={};a&2&&(W.$$scope={dirty:a,ctx:t}),b.$set(W);const X={};a&2&&(X.$$scope={dirty:a,ctx:t}),C.$set(X)},i(t){Et||(zt(b.$$.fragment,t),zt(C.$$.fragment,t),Et=!0)},o(t){Ot(b.$$.fragment,t),Ot(C.$$.fragment,t),Et=!1},d(t){t&&(e(n),e(m),e(f),e(j),e(R),e(Z),e(S),e(et),e(G),e(at),e(I),e(nt),e(w),e(lt),e(z),e(ot),e(O),e(ct),e(g),e(ut),e(D),e(it),e(q),e(dt),e(x),e(mt),e(A),e(ft),e(B),e(_t),e(_),e(vt),e(N),e(gt),e(v),e(xt),e($),e($t),e(U),e(wt),e(Y),e(bt),e(F),e(yt),e(y)),Dt(b),Dt(C)}}}function be(k){let n,u;const m=[k[0]];let f={$$slots:{default:[we]},$$scope:{ctx:k}};for(let i=0;i<m.length;i+=1)f=Rt(f,m[i]);return n=new ge({props:f}),{c(){St(n.$$.fragment)},l(i){Gt(n.$$.fragment,i)},m(i,P){It(n,i,P),u=!0},p(i,[P]){const j=P&1?ve(m,[he(i[0])]):{};P&2&&(j.$$scope={dirty:P,ctx:i}),n.$set(j)},i(i){u||(zt(n.$$.fragment,i),u=!0)},o(i){Ot(n.$$.fragment,i),u=!1},d(i){Dt(n,i)}}}function Ce(k,n,u){return k.$$set=m=>{u(0,n=Rt(Rt({},n),le(m)))},n=le(n),[n]}class Me extends ke{constructor(n){super(),_e(this,n,Ce,be,fe,{})}}export{Me as component};\n"
  },
  {
    "path": "docs/_app/immutable/nodes/9.D5dLAYhx.js",
    "content": "import{s as $,o as b,p as C,e as _,a as g,c as f,y as v,g as L,r as T,i as m,n as w,f as c}from\"../chunks/scheduler.lruobs1Y.js\";import{S,i as j,b as P,d as D,m as q,a as A,t as I,e as N}from\"../chunks/index.DyGm78TJ.js\";import{g as U,a as X}from\"../chunks/spread.CgU5AtxT.js\";import{L as G}from\"../chunks/layout.zjTtpqzV.js\";function J(p){let e,l='Migrating from version 3.x to 4<a class=\"header-anchor\" aria-hidden=\"true\" href=\"#migrating-from-version-3x-to-4\">#</a>',n,s,a=\"<code>svelte-gantt</code> no longer requires <code>moment</code>. You can still use it as <code>MomentSvelteGanttDateAdapter</code>. All parameters that were previously moment objects became numbers (milliseconds since UNIX epoch).\",o,i,M=\"ALL date parameters should be UNIX timestamps (JavaScript <code>Date</code> and <code>moment</code> objects will still work in most of the cases).\",h,d,y=\"Date parameters can stay moment or JavaScript Date objects because they will be transformed to UNIX timestamps.\",x,u,H=\"CSS is now injected so no need to include <code>svelteGantt.css</code> in your HTML.\";return{c(){e=_(\"h1\"),e.innerHTML=l,n=g(),s=_(\"p\"),s.innerHTML=a,o=g(),i=_(\"p\"),i.innerHTML=M,h=g(),d=_(\"p\"),d.textContent=y,x=g(),u=_(\"p\"),u.innerHTML=H,this.h()},l(t){e=f(t,\"H1\",{id:!0,tabindex:!0,\"data-svelte-h\":!0}),v(e)!==\"svelte-cstane\"&&(e.innerHTML=l),n=L(t),s=f(t,\"P\",{\"data-svelte-h\":!0}),v(s)!==\"svelte-6h93ew\"&&(s.innerHTML=a),o=L(t),i=f(t,\"P\",{\"data-svelte-h\":!0}),v(i)!==\"svelte-eqspx7\"&&(i.innerHTML=M),h=L(t),d=f(t,\"P\",{\"data-svelte-h\":!0}),v(d)!==\"svelte-1cpoh57\"&&(d.textContent=y),x=L(t),u=f(t,\"P\",{\"data-svelte-h\":!0}),v(u)!==\"svelte-1g7hg31\"&&(u.innerHTML=H),this.h()},h(){T(e,\"id\",\"migrating-from-version-3x-to-4\"),T(e,\"tabindex\",\"-1\")},m(t,r){m(t,e,r),m(t,n,r),m(t,s,r),m(t,o,r),m(t,i,r),m(t,h,r),m(t,d,r),m(t,x,r),m(t,u,r)},p:w,d(t){t&&(c(e),c(n),c(s),c(o),c(i),c(h),c(d),c(x),c(u))}}}function k(p){let e,l;const n=[p[0]];let s={$$slots:{default:[J]},$$scope:{ctx:p}};for(let a=0;a<n.length;a+=1)s=b(s,n[a]);return e=new G({props:s}),{c(){P(e.$$.fragment)},l(a){D(e.$$.fragment,a)},m(a,o){q(e,a,o),l=!0},p(a,[o]){const i=o&1?U(n,[X(a[0])]):{};o&2&&(i.$$scope={dirty:o,ctx:a}),e.$set(i)},i(a){l||(A(e.$$.fragment,a),l=!0)},o(a){I(e.$$.fragment,a),l=!1},d(a){N(e,a)}}}function Y(p,e,l){return p.$$set=n=>{l(0,e=b(b({},e),C(n)))},e=C(e),[e]}class K extends S{constructor(e){super(),j(this,e,Y,k,$,{})}}export{K as component};\n"
  },
  {
    "path": "docs/_app/version.json",
    "content": "{\"version\":\"1723125560024\"}"
  },
  {
    "path": "examples/example-reactjs/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "examples/example-reactjs/README.md",
    "content": "## Install   \n `yarn i` or `npm i`  \n  \n# Launch  \n`yarn start` or `npm start`  "
  },
  {
    "path": "examples/example-reactjs/package.json",
    "content": "{\n  \"name\": \"demo_for_reactjs\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-scripts\": \"5.0.1\",\n    \"svelte-gantt\": \"file:../../dist\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "examples/example-reactjs/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App - Gantt</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "examples/example-reactjs/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "examples/example-reactjs/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "examples/example-reactjs/src/App.js",
    "content": "import Gantt from './Gantt/index';\n\nfunction App() {\n  return (\n    <div className=\"App\">\n      <Gantt />\n    </div>\n  );\n}\n\nexport default App;\n"
  },
  {
    "path": "examples/example-reactjs/src/Gantt/index.js",
    "content": "\n\nimport { MomentSvelteGanttDateAdapter, SvelteGantt, SvelteGanttDependencies, SvelteGanttTable } from 'svelte-gantt'\nimport moment from 'moment'\nimport { useEffect, useState } from 'react';\n\n\nconst Tree = () => {\n    // Loading\n    const [loaded, setLoaded] = useState(false)\n\n    // Time\n    function time(input) {\n        return moment(input, 'HH:mm')\n    }\n\n    // Start & End\n    const currentStart = time('06:00')\n    const currentEnd = time('18:00')\n\n    // Time ranges\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch',\n            resizable: false\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ]\n\n\n    // Datas to load\n    const data = {\n        rows: [\n            {\n                id: 10,\n                label: \"Accounting\",\n                class: 'row-group',\n                iconClass: 'fas fa-calculator',\n                children: [\n                    {\n                        id: 11,\n                        label: \"Petunia Mulliner\"\n                    }, {\n                        id: 12,\n                        label: \"Mélina Giacovetti\"\n                    }, {\n                        id: 13,\n                        label: \"Marlène Lasslett\"\n                    }, {\n                        id: 14,\n                        label: \"Adda Youell\"\n                    }\n                ]\n            }, {\n                id: 20,\n                label: \"Business Development\",\n                class: 'row-group',\n                iconClass: 'fas fa-user-tie',\n                children: [\n                    {\n                        id: 21,\n                        label: \"Pietra Fallow\"\n                    }, {\n                        id: 22,\n                        label: \"Mariellen Torbard\"\n                    }, {\n                        id: 23,\n                        label: \"Renate Humbee\"\n                    }\n                ]\n            }, {\n                id: 3,\n                label: \"Ida Flewan\"\n            }, {\n                id: 4,\n                label: \"Lauréna Shrigley\"\n            }, {\n                id: 5,\n                label: \"Ange Kembry\"\n            }\n        ],\n        tasks: [\n            {\n                id: 1,\n                resourceId: 11,\n                label: \"LPCVD\",\n                from: time(\"9:00\"),\n                to: time(\"11:00\"),\n                classes: \"orange\"\n            }, {\n                id: 2,\n                resourceId: 12,\n                label: \"Entrepreneurship\",\n                from: time(\"10:00\"),\n                to: time(\"12:30\"),\n                classes: \"orange\"\n            }, {\n                id: 3,\n                resourceId: 13,\n                label: \"PET-CT\",\n                from: time(\"13:30\"),\n                to: time(\"15:00\"),\n                classes: \"orange\"\n            }, {\n                id: 4,\n                resourceId: 14,\n                label: \"Auditing\",\n                from: time(\"9:30\"),\n                to: time(\"11:30\"),\n                classes: \"orange\"\n            }, {\n                id: 5,\n                resourceId: 21,\n                label: \"Security Clearance\",\n                from: time(\"15:15\"),\n                to: time(\"16:00\"),\n                classes: \"green\"\n            }, {\n                id: 6,\n                resourceId: 22,\n                label: \"Policy Analysis\",\n                from: time(\"14:00\"),\n                to: time(\"17:00\"),\n                classes: \"blue\"\n            }, {\n                id: 7,\n                resourceId: 23,\n                label: \"Xbox 360\",\n                from: time(\"13:30\"),\n                to: time(\"14:30\"),\n                classes: \"blue\"\n            }, {\n                id: 8,\n                resourceId: 3,\n                label: \"GNU/Linux\",\n                from: time(\"14:00\"),\n                to: time(\"15:30\"),\n                classes: \"blue\"\n            }, {\n                id: 9,\n                resourceId: 4,\n                label: \"Electronic Trading\",\n                from: time(\"15:00\"),\n                to: time(\"17:00\"),\n                classes: \"green\"\n            }, {\n                id: 10,\n                resourceId: 5,\n                label: \"Alternative Medicine\",\n                from: time(\"14:30\"),\n                to: time(\"15:30\"),\n                classes: \"orange\"\n            }\n        ],\n        dependencies: []\n    }\n\n    // Gantt options\n    const options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    // useEffect to load Gantt\n    useEffect(() => {\n        if (!loaded) {\n            // Create Gantt\n            new SvelteGantt({ target: document.getElementById('example-gantt'), props: options })\n            setLoaded(true)\n        }\n    }, [loaded])\n\n    return (\n        <>\n            {/* GANTT CONTAINER */}\n            <div id=\"example-gantt\"></div>\n        </>\n    )\n}\n\n\nexport default Tree;\n\n"
  },
  {
    "path": "examples/example-reactjs/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <App />\n);\n"
  },
  {
    "path": "examples/example-svelte/.gitignore",
    "content": "/node_modules/\n/public/build/"
  },
  {
    "path": "examples/example-svelte/package.json",
    "content": "{\n    \"name\": \"svelte-gantt-demo\",\n    \"description\": \"Svelte-Gantt Demo\",\n    \"version\": \"1.0.0\",\n    \"author\": \"Ante Novokmet <ante.je.zakon@gmail.com>\",\n    \"scripts\": {\n        \"build\": \"rollup -c\",\n        \"autobuild\": \"rollup -c -w\"\n    },\n    \"dependencies\": {\n        \"moment\": \"^2.22.2\",\n        \"svelte-routing\": \"^1.6.0\"\n    },\n    \"devDependencies\": {\n        \"@rollup/plugin-commonjs\": \"^17.0.0\",\n        \"rollup\": \"^2.36.1\",\n        \"rollup-plugin-node-resolve\": \"^5.2.0\",\n        \"rollup-plugin-svelte\": \"^7.1.0\",\n        \"svelte\": \"^3.46.4\",\n        \"svelte-check\": \"^1.0.0\",\n        \"svelte-gantt\": \"file:../dist\",\n        \"svelte-preprocess\": \"^4.9.8\",\n        \"tslib\": \"^2.0.0\"\n    }\n}\n"
  },
  {
    "path": "examples/example-svelte/rollup.config.js",
    "content": "import svelte from 'rollup-plugin-svelte';\nimport resolve from 'rollup-plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\nimport * as path from 'path';\n\nexport default {\n    input: path.join(__dirname, 'src/index.js'),\n    output: {\n        sourcemap: true,\n        format: 'iife',\n        name: 'app',\n        file: path.join(__dirname, '../docs/build/index.js')\n    },\n    plugins: [\n        svelte({\n            dev: true,\n            emitCss: false,\n            css: css => {\n                css.write(path.join(__dirname, '../docs/build/index.css'));\n            }\n        }),\n        resolve(),\n        commonjs()\n    ],\n}\n"
  },
  {
    "path": "examples/example-svelte/src/App.svelte",
    "content": "<script>\n    import Nav from './components/Nav.svelte';  \n    import { Router, Route, navigate, Link } from \"svelte-routing\";\n    import LargeDataset from './routes/LargeDataset.svelte';\n    import Dependencies from './routes/Dependencies.svelte';\n    import External from './routes/External.svelte';\n    import Events from './routes/Events.svelte';\n    import Tree from './routes/Tree.svelte';\n    import { writable } from 'svelte/store';\n    import { setContext } from 'svelte';\n\n    let showOptions = false;\n    function onToggleOptions() {\n        showOptions = !showOptions;\n    }\n\n    let optionsStream = new writable({});\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        $optionsStream = opts;\n        optionsStream.set(opts);\n        console.log('onChangeOptions', opts);\n    }\n\n    setContext('options', { optionsStream, toggle: new writable(false) });\n\n    function onLoadRoute(event) {\n        navigate(event.detail.url);\n    }\n</script>\n\n<style>\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<Nav on:updateOptions={onChangeOptions} on:toggleOptions={onToggleOptions} on:loadRoute={onLoadRoute}/>\n<div class=\"container\">\n    <Router basepath=\"/svelte-gantt\">\n        <Route path=\"/\" component=\"{LargeDataset}\" />\n        <Route path=\"/dependencies\" component=\"{Dependencies}\" />\n        <Route path=\"/tree\" component=\"{Tree}\" />\n        <Route path=\"/external\" component=\"{External}\" />\n        <Route path=\"/events\" component=\"{Events}\" />\n    </Router>\n\n    {#if showOptions}\n        <!-- <GanttOptions options={options} on:change={onChangeOptions}/> -->\n    {/if}\n</div>"
  },
  {
    "path": "examples/example-svelte/src/components/DateTime.svelte",
    "content": "<script>\n    export let value;\n    $: {\n        parseDate(value);\n    }\n\n    let dateStr = '';\n    let timeStr = '';\n    $: {\n        emitDate(dateStr, timeStr);\n    }\n\n    function parseDate(dateObj) {\n        if(dateObj) {\n            const [date, time] = new Date(dateObj).toLocaleString(\"sv-SE\").split(' ');\n            dateStr = date;\n            timeStr = time;\n        }\n    }\n\n    function emitDate(date, time) {\n        if(date && time) {\n            value = new Date(`${date} ${time}`);\n        } else {\n            value = null;\n        }\n    }\n</script>\n\n<style>\n    .date-time {\n        display: flex;\n    }\n\n    input {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n</style>\n\n<div class=\"date-time\">\n    <input type=\"date\" bind:value={dateStr}>\n    <input type=\"time\" bind:value={timeStr}>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/components/GanttOptions.svelte",
    "content": "<script>\nimport { getContext } from \"svelte\";\n\n    import { createEventDispatcher } from \"svelte\";\n    import DateTime from './DateTime.svelte';\n\n\n    export let options;\n\n    $: {\n        dispatch('change', options);\n    }\n\n    const dispatch = createEventDispatcher();\n\n    const offsetOptions = [5, 10, 15, 30];\n\n    let { toggle, optionsStream } = getContext('options');\n    $: {\n        dispatch('change', $optionsStream);\n    };\n</script>\n\n<style>\n    .controls {\n        background: #ffc0c3;\n        padding: 16px;\n    }\n\n    .form-label {\n        display: block;\n    }\n\n    .form-group {\n        display: flex;\n        flex-direction: column;\n        margin-bottom: 0.5rem;\n    }\n\n    input, select {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n\n    h3 {\n        margin: 0;\n        margin-bottom: 1.5rem;\n    }\n</style>\n\n\n{#if $toggle}\n<div class=\"controls\">\n    <h3>Options</h3>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> columnOffset </label>\n        <select bind:value={options.columnOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> magnetOffset </label>\n        <select bind:value={options.magnetOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> rowHeight ({options.rowHeight}) </label>\n        <input type=\"range\" bind:value={options.rowHeight} min=\"20\" max=\"100\">\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> rowPadding ({options.rowPadding}) </label>\n        <input type=\"range\" bind:value={options.rowPadding} min=\"0\" max=\"20\" step=\"2\">\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> fitWidth </label>\n        <input type=checkbox bind:checked={options.fitWidth}>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> minWidth </label>\n        <input type=\"number\" bind:value={options.minWidth} min=\"800\">\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> from </label>\n        <DateTime bind:value={options.from}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> to </label>\n        <DateTime bind:value={options.to}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> headers[0].format </label>\n        <input type=\"text\" bind:value={options.headers[0].format}>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"form-label\"> headers[1].format </label>\n        <input type=\"text\" bind:value={options.headers[1].format}>\n    </div>\n</div>\n{/if}"
  },
  {
    "path": "examples/example-svelte/src/components/Nav.svelte",
    "content": "<script>\n    import { createEventDispatcher } from 'svelte';\n    import { time } from '../utils';\n    import { getContext } from 'svelte';\n\n    export let currentStart = time('06:00');\n    export let currentEnd = time('18:00');\n\n    const dispatch = createEventDispatcher();\n\n    function onUpdateOptions(options) {\n        dispatch('updateOptions', options);\n    }\n\n    function onSetDayView() {\n        console.log('day view set');\n        onUpdateOptions({\n            fitWidth: true,\n            columnUnit: 'minute',\n            columnOffset: 15,\n            from: currentStart,\n            to: currentEnd,\n            minWidth: 1000,\n            headers: [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        });\n    };\n\n    function onSetWeekView() {\n        console.log('week view set');\n        onUpdateOptions({\n            fitWidth: false,\n            columnUnit: 'hour',\n            columnOffset: 1,\n            from: currentStart.clone().startOf('week'),\n            to: currentStart.clone().endOf('week'),\n            minWidth: 5000,\n            headers: [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        });\n    };\n\n    function onSetNextDay() {\n        currentStart.add(1, 'day');\n        currentEnd.add(1, 'day');\n        console.log('set next day');\n        onUpdateOptions({\n            from: currentStart,\n            to: currentEnd\n        });\n    };\n\n    function onSetPreviousDay() {\n        currentStart.subtract(1, 'day');\n        currentEnd.subtract(1, 'day');\n        console.log('set previous day');\n        onUpdateOptions({\n            from: currentStart,\n            to: currentEnd\n        });\n    };\n\n    let { toggle } = getContext('options');\n    function onToggleOptions() {\n        toggle.update(v => !v);\n        dispatch('toggleOptions');\n    }\n\n    function onLoadRoute(route) {\n        dispatch('loadRoute', { url: route});\n    }\n\n    import { Router, Link, Route } from \"svelte-routing\";\n</script>\n\n<style>\n    button, input[type=button] {\n        border: transparent;\n        font-size: 14px;\n        font-weight: 300;\n        padding: 6px 12px;\n        background: #cc595e;\n        color: #ffffff;\n        cursor: pointer;\n        transition: background 0.2s;\n        outline: none;\n    }\n    \n    input[type=button]:hover {\n        background-color: #b14d51;\n    }\n    \n    input[type=button]:active {\n        background-color: #9d4548;\n    }\n    \n    .header {\n        display: flex;\n        padding: 16px;\n        background: #ee6e73;\n    }\n    \n    @media only screen and (max-width: 900px) {\n        .header {\n            flex-direction: column;\n        }\n    \n        .header-title {\n            justify-content: center;\n            margin-bottom: 6px;\n        }\n    \n        .header-controls {\n            justify-content: center;\n        }\n    }\n    \n    .header-title {\n        display: flex;\n        flex: 1;\n        align-items: center;\n        font-size: 36px;\n        padding: 0 16px;\n    }\n    \n    .header-title a {\n        color: #ffffff;\n        text-decoration: none;\n    }\n    \n    .header-controls {\n        display: flex;\n        align-items: center;\n    }\n    \n    .header input {\n        margin-right: 4px;\n    }\n</style>\n\n<header class=\"header\">\n    <div class=\"header-title\">\n        <a href=\"https://github.com/ANovokmet/svelte-gantt\">Svelte-gantt</a>\n    </div>\n    <div class=\"header-controls\">\n        <input type=\"button\" value=\"Tree\" on:click={() => onLoadRoute('/svelte-gantt/tree')}>\n        <input type=\"button\" value=\"Dependencies\" on:click={() => onLoadRoute('/svelte-gantt/dependencies')}/>\n        <input type=\"button\" value=\"Large\" on:click={() => onLoadRoute('/svelte-gantt/')}/>\n        <input type=\"button\" value=\"External\" on:click={() => onLoadRoute('/svelte-gantt/external')}/>\n        <input type=\"button\" value=\"Events\" on:click={() => onLoadRoute('/svelte-gantt/events')}/>\n\n        <input type=\"button\" value=\"<\" on:click={onSetPreviousDay}/>\n        <input type=\"button\" value=\"Day view\" on:click={onSetDayView}/>\n        <input type=\"button\" value=\">\" on:click={onSetNextDay}/>\n\n        <input type=\"button\" value=\"Week view\" on:click={onSetWeekView}/>\n        <!-- <input id=\"new-task\" type=\"button\" value=\"Drag to gantt\"/> -->\n        <button on:click={onToggleOptions}>|||</button>\n        <!-- <input type=\"button\" value=\"{showCode ? 'Hide data' : 'Show data'}\" on:click={() => showCode = !showCode}/> -->\n    </div>\n</header>"
  },
  {
    "path": "examples/example-svelte/src/index.js",
    "content": "import App from \"./App.svelte\";\n\nconst app = new App({\n    target: document.getElementById(\"app\")\n});\n\nexport default app;"
  },
  {
    "path": "examples/example-svelte/src/routes/Dependencies.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n\n    const currentStart = time('06:00');\n    const currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    export const data = {\n        rows: [{\n            \"id\": 1,\n            \"label\": \"Preparation and Planning\"\n        }, {\n            \"id\": 2,\n            \"label\": \"Development\"\n        }, {\n            \"id\": 3,\n            \"label\": \"Implementation\"\n        }, {\n            \"id\": 4,\n            \"label\": \"Training\"\n        }, {\n            \"id\": 5,\n            \"label\": \"Roll-out product\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 1,\n            \"label\": \"Preparation\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"9:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 1,\n            \"label\": \"Planning\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 2,\n            \"label\": \"Development\",\n            \"from\": time(\"12:00\"),\n            \"to\": time(\"13:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 3,\n            \"label\": \"Implementation\",\n            \"from\": time(\"13:45\"),\n            \"to\": time(\"15:45\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 5,\n            \"label\": \"Finish\",\n            \"from\": time(\"17:00\"),\n            \"to\": time(\"17:45\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 4,\n            \"label\": \"Training\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"10:00\"),\n            \"classes\": \"blue\"\n        }],\n        dependencies: [{\n            id: 1,\n            fromId: 1,\n            toId: 2\n        }, {\n            id: 2,\n            fromId: 2,\n            toId: 3\n        }, {\n            id: 3,\n            fromId: 3,\n            toId: 4\n        }, {\n            id: 4,\n            fromId: 4,\n            toId: 5\n        }, {\n            id: 5,\n            fromId: 6,\n            toId: 5\n        }]\n    };\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/routes/Events.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n\n    const currentStart = time('06:00');\n    const currentEnd = time('18:00');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies],\n        taskElementHook: (node, task) => {\n            let popup;\n            function onHover() {\n                console.log('[task] hover', task);\n                popup = createPopup(task, node);\n            }\n\n            function onLeave() {\n                console.log('[task] hover', task);\n                if(popup) {\n                    popup.remove();\n                }\n            }\n\n            node.addEventListener('mouseenter', onHover);\n            node.addEventListener('mouseleave', onLeave);\n\n            return {\n                destroy() {\n                    console.log('[task] destroy');\n                    node.removeEventListener('mouseenter', onHover);\n                    node.removeEventListener('mouseleave', onLeave);\n                }\n            }\n        },\n        // taskContent: (task) => `${task.label} ${task.from.format('HH:mm')}`\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt-events'), props: options });\n\n        gantt.api.tasks.on.move((task) => console.log('Listener: task move', task));\n        //gantt.api.tasks.on.switchRow((task, row, previousRow) => console.log('Listener: task switched row', task));\n        gantt.api.tasks.on.select((task) => console.log('Listener: task selected', task));\n        //gantt.api.tasks.on.moveEnd((task) => console.log('Listener: task move end', task));\n        gantt.api.tasks.on.change(([data]) => console.log('Listener: task change', data));\n        gantt.api.tasks.on.changed((task) => console.log('Listener: task changed', task));\n        gantt.api.tasks.on.dblclicked((task) => console.log('Listener: task double clicked', task));\n    });\n\n    function createPopup(task, node) {\n        const rect = node.getBoundingClientRect();\n        const div = document.createElement('div');\n        div.className = 'sg-popup';\n        div.innerHTML = `\n            <div class=\"sg-popup-title\">${task.label}</div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">From:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.from).toLocaleTimeString()}</div>\n            </div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">To:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.to).toLocaleTimeString()}</div>\n            </div>\n        `;\n        div.style.position = 'absolute';\n        div.style.top = `${rect.bottom}px`;\n        div.style.left = `${rect.left + rect.width / 2}px`;\n        document.body.appendChild(div);\n        return div;\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt-events {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #example-gantt-events :global(.sg-hover) {\n        background-color: #00000008;\n    }\n\n    #example-gantt-events :global(.sg-hover .sg-table-body-cell) {\n        background-color: #00000008;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt-events\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/routes/External.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n\n    const currentStart = time('06:00');\n    const currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n        const external = new SvelteGanttExternal(document.getElementById('new-task'), {\n            gantt,\n            onsuccess: (row, date, gantt) => {\n                console.log(row.model.id, new Date(date).toISOString())\n                const id = 5000 + Math.floor(Math.random() * 1000);\n                gantt.updateTask({\n                    id,\n                    label: `Task #${id}`,\n                    from: date,\n                    to: date + 3 * 60 * 60 * 1000,\n                    classes: colors[(Math.random() * colors.length) | 0],\n                    resourceId: row.model.id\n                });\n            },\n            elementContent: () => {\n                const element = document.createElement('div');\n                element.innerHTML = 'New Task';\n                element.className = 'sg-external-indicator';\n                return element;\n            }\n        });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #new-task {\n        position: absolute;\n        bottom: 0;\n        right: 0;\n        z-index: 1;\n        background-color: #ee6e73;\n        color: white;\n        padding: 1rem;\n        margin: 0.5rem;\n        cursor: grab;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <div id=\"new-task\">Drag to gantt</div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/routes/LargeDataset.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n    \n    const currentStart = time('06:00');\n    const currentEnd = time('18:00');\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    const data = generate();\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n\n    function shuffle(array) {\n        for (var i = array.length - 1; i > 0; i--) {\n            var j = Math.floor(Math.random() * (i + 1));\n            var temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: 'Content/joe.jpg',\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/routes/Tree.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n\n    const currentStart = time('06:00');\n    const currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 10,\n            label: \"Accounting\",\n            class: 'row-group',\n            iconClass: 'fas fa-calculator',\n            children: [{\n                id: 11,\n                label: \"Petunia Mulliner\"\n            }, {\n                id: 12,\n                label: \"Mélina Giacovetti\"\n            }, {\n                id: 13,\n                label: \"Marlène Lasslett\"\n            }, {\n                id: 14,\n                label: \"Adda Youell\"\n            }]\n        }, {\n            id: 20,\n            label: \"Business Development\",\n            class: 'row-group',\n            iconClass: 'fas fa-user-tie',\n            children: [{\n                id: 21,\n                label: \"Pietra Fallow\"\n            }, {\n                id: 22,\n                label: \"Mariellen Torbard\"\n            }, {\n                id: 23,\n                label: \"Renate Humbee\"\n            }]\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 11,\n            \"label\": \"LPCVD\",\n            \"from\": time(\"9:00\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 12,\n            \"label\": \"Entrepreneurship\",\n            \"from\": time(\"10:00\"),\n            \"to\": time(\"12:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 13,\n            \"label\": \"PET-CT\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"15:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 14,\n            \"label\": \"Auditing\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 21,\n            \"label\": \"Security Clearance\",\n            \"from\": time(\"15:15\"),\n            \"to\": time(\"16:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 22,\n            \"label\": \"Policy Analysis\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 7,\n            \"resourceId\": 23,\n            \"label\": \"Xbox 360\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"14:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 8,\n            \"resourceId\": 3,\n            \"label\": \"GNU/Linux\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 9,\n            \"resourceId\": 4,\n            \"label\": \"Electronic Trading\",\n            \"from\": time(\"15:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 10,\n            \"resourceId\": 5,\n            \"label\": \"Alternative Medicine\",\n            \"from\": time(\"14:30\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-svelte/src/utils.js",
    "content": "import moment from 'moment';\n\nexport function time(input) {\n    return moment(input, 'HH:mm');\n}\n"
  },
  {
    "path": "examples/example-sveltekit/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "examples/example-sveltekit/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "examples/example-sveltekit/README.md",
    "content": "# create-svelte\n\nEverything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).\n\n## Creating a project\n\nIf you're seeing this, you've probably already done this step. Congrats!\n\n```bash\n# create a new project in the current directory\nnpm create svelte@latest\n\n# create a new project in my-app\nnpm create svelte@latest my-app\n```\n\n## Developing\n\nOnce you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:\n\n```bash\nnpm run dev\n\n# or start the server and open the app in a new browser tab\nnpm run dev -- --open\n```\n\n## Building\n\nTo create a production version of your app:\n\n```bash\nnpm run build\n```\n\nYou can preview the production build with `npm run preview`.\n\n> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.\n"
  },
  {
    "path": "examples/example-sveltekit/package.json",
    "content": "{\n\t\"name\": \"demo-sveltekit\",\n\t\"version\": \"0.0.1\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^1.0.0\",\n\t\t\"@sveltejs/kit\": \"^1.0.0\",\n\t\t\"svelte\": \"^3.54.0\",\n\t\t\"svelte-check\": \"^2.9.2\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^4.9.3\",\n\t\t\"vite\": \"^4.0.0\"\n\t},\n\t\"type\": \"module\",\n\t\"dependencies\": {\n\t\t\"svelte-gantt\": \"^4.0.9-beta\"\n\t}\n}\n"
  },
  {
    "path": "examples/example-sveltekit/src/app.d.ts",
    "content": "// See https://kit.svelte.dev/docs/types#app\n// for information about these interfaces\n// and what to do when importing types\ndeclare namespace App {\n\t// interface Error {}\n\t// interface Locals {}\n\t// interface PageData {}\n\t// interface Platform {}\n}\n"
  },
  {
    "path": "examples/example-sveltekit/src/app.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\t\t%sveltekit.head%\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n\n<style>\n\thtml, body{\n\t\tmargin:0;\n\t\t\n\t}\n</style>"
  },
  {
    "path": "examples/example-sveltekit/src/components/DateTime.svelte",
    "content": "<script>\n    export let value;\n    $: {\n        parseDate(value);\n    }\n\n    let dateStr = '';\n    let timeStr = '';\n    $: {\n        emitDate(dateStr, timeStr);\n    }\n\n    function parseDate(dateObj) {\n        if(dateObj) {\n            const [date, time] = new Date(dateObj).toLocaleString(\"sv-SE\").split(' ');\n            dateStr = date;\n            timeStr = time;\n        }\n    }\n\n    function emitDate(date, time) {\n        if(date && time) {\n            value = new Date(`${date} ${time}`);\n        } else {\n            value = null;\n        }\n    }\n</script>\n\n<style>\n    .date-time {\n        display: flex;\n    }\n\n    input {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n</style>\n\n<div class=\"date-time\">\n    <input type=\"date\" bind:value={dateStr}>\n    <input type=\"time\" bind:value={timeStr}>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/components/GanttOptions.svelte",
    "content": "<script>\n    import { createEventDispatcher } from \"svelte\";\n    import DateTime from './DateTime.svelte';\n    import {showOptions} from './../stores/store';\n\n    export let options;\n    const dispatch = createEventDispatcher();\n\n    $: {\n        dispatch('change', options);\n    }\n\n    const offsetOptions = [5, 10, 15, 30];\n</script>\n\n\n\n{#if $showOptions}\n<div class=\"controls\">\n    <h3>Options</h3>\n    <div class=\"form-group\">\n        <label for=\"columnOffset\" class=\"form-label\"> columnOffset </label>\n        <select id=\"columnOffset\" bind:value={options.columnOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"magnetOffset\" class=\"form-label\"> magnetOffset </label>\n        <select id=\"magnetOffset\" bind:value={options.magnetOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"rowHeight\" class=\"form-label\"> rowHeight ({options.rowHeight}) </label>\n        <input id=\"rowHeight\" type=\"range\" bind:value={options.rowHeight} min=\"20\" max=\"100\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"rowPadding\" class=\"form-label\"> rowPadding ({options.rowPadding}) </label>\n        <input id=\"rowPadding\" type=\"range\" bind:value={options.rowPadding} min=\"0\" max=\"20\" step=\"2\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"fitWidth\" class=\"form-label\"> fitWidth </label>\n        <input id=\"fitWidth\" type=checkbox bind:checked={options.fitWidth}>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"minWidth\" class=\"form-label\"> minWidth </label>\n        <input id=\"minWidth\" type=\"number\" bind:value={options.minWidth} min=\"800\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"from\" class=\"form-label\"> from </label>\n        <DateTime bind:value={options.from}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"to\" class=\"form-label\"> to </label>\n        <DateTime bind:value={options.to}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"first-format\" class=\"form-label\"> headers[0].format </label>\n        <input id=\"first-format\"  type=\"text\" bind:value={options.headers[0].format}>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"second-format\"  class=\"form-label\"> headers[1].format </label>\n        <input id=\"second-format\"  type=\"text\" bind:value={options.headers[1].format}>\n    </div>\n</div>\n{/if}\n\n<style>\n    .controls {\n        background: #ffc0c3;\n        padding: 16px;\n    }\n\n    .form-label {\n        display: block;\n    }\n\n    .form-group {\n        display: flex;\n        flex-direction: column;\n        margin-bottom: 0.5rem;\n    }\n\n    input, select {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n\n    h3 {\n        margin: 0;\n        margin-bottom: 1.5rem;\n    }\n</style>\n"
  },
  {
    "path": "examples/example-sveltekit/src/gantt-default.css",
    "content": "*{\n    font-family: 'Lato', sans-serif;\n}\n\n.sg-gantt {\n    font-family: 'Lato', sans-serif;\n    font-size: 10px;\n    color: #656565;\n}\n\n\n.selected {\n    color: white;\n    font-weight: 700;\n}\n\n\n/* --------------------------- */\n/* ------- Task colors ------- */\n/* --------------------------- */\n.sg-task.blue {\n    background: rgb(116, 191, 255);\n}\n\n.sg-task.blue:hover {\n    background: rgb(98, 161, 216);\n}\n\n.sg-task.blue.selected {\n    background: rgb(69, 112, 150);\n}\n\n.sg-task-selected {\n    outline: 2px solid rgba(3, 169, 244, 0.5);\n    outline-offset: 3px;\n    z-index: 1;\n    background: rgb(69, 112, 150);\n}\n\n.sg-task.selected:hover {\n    background: rgb(60, 98, 131);\n}\n\n.sg-task.green {\n    background-color: rgb(188, 235, 194);\n}\n\n.sg-task.green:hover {\n    background-color: rgb(143, 197, 150);\n}\n\n.sg-task.green.selected {\n    background: rgb(121, 150, 125);\n}\n\n.sg-task.green.selected:hover {\n    background: rgb(100, 126, 103);\n}\n\n.sg-task.orange {\n    background-color: rgb(254, 172, 49)\n}\n\n.sg-task.orange:hover {\n    background-color: rgb(238, 161, 45)\n}\n\n.sg-task.orange.selected {\n    background-color: rgb(219, 149, 45)\n}\n\n.sg-task.orange.selected:hover {\n    background-color: rgb(199, 135, 38)\n}\n\n.context-menu {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n}\n\n.row-disabled {\n    background: repeating-linear-gradient(45deg, rgba(55, 55, 55, 0.1), rgba(55, 55, 55, 0.1) 10px, transparent 10px, transparent 20px);\n}\n\n.sg-table-row.row-group .sg-table-body-cell {\n    background-color: #fbfbfb;\n}\n\n.sg-external-indicator {\n    position: absolute;\n    background: #eee;\n    padding: 0.5em 1em;\n    font-size: 12px;\n    pointer-events: none;\n    background-color: rgb(116, 191, 255);\n    color: white;\n    font-family: 'Lato', sans-serif;\n    z-index: 10;\n}\n\n.sg-popup {\n    padding: 0.5rem;\n    background: #fff;\n    border: #ccc 1px solid;\n    z-index: 10;\n    transform: translateX(-50%);\n}\n\n.sg-popup-title {\n    text-align: center;\n}\n\n.sg-popup-item {\n    display: flex;\n}\n\n.sg-popup-item-label {\n    font-weight: 300;\n    flex: 30% 1 1;\n}"
  },
  {
    "path": "examples/example-sveltekit/src/routes/+layout.svelte",
    "content": "<script>\n    import './../gantt-default.css'; \n    import {showOptions, setView, moveView} from './../stores/store';\n</script>\n\n<header class=\"header\">\n    <div class=\"header-title\">\n        <a href=\"https://github.com/ANovokmet/svelte-gantt\">Svelte-gantt</a>\n    </div>\n    <div class=\"header-controls\">\n        <a href=\"/\"><button type=\"button\">LargeDataset</button></a>\n        <a href=\"/dependencies\"><button type=\"button\">Dependencies</button></a>\n        <a href=\"/tree\"><button type=\"button\">Tree</button></a>\n        <a href=\"/external\"><button type=\"button\">External</button></a>\n        <a href=\"/events\"><button type=\"button\">Events</button></a>\n\n        <input type=\"button\" value=\"<\" on:click={()=> {moveView.set('prevDay')}}/>\n        <button type=\"button\" value=\"Day view\" on:click={()=> {setView.set('day')}}>Day view</button>\n        <input type=\"button\" value=\">\" on:click={()=> {moveView.set('nextDay')}}/>\n        <button type=\"button\" value=\"Week view\" on:click={()=>{setView.set('week')}}>Week view</button>\n        <button on:click={()=> {showOptions.set(!$showOptions)}}>|||</button>\n    </div>\n</header>\n<slot></slot>\n<style>\n    button, input[type=button]{\n        border: transparent;\n        font-size: 14px;\n        font-weight: 300;\n        padding: 6px 12px;\n        background: #cc595e;\n        color: #ffffff;\n        cursor: pointer;\n        transition: background 0.2s;\n        outline: none;\n    }\n    \n    button:hover, input[type=button]:hover {\n        background-color: #b14d51;\n    }\n    \n    button:active, input[type=button]:active{\n        background-color: #9d4548;\n    }\n    \n    .header {\n        display: flex;\n        padding: 16px;\n        background: #ee6e73;\n    }\n    \n    @media only screen and (max-width: 900px) {\n        .header {\n            flex-direction: column;\n        }\n    \n        .header-title {\n            justify-content: center;\n            margin-bottom: 6px;\n        }\n    \n        .header-controls {\n            justify-content: center;\n        }\n    }\n    \n    .header-title {\n        display: flex;\n        flex: 1;\n        align-items: center;\n        font-size: 36px;\n        padding: 0 16px;\n    }\n    \n    .header-title a {\n        color: #ffffff;\n        text-decoration: none;\n    }\n    \n    .header-controls {\n        display: flex;\n        align-items: center;\n    }\n    \n    .header button, .header input[type=button] {\n        margin-right: 4px;\n    }\n</style>"
  },
  {
    "path": "examples/example-sveltekit/src/routes/+page.svelte",
    "content": "<script lang=\"ts\">\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from '$dist';\n    import { onMount } from 'svelte';\n    import { time } from '../utils';\n    import moment from 'moment';\n    import GanttOptions from '../components/GanttOptions.svelte';\n    import {setView, moveView} from './../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val:string){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val:string){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    const data = generate();\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n\n    function shuffle(array) {\n        for (var i = array.length - 1; i > 0; i--) {\n            var j = Math.floor(Math.random() * (i + 1));\n            var temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: 'Content/joe.jpg',\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/routes/dependencies/+page.svelte",
    "content": "<script lang=\"ts\">\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from '$dist';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val:string){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val:string){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    export const data = {\n        rows: [{\n            \"id\": 1,\n            \"label\": \"Preparation and Planning\"\n        }, {\n            \"id\": 2,\n            \"label\": \"Development\"\n        }, {\n            \"id\": 3,\n            \"label\": \"Implementation\"\n        }, {\n            \"id\": 4,\n            \"label\": \"Training\"\n        }, {\n            \"id\": 5,\n            \"label\": \"Roll-out product\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 1,\n            \"label\": \"Preparation\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"9:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 1,\n            \"label\": \"Planning\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 2,\n            \"label\": \"Development\",\n            \"from\": time(\"12:00\"),\n            \"to\": time(\"13:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 3,\n            \"label\": \"Implementation\",\n            \"from\": time(\"13:45\"),\n            \"to\": time(\"15:45\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 5,\n            \"label\": \"Finish\",\n            \"from\": time(\"17:00\"),\n            \"to\": time(\"17:45\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 4,\n            \"label\": \"Training\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"10:00\"),\n            \"classes\": \"blue\"\n        }],\n        dependencies: [{\n            id: 1,\n            fromId: 1,\n            toId: 2\n        }, {\n            id: 2,\n            fromId: 2,\n            toId: 3\n        }, {\n            id: 3,\n            fromId: 3,\n            toId: 4\n        }, {\n            id: 4,\n            fromId: 4,\n            toId: 5\n        }, {\n            id: 5,\n            fromId: 6,\n            toId: 5\n        }]\n    };\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/routes/events/+page.svelte",
    "content": "<script lang=\"ts\">\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from '$dist';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val:string){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val:string){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies],\n        taskElementHook: (node, task) => {\n            let popup;\n            function onHover() {\n                console.log('[task] hover', task);\n                popup = createPopup(task, node);\n            }\n\n            function onLeave() {\n                console.log('[task] hover', task);\n                if(popup) {\n                    popup.remove();\n                }\n            }\n\n            node.addEventListener('mouseenter', onHover);\n            node.addEventListener('mouseleave', onLeave);\n\n            return {\n                destroy() {\n                    console.log('[task] destroy');\n                    node.removeEventListener('mouseenter', onHover);\n                    node.removeEventListener('mouseleave', onLeave);\n                }\n            }\n        },\n        // taskContent: (task) => `${task.label} ${task.from.format('HH:mm')}`\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt-events'), props: options });\n\n        gantt.api.tasks.on.move((task) => console.log('Listener: task move', task));\n        //gantt.api.tasks.on.switchRow((task, row, previousRow) => console.log('Listener: task switched row', task));\n        gantt.api.tasks.on.select((task) => console.log('Listener: task selected', task));\n        //gantt.api.tasks.on.moveEnd((task) => console.log('Listener: task move end', task));\n        gantt.api.tasks.on.change(([data]) => console.log('Listener: task change', data));\n        gantt.api.tasks.on.changed((task) => console.log('Listener: task changed', task));\n        gantt.api.tasks.on.dblclicked((task) => console.log('Listener: task double clicked', task));\n    });\n\n    function createPopup(task, node) {\n        const rect = node.getBoundingClientRect();\n        const div = document.createElement('div');\n        div.className = 'sg-popup';\n        div.innerHTML = `\n            <div class=\"sg-popup-title\">${task.label}</div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">From:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.from).toLocaleTimeString()}</div>\n            </div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">To:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.to).toLocaleTimeString()}</div>\n            </div>\n        `;\n        div.style.position = 'absolute';\n        div.style.top = `${rect.bottom}px`;\n        div.style.left = `${rect.left + rect.width / 2}px`;\n        document.body.appendChild(div);\n        return div;\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt-events {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #example-gantt-events :global(.sg-hover) {\n        background-color: #00000008;\n    }\n\n    #example-gantt-events :global(.sg-hover .sg-table-body-cell) {\n        background-color: #00000008;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt-events\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/routes/external/+page.svelte",
    "content": "<script lang=\"ts\">\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from '$dist';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val:string){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val:string){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n        const external = new SvelteGanttExternal(document.getElementById('new-task'), {\n            gantt,\n            onsuccess: (row, date, gantt) => {\n                console.log(row.model.id, new Date(date).toISOString())\n                const id = 5000 + Math.floor(Math.random() * 1000);\n                gantt.updateTask({\n                    id,\n                    label: `Task #${id}`,\n                    from: date,\n                    to: date + 3 * 60 * 60 * 1000,\n                    classes: colors[(Math.random() * colors.length) | 0],\n                    resourceId: row.model.id\n                });\n            },\n            elementContent: () => {\n                const element = document.createElement('div');\n                element.innerHTML = 'New Task';\n                element.className = 'sg-external-indicator';\n                return element;\n            }\n        });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #new-task {\n        position: absolute;\n        bottom: 0;\n        right: 0;\n        z-index: 1;\n        background-color: #ee6e73;\n        color: white;\n        padding: 1rem;\n        margin: 0.5rem;\n        cursor: grab;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <div id=\"new-task\">Drag to gantt</div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/routes/tree/+page.svelte",
    "content": "<script lang=\"ts\">\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from '$dist';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val:string){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val:string){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 10,\n            label: \"Accounting\",\n            class: 'row-group',\n            iconClass: 'fas fa-calculator',\n            children: [{\n                id: 11,\n                label: \"Petunia Mulliner\"\n            }, {\n                id: 12,\n                label: \"Mélina Giacovetti\"\n            }, {\n                id: 13,\n                label: \"Marlène Lasslett\"\n            }, {\n                id: 14,\n                label: \"Adda Youell\"\n            }]\n        }, {\n            id: 20,\n            label: \"Business Development\",\n            class: 'row-group',\n            iconClass: 'fas fa-user-tie',\n            children: [{\n                id: 21,\n                label: \"Pietra Fallow\"\n            }, {\n                id: 22,\n                label: \"Mariellen Torbard\"\n            }, {\n                id: 23,\n                label: \"Renate Humbee\"\n            }]\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 11,\n            \"label\": \"LPCVD\",\n            \"from\": time(\"9:00\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 12,\n            \"label\": \"Entrepreneurship\",\n            \"from\": time(\"10:00\"),\n            \"to\": time(\"12:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 13,\n            \"label\": \"PET-CT\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"15:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 14,\n            \"label\": \"Auditing\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 21,\n            \"label\": \"Security Clearance\",\n            \"from\": time(\"15:15\"),\n            \"to\": time(\"16:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 22,\n            \"label\": \"Policy Analysis\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 7,\n            \"resourceId\": 23,\n            \"label\": \"Xbox 360\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"14:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 8,\n            \"resourceId\": 3,\n            \"label\": \"GNU/Linux\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 9,\n            \"resourceId\": 4,\n            \"label\": \"Electronic Trading\",\n            \"from\": time(\"15:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 10,\n            \"resourceId\": 5,\n            \"label\": \"Alternative Medicine\",\n            \"from\": time(\"14:30\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "examples/example-sveltekit/src/stores/store.js",
    "content": "import {writable} from 'svelte/store';\n\n\nexport const options = writable({});\nexport const showOptions = writable(false);\n\nexport const setView = writable('none');\nexport const moveView = writable('none');"
  },
  {
    "path": "examples/example-sveltekit/src/utils.js",
    "content": "import moment from 'moment';\n\nexport function time(input) {\n    return moment(input, 'HH:mm');\n}\n"
  },
  {
    "path": "examples/example-sveltekit/svelte.config.js",
    "content": "import adapter from '@sveltejs/adapter-auto';\nimport { vitePreprocess } from '@sveltejs/kit/vite';\nimport path from 'path'\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\t// Consult https://kit.svelte.dev/docs/integrations#preprocessors\n\t// for more information about preprocessors\n\tpreprocess: vitePreprocess(),\n\n\tkit: {\n\t\tadapter: adapter(),\n\t\talias:{\n\t\t\t'$dist': path.resolve('../dist'),\n\t\t}\n\t}\n};\n\nexport default config;\n"
  },
  {
    "path": "examples/example-sveltekit/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"paths\": {\n\t\t\t\"$dist\": [\"../dist\"]\n\t\t}\n\t}\n\t// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias\n\t//\n\t// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes\n\t// from the referenced tsconfig.json - TypeScript does not merge them in\n}\n"
  },
  {
    "path": "examples/example-sveltekit/vite.config.js",
    "content": "import { sveltekit } from '@sveltejs/kit/vite';\n\n/** @type {import('vite').UserConfig} */\nconst config = {\n\tplugins: [sveltekit()]\n};\n\nexport default config;\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"svelte-gantt-monorepo\",\n    \"description\": \"monorepo for svelte-gantt\",\n    \"private\": true,\n    \"version\": \"0.0.1\",\n    \"author\": \"Ante Novokmet <ante.je.zakon@gmail.com>\",\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev:docs\": \"pnpm --filter docs-mdsvex run dev\",\n        \"build:docs\": \"pnpm --filter docs-mdsvex run build\",\n        \"dev:demo\": \"pnpm --filter demo run dev\",\n        \"dev:svelte-gantt\": \"pnpm --filter svelte-gantt run autobuild\",\n        \"playground\": \"run-p dev:demo dev:svelte-gantt\"\n    },\n    \"devDependencies\": {\n        \"@typescript-eslint/eslint-plugin\": \"^6.7.4\",\n        \"@typescript-eslint/parser\": \"^6.7.4\",\n        \"eslint\": \"^8.50.0\",\n        \"eslint-config-prettier\": \"^9.0.0\",\n        \"eslint-plugin-svelte\": \"^2.34.0\",\n        \"prettier\": \"^3.0.3\",\n        \"prettier-plugin-svelte\": \"^3.0.3\",\n        \"typescript\": \"^5.0.0\"\n    }\n}\n"
  },
  {
    "path": "packages/demo/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "packages/demo/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "packages/demo/README.md",
    "content": "# create-svelte\n\nEverything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).\n\n## Creating a project\n\nIf you're seeing this, you've probably already done this step. Congrats!\n\n```bash\n# create a new project in the current directory\nnpm create svelte@latest\n\n# create a new project in my-app\nnpm create svelte@latest my-app\n```\n\n## Developing\n\nOnce you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:\n\n```bash\nnpm run dev\n\n# or start the server and open the app in a new browser tab\nnpm run dev -- --open\n```\n\n## Building\n\nTo create a production version of your app:\n\n```bash\nnpm run build\n```\n\nYou can preview the production build with `npm run preview`.\n\n> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.\n"
  },
  {
    "path": "packages/demo/jsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": false,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"paths\": {\n\t\t\t\"$lib\":[\"./src/lib\"],\n\t\t\t\"$lib/*\":[\"./src/lib/*\"],\n\t\t\t\"$dist\": [\"../svelte-gantt/dist\"],\n\t\t\t\"$dist/*\": [\"../svelte-gantt/dist/*\"],\n\t\t\t\"svelte-gantt\": [\"../svelte-gantt/dist\"],\n\t\t\t\"svelte-gantt/*\": [\"../svelte-gantt/dist/*\"]\n\t\t}\n\t}\n\t// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias and https://kit.svelte.dev/docs/configuration#files\n\t//\n\t// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes\n\t// from the referenced tsconfig.json - TypeScript does not merge them in\n}\n"
  },
  {
    "path": "packages/demo/package.json",
    "content": "{\n\t\"name\": \"demo\",\n\t\"version\": \"0.0.1\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./jsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch\",\n\t\t\"build-gh-pages\": \"vite build\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^2.0.0\",\n\t\t\"@sveltejs/adapter-static\": \"^2.0.3\",\n\t\t\"@sveltejs/kit\": \"^1.20.4\",\n\t\t\"svelte\": \"^4.0.5\",\n\t\t\"svelte-check\": \"^3.4.3\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^4.4.2\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/demo/src/app.d.ts",
    "content": "// See https://kit.svelte.dev/docs/types#app\n// for information about these interfaces\n// and what to do when importing types\ndeclare namespace App {\n\t// interface Error {}\n\t// interface Locals {}\n\t// interface PageData {}\n\t// interface Platform {}\n}\n"
  },
  {
    "path": "packages/demo/src/app.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\t\t%sveltekit.head%\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>"
  },
  {
    "path": "packages/demo/src/components/DateTime.svelte",
    "content": "<script>\n    export let value;\n    $: {\n        parseDate(value);\n    }\n\n    let dateStr = '';\n    let timeStr = '';\n    $: {\n        emitDate(dateStr, timeStr);\n    }\n\n    function parseDate(dateObj) {\n        if(dateObj) {\n            const [date, time] = new Date(dateObj).toLocaleString(\"sv-SE\").split(' ');\n            dateStr = date;\n            timeStr = time;\n        }\n    }\n\n    function emitDate(date, time) {\n        if(date && time) {\n            value = new Date(`${date} ${time}`);\n        } else {\n            value = null;\n        }\n    }\n</script>\n\n<style>\n    .date-time {\n        display: flex;\n    }\n\n    input {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n</style>\n\n<div class=\"date-time\">\n    <input type=\"date\" bind:value={dateStr}>\n    <input type=\"time\" bind:value={timeStr}>\n</div>"
  },
  {
    "path": "packages/demo/src/components/GanttOptions.svelte",
    "content": "<script>\n    import { createEventDispatcher } from \"svelte\";\n    import DateTime from './DateTime.svelte';\n    import {showOptions} from './../stores/store';\n\n    export let options;\n    const dispatch = createEventDispatcher();\n\n    $: {\n        dispatch('change', options);\n    }\n\n    const offsetOptions = [5, 10, 15, 30];\n</script>\n\n\n\n{#if $showOptions}\n<div class=\"controls\">\n    <h3>Options</h3>\n    <div class=\"form-group\">\n        <label for=\"columnOffset\" class=\"form-label\"> columnOffset </label>\n        <select id=\"columnOffset\" bind:value={options.columnOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"magnetOffset\" class=\"form-label\"> magnetOffset </label>\n        <select id=\"magnetOffset\" bind:value={options.magnetOffset}>\n            {#each offsetOptions as offset}\n                <option value={offset}>{offset}</option>\n            {/each}\n        </select>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"rowHeight\" class=\"form-label\"> rowHeight ({options.rowHeight}) </label>\n        <input id=\"rowHeight\" type=\"range\" bind:value={options.rowHeight} min=\"20\" max=\"100\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"rowPadding\" class=\"form-label\"> rowPadding ({options.rowPadding}) </label>\n        <input id=\"rowPadding\" type=\"range\" bind:value={options.rowPadding} min=\"0\" max=\"20\" step=\"2\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"fitWidth\" class=\"form-label\"> fitWidth </label>\n        <input id=\"fitWidth\" type=checkbox bind:checked={options.fitWidth}>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"minWidth\" class=\"form-label\"> minWidth </label>\n        <input id=\"minWidth\" type=\"number\" bind:value={options.minWidth} min=\"800\">\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"from\" class=\"form-label\"> from </label>\n        <DateTime bind:value={options.from}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"to\" class=\"form-label\"> to </label>\n        <DateTime bind:value={options.to}/>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"first-format\" class=\"form-label\"> headers[0].format </label>\n        <input id=\"first-format\"  type=\"text\" bind:value={options.headers[0].format}>\n    </div>\n\n    <div class=\"form-group\">\n        <label for=\"second-format\"  class=\"form-label\"> headers[1].format </label>\n        <input id=\"second-format\"  type=\"text\" bind:value={options.headers[1].format}>\n    </div>\n</div>\n{/if}\n\n<style>\n    .controls {\n        background: #ffc0c3;\n        padding: 16px;\n    }\n\n    .form-label {\n        display: block;\n    }\n\n    .form-group {\n        display: flex;\n        flex-direction: column;\n        margin-bottom: 0.5rem;\n    }\n\n    input, select {\n        border: 0;\n        border-bottom: 1px solid #cc595e;\n        background: #cc595e36;\n    }\n\n    h3 {\n        margin: 0;\n        margin-bottom: 1.5rem;\n    }\n</style>\n"
  },
  {
    "path": "packages/demo/src/components/GanttViewNavigation.svelte",
    "content": "<script>\n    import { createEventDispatcher } from 'svelte';\n    import { time } from '../utils';\n\n    export let options = {\n        from: time('06:00'),\n        to: time('18:00'),\n    };\n\n    const dispatch = createEventDispatcher();\n\n    function onUpdateOptions(options) {\n        dispatch('updateOptions', options);\n    }\n\n    function onSetDayView() {\n        console.log('day view set');\n        onUpdateOptions({\n            fitWidth: true,\n            columnUnit: 'minute',\n            columnOffset: 15,\n            from: options.from,\n            to: options.to,\n            minWidth: 1000,\n            headers: [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        });\n    }\n\n    function onSetWeekView() {\n        console.log('week view set');\n        onUpdateOptions({\n            fitWidth: false,\n            columnUnit: 'hour',\n            columnOffset: 1,\n            from: options.from.clone().startOf('week'),\n            to: options.from.clone().endOf('week'),\n            minWidth: 5000,\n            headers: [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        });\n    }\n\n    function onSetNextDay() {\n        console.log('set next day');\n        onUpdateOptions({\n            from: options.from.clone().add(1, 'day'),\n            to: options.to.clone().add(1, 'day')\n        });\n    }\n\n    function onSetPreviousDay() {\n        console.log('set previous day');\n        onUpdateOptions({\n            from: options.from.clone().subtract(1, 'day'),\n            to: options.to.clone().subtract(1, 'day')\n        });\n    }\n</script>\n\n<style>\n    input[type=button] {\n        margin-right: 4px;\n    }\n</style>\n\n<div class=\"view-navigation\">\n    <input type=\"button\" value=\"<\" on:click={onSetPreviousDay}/>\n    <input type=\"button\" value=\"Day view\" on:click={onSetDayView}/>\n    <input type=\"button\" value=\">\" on:click={onSetNextDay}/>\n    <input type=\"button\" value=\"Week view\" on:click={onSetWeekView}/>\n</div>"
  },
  {
    "path": "packages/demo/src/gantt-default.css",
    "content": "*{\n    font-family: 'Lato', sans-serif;\n}\n\n.sg-gantt {\n    font-family: 'Lato', sans-serif;\n    font-size: 10px;\n    color: #656565;\n}\n\n\n.selected {\n    color: white;\n    font-weight: 700;\n}\n\n\n/* --------------------------- */\n/* ------- Task colors ------- */\n/* --------------------------- */\n.sg-task.blue {\n    background: rgb(116, 191, 255);\n}\n\n.sg-task.blue:hover {\n    background: rgb(98, 161, 216);\n}\n\n.sg-task.blue.selected {\n    background: rgb(69, 112, 150);\n}\n\n.sg-task-selected {\n    outline: 2px solid rgba(3, 169, 244, 0.5);\n    outline-offset: 3px;\n    z-index: 1;\n    background: rgb(69, 112, 150);\n}\n\n.sg-task.selected:hover {\n    background: rgb(60, 98, 131);\n}\n\n.sg-task.green {\n    background-color: rgb(188, 235, 194);\n}\n\n.sg-task.green:hover {\n    background-color: rgb(143, 197, 150);\n}\n\n.sg-task.green.selected {\n    background: rgb(121, 150, 125);\n}\n\n.sg-task.green.selected:hover {\n    background: rgb(100, 126, 103);\n}\n\n.sg-task.orange {\n    background-color: rgb(254, 172, 49)\n}\n\n.sg-task.orange:hover {\n    background-color: rgb(238, 161, 45)\n}\n\n.sg-task.orange.selected {\n    background-color: rgb(219, 149, 45)\n}\n\n.sg-task.orange.selected:hover {\n    background-color: rgb(199, 135, 38)\n}\n\n.context-menu {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n}\n\n.row-disabled {\n    background: repeating-linear-gradient(45deg, rgba(55, 55, 55, 0.1), rgba(55, 55, 55, 0.1) 10px, transparent 10px, transparent 20px);\n}\n\n.sg-table-row.row-group .sg-table-body-cell {\n    background-color: #fbfbfb;\n}\n\n.sg-external-indicator {\n    position: absolute;\n    background: #eee;\n    padding: 0.5em 1em;\n    font-size: 12px;\n    pointer-events: none;\n    background-color: rgb(116, 191, 255);\n    color: white;\n    font-family: 'Lato', sans-serif;\n    z-index: 10;\n}\n\n.sg-popup {\n    padding: 0.5rem;\n    background: #fff;\n    border: #ccc 1px solid;\n    z-index: 10;\n    transform: translateX(-50%);\n}\n\n.sg-popup-title {\n    text-align: center;\n}\n\n.sg-popup-item {\n    display: flex;\n}\n\n.sg-popup-item-label {\n    font-weight: 300;\n    flex: 30% 1 1;\n}"
  },
  {
    "path": "packages/demo/src/lib/index.js",
    "content": "// place files you want to import through the `$lib` alias in this folder.\n"
  },
  {
    "path": "packages/demo/src/main.css",
    "content": "html, body{\n    margin:0;\n    height: 100%;\n}\n\nbutton, input[type=button]{\n    border: transparent;\n    font-size: 14px;\n    font-weight: 300;\n    padding: 6px 12px;\n    background: #cc595e;\n    color: #ffffff;\n    cursor: pointer;\n    transition: background 0.2s;\n    outline: none;\n}\n\nbutton:hover, input[type=button]:hover {\n    background-color: #b14d51;\n}\n\nbutton:active, input[type=button]:active{\n    background-color: #9d4548;\n}\n"
  },
  {
    "path": "packages/demo/src/routes/+layout.js",
    "content": "export const prerender = true;\nexport const ssr = false;\n"
  },
  {
    "path": "packages/demo/src/routes/+layout.svelte",
    "content": "<script>\n    import '../gantt-default.css';\n    import '../main.css';\n    import { showOptions, options } from './../stores/store';\n    import GanttViewNavigation from '../components/GanttViewNavigation.svelte';\n    import { base } from '$app/paths';\n\n    function onUpdateOptions(event) {\n        const opts = event.detail;\n        console.log('onUpdateOptions', opts);\n        $options = {\n            ...$options,\n            ...opts\n        };\n    }\n</script>\n\n<div class=\"app\">\n    <header class=\"header\">\n        <div class=\"header-title\">\n            <a href=\"https://github.com/ANovokmet/svelte-gantt\">Svelte-gantt</a>\n        </div>\n        <div class=\"header-controls\">\n            <div class=\"header-controls__row\">\n                <a href=\"{base}/large-dataset\"><button type=\"button\">LargeDataset</button></a>\n                <a href=\"{base}/dependencies\"><button type=\"button\">Dependencies</button></a>\n                <a href=\"{base}/tree\"><button type=\"button\">Tree</button></a>\n                <a href=\"{base}/external\"><button type=\"button\">External</button></a>\n                <a href=\"{base}/events\"><button type=\"button\">Events</button></a>\n                <a href=\"{base}/multiple-charts\"><button type=\"button\">Multiple gantt</button></a>\n                <a href=\"{base}/svelte-component\"><button type=\"button\">Usage as svelte component</button></a>\n                <a href=\"{base}/column-styles\"><button type=\"button\">Column styles</button></a>\n                <a href=\"{base}/pack-layout\"><button type=\"button\">Layouts</button></a>\n                <a href=\"{base}/create-tasks\"><button type=\"button\">Create tasks</button></a>\n            </div>\n    \n            <GanttViewNavigation options={$options} on:updateOptions={onUpdateOptions} />\n    \n            <button on:click={()=> {showOptions.set(!$showOptions)}}>|||</button>\n        </div>\n    </header>\n    <slot></slot>\n</div>\n\n<style>\n    .app {\n        display: flex;\n        flex-direction: column;\n        overflow: auto;\n        height: 100%;\n    }\n    \n    .header {\n        display: flex;\n        padding: 16px;\n        background: #ee6e73;\n    }\n    \n    @media only screen and (max-width: 900px) {\n        .header {\n            flex-direction: column;\n        }\n    \n        .header-title {\n            justify-content: center;\n            margin-bottom: 6px;\n        }\n    \n        .header-controls {\n            justify-content: center;\n        }\n    }\n    \n    .header-title {\n        display: flex;\n        flex: 1;\n        align-items: center;\n        font-size: 36px;\n        padding: 0 16px;\n    }\n    \n    .header-title a {\n        color: #ffffff;\n        text-decoration: none;\n    }\n    \n    .header-controls {\n        display: flex;\n        align-items: center;\n        flex-wrap: wrap;\n    }\n    \n    .header button, .header input[type=button] {\n        margin-right: 4px;\n    }\n</style>"
  },
  {
    "path": "packages/demo/src/routes/+page.svelte",
    "content": "<script>\n</script>\n\n<svelte:head>\n    <title>svelte-gantt</title> \n</svelte:head>\n<main>\n    <div class=\"container\">\n        <h1>Svelte-gantt</h1>\n        <p>A <b>lightweight</b> and <b>fast</b> interactive gantt chart/resource booking component made with Svelte. Compatible with any JS library or framework. ZERO dependencies.</p>\n        <h2>Demo</h2>\n        <p>To see the examples check the links in the header.</p>\n    </div>\n</main>\n\n<style>\n    .container {\n    }\n\n    main {\n        width: 800px;\n        margin: 20px auto;\n        \n    }\n</style>\n"
  },
  {
    "path": "packages/demo/src/routes/column-styles/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import { options } from '../../stores/store';\n    import { base } from '$app/paths';\n\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: 'time-range-lunch',\n            label: 'Lunch',\n            resizable: false,\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    const data = generate();\n\n    $options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [\n            { unit: 'day', format: 'MMMM Do' },\n            { unit: 'hour', format: 'H:mm' }\n        ],\n        fitWidth: true,\n        minWidth: 800,\n        from: time('06:00'),\n        to: time('18:00'),\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'resourceInfo' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        columnStrokeColor: '#ff0000',\n        columnStrokeWidth: 1,\n        useCanvasColumns: false,\n        highlightedDurations: {\n            unit: 'h',\n            fractions: [7, 9, 11]\n        },\n        highlightColor: '#6eb859'\n    }\n\n    $: {\n        console.log('options changed', $options);\n        if (gantt) {\n            gantt.$set($options);\n        }\n    }\n\n    /**\n     * @type {import('svelte-gantt').SvelteGanttComponent}\n     */\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: $options });\n    });\n\n    function shuffle(array) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            const temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: `${base}/joe.jpg`,\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation,\n                stickyLabel: true\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign($options, opts);\n        gantt.$set($options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Column styles - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={$options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/create-tasks/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from '../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 11,\n            label: \"Petunia Mulliner 11\"\n        }, {\n            id: 12,\n            label: \"Mélina Giacovetti 12\"\n        }, {\n            id: 13,\n            label: \"Marlène Lasslett 13\"\n        }, {\n            id: 14,\n            label: \"Adda Youell 14\"\n        }, {\n            id: 21,\n            label: \"Pietra Fallow 21\"\n        }, {\n            id: 22,\n            label: \"Mariellen Torbard 22\"\n        }, {\n            id: 23,\n            label: \"Renate Humbee 23\"\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 13,\n            \"label\": \"LPCVD\",\n            \"from\": time(\"9:00\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let i = 0;\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies],\n        enableCreateTask: true,\n        onCreateTask: (e) => {\n            const id = `creating-task-${(Math.random() + 1).toString(36).substring(2, 7)}`;\n            return ({\n                id,\n                label: `New task ${++i}`,\n                ...e,\n            });\n        },\n        onCreatedTask: (task) => {\n            console.log('task created', task);\n        }\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Tree view - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/dependencies/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    export const data = {\n        rows: [{\n            \"id\": 1,\n            \"label\": \"Preparation and Planning\"\n        }, {\n            \"id\": 2,\n            \"label\": \"Development\"\n        }, {\n            \"id\": 3,\n            \"label\": \"Implementation\"\n        }, {\n            \"id\": 4,\n            \"label\": \"Training\"\n        }, {\n            \"id\": 5,\n            \"label\": \"Roll-out product\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 1,\n            \"label\": \"Preparation\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"9:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 1,\n            \"label\": \"Planning\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 2,\n            \"label\": \"Development\",\n            \"from\": time(\"12:00\"),\n            \"to\": time(\"13:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 3,\n            \"label\": \"Implementation\",\n            \"from\": time(\"13:45\"),\n            \"to\": time(\"15:45\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 5,\n            \"label\": \"Finish\",\n            \"from\": time(\"17:00\"),\n            \"to\": time(\"17:45\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 4,\n            \"label\": \"Training\",\n            \"from\": time(\"7:00\"),\n            \"to\": time(\"10:00\"),\n            \"classes\": \"blue\"\n        }],\n        dependencies: [{\n            id: 1,\n            fromId: 1,\n            toId: 2\n        }, {\n            id: 2,\n            fromId: 2,\n            toId: 3\n        }, {\n            id: 3,\n            fromId: 3,\n            toId: 4\n        }, {\n            id: 4,\n            fromId: 4,\n            toId: 5\n        }, {\n            id: 5,\n            fromId: 6,\n            toId: 5\n        }]\n    };\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Dependencies - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/events/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies],\n        taskElementHook: (node, task) => {\n            let popup;\n            function onHover() {\n                console.log('[task] hover', task);\n                popup = createPopup(task, node);\n            }\n\n            function onLeave() {\n                console.log('[task] hover', task);\n                if(popup) {\n                    popup.remove();\n                }\n            }\n\n            node.addEventListener('mouseenter', onHover);\n            node.addEventListener('mouseleave', onLeave);\n\n            return {\n                destroy() {\n                    console.log('[task] destroy');\n                    node.removeEventListener('mouseenter', onHover);\n                    node.removeEventListener('mouseleave', onLeave);\n                }\n            }\n        },\n        // taskContent: (task) => `${task.label} ${task.from.format('HH:mm')}`\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt-events'), props: options });\n\n        gantt.api.tasks.on.move((task) => console.log('Listener: task move', task));\n        //gantt.api.tasks.on.switchRow((task, row, previousRow) => console.log('Listener: task switched row', task));\n        gantt.api.tasks.on.select((task) => console.log('Listener: task selected', task));\n        //gantt.api.tasks.on.moveEnd((task) => console.log('Listener: task move end', task));\n        gantt.api.tasks.on.change(([data]) => console.log('Listener: task change', data));\n        gantt.api.tasks.on.changed((task) => console.log('Listener: task changed', task));\n        gantt.api.tasks.on.dblclicked((task) => console.log('Listener: task double clicked', task));\n    });\n\n    function createPopup(task, node) {\n        const rect = node.getBoundingClientRect();\n        const div = document.createElement('div');\n        div.className = 'sg-popup';\n        div.innerHTML = `\n            <div class=\"sg-popup-title\">${task.label}</div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">From:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.from).toLocaleTimeString()}</div>\n            </div>\n            <div class=\"sg-popup-item\">\n                <div class=\"sg-popup-item-label\">To:</div>\n                <div class=\"sg-popup-item-value\">${new Date(task.to).toLocaleTimeString()}</div>\n            </div>\n        `;\n        div.style.position = 'absolute';\n        div.style.top = `${rect.bottom}px`;\n        div.style.left = `${rect.left + rect.width / 2}px`;\n        document.body.appendChild(div);\n        return div;\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt-events {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #example-gantt-events :global(.sg-hover) {\n        background-color: #00000008;\n    }\n\n    #example-gantt-events :global(.sg-hover .sg-table-body-cell) {\n        background-color: #00000008;\n    }\n</style>\n\n<svelte:head>\n    <title>Gantt events - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt-events\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/external/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttExternal, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from './../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 1,\n            label: \"Accounting\",\n        }, {\n            id: 2,\n            label: \"Business Development\",\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            id: 3,\n            resourceId: 1,\n            label: \"PET-CT\",\n            from: time(\"13:30\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }, {\n            id: 4,\n            resourceId: 1,\n            label: \"Auditing\",\n            from: time(\"9:30\"),\n            to: time(\"11:30\"),\n            classes: \"orange\"\n        }, {\n            id: 5,\n            resourceId: 2,\n            label: \"Security Clearance\",\n            from: time(\"15:15\"),\n            to: time(\"16:00\"),\n            classes: \"green\"\n        }, {\n            id: 6,\n            resourceId: 2,\n            label: \"Policy Analysis\",\n            from: time(\"14:00\"),\n            to: time(\"17:00\"),\n            classes: \"blue\"\n        }, {\n            id: 7,\n            resourceId: 2,\n            label: \"Xbox 360\",\n            from: time(\"13:00\"),\n            to: time(\"14:00\"),\n            classes: \"blue\"\n        }, {\n            id: 8,\n            resourceId: 3,\n            label: \"GNU/Linux\",\n            from: time(\"14:00\"),\n            to: time(\"15:30\"),\n            classes: \"blue\"\n        }, {\n            id: 9,\n            resourceId: 4,\n            label: \"Electronic Trading\",\n            from: time(\"15:00\"),\n            to: time(\"17:00\"),\n            classes: \"green\"\n        }, {\n            id: 10,\n            resourceId: 5,\n            label: \"Alternative Medicine\",\n            from: time(\"14:30\"),\n            to: time(\"15:30\"),\n            classes: \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges: [],\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n        const external = new SvelteGanttExternal(document.getElementById('new-task'), {\n            gantt,\n            onsuccess: (row, date, gantt) => {\n                console.log(row.model.id, new Date(date).toISOString())\n                const id = 5000 + Math.floor(Math.random() * 1000);\n                gantt.updateTask({\n                    id,\n                    label: `Task #${id}`,\n                    from: date,\n                    to: date + 3 * 60 * 60 * 1000,\n                    classes: colors[(Math.random() * colors.length) | 0],\n                    resourceId: row.model.id\n                });\n            },\n            elementContent: () => {\n                const element = document.createElement('div');\n                element.innerHTML = 'New Task';\n                element.className = 'sg-external-indicator';\n                return element;\n            }\n        });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n\n    #new-task {\n        position: absolute;\n        bottom: 0;\n        right: 0;\n        z-index: 1;\n        background-color: #ee6e73;\n        color: white;\n        padding: 1rem;\n        margin: 0.5rem;\n        cursor: grab;\n    }\n</style>\n\n<svelte:head>\n    <title>External draggable - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <div id=\"new-task\">Drag to gantt</div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/large-dataset/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import { options } from '../../stores/store';\n\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: 'time-range-lunch',\n            label: 'Lunch',\n            resizable: false,\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    const data = generate();\n\n    $options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: time('06:00'),\n        to: time('18:00'),\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    $: {\n        console.log('options changed', $options);\n        if (gantt) {\n            gantt.$set($options);\n        }\n    }\n\n    /**\n     * @type {import('svelte-gantt').SvelteGanttComponent}\n     */\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: $options });\n    });\n\n    function shuffle(array) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            const temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: 'Content/joe.jpg',\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation,\n                height: Math.random() < 0.5 ? 100 : 52,\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign($options, opts);\n        gantt.$set($options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Large dataset - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={$options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/multiple-charts/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import { options } from '../../stores/store';\n\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange'];\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    $options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: time('06:00'),\n        to: time('18:00'),\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    const data1 = generate();\n    const data2 = generate();\n\n    $: {\n        console.log('options changed', $options);\n        gantt1 && gantt1.$set($options);\n        gantt2 && gantt2.$set($options);\n    }\n\n    /** @type {import('svelte-gantt').SvelteGanttComponent} */\n    let gantt1;\n    /** @type {import('svelte-gantt').SvelteGanttComponent} */\n    let gantt2;\n    onMount(() => {\n        window.gantt1 = gantt1 = new SvelteGantt({\n            target: document.getElementById('example-gantt-1'),\n            props: { ...$options, ...data1 }\n        });\n        window.gantt2 = gantt2 = new SvelteGantt({\n            target: document.getElementById('example-gantt-2'),\n            props: { ...$options, ...data2 }\n        });\n    });\n\n    function shuffle(array) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            const temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: 'Content/joe.jpg',\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt1.$set(options);\n        gantt2.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt-1, #example-gantt-2 {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        flex-direction: column;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Multiple charts - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt-1\"></div>\n    <div id=\"example-gantt-2\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/pack-layout/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import { options } from '../../stores/store';\n\n    // const colors = ['blue', 'green', 'orange'];\n\n    let rows = [\n        {\n            id: 0,\n            label: 'Row #1'\n        },\n        {\n            id: 1,\n            label: 'Row #2'\n        },\n        {\n            id: 2,\n            label: 'Row #3'\n        },\n        {\n            id: 3,\n            label: 'Row #4'\n        },\n        {\n            id: 4,\n            label: 'Row #5'\n        },\n    ];\n\n    let tasks = [\n        {\n            type: 'task',\n            id: 0,\n            resourceId: 1,\n            label: 'Task #0',\n            from: time(`8:00`),\n            to: time(`12:00`),\n            classes: 'green'\n        },\n        {\n            type: 'task',\n            id: 1,\n            resourceId: 1,\n            label: 'Task #1',\n            from: time(`10:00`),\n            to: time(`14:00`),\n            classes: 'blue'\n        },\n        {\n            type: 'task',\n            id: 2,\n            resourceId: 2,\n            label: 'Task #2',\n            from: time(`12:00`),\n            to: time(`17:00`),\n            classes: 'blue'\n        },\n        {\n            type: 'task',\n            id: 3,\n            resourceId: 2,\n            label: 'Task #3',\n            from: time(`12:00`),\n            to: time(`17:00`),\n            classes: 'orange'\n        },\n        {\n            type: 'task',\n            id: 4,\n            resourceId: 2,\n            label: 'Task #3',\n            from: time(`7:00`),\n            to: time(`10:00`),\n            classes: 'orange'\n        },\n        {\n            type: 'task',\n            id: 5,\n            resourceId: 4,\n            label: 'Task #3',\n            from: time(`12:00`),\n            to: time(`17:00`),\n            classes: 'green'\n        },\n    ];\n\n    $options = {\n        layout: 'pack',\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: rows,\n        tasks: tasks,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: time('06:00'),\n        to: time('18:00'),\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    $: {\n        console.log('options changed', $options);\n        if (gantt) {\n            gantt.$set($options);\n        }\n    }\n\n    /**\n     * @type {import('svelte-gantt').SvelteGanttComponent}\n     */\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: $options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign($options, opts);\n        gantt.$set($options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Large dataset - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={$options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/svelte-component/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt/svelte';\n    import { onMount } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import { options } from '../../stores/store';\n\n    let generation = 0;\n    let rowCount = 100;\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    const data = {\n        rows: [{\n            id: 1,\n            label: \"Preparation and Planning\"\n        }, {\n            id: 2,\n            label: \"Development\"\n        }, {\n            id: 3,\n            label: \"Implementation\"\n        }, {\n            id: 4,\n            label: \"Training\"\n        }],\n        tasks: [{\n            id: 1,\n            resourceId: 1,\n            label: \"Svelte-gantt\",\n            from: time(\"7:00\"),\n            to: time(\"9:00\"),\n            classes: \"orange\"\n        }, {\n            id: 2,\n            resourceId: 2,\n            label: \"As a\",\n            from: time(\"9:00\"),\n            to: time(\"11:00\"),\n            classes: \"blue\"\n        }, {\n            id: 3,\n            resourceId: 3,\n            label: \"Pure svelte\",\n            from: time(\"11:00\"),\n            to: time(\"13:00\"),\n            classes: \"green\"\n        }, {\n            id: 4,\n            resourceId: 4,\n            label: \"component\",\n            from: time(\"13:00\"),\n            to: time(\"15:00\"),\n            classes: \"orange\"\n        }]\n    };\n\n    $options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: time('06:00'),\n        to: time('18:00'),\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable]\n    }\n\n    $: {\n        console.log('options changed', $options);\n    }\n\n    let gantt;\n\n    function shuffle(array) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            const temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n    }\n\n    function generate() {\n        const rows = [];\n        const tasks = [];\n\n        const ids = [...Array(rowCount).keys()];\n        shuffle(ids);\n\n        for (let i = 0; i < rowCount; i++) {\n            let rand_bool = Math.random() < 0.2;\n\n            rows.push({\n                id: i,\n                label: 'Row #' + i,\n                age: (Math.random() * 80) | 0,\n                imageSrc: 'Content/joe.jpg',\n                classes: rand_bool ? ['row-disabled'] : undefined,\n                enableDragging: !rand_bool,\n                generation\n            });\n\n            rand_bool = Math.random() > 0.5;\n\n            const rand_h = (Math.random() * 10) | 0\n            const rand_d = (Math.random() * 5) | 0 + 1\n\n            tasks.push({\n                type: 'task',\n                id: ids[i],\n                resourceId: i,\n                label: 'Task #' + ids[i],\n                from: time(`${7 + rand_h}:00`),\n                to: time(`${7 + rand_h + rand_d}:00`),\n                classes: colors[(Math.random() * colors.length) | 0],\n                generation\n            });\n        }\n\n        generation += 1;\n\n        return { rows, tasks };\n    }\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign($options, opts);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Usage as svelte - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\">\n        <SvelteGantt bind:this={gantt}  {...$options}></SvelteGantt>\n    </div>\n    <GanttOptions options={$options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/routes/tree/+page.svelte",
    "content": "<script>\n    import { SvelteGantt, SvelteGanttDependencies, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n    import { onMount, getContext } from 'svelte';\n    import { time } from '../../utils';\n    import moment from 'moment';\n    import GanttOptions from '../../components/GanttOptions.svelte';\n    import {setView, moveView} from '../../stores/store';\n\n    $ : triggerSetView($setView)\n    $ : triggerMoveView($moveView)\n\n    function triggerSetView(val){\n        console.log('trigger set view', val);\n        if(val == 'none') return\n        if(val == 'week'){\n            options.fitWidth = false;\n            options.columnUnit = 'hour';\n            options.columnOffset = 1;\n            currentStart = currentStart.clone().startOf('week');\n            currentEnd = currentStart.clone().endOf('week');\n            options.headers = [{ unit: 'month', format: 'MMMM YYYY', sticky: true }, { unit: 'day', format: 'ddd DD', sticky: true }]\n        }else if(val == 'day'){\n            options.fitWidth = true;\n            options.columnUnit = 'minute';\n            options.columnOffset = 15;\n            currentStart = currentStart.clone().startOf('day');\n            currentEnd = currentStart.clone().endOf('day');\n            options.headers = [{ unit: 'day', format: 'DD.MM.YYYY' }, { unit: 'hour', format: 'HH' }]\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        setView.set('none');\n    }\n\n    function triggerMoveView(val){\n        if(val == 'none') return\n        if(val == 'prevDay'){\n            currentStart.subtract(1, 'day');\n            currentEnd.subtract(1, 'day');\n        }else if(val == 'nextDay'){\n            currentStart.add(1, 'day');\n            currentEnd.add(1, 'day');\n        }\n        options.from = currentStart;\n        options.to = currentEnd; \n        gantt.$set(options);\n        moveView.set('none');\n    }\n\n    let currentStart = time('06:00');\n    let currentEnd = time('18:00');\n\n    const colors = ['blue', 'green', 'orange']\n\n    const timeRanges = [\n        {\n            id: 0,\n            from: time('10:00'),\n            to: time('12:00'),\n            classes: null,\n            label: 'Lunch'\n        },\n        {\n            id: 1,\n            from: time('15:00'),\n            to: time('17:00'),\n            classes: null,\n            label: 'Dinner'\n        }\n    ];\n\n    \n    let options2 = getContext('options');\n\n    export const data = {\n        rows: [{\n            id: 10,\n            label: \"Accounting\",\n            class: 'row-group',\n            iconClass: 'fas fa-calculator',\n            expanded: true,\n            children: [{\n                id: 11,\n                label: \"Petunia Mulliner\"\n            }, {\n                id: 12,\n                label: \"Mélina Giacovetti\"\n            }, {\n                id: 13,\n                label: \"Marlène Lasslett\"\n            }, {\n                id: 14,\n                label: \"Adda Youell\"\n            }]\n        }, {\n            id: 20,\n            label: \"Business Development\",\n            class: 'row-group',\n            iconClass: 'fas fa-user-tie',\n            expanded: false,\n            children: [{\n                id: 21,\n                label: \"Pietra Fallow\"\n            }, {\n                id: 22,\n                label: \"Mariellen Torbard\"\n            }, {\n                id: 23,\n                label: \"Renate Humbee\"\n            }]\n        }, {\n            id: 3,\n            label: \"Ida Flewan\"\n        }, {\n            id: 4,\n            label: \"Lauréna Shrigley\"\n        }, {\n            id: 5,\n            label: \"Ange Kembry\"\n        }],\n        tasks: [{\n            \"id\": 1,\n            \"resourceId\": 11,\n            \"label\": \"LPCVD\",\n            \"from\": time(\"9:00\"),\n            \"to\": time(\"11:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 2,\n            \"resourceId\": 12,\n            \"label\": \"Entrepreneurship\",\n            \"from\": time(\"10:00\"),\n            \"to\": time(\"12:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 3,\n            \"resourceId\": 13,\n            \"label\": \"PET-CT\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"15:00\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 4,\n            \"resourceId\": 14,\n            \"label\": \"Auditing\",\n            \"from\": time(\"9:30\"),\n            \"to\": time(\"11:30\"),\n            \"classes\": \"orange\"\n        }, {\n            \"id\": 5,\n            \"resourceId\": 21,\n            \"label\": \"Security Clearance\",\n            \"from\": time(\"15:15\"),\n            \"to\": time(\"16:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 6,\n            \"resourceId\": 22,\n            \"label\": \"Policy Analysis\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 7,\n            \"resourceId\": 23,\n            \"label\": \"Xbox 360\",\n            \"from\": time(\"13:30\"),\n            \"to\": time(\"14:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 8,\n            \"resourceId\": 3,\n            \"label\": \"GNU/Linux\",\n            \"from\": time(\"14:00\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"blue\"\n        }, {\n            \"id\": 9,\n            \"resourceId\": 4,\n            \"label\": \"Electronic Trading\",\n            \"from\": time(\"15:00\"),\n            \"to\": time(\"17:00\"),\n            \"classes\": \"green\"\n        }, {\n            \"id\": 10,\n            \"resourceId\": 5,\n            \"label\": \"Alternative Medicine\",\n            \"from\": time(\"14:30\"),\n            \"to\": time(\"15:30\"),\n            \"classes\": \"orange\"\n        }],\n        dependencies: []\n    }\n\n    let options = {\n        dateAdapter: new MomentSvelteGanttDateAdapter(moment),\n        rows: data.rows,\n        tasks: data.tasks,\n        dependencies: data.dependencies,\n        timeRanges,\n        columnOffset: 15,\n        magnetOffset: 15,\n        rowHeight: 52,\n        rowPadding: 6,\n        headers: [{ unit: 'day', format: 'MMMM Do' }, { unit: 'hour', format: 'H:mm' }],\n        fitWidth: true,\n        minWidth: 800,\n        from: currentStart,\n        to: currentEnd,\n        tableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n        tableWidth: 240,\n        ganttTableModules: [SvelteGanttTable],\n        ganttBodyModules: [SvelteGanttDependencies]\n    }\n\n    let gantt;\n    onMount(() => {\n        window.gantt = gantt = new SvelteGantt({ target: document.getElementById('example-gantt'), props: options });\n    });\n\n    function onChangeOptions(event) {\n        const opts = event.detail;\n        Object.assign(options, opts);\n        gantt.$set(options);\n    }\n</script>\n\n<style>\n    #example-gantt {\n        flex-grow: 1;\n        overflow: auto;\n    }\n\n    .container {\n        display: flex;\n        overflow: auto;\n        flex: 1;\n    }\n</style>\n\n<svelte:head>\n    <title>Tree view - svelte-gantt</title> \n</svelte:head>\n<div class=\"container\">\n    <div id=\"example-gantt\"></div>\n    <GanttOptions options={options} on:change={onChangeOptions}/>\n</div>"
  },
  {
    "path": "packages/demo/src/stores/store.js",
    "content": "import {writable} from 'svelte/store';\n\nexport const options = writable({\n    from: null,\n    to: null,\n});\nexport const showOptions = writable(false);\n\nexport const setView = writable('none');\nexport const moveView = writable('none');"
  },
  {
    "path": "packages/demo/src/utils.js",
    "content": "import moment from 'moment';\n\nwindow.moment = moment;\n\nexport function time(input) {\n    return moment(input, 'HH:mm');\n}\n"
  },
  {
    "path": "packages/demo/static/.nojekyll",
    "content": ""
  },
  {
    "path": "packages/demo/svelte.config.js",
    "content": "import adapter from '@sveltejs/adapter-static';\nimport path from 'path';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n    kit: {\n        // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.\n        // If your environment is not supported or you settled on a specific environment, switch out the adapter.\n        // See https://kit.svelte.dev/docs/adapters for more information about adapters.\n        adapter: adapter({\n            // default options are shown. On some platforms\n            // these options are set automatically — see below\n            pages: process.env.NODE_ENV === 'production' ? '../docs' : 'build',\n            fallback: '404.html',\n            precompress: false,\n            strict: true\n        }),\n        paths: {\n            relative: true,\n            base: process.env.NODE_ENV === 'production' ? '/svelte-gantt' : '',\n        },\n        alias: {\n            '$dist': path.resolve('../svelte-gantt/dist'),\n            'svelte-gantt': path.resolve('../svelte-gantt/dist'),\n        }\n    }\n};\n\nexport default config;\n"
  },
  {
    "path": "packages/demo/vite.config.js",
    "content": "import { sveltekit } from '@sveltejs/kit/vite';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n\t// root: '.',\n\t// build: {\n\t// \toutDir: '../docs2',\n\t// },\n\tplugins: [sveltekit()]\n});\n"
  },
  {
    "path": "packages/docs-mdsvex/.eslintignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": "packages/docs-mdsvex/.eslintrc.cjs",
    "content": "/** @type { import(\"eslint\").Linter.Config } */\nmodule.exports = {\n\troot: true,\n\textends: ['eslint:recommended', 'plugin:svelte/recommended', 'prettier'],\n\tparserOptions: {\n\t\tsourceType: 'module',\n\t\tecmaVersion: 2020,\n\t\textraFileExtensions: ['.svelte']\n\t},\n\tenv: {\n\t\tbrowser: true,\n\t\tes2017: true,\n\t\tnode: true\n\t}\n};\n"
  },
  {
    "path": "packages/docs-mdsvex/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "packages/docs-mdsvex/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "packages/docs-mdsvex/.prettierignore",
    "content": "# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": "packages/docs-mdsvex/.prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": true,\n\t\"trailingComma\": \"none\",\n\t\"printWidth\": 100,\n\t\"plugins\": [\"prettier-plugin-svelte\"],\n\t\"overrides\": [{ \"files\": \"*.svelte\", \"options\": { \"parser\": \"svelte\", \"printWidth\": 200 } }]\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/README.md",
    "content": "# create-svelte\n\nEverything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).\n\n## Creating a project\n\nIf you're seeing this, you've probably already done this step. Congrats!\n\n```bash\n# create a new project in the current directory\nnpm create svelte@latest\n\n# create a new project in my-app\nnpm create svelte@latest my-app\n```\n\n## Developing\n\nOnce you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:\n\n```bash\nnpm run dev\n\n# or start the server and open the app in a new browser tab\nnpm run dev -- --open\n```\n\n## Building\n\nTo create a production version of your app:\n\n```bash\nnpm run build\n```\n\nYou can preview the production build with `npm run preview`.\n\n> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.\n"
  },
  {
    "path": "packages/docs-mdsvex/jsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {}\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/package.json",
    "content": "{\n\t\"name\": \"docs-mdsvex\",\n\t\"version\": \"0.0.1\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"lint\": \"prettier --check . && eslint .\",\n\t\t\"format\": \"prettier --write .\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@prosopo/vite-plugin-watch-workspace\": \"^0.3.40\",\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/adapter-static\": \"^2.0.3\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"@tailwindcss/typography\": \"^0.5.13\",\n\t\t\"@types/eslint\": \"^8.56.0\",\n\t\t\"autoprefixer\": \"^10.4.19\",\n\t\t\"eslint\": \"^8.56.0\",\n\t\t\"eslint-config-prettier\": \"^9.1.0\",\n\t\t\"eslint-plugin-svelte\": \"^2.35.1\",\n\t\t\"mdsvex\": \"^0.11.0\",\n\t\t\"postcss\": \"^8.4.38\",\n\t\t\"prettier\": \"^3.1.1\",\n\t\t\"prettier-plugin-svelte\": \"^3.1.2\",\n\t\t\"prism-themes\": \"^1.9.0\",\n\t\t\"rehype-autolink-headings\": \"^7.1.0\",\n\t\t\"rehype-slug\": \"^6.0.0\",\n\t\t\"remark-extended-table\": \"^2.0.2\",\n\t\t\"remark-gfm\": \"^4.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-gantt\": \"workspace:*\",\n\t\t\"tailwindcss\": \"^3.4.3\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\",\n\t\t\"yaml\": \"^2.4.3\"\n\t},\n\t\"type\": \"module\",\n\t\"dependencies\": {\n\t\t\"moment\": \"^2.30.1\"\n\t}\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/postcss.config.js",
    "content": "export default {\n\tplugins: {\n\t\ttailwindcss: {},\n\t\tautoprefixer: {}\n\t}\n};\n"
  },
  {
    "path": "packages/docs-mdsvex/src/app.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.landing-page .nav-category {\n    display: none !important;\n}"
  },
  {
    "path": "packages/docs-mdsvex/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.svg\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t%sveltekit.head%\n\t\t<!-- <link rel=\"stylesheet\" href=\"./app.css\"> -->\n\t\t<link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\" rel=\"stylesheet\">\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/A.svelte",
    "content": "<script lang=\"ts\">\n\timport { base } from '$app/paths';\n\n\texport let href: string;\n</script>\n\n<a href={href.startsWith('/') ? `${base}${href}` : href}>\n\t<slot />\n</a>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/Button.svelte",
    "content": "<script lang=\"ts\">\n\texport let primary = false;\n\texport let type = 'flat';\n\texport let arrow = null;\n\n\tlet __as: 'button' | 'a' = 'button';\n\texport { __as as as };\n\n\tlet __class = '';\n\texport { __class as class };\n\n\t$: isButton = __as === 'button' && !$$restProps['href'];\n\n\t$: buttonClass = `group transform-gpu text-base font-medium transition-all hover:scale-105\n    ${type === 'raised' && 'flex items-center justify-center'}\n    ${(isButton || type === 'raised') && 'rounded-md px-4 992:px-5 py-2'}\n    ${type === 'raised' ? (primary ? 'bg-inverse text-body hover:bg-inverse/90' : 'bg-body border-2 border-inverse text-inverse') : 'text-soft hover:text-inverse'}\n    ${__class}`;\n\n\t$: contentClass = `inline-block transform transition-transform duration-100 group-hover:translate-x-0 ${arrow === 'left' && '-translate-x-3 '} ${arrow === 'right' && 'translate-x-2'}`;\n\t$: arrowClass = `${arrow && 'opacity-0 transition-opacity duration-100 group-hover:visible group-hover:opacity-100'} ${!arrow ? 'hidden' : 'inline-block'}`;\n</script>\n\n{#if isButton}\n\t<button class={buttonClass} {...$$restProps}>\n\t\t{#if arrow === 'left'}\n\t\t\t<span class={arrowClass}>&lt;-</span>\n\t\t{/if}\n\t\t<span class={contentClass}><slot /></span>\n\t\t{#if arrow === 'right'}\n\t\t\t<span class={arrowClass}>-></span>\n\t\t{/if}\n\t</button>\n{:else}\n\t<!-- svelte-ignore a11y-missing-attribute -->\n\t<a class={buttonClass} {...$$restProps}>\n\t\t{#if arrow === 'left'}\n\t\t\t<span class={arrowClass}>&lt;-</span>\n\t\t{/if}\n\t\t<span class={contentClass}><slot /></span>\n\t\t{#if arrow === 'right'}\n\t\t\t<span class={arrowClass}>-></span>\n\t\t{/if}\n\t</a>\n{/if}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/IconButton.svelte",
    "content": "<script>\n\texport let href = null;\n</script>\n\n<svelte:element this={href ? 'a' : 'button'} class=\"min-w-[40px] min-h-[40px] flex items-center justify-center p-2 transform-gpu rounded-md border-0 transition-transform hover:scale-[1.1]\" {href}>\n\t<slot></slot>\n</svelte:element>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/NavBar.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher } from 'svelte';\n\timport Button from './Button.svelte';\n\timport IconButton from './IconButton.svelte';\n\timport SunIcon from '$lib/icons/SunIcon.svelte';\n\timport MoonIcon from '$lib/icons/MoonIcon.svelte';\n\timport GithubIcon from '$lib/icons/GithubIcon.svelte';\n\timport NavLink from './NavLink.svelte';\n\timport MenuIcon from '$lib/icons/MenuIcon.svelte';\n\timport ArrowRightIcon from '$lib/icons/ArrowRightIcon.svelte';\n\timport { meta } from '$lib/store';\n\timport SvelteGanttLogo from '$lib/icons/SvelteGanttLogo.svelte';\n\timport { base } from '$app/paths';\n\n\tconst dispatch = createEventDispatcher();\n\tlet theme = 'light';\n\n\tfunction onSchemeToggle() {\n\t\ttheme = theme === 'dark' ? 'light' : 'dark';\n\t}\n\n\texport let isSidebarOpen = false;\n\tlet showSidebar = true;\n</script>\n\n<div class=\"w-full mx-auto max-w-7xl\">\n\t<!-- width 8xl when docs, h-18/h-32 -->\n\t<div class=\"flex items-center py-4 mx-4 border-b lg:border-0 border-slate-900/10 h-20\">\n\t\t<div class=\"logo\">\n\t\t\t<Button href=\"{base}/\" class=\"block\">\n\t\t\t\t<span class=\"flex items-center\">\n\t\t\t\t\t<SvelteGanttLogo class=\"inline-block size-12 mr-2\" /> svelte-gantt\n\t\t\t\t</span>\n\t\t\t</Button>\n\t\t</div>\n\n\t\t<div class=\"flex-1\"></div>\n\n\t\t<div class=\"lg:flex items-center hidden\">\n\t\t\t<nav>\n\t\t\t\t<ul class=\"flex items-center space-x-8\">\n\t\t\t\t\t<NavLink href={'/docs'} title=\"Documentation\" />\n\t\t\t\t</ul>\n\t\t\t</nav>\n\n\t\t\t<div class=\"hidden lg:flex items-center ml-6\">\n\t\t\t\t<IconButton href=\"https://github.com/ANovokmet/svelte-gantt\">\n\t\t\t\t\t<GithubIcon />\n\t\t\t\t</IconButton>\n\t\t\t\t<!-- <IconButton on:click={onSchemeToggle}>\n\t\t\t\t\t{#if theme === 'light'}\n\t\t\t\t\t\t<SunIcon />\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<MoonIcon />\n\t\t\t\t\t{/if}\n\t\t\t\t</IconButton> -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"nav-category border lg:hidden flex w-full items-center p-4 h-12\">\n\t\t<button\n\t\t\tid=\"main-sidebar-button\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"text-soft hover:text-inverse inline-flex justify-center rounded-md text-sm font-medium\"\n\t\t\taria-controls=\"main-sidebar\"\n\t\t\taria-expanded={isSidebarOpen ? 'true' : 'false'}\n\t\t\taria-haspopup=\"true\"\n\t\t\ton:click={() => dispatch('open')}\n\t\t>\n\t\t\t<MenuIcon />\n\t\t</button>\n\n\t\t<ol class={`text-md text-soft flex items-center whitespace-nowrap leading-6 ${showSidebar ? 'mt-px ml-2.5' : 'mt-2'}`}>\n\t\t\t<li class=\"flex items-center\">{$meta.category?.title} <ArrowRightIcon class=\"size-4 mx-1\" /></li>\n\t\t\t<li class=\"truncate font-semibold text-slate-900 dark:text-slate-200\">{$meta.page?.label}</li>\n\t\t</ol>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/NavLink.svelte",
    "content": "<script lang=\"ts\">\n\timport { base } from '$app/paths';\n\n\texport let title: string;\n\texport let href: string;\n</script>\n\n<li class=\"mt-4 first:mt-0 992:mt-0\">\n\t<a class=\"text-soft text-base font-base hover:underline hover:text-brand\" href=\"{base}{href}\">\n\t\t{title}\n\t</a>\n</li>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/SideBar.svelte",
    "content": "<script lang=\"ts\">\n\timport { createEventDispatcher } from 'svelte';\n\timport SideBarLink from './SideBarLink.svelte';\n\timport SideBarCategory from './SideBarCategory.svelte';\n\timport CloseIcon from '../icons/CloseIcon.svelte';\n\timport { pages } from '$lib/store';\n\n\tconst dispatch = createEventDispatcher();\n\n\texport let open = false;\n</script>\n\n<aside\n\tid=\"main-sidebar\"\n\tclass=\"sidebar fixed top-0 lg:top-20 left-0 transform bg-body z-50 border-border border-r scrollbar transform transition-transform\n\tduration-200 ease-out will-change-transform max-h-screen min-h-screen min-w-60 lg:translate-x-0 lg:block lg:sticky\n\tlg:z-0 overflow-y-auto px-6 md:px-6 lg:px-4 {open ? 'translate-x-0' : '-translate-x-full'}\"\n>\n\t<div class=\"lg:hidden sticky top-0 left-0 flex items-center\">\n\t\t<div class=\"flex-1\" />\n\t\t<button class={`text-soft hover:text-inverse p-4 -mx-6`} on:pointerdown={() => dispatch('close')}>\n\t\t\t<CloseIcon />\n\t\t\t<span class=\"sr-only\">Close sidebar</span>\n\t\t</button>\n\t</div>\n\n\t<nav class=\"lg:px-1 scrollbar\">\n\t\t<ul class=\"mt-8 lg:pb-0\">\n\t\t\t{#each pages as category}\n\t\t\t\t<SideBarCategory title={category.title}>\n\t\t\t\t\t{#each category.pages as page}\n\t\t\t\t\t\t<SideBarLink href={page.href} label={page.label} />\n\t\t\t\t\t{/each}\n\t\t\t\t</SideBarCategory>\n\t\t\t{/each}\n\t\t</ul>\n\t</nav>\n</aside>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/SideBarCategory.svelte",
    "content": "<script>\n\texport let title;\n</script>\n\n<li class=\"992:mt-10 mt-12 first:mt-0\">\n\t<h5 class=\"text-strong 992:mb-3 mb-8 text-lg font-semibold\">\n\t\t{title}\n\t</h5>\n\t<ul class=\"border-border space-y-3 border-l\">\n\t\t<li class=\"first:mt-6\">\n\t\t\t<slot></slot>\n\t\t</li>\n\t</ul>\n</li>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/components/SideBarLink.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from '$app/stores';\t\n\timport { base } from '$app/paths';\n\n\texport let href;\n\texport let label;\n\n\t$: isActive = $page.url.pathname.includes(href);\n</script>\n\n<a\n\tclass=\"\n\t\tlg:py-1 -ml-px flex items-center border-l py-2 pl-4 transition-all\n\t\t{isActive\n\t\t? 'text-brand font-semibold border-brand'\n\t\t: 'hover:border-inverse focus-visible:border-inverse text-soft hover:text-inverse focus-visible:text-inverse border-transparent font-normal'}\"\n\thref=\"{base}{href}\"\n>\n\t{label}\n</a>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/ArrowRightIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" {...$$props}>\n\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.25 8.25 21 12m0 0-3.75 3.75M21 12H3\" />\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/CloseIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\">\n\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/GithubIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\" class=\"w-6 h-6\">\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M12 2C6.477 2 2 6.463 2 11.97c0 4.404 2.865 8.14 6.839 9.458.5.092.682-.216.682-.48 0-.236-.008-.864-.013-1.695-2.782.602-3.369-1.337-3.369-1.337-.454-1.151-1.11-1.458-1.11-1.458-.908-.618.069-.606.069-.606 1.003.07 1.531 1.027 1.531 1.027.892 1.524 2.341 1.084 2.91.828.092-.643.35-1.083.636-1.332-2.22-.251-4.555-1.107-4.555-4.927 0-1.088.39-1.979 1.029-2.675-.103-.252-.446-1.266.098-2.638 0 0 .84-.268 2.75 1.022A9.607 9.607 0 0 1 12 6.82c.85.004 1.705.114 2.504.336 1.909-1.29 2.747-1.022 2.747-1.022.546 1.372.202 2.386.1 2.638.64.696 1.028 1.587 1.028 2.675 0 3.83-2.339 4.673-4.566 4.92.359.307.678.915.678 1.846 0 1.332-.012 2.407-.012 2.734 0 .267.18.577.688.48 3.97-1.32 6.833-5.054 6.833-9.458C22 6.463 17.522 2 12 2Z\"\n\t>\n\t</path>\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/MenuIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\">\n\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/MoonIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n\t<path\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\td=\"M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/SunIcon.svelte",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n\t<path\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\td=\"M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/icons/SvelteGanttLogo.svelte",
    "content": "<svg viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" {...$$props}>\n\t<defs>\n\t\t<clipPath id=\"clip-0\">\n\t\t\t<path\n\t\t\t\td=\"M 27.148 4.445 Q 31.589 0.004 36.03 4.445 L 58.869 27.283 Q 63.31 31.724 58.869 36.165 L 36.03 59.003 Q 31.589 63.444 27.148 59.003 L 4.309 36.165 Q -0.132 31.724 4.309 27.283 Z\"\n\t\t\t\tstyle=\"fill: rgb(216, 216, 216);\"\n\t\t\t></path>\n\t\t</clipPath>\n\t</defs>\n\t<g style=\"clip-path: url(#clip-0);\">\n\t\t<path d=\"M 0 0 L 63 0 L 0 27 L 0 0 Z\" class=\"fill-blue-400\" style=\"-fill: rgb(255, 0, 0);\"></path>\n\t\t<path d=\"M 0 27 L 63 0 L 0 63 L 0 27 Z\" class=\"fill-blue-950\" style=\"-fill: rgb(133, 31, 31);\"></path>\n\t\t<path d=\"M 63 0 L 24 63 L 0 63 L 63 0 Z\" class=\"fill-blue-500\" style=\"-fill: rgb(89, 27, 27);\"></path>\n\t\t<path d=\"M 63 0 L 63 63 L 24 63 L 63 0 Z\" class=\"fill-blue-700\" style=\"\"></path>\n\t</g>\n\t<path\n\t\tstyle=\"fill: none; stroke: rgb(255, 255, 255); stroke-width: 7px;\"\n\t\td=\"M 31.107 20.88 C 28.239 17.67 17.482 16.875 16.077 27.656 C 14.118 42.686 41.127 40.817 46.388 37.717 C 51.041 34.975 54.128 28.569 47.601 24.075 C 43.849 21.491 37.477 22.666 35.264 26.058 C 32.373 30.489 32.769 34.965 31.186 40.483 C 29.791 45.347 23.348 48.693 19.161 48.852 C 12.369 49.111 0 39.463 0 37.898\"\n\t></path>\n</svg>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/index.js",
    "content": "// place files you want to import through the `$lib` alias in this folder.\nexport { default as NavBar } from './components/NavBar.svelte';\n\n// place files you want to import through the `$lib` alias in this folder.\nimport moment from 'moment';\nimport { SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt';\n\nexport function time(input) {\n\treturn moment(input, 'HH:mm');\n}\n\nexport function format(input, fmt) {\n\treturn moment(input).format(fmt);\n}\n\nexport const defaultOptions = {\n\tdateAdapter: new MomentSvelteGanttDateAdapter(moment),\n\trows: [],\n\ttasks: [],\n\theaders: [\n\t\t{ unit: 'day', format: 'MMMM Do' },\n\t\t{ unit: 'hour', format: 'H:mm' }\n\t],\n\tfitWidth: true,\n\tminWidth: 400,\n\tfrom: time('06:00'),\n\tto: time('14:00'),\n\n\ttableHeaders: [{ title: 'Label', property: 'label', width: 140, type: 'tree' }],\n\ttableWidth: 180,\n\tganttTableModules: [SvelteGanttTable]\n};\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/store.js",
    "content": "import { derived, writable } from \"svelte/store\";\nimport { page } from '$app/stores';\n\nexport const isSidebarOpen = writable(false);\n\nexport let pages = [\n    {\n        title: \"Getting started\",\n        pages: [\n            { href: \"/docs/getting-started/installation\", label: \"Installation\" },\n            { href: \"/docs/getting-started/migrating\", label: \"Migrating\" },\n        ]\n    },\n    {\n        title: \"Data\",\n        pages: [\n            { href: \"/docs/data/rows\", label: \"Rows\" },\n            { href: \"/docs/data/tasks\", label: \"Tasks\" },\n            { href: \"/docs/data/time-ranges\", label: \"Time ranges\" },\n        ]\n    },\n    {\n        title: 'Options',\n        pages: [\n            { href: \"/docs/options/gantt\", label: \"Gantt\" },\n            { href: \"/docs/options/columns\", label: \"Columns\" },\n            { href: \"/docs/options/headers\", label: \"Headers\" },\n            { href: \"/docs/options/zoom\", label: \"Zoom\" },\n            { href: \"/docs/options/layout\", label: \"Layout\" },\n        ]\n    },\n    {\n        title: 'Modules',\n        pages: [\n            { href: \"/docs/modules/dependencies\", label: \"Dependencies\" },\n            { href: \"/docs/modules/table\", label: \"Table\" },\n            { href: \"/docs/modules/external\", label: \"External\" },\n            { href: \"/docs/modules/create-tasks\", label: \"Create tasks\" },\n        ]\n    }\n];\n\nexport const meta = derived([page], ([currentPage]) => {\n    for(const category of pages) {\n        for (const page of category.pages) {\n            if (currentPage.url.pathname.includes(page.href)) {\n                return {\n                    category,\n                    page,\n                };\n            }\n        }\n    }\n    return {};\n}); \n\nconst normalized = pages.flatMap(category => category.pages);\n\nexport const previousPage = derived([meta], ([meta]) => {\n    if (!meta.page) {\n        return null;\n    }\n    const index = normalized.findIndex(item => item.href == meta.page.href);\n    return normalized[index - 1];\n});\n\nexport const nextPage = derived([meta], ([meta]) => {\n    if (!meta.page) {\n        return null;\n    }\n    const index = normalized.findIndex(item => item.href == meta.page.href);\n    return normalized[index + 1];\n});"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/styles/fonts.css",
    "content": "/* @font-face {\n  font-family: 'Inter VF';\n  font-weight: 100 900;\n  font-display: swap;\n  font-style: normal;\n  font-named-instance: 'Regular';\n  src: url('$fonts/Inter-VF.roman-latin.woff2') format('woff2');\n}\n\n@font-face {\n  font-family: 'Inter VF';\n  font-weight: 100 900;\n  font-display: swap;\n  font-style: italic;\n  font-named-instance: 'Italic';\n  src: url('$fonts/Inter-VF.italic-latin.woff2') format('woff2');\n}\n\n@font-face {\n  font-family: 'Fira Code VF';\n  font-weight: 300 700;\n  font-style: normal;\n  src: url('$fonts/FiraCode-VF.woff2') format('woff2-variations'),\n    url('$fonts/FiraCode-VF.woff') format('woff-variations');\n} */\n\n.font-mono {\n\tfont-variant-ligatures: none;\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/styles/normalize.css",
    "content": "/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n\tbox-sizing: border-box; /* 1 */\n\tborder-width: 0; /* 2 */\n\tborder-style: solid; /* 2 */\n\tborder-color: theme('borderColor.DEFAULT', currentColor); /* 2 */\n}\n\n::before,\n::after {\n\t--tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n*/\n\nhtml {\n\tline-height: 1.5; /* 1 */\n\t-webkit-text-size-adjust: 100%; /* 2 */\n\t-moz-tab-size: 4; /* 3 */\n\ttab-size: 4; /* 3 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n\tmargin: 0; /* 1 */\n\tline-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n\theight: 0; /* 1 */\n\tcolor: inherit; /* 2 */\n\tborder-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n\ttext-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-size: inherit;\n\tfont-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n\tcolor: inherit;\n\ttext-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n\tfont-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n\tfont-family: theme(\n\t\t'fontFamily.mono',\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tMenlo,\n\t\tMonaco,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\t'Courier New',\n\t\tmonospace\n\t); /* 1 */\n\tfont-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n\tfont-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n\tfont-size: 75%;\n\tline-height: 0;\n\tposition: relative;\n\tvertical-align: baseline;\n}\n\nsub {\n\tbottom: -0.25em;\n}\n\nsup {\n\ttop: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n\ttext-indent: 0; /* 1 */\n\tborder-color: inherit; /* 2 */\n\tborder-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n\tfont-family: inherit; /* 1 */\n\tfont-size: 100%; /* 1 */\n\tline-height: inherit; /* 1 */\n\tcolor: inherit; /* 1 */\n\tmargin: 0; /* 2 */\n\tpadding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n\ttext-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n\t-webkit-appearance: button; /* 1 */\n\tbackground-color: transparent; /* 2 */\n\tbackground-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n\toutline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n\tbox-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n\tvertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n\theight: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n\t-webkit-appearance: textfield; /* 1 */\n\toutline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n\t-webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n\t-webkit-appearance: button; /* 1 */\n\tfont: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n\tdisplay: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n\tmargin: 0;\n}\n\nfieldset {\n\tmargin: 0;\n\tpadding: 0;\n}\n\nlegend {\n\tpadding: 0;\n}\n\nol,\nul,\nmenu {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n\tresize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::placeholder,\ntextarea::placeholder {\n\topacity: 1; /* 1 */\n\tcolor: theme('colors.gray.400', #9ca3af); /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role='button'] {\n\tcursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n\tcursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n\tdisplay: block; /* 1 */\n\tvertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n\tmax-width: 100%;\n\theight: auto;\n}\n\n/*\nEnsure the default browser behavior of the `hidden` attribute.\n*/\n\n[hidden] {\n\tdisplay: none;\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/styles/theme.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\nbody {\n\t@apply h-screen w-screen;\n\n\tfont-family: \"Inter\", sans-serif;\n}\n\n.js-focus-visible :focus:not([data-focus-visible-added]) {\n\t@apply outline-none;\n}\n\n.js-focus-visible [data-focus-visible-added] {\n\t@apply outline-none ring-2;\n\t--tw-ring-color: var(--sg-color-focus);\n}\n\n* {\n\t-webkit-tap-highlight-color: transparent;\n}\n\n/*\n * -----------------------------------------------------\n * SCROLLBAR\n * -----------------------------------------------------\n */\n\n.no-scrollbar {\n\tscrollbar-width: none;\n}\n\n.no-scrollbar::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n@media screen and (min-width: 1280px) {\n\t.scroll-contain {\n\t\toverscroll-behavior: contain;\n\t}\n}\n\n.scroll-contain-mobile {\n\toverscroll-behavior: contain;\n}\n\n.scrollbar {\n\tscrollbar-width: thin;\n\t--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / 0.3);\n\t--sg-scrollbar-thumb-bg: rgb(var(--sg-color-border));\n}\n\n.dark .scrollbar {\n\t--sg-scrollbar-track-bg: rgb(var(--sg-color-border) / 0.2);\n}\n\n@media screen and (prefers-reduced-motion: no-preference) {\n\t.scrollbar {\n\t\tscroll-behavior: smooth;\n\t}\n}\n\n.scrollbar::-webkit-scrollbar {\n\t@apply !h-1.5 !w-[5px] !bg-transparent;\n}\n\n.scrollbar::-webkit-scrollbar-track {\n\t@apply !rounded;\n\tbackground-color: var(--sg-scrollbar-track-bg) !important;\n}\n\n.scrollbar::-webkit-scrollbar-thumb {\n\t@apply !rounded;\n\tbackground-color: var(--sg-scrollbar-thumb-bg) !important;\n}\n\n/*\n * -----------------------------------------------------\n * BLUR\n * -----------------------------------------------------\n */\n\n.blur-bg {\n\t@apply bg-body dark:bg-body backdrop-blur backdrop-filter;\n}\n\n@supports (backdrop-filter: blur(0)) or (-webkit-backdrop-filter: blur(0)) {\n\t.blur-bg {\n\t\t@apply bg-body/20 dark:bg-body/60;\n\t}\n}\n\n.svg-responsive > svg {\n\twidth: 100%;\n\theight: 100%;\n}\n\n/*\n * -----------------------------------------------------\n * DOCS\n * -----------------------------------------------------\n */\n\n.sg-docs pre {\n\ttab-size: 2;\n\t-o-tab-size: 2;\n\t-moz-tab-size: 2;\n}\n\n.sg-docs p + .admonition,\n.sg-docs p + .steps {\n\tmargin-top: 2.5rem;\n}\n\n.sg-docs .steps + p {\n\tmargin-top: 4rem;\n}\n\n.sg-docs .admonition + .steps {\n\tmargin-top: 3.5rem;\n}\n\n.sg-docs .admonition + table {\n\tmargin-top: 4rem;\n}\n\n.sg-docs .code-fence .code pre {\n\tmargin: 0;\n}\n\n.sg-docs .code-fence.lang-bash pre span {\n\tcolor: #fafafa !important;\n}\n\n.sg-docs .code-fence.lang-bash pre .line:not(:empty)::before {\n\tcontent: '> ';\n\tfont-weight: bold;\n\tcolor: var(--sg-terminal-line-pointer);\n}\n\n.sg-docs .step .description > code {\n\tcolor: var(--sg-color-inverse);\n}\n\n.sg-docs .step .code-fence {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.sg-docs .code-fence + .code-fence {\n\tmargin-top: 0.5rem;\n}\n\n.sg-docs h1 + .steps,\n.sg-docs h2 + .steps,\n.sg-docs h3 + .steps {\n\tmargin-top: 2.5rem;\n}\n\n.sg-docs .header-anchor {\n\tmargin-left: 0.25em;\n\tpadding: 0 0.23em;\n\tfont-size: 0.9em;\n\topacity: 0;\n\tborder: 0;\n\tbackground-color: none;\n}\n\n.sg-docs h1:focus,\n.sg-docs h2:focus,\n.sg-docs h3:focus,\n.sg-docs h4:focus,\n.sg-docs h5:focus,\n.sg-docs h6:focus {\n\toutline: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n\t.sg-docs h1:hover .header-anchor,\n\t.sg-docs h2:hover .header-anchor,\n\t.sg-docs h3:hover .header-anchor,\n\t.sg-docs h4:hover .header-anchor,\n\t.sg-docs h5:hover .header-anchor,\n\t.sg-docs h6:hover .header-anchor {\n\t\topacity: 1;\n\t}\n}\n\n@media (pointer: coarse) {\n\t.sg-docs h1:focus .header-anchor,\n\t.sg-docs h2:focus .header-anchor,\n\t.sg-docs h3:focus .header-anchor,\n\t.sg-docs h4:focus .header-anchor,\n\t.sg-docs h5:focus .header-anchor,\n\t.sg-docs h6:focus .header-anchor {\n\t\topacity: 1;\n\t}\n}\n\n.sg-docs .header-anchor:focus {\n\topacity: 1;\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/lib/styles/vars.css",
    "content": ":root,\n.prefers-light-scheme {\n\t--sg-color-focus: 79 70 229;\n\t--sg-color-soft: 68 78 94;\n\t--sg-color-body: 250 250 250;\n\t--sg-color-elevate: 243 244 246;\n\t--sg-color-inverse: 5 11 23;\n\t--sg-color-border: 209 213 219;\n}\n\n:root {\n\tfont-size: 16px;\n\tscroll-padding-top: 6rem;\n\t--sg-breadcrumbs-height: 5rem;\n\t--sg-article-max-width: 98ch;\n}\n\n@media screen and (min-width: 992px) {\n\t:root {\n\t\t--sg-breadcrumbs-height: 0px;\n\t}\n}\n\n@media screen and (min-width: 1460px) {\n\t:root {\n\t}\n}\n\n:root.dark,\n.prefers-dark-scheme {\n\tcolor-scheme: dark;\n\t--sg-color-soft: 150 155 166;\n\t--sg-color-inverse: 245 245 245;\n\t--sg-color-border: 38 48 64;\n\t--sg-color-elevate: 10 19 33;\n\t--sg-color-body: 5 11 23;\n\t--sg-color-focus: 129 140 248;\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/+layout.js",
    "content": "export const ssr = false;\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/+layout.svelte",
    "content": "<script>\n\timport '../app.css';\n\timport 'prism-themes/themes/prism-lucario.css';\n\timport '$lib/styles/normalize.css';\n\timport '$lib/styles/fonts.css';\n\timport '$lib/styles/theme.css';\n\timport '$lib/styles/vars.css';\n\timport Navbar from '$lib/components/NavBar.svelte';\n\timport { isSidebarOpen, meta } from '$lib/store';\n\n\texport let isNavPopoverOpen = false;\n\n\tlet title = '';\n\t$: {\n\t\ttitle = $meta.page?.label ? `${$meta.page.label} | svelte-gantt` : 'svelte-gantt';\n\t}\n</script>\n\n<svelte:head>\n\t<title>{title}</title>\n</svelte:head>\n\n<div class=\"sg-docs bg-body text-inverse min-h-screen min-w-full transition-transform duration-150 ease-out\">\n\t<div\n\t\tclass=\"fixed top-0 z-30 w-full flex-none transform-gpu transition-transform duration-150 ease-out\n\t\t{isNavPopoverOpen ? '' : 'blur-bg'} \n\t\ttranslate-y-0 border-b border-slate-900/10\"\n\t>\n\t\t<Navbar on:open-popover={() => (isNavPopoverOpen = true)} on:close-popover={() => (isNavPopoverOpen = false)} on:open={() => ($isSidebarOpen = true)}></Navbar>\n\t</div>\n\n\t<slot />\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/+page.svelte",
    "content": "<script>\n\timport { onDestroy, onMount } from 'svelte';\n\timport FeatureCard from './FeatureCard.svelte';\n\timport HeroExample from './HeroExample.svelte';\n\timport { base } from '$app/paths';\n\n\tlet expansionObserver = new IntersectionObserver((entries) => {\n\t\tentries.forEach((entry) => {\n\t\t\tentry.target.classList.remove('opacity-0', 'translate-y-2');\n\t\t\tentry.target.classList.add('opacity-100', 'translate-y-0');\n\t\t});\n\t});\n\n\tonMount(() => {\n\t\tdocument.body.classList.add('landing-page');\n\t\tdocument.querySelectorAll('.loading').forEach((e) => expansionObserver.observe(e));\n\t});\n\n\tonDestroy(() => {\n\t\tdocument.body.classList.remove('landing-page');\n\t});\n</script>\n\n<main class=\"overflow-hidden flex flex-col min-h-screen\">\n\t<header class=\"relative\">\n\t\t<div class=\"px-4 sm:px-6 md:px-8 pt-12\">\n\t\t\t<div class=\"absolute inset-0 bottom-10 bg-bottom bg-no-repeat bg-slate-200\">\n\t\t\t\t<div class=\"absolute inset-0 bg-grid-slate-900/[0.04] bg-[bottom_1px_center] dark:bg-grid-slate-400/[0.05] dark:bg-bottom dark:border-b dark:border-slate-100/5\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"relative max-w-5xl mx-auto pt-20 sm:pt-24 lg:pt-32\">\n\t\t\t\t<h1 class=\"text-slate-900 font-extrabold text-4xl sm:text-5xl lg:text-6xl tracking-tight text-center dark:text-white\">\n\t\t\t\t\tLightweight and fast interactive <span class=\"bg-clip-text text-transparent bg-gradient-to-tr from-pink-500 to-violet-500\">Gantt chart.</span>\n\t\t\t\t</h1>\n\t\t\t\t<p class=\"mt-6 text-lg text-slate-600 text-center max-w-3xl mx-auto dark:text-slate-400\">\n\t\t\t\t\t<span class=\"font-medium bg-clip-text text-transparent bg-gradient-to-tr from-pink-500 to-violet-500\">Svelte-gantt</span> is a lightweight and fast interactive gantt chart/resource booking component\n\t\t\t\t\tmade with Svelte. Compatible with React, Angular, Vue, Svelte... Zero dependencies.\n\t\t\t\t</p>\n\n\t\t\t\t<div class=\"mt-6 sm:mt-10 flex justify-center space-x-6 text-sm\">\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass=\"group text-white font-medium text-2xl transition-all hover:scale-105 px-6 py-3 text-soft mb-12 bg-gradient-to-tr from-pink-500 to-violet-500 hover:bg-violet-600 mx-auto transition-all\"\n\t\t\t\t\t\thref=\"{base}/docs/getting-started/installation\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"inline-block transform transition-transform duration-100 group-hover:translate-x-0\">Get started</span>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"max-w-7xl mx-auto px-4 sm:px-6 md:px-8 mt-20 sm:mt-24 lg:mt-32\">\n\t\t\t<div class=\"-mx-4 sm:mx-0\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"relative overflow-hidden shadow-xl flex bg-white max-h-[60vh] sm:rounded-xl lg:h-[34.6875rem] xl:h-[31.625rem] dark:bg-slate-900/70 dark:backdrop-blur dark:ring-1 dark:ring-inset dark:ring-white/10 !h-auto max-h-[none]\"\n\t\t\t\t>\n\t\t\t\t\t<HeroExample />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</header>\n\n\t<section class=\"grow\">\n\t\t<div class=\"relative max-w-5xl mx-auto pt-20 sm:pt-24 lg:pt-32 mb-20 sm:mb-24 lg:mb-32 px-4 sm:px-6 md:px-8 lg:px-0\">\n\t\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n\t\t\t\t<FeatureCard>\n\t\t\t\t\t<svelte:fragment slot=\"title\">Interactive</svelte:fragment>\n\t\t\t\t\t<svelte:fragment slot=\"subtitle\">Items can be added, moved and resized. Select multiple to move them at once.</svelte:fragment>\n\t\t\t\t</FeatureCard>\n\t\t\t\t<FeatureCard>\n\t\t\t\t\t<svelte:fragment slot=\"title\">Fast</svelte:fragment>\n\t\t\t\t\t<svelte:fragment slot=\"subtitle\">Display thousands of tasks assigned to thousands of resources. Update them in real-time.</svelte:fragment>\n\t\t\t\t</FeatureCard>\n\t\t\t\t<FeatureCard>\n\t\t\t\t\t<svelte:fragment slot=\"title\">Zoom</svelte:fragment>\n\t\t\t\t\t<svelte:fragment slot=\"subtitle\">Zoom the chart in or out. Display different periods of time.</svelte:fragment>\n\t\t\t\t</FeatureCard>\n\t\t\t\t<FeatureCard>\n\t\t\t\t\t<svelte:fragment slot=\"title\">Layouts</svelte:fragment>\n\t\t\t\t\t<svelte:fragment slot=\"subtitle\">Display tasks overlapped or spaced apart.</svelte:fragment>\n\t\t\t\t</FeatureCard>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n\n\t<footer class=\"h-40 bg-slate-400 flex items-center justify-center\">\n\t\t<div class=\"relative max-w-5xl mx-auto\">\n\t\t\t<div class=\"text-slate-100\">\n\t\t\t\t@2024 Ante Novokmet - <a href=\"https://github.com/ANovokmet/\">ANovokmet</a>\n\t\t\t</div>\n\t\t</div>\n\t</footer>\n</main>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/FeatureCard.svelte",
    "content": "<div class=\"bg-slate-200/40 p-4\">\n\t<h2 class=\"text-lg font-medium text-slate-500\">\n\t\t<slot name=\"title\"></slot>\n\t</h2>\n\t<p class=\"text-slate-400 pt-1\">\n\t\t<slot name=\"subtitle\"></slot>\n\t</p>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/HeroExample.svelte",
    "content": "<script>\n\timport { SvelteGantt, SvelteGanttTable, SvelteGanttDependencies } from 'svelte-gantt/svelte';\n\timport { time } from '$lib';\n\n    let tasks = [\n\t\t{ id: 1, resourceId: 1, from: time('9:00'), to: time('10:00'), label: 'Site visit', classes: 'task-slate' },\n\t\t{ id: 2, resourceId: 3, from: time('9:00'), to: time('12:15'), label: 'Development', classes: 'task-slate', enableDragging: false, enableResize: false },\n\t\t{ id: 3, resourceId: 4, from: time('8:30'), to: time('10:30'), label: 'Design', classes: 'task-blue' },\n\t\t{ id: 4, resourceId: 5, from: time('12:30'), to: time('14:30'), label: 'Review', classes: 'task-blue' },\n\t\t{ id: 5, resourceId: 2, from: time('12:30'), to: time('15:00'), label: 'Review', classes: 'task-pink' }\n\t];\n\n    let numUpdate = 0;\n    const updates = [\n\t\t{ resourceId: 1, from: time('9:00'), to: time('10:00'), classes: 'task-blue' },\n\t\t{ resourceId: 2, from: time('8:30'), to: time('11:30'), classes: 'task-pink' },\n\t\t{ resourceId: 3, from: time('12:30'), to: time('14:30'), classes: 'task-blue' }\n    ];\n    setInterval(() => {\n        numUpdate++;\n    }, 2000);\n\n    $: {\n        const update = updates[numUpdate % updates.length];\n        Object.assign(tasks[0], update);\n        tasks = tasks;\n    }\n</script>\n\n<div class=\"example w-full\">\n    <SvelteGantt\n        from={time('8:00')}\n        to={time('16:00')}\n        fitWidth={true}\n        ganttTableModules={[SvelteGanttTable]}\n        ganttBodyModules={[SvelteGanttDependencies]}\n        rows={[\n            { id: 1, label: 'Jedd Balden' },\n            { id: 2, label: 'Rozele McFarland' },\n            { id: 3, label: 'Chrissy Bullard' },\n            { id: 4, label: 'Patience Leschelle' },\n            { id: 5, label: 'Rosette Henrie' }\n        ]}\n        dependencies={[\n            {\n                id: 1,\n                fromId: 3,\n                toId: 4,\n                stroke: '#64748b'\n            }\n        ]}\n        tasks={tasks}\n        timeRanges={[\n            {\n                id: 0,\n                from: time('10:00'),\n                to: time('11:00'),\n                classes: 'time-range-lunch',\n                label: 'Lunch',\n                resizable: false\n            }\n        ]}\n    />\n</div>\n\n<style lang=\"postcss\">\n\t.example :global(.task-pink) {\n\t\t@apply bg-pink-600 text-white;\n\t}\n\n\t.example :global(.task-pink:hover) {\n\t\t@apply bg-pink-800;\n\t}\n\n\t.example :global(.task-slate) {\n\t\t@apply bg-slate-400 text-white;\n\t}\n\n\t.example :global(.task-slate:hover) {\n\t\t@apply bg-slate-600;\n\t}\n\n\t.example :global(.task-blue) {\n\t\t@apply bg-blue-500 text-white;\n\t}\n\n\t.example :global(.task-blue:hover) {\n\t\t@apply bg-blue-600;\n\t}\n</style>"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/+layout.svelte",
    "content": "<script>\n\timport Sidebar from '$lib/components/SideBar.svelte';\n\timport Button from '$lib/components/Button.svelte';\n\timport { base } from '$app/paths';\n\n\timport { isSidebarOpen, meta, nextPage, previousPage } from '$lib/store';\n</script>\n\n<div class=\"mx-auto w-full flex flex-row min-h-full max-w-7xl pt-32 lg:pt-20 z-20\">\n\t<Sidebar open={$isSidebarOpen} on:close={() => ($isSidebarOpen = false)}></Sidebar>\n\n\t<!-- overlay -->\n\t<div class=\"lg:hidden z-40\">\n\t\t<div\n\t\t\tclass=\"pointer-events-auto fixed top-0 left-0 z-40 backdrop-blur-sm backdrop-filter transition-opacity duration-75 bg-body/20 dark:bg-body/60 h-screen w-screen {$isSidebarOpen ? 'visible opacity-100' : 'invisible opacity-0'}\"\n\t\t\ton:click={() => ($isSidebarOpen = false)}\n\t\t></div>\n\t</div>\n\n\t<main class={`w-full overflow-x-hidden lg:min-h-64 min-h-[calc(100vh-var(--sg--navbar-height))] px-8 992:px-16 pt-8 bg-slate-900`}>\n\n\t\t<article class=\"markdown prose dark:prose-invert z-10 max-w-[var(--sg-article-max-width)]\">\n\t\t\t<p class=\"text-brand mb-3.5 text-[15px] font-semibold leading-6\">{$meta.category?.title}</p>\n\n\t\t\t<slot />\n\t\t</article>\n\n\t\t{#if $previousPage || $nextPage}\n\t\t\t<hr class=\"border-border mt-20\" />\n\n\t\t\t<div class=\"992:text-xl flex items-center pt-12 pb-20 text-lg font-semibold text-gray-300\">\n\t\t\t\t{#if $previousPage}\n\t\t\t\t\t<div class=\"mb-4 flex flex-col items-start\">\n\t\t\t\t\t\t<span class=\"text-inverse ml-3 mb-4 inline-block\">Previous</span>\n\t\t\t\t\t\t<Button arrow=\"left\" href={base}{$previousPage.href} class=\"hover:text-inverse\" data-sveltekit-prefetch>\n\t\t\t\t\t\t\t{$previousPage.label}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\n\t\t\t\t{#if $nextPage}\n\t\t\t\t\t<div class=\"ml-auto mb-4 flex flex-col items-end\">\n\t\t\t\t\t\t<span class=\"text-inverse mr-3 mb-4 inline-block\">Next</span>\n\t\t\t\t\t\t<Button arrow=\"right\" href={base}{$nextPage.href} class=\"hover:text-inverse\" data-sveltekit-prefetch>\n\t\t\t\t\t\t\t{$nextPage.label}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t{/if}\n\n\t\t<footer class=\"flex text-center py-20 border-t text-slate-500\">\n\t\t\t<div class=\"\">\n\t\t\t\t@2024 Ante Novokmet - <a href=\"https://github.com/ANovokmet/\">ANovokmet</a>\n\t\t\t</div>\n\t\t\t<div class=\"ml-auto\">\n\t\t\t\tNeed more features? <a href=\"https://github.com/ANovokmet\" class=\"text-base font-base hover:underline hover:text-brand\">Contact</a>\n\t\t\t</div>\n\t\t</footer>\n\t</main>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/+page.js",
    "content": "import { base } from '$app/paths';\nimport { redirect } from '@sveltejs/kit';\n\nexport const load = () => {\n\tredirect(307, `${base}/docs/getting-started/installation`);\n};\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/rows/+page.svx",
    "content": "---\ntitle: Rows\n---\n\n<script>\n    import {SvelteGantt, SvelteGanttTable} from 'svelte-gantt/svelte';\n    import { defaultOptions, time } from '$lib';\n    import TreeExample from './TreeExample.svelte';\n    import RowsExample from './RowsExample.svelte';\n</script>\n\n# Row\n\nRows are defined as a list of objects. Rows can be rendered as a collapsible tree (rows are collapsed with SvelteGanttTable module). Row objects may have these parameters:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`id` | `number &#124; string` | Id of row, every row needs to have a unique one. **(required)**\n`classes` | `string &#124; string[]` | Custom CSS classes to apply to row.\n`contentHtml` | `string` | Html content of row, renders as background to a row.\n`enableDragging` | `boolean` | enable dragging of tasks to and from this row. *(deprecated)* | `true`\n`draggable` | `boolean` | enable dragging of tasks to and from this row. | `true`\n`enableResize` | `boolean` | enable resize of tasks on this row. *(deprecated)* | `true`\n`resizable` | `boolean` | enable resize of tasks on this row. | `true`\n`label` | `string` | Label of row, could be any other property, can be displayed with SvelteGanttTable.\n`headerHtml` | `string` | Html content of table row header, displayed in SvelteGanttTable.\n`children` | `object[]` | List of children row objects, these can have their own children.\n`expanded` | `boolean` | Used when tree view is enabled, controls the expanded state.\n`height` | `number` | The height of the row. | `52`\n\n\n<RowsExample />\n\n# Collapsible rows\n\nTo use collapsible rows add row items to `row.children` property. To show a button for expanding rows, set `type: 'tree'` to the table header.\n\n```js\ngantt.$set({\n    tableHeaders={[ { title: 'Title', property: 'label', type: 'tree' } ]},\n    rows={[\n        {\n            id: 1, \n            label: 'Parent 1', \n            expanded: false, \n            children: [\n                { id: 11, label: 'Child 1' }, \n                { id: 12, label: 'Child 2' }\n            ]\n        }, \n        {\n            id: 2, \n            label: 'Parent 2', \n            expanded: true, \n            children: [\n                { id: 21, label: 'Child 1', children: [{ id: 211, label: 'Grandchild 1' }] }, \n                { id: 22, label: 'Child 2' }, \n                { id: 23, label: 'Child 3' }\n            ]\n        },\n        {\n            id: 3, \n            label: 'No children' \n        },\n    ]}\n});\n\n```\n\n<TreeExample />\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/rows/RowsExample.svelte",
    "content": "<script>\n\timport { time } from '$lib';\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n</script>\n\n<div class=\"example border my-12\">\n\t<SvelteGantt from={time('8:00')} to={time('12:00')}\n\t\trows={[\n\t\t\t{id: 1, label: 'Using the label'}, \n\t\t\t{id: 2, label: 'Apply custom classes', classes: 'row-gradient' },\n\t\t\t{id: 3, label: 'With custom html content', contentHtml: '<div class=\"h-full flex justify-center items-center\"><span class=\"bg-gradient-to-tr from-pink-500 to-violet-500 text-violet-50 px-1\">Custom html content</span></div>' },\n\t\t\t{id: 4, headerHtml: '<div class=\"h-full flex justify-center items-center\"><span class=\"bg-gradient-to-tr from-pink-500 to-violet-500 text-violet-50 px-1\">This time in header</span></div>' },\n\t\t]}\n\t\tganttTableModules={[SvelteGanttTable]}\n\t/>\n</div>\n\n<style lang=\"postcss\">\n    .example :global(.row-gradient) {\n        @apply bg-gradient-to-tr from-pink-500 to-violet-500 opacity-50;\n    }\n</style>"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/rows/TreeExample.svelte",
    "content": "<script>\n\timport { time } from '$lib';\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n</script>\n\n<div class=\"example border my-12\">\n\t<div class=\"text-center border-b\">Click on row headers to expand and collapse.</div>\n\t<SvelteGantt\n\t\tfrom={time('8:00')}\n\t\tto={time('12:00')}\n\t\ttableHeaders={[{ title: 'Title', property: 'label', type: 'tree' }]}\n\t\trows={[\n\t\t\t{\n\t\t\t\tid: 1,\n\t\t\t\tlabel: 'Parent 1',\n\t\t\t\texpanded: false,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ id: 11, label: 'Child 1' },\n\t\t\t\t\t{ id: 12, label: 'Child 2' }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 2,\n\t\t\t\tlabel: 'Parent 2',\n\t\t\t\texpanded: true,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ id: 21, label: 'Child 1', children: [{ id: 211, label: 'Grandchild 1' }] },\n\t\t\t\t\t{ id: 22, label: 'Child 2' },\n\t\t\t\t\t{ id: 23, label: 'Child 3' }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{ id: 3, label: 'No children' }\n\t\t]}\n\t\tganttTableModules={[SvelteGanttTable]}\n\t/>\n</div>\n\n<style lang=\"postcss\">\n\t.example :global(.sg-tree-expander .fa-angle-right::before) {\n\t\tdisplay: block;\n\t\tcontent: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" /></svg>');\n\t\twidth: 1rem;\n\t\theight: 1rem;\n\t}\n\t.example :global(.sg-tree-expander .fa-angle-down::before) {\n\t\tdisplay: block;\n\t\tcontent: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\" /></svg>');\n\t\twidth: 1rem;\n\t\theight: 1rem;\n\t}\n</style>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/tasks/+page.svx",
    "content": "---\ntitle: Tasks\n---\n\n# Task\n\nTasks are intervals of time that are assigned to a resource. They are defined as a list of objects:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`id` | `number`\\|`string` | Id of task, every task needs to have a unique one. | undefined |\n`resourceId` | `number`\\`string` | Id of row, every task must specify a valid resourceId. **(required)** | undefined |\n`amountDone` | `number` | Task completion in percent, indicated on task. | undefined |\n`classes` | `string`\\|`Array` | Custom CSS classes to apply to task. | undefined |\n`from` | `number` | Datetime task starts on. | undefined |\n`to` | `number` | Datetime task ends on. | undefined |\n`label` | `string` | Label of task. | undefined |\n`html` | `string` | Html content of task, will override label. | undefined |\n`showButton` | `boolean` | Show button bar. | undefined |\n`buttonClasses` | `string`\\|`Array` | Button classes, useful for fontawesome icons. | undefined |\n`buttonHtml` | `string` | Html content of button. | undefined |\n`draggable` | `boolean` | enable dragging of task. | true |\n`enableDragging` | `boolean` | enable dragging of task. *(deprecated)* | true |\n`resizable` | `boolean` | enable resize of task. | true |\n`resizeEnabled` | `boolean` | enable resize of task. *(deprecated)* | true |\n\n\n\n<script>\n    import {SvelteGantt, SvelteGanttTable} from 'svelte-gantt/svelte';\n    import { defaultOptions, time } from '$lib';\n    import TasksExample from './TasksExample.svelte';\n    import TaskComponentExample from './TaskComponentExample.svelte';\n</script>\n\n<TasksExample />\n\n### TaskElementHook\n\nCustom task components can be created by passing `taskElementHook` to gantt.\n\n| Name | Description | Type | Default |\n| - | - | - | -: |\n| `taskElementHook` | `function` | [Task element hook](#taskelementhook) | undefined |\n\nTask element hook function is a svelte action, eg. \n\n```js\n(node, task) => { \n    node.addEventListener('click', console.log); \n    return { \n        update(task) { \n            // ...\n        },\n        destroy() {\n            node.removeEventListener('click', console.log);\n        } \n    }; \n}\n```\n\nThis enables you to add custom behaviour and look to tasks. For example, displaying a popup on hover, or rendering Angular components within the task.\n\n<TaskComponentExample />\n\n### Milestones\n\nTODO\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/tasks/TaskComponentExample.css",
    "content": ".task {\n\tpadding: 1rem;\n\t/* width: 320px; */\n\tborder-radius: 6px !important;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\n\tbackground-color: white !important;\n\tbox-shadow:\n\t\trgba(9, 30, 66, 0.25) 0px 4px 8px -2px,\n\t\trgba(9, 30, 66, 0.08) 0px 0px 0px 1px;\n}\n\n.task__header {\n\tpadding-left: 1rem;\n\tborder-left: 4px solid #fbbf24;\n\tposition: relative;\n\tmargin-bottom: 0.5rem;\n}\n\n.task__title {\n\tfont-weight: 600;\n\tcolor: #1e293b;\n}\n\n.task__subtitle {\n\tfont-size: 0.9rem;\n\tcolor: #64748b;\n}\n\n.task__menu {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\theight: 1.75rem;\n\twidth: 1.75rem;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.task__tags {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.5rem;\n}\n\n.task__tag {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 100%;\n\tpadding: 0.2rem 0.5rem;\n\tborder-radius: 4px;\n\tfont-size: 0.9rem;\n\tbox-shadow:\n\t\t#e2e8f0 0px 1px 1px,\n\t\t#f8fafc 0px 0px 1px 1px;\n}\n\n.task__icon-archive-box::before {\n\tdisplay: block;\n\tcontent: url('data:image/svg+xml; utf8, <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m20.25 7.5-.625 10.632a2.25 2.25 0 0 1-2.247 2.118H6.622a2.25 2.25 0 0 1-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z\" /></svg>');\n\twidth: 1.25rem;\n\theight: 1.25rem;\n}\n\n.task__tag.amber {\n\tbackground: #fcd34d;\n\tbackground: linear-gradient(0deg, #fcd34d 0%, #fde68a 10%, #fde68a 90%, #fffbeb 100%);\n\tcolor: #d97706;\n}\n\n.task__tag.violet {\n\tbackground: #c4b5fd;\n\tbackground: linear-gradient(0deg, #c4b5fd 0%, #ddd6fe 10%, #ddd6fe 90%, #f5f3ff 100%);\n\tcolor: #8b5cf6;\n}\n\n.task__footer {\n\tdisplay: flex;\n\tpadding-left: 1rem;\n}\n\n.task__assignees {\n\tmargin-left: auto;\n\tdisplay: flex;\n}\n\n.task__assignee {\n\tborder-radius: 50%;\n\tdisplay: block;\n\theight: 2rem;\n\twidth: 2rem;\n\tborder: 2px solid white;\n\tbackground: #bbf7d0;\n\tfont-size: 0.75rem;\n\tcolor: #16a34a;\n\tmargin-left: -0.75rem;\n\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tfont-weight: 600;\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/tasks/TaskComponentExample.svelte",
    "content": "<script>\n\timport { SvelteGantt } from 'svelte-gantt/svelte';\n\timport { time, format } from '$lib';\n\timport './TaskComponentExample.css';\n\n\tfunction taskComponent(node, task) {\n\t\tconst div = document.createElement('div');\n\t\tdiv.className = '';\n\n\t\tfunction render(task) {\n\t\t\tdiv.innerHTML = `\n<div class=\"task__header\">\n    <div class=\"task__title\">${task.title}</div>\n    <div class=\"task__subtitle\">${format(task.from, 'MMM DD')} - ${format(task.to, 'H:mm')}</div>\n\n    <div class=\"task__menu\">\n    <i class=\"fa fa-ellipsis-vertical\"></i>\n    </div>\n</div>\n<div class=\"task__footer\">\n    <div class=\"task__tags\">\n    <span class=\"task__tag violet\">\n        <i class=\"task__icon-archive-box\"></i>\n    </span>\n    <span class=\"task__tag amber\">\n        • ${task.priority}\n    </span>\n    </div>\n    <div class=\"task__assignees\">\n        ${task.assignees.map((a) => `<span class=\"task__assignee\">${a}</span>`)}\n    </div>\n</div>`;\n\t\t}\n\n\t\trender(task);\n\t\tnode.appendChild(div);\n\n\t\treturn {\n\t\t\tupdate(task) {\n\t\t\t\tconsole.log(task);\n\t\t\t\trender(task);\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tnode.remove();\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div class=\"example border\">\n\t<SvelteGantt\n\t\tfrom={time('8:00')}\n\t\tto={time('14:00')}\n\t\tminWidth={200}\n\t\tfitWidth={true}\n\t\trowHeight={140}\n\t\ttaskElementHook={taskComponent}\n\t\trows={[\n\t\t\t{ id: 1, label: 'Row 1' },\n\t\t\t{ id: 2, label: 'Row 2' }\n\t\t]}\n\t\ttasks={[\n\t\t\t{\n\t\t\t\tid: 1,\n\t\t\t\tresourceId: 1,\n\t\t\t\tfrom: time('8:30'),\n\t\t\t\tto: time('11:00'),\n\t\t\t\tlabel: ' ',\n\t\t\t\ttitle: 'Employee Details page',\n\t\t\t\tclasses: 'task',\n\t\t\t\tpriority: 'Medium',\n\t\t\t\tassignees: ['AD', 'BC', 'TE']\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 2,\n\t\t\t\tresourceId: 2,\n\t\t\t\tfrom: time('9:30'),\n\t\t\t\tto: time('13:00'),\n\t\t\t\tlabel: ' ',\n\t\t\t\ttitle: 'Documentation page',\n\t\t\t\tclasses: 'task',\n\t\t\t\tpriority: 'High',\n\t\t\t\tassignees: ['AN', 'TE']\n\t\t\t}\n\t\t]}\n\t/>\n</div>\n\n<style>\n</style>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/tasks/TasksExample.svelte",
    "content": "<script>\n\timport { time } from '$lib';\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n</script>\n\n<div class=\"example border my-12\">\n\t<SvelteGantt from={time('8:00')} to={time('14:00')}\n\t\tminWidth={200}\n\t\tfitWidth={true}\n\t\trows={[\n\t\t\t{id: 1, label: 'Row 1'}, \n\t\t\t{id: 2, label: 'Row 2'}, \n\t\t\t{id: 3, label: 'Row 3'}, \n\t\t\t{id: 4, label: 'Row 4'}, \n\t\t\t{id: 5, label: 'Row 4'}, \n\t\t\t{id: 6, label: 'Row 4'}, \n\t\t]}\n\t\ttasks={[\n\t\t\t{ id: 1, resourceId: 1, from: time('8:30'), to: time('10:00'), label: 'Default' },\n\t\t\t{ id: 2, resourceId: 2, from: time('9:00'), to: time('10:30'), label: '25% done', amountDone: 25 },\n\t\t\t{ id: 3, resourceId: 3, from: time('9:30'), to: time('11:00'), label: 'Custom class', classes: 'gradient' },\n\t\t\t{ id: 4, resourceId: 4, from: time('10:00'), to: time('11:30'), html: '<span class=\"flex items-center gap-2\"><span class=\"w-4 h-4 bg-blue-800\"></span>Html content</span>' },\n\t\t\t{ id: 5, resourceId: 5, from: time('10:30'), to: time('12:00'), label: 'Resizable but not draggable', enableDragging: false },\n\t\t\t{ id: 6, resourceId: 6, from: time('11:00'), to: time('12:30'), label: 'Draggable but not resizable', enableResize: false }\n\t\t]}\n\t/>\n</div>\n\n<style lang=\"postcss\">\n    .example :global(.gradient) {\n        @apply bg-gradient-to-tr from-pink-500 to-violet-500 rounded-md;\n    }\n    .example :global(.gradient:hover) {\n        @apply bg-gradient-to-tr from-pink-600 to-violet-600 rounded-md shadow-xl;\n    }\n</style>"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/time-ranges/+page.svx",
    "content": "\n<script>\n    import TimeRangesExample from './TimeRangesExample.svelte';\n</script>\n\n\n# Time range\n\nRenders a block of time spanning all the rows.\n\n| Name | Description | Type | Default |\n| - | - | - | -: |\n| `id`  | Unique id of time range. | `number`\\|`string` | undefined |\n|`from` | Datetime timeRange starts on.| `number`  | undefined |\n| `to`  | Datetime timeRange ends on. | `number` | undefined |\n| `classes`| Custom CSS classes. | `string`\\|`Array` | undefined |\n| `label`  | Display label. | `string` | undefined |\n| `resizable` | Should the time range be resizable. | `boolean` | false |\n\n```js\nconst options = {\n    // ...\n    timeRanges: [\n            {\n                id: 2,\n                from: new Date('2024-02-01T08:00:00').valueOf(),\n                to: new Date('2024-02-01T09:00:00').valueOf(),\n                label: 'Breakfast'\n            },\n            {\n                id: 1,\n                from: new Date('2024-02-01T10:00:00').valueOf(),\n                to: new Date('2024-02-01T11:00:00').valueOf(),\n                classes: 'time-range-lunch',\n                label: 'Lunch',\n                resizable: false,\n            },\n            {\n                id: 3,\n                from: new Date('2024-02-01T11:00:00').valueOf(),\n                to: new Date('2024-02-01T12:00:00').valueOf(),\n                label: 'Custom class',\n                classes: 'gradient',\n            }\n    ]\n}\n```\n\n<TimeRangesExample />\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/data/time-ranges/TimeRangesExample.svelte",
    "content": "<script>\n\timport { time } from '$lib';\n\timport { SvelteGantt } from 'svelte-gantt/svelte';\n</script>\n\n<div class=\"example border my-12\">\n\t<SvelteGantt\n\t\tfrom={time('8:00')}\n\t\tto={time('14:00')}\n\t\tminWidth={400}\n\t\tfitWidth={true}\n\t\trows={[{ id: 1 }, { id: 2 }]}\n\t\ttimeRanges={[\n\t\t\t{\n\t\t\t\tid: 1,\n\t\t\t\tfrom: time('8:00'),\n\t\t\t\tto: time('9:00'),\n\t\t\t\tclasses: null,\n\t\t\t\tlabel: 'Breakfast'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 0,\n\t\t\t\tfrom: time('10:00'),\n\t\t\t\tto: time('11:00'),\n\t\t\t\tclasses: 'time-range-lunch',\n\t\t\t\tlabel: 'Lunch',\n\t\t\t\tresizable: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 2,\n\t\t\t\tfrom: time('12:00'),\n\t\t\t\tto: time('13:00'),\n\t\t\t\tlabel: 'Custom class',\n\t\t\t\tclasses: 'gradient'\n\t\t\t}\n\t\t]}\n\t/>\n</div>\n\n<style lang=\"postcss\">\n\t.example :global(.gradient) {\n\t\t@apply bg-gradient-to-tr from-pink-500 to-violet-500 rounded-md;\n\t\tbackground-size: unset !important;\n\t}\n\t.example :global(.gradient:hover) {\n\t\t@apply bg-gradient-to-tr from-pink-600 to-violet-600 rounded-md shadow-xl;\n\t}\n</style>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/getting-started/installation/+page.svx",
    "content": "# Installation\n\n```\nnpm install svelte-gantt\n```\n\nUse ES6 imports in your code:\n\n```js\nimport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt';\n```\n\nor use the IIFE build:\n\n```html\n<script src=\"node_modules/svelte-gantt/index.iife.js\"></script>\n```\n\n3.  Initialize svelte-gantt:\n\n```js\nvar options = {\n    /* ... */\n};\n\nvar gantt = new SvelteGantt({\n    // target a DOM element\n    target: document.getElementById('example-gantt'),\n    // svelte-gantt options\n    props: options\n});\n```\n\n..or run the example by opening _./public/index.html_\n\n\n# Usage with svelte\n\nTo use svelte components import from `svelte-gantt/svelte`:\n\n```js\n<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt/svelte';\n\n    let options = {\n        //\n    };\n</script>\n<div class=\"container\">\n    <SvelteGantt {...options}></SvelteGantt>\n</div>\n```\n\n# Development build\n\nIf you want to build from sources:\nInstall the dependencies...\n\n```bash\ncd svelte-gantt\nnpm install\ncd demo\nnpm install\n```\n\n...then in the project root (`cd ..`) start [Rollup](https://rollupjs.org):\n\n```bash\nnpm run demo:dev\n```\n\nNavigate to [localhost:5173](http://localhost:5173/). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes.\n\n## Build the package\n\nTo build the package yourself:\n\n1.  Clone or download repository.\n2.  Run the package build:\n\n```\nnpm install\nnpm run package\n```\n\n3.  The package is built in _./dist_"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/getting-started/migrating/+page.svx",
    "content": "# Migrating from version 3.x to 4\n\n`svelte-gantt` no longer requires `moment`. You can still use it as `MomentSvelteGanttDateAdapter`. All parameters that were previously moment objects became numbers (milliseconds since UNIX epoch).\n\nALL date parameters should be UNIX timestamps (JavaScript `Date` and `moment` objects will still work in most of the cases).\n\nDate parameters can stay moment or JavaScript Date objects because they will be transformed to UNIX timestamps.\n\nCSS is now injected so no need to include `svelteGantt.css` in your HTML."
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/layout.svelte",
    "content": "<script context=\"module\">\n\timport a from '$lib/components/A.svelte';\n  \texport { a };\n</script>\n\n<slot></slot>"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/create-tasks/+page.svx",
    "content": "<script>\n    import CreateTasksExample from './CreateTasksExample.svelte';\n</script>\n\n\n# Create tasks\n\nUsing the following options, tasks can be created by dragging on the chart:\n\n- `enableCreateTask` (`boolean`) - Set to `true` to enable task creation.\n- `onCreateTask` (`Function`) - Triggers at the moment when a new task has started being dragged. It should return the new tasks model.\n- `onCreatedTask` (`Function`) - Triggers after task has been successfully created.\n\n\n\n<CreateTasksExample />\n\n---\n\n```js\nimport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt';\n\n// ...\nlet id = 0;\n\ngantt.$set({\n    enableCreateTask: true,\n    onCreateTask: (data) => {\n        id++;\n        return {\n            id: id,\n            label: `New task ${id}`,\n            ...data\n        };\n    },\n    onCreatedTask: (task) => {\n        console.log('task created', task);\n    }\n});\n```\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/create-tasks/CreateTasksExample.svelte",
    "content": "<script>\n\timport { time } from '$lib';\n\timport moment from 'moment';\n\timport { MomentSvelteGanttDateAdapter, SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n\n\tlet id = 0;\n\tconst opts = {\n\t\tenableCreateTask: true,\n\t\tonCreateTask: (e) => {\n\t\t\tid++;\n\t\t\treturn {\n\t\t\t\tid: id,\n\t\t\t\tlabel: `New task ${id}`,\n\t\t\t\t...e\n\t\t\t};\n\t\t},\n\t\tonCreatedTask: (task) => {\n\t\t\tconsole.log('task created', task);\n\t\t}\n\t};\n</script>\n\n<div class=\"border\">\n\t<div class=\"text-center border-b\">\n\t\tClick and drag on the timeline to create a task.\n\t</div>\n\n\t<SvelteGantt\n\t\tfrom={time('06:00')}\n\t\tto={time('14:00')}\n\t\tfitWidth={true}\n\t\tminWidth={400}\n\t\tdateAdapter={new MomentSvelteGanttDateAdapter(moment)}\n\t\trows={[\n\t\t\t{ id: 11, label: 'Petunia Mulliner' },\n\t\t\t{ id: 12, label: 'Mélina Giacovetti' },\n\t\t\t{ id: 13, label: 'Marlène Lasslett' },\n\t\t\t{ id: 14, label: 'Adda Youell' }\n\t\t]}\n\t\tganttTableModules={[SvelteGanttTable]}\n\t\tenableCreateTask={opts.enableCreateTask}\n\t\tonCreateTask={opts.onCreateTask}\n\t\tonCreatedTask={opts.onCreatedTask}\n\t/>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/dependencies/+page.svx",
    "content": "\n\n\n## Dependencies\n\nRenders a dependency between two tasks. Used by `SvelteGanttDependencies` module:\n\n```js    \nimport { SvelteGanttDependencies } from 'svelte-gantt';\n\ngantt.$set({\n        dependencies: [\n            {\n                id: 1,\n                fromId: 1,\n                toId: 2\n            }\n        ],\n        ganttBodyModules: [SvelteGanttDependencies]\n});\n```\n\nGantt props:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`dependencies` | `object[]` | List of dependencies.\n\n\nEach dependency contains these fields:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`id` | `number &#124; string` | Unique id of dependency. **(required)**\n`fromId` | `number &#124; string` | Id of dependent task. **(required)**\n`toId` | `number &#124; string` | Id of dependency task. **(required)**\n`stroke` | `string` | Stroke color, eg. `'red'` or `'#ff0000'`\n`strokeWidth` | `number` | Width of stroke.\n`arrowSize` | `number` | Size of the arrow head.\n\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/external/+page.svx",
    "content": "<script>\n    import ExternalExample from './ExternalExample.svelte';\n</script>\n\n# External draggable\n\nEnables external DOM elements to be draggable to svelte-gantt. Useful for creating new tasks:\n\n```js\nnew SvelteGanttExternal(\n    // external DOM element\n    document.getElementById('newTaskButton'),\n    // options\n    {\n        // reference to instance of svelte-gantt\n        gantt,\n        // if enabled\n        enabled: true,\n        // success callback\n        // row: row element was dropped on\n        // date: date element was dropped on\n        // gantt: instance of svelte-gantt\n        onsuccess: (row, date, gantt) => {\n            // here you can add a task to row, see './public/main.js'\n        },\n        // called when dragged outside main gantt area\n        onfail: () => {},\n        // factory function, creates HTMLElement that will follow the mouse\n        elementContent: () => {\n            const element = document.createElement('div');\n            element.innerHTML = 'New Task';\n            Object.assign(element.style, {\n                position: 'absolute',\n                background: '#eee',\n                padding: '0.5em 1em',\n                fontSize: '12px',\n                pointerEvents: 'none'\n            });\n            return element;\n        }\n    }\n);\n```\n\n---\n\n<ExternalExample />\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/external/ExternalExample.svelte",
    "content": "<script>\n\timport { SvelteGantt, SvelteGanttTable, SvelteGanttExternal } from 'svelte-gantt/svelte';\n\timport { defaultOptions, time } from '$lib';\n\timport { onMount } from 'svelte';\n\n\tlet element;\n\tlet gantt;\n\tlet tasks = [];\n\n\tonMount(() => {\n\t\tnew SvelteGanttExternal(element, {\n\t\t\tgantt,\n\t\t\tonsuccess: (row, date, gantt) => {\n\t\t\t\tconsole.log('success');\n\t\t\t\ttasks = [...tasks, {\n\t\t\t\t\tid: tasks.length,\n\t\t\t\t\tresourceId: row.model.id,\n\t\t\t\t\tlabel: 'New task',\n\t\t\t\t\tfrom: date,\n\t\t\t\t\tto: date + 60 * 60 * 1000,\n\t\t\t\t}];\n\t\t\t},\n\t\t\tonfail: () => {\n\n\t\t\t},\n\t\t})\n\t});\n\n\t// TODO:: make external accept any gantt implicitly\n</script>\n\n<div class=\"border\">\n\t<div class=\"flex p-2 border-b\">\n\t\t<div class=\"px-2 border bg-slate-100 select-none\" bind:this={element}>\n\t\t\tDrag to gantt\n\t\t</div>\n\t</div>\n\n\t<SvelteGantt\n\t\tbind:this={gantt}\n\t\tfrom={time('8:00')}\n\t\tto={time('14:00')}\n\t\ttasks={tasks}\n\t\trows={[\n\t\t\t{ id: 1, label: 'Resource #1' },\n\t\t\t{ id: 2, label: 'Resource #2' },\n\t\t\t{ id: 3, label: 'Resource #3' },\n\t\t\t{ id: 4, label: 'Resource #4' }\n\t\t]}\n\t\tganttTableModules={[SvelteGanttTable]}\n\t/>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/table/+page.svx",
    "content": "---\ntitle: Table\nheaders: \n---\n\n<script>\n    import TableExample from './TableExample.svelte';\n</script>\n\n\n# Table\n\nDisplay row information in a table on the side. \n\n## Table Header\n\nRepresents a single column rendered in SvelteGanttTable.\n\n-   `title` (`string`) Label to display in the table column header.\n-   `property` (`string`) Property of row to display in table column cells.\n-   `width` (`number`) Width of table column, in px.\n\n<TableExample />\n\n---\n\n```js\nimport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt';\n\n// ...\n\ngantt.$set({\n    tableHeaders: [\n        { title: 'Name', property: 'label', width: 150 },\n        { title: 'Age', property: 'age', width: 50 },\n    ],\n    ganttTableModules: [SvelteGanttTable],\n});\n```\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/modules/table/TableExample.svelte",
    "content": "<script>\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n\timport { defaultOptions, time } from '$lib';\n</script>\n\n<div class=\"border\">\n\t<SvelteGantt\n\t\tfrom={time('8:00')}\n\t\tto={time('14:00')}\n\t\ttableHeaders={[\n\t\t\t{ title: 'Name', property: 'label', width: 150 },\n\t\t\t{ title: 'Age', property: 'age', width: 50 }\n\t\t]}\n\t\trows={[\n\t\t\t{ id: 1, label: 'Resource #1', age: 50 },\n\t\t\t{ id: 2, label: 'Resource #2', age: 43 },\n\t\t\t{ id: 3, label: 'Resource #3', age: 23 },\n\t\t\t{ id: 4, label: 'Resource #4', age: 65 }\n\t\t]}\n\t\tganttTableModules={[SvelteGanttTable]}\n\t/>\n</div>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/columns/+page.svx",
    "content": "\n# Columns\n\neg. `columnUnit: 'minute', columnOffset: 15` will create a column for every 15 minutes.\n\n## Highlighted durations\n\nHighlight a repeating block of time spanning all rows:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`unit` | `string` | Time unit of duration, e.g. `'day'`. |\n`fractions` | `number[]` | List of fractions that should be highlighted, e.g. `{unit: 'day', fractions: [0,6]}` will highlight weekends.\n\nHighlighting will only work correctly if `useCanvasColumns` is set to `false`, and if highlighted unit is the same or a constant fraction of the column unit eg. `day`, `hour`, `minute`."
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/gantt/+page.svx",
    "content": "# Gantt\n\nPass options object as `props` to the SvelteGantt constructor. \n\n```js\nconst gantt = new SvelteGantt({ \n    target: document.getElementById('example-gantt'), \n    props: { \n        // ...\n    }\n});\n```\n\n\nTo update use `$set`, eg.\n\n```js\ngantt.$set({\n    // ...\n});\n```\n\n| Name | Description | Type | Default |\n| - | - | - | -: |\n| `rows` | `Array` | Rows to load in the gantt, see below. | undefined |\n| `tasks` | `Array` | Tasks that display in the gantt, see below. | undefined |\n| `timeRanges` | `Array` | Timeranges that display in the gantt, see below. | undefined |\n| `dependencies` | `Array` | Dependencies that display in the gantt, used with the SvelteGanttDependencies module, see below. | undefined |\n| `from` | `Moment` | Datetime timeline starts on. | undefined |\n| `to` | `Moment` | Datetime timeline ends on. | undefined |\n| `minWidth` | `number` | Minimum width of gantt area in px. | undefined |\n| `fitWidth` | `boolean` | Should timeline stretch width to fit. | undefined |\n| `highlightedDurations` | `Object` | Pattern for [highlighting durations](/docs/options/columns#highlighted-durations). | undefined |\n| `highlightColor` | `string` | Highlight color (for use with `highlightedDurations`). | undefined |\n| `magnetUnit` | `string` | Minimum unit of time task date values will round to. | 'minute' |\n| `magnetOffset` | `number` | Amount of units task date values will round to. | 15 |\n| `columnUnit` | `string` | Duration unit of [columns](/docs/options/columns). | 'minute' |\n| `columnOffset` | `number` | Duration width of [columns](/docs/options/columns). | 15 |\n| `headers` | `Array` | List of headers used for main gantt area. | undefined |\n| `dateAdapter` | `Object` | [Date adapter](#dateadapter) | undefined |\n| `zoomLevels` | `Array` | List of zoom levels for gantt. Gantt cycles trough these parameters on ctrl+scroll. | undefined |\n| `rowHeight` | `number` | Height of a single row in px. | undefined |\n| `rowPadding` | `number` | Padding of a single row in px. | undefined |\n| `ganttTableModules` | `Array` | Modules used in gantt table area. eg. `[SvelteGanttTable]` | undefined |\n| `ganttBodyModules` | `Array` | Modules used in gantt body area. eg. `[SvelteGanttDependencies]` | undefined |\n| `reflectOnParentRows` | `boolean` | When task is assigned to a child row display them on parent rows as well, used when rows are disabled as a tree. | undefined |\n| `reflectOnChildRows` | `boolean` | When task is assigned to a parent row display them on child rows as well, used when rows are disabled as a tree. | undefined |\n| `classes` | `string`\\|`Array` | Custom CSS classes to apply to gantt. | undefined |\n| `resizeHandleWidth` | `number` | Width of handle for resizing tasks, in px. | undefined |\n| `onTaskButtonClick` | `(task: Task) => void` | Callback for task button clicks. | undefined |\n| `taskContent` | `(task: Task) => string` | Task content factory function. | undefined |\n| `taskElementHook` | `Function` | [Task element hook](/docs/data/tasks#taskelementhook) | undefined |\n| `tableWidth` | `number` | Width of table, used with SvelteGanttTable module. | undefined |\n| `tableHeaders` | `Array` | Headers of table, used with SvelteGanttTable module. | undefined |\n| `columnStrokeColor` | `string` | Color of column lines. eg. `'#efefef'` | undefined |\n| `columnStrokeWidth` | `number` | Width of column lines. | undefined |\n| `layout` | `'overlap'`, `'pack'`, `'expand'` | The [layout](#layout) used to arrange tasks in a row. | undefined |\n| `enableCreateTask` | `boolean` | Enables creating new tasks by dragging. | undefined |\n| `onCreateTask` | `({ from: number; to: number; resourceId: string number; }) => TaskModel` | This function provides the new task model when dragging to create task. | undefined |\n| `onCreatedTask` | `(task: SvelteTask) => void` | Called after task was created by dragging. | undefined |\n\n\n### TaskContent\n\neg.\n\n```js\n(task) => `<div>Task ${task.model.label}</div>`\n```\n\n### Layout\n\nLayout can be one of the following:\n\n\n- `'overlap'` Overlapping tasks display one over another (default).\n- `'pack'` Overlapping tasks shrink and display one above another.\n- `'expand'` Overlapping tasks display one above another and make the row expand.\n\n\n### DateAdapter\n\nA date adapter is an object of interface `{ format(date: number, format: string): string; }` that formats a date in UNIX miliseconds to a string using the specified format template, eg. 'MMMM Do'.\n\n\n## Methods\n\n|Name||Type|Description|\n| - | - | - | -: |\n|`selectTask(id)` ||| Selects task by id.\n||`id` | `number`\\|`string` | Id of task\n|`unselectTasks()` ||| Unselects tasks.\n|`scrollToTask(id, scrollBehavior)` |||  Scrolls the view to a task.\n||`id` | `number`\\|`string` | Id of task\n||`scrollBehaviour` | `string` | `auto` or `smooth`.\n|`scrollToRow(id, scrollBehavior)`|||  Scrolls the view to a row.\n||`id` | `number`\\|`string` | Id of row\n||`scrollBehaviour` | `string` | `auto` or `smooth`.\n|`updateTask(model)`|||  Updates or inserts task.\n||`model` | `Task` | Task object\n|`updateTasks(models)`|||  Updates or inserts tasks.\n||`models` | `Array<Task>` | Task objects\n|`updateRow(model)`|||  Updates or inserts row.\n||`model` | `Row` | Row object\n|`updateRows(models)`|||  Updates or inserts rows.\n||`models` | `Array<Row>` | Row objects\n|`getTask(id)`|||  Get task by id.\n||`id` | `number`|`string` | Id of task\n|`getRow(id)`|||  Get row by id.\n||`id` | `number`|`string` | Id of row\n|`getTasks(rowId)`|||  Get tasks by row id.\n||`rowId` | `number`|`string` | Id of row\n\n\n## Events\n\nSynchronously run callbacks on specific events. Subscribe to these after gantt is created.\n\n```js\ngantt.api.tasks.on.select(task => console.log('Listener: task selected', task));\n```\n\n### `gantt.api.tasks`\n\n|Name|Data|Description|\n| - | - | - |\n|`move` | [`task`] | Runs while task is moving.\n|`switchRow` | [`task`, `row`, `previousRow`] | Runs when user switches row of task.\n|`select` | [`task`] | Runs when user selects task.\n| `moveEnd` | [`task`]  | Runs when user stops moving task.\n| `change` | [`task`]  | Runs after dropping a task, before it is updated.\n|`changed` | [`task`]  | Runs after dropping a task, after it is updated.\n\n## Available modules\n\n-   `SvelteGanttTable` Renders a table on the left side of gantt. Needed for row labels.\n-   `SvelteGanttDependencies` Renders dependencies between tasks.\n-   `SvelteGanttExternal` Enables external DOM elements to be draggable to svelte-gantt. Useful for creating new tasks:\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/headers/+page.svx",
    "content": "---\ntitle: Headers\n---\n\n# Header\n\nRepresents a row of header cells that render over the gantt.\n\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`unit` | `string` | Time unit used to display header cells, eg. `'day'` will create a cell in the header for each day in the timeline.\n`format` | `string` | Datetime format used to label header cells, eg. `'DD.MM.YYYY'`, `'HH'`\n`offset` | `number` | Duration width of header cell.\n`sticky` | `boolean` | Use sticky positioning for header labels.\n\n### Formatting\n\nBy default `svelte-gantt` is only able to format a small set of date templates, eg. `'HH:mm'`. For more you can use `MomentSvelteGanttDateAdapter` as `dateAdapter`:\n\n```js\nimport { MomentSvelteGanttDateAdapter } from 'svelte-gantt';\nimport moment from 'Moment';\n\nconst options = {\n    dateAdapter: new MomentSvelteGanttDateAdapter(moment)\n    // ...\n}\n```\n\n...or a custom one, as long as it implements the interface `{ format(date: number, format: string): string; }`.\n\n\n```js\nimport dayjs from 'dayjs';\n\nconst options = {\n    dateAdapter: {\n        format(date, format) {\n            return dayjs(date).format(format);\n        }\n    },\n    // ...\n}\n```"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/layout/+page.svx",
    "content": "<script>\n    import LayoutExample from './LayoutExample.svelte';\n</script>\n\n# Layout\n\nMultiple ways of displaying overlapped tasks are available as the `layout` option:\n\n- `'overlap'` - Tasks cover each other.\n- `'pack'` - Tasks shrink to fit in the row.\n- `'expand'` - Row expands to fit tasks.\n\n<LayoutExample />"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/layout/LayoutExample.svelte",
    "content": "<script>\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n\timport { defaultOptions, time } from '$lib';\n\n\tlet layout = 'overlap';\n\tconst values = ['overlap', 'pack', 'expand'];\n</script>\n\n<div class=\"border\">\n\t<div class=\"flex gap-2 justify-center border-b p-2\">\n\t\t<span><code>layout</code>:</span>\n\t\t{#each values as value}\n\t\t\t<span>\n\t\t\t\t<input id={value} type=\"radio\" bind:group={layout} {value} />\n\t\t\t\t<label for={value}><code>'{value}'</code> </label>\n\t\t\t</span>\n\t\t{/each}\n\t</div>\n\n\t<div class=\"example\">\n\t\t<SvelteGantt\n\t\t\tfrom={time('8:00')}\n\t\t\tto={time('14:00')}\n\t\t\t{layout}\n\t\t\trows={[\n\t\t\t\t{ id: 1, label: 'Resource #1' },\n\t\t\t\t{ id: 2, label: 'Resource #2' },\n\t\t\t\t{ id: 3, label: 'Resource #3' },\n\t\t\t\t{ id: 4, label: 'Resource #4' }\n\t\t\t]}\n\t\t\ttasks={[\n\t\t\t\t{ id: 1, resourceId: 1, from: time('8:00'), to: time('10:00'), label: 'Default', classes: 'blue' },\n\t\t\t\t{ id: 2, resourceId: 1, from: time('9:00'), to: time('11:00'), label: 'Default', classes: 'orange' },\n\t\t\t\t{ id: 3, resourceId: 1, from: time('9:30'), to: time('12:00'), label: 'Default', classes: 'violet' },\n\t\t\t\t{ id: 4, resourceId: 2, from: time('9:00'), to: time('11:00'), label: 'Default', classes: 'blue' },\n\t\t\t\t{ id: 5, resourceId: 2, from: time('9:30'), to: time('11:00'), label: 'Default', classes: 'orange' },\n\t\t\t\t{ id: 6, resourceId: 2, from: time('11:00'), to: time('13:00'), label: 'Default', classes: 'violet' },\n\t\t\t\t{ id: 7, resourceId: 3, from: time('9:00'), to: time('11:00'), label: 'Default', classes: 'blue' }\n\t\t\t]}\n\t\t\tganttTableModules={[SvelteGanttTable]}\n\t\t/>\n\t</div>\n</div>\n\n<style lang=\"postcss\">\n\t.example :global(.blue) {\n\t\t@apply bg-blue-400;\n\t}\n\t.example :global(.orange) {\n\t\t@apply bg-orange-400;\n\t}\n\t.example :global(.violet) {\n\t\t@apply bg-violet-400;\n\t}\n</style>\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/zoom/+page.svx",
    "content": "<script>\n    import ZoomExample, { zoomLevels } from './ZoomExample.svelte';\n</script>\n\n# Zoom level\n\nTo zoom the chart, a list of zoom levels (`zoomLevels`) can be provided. When using `wheel` + `ctrl` the options cycle. \nEach of the levels can have the following fields:\n\n| Name | Type | Description | Default |\n| - | - | - | -: |\n`headers` | `Header[]` | See above.\n`minWidth` | `number` | See above.\n`fitWidth` | `boolean` | See above.\n`columnUnit` | `string` | See above.\n`columnOffset` | `number` | See above.\n\nYou can have as many zoom levels as you need.\n\n<ZoomExample />\n\n---\n\n\n```js\ngantt.$set({\n    zoomLevels: [\n\t\t{\n\t\t\theaders: [{ unit: 'month', format: 'MMM YYYY' }],\n\t\t\tminWidth: 800,\n\t\t\tcolumnUnit: 'day',\n\t\t\tcolumnOffset: 1\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'month', format: 'MMM YYYY' },\n\t\t\t\t{ unit: 'week', format: '[week] w' },\n\t\t\t\t{ unit: 'day', format: 'D' }\n\t\t\t],\n\t\t\tminWidth: 3200,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 4\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 8000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 16000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 32000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t}\n\t]\n})\n```\n\n"
  },
  {
    "path": "packages/docs-mdsvex/src/routes/docs/options/zoom/ZoomExample.svelte",
    "content": "<script context=\"module\">\n\texport const zoomLevels = [\n\t\t{\n\t\t\theaders: [{ unit: 'month', format: 'MMM YYYY' }],\n\t\t\tminWidth: 800,\n\t\t\tcolumnUnit: 'day',\n\t\t\tcolumnOffset: 1\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'month', format: 'MMM YYYY' },\n\t\t\t\t{ unit: 'week', format: '[week] w' },\n\t\t\t\t{ unit: 'day', format: 'D' }\n\t\t\t],\n\t\t\tminWidth: 3200,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 4\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 8000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 16000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t},\n\t\t{\n\t\t\theaders: [\n\t\t\t\t{ unit: 'day', format: 'MMM D, YYYY' },\n\t\t\t\t{ unit: 'hour', format: 'HH' }\n\t\t\t],\n\t\t\tminWidth: 32000,\n\t\t\tcolumnUnit: 'hour',\n\t\t\tcolumnOffset: 2\n\t\t}\n\t];\n</script>\n\n<script>\n\timport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt/svelte';\n\timport { defaultOptions, time } from '$lib';\n\timport moment from 'moment';\n\n\tconst values = ['hour', 'day', 'week', 'month'];\n\n\tlet headers = [{ unit: 'month', format: 'MMM YYYY' }];\n\tlet minWidth = 800;\n\tlet fitWidth = true;\n\tlet columnUnit = 'day';\n\tlet columnOffset = 1;\n\tlet from = moment().startOf('month');\n\tlet to = moment().endOf('month');\n\n\t// TODO:: zoom focus is not right? always moves to right\n    // TODO:: allow click on header focus to be customized\n\n\tfunction applyZoom(level) {\n        headers = level.headers;\n        minWidth = level.minWidth;\n        columnUnit = level.columnUnit;\n        columnOffset = level.columnOffset;\n    }\n</script>\n\n<div class=\"border\">\n\t<div class=\"flex gap-2 justify-center border-b p-2\">\n\t\t<span>Set zoom:</span>\n\t\t{#each values as value, i}\n\t\t\t<span>\n\t\t\t\t<button class=\"border hover:bg-slate-100 px-1 py-1 text-sm active:bg-slate-200\" on:click={() => applyZoom(zoomLevels[i])}>{value}</button>\n\t\t\t</span>\n\t\t{/each}\n\t</div>\n\n\t<div class=\"example\">\n\t\t<SvelteGantt\n\t\t\t{from}\n\t\t\t{to}\n\t\t\trows={[\n\t\t\t\t{ id: 1, label: 'Resource #1' },\n\t\t\t\t{ id: 2, label: 'Resource #2' },\n\t\t\t\t{ id: 3, label: 'Resource #3' },\n\t\t\t\t{ id: 4, label: 'Resource #4' }\n\t\t\t]}\n\t\t\t{headers}\n\t\t\t{minWidth}\n\t\t\t{fitWidth}\n\t\t\t{columnUnit}\n\t\t\t{columnOffset}\n\t\t\tdateAdapter={defaultOptions.dateAdapter}\n\t\t\t{zoomLevels}\n\t\t\ttasks={[\n\t\t\t\t{ id: 1, resourceId: 1, from: time('8:00'), to: time('16:00'), label: 'Default', classes: 'blue' },\n\t\t\t\t{ id: 4, resourceId: 2, from: time('9:00'), to: time('17:00'), label: 'Default', classes: 'orange' },\n\t\t\t\t{ id: 7, resourceId: 3, from: time('10:00'), to: time('18:00'), label: 'Default', classes: 'blue' }\n\t\t\t]}\n\t\t/>\n\t</div>\n</div>\n\n<style lang=\"postcss\">\n\t.example :global(.blue) {\n\t\t@apply bg-blue-400;\n\t}\n\t.example :global(.orange) {\n\t\t@apply bg-orange-400;\n\t}\n\t.example :global(.violet) {\n\t\t@apply bg-violet-400;\n\t}\n</style>\n"
  },
  {
    "path": "packages/docs-mdsvex/static/.nojekyll",
    "content": ""
  },
  {
    "path": "packages/docs-mdsvex/svelte.config.js",
    "content": "// import adapter from '@sveltejs/adapter-auto';\nimport adapter from '@sveltejs/adapter-static';\nimport { mdsvex } from 'mdsvex';\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte';\nimport rehypeAutolinkHeadings from 'rehype-autolink-headings';\nimport rehypeSlug from 'rehype-slug';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\textensions: ['.svelte', '.svx', '.md'],\n\tpreprocess: [\n\t\tmdsvex({\n\t\t\tlayout: path.join(__dirname, './src/routes/docs/layout.svelte'),\n\t\t\tremarkPlugins: [],\n\t\t\trehypePlugins: [\n\t\t\t\trehypeSlug,\n\t\t\t\t[\n\t\t\t\t\trehypeAutolinkHeadings,\n\t\t\t\t\t{\n\t\t\t\t\t\tbehavior: 'append',\n\t\t\t\t\t\tproperties: { class: 'header-anchor', ariaHidden: true },\n\t\t\t\t\t\theadingProperties: { tabIndex: -1 },\n\t\t\t\t\t\tcontent: { type: 'text', value: '#' }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t]\n\t\t}),\n\t\tvitePreprocess()\n\t],\n\t// kit: {\n\t// \t// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.\n\t// \t// If your environment is not supported, or you settled on a specific environment, switch out the adapter.\n\t// \t// See https://kit.svelte.dev/docs/adapters for more information about adapters.\n\t// \tadapter: adapter()\n\t// }    \n\tkit: {\n        adapter: adapter({\n            // default options are shown. On some platforms\n            // these options are set automatically — see below\n            pages: process.env.NODE_ENV === 'production' ? '../../docs' : 'build',\n            fallback: '404.html',\n            precompress: false,\n            strict: true\n        }),\n        paths: {\n            relative: true,\n            base: process.env.NODE_ENV === 'production' ? '/svelte-gantt' : '',\n        },\n    }\n};\n\nexport default config;\n"
  },
  {
    "path": "packages/docs-mdsvex/tailwind.config.js",
    "content": "import typography from '@tailwindcss/typography';\nimport colors from 'tailwindcss/colors';\n\n/** @type {import('tailwindcss').Config} */\nexport default {\n\tcontent: ['./src/**/*.{html,js,svelte,ts,svx,md}'],\n\tdarkMode: 'class',\n\tcorePlugins: {\n\t\tpreflight: false\n\t},\n\ttheme: {\n\t\tfontFamily: {\n\t\t\t// sans: ['var(--sg-font-family-sans)'],\n\t\t\tmono: ['monospace'],\n\t\t},\n\t\textend: {\n\t\t\tspacing: {\n\t\t\t\t'8xl': '90rem',\n\t\t\t},\n\t\t\tcolors: {\n\t\t\t\tbrand: {\n\t\t\t\t\tDEFAULT: colors.blue[700],\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\tDEFAULT: 'rgb(var(--sg-color-focus) / <alpha-value>)'\n\t\t\t\t},\n\t\t\t\tgray: {},\n\t\t\t\tborder: 'rgb(var(--sg-color-border) / <alpha-value>)',\n\t\t\t\tsoft: 'rgb(var(--sg-color-soft) / <alpha-value>)',\n\t\t\t\tinverse: 'rgb(var(--sg-color-inverse) / <alpha-value>)',\n\t\t\t\tbody: 'rgb(var(--sg-color-body) / <alpha-value>)',\n\t\t\t},\n\t\t\ttypography: kitDocsTypography,\n\t\t\tbackgroundImage: () => ({\n\t\t\t\t'gradient-0': 'linear-gradient(0deg, var(--tw-gradient-stops))'\n\t\t\t\t// You can add more custom classes here\n\t\t\t})\n\t\t}\n\t},\n\tplugins: [typography, kitDocsVariants]\n};\n\nfunction kitDocsVariants({ addVariant }) {\n\taddVariant(\n\t\t'supports-backdrop-blur',\n\t\t'@supports (backdrop-filter: blur(0)) or (-webkit-backdrop-filter: blur(0))'\n\t);\n}\n\nfunction kitDocsTypography(theme) {\n\treturn {\n\t\tDEFAULT: {\n\t\t\tcss: {\n\t\t\t\t'--tw-prose-counters': 'rgb(var(--sg-color-inverse))',\n\t\t\t\t'--tw-prose-invert-counters': 'rgb(var(--sg-color-inverse))',\n\t\t\t\tcolor: 'rgb(var(--sg-color-soft))',\n\t\t\t\tmaxWidth: 'none',\n\t\t\t\thr: {\n\t\t\t\t\tborderColor: 'rgb(var(--sg-color-border))',\n\t\t\t\t\tmarginTop: '3em',\n\t\t\t\t\tmarginBottom: '3em'\n\t\t\t\t},\n\t\t\t\t'h1, h2, h3': {\n\t\t\t\t\tletterSpacing: '-0.025em'\n\t\t\t\t},\n\t\t\t\th2: {\n\t\t\t\t\tmarginTop: `1.75em`,\n\t\t\t\t\tmarginBottom: `${16 / 24}em`\n\t\t\t\t},\n\t\t\t\th3: {\n\t\t\t\t\tmarginTop: '2.4em',\n\t\t\t\t\tlineHeight: '1.4'\n\t\t\t\t},\n\t\t\t\th4: {\n\t\t\t\t\tmarginTop: '1.75em',\n\t\t\t\t\tfontSize: '1.125em'\n\t\t\t\t},\n\t\t\t\t'h2 small, h3 small, h4 small': {\n\t\t\t\t\tfontFamily: theme('fontFamily.mono').join(', '),\n\t\t\t\t\tfontWeight: 500\n\t\t\t\t},\n\t\t\t\t'h2 small': {\n\t\t\t\t\tfontSize: theme('fontSize.lg')[0],\n\t\t\t\t\t...theme('fontSize.lg')[1]\n\t\t\t\t},\n\t\t\t\t'h3 small': {\n\t\t\t\t\tfontSize: theme('fontSize.base')[0],\n\t\t\t\t\t...theme('fontSize.base')[1]\n\t\t\t\t},\n\t\t\t\t'h4 small': {\n\t\t\t\t\tfontSize: theme('fontSize.sm')[0],\n\t\t\t\t\t...theme('fontSize.sm')[1]\n\t\t\t\t},\n\t\t\t\tul: {\n\t\t\t\t\tpaddingLeft: '1.25rem'\n\t\t\t\t},\n\t\t\t\t'ul > li': {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tpaddingLeft: '0.25rem'\n\t\t\t\t},\n\t\t\t\t'ul > li::marker': {\n\t\t\t\t\tcolor: 'rgb(var(--sg-color-inverse))'\n\t\t\t\t},\n\t\t\t\t'ul > li::before': {\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\twidth: '0.75em',\n\t\t\t\t\theight: '0.125em',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 'calc(0.875em - 0.0625em)',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tborderRadius: '999px'\n\t\t\t\t},\n\t\t\t\t'li > p': {\n\t\t\t\t\tmargin: 0\n\t\t\t\t},\n\t\t\t\ta: {\n\t\t\t\t\tfontWeight: theme('fontWeight.normal'),\n\t\t\t\t\ttextDecoration: 'none',\n\t\t\t\t\tcolor: theme('colors.blue.700'),\n\t\t\t\t\tborderBottom: `1px solid ${colors.blue[600]}`\n\t\t\t\t},\n\t\t\t\t'a:hover': {\n\t\t\t\t\tborderBottomWidth: '2px'\n\t\t\t\t},\n\t\t\t\t'a code': {\n\t\t\t\t\tcolor: 'inherit',\n\t\t\t\t\tfontWeight: 'inherit'\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\tfontWeight: theme('fontWeight.semibold')\n\t\t\t\t},\n\t\t\t\t'a strong': {\n\t\t\t\t\tcolor: 'inherit',\n\t\t\t\t\tfontWeight: 'inherit'\n\t\t\t\t},\n\t\t\t\tcode: {\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tfontVariantLigatures: 'none',\n\t\t\t\t\tbackgroundColor: colors.slate[100],\n\t\t\t\t\tcolor: colors.slate[700],\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\tpadding: '3px 6px',\n\t\t\t\t},\n\t\t\t\t'code::before': {\n\t\t\t\t\tcontent: '',\n\t\t\t\t},\n\t\t\t\t'code::after': {\n\t\t\t\t\tcontent: '',\n\t\t\t\t},\n\t\t\t\tpre: {\n\t\t\t\t\tbackgroundColor: 'var(--sg-code-fence-bg)',\n\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\tdisplay: 'flex'\n\t\t\t\t},\n\t\t\t\t'p + pre': {\n\t\t\t\t\tmarginTop: `${-4 / 14}em`\n\t\t\t\t},\n\t\t\t\t'pre code': {\n\t\t\t\t\tflex: 'none',\n\t\t\t\t\tminWidth: '100%'\n\t\t\t\t},\n\t\t\t\ttable: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tborderCollapse: 'collapse'\n\t\t\t\t},\n\t\t\t\tthead: {\n\t\t\t\t\tcolor: 'rgb(var(--sg-color-inverse))',\n\t\t\t\t\tborderBottomColor: 'rgb(var(--sg-color-border))'\n\t\t\t\t},\n\t\t\t\ttbody: {\n\t\t\t\t\tverticalAlign: 'baseline'\n\t\t\t\t},\n\t\t\t\t'thead th': {\n\t\t\t\t\tpaddingTop: 0,\n\t\t\t\t\tfontWeight: theme('fontWeight.semibold')\n\t\t\t\t},\n\t\t\t\t'tbody tr': {\n\t\t\t\t\tfontSize: theme('fontSize.sm')[0],\n\t\t\t\t\tborderBottomColor: 'rgb(var(--sg-color-border))'\n\t\t\t\t},\n\t\t\t\t'tbody td': {\n\t\t\t\t\twhiteSpace: 'normal'\n\t\t\t\t},\n\t\t\t\t'tbody tr:last-child': {\n\t\t\t\t\tborderBottomWidth: '1px'\n\t\t\t\t},\n\t\t\t\t'tbody code': {\n\t\t\t\t\tfontSize: theme('fontSize.sm')[0]\n\t\t\t\t},\n\t\t\t\t'thead th:first-child': {\n\t\t\t\t\tpaddingLeft: '0.5714286em'\n\t\t\t\t},\n\t\t\t\t'thead th:last-child': {\n\t\t\t\t\tpaddingRight: '0.5714286em'\n\t\t\t\t},\n\t\t\t\t'tbody td:first-child': {\n\t\t\t\t\tpaddingLeft: '0.5714286em'\n\t\t\t\t},\n\t\t\t\t'tbody td:last-child': {\n\t\t\t\t\tpaddingRight: '0.5714286em'\n\t\t\t\t},\n\t\t\t\t'tbody tr td:first-child code': {\n\t\t\t\t\tcolor: theme('colors.blue.600'),\n\t\t\t\t\tpaddingLeft: '8px',\n\t\t\t\t\t'&::before': { display: 'none' },\n\t\t\t\t\t'&::after': { display: 'none' }\n\t\t\t\t},\n\t\t\t\t'figure figcaption': {\n\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\tfontStyle: 'italic'\n\t\t\t\t},\n\t\t\t\t'figure > figcaption': {\n\t\t\t\t\tmarginTop: `${12 / 14}em`\n\t\t\t\t},\n\t\t\t\tblockQuote: {\n\t\t\t\t\tcolor: 'rgb(var(--sg-color-inverse))',\n\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\tborderColor: 'currentColor'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinvert: {\n\t\t\tcss: {\n\t\t\t\tcolor: 'rgb(var(--sg-color-soft))',\n\t\t\t\t'tbody tr td:first-child code': {\n\t\t\t\t\tcolor: theme('colors.indigo.300')\n\t\t\t\t},\n\t\t\t\t'tbody tr': {\n\t\t\t\t\tborderBottomColor: 'rgb(var(--sg-color-border))'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/vite-plugin-watch-workspace.ts",
    "content": "import type { Plugin } from 'vite';\nimport debug from 'debug';\nimport fg from 'fast-glob';\nimport fs from 'fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport YAML from 'yaml';\n\ntype TsConfigPath = string;\n\ntype FilePath = string;\n\ntype ExternalFile<Key extends PropertyKey, Value> = [Key, Value];\n\ntype ExternalFiles = Record<FilePath, TsConfigPath>;\n\ntype VitePluginWatchExternalOptions = {\n\t// path\n\tworkspaceRoot: string;\n\t// path or glob\n\tcurrentPackage: string;\n\tformat: 'esm' | 'cjs';\n\t// file types to build\n\tfileTypes?: string[];\n\t// glob patterns to ignore\n\tignorePaths?: string[];\n};\n\nconst log = debug(`vite-plugin-watch-workspace`);\n\nconst FILE_TYPES = ['ts', 'tsx'];\n\nconst RELATIVE_PATH_REGEX = /(\\.+\\/)*/;\n\nconst getTsConfigFollowExtends = (filename: string, rootDir?: string): { [key: string]: any } => {\n\tlet extendedConfig: { [key: string]: any } = {};\n\tconst config = ts.readConfigFile(filename, ts.sys.readFile).config;\n\tif (config.extends) {\n\t\tconst importPath = path.resolve(rootDir || '', config.extends);\n\t\tconst newRootDir = path.dirname(importPath);\n\t\textendedConfig = getTsConfigFollowExtends(importPath, newRootDir);\n\t}\n\treturn {\n\t\t...extendedConfig,\n\t\t...config,\n\t\tcompilerOptions: {\n\t\t\t...extendedConfig.compilerOptions,\n\t\t\t...config.compilerOptions\n\t\t}\n\t};\n};\n\nconst getFilesAndTsConfigs = async (\n\tworkspacePath: string,\n\tcurrentPackage: string,\n\tpackageDir: string,\n\tfileTypes: string[],\n\tignorePaths?: string[]\n): Promise<ExternalFile<FilePath, TsConfigPath>[]> => {\n\tconst packagePath = path.resolve(workspacePath, packageDir);\n\tconst tsConfigPath = path.resolve(packagePath, 'tsconfig.json');\n\t// check whether the user has passed a glob\n\tconst currentPackageGlob = currentPackage.includes('*')\n\t\t? currentPackage\n\t\t: `${currentPackage}/**/*`;\n\tconst tsconfig = getTsConfigFollowExtends(tsConfigPath);\n\tconst rootDir = tsconfig.compilerOptions.rootDir;\n\tconst files = await fg(path.resolve(packagePath, `${rootDir}/**/*.(${fileTypes.join('|')})`), {\n\t\tignore: ['**/node_modules/**', currentPackageGlob, ...(ignorePaths || [])]\n\t});\n\t// keep the tsconfig path beside each file to avoid looking for file ids in arrays later\n\treturn files.map((file: string) => [file, tsConfigPath]);\n};\n\nconst getExternalFileLists = async (\n\tworkspaceRoot: string,\n\tcurrentPackage: string,\n\tfileTypes: string[],\n\tignorePaths?: string[]\n): Promise<ExternalFiles> => {\n\t// const workspacePackageJson = path.resolve(workspaceRoot, 'package.json')\n\tconst workspacePnpmYaml = path.resolve(workspaceRoot, 'pnpm-workspace.yaml');\n\t// const workspaces = JSON.parse(fs.readFileSync(workspacePackageJson, 'utf8')).workspaces;\n\tconst workspaces = YAML.parse(fs.readFileSync(workspacePnpmYaml, 'utf8')).packages;\n\tlog(workspaces);\n\tconst externalFiles: ExternalFiles = {};\n\tconst filesConfigs: ExternalFile<FilePath, TsConfigPath>[] = (\n\t\tawait Promise.all(\n\t\t\tworkspaces.map(async (workspace: string) => {\n\t\t\t\t// get directories in each workspace\n\t\t\t\tconst workspacePath = path.resolve(workspaceRoot, workspace.replace('*', ''));\n\t\t\t\tlog(workspacePath);\n\t\t\t\t// get directories in workSpacePath\n\t\t\t\tconst packages = fs\n\t\t\t\t\t.readdirSync(workspacePath)\n\t\t\t\t\t.filter((dir) => fs.lstatSync(path.join(workspacePath, dir)).isDirectory());\n\t\t\t\tlog(packages);\n\t\t\t\t// get files and tsconfigs in each package\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\tpackages.map(\n\t\t\t\t\t\tasync (packageDir: string) =>\n\t\t\t\t\t\t\tawait getFilesAndTsConfigs(\n\t\t\t\t\t\t\t\tworkspacePath,\n\t\t\t\t\t\t\t\tcurrentPackage,\n\t\t\t\t\t\t\t\tpackageDir,\n\t\t\t\t\t\t\t\tfileTypes,\n\t\t\t\t\t\t\t\tignorePaths\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t})\n\t\t)\n\t).flatMap((filesConfigs) => filesConfigs.flat());\n\tfilesConfigs.map(([file, tsconfig]) => (externalFiles[file] = tsconfig));\n\treturn externalFiles;\n};\n\nconst getLoader = (fileExtension: string) => {\n\tswitch (fileExtension) {\n\t\tcase '.ts':\n\t\t\treturn 'ts';\n\t\tcase '.tsx':\n\t\t\treturn 'tsx';\n\t\tcase '.js':\n\t\t\treturn 'js';\n\t\tcase '.jsx':\n\t\t\treturn 'jsx';\n\t\tcase '.css':\n\t\t\treturn 'css';\n\t\tcase '.json':\n\t\t\treturn 'json';\n\t\tdefault:\n\t\t\treturn 'ts';\n\t}\n};\n\nconst getOutExtension = (fileExtension: string) => {\n\tswitch (fileExtension) {\n\t\tcase '.css':\n\t\t\treturn '.css';\n\t\tcase '.json':\n\t\t\treturn '.json';\n\t\tcase '.ts':\n\t\tcase '.tsx':\n\t\tcase '.js':\n\t\tcase '.jsx':\n\t\tdefault:\n\t\t\treturn '.js';\n\t}\n};\n\nconst getOutDir = (file: string, tsconfig: { [key: string]: any }) => {\n\tconst rootFolder = tsconfig.compilerOptions.rootDir.replace(RELATIVE_PATH_REGEX, '');\n\tconst outFolder = tsconfig.compilerOptions.outDir\n\t\t? tsconfig.compilerOptions.outDir.replace(RELATIVE_PATH_REGEX, '')\n\t\t: '';\n\treturn path.dirname(file).replace(rootFolder, outFolder);\n};\n\nconst getOutFile = (outdir: string, file: string, fileExtension: string) => {\n\tconst outExtension = getOutExtension(fileExtension);\n\treturn path.resolve(outdir, path.basename(file).replace(fileExtension, outExtension));\n};\n\n/**\n * Plugin to watch a workspace for changes and rebuild when detected using esbuild\n * @param config\n * The config contains the following parameters\n *  - workspaceRoot: path to the root of the workspace\n *  - currentPackage: path to the current package or glob. Will be transformed to a glob if a path is passed.\n *  - format: esm | cjs\n *  - fileTypes: ts | tsx | js | jsx | ... (optional)\n *  - ignorePaths: paths or globs to ignore (optional)\n * @constructor\n */\nexport async function VitePluginWatchWorkspace(\n\tconfig: VitePluginWatchExternalOptions\n): Promise<Plugin<any>> {\n\tconst externalFiles = await getExternalFileLists(\n\t\tconfig.workspaceRoot,\n\t\tconfig.currentPackage,\n\t\tconfig.fileTypes || FILE_TYPES,\n\t\tconfig.ignorePaths\n\t);\n\treturn {\n\t\tname: 'vite-plugin-watch-workspace',\n\t\tasync buildStart() {\n\t\t\tObject.keys(externalFiles).map((file) => {\n\t\t\t\tthis.addWatchFile(file);\n\t\t\t});\n\t\t},\n\t\tasync handleHotUpdate({ file, server, modules, timestamp }) {\n\t\t\tlog(`File', ${file}`);\n\n\t\t\tconst tsconfigPath = externalFiles[file];\n\t\t\tif (!tsconfigPath) {\n\t\t\t\tlog(`tsconfigPath not found for file ${file}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst tsconfig = getTsConfigFollowExtends(tsconfigPath);\n\t\t\tconst fileExtension = path.extname(file);\n\t\t\tconst loader = getLoader(fileExtension);\n\t\t\tconst outdir = getOutDir(file, tsconfig);\n\t\t\tconst outfile = getOutFile(outdir, file, fileExtension);\n\t\t\tlog(`Outfile ${outfile}, loader ${loader}`);\n\n\t\t\tserver.hot.send({\n\t\t\t\ttype: 'update',\n\t\t\t\tupdates: modules.map((mod) => ({\n\t\t\t\t\ttype: mod.url.includes('.css') ? 'css-update' : 'js-update',\n\t\t\t\t\tpath: mod.url, // file==id, url (real)\n\t\t\t\t\tacceptedPath: mod.url,\n\t\t\t\t\ttimestamp\n\t\t\t\t}))\n\t\t\t});\n\t\t\treturn [];\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/docs-mdsvex/vite.config.js",
    "content": "import { sveltekit } from '@sveltejs/kit/vite';\nimport { defineConfig } from 'vite';\nimport { VitePluginWatchWorkspace } from './vite-plugin-watch-workspace';\nimport * as path from 'path';\nexport default defineConfig({\n\tplugins: [\n\t\tVitePluginWatchWorkspace({\n\t\t\tworkspaceRoot: path.join(__dirname, '../..'),\n\t\t\tcurrentPackage: __dirname,\n\t\t\tformat: 'esm',\n\t\t\tfileTypes: ['svelte', 'ts', 'js'],\n\t\t\tignorePaths: ['node_modules', 'dist']\n\t\t}),\n\t\tsveltekit()\n\t]\n\t// resolve: { preserveSymlinks: true },\n\t// optimizeDeps: {\n\t// \tinclude: ['svelte-gantt'],\n\t// },\n\t// build: {\n\t// \tcommonjsOptions: {\n\t// \t\tinclude: [/svelte-gantt/, /node_modules/],\n\t// \t},\n\t// },\n\t// commonjsOptions: { include: [] }\n});\n"
  },
  {
    "path": "packages/svelte-gantt/.eslintignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Repo files\n/demo\n/examples\n/dist\n/docs\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": "packages/svelte-gantt/.eslintrc.cjs",
    "content": "module.exports = {\n    root: true,\n    extends: [\n        'eslint:recommended',\n        'plugin:@typescript-eslint/recommended',\n        'plugin:svelte/recommended',\n        'prettier'\n    ],\n    rules: {\n        indent: ['warn', 4, { SwitchCase: 1 }],\n        quotes: ['warn', 'single'],\n        'prefer-rest-params': 'off',\n        'svelte/valid-compile': 'off',\n        'svelte/no-at-html-tags': 'off',\n        '@typescript-eslint/no-unused-vars': [\n            'error',\n            {\n                argsIgnorePattern: '_',\n                varsIgnorePattern: '_',\n                caughtErrorsIgnorePattern: '_'\n            }\n        ]\n    },\n    parser: '@typescript-eslint/parser',\n    plugins: ['@typescript-eslint'],\n    parserOptions: {\n        sourceType: 'module',\n        ecmaVersion: 2020,\n        extraFileExtensions: ['.svelte']\n    },\n    env: {\n        browser: true,\n        es2017: true,\n        node: true\n    },\n    overrides: [\n        {\n            files: ['*.svelte'],\n            parser: 'svelte-eslint-parser',\n            parserOptions: {\n                parser: '@typescript-eslint/parser'\n            }\n        },\n        {\n            files: ['src/**/*'],\n            rules: {\n                'no-console': ['error', { allow: ['warn', 'error'] }]\n            }\n        }\n    ]\n};\n"
  },
  {
    "path": "packages/svelte-gantt/.gitignore",
    "content": ".vscode\n!.vscodesettings.json\n!.vscodetasks.json\n!.vscodelaunch.json\n!.vscodeextensions.json\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# next.js build output\n.next\n\n# nuxt.js build output\n.nuxt\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless\n\n#secrets\nto do.txt\n\n#.rpt2_cache\n.rpt2_cache/\n\n# npm published files\ndist/\n!docs/dist\n\n# svelte\n/.svelte-kit"
  },
  {
    "path": "packages/svelte-gantt/.prettierignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Repo files\n/demo\n/examples\n/dist\n/docs\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": "packages/svelte-gantt/.prettierrc",
    "content": "{\n    \"useTabs\": false,\n    \"tabWidth\": 4,\n    \"arrowParens\": \"avoid\",\n    \"singleQuote\": true,\n    \"trailingComma\": \"none\",\n    \"printWidth\": 180,\n    \"plugins\": [\"prettier-plugin-svelte\"],\n    \"overrides\": [{ \"files\": \"*.svelte\", \"options\": { \"parser\": \"svelte\" } }]\n}\n"
  },
  {
    "path": "packages/svelte-gantt/LICENSE.txt",
    "content": "                               The MIT License\n\nCopyright (c) 2015-2016 Konstantin Tarkus, Kriasoft LLC. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "packages/svelte-gantt/README.md",
    "content": "# svelte-gantt\n\nA **lightweight** and **fast** interactive gantt chart/resource booking component made with [Svelte](https://svelte.technology/). Compatible with any JS library or framework. ZERO dependencies.\n\n![GitHub package.json version](https://img.shields.io/github/package-json/v/ANovokmet/svelte-gantt)\n\n![svelte-gantt](https://i.imgur.com/IqT5PL4.png)\n\nFeatures include: Large datasets, drag'n'drop, tree view, zooming in/out, dependencies, date ranges...\n\nDEMO: [Large dataset](https://anovokmet.github.io/svelte-gantt/),\n[Tree](https://anovokmet.github.io/svelte-gantt/#/tree),\n[Dependencies](https://anovokmet.github.io/svelte-gantt/#/dependencies)\n\n# Installation\n\n```\nnpm install svelte-gantt\n```\n\nUse ES6 imports in your code:\n\n```js\nimport { SvelteGantt, SvelteGanttTable } from 'svelte-gantt';\n```\n\nor use the IIFE build:\n\n```html\n<script src=\"node_modules/svelte-gantt/index.iife.js\"></script>\n```\n\n3.  Initialize svelte-gantt:\n\n```js\nvar options = {\n    /* ... */\n};\n\nvar gantt = new SvelteGantt({\n    // target a DOM element\n    target: document.getElementById('example-gantt'),\n    // svelte-gantt options\n    props: options\n});\n```\n\n..or run the example by opening _./public/index.html_\n\n# Migrating from version 3.x.x-4.x.x\n\n`svelte-gantt` no longer requires `moment`. You can still use it as `MomentSvelteGanttDateAdapter`. All parameters that were previously moment objects became numbers (milliseconds since UNIX epoch).\n\nALL date parameters should be UNIX timestamps (JavaScript `Date` and `moment` objects will still work in most of the cases).\n\nDate parameters can stay moment or JavaScript Date objects because they will be transformed to UNIX timestamps.\n\nCSS is now injected so no need to include `svelteGantt.css` in your HTML.\n\n# Documentation\n\nPass options object as `props` to the SvelteGantt constructor. To update use `$set`, eg.\n\n```js\ngantt.$set({\n    from: moment().startOf('week').valueOf(),\n    to: moment().endOf('week').valueOf()\n});\n```\n\n-   `rows` {`Array`} Rows to load in the gantt, see below.\n-   `tasks` {`Array`} Tasks that display in the gantt, see below.\n-   `timeRanges` {`Array`} Timeranges that display in the gantt, see below.\n-   `dependencies` {`Array`} Dependencies that display in the gantt, used with the SvelteGanttDependencies module, see below.\n-   `from` {`Moment`} Datetime timeline starts on.\n-   `to` {`Moment`} Datetime timeline ends on.\n-   `minWidth` {`Number`} Minimum width of gantt area in px.\n-   `fitWidth` {`Boolean`} Should timeline stretch width to fit.\n-   `highlightedDurations` {`Object`} Pattern for highlighting durations, see below.\n-   `highlightColor` {`String`} Highlight color (for use with `highlightedDurations`).\n-   `magnetUnit` {`String`} Minimum unit of time task date values will round to.\n-   `magnetOffset` {`Number`} Amount of units task date values will round to.\n-   `columnUnit` {`String`} Duration unit of columns.\n-   `columnOffset` {`Number`} Duration width of column.\n    -   eg. `columnUnit: 'minute', columnOffset: 15` will create a column for every 15 minutes.\n-   `headers` {`Array`} List of headers used for main gantt area.\n-   `dateAdapter` {`Object`} A date adapter is an object of interface `{ format(date: number, format: string): string; }` that formats a date in UNIX miliseconds to a string using the specified format template, eg. 'MMMM Do'.\n\n-   `zoomLevels` {`Array`} List of zoom levels for gantt. Gantt cycles trough these parameters on ctrl+scroll.\n-   `rowHeight` {`Number`} Height of a single row in px.\n-   `rowPadding` {`Number`} Padding of a single row in px.\n-   `ganttTableModules` {`Array`} Modules used in gantt table area.\n    -   eg. `[SvelteGanttTable]`\n-   `ganttBodyModules` {`Array`} Modules used in gantt body area.\n    -   eg. `[SvelteGanttDependencies]`\n-   `reflectOnParentRows` {`Boolean`} When task is assigned to a child row display them on parent rows as well, used when rows are disabled as a tree.\n-   `reflectOnChildRows` {`Boolean`} When task is assigned to a parent row display them on child rows as well, used when rows are disabled as a tree.\n-   `classes` {`String`|`Array`} Custom CSS classes to apply to gantt.\n-   `resizeHandleWidth` {`Number`} Width of handle for resizing tasks, in px.\n-   `onTaskButtonClick` {`Function`} Callback for task button clicks.\n    -   eg. `(task) => console.log('clicked on: ', task)`\n-   `taskContent` {`Function`} ,task content factory function.\n    -   eg. `` (task) => `<div>Task ${task.model.label}</div>` ``\n-   `taskElementHook` {`Function`} ,task element hook function, it is a svelte action.\n    -   eg. `(node, task) => { node.addEventListener('click', console.log); return { destroy() { node.removeEventListener('click', console.log); } }; }`\n-   `tableWidth` {`Number`} Width of table, used with SvelteGanttTable module.\n-   `tableHeaders` {`Array`} Headers of table, used with SvelteGanttTable module.\n-   `columnStrokeColor` {`string`} Color of column lines.\n    -   eg. `'#efefef'`\n-   `columnStrokeWidth` {`number`} Width of column lines.\n-   `layout` {`'overlap'`, `'pack'`} The layout used to arrange tasks in a row.\n    - `'overlap'` Overlapping tasks display one over another (default).\n    - `'pack'` Overlapping tasks shrink and display one above another.\n-   `enableCreateTask` {`Boolean`} Enables creating new tasks by dragging.\n-   `onCreateTask` {`({ from: number; to: number; resourceId: string | number; }) => TaskModel`} This function provides the new task model when dragging to create task.\n-   `onCreatedTask` {`(task: SvelteTask) => void`} Called after task was created by dragging.\n\n## Header\n\nRepresents a row of header cells that render over the gantt.\n\n-   `unit` {`String`} Time unit used to display header cells.\n    -   eg. `'day'` will create a cell in the header for each day in the timeline.\n-   `format` {`String`} Datetime format used to label header cells.\n    -   eg. `'DD.MM.YYYY'`, `'HH'`\n-   `offset` {`Number`} Duration width of header cell.\n-   `sticky` {`Boolean`} Use sticky positioning for header labels.\n\n### Formatting\n\nBy default `svelte-gantt` is only able to format a small set of date templates, eg. 'HH:mm'. For more you can use `MomentSvelteGanttDateAdapter` as `dateAdapter` or a custom one,\nas long as it implements the interface `{ format(date: number, format: string): string; }`.\n\n```js\nimport { MomentSvelteGanttDateAdapter } from 'svelte-gantt';\nimport moment from 'Moment';\n\nconst ganttOptions = {\n    dateAdapter = new MomentSvelteGanttDateAdapter(moment)\n    ...\n}\n```\n\n## Table Header\n\nRepresents a single column rendered in SvelteGanttTable.\n\n-   `title` {`String`} Label to display in the table column header.\n-   `property` {`String`} Property of row to display in table column cells.\n-   `width` {`Number`} Width of table column, in px.\n\n## Zoom level\n\nRepresents a zoom level which cycle on ctrl+scroll.\n\n-   `headers` {`Array`} See above.\n-   `minWidth` {`Number`} See above.\n-   `fitWidth` {`Boolean`} See above.\n\n## Row\n\nRows are defined as a list of objects. Rows can be rendered as a collapsible tree (rows are collapsed with SvelteGanttTable module). Row objects may have these parameters:\n\n-   `id` {`Number`|`String`} Id of row, every row needs to have a unique one.\n-   `classes` {`String`|`Array`} Custom CSS classes to apply to row.\n-   `contentHtml` {`String`} Html content of row, renders as background to a row.\n-   `enableDragging` {`Boolean`} enable dragging of tasks to and from this row.\n-   `enableResize` {`Boolean`} enable resize of tasks on this row.\n-   `label` {`String`} Label of row, could be any other property, can be displayed with SvelteGanttTable.\n-   `headerHtml` {`String`} Html content of table row header, displayed in SvelteGanttTable.\n-   `children` {`Array`} List of children row objects, these can have their own children.\n-   `expanded` {`Boolean`} {`optional`} Used when tree view is enabled, controls the expanded state.\n\n## Task\n\nTasks are defined as a list of objects:\n\n-   `id` {`Number`|`String`} Id of task, every task needs to have a unique one.\n-   `amountDone` {`Number`} Task completion in percent, indicated on task.\n-   `classes` {`String`|`Array`} Custom CSS classes to apply to task.\n-   `from` {`number`} Datetime task starts on.\n-   `to` {`number`} Datetime task ends on.\n-   `label` {`String`} Label of task.\n-   `html` {`String`} Html content of task, will override label.\n-   `showButton` {`Boolean`} Show button bar.\n-   `buttonClasses` {`String`|`Array`} Button classes, useful for fontawesome icons.\n-   `buttonHtml` {`String`} Html content of button.\n-   `enableDragging` {`Boolean`} enable dragging of task.\n-   `enableResize` {`Boolean`} enable resize of task.\n\n## Dependencies\n\nRenders a dependency between two tasks. Used by SvelteGanttDependencies module:\n\n-   `id` {`Number`|`String`} Unique id of dependency.\n-   `fromId` {`Number`|`String`} Id of dependent task.\n-   `toId` {`Number`|`String`} Id of dependency task.\n-   `stroke` {`String`} Stroke color.\n    -   eg. `'red'` or `'#ff0000'`\n-   `strokeWidth` {`Number`} Width of stroke.\n-   `arrowSize` {`Number`} Size of the arrow head.\n\n## Time ranges\n\nRenders a block of time spanning all the rows:\n\n-   `id` {`Number`|`String`} Unique id of time range.\n-   `from` {`number`} Datetime timeRange starts on.\n-   `to` {`number`} Datetime timeRange ends on.\n-   `classes` {`String`|`Array`} Custom CSS classes.\n-   `label` {`String`} Display label.\n-   `resizable` {`Boolean`} Should the time range be resizable.\n\n## Highlighted durations\n\nHighlight a repeating block of time spanning all rows:\n\n-   `unit` {`String`} Time unit of duration, e.g. `'day'`.\n-   `fractions` {`Array`} List of fractions that should be highlighted, e.g. `{unit: 'day', fractions: [0,6]}` will highlight weekends.\n\nHighlighting will only work correctly if `useCanvasColumns` is set to `false`, and if highlighted unit is the same or a constant fraction of the column unit eg. `day`, `hour`, `minute`.\n\n## Methods\n\n-   `selectTask(id)` Selects task by id.\n    -   `id` {`Number`|`String`} Id of task\n-   `unselectTasks()` Unselects tasks.\n-   `scrollToTask(id, scrollBehavior)` Scrolls the view to a task.\n    -   `id` {`Number`|`String`} Id of task\n    -   `scrollBehaviour` {`String`} `auto` or `smooth`.\n-   `scrollToRow(id, scrollBehavior)` Scrolls the view to a row.\n\n    -   `id` {`Number`|`String`} Id of row\n    -   `scrollBehaviour` {`String`} `auto` or `smooth`.\n\n-   `updateTask(model)` Updates or inserts task.\n    -   `model` {`Task`} Task object\n-   `updateTasks(models)` Updates or inserts tasks.\n    -   `models` {`Array<Task>`} Task objects\n-   `updateRow(model)` Updates or inserts row.\n    -   `model` {`Row`} Row object\n-   `updateRows(models)` Updates or inserts rows.\n\n    -   `models` {`Array<Row>`} Row objects\n\n-   `getTask(id)` Get task by id.\n    -   `id` {`Number`|`String`} Id of task\n-   `getRow(id)` Get row by id.\n    -   `id` {`Number`|`String`} Id of row\n-   `getTasks(rowId)` Get tasks by row id.\n    -   `rowId` {`Number`|`String`} Id of row\n\n## Events\n\nSynchronously run callbacks on specific events. Subscribe to these after gantt is created.\n\n```js\ngantt.api.tasks.on.select(task => console.log('Listener: task selected', task));\n```\n\n### `gantt.api.tasks`\n\n-   `move` (`task`) Runs while task is moving.\n-   `switchRow` (`task`, `row`, `previousRow`) Runs when user switches row of task.\n-   `select` (`task`) Runs when user selects task.\n-   `moveEnd` (`task`) Runs when user stops moving task.\n-   `change` (`task`) Runs after dropping a task, before it is updated.\n-   `changed` (`task`) Runs after dropping a task, after it is updated.\n\n## Available modules\n\n-   `SvelteGanttTable` Renders a table on the left side of gantt. Needed for row labels.\n-   `SvelteGanttDependencies` Renders dependencies between tasks.\n-   `SvelteGanttExternal` Enables external DOM elements to be draggable to svelte-gantt. Useful for creating new tasks:\n\n```js\nnew SvelteGanttExternal(\n    // external DOM element\n    document.getElementById('newTaskButton'),\n    // options\n    {\n        // reference to instance of svelte-gantt\n        gantt,\n        // if enabled\n        enabled: true,\n        // success callback\n        // row: row element was dropped on\n        // date: date element was dropped on\n        // gantt: instance of svelte-gantt\n        onsuccess: (row, date, gantt) => {\n            // here you can add a task to row, see './public/main.js'\n        },\n        // called when dragged outside main gantt area\n        onfail: () => {},\n        // factory function, creates HTMLElement that will follow the mouse\n        elementContent: () => {\n            const element = document.createElement('div');\n            element.innerHTML = 'New Task';\n            Object.assign(element.style, {\n                position: 'absolute',\n                background: '#eee',\n                padding: '0.5em 1em',\n                fontSize: '12px',\n                pointerEvents: 'none'\n            });\n            return element;\n        }\n    }\n);\n```\n\n# Usage with svelte\n\nTo use svelte components import from `svelte-gantt/svelte`:\n\n```js\n<script>\n    import { SvelteGantt, SvelteGanttTable, MomentSvelteGanttDateAdapter } from 'svelte-gantt/svelte';\n\n    let options = {\n        //\n    };\n</script>\n<div class=\"container\">\n    <SvelteGantt {...options}></SvelteGantt>\n</div>\n```\n\n# Development build\n\nIf you want to build from sources:\nInstall the dependencies...\n\n```bash\ncd svelte-gantt\nnpm install\ncd demo\nnpm install\n```\n\n...then in the project root (`cd ..`) start [Rollup](https://rollupjs.org):\n\n```bash\nnpm run demo:dev\n```\n\nNavigate to [localhost:5173](http://localhost:5173/). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes.\n\n## Build the package\n\nTo build the package yourself:\n\n1.  Clone or download repository.\n2.  Run the package build:\n\n```\nnpm install\nnpm run package\n```\n\n3.  The package is built in _./dist_\n\n# TBD\n\n-   Context-menus (click on row, task or dependency)\n"
  },
  {
    "path": "packages/svelte-gantt/package.json",
    "content": "{\n    \"name\": \"svelte-gantt\",\n    \"description\": \"Interactive JavaScript Gantt chart/resource booking component\",\n    \"version\": \"4.5.0\",\n    \"author\": \"Ante Novokmet <ante.je.zakon@gmail.com>\",\n    \"type\": \"module\",\n    \"scripts\": {\n        \"build\": \"rollup -c\",\n        \"autobuild\": \"rollup -c -w\",\n        \"demo:dev\": \"cd demo && npm run dev\",\n        \"dev\": \"run-p autobuild demo:dev\",\n        \"validate\": \"svelte-check\",\n        \"demokit:dev\": \"npm --prefix demo-sveltekit run dev\",\n        \"package\": \"node tools/build && npm run build-package\",\n        \"build-package\": \"svelte-package -i src -o dist/svelte\",\n        \"lint\": \"eslint .\",\n        \"format\": \"prettier --plugin-search-dir . --write . --plugin prettier-plugin-svelte\"\n    },\n    \"module\": \"./src/index.ts\",\n    \"exports\": {\n        \".\": {\n            \"import\": \"./src/index.ts\",\n            \"default\": \"./src/index.ts\",\n            \"svelte\": \"./src/index.ts\"\n        },\n        \"./svelte\": {\n            \"import\": \"./src/index.ts\",\n            \"default\": \"./src/index.ts\",\n            \"svelte\": \"./src/index.ts\"\n        }\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/ANovokmet/svelte-gantt.git\"\n    },\n    \"bugs\": {\n        \"url\": \"https://github.com/ANovokmet/svelte-gantt/issues\"\n    },\n    \"keywords\": [\n        \"svelte\",\n        \"gantt\",\n        \"booking\",\n        \"svelte-gantt\",\n        \"js-gantt\",\n        \"javascript-gantt\",\n        \"react-gantt\",\n        \"angular-gantt\",\n        \"vue-gantt\",\n        \"drag-n-drop\"\n    ],\n    \"peerDependencies\": {\n        \"moment\": \"^2.22.2\"\n    },\n    \"devDependencies\": {\n        \"@rollup/plugin-commonjs\": \"^17.0.0\",\n        \"@rollup/plugin-node-resolve\": \"^15.2.1\",\n        \"@rollup/plugin-typescript\": \"^11.1.4\",\n        \"@sveltejs/package\": \"^2.2.2\",\n        \"@tsconfig/svelte\": \"^1.0.0\",\n        \"@typescript-eslint/eslint-plugin\": \"^6.7.4\",\n        \"@typescript-eslint/parser\": \"^6.7.4\",\n        \"del\": \"^5.1.0\",\n        \"eslint\": \"^8.50.0\",\n        \"eslint-config-prettier\": \"^9.0.0\",\n        \"eslint-plugin-svelte\": \"^2.34.0\",\n        \"npm-run-all\": \"^4.1.3\",\n        \"postcss\": \"^8.3.11\",\n        \"prettier\": \"^3.0.3\",\n        \"prettier-plugin-svelte\": \"^3.0.3\",\n        \"rollup\": \"^2.36.1\",\n        \"rollup-plugin-buble\": \"^0.19.2\",\n        \"rollup-plugin-postcss\": \"^4.0.1\",\n        \"rollup-plugin-svelte\": \"^7.1.5\",\n        \"rollup-plugin-uglify\": \"^3.0.0\",\n        \"svelte\": \"^4.2.19\",\n        \"svelte-check\": \"^3.4.3\",\n        \"svelte-preprocess\": \"^5.0.3\",\n        \"tslib\": \"^2.0.0\",\n        \"typescript\": \"^5.0.0\"\n    },\n    \"dependencies\": {\n        \"sirv-cli\": \"^2.0.2\"\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/rollup.config.js",
    "content": "import svelte from 'rollup-plugin-svelte';\nimport resolve from '@rollup/plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\nimport uglify from 'rollup-plugin-uglify';\nimport sveltePreprocess from 'svelte-preprocess';\nimport typescript from '@rollup/plugin-typescript';\nimport postcss from 'rollup-plugin-postcss';\n\nconst production = !process.env.ROLLUP_WATCH;\n\nexport default {\n    input: 'src/index.ts',\n    output: {\n        sourcemap: true,\n        format: 'es',\n        name: 'window',\n        extend: true,\n        dir: 'dist'\n    },\n    plugins: [\n        svelte({\n            // css: css => {\n            //     css.write('docs/dist/svelteGantt.css');\n            // },\n            emitCss: true,\n            preprocess: sveltePreprocess()\n        }),\n        postcss(),\n        resolve({\n            browser: true\n            // exportConditions: ['svelte']\n        }),\n        commonjs(),\n        typescript(),\n        production && uglify()\n    ]\n};\n"
  },
  {
    "path": "packages/svelte-gantt/src/Gantt.svelte",
    "content": "<script lang=\"ts\">\n    import { onMount, setContext, tick, onDestroy } from 'svelte';\n    import { writable, derived } from 'svelte/store';\n\n    let ganttElement: HTMLElement;\n    let mainHeaderContainer: HTMLElement;\n    let mainContainer;\n    let rowContainer: HTMLElement;\n    let scrollables = [];\n    let mounted = false;\n\n    import { createDataStore } from './core/store';\n    import { Task, Row, TimeRange, TimeRangeHeader } from './entities';\n    import { Columns, ColumnHeader } from './column';\n    import { Resizer } from './ui';\n\n    import { createUtils, getIndicesOnly, getPositionByDate } from './utils/utils';\n    import { getRelativePos, isLeftClick } from './utils/dom';\n    import { provideGanttApi } from './core/api';\n    import { createTaskFactory } from './core/task';\n    import type { SvelteTask, TaskModel } from './core/task';\n    import { collapseRow, expandRow, createRows } from './core/row';\n    import type { RowModel, SvelteRow } from './core/row';\n    import { TimeRangeFactory } from './core/timeRange';\n    import { DraggableGroup } from './core/drag';\n    import { SelectionManager } from './core/selectionManager';\n    import { createColumnService } from './core/column';\n    import type { HighlightedDurations, Column as IColumn } from './core/column';\n    import { createDelegatedEventDispatcher } from './core/events';\n    import { getDuration, getAllPeriods } from './utils/date';\n    import { DefaultSvelteGanttDateAdapter } from './utils/defaultDateAdapter';\n    import type { SvelteGanttDateAdapter } from './utils/date';\n    import * as layouts from './core/layouts';\n    import { useCreateTask } from './modules/create-tasks';\n    import type { MoveEvent } from './modules/create-tasks';\n    import type { GanttContext, Header, InvalidatePositionOptions } from './gantt';\n    import Draggable from './core/drag/Draggable.svelte';\n    import type { DragChange, State as DraggingState } from './core/drag/DragContext';\n\n    function assertSet(values) {\n        for (const name in values) {\n            if (values[name] == null) {\n                throw new Error(`\"${name}\" is not set`);\n            }\n        }\n    }\n\n    /**\n     * Rows to load in the gantt\n     */\n    export let rows: RowModel[];\n    /**\n     * Tasks that display in the gantt\n     */\n    export let tasks: TaskModel[] = [];\n    /**\n     * Timeranges that display in the gantt\n     */\n    export let timeRanges = [];\n\n    assertSet({ rows });\n    $: if (mounted) initRows(rows);\n    $: if (mounted) initTasks(tasks);\n    $: if (mounted) initTimeRanges(timeRanges);\n\n    /** top and bottom padding of a single row in px */\n    export let rowPadding = 6;\n    /** height of a single row in px */\n    export let rowHeight = 52;\n    const _rowHeight = writable(rowHeight);\n    const _rowPadding = writable(rowPadding);\n    $: $_rowHeight = rowHeight;\n    $: $_rowPadding = rowPadding;\n\n    function toDateNum(date: number | Date) {\n        return date instanceof Date ? date.valueOf() : date;\n    }\n\n    /** datetime timeline starts on, date */\n    export let from;\n    /** datetime timeline ends on, date */\n    export let to;\n    assertSet({ from, to });\n    const _from = writable(toDateNum(from));\n    const _to = writable(toDateNum(to));\n    $: $_from = toDateNum(from);\n    $: $_to = toDateNum(to);\n\n    /** Minimum width of main gantt area in px */\n    export let minWidth = 800;\n    /** should timeline stretch width to fit */\n    export let fitWidth = false;\n    const _minWidth = writable(minWidth);\n    const _fitWidth = writable(fitWidth);\n    $: {\n        $_minWidth = minWidth;\n        $_fitWidth = fitWidth;\n    }\n\n    /** sets top level gantt class which can be used for styling */\n    export let classes: string | string[] = [];\n    /**\n     * list of headers used for main gantt area\n     *  - unit: time unit used, e.g. day will create a cell in the header for each day in the timeline\n     *  - format: datetime format used for header cell label\n     **/\n    export let headers: Header[] = [\n        { unit: 'day', format: 'MMMM Do' },\n        { unit: 'hour', format: 'H:mm' }\n    ];\n    /**\n     * List of zoom levels for gantt. Gantt cycles trough these parameters on ctrl+scroll.\n     */\n    export let zoomLevels = [\n        {\n            headers: [\n                { unit: 'day', format: 'DD.MM.YYYY' },\n                { unit: 'hour', format: 'HH' }\n            ],\n            minWidth: 800,\n            fitWidth: true\n        },\n        {\n            headers: [\n                { unit: 'hour', format: 'ddd D/M, H A' },\n                { unit: 'minute', format: 'mm', offset: 15 }\n            ],\n            minWidth: 5000,\n            fitWidth: false\n        }\n    ];\n    /** task content factory function, e.g. (task) => '<div>Custom task content</div>'  */\n    export let taskContent = null;\n    /**\n     * Width of table, used with SvelteGanttTable module\n     */\n    export let tableWidth = 240;\n    /** width of handle for resizing task */\n    export let resizeHandleWidth = 10;\n    /** handler of button clicks, e.g. (task) => {debugger}, */\n    export let onTaskButtonClick = null;\n\n    export let dateAdapter: SvelteGanttDateAdapter = new DefaultSvelteGanttDateAdapter();\n\n    /** minimum unit of time task date values will round to */\n    export let magnetUnit = 'minute';\n    /** amount of units task date values will round to */\n    export let magnetOffset = 15;\n    let magnetDuration: number;\n    $: setMagnetDuration(magnetUnit, magnetOffset);\n    setMagnetDuration(magnetUnit, magnetOffset);\n\n    function setMagnetDuration(unit, offset) {\n        if (unit && offset) {\n            magnetDuration = getDuration(unit, offset);\n        }\n    }\n\n    /** duration unit of columns */\n    export let columnUnit = 'minute';\n    /** duration width of column */\n    export let columnOffset = 15;\n\n    // export until Svelte3 implements Svelte2's setup(component) hook\n    export let ganttTableModules = [];\n    export let ganttBodyModules = [];\n    /**\n     * When task is assigned to a child row display them on parent rows as well, used when rows are disabled as a tree.\n     */\n    export let reflectOnParentRows = true;\n    /**\n     * When task is assigned to a parent row display them on child rows as well, used when rows are disabled as a tree.\n     */\n    export let reflectOnChildRows = false;\n\n    /**\n     * Render columns in a canvas, results in a better performance.\n     * Set to false if advanced CSS styling is needed.\n     **/\n    export let useCanvasColumns = true;\n    /** color of strokes seperating the columns in ganttbody */\n    export let columnStrokeColor = '#efefef';\n    /** width of strokes seperating the columns in ganttbody */\n    export let columnStrokeWidth = 1;\n    /** \n     * object including a unit and fractions of that unit that should be highlighted eg. {unit: 'days', fractions: [0,6]} -> will highlight weekends.\n     * highlighting will only work correctly if highlighted unit is the same or a constant fraction of the column unit eg. days, hours, minutes in the above.\n     */\n    export let highlightedDurations: HighlightedDurations = undefined;\n    export let highlightColor = '#6eb859';\n\n    /** Allows working with the actual DOM node */\n    export let taskElementHook = null;\n\n    /** Controls how the tasks will render */\n    export let layout: 'overlap' | 'pack' | 'expand' = 'overlap';\n    const _layout = writable(layout);\n    $: $_layout = layout;\n\n    const visibleWidth = writable<number>(null);\n    const visibleHeight = writable<number>(null);\n    const headerHeight = writable<number>(null);\n    const _width = derived([visibleWidth, _minWidth, _fitWidth], ([visible, min, stretch]) => {\n        return stretch && visible > min ? visible : min;\n    });\n\n    const dataStore = createDataStore();\n    setContext('dataStore', dataStore);\n    const {\n        rowStore,\n        taskStore,\n        timeRangeStore,\n        allTasks,\n        allRows,\n        allTimeRanges,\n        rowTaskCache\n    } = dataStore;\n\n    export const columnService = createColumnService({\n        get columns() { return columns },\n        get magnetDuration() { return magnetDuration },\n    });\n\n    let disableTransition = false;\n\n    async function tickWithoutCSSTransition() {\n        disableTransition = true;\n        await tick();\n        ganttElement.offsetHeight; // force a reflow\n        disableTransition = false;\n    }\n\n    let columns: IColumn[];\n    $: {\n        columns = getColumnsV2($_from, $_to, columnUnit, columnOffset, $_width);\n        tickWithoutCSSTransition();\n        refreshTimeRanges();\n        refreshTasks();\n    }\n\n    function getColumnsV2(\n        from: number | Date,\n        to: number | Date,\n        unit: string,\n        offset: number,\n        width: number\n    ): IColumn[] {\n        //BUG: Function is running twice on init, how to prevent it?\n\n        if (from instanceof Date) from = from.valueOf();\n        if (to instanceof Date) to = to.valueOf();\n\n        let cols = [];\n        const periods = getAllPeriods(\n            from.valueOf(),\n            to.valueOf(),\n            unit,\n            offset,\n            highlightedDurations\n        );\n        let left = 0;\n        let distance_point = 0;\n        periods.forEach(function (period) {\n            left = distance_point;\n            distance_point = getPositionByDate(period.to, $_from, $_to, $_width);\n            cols.push({\n                width: distance_point - left,\n                from: period.from,\n                to: period.to,\n                left: left,\n                duration: period.duration,\n                ...(period.isHighlighted && { bgHighlightColor: highlightColor })\n            });\n        });\n        return cols;\n    }\n\n    let offsetWidth: number;\n    let offsetHeight: number;\n    let bottomScrollbarVisible = writable(offsetHeight - $visibleHeight);\n    let rightScrollbarVisible = writable(offsetWidth - $visibleWidth);\n    $: $bottomScrollbarVisible = offsetHeight - $visibleHeight;\n    $: $rightScrollbarVisible = offsetWidth - $visibleWidth;\n\n    setContext('dimensions', {\n        from: _from,\n        to: _to,\n        width: _width,\n        visibleWidth,\n        visibleHeight,\n        headerHeight,\n        bottomScrollbarVisible,\n        rightScrollbarVisible,\n    });\n\n    setContext('options', {\n        dateAdapter,\n        taskElementHook,\n        taskContent,\n        rowPadding: _rowPadding,\n        rowHeight: _rowHeight,\n        layout: _layout,\n        resizeHandleWidth: resizeHandleWidth,\n        reflectOnParentRows,\n        reflectOnChildRows,\n        onTaskButtonClick\n    });\n\n    const hoveredRow = writable<number | string>(null);\n    const selectedRow = writable<number | string>(null);\n\n    const ganttContext: GanttContext = {\n        rowContainer: null,\n        mainContainer: null,\n        mainHeaderContainer: null,\n        scrollables,\n        hoveredRow,\n        selectedRow,\n        updateLayout,\n        expandRow(row) {\n            expandRow(row);\n            updateLayout();\n        },\n        collapseRow(row) {\n            collapseRow(row);\n            updateLayout();\n        },\n        invalidatePosition,\n    };\n    setContext('gantt', ganttContext);\n\n    let invalidatedTasks: { [taskId: PropertyKey]: boolean; } = {};\n    let invalidatedRows: { [rowId: PropertyKey]: boolean; } = {};\n    let invalidateFull = true;\n    function invalidatePosition({ task, row }: InvalidatePositionOptions) {\n        if (row) {\n            invalidatedRows[row.model.id] = true;\n            invalidateFull = false;\n        }\n        if (task) {\n            invalidatedTasks[task.model.id] = true;\n            invalidatedRows[task.model.resourceId] = true;\n            invalidateFull = false;\n        }\n    }\n\n    onMount(() => {\n        Object.assign(ganttContext, {\n            rowContainer,\n            mainContainer,\n            mainHeaderContainer\n        });\n        mounted = true;\n    });\n\n    const { onDelegatedEvent, offDelegatedEvent, onEvent } = createDelegatedEventDispatcher();\n\n    onDelegatedEvent('click', 'data-task-id', (event, data, target) => {\n        const taskId = data;\n        const task = $taskStore.entities[taskId];\n        if (isLeftClick(event) && !target.classList.contains('sg-task-reflected') && !target.classList.contains('sg-ignore-click')) {\n            if (event.ctrlKey) {\n                selectionManager.toggleSelection(taskId);\n            } else {\n                selectionManager.selectSingle(taskId);\n            }\n        }\n        api['tasks'].raise.select(task);\n    });\n\n    onDelegatedEvent('pointerover', 'data-row-id', (event, data, target) => {\n        $hoveredRow = data;\n    });\n\n    onDelegatedEvent('click', 'data-row-id', (event, data, target) => {\n        selectionManager.unSelectTasks();\n        if ($selectedRow == data) {\n            $selectedRow = null;\n            return;\n        }\n        $selectedRow = data;\n    });\n\n    onDelegatedEvent('dblclick', 'data-task-id', (event, data, target) => {\n        const taskId = data;\n        api['tasks'].raise.dblclicked($taskStore.entities[taskId], event);\n    });\n\n    onDelegatedEvent('pointerleave', 'empty', (event, data, target) => {\n        $hoveredRow = null;\n    });\n\n    onDestroy(() => {\n        offDelegatedEvent('click', 'data-task-id');\n        offDelegatedEvent('click', 'data-row-id');\n        offDelegatedEvent('dblclick', 'data-task-id');\n\n        selectionManager.unSelectTasks();\n    });\n\n    let __scrollTop = 0;\n    let __scrollLeft = 0;\n    function scrollable(node) {\n        const onscroll = event => {\n            const { scrollTop, scrollLeft } = node;\n\n            scrollables.forEach(scrollable => {\n                if (scrollable.orientation === 'horizontal') {\n                    scrollable.node.scrollLeft = scrollLeft;\n                } else {\n                    scrollable.node.scrollTop = scrollTop;\n                }\n            });\n\n            __scrollTop = scrollTop;\n            __scrollLeft = scrollLeft;\n        };\n\n        node.addEventListener('scroll', onscroll);\n        return {\n            destroy() {\n                node.removeEventListener('scroll', onscroll, false);\n            }\n        };\n    }\n\n    function horizontalScrollListener(node) {\n        scrollables.push({ node, orientation: 'horizontal' });\n    }\n\n    function onResize(event) {\n        tableWidth = event.detail.left;\n    }\n\n    let zoomLevel = 0;\n    let zooming = false;\n    async function onwheel(event: WheelEvent) {\n        if (event.ctrlKey) {\n            event.preventDefault();\n\n            const prevZoomLevel = zoomLevel;\n            if (event.deltaY > 0) {\n                zoomLevel = Math.max(zoomLevel - 1, 0);\n            } else {\n                zoomLevel = Math.min(zoomLevel + 1, zoomLevels.length - 1);\n            }\n\n            if (prevZoomLevel != zoomLevel && zoomLevels[zoomLevel]) {\n                const options = {\n                    columnUnit: columnUnit,\n                    columnOffset: columnOffset,\n                    minWidth: $_minWidth,\n                    ...zoomLevels[zoomLevel]\n                };\n\n                const scale = options.minWidth / $_width;\n                const node = mainContainer;\n                const mousepos = getRelativePos(node, event);\n                const before = node.scrollLeft + mousepos.x;\n                const after = before * scale;\n                const scrollLeft = after - mousepos.x + node.clientWidth / 2;\n\n                columnUnit = options.columnUnit;\n                columnOffset = options.columnOffset;\n                $_minWidth = options.minWidth;\n\n                if (options.headers) headers = options.headers;\n\n                if (options.fitWidth) $_fitWidth = options.fitWidth;\n\n                api['gantt'].raise.viewChanged();\n                zooming = true;\n                await tick();\n                node.scrollLeft = scrollLeft;\n                zooming = false;\n            }\n        }\n    }\n\n    function onDateSelected(event) {\n        $_from = event.detail.from;\n        $_to = event.detail.to;\n        api['gantt'].raise.dateSelected({ from: $_from, to: $_to });\n    }\n\n    function initRows(rowsData) {\n        //Bug: Running twice on change options\n        const rows = createRows(rowsData, { rowHeight });\n        rowStore.addAll(rows);\n        updateLayout();\n    }\n\n    const { createTask, reflectTask } = createTaskFactory({\n        get rowEntities() { return $rowStore.entities; },\n        get rowPadding() { return rowPadding },\n        getPositionByDate: (date) => columnService.getPositionByDate(date),\n    });\n\n    async function initTasks(taskData: TaskModel[]) {\n        const tasks = [];\n        for (const taskModel of taskData) {\n            if (!draggingTasks[taskModel.id]) {\n                delete draggingTasks[taskModel.id];\n            }\n            const task = createTask(taskModel);\n            tasks.push(task);\n        }\n        taskStore.addAll(tasks);\n        updateLayout();\n    }\n\n    let _reflectedTasksCache: { [rowId: PropertyKey]: SvelteTask[] } = {};\n    $: {\n        _reflectedTasksCache = {};\n        for (const task of $allTasks) {\n            const row = $rowStore.entities[task.model.resourceId];\n            if (!row) {\n                continue;\n            }\n\n            if (reflectOnChildRows && row.allChildren) {\n                row.allChildren.forEach(r => {\n                    const reflectedTask = reflectTask(task, r);\n                    if (!_reflectedTasksCache[r.model.id]) {\n                        _reflectedTasksCache[r.model.id] = [];\n                    }\n                    _reflectedTasksCache[r.model.id].push(reflectedTask);\n                });\n            }\n\n            if (reflectOnParentRows && row.allParents) {\n                row.allParents.forEach(r => {\n                    const reflectedTask = reflectTask(task, r);\n                    if (!_reflectedTasksCache[r.model.id]) {\n                        _reflectedTasksCache[r.model.id] = [];\n                    }\n                    _reflectedTasksCache[r.model.id].push(reflectedTask);\n                });\n            }\n        }\n    }\n\n    function initTimeRanges(timeRangeData) {\n        const timeRanges = timeRangeData.map(timeRange => {\n            return timeRangeFactory.create(timeRange);\n        });\n        timeRangeStore.addAll(timeRanges);\n    }\n\n    export const api = provideGanttApi();\n    const selectionManager = new SelectionManager(taskStore);\n\n    export const timeRangeFactory = new TimeRangeFactory(columnService);\n\n    export const utils = createUtils({\n        get from() { return $_from },\n        get to() { return $_to },\n        get width() { return $_width },\n        get magnetOffset() { return  magnetOffset;},\n        get magnetUnit() { return magnetUnit;},\n        get magnetDuration() { return  magnetDuration;},\n        get dateAdapter() { return  dateAdapter;},\n    });\n\n    setContext('services', {\n        utils,\n        api,\n        selectionManager,\n        columnService,\n    });\n\n    export function refreshTimeRanges() {\n        timeRangeStore._update(({ ids, entities }) => {\n            ids.forEach(id => {\n                const timeRange = entities[id];\n                const newLeft = columnService.getPositionByDate(timeRange.model.from) | 0;\n                const newRight = columnService.getPositionByDate(timeRange.model.to) | 0;\n\n                timeRange.left = newLeft;\n                timeRange.width = newRight - newLeft;\n            });\n            return { ids, entities };\n        });\n    }\n\n    export function refreshTasks() {\n        $allTasks.forEach(task => {\n            const newLeft = columnService.getPositionByDate(task.model.from) | 0;\n            const newRight = columnService.getPositionByDate(task.model.to) | 0;\n\n            task.left = newLeft;\n            task.width = newRight - newLeft;\n        });\n        taskStore.refresh();\n    }\n\n    export function getRowContainer(): HTMLElement {\n        return rowContainer;\n    }\n\n    export function selectTask(id) {\n        const task = $taskStore.entities[id];\n        if (task) {\n            selectionManager.selectSingle(id);\n        }\n    }\n\n    export function unselectTasks() {\n        selectionManager.unSelectTasks();\n    }\n\n    export function scrollToRow(id, scrollBehavior = 'auto') {\n        const { scrollTop, clientHeight } = mainContainer;\n        const row = $rowStore.entities[id];\n        if (!row) {\n            return;\n        }\n        const targetTop = row.y;\n\n        if (targetTop < scrollTop) {\n            mainContainer.scrollTo({\n                top: targetTop,\n                behavior: scrollBehavior\n            });\n        }\n\n        if (targetTop > scrollTop + clientHeight) {\n            mainContainer.scrollTo({\n                top: targetTop + row.height - clientHeight,\n                behavior: scrollBehavior\n            });\n        }\n    }\n\n    export function scrollToTask(id, scrollBehavior = 'auto') {\n        const { scrollLeft, scrollTop, clientWidth, clientHeight } = mainContainer;\n\n        const task = $taskStore.entities[id];\n        if (!task) return;\n        const row = $rowStore.entities[task.model.resourceId];\n        if (!row) return;\n        const targetLeft = task.left;\n        const targetTop = row.y;\n\n        const options = {\n            top: undefined,\n            left: undefined,\n            behavior: scrollBehavior\n        };\n\n        if (targetLeft < scrollLeft) {\n            options.left = targetLeft;\n        }\n\n        if (targetLeft > scrollLeft + clientWidth) {\n            options.left = targetLeft + task.width - clientWidth;\n        }\n\n        if (targetTop < scrollTop) {\n            options.top = targetTop;\n        }\n\n        if (targetTop > scrollTop + clientHeight) {\n            options.top = targetTop + row.height - clientHeight;\n        }\n\n        mainContainer.scrollTo(options);\n    }\n\n    export function updateTask(model: TaskModel) {\n        const task = createTask(model);\n        taskStore.upsert(task);\n        invalidatePosition({ task });\n        updateLayoutSync();\n    }\n\n    export function updateTasks(models: TaskModel[]) {\n        const tasks = models.map(model => createTask(model));\n        taskStore.upsertAll(tasks);\n        tasks.forEach(task => invalidatePosition({ task }));\n        updateLayoutSync();\n    }\n\n    export function removeTask(taskId: PropertyKey) {\n        const task = $taskStore.entities[taskId];\n        if (!task) {\n            return;\n        }\n        taskStore.delete(taskId);\n\n        const row = $rowStore.entities[task.model.resourceId];\n        if (!row) {\n            return;\n        }\n        invalidatePosition({ row });\n        updateLayoutSync();\n    }\n\n    export function removeTasks(taskIds: PropertyKey[]) {\n        for (const taskId of taskIds) {\n            const task = $taskStore.entities[taskId];\n            if (!task) {\n                continue;\n            }\n\n            const row = $rowStore.entities[task.model.resourceId];\n            if (!row) {\n                continue;\n            }\n            invalidatePosition({ row });\n        }\n\n        taskStore.deleteAll(taskIds);\n        updateLayoutSync();\n    }\n\n    export function updateRow(model: RowModel) {\n        const row = createRows([model], { rowHeight });\n        rowStore.upsertAll(row);\n        updateLayout();\n        updateLayoutSync();\n    }\n\n    export function updateRows(models: RowModel[]) {\n        const rows = createRows(models, { rowHeight });\n        rowStore.upsertAll(rows);\n        updateLayout();\n        updateLayoutSync();\n    }\n\n    export function getRow(resourceId: PropertyKey): SvelteRow {\n        return $rowStore.entities[resourceId];\n    }\n\n    export function getTask(id) {\n        return $taskStore.entities[id];\n    }\n\n    export function getTasks(resourceId) {\n        if ($rowTaskCache[resourceId]) {\n            return $rowTaskCache[resourceId].map(id => $taskStore.entities[id]);\n        }\n        return null;\n    }\n\n    let filteredRows: SvelteRow[] = [];\n    let rowsAreOfSameHeight = true;\n    let rowContainerHeight = 0;\n    $: {\n        filteredRows = [];\n        rowContainerHeight = 0;\n        layoutChanged;\n        const firstRow = $allRows[0];\n        for (const row of $allRows) {\n            if (!row.hidden) {\n                filteredRows.push(row);\n\n                if (firstRow && firstRow.height !== row.height) {\n                    rowsAreOfSameHeight = false;\n                }\n\n                rowContainerHeight += row.height || rowHeight;\n            }\n        }\n    }\n\n    let startIndex;\n    $: {\n        if (rowsAreOfSameHeight) {\n            const rowHeight = rowContainerHeight / filteredRows.length;\n            startIndex = Math.floor(__scrollTop / rowHeight);\n        } else {\n            startIndex = getIndicesOnly(filteredRows, __scrollTop, row => row.y)[0];\n        }\n    }\n\n    let endIndex;\n    $: {\n        if (rowsAreOfSameHeight) {\n            endIndex = Math.min(startIndex + Math.ceil($visibleHeight / rowHeight), filteredRows.length - 1);\n        } else {\n            endIndex = getIndicesOnly(filteredRows, __scrollTop + $visibleHeight, row => row.y)[0];\n        }\n    }\n\n    let paddingTop = 0;\n    $: {\n        paddingTop = filteredRows[startIndex] ? filteredRows[startIndex].y : 0;\n    }\n\n    let visibleRows = [];\n    $: visibleRows = filteredRows.slice(startIndex, endIndex + 1);\n\n    let visibleTasks: SvelteTask[]; // try to keep the same order in the array as before\n    let previousOrder: { [id: PropertyKey]: number; } = {};\n    $: {\n        const tasks: SvelteTask[] = [];\n        const rendered: { [id: PropertyKey]: boolean } = {};\n\n        const tasksOrdered: SvelteTask[] = [];\n        const order: { [id: PropertyKey]: number; } = {};\n        // because svelte detaches html elements when their order changes (even when keyed)\n        // this helps CSS transitions\n        let ordered = true;\n        let ordinal = 0;\n        function tryRestorePosition(task: SvelteTask) {\n            if (!task) return;\n            tasks.push(task);\n            const id = task.model.id;\n            if (previousOrder[id] != null) {\n                tasksOrdered[previousOrder[id]] = task;\n            } else {\n                ordered = false;\n            }\n\n            order[id] = ordinal++;\n        }\n\n        for (let i = 0; i < visibleRows.length; i++) {\n            const row = visibleRows[i];\n            if ($rowTaskCache[row.model.id]) {\n                for (let j = 0; j < $rowTaskCache[row.model.id].length; j++) {\n                    const id = $rowTaskCache[row.model.id][j];\n                    rendered[id] = true;\n                    tryRestorePosition($taskStore.entities[id]);\n                }\n            }\n\n            if (_reflectedTasksCache[row.model.id]) {\n                for (const task of _reflectedTasksCache[row.model.id]) {\n                    tryRestorePosition(task);\n                }\n            }\n        }\n        \n        // render all tasks being dragged if not already\n        for (const id in draggingTasks) {\n            if (!rendered[id]) {\n                rendered[id] = true;\n                tryRestorePosition($taskStore.entities[id]);\n            }\n        }\n\n        if (tasksOrdered.length !== tasks.length) {\n            ordered = false;\n        }\n\n        previousOrder = ordered ? previousOrder : order;\n        visibleTasks = ordered ? tasksOrdered : tasks;\n    }\n\n    let layoutChanged = {};\n    let refreshLayout = {};\n    /** apply layouts */\n    $: {\n        refreshLayout;\n\n        const params: layouts.LayoutParams = {\n            taskStore: $taskStore,\n            rowStore: $rowStore,\n            rowTasks: $rowTaskCache,\n            rowHeight,\n            rowPadding,\n            rowReflectedTasks: _reflectedTasksCache,\n            invalidatedRows,\n            invalidatedTasks,\n            invalidateFull,\n        };\n\n        if (layout === 'overlap') {\n            layouts.overlap(params);\n        }\n\n        if (layout === 'pack') {\n            layouts.pack(params);\n        }\n\n        if (layout === 'expand') {\n            layouts.expand(params);\n        }\n\n        layoutChanged = {};\n        invalidateFull = false;\n        invalidatedTasks = {};\n        invalidatedRows = {};\n    }\n\n    $: {\n        layout;\n        tasks;\n        rows;\n        updateLayout();\n    }\n\n    export function updateLayoutSync(_invalidateFull?: boolean) {\n        const params: layouts.LayoutParams = {\n            taskStore: $taskStore,\n            rowStore: $rowStore,\n            rowTasks: $rowTaskCache,\n            rowHeight,\n            rowPadding,\n            rowReflectedTasks: _reflectedTasksCache,\n            invalidatedRows,\n            invalidatedTasks,\n            invalidateFull: _invalidateFull ?? invalidateFull,\n        };\n\n        if (layout === 'overlap') {\n            layouts.overlap(params);\n        }\n\n        if (layout === 'pack') {\n            layouts.pack(params);\n        }\n\n        if (layout === 'expand') {\n            layouts.expand(params);\n        }\n\n        layoutChanged = {};\n        invalidateFull = false;\n        invalidatedTasks = {};\n        invalidatedRows = {};\n    }\n\n    export function updateLayout() {\n        refreshLayout = {};\n        invalidateFull = true;\n    }\n\n    /** enable create task by dragging */\n    export let enableCreateTask = false;\n    export let onCreateTask = (e: { from: number; to: number; resourceId: PropertyKey; }) => {\n        const id: any = `creating-task-${(Math.random() + 1).toString(36).substring(2, 7)}`;\n        return ({\n            id,\n            label: ' ',\n            ...e,\n        }) as TaskModel;\n    }\n    export let onCreatedTask = (task: SvelteTask) => {};\n\n    let draggingTasks: { [taskId: PropertyKey]: DraggingState; } = {};\n    let _creatingTask: SvelteTask = null;\n    function onCreateTaskMove({ from, to, x, width, y }: MoveEvent) {\n        if (!_creatingTask) {\n            // TODO:: incorrect for collapsible rows, if creating under one\n            const row = $allRows.find(row => row.y < y && y < row.y + row.height);\n            const resourceId = row.model.id;\n            _creatingTask = createTask(onCreateTask({\n                resourceId,\n                from,\n                to,\n            }));\n            taskStore.upsert(_creatingTask);\n            draggingTasks[_creatingTask.model.id] = {\n                x: _creatingTask.left,\n                y: _creatingTask.top,\n                width: _creatingTask.width,\n                resizing: true,\n            }\n        }\n\n        draggingTasks[_creatingTask.model.id].x = x;\n        draggingTasks[_creatingTask.model.id].width = width;\n    }\n\n    function onCreateTaskEnd({ from, to, x, width }: MoveEvent) {\n        _creatingTask.model.from = from;\n        _creatingTask.model.to = to;\n        _creatingTask.left = x;\n        _creatingTask.width = width;\n        taskStore.upsert(_creatingTask);\n        delete draggingTasks[_creatingTask.model.id];\n        onCreatedTask(_creatingTask);\n        _creatingTask = null;\n    }\n\n    const dragCreateTasks = useCreateTask();\n\n    function onChange(e: CustomEvent<{ changes: DragChange[] }>) {\n        if (e.detail.changes.some(c => !c.targetRow)) {\n            return;\n        }\n        for (const change of e.detail.changes) {\n            const { task, current, previous, sourceRow, targetRow } = change;\n            if (!targetRow) {\n                continue;\n            }\n            const model = task.model;\n            \n            if (targetRow) {\n                api.tasks.raise.switchRow(task, targetRow, sourceRow);\n            }\n\n            const changed = previous.from != current.from || previous.to != current.to || (sourceRow && sourceRow.model.id !== targetRow.model.id);\n            if (changed) {\n                model.from = current.from;\n                model.to = current.to;\n                model.resourceId = targetRow.model.id;\n                const newTask: SvelteTask = {\n                    ...task,\n                    left: current.left,\n                    top: current.top,\n                    width: current.width,\n                };\n\n                api.tasks.raise.change({ task: newTask, sourceRow, targetRow, previousState: previous });\n                api.tasks.raise.changed({ task: newTask, sourceRow, targetRow, previousState: previous });\n                taskStore.update(newTask);\n                invalidatePosition({ row: sourceRow });\n                invalidatePosition({ task: newTask });\n            }\n        }\n    }\n\n    function onItemsChange(e: CustomEvent<{ items: { [taskId: PropertyKey]: DraggingState } }>) {\n        draggingTasks = { ...e.detail.items };\n    }\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events -->\n<!-- svelte-ignore a11y-mouse-events-have-key-events -->\n<!-- svelte-ignore a11y-no-static-element-interactions -->\n<div\n    class=\"sg-gantt {classes}\"\n    class:sg-disable-transition={disableTransition}\n    bind:this={ganttElement}\n    on:pointerdown|stopPropagation={onEvent}\n    on:click|stopPropagation={onEvent}\n    on:dblclick={onEvent}\n    on:pointerover={onEvent}\n    on:pointerleave={onEvent}\n>\n    {#each ganttTableModules as module}\n        <svelte:component\n            this={module}\n            {rowContainerHeight}\n            {paddingTop}\n            {tableWidth}\n            {...$$restProps}\n            {visibleRows}\n        />\n\n        <Resizer x={tableWidth} on:resize={onResize} container={ganttElement}></Resizer>\n    {/each}\n\n    <div class=\"sg-timeline sg-view\">\n        <div class=\"sg-header\" bind:this={mainHeaderContainer} bind:clientHeight={$headerHeight} style={`padding-right: ${$rightScrollbarVisible}px;`}>\n            <div class=\"sg-header-scroller\" use:horizontalScrollListener>\n                <div class=\"header-container\" style=\"width:{$_width}px\">\n                    <ColumnHeader\n                        {headers}\n                        ganttBodyColumns={columns}\n                        ganttBodyUnit={columnUnit}\n                        on:dateSelected={onDateSelected}\n                    />\n                    {#each $allTimeRanges as timeRange (timeRange.model.id)}\n                        <TimeRangeHeader {...timeRange} />\n                    {/each}\n                </div>\n            </div>\n        </div>\n\n        <div\n            class=\"sg-timeline-body\"\n            bind:this={mainContainer}\n            use:scrollable\n            class:zooming\n            on:wheel={onwheel}\n            bind:clientHeight={$visibleHeight}\n            bind:offsetHeight={offsetHeight}\n            bind:clientWidth={$visibleWidth}\n            bind:offsetWidth={offsetWidth}\n            use:dragCreateTasks={{ container: rowContainer, enabled: enableCreateTask, onMove: onCreateTaskMove, onEnd: onCreateTaskEnd, boundsContainer: mainContainer }}\n        >\n            <div class=\"content\" style=\"width:{$_width}px\">\n                <Columns {columns} {columnStrokeColor} {columnStrokeWidth} {useCanvasColumns} />\n\n                <div\n                    class=\"sg-rows\"\n                    bind:this={rowContainer}\n                    style=\"height:{rowContainerHeight}px;\"\n                >\n                    <div style=\"transform: translateY({paddingTop}px);\">\n                        {#each visibleRows as row (row.model.id)}\n                            <Row {row} />\n                        {/each}\n                    </div>\n                </div>\n\n                <div class=\"sg-foreground\">\n                    {#each $allTimeRanges as timeRange (timeRange.model.id)}\n                        <TimeRange {...timeRange} />\n                    {/each}\n\n                    <DraggableGroup items={draggingTasks} on:change={onChange} on:itemsChange={onItemsChange}>\n                        {#each visibleTasks as task (task.model.id)}\n                            <Draggable {task} let:state let:onPointerDown>\n                                <Task\n                                    {...task}\n                                    model={task.model}\n                                    left={state.x}\n                                    top={state.y}\n                                    width={state.width}\n                                    height={task.height}\n                                    dragging={state.dragging}\n                                    resizing={state.resizing}\n                                    on:pointerdown={onPointerDown}\n                                />\n                            </Draggable>\n                        {/each}\n                    </DraggableGroup>\n                </div>\n                {#each ganttBodyModules as module}\n                    <svelte:component\n                        this={module}\n                        {paddingTop}\n                        {visibleRows}\n                        {...$$restProps}\n                    />\n                {/each}\n            </div>\n        </div>\n    </div>\n</div>\n\n<style>\n    :global(.sg-gantt) {\n        --sg-column-header-bg-hover: #f9f9f9;\n        --sg-column-border-color: #efefef;\n        --sg-column-header-border-color: #efefef;\n        --sg-table-cell-border-color: #efefef;\n        --sg-table-header-cell-border-color: #efefef;\n        --sg-table-header-cell-bg: #fbfbfb;\n        --sg-resize-color: #e9eaeb;\n        --sg-dependency-arrow-color: #64748b;\n        --sg-task-resize-color: rgba(255, 255, 255, 0.5);\n        --sg-task-selected-outline-color: rgba(3, 169, 244, 0.5);\n/* \n        --sg-column-header-bg-hover: #333;\n        --sg-column-border-color: #333;\n        --sg-column-header-border-color: #333;\n        --sg-table-cell-border-color: #333;\n        --sg-table-header-cell-border-color: #333;\n        --sg-table-header-cell-bg: #333;\n        --sg-resize-color: #333;\n        --sg-dependency-arrow-color: red;\n        --sg-task-resize-color: #ccc; */\n    }\n\n    .sg-disable-transition :global(.sg-task),\n    .sg-disable-transition :global(.sg-milestone) {\n        transition:\n            transform 0s,\n            background-color 0.2s,\n            width 0s !important;\n    }\n\n    :global(.sg-view:not(:first-child)) {\n        margin-left: 5px;\n    }\n\n    .sg-timeline {\n        flex: 1 1 0%;\n        display: flex;\n        flex-direction: column;\n        overflow-x: auto;\n    }\n\n    .sg-gantt {\n        display: flex;\n\n        width: 100%;\n        height: 100%;\n        position: relative;\n    }\n\n    .sg-foreground {\n        box-sizing: border-box;\n        overflow: hidden;\n        top: 0;\n        left: 0;\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        z-index: 1;\n        pointer-events: none;\n    }\n\n    .sg-rows {\n        width: 100%;\n        box-sizing: border-box;\n        overflow: hidden;\n    }\n\n    .sg-timeline-body {\n        overflow: auto;\n        flex: 1 1 auto;\n    }\n\n    .sg-header-scroller {\n        /* border-right: 1px solid #efefef; // replace with element, or conditionally draw this border */\n        overflow: hidden;\n        position: relative;\n    }\n\n    .content {\n        position: relative;\n    }\n\n    :global(*) {\n        box-sizing: border-box;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/Column.svelte",
    "content": "<script lang=\"ts\">\n    export let left;\n    export let width;\n</script>\n\n<div class=\"column\" style=\"left:{left}px;width:{width}px\"></div>\n\n<style>\n    .column {\n        position: absolute;\n        height: 100%;\n        box-sizing: border-box;\n    }\n\n    .column {\n        border-right: #efefef 1px solid;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/ColumnHeader.svelte",
    "content": "<script lang=\"ts\">\n    import ColumnHeaderRow from './ColumnHeaderRow.svelte';\n\n    /**\n     * Container component for header rows\n     */\n    export let headers;\n    export let ganttBodyColumns;\n    export let ganttBodyUnit;\n</script>\n\n{#each headers as header}\n    <ColumnHeaderRow {header} {ganttBodyColumns} {ganttBodyUnit} on:dateSelected />\n{/each}\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/ColumnHeaderRow.svelte",
    "content": "<script lang=\"ts\">\n    import { createEventDispatcher, getContext } from 'svelte';\n    const dispatch = createEventDispatcher();\n\n    import { getAllPeriods } from '../utils/date';\n    import { getPositionByDate } from '../utils/utils';\n    import { whenEnterPress } from '../utils/dom';\n\n    const { from, to, width } = getContext('dimensions');\n    const { dateAdapter } = getContext('options');\n\n    export let header;\n\n    export let ganttBodyColumns;\n    export let ganttBodyUnit;\n\n    $: {\n        if (header.unit === ganttBodyUnit) {\n            header.columns = ganttBodyColumns.map(column => ({\n                ...column,\n                label: dateAdapter.format(column.from, header.format)\n            }));\n        } else {\n            const periods = getAllPeriods($from.valueOf(), $to.valueOf(), header.unit, header.offset);\n            let distance_point = 0;\n            let left = 0;\n\n            header.columns = periods.map(period => {\n                left = distance_point;\n                distance_point = getPositionByDate(\n                    period.to,\n                    $from.valueOf(),\n                    $to.valueOf(),\n                    $width\n                );\n                return {\n                    width: Math.min(distance_point - left, $width),\n                    label: dateAdapter.format(period.from, header.format),\n                    from: period.from,\n                    to: period.to,\n                    left: left\n                };\n            });\n        }\n    }\n\n    function onHeaderClick(_header) {\n        dispatch('dateSelected', { from: _header.from, to: _header.to, unit: header.unit });\n    }\n</script>\n\n<div class=\"column-header-row\">\n    {#each header.columns as _header}\n        <div\n            class=\"column-header-cell\"\n            role=\"button\"\n            tabindex=\"0\"\n            class:sticky={header.sticky}\n            style=\"left:{_header.left}px;width:{_header.width}px\"\n            on:click={() => onHeaderClick(_header)}\n            on:keydown={whenEnterPress(() => onHeaderClick(_header))}\n        >\n            <div class=\"column-header-cell-label\">{_header.label || 'N/A'}</div>\n        </div>\n    {/each}\n</div>\n\n<style>\n    .column-header-row {\n        position: relative;\n\n        white-space: nowrap;\n        height: 32px;\n    }\n\n    .column-header-cell {\n        position: absolute;\n\n        height: 100%;\n        box-sizing: border-box;\n        text-overflow: clip;\n        text-align: center;\n\n        display: inline-flex;\n\n        justify-content: center;\n        align-items: center;\n\n        font-size: 1em;\n        font-size: 14px;\n        font-weight: 300;\n        transition: background 0.2s;\n\n        cursor: pointer;\n        user-select: none;\n\n        border-right: var(--sg-column-header-border-color) 1px solid;\n        border-bottom: var(--sg-column-header-border-color) 1px solid;\n    }\n\n    .column-header-cell:hover {\n        background: var(--sg-column-header-bg-hover);\n    }\n\n    .column-header-cell.sticky > .column-header-cell-label {\n        position: sticky;\n        left: 1rem;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/Columns.svelte",
    "content": "<script lang=\"ts\">\n    import { createBackground } from './canvas';\n\n    /**\n     * Container component for columns rendered as gantt body background\n     */\n    export let columns;\n\n    export let useCanvasColumns = true;\n    export let columnStrokeWidth;\n    export let columnStrokeColor;\n    export let columnDefaultColor = '#ffffff';\n\n    let backgroundImage;\n    $: {\n        // TODO: background repeats and so do columns so passing every element is not needed, but line alignment issues occur on later rows\n        // TODO: I used to make column widths and positions whole numbers, now they contain decimals again, check if this is because of that\n        backgroundImage = createBackground(columns, {\n            // columns.slice(0,5)\n            columnStrokeColor,\n            columnStrokeWidth\n        });\n    }\n</script>\n\n{#if useCanvasColumns}\n    <div class=\"sg-columns sg-columns--background\" style:background-image={backgroundImage}></div>\n{:else}\n    <div class=\"sg-columns\">\n        {#each columns as column}\n            <div\n                class=\"sg-column\"\n                style=\"\n                border-right: {column.bgHighlightColor\n                    ? 0\n                    : columnStrokeWidth}px solid {column.bgHighlightColor || columnStrokeColor};\n                left: {column.left}px;\n                width: {column.width}px;\n                background-color: {column.bgHighlightColor || columnDefaultColor};\"\n            ></div>\n        {/each}\n    </div>\n{/if}\n\n<style>\n    .sg-columns {\n        position: absolute;\n        height: 100%;\n        width: 100%;\n        /* BUG: column borders are not showing correctly when width is very small */\n    }\n\n    .sg-columns--background {\n        overflow: hidden;\n        background-repeat: repeat;\n        background-position-x: -1px;\n    }\n\n    .sg-column {\n        position: absolute;\n        height: 100%;\n        width: 100%;\n        box-sizing: border-box;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/canvas.ts",
    "content": "import { Column } from '../core/column';\n\nexport function createBackground(\n    columns: Column[],\n    opts: { columnStrokeWidth; columnStrokeColor }\n) {\n    try {\n        const canvas = document.createElement('canvas');\n        canvas.width = (columns.length - 1) * columns[0].width;\n        canvas.height = 20;\n        const ctx = canvas.getContext('2d');\n        ctx.shadowColor = 'rgba(128,128,128,0.5)';\n        ctx.shadowOffsetX = 0;\n        ctx.shadowOffsetY = 0;\n        ctx.shadowBlur = 0.5;\n        ctx.lineWidth = opts.columnStrokeWidth;\n        ctx.lineCap = 'square';\n        ctx.strokeStyle = opts.columnStrokeColor;\n        ctx.translate(0.5, 0.5);\n        columns.forEach(column => {\n            lineAt(ctx, column.left);\n        });\n        const dataURL = canvas.toDataURL();\n        return `url(\"${dataURL}\")`;\n    } catch (e) {\n        console.error('[canvas] Render error', e);\n    }\n}\n\nfunction lineAt(ctx, x) {\n    ctx.beginPath();\n    ctx.moveTo(x, 0);\n    ctx.lineTo(x, 20);\n    ctx.stroke();\n}\n\nexport function createWeekEndsHighlight(columns, opts: { from; highlightColor }) {\n    const start_gantt = new Date(opts.from);\n    const dayStart = start_gantt.getDay();\n    const startIndex = dayStart == 0 ? 7 : 7 - dayStart;\n    const canvas = document.createElement('canvas');\n    canvas.width = columns.length * columns[0].width;\n    canvas.height = 20;\n    const ctx = canvas.getContext('2d');\n    ctx.shadowColor = 'rgba(128,128,128,0.5)';\n    ctx.shadowOffsetX = 0;\n    ctx.shadowOffsetY = 0;\n    ctx.shadowBlur = 0.5;\n    ctx.lineWidth = columns[0].width;\n    ctx.lineCap = 'square';\n    ctx.strokeStyle = opts.highlightColor;\n    ctx.translate(0.5, 0.5);\n\n    columns.forEach((column, index) => {\n        if (index == startIndex) lineAt(ctx, column.left - columns[0].width / 2);\n        if (index == startIndex + 1) lineAt(ctx, column.left - columns[0].width / 2);\n    });\n    const dataURL = canvas.toDataURL();\n    return `url(\"${dataURL}\")`;\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/column/index.ts",
    "content": "import Column from './Column.svelte';\nimport ColumnHeaderRow from './ColumnHeaderRow.svelte';\nimport ColumnHeader from './ColumnHeader.svelte';\nimport Columns from './Columns.svelte';\n\nexport { Column, ColumnHeaderRow, ColumnHeader, Columns };\n"
  },
  {
    "path": "packages/svelte-gantt/src/context.d.ts",
    "content": "import { DragContext } from './core/drag';\nimport { GanttDataStore } from './core/store';\nimport { GanttContext, GanttContextDimensions, GanttContextOptions, GanttContextServices } from './gantt';\n\ndeclare module 'svelte' {\n    type Contexts = {\n        'drag': DragContext;\n        'gantt': GanttContext;\n        'dataStore': GanttDataStore;\n        'services': GanttContextServices;\n        'options': GanttContextOptions;\n        'dimensions': GanttContextDimensions;\n    }\n\n    export function setContext<K extends keyof Contexts, T extends Contexts[K]>(key: K, context: T);\n    export function getContext<K extends keyof Contexts>(key: K): Contexts[K];\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/api.ts",
    "content": "import { setContext, getContext } from \"svelte\";\nimport type { SvelteTask, TaskModel } from \"./task\";\nimport type { SvelteRow } from \"./row\";\nimport type { TimeRangeModel } from \"./timeRange\";\n\ntype EventController<T extends any[]> = [(handler: (arg: T) => void) => () => void, (...params: T) => void];\n\ntype EventsAndArgs<T = any> = {\n    [Event in keyof T]: T[Event] extends any[] ? T[Event] : never;\n}\n\ntype EventMap<T extends EventsAndArgs> = {\n    [Event in keyof T]: EventController<T[Event]>;\n}\n\ntype EventFeature<T extends EventsAndArgs> = {\n    on: {\n        [Event in keyof T]: EventController<T[Event]>[0];\n    },\n    raise: {\n        [Event in keyof T]: EventController<T[Event]>[1];\n    }\n}\n\nfunction controller<T extends any[]>(): EventController<T> {\n    const listeners: ((arg: T) => void)[] = [];\n\n    function raise(...params: T) {\n        for (const listener of listeners) {\n            listener(params);\n        }\n    };\n\n    function on(handler: (arg: T) => void) {\n        listeners.push(handler);\n        const removeListener = () => {\n            const index = listeners.indexOf(handler);\n            listeners.splice(index, 1);\n        };\n\n        return removeListener;\n    };\n\n    return [on, raise];\n}\n\nfunction feature<T extends EventsAndArgs>(events: EventMap<T>): EventFeature<T> {\n    const result = { on: {}, raise: {} } as EventFeature<T>;\n    for (const event in events) {\n        const [on, raise] = events[event];\n        result.on[event] = on;\n        result.raise[event] = raise;\n    }\n    return result;\n}\n\nconst contextKey = {};\n\nexport function provideGanttApi() {\n    return setContext(contextKey, createGanttApi());\n}\n\nfunction createGanttApi() {\n    return {\n        tasks: feature({\n            move: controller<[TaskModel]>(),\n            resize: controller<[TaskModel]>(),\n            select: controller<[SvelteTask]>(),\n            switchRow: controller<[SvelteTask, SvelteRow, SvelteRow]>(),\n            moveEnd: controller<[TaskModel]>(),\n            change: controller<[{ task: SvelteTask; sourceRow: SvelteRow; targetRow: SvelteRow; previousState: any }]>(),\n            changed: controller<[{ task: SvelteTask; sourceRow: SvelteRow; targetRow: SvelteRow; previousState: any }]>(),\n            dblclicked: controller<[SvelteTask, MouseEvent]>(),\n        }),\n        gantt: feature({\n            viewChanged: controller<[]>(),\n            dateSelected: controller<[{ from: number, to: number }]>(),\n        }),\n        timeranges: feature({\n            clicked: controller<[{ model: TimeRangeModel }]>(),\n            resized: controller<[{ model: TimeRangeModel; left: number; width: number; }]>(),\n            changed: controller<[{ model: TimeRangeModel; left: number; width: number; }]>(),\n        }),\n    };\n}\n\nexport type GanttApi = ReturnType<typeof createGanttApi>;\n\nexport function useGanttApi() {\n    return getContext(contextKey) as GanttApi;\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/column.ts",
    "content": "import { get } from '../utils/utils';\n\nexport interface HighlightedDurations {\n    unit: string;\n    fractions: number[];\n}\n\nexport interface Column {\n    from: number;\n    to: number;\n    left: number;\n    width: number;\n    bgHighlightColor?: boolean;\n\n    /**\n     * Duration in milliseconds\n     */\n    duration: number;\n}\n\ntype ColumnServiceParams = {\n    readonly columns: Column[];\n    readonly magnetDuration: number;\n}\n\nexport function createColumnService(params: ColumnServiceParams) {\n    function getColumnByDate(date: number) {\n        const pair = findByDate(params.columns, date);\n        return !pair[0] ? pair[1] : pair[0];\n    }\n\n    function getColumnByPosition(x: number) {\n        const pair = findByPosition(params.columns, x);\n        return !pair[0] ? pair[1] : pair[0];\n    }\n\n    return  {\n        getColumnByDate,\n        getColumnByPosition,\n        getPositionByDate(date: number) {\n            if (!date) return null;\n            const column = getColumnByDate(date);\n\n            let durationTo = date - column.from;\n            const position = (durationTo / column.duration) * column.width;\n\n            //multiples - skip every nth col, use other duration\n            return column.left + position;\n        },\n        getDateByPosition(x: number) {\n            const column = getColumnByPosition(x);\n            x = x - column.left;\n\n            let positionDuration = (column.duration / column.width) * x;\n            const date = column.from + positionDuration;\n\n            return date;\n        },\n        /**\n         * TODO: remove, currently unused\n         * @param {number} date - Date\n         * @returns {number} rounded date passed as parameter\n         */\n        roundTo(date: number) {\n            let value = Math.round(date / params.magnetDuration) * params.magnetDuration;\n            return value;\n        }\n    };\n}\n\nexport function findByPosition(columns: Column[], x: number) {\n    const result = get<Column>(columns, x, c => c.left);\n    return result;\n}\n\nexport function findByDate(columns: Column[], x: number) {\n    const result = get<Column>(columns, x, c => c.from);\n    return result;\n}\n\nexport type ColumnService = ReturnType<typeof createColumnService>;\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/constants.ts",
    "content": "export const MIN_DRAG_X = 2;\nexport const MIN_DRAG_Y = 2;\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/drag/DragContext.ts",
    "content": "import type { DownDropEvent } from './draggable';\nimport type { SvelteTask } from '../task';\nimport type { SvelteRow } from '../row';\nimport type { Readable } from 'svelte/store';\n\nexport interface DragContext {\n    rootState: Readable<{ [taskId: PropertyKey]: State; }>;\n    off(taskId: PropertyKey);\n    save(start: { x: number; y: number; width: number; }, task: SvelteTask, event: DownDropEvent);\n    dropAll(event: DownDropEvent): void;\n    moveAll(data: { x?: number; y?: number; width?: number; event?: MouseEvent }, task: SvelteTask, state: State);\n    setState(task: SvelteTask, state: State);\n    dragAllowed(task: SvelteTask): boolean;\n    resizeAllowed(task: SvelteTask): boolean;\n    mouseUp(task: SvelteTask);\n}\n\nexport type Position = {\n    left: number;\n    top: number;\n    width: number;\n    from: number;\n    to: number;\n}\n\nexport type DragChange = {\n    valid: boolean;\n    task: SvelteTask;\n    current: Position;\n    previous: Position;\n    sourceRow: SvelteRow;\n    targetRow: SvelteRow;\n}\n\nexport type State = Partial<{\n    dragging: boolean;\n    resizing: boolean;\n    x: number;\n    y: number;\n    width: number;\n    /** @deprecated */\n    ignoreClick: boolean;\n}>;"
  },
  {
    "path": "packages/svelte-gantt/src/core/drag/Draggable.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from \"svelte\";\n    import type { SvelteTask } from \"../task\";\n    import { createDraggable } from \"./draggable\";\n    import { scrollIfOutOfBounds } from \"../../utils/dom\";\n    import { onDestroy } from \"svelte\";\n\n    export let task: SvelteTask;\n\n    let _x: number;\n    let _y: number;\n    let _width: number;\n\n    const { rowContainer, mainContainer } = getContext('gantt');\n    const { resizeHandleWidth } = getContext('options');\n    const context = getContext('drag');\n\n    const root = context.rootState;\n\n    $: state = $root[task.model.id];\n    $: _dragging = state?.dragging ?? false;\n    $: _resizing = state?.resizing ?? false;\n    $: _ignoreClick = state?.ignoreClick ?? false;\n    $: _state = {\n        x: _x,\n        y: _y,\n        width: _width,\n        dragging: _dragging,\n        resizing: _resizing,\n    }\n\n    $: {\n        if (_dragging || _resizing) {\n            _x = state?.x ?? task.left;\n            _y = state?.y ?? task.top;\n            _width = state?.width ?? task.width;\n        } else {\n            _x = task.left;\n            _y = task.top;\n            _width = task.width;\n        }\n    }\n\n    export const dragAllowed: (task: SvelteTask) => boolean = null;\n    export const resizeAllowed: (task: SvelteTask) => boolean = null;\n\n    const onPointerDown = createDraggable({\n        container: rowContainer,\n        resizeHandleWidth,\n        getX: () => _x,\n        getY: () => _y,\n        getWidth: () => _width,\n        dragAllowed() {\n            const fn = dragAllowed ?? context.dragAllowed ?? (() => true);\n            return fn(task);\n        },\n        resizeAllowed() {\n            const fn = resizeAllowed ?? context.resizeAllowed ?? (() => true);\n            return fn(task);\n        },\n        onDown(event) {\n            context.save(event, task, event);\n        },\n        onMouseUp() {\n            context.mouseUp(task);\n        },\n        onResize(event) {\n            context.moveAll(event, task, {\n                x: event.x,\n                y: event.width,\n                resizing: true,\n                ignoreClick: true,\n            });\n        },\n        onDrag(event) {\n            context.moveAll(event, task, {\n                x: event.x,\n                y: event.y,\n                dragging: true,\n                ignoreClick: true,\n            });\n            scrollIfOutOfBounds(event.event, mainContainer);\n        },\n        onDrop(event) {\n            context.dropAll(event);\n        }\n    });\n\n    onDestroy(() => {\n        context.off(task.model.id);\n    });\n</script>\n\n\n<slot state={_state} onPointerDown={onPointerDown}/>"
  },
  {
    "path": "packages/svelte-gantt/src/core/drag/DraggableGroup.svelte",
    "content": "<script lang=\"ts\">\n    import { setContext } from 'svelte';\n    import { writable } from 'svelte/store';\n    import type { DragChange, DragContext, Position, State } from './DragContext';\n    import type { DownDropEvent } from './draggable';\n    import { createEventDispatcher } from \"svelte\";\n    import { getContext } from 'svelte';\n    import type { SvelteTask } from '../task';\n    import type { SvelteRow } from '../row';\n    import { scrollIfOutOfBounds, setCursor, getRowAtPoint } from '../../utils/dom';\n    import { isDraggable, isResizable } from '../../utils/utils';\n\n    type RootState = Partial<{\n        xDelta: number;\n        yDelta: number;\n        width: number;\n        bWidth: number;\n        widthDelta: number;\n    }> & State;\n\n    export let items: { [taskId: PropertyKey]: RootState; } = {};\n\n    let _taskIds: PropertyKey[] = [];\n    const _active = writable(false);\n    const root = writable<{ [taskId: PropertyKey]: RootState; }>({});\n\n\n    $: $root = items;\n\n    const { taskStore, rowStore } = getContext('dataStore');\n    const gantt = getContext('gantt');\n    const { rowPadding } = getContext('options');\n    const { api, utils, columnService, selectionManager } = getContext('services');\n\n    const dispatcher = createEventDispatcher<{ \n        change: {  changes: DragChange[]; }; \n        itemsChange: { items: { [taskId: PropertyKey]: RootState; }; };\n    }>();\n    \n    const selectedTasks = selectionManager._selectedTasks;\n\n    const context: DragContext = {\n        rootState: root,\n        dragAllowed({ model }: SvelteTask) {\n            const row = $rowStore.entities[model.resourceId];\n            return row && isDraggable(row.model) && isDraggable(model);\n        },\n        resizeAllowed({ model }: SvelteTask) {\n            const row = $rowStore.entities[model.resourceId];\n            return model.type !== 'milestone' && row && isResizable(row.model) && isResizable(model);\n        },\n        off(taskId) {\n            delete $root[taskId];\n        },\n        save(start: { x: number; y: number; width: number; }, task, event: DownDropEvent) {\n            // triggers onmousedown\n            setCursor(event.dragging ? 'move' : 'e-resize');\n            const { mouseEvent } = event;\n            let tasks: SvelteTask[] = [task];\n            if (mouseEvent.ctrlKey) {\n                for (const [taskId, isSelected] of Object.entries($selectedTasks)) {\n                    if (isSelected && taskId !== String(task.model.id)) {\n                        tasks.push($taskStore.entities[taskId]);\n                    }\n                }\n            }\n\n            _taskIds = [];\n            for (const task of tasks) {\n                _taskIds.push(task.model.id);\n                $root[task.model.id] = {\n                    xDelta: task.left - start.x,\n                    yDelta: task.top - start.y,\n                    width: task.width,\n                    bWidth: start.width,\n                    widthDelta: task.width - start.width,\n                };\n            }\n            dispatcher('itemsChange', { items: $root });\n        },\n        dropAll(event) {\n            if (!event.dragging && !event.resizing) {\n                return;\n            }\n            $_active = false;\n            const changes: DragChange[] = [];\n            for (const taskId of _taskIds) {\n                const state = $root[taskId];\n                const task = $taskStore.entities[taskId];\n                const isTarget = task.model.id === taskId;\n                const change = onDropSingle({\n                    ...event,\n                    mouseEvent: {\n                        ...event.mouseEvent,\n                        clientX: event.mouseEvent.clientX + state.xDelta,\n                        clientY: event.mouseEvent.clientY + state.yDelta,\n                    },\n                    x: event.x + state.xDelta,\n                    y: event.y + state.yDelta,\n                    width: Math.abs((isTarget ? event.width : state.bWidth) + state.widthDelta),\n                } as DownDropEvent, task);\n                changes.push({\n                    valid: change.valid,\n                    task: change.task,\n                    targetRow: change.targetRow,\n                    sourceRow: change.sourceRow,\n                    current: change.current,\n                    previous: change.previous,\n                });\n            }\n\n            dispatcher('change', { changes });\n            $root = {};\n            _taskIds = [];\n            dispatcher('itemsChange', { items: $root });\n        },\n        moveAll({ x, y, width, event }: { x?: number; y?: number; width?: number; event: PointerEvent }, task: SvelteTask, state: State) {\n\n            scrollIfOutOfBounds(event, gantt.mainContainer);\n\n            if (state.dragging) {\n                api.tasks.raise.move(task.model);\n            }\n            if (state.resizing) {\n                api.tasks.raise.resize(task.model);\n            }\n            for (const taskId of _taskIds) {\n                // somehow update tasks to (event.x + xDelta, event.y + yDelta)\n                const rootState = $root[taskId];\n                const isTarget = task.model.id === taskId;\n                const event = {\n                    x: x != null ? x + rootState.xDelta : null,\n                    y: y != null ? y + rootState.yDelta : null,\n                    width: width != null ? Math.abs((isTarget ? width : rootState.bWidth) + rootState.widthDelta) : null, // pos.width + (width - pos.bWidth) // wDelta\n                };\n                $root[taskId] = {\n                    ...$root[taskId],\n                    ...state,\n                    x: event.x,\n                    y: event.y,\n                    width: event.width ?? $root[taskId]?.width,\n                };\n            }\n        },\n        setState(task: SvelteTask, state: State) {\n            $root[task.model.id] = {\n                ...$root[task.model.id],\n                ...state,\n            };\n        },\n        mouseUp({ model }: SvelteTask) {\n            setCursor('default');\n            api.tasks.raise.moveEnd(model);\n        }\n    };\n    \n    // honestly keep state in context provider.\n    function setState(state: State, id: PropertyKey) {\n        $root[id] = {\n            ...$root[id],\n            ...state,\n        };\n    }\n\n    function onDropSingle(event: DownDropEvent, task: SvelteTask) {\n        //row switching\n        const model = task.model;\n        const sourceRow = $rowStore.entities[model.resourceId];\n        let targetRow: SvelteRow;\n        if (event.dragging) {\n            const rowId = getRowAtPoint(event.mouseEvent);\n            const row = $rowStore.entities[rowId];\n            if (row && isDraggable(row.model)) {\n                targetRow = row;\n            }\n            // target row can be null\n        } else {\n            // dont know about this\n            targetRow = $rowStore.entities[model.resourceId];\n        }\n\n        setState({\n            dragging: false,\n            resizing: false,\n        }, model.id);\n\n        setTimeout(() => { // because we want to block delegated clicks on gantt after dragging\n            // sets state after it has been cleared, also resulting in a wierd render\n            setState({\n                ignoreClick: false,\n            }, model.id);\n        });\n\n        const newFrom = utils.roundTo(columnService.getDateByPosition(event.x));\n        const newTo = utils.roundTo(columnService.getDateByPosition(event.x + event.width));\n        const newLeft = columnService.getPositionByDate(newFrom) | 0;\n        const newRight = columnService.getPositionByDate(newTo) | 0;\n\n        const left = newLeft;\n        const width = newRight - newLeft;\n        const top = $rowPadding + (targetRow?.y ?? 0);\n        // get value of top from the layout\n\n\n        const current: Position = {\n            left,\n            top,\n            width,\n            from: newFrom,\n            to: newTo,\n        } \n        const previous: Position = {\n            left: task.left,\n            width: task.width,\n            top: task.top,\n            from: model.from,\n            to: model.to,\n        }\n\n        return {\n            valid: true,\n            task,\n            current,\n            previous,\n            dragging: event.dragging,\n            resizing: event.resizing,\n            sourceRow,\n            targetRow,\n        };\n    }\n\n    setContext('drag', context);\n</script>\n\n<slot {context}></slot>\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/drag/draggable.ts",
    "content": "import { isLeftClick, addEventListenerOnce, getRelativePos } from '../../utils/dom';\nimport { MIN_DRAG_Y, MIN_DRAG_X } from '../constants';\n\nexport interface DraggableOptions {\n    container: HTMLElement;\n    dragAllowed: MaybeAccessor<boolean>;\n    resizeAllowed: MaybeAccessor<boolean>;\n    resizeHandleWidth?: number;\n    getX?: (event?: MouseEvent) => number;\n    getY?: (event?: MouseEvent) => number;\n    getWidth?: () => number;\n\n    onDown?(event?: DownDropEvent): void;\n    onResize?(event?: ResizeEvent): void;\n    onDrag?(event?: DragEvent): void;\n    onMouseUp?(): void;\n    onDrop?(event?: DownDropEvent): void;\n}\n\nexport interface DownDropEvent {\n    mouseEvent: MouseEvent;\n    x: number;\n    y: number;\n    width: number;\n    resizing: boolean;\n    dragging: boolean;\n}\n\nexport interface DragEvent {\n    x: number;\n    y: number;\n    event?: MouseEvent;\n}\n\nexport interface ResizeEvent {\n    x: number;\n    width: number;\n    event?: MouseEvent;\n}\n\nexport type Direction = 'left' | 'right' | undefined;\n\ntype MaybeAccessor<T> = T | (() => T);\n\nfunction getAccessor<T>(accessor: MaybeAccessor<T>): () => T {\n    if (accessor instanceof Function) {\n        return () => accessor();\n    } else {\n        return () => accessor;\n    }\n}\n\n/**\n * Applies dragging interaction to gantt elements\n */\nexport function useDraggable(node: HTMLElement, options: DraggableOptions) {\n    const onMousedown = createDraggable(options);\n    node.addEventListener('pointerdown', onMousedown);\n    return {\n        destroy() {\n            node.removeEventListener('pointerdown', onMousedown, false);\n        }\n    };\n}\n\n/**\n * Applies dragging interaction to gantt elements\n */\nexport function createDraggable(options: DraggableOptions) {\n    let mouseStartPosX: number;\n    let mouseStartPosY: number;\n    let mouseStartRight: number;\n\n    let direction: Direction;\n    let dragging = false;\n    let resizing = false;\n\n    let initialX: number;\n    let initialY: number;\n    let triggered = false;\n\n    const dragAllowed = getAccessor(options.dragAllowed);\n    const resizeAllowed = getAccessor(options.resizeAllowed);\n\n    function onMousedown(event: PointerEvent) {\n        if (!isLeftClick(event)) {\n            return;\n        }\n        event.stopPropagation();\n        event.preventDefault();\n\n        const canDrag = dragAllowed();\n        const canResize = resizeAllowed();\n\n        if (!canDrag && !canResize) {\n            return;\n        }\n\n        const x = options.getX(event);\n        const y = options.getY(event);\n        const width = options.getWidth();\n\n        initialX = event.clientX;\n        initialY = event.clientY;\n\n        mouseStartRight = x + width;\n\n        mouseStartPosX = getRelativePos(options.container, event).x - x;\n        mouseStartPosY = getRelativePos(options.container, event).y - y;\n\n        if (canResize && mouseStartPosX <= options.resizeHandleWidth) {\n            direction = 'left';\n            resizing = true;\n        }\n\n        if (canResize && mouseStartPosX >= width - options.resizeHandleWidth) {\n            direction = 'right';\n            resizing = true;\n        }\n\n        if (canDrag && !resizing) {\n            dragging = true;\n        }\n\n        if ((dragging || resizing) && options.onDown) {\n            options.onDown({\n                mouseEvent: event,\n                x,\n                width,\n                y,\n                resizing: resizing,\n                dragging: dragging\n            });\n        }\n\n        window.addEventListener('pointermove', onMousemove, false);\n        addEventListenerOnce(window, 'pointerup', onMouseup);\n    };\n\n    function onMousemove(event: MouseEvent) {\n        if (!triggered) {\n            if (\n                Math.abs(event.clientX - initialX) > MIN_DRAG_X ||\n                Math.abs(event.clientY - initialY) > MIN_DRAG_Y\n            ) {\n                triggered = true;\n            } else {\n                return;\n            }\n        }\n\n        event.preventDefault();\n\n        if (resizing) {\n            const mousePos = getRelativePos(options.container, event);\n            const x = options.getX(event);\n            const width = options.getWidth();\n\n            let resultX: number;\n            let resultWidth: number;\n\n            if (direction === 'left') {\n                if (mouseStartRight - mousePos.x <= 0) {\n                    direction = 'right';\n\n                    resultX = mouseStartRight;\n                    resultWidth = mouseStartRight - mousePos.x;\n                    mouseStartRight = mouseStartRight + width;\n                } else {\n                    resultX = mousePos.x;\n                    resultWidth = mouseStartRight - mousePos.x;\n                }\n            } else if (direction === 'right') {\n                //resize right\n                if (mousePos.x - x <= 0) {\n                    direction = 'left';\n                    resultX = mousePos.x;\n                    resultWidth = mousePos.x - x;\n                    mouseStartRight = x;\n                } else {\n                    resultX = x;\n                    resultWidth = mousePos.x - x;\n                }\n            }\n\n            if (options.onResize) {\n                options.onResize({\n                    x: resultX,\n                    width: resultWidth,\n                    event\n                });\n            }\n        }\n\n        // mouseup\n        if (dragging && options.onDrag) {\n            const mousePos = getRelativePos(options.container, event);\n\n            options.onDrag({\n                x: mousePos.x - mouseStartPosX, // maybe this is the rounding error\n                y: mousePos.y - mouseStartPosY,\n                event\n            });\n        }\n    };\n\n    function onMouseup(event: MouseEvent) {\n        const x = options.getX(event);\n        const y = options.getY(event);\n        const width = options.getWidth();\n\n        options.onMouseUp && options.onMouseUp();\n        // there is an issue here maybe, we update task according to the mousemove event, but we ignore the mouseup event and use the previously commited x, y and width\n        // you know those issues when task gets rounded incorrectly on resize? could be the cause\n        // ....or not really, this issue results in task resizing when task is merely dragged\n        if (triggered && options.onDrop) {\n            options.onDrop({\n                mouseEvent: event,\n                x,\n                y,\n                width,\n                dragging: dragging,\n                resizing: resizing\n            });\n        }\n\n        mouseStartPosX = null;\n        mouseStartPosY = null;\n        mouseStartRight = null;\n\n        dragging = false;\n        resizing = false;\n\n        initialX = null;\n        initialY = null;\n        triggered = false;\n\n        window.removeEventListener('pointermove', onMousemove, false);\n    };\n\n    return onMousedown;\n}"
  },
  {
    "path": "packages/svelte-gantt/src/core/drag/index.ts",
    "content": "export * from './draggable';\nexport { default as DraggableGroup } from './DraggableGroup.svelte';\nexport { default as Draggable } from './Draggable.svelte';\nexport type { DragContext } from './DragContext';\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/events.ts",
    "content": "type DelegatedCallback = (e: MouseEvent, data: string, target: Element) => void;\n\nexport function createDelegatedEventDispatcher() {\n    const callbacks: { [type: string]: { [attr: string]: DelegatedCallback } } = {};\n\n    return {\n        onDelegatedEvent(type, attr, callback: DelegatedCallback) {\n            if (!callbacks[type]) callbacks[type] = {};\n            callbacks[type][attr] = callback;\n        },\n\n        offDelegatedEvent(type, attr) {\n            delete callbacks[type][attr];\n        },\n\n        onEvent(e: MouseEvent) {\n            const { type, target } = e;\n            const cbs = callbacks[type];\n            if (!cbs) return;\n\n            let match;\n            let element = target as Element;\n            while (element && element != e.currentTarget) {\n                if ((match = matches(cbs, element))) {\n                    break;\n                }\n                element = element.parentElement;\n            }\n            if (match && cbs[match.attr]) {\n                cbs[match.attr](e, match.data, element);\n            } else if (cbs['empty']) {\n                cbs['empty'](e, null, element);\n            }\n        }\n    };\n}\n\nfunction matches(cbs, element) {\n    let data;\n    for (const attr in cbs) {\n        if ((data = element.getAttribute(attr))) {\n            return { attr, data };\n        }\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/layouts.ts",
    "content": "import type { SvelteRow } from './row';\nimport type { EntityState } from './store';\nimport type { SvelteTask } from './task';\n\nexport type LayoutParams = {\n    taskStore: EntityState<SvelteTask>; \n    rowStore: EntityState<SvelteRow>;\n    rowTasks: { [rowId: PropertyKey]: PropertyKey[] }; \n    rowHeight: number; \n    rowPadding: number; \n    rowReflectedTasks: { [rowId: PropertyKey]: SvelteTask[] }; \n    invalidatedTasks: { [rowId: PropertyKey]: boolean; }; \n    invalidatedRows: { [rowId: PropertyKey]: boolean; };\n    invalidateFull?: boolean;\n}\n\ntype LayoutRowParams = {\n    rowHeight: number; \n    rowPadding: number; \n    expandRow?: boolean;\n}\n\ntype LayoutResult = {\n    changed: boolean;\n}\n\n/**\n * Layouts tasks - overlapping tasks display one over another\n * @param params \n */\nexport function overlap(params: LayoutParams): LayoutResult {\n    const { taskStore, rowStore, rowHeight, rowPadding, rowReflectedTasks } = params;\n    let top = 0;\n    const result: LayoutResult = { changed: false };\n\n    if (!params.invalidateFull) {\n        for (const taskId in params.invalidatedTasks) {\n            positionTask(taskStore.entities[taskId]);\n        }\n        return result;\n    }\n\n    for (const rowId of rowStore.ids) {\n        const row = rowStore.entities[rowId];\n        row.y = top;\n        const prevHeight = row.height;\n        row.height = row.model.height || rowHeight;\n        if (!row.hidden) {\n            top += row.height;\n        }\n\n        if (prevHeight !== row.height) {\n            result.changed = true;\n        }\n\n        const reflectedTasks = rowReflectedTasks[rowId];\n        if (reflectedTasks) {\n            for (const task of reflectedTasks) {\n                positionTask(task);\n            }\n        }\n    }\n\n    function positionTask(task: SvelteTask) {\n        const row = rowStore.entities[task.model.resourceId];\n        if (!row) return;\n        task.height = (row ? row.height : undefined) - 2 * rowPadding;\n        task.top = row.y + rowPadding;\n    }\n\n    for (const taskId of taskStore.ids) {\n        positionTask(taskStore.entities[taskId]);\n    }\n\n    return result;\n}\n\n/**\n * Layouts tasks - overlapping tasks display in the same row, but shrink to not overlap with eachother\n * @param params \n */\nexport function pack(params: LayoutParams) {\n    // TODO:: partial invalidation\n    return _layoutRows(params, false);\n}\n\n/**\n * Layouts tasks - overlapping tasks display in the same row, but row is expanded to fit them\n * @param params \n * @returns \n */\nexport function expand(params: LayoutParams) {\n    // TODO:: partial invalidation\n    return _layoutRows(params, true);\n}\n\nfunction _layoutRows(params: LayoutParams, expandRow: boolean) {\n    const { taskStore, rowStore, rowTasks, rowHeight, rowPadding } = params;\n    let top = 0;\n    const result: LayoutResult = { changed: false };\n    for (const rowId of rowStore.ids) {\n        const row = rowStore.entities[rowId];\n        const taskIds = rowTasks[rowId];\n        row.y = top;\n        const prevHeight = row.height;\n        if (taskIds) {\n            const tasks = taskIds.map(taskId => taskStore.entities[taskId]);\n            _layoutRow(tasks, row, { \n                rowHeight: rowHeight,\n                rowPadding,\n                expandRow,\n            });\n        }\n\n        if (!row.hidden) {\n            top += row.height;\n        }\n        if (prevHeight !== row.height) {\n            result.changed = true;\n        }\n    }\n}\n\nfunction _layoutRow(tasks: SvelteTask[], row: SvelteRow, params: LayoutRowParams) {\n    if (!tasks.length) {\n        return;\n    }\n\n    tasks.sort(_byStartThenByLongestSortFn);\n\n    const others: { [yPos: number]: SvelteTask[] } = {};\n    const context: { [taskId: PropertyKey]: { yPos?: number; intersects?: boolean; } } = {};\n    const ctx = (task: SvelteTask) => context[task.model.id] ?? (context[task.model.id] = {});\n\n    let maxYPos = 0;\n\n    for (const task of tasks) {\n        const c = ctx(task);\n        c.yPos = 0;\n        let fits = false;\n        while (!fits) {\n            const othersAtYPos = others[c.yPos] || [];\n            fits = true;\n            for (const other of othersAtYPos) { // can use binary search to find this iterator\n                if (_intersects(task, other)) {\n                    ctx(task).intersects = ctx(other).intersects = true;\n                    c.yPos++;\n                    if (c.yPos > maxYPos) {\n                        maxYPos = c.yPos;\n                    }\n                    fits = false;\n                    break;\n                } else {\n                    continue;\n                }\n            }\n        }\n\n        if (!others[c.yPos]) {\n            others[c.yPos] = [];\n        }\n        others[c.yPos].push(task);\n\n    }\n\n    if (params.expandRow) {\n        const contentHeight = (row.model.height || params.rowHeight) - 2 * params.rowPadding;\n        row.height = contentHeight * (maxYPos + 1) + 2 * params.rowPadding;\n    \n        for (const task of tasks) {\n            const c = ctx(task);\n            task.height = contentHeight;\n            task.top = row.y + params.rowPadding + (task.height * c.yPos);\n        }\n    } else {\n        row.height = row.model.height || params.rowHeight;\n        const contentHeight = row.height - 2 * params.rowPadding;\n    \n        for (const task of tasks) {\n            const c = ctx(task);\n            task.height = contentHeight / (maxYPos + 1);\n            task.top = row.y + params.rowPadding + (task.height * c.yPos);\n        }\n    }\n}\n\n/** string intersection between tasks */\nfunction _intersects(left: SvelteTask, right: SvelteTask) {\n    return (left.left + left.width) > right.left && left.left < (right.left + right.width);\n}\n\nfunction _byStartThenByLongestSortFn(a: SvelteTask, b: SvelteTask) {\n    return (a.left - b.left) || ((b.left + b.width) - (a.left + a.width));\n}"
  },
  {
    "path": "packages/svelte-gantt/src/core/row.ts",
    "content": "export interface RowModel {\n    /**\n     * Id of row, every resource needs to have a unique one\n     */\n    id: PropertyKey;\n    label?: string;\n    classes?: string | string[];\n    contentHtml?: string;\n    height?: number;\n\n    /** \n     * enable dragging to row\n     * @deprecated use draggable\n     **/\n    enableDragging?: boolean;\n    /** \n     * enable dragging to row\n     **/\n    draggable?: boolean;\n    /** \n     * enable resizing on row\n     * @deprecated use resizable\n     */\n    enableResize?: boolean;\n    /** \n     * enable resizing on row\n     */\n    resizable?: boolean;\n\n    /** Child rows in expandable tree */\n    children?: RowModel[];\n    expanded?: boolean;\n    /** Content of row header, html string */\n    headerHtml?: string;\n    /**\n     * Class of icon in row header\n     * @deprecated\n     **/\n    iconClass?: string;\n    /**\n     * Url of image in row header\n     * @deprecated\n     **/\n    imageSrc?: string;\n}\n\nexport interface SvelteRow {\n    model: RowModel;\n\n    y: number;\n    height: number;\n    hidden?: boolean;\n    children?: SvelteRow[];\n    allChildren?: SvelteRow[];\n    parent?: SvelteRow;\n    allParents?: SvelteRow[];\n    childLevel?: number;\n}\n\nexport type CreateRowParams = {\n    rowHeight: number;\n}\n\nexport function createRows(rows: RowModel[], params: CreateRowParams) {\n    const context = { y: 0, result: [] };\n    createChildRows(rows, context, params);\n    return context.result;\n}\n\nfunction createChildRows(\n    rowModels: RowModel[],\n    context: { y: number; result: SvelteRow[] },\n    params: CreateRowParams,\n    parent: SvelteRow = null,\n    level: number = 0,\n    parents: SvelteRow[] = [],\n) {\n    const rowsAtLevel = [];\n    const allRows = [];\n\n    if (parent) {\n        parents = [...parents, parent];\n    }\n\n    for (const model of rowModels) {\n        const row = createRow(model, context.y, params);\n        context.result.push(row);\n        rowsAtLevel.push(row);\n        allRows.push(row);\n\n        row.childLevel = level;\n        row.parent = parent;\n        row.allParents = parents;\n        if (parent) {\n            // when row is hidden, other rows (y-pos) move upward\n            row.hidden = !(parent.model.expanded || parent.model.expanded == null) || parent.hidden != null && parent.hidden;\n        }\n\n        if (!row.hidden) {\n            context.y += row.height;\n        }\n\n        if (model.children) {\n            const nextLevel = createChildRows(\n                model.children,\n                context,\n                params,\n                row,\n                level + 1,\n                parents,\n            );\n            row.children = nextLevel.rows;\n            row.allChildren = nextLevel.allRows;\n            allRows.push(...nextLevel.allRows);\n        }\n    }\n\n    return {\n        rows: rowsAtLevel,\n        allRows\n    };\n}\n\nfunction createRow(model: RowModel, y: number, params: CreateRowParams): SvelteRow {\n    // defaults\n    // height of row element\n    const height = model.height ?? params.rowHeight;\n\n    return {\n        model: model,\n        y,\n        height,\n    };\n}\n\nexport function expandRow(row: SvelteRow) {\n    row.model.expanded = true;\n    if (row.children) show(row.children);\n}\n\nexport function collapseRow(row: SvelteRow) {\n    row.model.expanded = false;\n    if (row.children) hide(row.children);\n}\n\nfunction hide(children: SvelteRow[]) {\n    for (const row of children) {\n        if (row.children) hide(row.children);\n        row.hidden = true;\n    }\n}\n\nfunction show(children: SvelteRow[], hidden = false) {\n    for (const row of children) {\n        if (row.children) show(row.children, !row.model.expanded);\n        row.hidden = hidden;\n    }\n}"
  },
  {
    "path": "packages/svelte-gantt/src/core/selectionManager.ts",
    "content": "import type { EntityStore } from '../core/store';\nimport { writable } from 'svelte/store';\nimport type { SvelteTask } from '../core/task';\n\nexport class SelectionManager {\n    _selectedTasks = writable<{ [taskId: PropertyKey]: boolean; }>({});\n\n    constructor(private taskStore: EntityStore<SvelteTask>) {}\n\n    selectSingle(taskId) {\n        this.unSelectTasks();\n        this._selectedTasks.set({ [taskId]: true });\n    }\n\n    toggleSelection(taskId) {\n        this._selectedTasks.update(selections => ({\n            ...selections,\n            [taskId]: !selections[taskId]\n        }));\n    }\n\n    unSelectTasks() {\n        this._selectedTasks.set({});\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/store.ts",
    "content": "import { writable, derived } from 'svelte/store';\nimport type { Readable } from 'svelte/store';\nimport type { SvelteTask } from './task';\nimport type { SvelteRow } from './row';\nimport type { SvelteTimeRange } from './timeRange';\n\nexport interface EntityState<T, K = PropertyKey> {\n    ids: K[];\n    entities: { [key: PropertyKey]: T };\n}\n\ninterface EntityType<K = PropertyKey> {\n    model: { id: K };\n    hidden?: boolean;\n}\n\nexport type EntityKey = string | number | symbol;\n\nexport interface EntityStore<T extends EntityType, K extends EntityKey = EntityKey>\n    extends Readable<EntityState<T>> {\n    _update(updater: (value: EntityState<T>) => EntityState<T>): void;\n    add(entity: T): void;\n    addAll(entities: T[]): void;\n    update(entity: T): void;\n    upsert(entity: T): void;\n    upsertAll(entities: T[]): void;\n    delete(id: K): void;\n    deleteAll(ids: K[]): void;\n    refresh(): void;\n    set(value: EntityState<T>): void;\n    entities?: Record<K, T>;\n}\n\nfunction createEntityStore<T extends EntityType, K extends EntityKey = EntityKey>(): EntityStore<\n    T,\n    K\n> {\n    const { subscribe, set, update } = writable<EntityState<T>>({ ids: [], entities: {} });\n\n    return {\n        set,\n        _update: update,\n        subscribe,\n        add: (item: T) =>\n            update(({ ids, entities }) => ({\n                ids: [...ids, item.model.id],\n                entities: {\n                    ...entities,\n                    [item.model.id]: item\n                }\n            })),\n        delete: (id: K) =>\n            update(state => {\n                const { [id]: _, ...entities } = state.entities;\n                return {\n                    ids: state.ids.filter(i => i !== id),\n                    entities\n                };\n            }),\n        deleteAll: (ids: K[]) =>\n            update(state => {\n                const entities = { ...state.entities };\n                const idSet = new Set(ids);\n\n                for (let i = 0; i < state.ids.length; i++) {\n                    if (idSet.has(state.ids[i] as K)) {\n                        delete entities[state.ids[i]];\n                    }\n                }\n\n                return {\n                    ids: state.ids.filter(i => !idSet.has(i as K)),\n                    entities\n                };\n            }),\n        update: (item: T) =>\n            update(({ ids, entities }) => ({\n                ids,\n                entities: {\n                    ...entities,\n                    [item.model.id]: item\n                }\n            })),\n        upsert: (item: T) =>\n            update(({ ids, entities }) => {\n                const hasIndex = ids.indexOf(item.model.id) !== -1;\n\n                return {\n                    ids: hasIndex ? ids : [...ids, item.model.id],\n                    entities: {\n                        ...entities,\n                        [item.model.id]: item\n                    }\n                };\n            }),\n        upsertAll: (items: T[]) =>\n            update(state => {\n                const entities = { ...state.entities };\n                const ids = [...state.ids];\n\n                for (let i = 0; i < items.length; i++) {\n                    if (ids.indexOf(items[i].model.id) === -1) {\n                        ids.push(items[i].model.id);\n                    }\n                    entities[items[i].model.id] = items[i];\n                }\n\n                return {\n                    ids,\n                    entities\n                };\n            }),\n        addAll: (items: T[]) => {\n            const ids = [];\n            const entities = {};\n\n            for (let i = 0; i < items.length; i++) {\n                ids.push(items[i].model.id);\n                entities[items[i].model.id] = items[i];\n            }\n\n            set({ ids, entities });\n        },\n        refresh: () => update(store => ({ ...store }))\n    };\n}\n\nexport function all<T extends EntityType>(store: EntityStore<T>): Readable<T[]> {\n    return derived(store, ({ ids, entities }) => {\n        const results = [];\n        for (let i = 0; i < ids.length; i++) {\n            results.push(entities[ids[i]]);\n        }\n        return results;\n    });\n}\n\nexport function where<T extends EntityType>(\n    store: EntityStore<T>,\n    filterFn: (value: T) => boolean\n): Readable<T[]> {\n    return derived(store, ({ ids, entities }) => {\n        const results = [];\n        for (let i = 0; i < ids.length; i++) {\n            if (filterFn(entities[ids[i]])) {\n                results.push(entities[ids[i]]);\n            }\n        }\n        return results;\n    });\n}\n\nexport function createDataStore() {\n    const taskStore = createEntityStore<SvelteTask>();\n    const rowStore = createEntityStore<SvelteRow>();\n    const timeRangeStore = createEntityStore<SvelteTimeRange>();\n\n    const allTasks = all(taskStore);\n    const allRows = all(rowStore);\n    const allTimeRanges = all(timeRangeStore);\n\n    const rowTaskCache = derived(allTasks, $allTasks => {\n        const cache = {};\n        for (let i = 0; i < $allTasks.length; i++) {\n            const task = $allTasks[i];\n            if (!cache[task.model.resourceId]) {\n                cache[task.model.resourceId] = [];\n            }\n            cache[task.model.resourceId].push(task.model.id);\n        }\n        return cache;\n    });\n\n    return {\n        taskStore,\n        rowStore,\n        timeRangeStore,\n        allTasks,\n        allRows,\n        allTimeRanges,\n        rowTaskCache\n    };\n}\n\nexport type GanttDataStore = ReturnType<typeof createDataStore>;\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/task.ts",
    "content": "import type { SvelteRow } from './row';\n\nexport interface TaskModel {\n    /** id of task, every task needs to have a unique one */\n    id: PropertyKey;\n    resourceId: PropertyKey;\n    /** date task starts on */\n    from: number; // date\n    /** date task ends on */\n    to: number; // date\n\n    /**\n     * completion %, indicated on task\n     * @deprecated\n     */\n    amountDone?: number;\n\n    /** css classes */\n    classes?: string | string[];\n    /** label of task */\n    label?: string;\n\n    /** html content of task, will override label */\n    html?: string;\n\n    /**  \n     * show button bar \n     * @deprecated \n     **/\n    showButton?: boolean;\n\n    /**  \n     * button classes, useful for fontawesome icons \n     * @deprecated \n     **/\n    buttonClasses?: string | string[];\n\n    /**\n     * html content of button\n     * @deprecated \n     */\n    buttonHtml?: string;\n\n    /** \n     * enable dragging of task\n     * @deprecated use draggable\n     **/\n    enableDragging?: boolean;\n    /** \n     * enable dragging of task\n     **/\n    draggable?: boolean;\n    /** \n     * enable resizing of task\n     * @deprecated use resizable\n     */\n    enableResize?: boolean;\n    /** \n     * enable resizing of task\n     */\n    resizable?: boolean;\n\n    /**  \n     * label displayed below\n     * @deprecated \n     **/\n    labelBottom?: string;\n    type?: 'milestone' | 'task';\n    stickyLabel?: boolean;\n}\n\nexport interface SvelteTask {\n    model: TaskModel;\n\n    left: number;\n    top: number;\n    width: number;\n\n    height: number;\n\n    /* tree fields */\n    reflected?: boolean;\n    reflectedOnParent?: boolean;\n    reflectedOnChild?: boolean;\n    originalId?: PropertyKey;\n}\n\ntype CreateTaskParams = {\n    rowPadding: number;\n    rowEntities: { [rowId: PropertyKey]: SvelteRow };\n    getPositionByDate(date: any): number;\n}\n\nexport function createTaskFactory(params: CreateTaskParams) {\n    return {\n        createTask: (model: TaskModel) => createTask(model, params),\n        reflectTask: (task: SvelteTask, targetRow: SvelteRow) => reflectTask(task, targetRow, params),\n    }\n}\n\nexport function createTask(model: TaskModel, params: CreateTaskParams): SvelteTask {\n    model.amountDone = model.amountDone ?? 0;\n    model.showButton = model.showButton ?? false;\n    model.buttonClasses = model.buttonClasses ?? '';\n    model.buttonHtml = model.buttonHtml ?? '';\n\n    const left = params.getPositionByDate(model.from) | 0;\n    const right = params.getPositionByDate(model.to) | 0;\n\n    const row = params.rowEntities[model.resourceId];\n    const height = (row ? row.height : undefined) - 2 * params.rowPadding;\n    const top = (row ? row.y : -1000) + params.rowPadding;\n\n    return {\n        model,\n        left: left,\n        width: right - left,\n        height,\n        top,\n    };\n}\n\nexport function overlap(left: SvelteTask, right: SvelteTask) {\n    return !(left.left + left.width <= right.left || left.left >= right.left + right.width);\n}\n\nexport function reflectTask(task: SvelteTask, targetRow: SvelteRow, params: CreateTaskParams): SvelteTask {\n    const reflectedId = `reflected-task-${String(task.model.id)}-${String(targetRow.model.id)}`;\n\n    const model = {\n        ...task.model,\n        resourceId: targetRow.model.id,\n        id: reflectedId as PropertyKey,\n        enableDragging: false\n    };\n\n    return {\n        ...task,\n        model,\n        top: targetRow.y + params.rowPadding,\n        reflected: true,\n        reflectedOnParent: false,\n        reflectedOnChild: true,\n        originalId: task.model.id\n    };\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/core/timeRange.ts",
    "content": "import type { ColumnService } from './column';\n\nexport interface TimeRangeModel {\n    id: number; // | string;\n    from: any; // date\n    to: any; // date\n\n    classes?: string | string[];\n    label?: string;\n    resizable?: boolean;\n}\n\nexport interface SvelteTimeRange {\n    model: TimeRangeModel;\n    left: number;\n    width: number;\n    resizing: boolean;\n}\n\nexport class TimeRangeFactory {\n    columnService: ColumnService;\n\n    constructor(columnService: ColumnService) {\n        this.columnService = columnService;\n    }\n\n    create(model: TimeRangeModel): SvelteTimeRange {\n        // enable dragging\n        model.resizable = model.resizable === undefined ? true : model.resizable;\n\n        const left = this.columnService.getPositionByDate(model.from);\n        const right = this.columnService.getPositionByDate(model.to);\n\n        return {\n            model,\n            left: left,\n            width: right - left,\n            resizing: false\n        };\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/Row.svelte",
    "content": "<script lang=\"ts\">\n    import { normalizeClassAttr } from '../utils/dom';\n    import type { SvelteRow } from '../core/row';\n    import { getContext } from 'svelte';\n    export let row: SvelteRow;\n    const { hoveredRow, selectedRow } = getContext('gantt');\n\n    $: classes = normalizeClassAttr(row.model.classes);\n</script>\n\n<div\n    class=\"sg-row {classes}\"\n    data-row-id={row.model.id}\n    class:sg-hover={$hoveredRow == row.model.id}\n    class:sg-selected={$selectedRow == row.model.id}\n    style=\"height:{row.height}px\"\n>\n    {#if row.model.contentHtml}\n        {@html row.model.contentHtml}\n    {/if}\n</div>\n\n<style>\n    .sg-row {\n        position: relative;\n        width: 100%;\n        box-sizing: border-box;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/Task.d.ts",
    "content": "// declare module '*.svelte' {\n//     export { SvelteComponentDev as default } from 'svelte/internal';\n// }\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/Task.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import type { TaskModel } from '../core/task';\n    import { normalizeClassAttr } from '../utils/dom';\n    import { isResizable } from '../utils/utils';\n\n    export let model: TaskModel;\n    export let height: number;\n    export let left: number;\n    export let top: number;\n    export let width: number;\n    export let reflected = false;\n    export let animating = true;\n\n    export let dragging = false;\n    export let resizing = false;\n\n    const { rowStore } = getContext('dataStore');\n    const { taskContent, onTaskButtonClick, taskElementHook } = getContext('options');\n    const { selectionManager } = getContext('services');\n\n    const selectedTasks = selectionManager._selectedTasks;\n\n    let _ignoreClick = false;\n\n    function taskElement(node, model) {\n        if (taskElementHook) {\n            return taskElementHook(node, model);\n        }\n    }\n\n    function onClick(event: MouseEvent) {\n        if (onTaskButtonClick) {\n            onTaskButtonClick(model, event);\n        }\n    }\n\n    $: classes = model.classes ? normalizeClassAttr(model.classes) : 'sg-task-default';\n\n    let resizeEnabled: boolean;\n    $: {\n        const row = $rowStore.entities[model.resourceId];\n        resizeEnabled = model.type !== 'milestone' && row && isResizable(row.model) && isResizable(model);\n    }\n\n    let _moving: boolean;\n    $: {\n        _moving = dragging || resizing;\n    }\n</script>\n\n<div\n    data-task-id={model.id}\n    use:taskElement={model}\n    class=\"sg-task {classes}\"\n    class:sg-milestone={model.type === 'milestone'}\n    style=\"width:{width}px; height:{height}px; left: {left}px; top: {top}px;\"\n    class:moving={_moving}\n    class:animating={animating}\n    class:sg-task-reflected={reflected}\n    class:sg-task-selected={$selectedTasks[model.id]}\n    class:resize-enabled={resizeEnabled}\n    class:sg-task--sticky={model.stickyLabel}\n    class:sg-ignore-click={_ignoreClick}\n    class:sg-task-instant={width === 0}\n    on:pointerdown\n>\n    {#if model.type === 'milestone'}\n        <div class=\"sg-milestone__diamond\"></div>\n    {/if}\n    {#if model.amountDone}\n        <div class=\"sg-task-background\" style=\"width:{model.amountDone}%\" />\n    {/if}\n    <div class=\"sg-task-content\">\n        {#if model.html}\n            {@html model.html}\n        {:else if taskContent}\n            {@html taskContent(model)}\n        {:else}\n            {model.label}\n        {/if}\n        {#if model.showButton}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <span\n                class=\"sg-task-button {model.buttonClasses}\"\n                on:click={onClick}\n                role=\"button\"\n                tabindex=\"0\"\n            >\n                {@html model.buttonHtml}\n            </span>\n        {/if}\n    </div>\n\n    {#if model.labelBottom}\n        <span class=\"sg-label-bottom\">{model.labelBottom}</span>\n    {/if}\n</div>\n\n<style>\n    .sg-label-bottom {\n        position: absolute;\n        top: calc(100% + 10px);\n        color: #888;\n    }\n\n    .sg-task {\n        position: absolute;\n        border-radius: 2px;\n\n        white-space: nowrap;\n        /* overflow: hidden; */\n\n        transition:\n            background-color 0.2s,\n            opacity 0.2s;\n        pointer-events: all;\n        /* disable mobile pan/zoom on drag */\n        touch-action: none;\n    }\n\n    .sg-task-background {\n        position: absolute;\n        height: 100%;\n        top: 0;\n    }\n\n    .sg-task-content {\n        position: absolute;\n        height: 100%;\n        top: 0;\n\n        padding-left: 14px;\n        font-size: 14px;\n        display: flex;\n        align-items: center;\n        justify-content: flex-start;\n        user-select: none;\n    }\n\n    .sg-task.animating:not(.moving),\n    .sg-task--sticky:not(.moving) {\n        transition:\n            left 0.2s,\n            top 0.2s,\n            transform 0.2s,\n            background-color 0.2s,\n            width 0.2s,\n            height 0.2s;\n    }\n\n    .sg-task--sticky > .sg-task-content {\n        position: sticky;\n        left: 0;\n        max-width: 100px;\n    }\n\n    .sg-task.moving {\n        z-index: 10000;\n        opacity: 0.5;\n    }\n\n    .sg-task.resize-enabled:hover::before,\n    .sg-task.resize-enabled:hover::after {\n        content: '';\n        width: 4px;\n        height: 50%;\n        top: 25%;\n        position: absolute;\n        border-style: solid;\n        border-color: var(--sg-task-resize-color);\n        cursor: ew-resize;\n        border-width: 0 1px;\n        z-index: 1;\n    }\n\n    .sg-task.resize-enabled:hover::before {\n        margin-left: 3px;\n        left: 0;\n    }\n\n    .sg-task.resize-enabled:hover::after {\n        margin-right: 3px;\n        right: 0;\n    }\n\n    .sg-task-reflected {\n        opacity: 0.5;\n    }\n\n    .sg-task-instant {\n        width: 2px !important;\n        margin-left: -1px;\n    }\n\n    .sg-task-background {\n        background: rgba(0, 0, 0, 0.2);\n    }\n\n    :global(.sg-task-default) {\n        color: white;\n        background: rgb(116, 191, 255);\n    }\n\n    :global(.sg-task-default:hover) {\n        background: rgb(98, 161, 216);\n    }\n\n    :global(.sg-task-default.selected) {\n        background: rgb(69, 112, 150);\n    }\n\n    :global(.sg-task-selected) {\n        outline: 2px solid var(--sg-task-selected-outline-color);\n        outline-offset: 3px;\n        z-index: 1;\n    }\n\n    .sg-milestone {\n        /* height: 20px; */\n        width: 20px !important;\n        min-width: 40px;\n        margin-left: -20px;\n    }\n\n    .sg-task.sg-milestone {\n        background: transparent;\n    }\n\n    .sg-milestone .sg-milestone__diamond {\n        position: relative;\n    }\n\n    .sg-milestone .sg-milestone__diamond:before {\n        position: absolute;\n        top: 0;\n        left: 50%;\n        content: ' ';\n        height: 28px;\n        width: 28px;\n        transform-origin: 0 0;\n        transform: rotate(45deg);\n    }\n\n    :global(.sg-milestone__diamond:before) {\n        background: rgb(116, 191, 255);\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/TimeRange.svelte",
    "content": "<script lang=\"ts\">\n    import { normalizeClassAttr } from '../utils/dom';\n\n    export let model;\n    export let left;\n    export let width;\n    export let resizing = false;\n\n    $: classes = normalizeClassAttr(model.classes);\n</script>\n\n<div\n    class=\"sg-time-range {classes}\"\n    class:moving={resizing}\n    style=\"width:{width}px;left:{left}px\"\n>\n    {#if model.label}\n        <div class=\"sg-time-range-label\">{model.label}</div>\n    {/if}\n</div>\n\n<style>\n    .sg-time-range {\n        height: 100%;\n        position: absolute;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n\n        background-image: linear-gradient(\n            -45deg,\n            transparent 46%,\n            #e03218 49%,\n            #e03218 51%,\n            transparent 55%\n        );\n        background-size: 6px 6px !important;\n        font-weight: 400;\n    }\n\n    .sg-time-range-label {\n        margin-top: 10px;\n        background: #fff;\n        color: red;\n        white-space: nowrap;\n        padding: 4px;\n        font-weight: 400;\n        font-size: 10px;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/TimeRangeHeader.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import { useDraggable } from '../core/drag';\n    import { normalizeClassAttr } from '../utils/dom';\n    import { isResizable } from '../utils/utils';\n\n    const { rowContainer } = getContext('gantt');\n    const { api, utils, columnService } = getContext('services');\n    const { resizeHandleWidth } = getContext('options');\n    const { timeRangeStore } = getContext('dataStore');\n\n    export let model;\n    export let width;\n    export let left;\n\n    const _position = {\n        width,\n        x: left\n    };\n    $: {\n        (_position.x = left), (_position.width = width);\n    }\n\n    function drag(node) {\n        const ondrop = event => {\n            const newFrom = utils.roundTo(columnService.getDateByPosition(event.x));\n            const newTo = utils.roundTo(columnService.getDateByPosition(event.x + event.width));\n            const newLeft = columnService.getPositionByDate(newFrom);\n            const newRight = columnService.getPositionByDate(newTo);\n\n            Object.assign(model, {\n                from: newFrom,\n                to: newTo\n            });\n\n            update({\n                left: newLeft,\n                width: newRight - newLeft,\n                model,\n                resizing: false\n            });\n            api.timeranges.raise.changed({ model, left: event.x, width: event.width });\n\n            window.removeEventListener('pointermove', onmousemove, false);\n        };\n\n        function update(state) {\n            timeRangeStore.update(state);\n            _position.x = state.left;\n            _position.width = state.width;\n        }\n\n        const draggable = useDraggable(node, {\n            onDown: event => {\n                api.timeranges.raise.clicked({ model });\n                update({\n                    left: event.x,\n                    width: event.width,\n                    model,\n                    resizing: true\n                });\n            },\n            onResize: event => {\n                api.timeranges.raise.resized({ model, left: event.x, width: event.width });\n                update({\n                    left: event.x,\n                    width: event.width,\n                    model,\n                    resizing: true\n                });\n            },\n            dragAllowed: false,\n            resizeAllowed: () => isResizable(model),\n            onDrop: ondrop,\n            container: rowContainer,\n            resizeHandleWidth,\n            getX: () => _position.x,\n            getY: () => 0,\n            getWidth: () => _position.width\n        });\n\n        return { destroy: () => draggable.destroy() };\n    }\n\n    let classes;\n    $: {\n        classes = normalizeClassAttr(model.classes);\n    }\n</script>\n\n<div\n    class=\"sg-time-range-control {classes}\"\n    style=\"width:{_position.width}px;left:{_position.x}px\"\n    class:sg-time-range-disabled={!isResizable(model)}\n>\n    <div class=\"sg-time-range-handle-left\" use:drag></div>\n    <div class=\"sg-time-range-handle-right\" use:drag></div>\n</div>\n\n<style>\n    .sg-time-range-control {\n        position: absolute;\n    }\n\n    .sg-time-range-handle-left {\n        position: absolute;\n        left: 0;\n    }\n\n    .sg-time-range-handle-right {\n        position: absolute;\n        right: 0;\n    }\n\n    .sg-time-range-disabled {\n        display: none;\n    }\n\n    .sg-time-range-handle-left::before,\n    .sg-time-range-handle-right::before {\n        position: absolute;\n        content: '';\n        bottom: 4px;\n        border-radius: 6px 6px 6px 0;\n        border: 2px solid #b0b0b7;\n        width: 9px;\n        height: 9px;\n        transform: translateX(-50%) rotate(-45deg);\n        background-color: #fff;\n\n        border-color: #e03218;\n        cursor: ew-resize;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/entities/index.ts",
    "content": "import Task from './Task.svelte';\nimport Row from './Row.svelte';\nimport TimeRange from './TimeRange.svelte';\nimport TimeRangeHeader from './TimeRangeHeader.svelte';\n\nexport { Task, Row, TimeRange, TimeRangeHeader };\n"
  },
  {
    "path": "packages/svelte-gantt/src/gantt.ts",
    "content": "import type { ColumnService } from './core/column';\nimport type { GanttApi } from './core/api';\nimport type { RowModel, SvelteRow } from './core/row';\nimport type { TaskModel, SvelteTask } from './core/task';\nimport type { TimeRangeModel, TimeRangeFactory } from './core/timeRange';\nimport type { GanttUtils } from './utils/utils';\nimport type { DependencyModel } from './modules/dependencies';\nimport type { TableHeader } from './modules/table/tableHeader';\nimport type { SvelteGanttDateAdapter } from './utils/date';\nimport type { Writable, Readable } from 'svelte/store';\nimport { SelectionManager } from './core/selectionManager';\n\nexport interface Header {\n    unit: string;\n    format: string;\n    offset?: number;\n    sticky?: boolean;\n}\n\nexport interface GanttContextDimensions {\n    from: Writable<Date>;\n    to: Writable<Date>;\n    width: Writable<number>;\n    dateAdapter: SvelteGanttDateAdapter;\n    visibleWidth: Writable<number>;\n    visibleHeight: Writable<number>;\n    headerHeight: Writable<number>;\n    bottomScrollbarVisible: Writable<number>;\n    rightScrollbarVisible: Writable<number>;\n}\n\nexport interface GanttContext {\n    scrollables: any[]; // eslint-disable-line @typescript-eslint/no-explicit-any\n    hoveredRow: Writable<PropertyKey>;\n    selectedRow: Writable<PropertyKey>;\n    rowContainer: HTMLElement;\n    mainContainer: HTMLElement;\n    mainHeaderContainer: HTMLElement;\n    updateLayout();\n    expandRow(row: SvelteRow);\n    collapseRow(row: SvelteRow);\n    invalidatePosition(options: InvalidatePositionOptions);\n}\n\nexport type InvalidatePositionOptions = {\n    task?: SvelteTask;\n    row?: SvelteRow;\n};\n\nexport interface GanttContextServices {\n    utils: GanttUtils;\n    api: GanttApi;\n    selectionManager: SelectionManager;\n    columnService: ColumnService;\n}\n\nexport interface GanttContextOptions {\n    dateAdapter: SvelteGanttDateAdapter;\n    taskElementHook?: TaskElementHook;\n    taskContent?: TaskContentTemplate;\n    rowPadding: Writable<number>;\n    rowHeight: Writable<number>;\n    layout: Readable<'overlap' | 'pack'>;\n    resizeHandleWidth: number;\n    reflectOnParentRows: boolean;\n    reflectOnChildRows: boolean;\n    onTaskButtonClick?: TaskButtonClickHandler;\n}\n\ninterface Zoom {\n    headers: Header[];\n    minWidth: number;\n    fitWidth: boolean;\n}\n\ninterface highlightedDurations {\n    unit: string;\n    fractions: number[];\n}\n\ntype TaskButtonClickHandler = (task: TaskModel, event?: MouseEvent) => void;\ntype TaskContentTemplate = (task: TaskModel) => string;\ntype TaskElementHook = (task: SvelteTask, element: HTMLElement) => void;\n\nexport interface SvelteGanttOptions {\n    /**\n     * Rows to load in the gantt\n     */\n    rows?: RowModel[];\n    /**\n     * Tasks that display in the gantt\n     */\n    tasks?: TaskModel[];\n    /**\n     * Timeranges that display in the gantt\n     */\n    timeRanges?: TimeRangeModel[];\n    /**\n     * Dependencies that display in the gantt, used with the SvelteGanttDependencies module\n     */\n    dependencies?: DependencyModel[];\n    /** datetime timeline starts on, date */\n    from?: number;\n    /** datetime timeline ends on, date */\n    to?: number;\n    /** Minimum width of main gantt area in px */\n    minWidth?: number;\n    /** should timeline stretch width to fit */\n    fitWidth?: boolean;\n    /** minimum unit of time task date values will round to */\n    magnetUnit?: string;\n    /** amount of units task date values will round to */\n    magnetOffset?: number;\n    /** duration unit of columns */\n    columnUnit?: string;\n    /** duration width of column */\n    columnOffset?: number;\n    /** width of strokes seperating the columns in ganttbody */\n    columnStrokeWidth?: number;\n    /** color of strokes seperating the columns in ganttbody */\n    columnStrokeColor?: string;\n    /** object including a unit and fractions of that unit that should be highlighted eg. {unit: 'days', fractions: [0,6]} -> will highlight weekends.\n     *  highlighting will only work correctly if highlighted unit is the same or a constant fraction of the column unit eg. days, hours, minutes in the above.\n     */\n    highlightedDurations?: highlightedDurations;\n    /**\n     * list of headers used for main gantt area\n     *  - unit: time unit used, e.g. day will create a cell in the header for each day in the timeline\n     *  - format: datetime format used for header cell label\n     **/\n    headers?: Header[];\n    /**\n     * List of zoom levels for gantt. Gantt cycles trough these parameters on ctrl+scroll.\n     */\n    zoomLevels?: Zoom[];\n    /** height of a single row in px */\n    rowHeight?: number;\n    rowPadding?: number;\n    /** modules used in gantt */\n    ganttTableModules?: any[]; // eslint-disable-line @typescript-eslint/no-explicit-any\n    ganttBodyModules?: any[]; // eslint-disable-line @typescript-eslint/no-explicit-any\n    /**\n     * When task is assigned to a child row display them on parent rows as well, used when rows are disabled as a tree.\n     */\n    reflectOnParentRows?: boolean;\n    /**\n     * When task is assigned to a parent row display them on child rows as well, used when rows are disabled as a tree.\n     */\n    reflectOnChildRows?: boolean;\n    /** sets top level gantt class which can be used for styling */\n    classes?: string | string[];\n    /** width of handle for resizing task */\n    resizeHandleWidth?: number;\n    /** handler of button clicks */\n    onTaskButtonClick?: TaskButtonClickHandler; // e.g. (task) => {debugger},\n    /** task content factory function */\n    taskContent?: TaskContentTemplate; // e.g. (task) => '<div>Custom task content</div>'\n    /** task element hook */\n    taskElementHook?: (node: HTMLElement, task: SvelteTask) => { update?(task); destroy?() };\n    /**\n     * Width of table, used with SvelteGanttTable module\n     */\n    tableWidth?: number;\n    /**\n     * Headers of table, used with SvelteGanttTable module\n     */\n    tableHeaders?: TableHeader[];\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/index.ts",
    "content": "import type { ComponentProps } from 'svelte';\n\nimport SvelteGantt from './Gantt.svelte';\nimport { SvelteGanttTable } from './modules/table';\nimport { SvelteGanttDependencies } from './modules/dependencies';\nimport { SvelteGanttExternal } from './modules/external/external';\nimport { MomentSvelteGanttDateAdapter } from './utils/momentDateAdapter';\n\nexport {\n    SvelteGantt,\n    SvelteGanttTable,\n    SvelteGanttDependencies,\n    SvelteGanttExternal,\n    MomentSvelteGanttDateAdapter\n};\n\ntype SvelteGanttComponent = SvelteGantt;\n\ntype SvelteGanttOptions = ComponentProps<SvelteGantt>;\n\nexport type { SvelteGanttComponent, SvelteGanttOptions };\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/create-tasks.ts",
    "content": "import { ColumnService } from '../core/column';\nimport { getRelativePos, getRelativePosition } from '../utils/dom';\nimport { GanttUtils } from '../utils/utils';\nimport { getContext } from 'svelte';\n\ntype Options = {\n    enabled?: boolean;\n    container: HTMLElement;\n    boundsContainer?: HTMLElement;\n    onMove(e: MoveEvent): void;\n    onEnd(e: MoveEvent): void;\n}\n\ntype InnerOptions = Options & {\n    columnService: ColumnService;\n    utils: GanttUtils;\n}\n\nexport type MoveEvent = {\n    from: number;\n    to: number;\n    x: number;\n    y: number;\n    width: number;\n}\n\nexport function useCreateTask() {\n    const { columnService, utils } = getContext('services');\n\n    return function createTaskActionBound(node: HTMLElement, options: Options) {\n        return createTaskAction(node, {\n            columnService,\n            utils,\n            ...options,\n        });\n    }\n}\n\nconst MIN_DRAG_X = 2;\nconst MIN_DRAG_Y = 2;\n\nfunction createTaskAction(node: HTMLElement, options: InnerOptions) {\n    let startX: number;\n    let startFrom: number;\n    let mouseStartRight: number;\n\n    let direction: 'left' | 'right';\n\n    let initialX: number;\n    let initialY: number;\n    let triggered = false;\n\n    /** dragging will not activate around the edges */\n    let deadZone = 10;\n\n    const container = () => options.container;\n\n    function isNearEdge(x: number, y: number) {\n        const rect = options.boundsContainer.getBoundingClientRect();\n        const nearBottomEdge = y - rect.top >= rect.height - deadZone;\n        const nearRightEdge = x - rect.left >= rect.width - deadZone;\n        return nearBottomEdge || nearRightEdge;\n    }\n\n    function onMousedown(event: MouseEvent) {\n        if (!options.enabled) {\n            return;\n        }\n\n        event.stopPropagation();\n        event.preventDefault();\n\n        if (isNearEdge(event.clientX, event.clientY)) {\n            return;\n        }\n\n        const [mousePosX, _] = getRelativePosition(container(), event);\n\n        const from = startFrom = options.utils.roundTo(options.columnService.getDateByPosition(mousePosX));\n        const x = startX = options.columnService.getPositionByDate(from) | 0;\n        const width = 0;\n\n        initialX = event.clientX;\n        initialY = event.clientY;\n\n        mouseStartRight = x + width;\n\n        window.addEventListener('pointermove', onMousemove, false);\n        window.addEventListener('pointerup', onMouseup);\n    };\n\n    function onMousemove(event: MouseEvent) {\n        if (!triggered) {\n            if (Math.abs(event.clientX - initialX) > MIN_DRAG_X || Math.abs(event.clientY - initialY) > MIN_DRAG_Y) {\n                triggered = true;\n            } else {\n                return;\n            }\n        }\n\n        event.preventDefault();\n\n        const { x, width, y } = getValues(event);\n        options.onMove({\n            from: startFrom,\n            to: startFrom,\n            x,\n            width,\n            y,\n        });\n    };\n\n    function getValues(event: MouseEvent) {\n        const mousePos = getRelativePos(container(), event);\n        const x = startX;\n        const width = 0;\n\n        let resultX: number;\n        let resultWidth: number;\n\n        if (direction === 'left') {\n            if (mouseStartRight - mousePos.x <= 0) {\n                direction = 'right';\n\n                resultX = mouseStartRight;\n                resultWidth = mouseStartRight - mousePos.x;\n                mouseStartRight = mouseStartRight + width;\n            } else {\n                resultX = mousePos.x;\n                resultWidth = mouseStartRight - mousePos.x;\n            }\n        } else { // if (direction === 'right')\n            //resize right\n            if (mousePos.x - x <= 0) {\n                direction = 'left';\n                resultX = mousePos.x;\n                resultWidth = mousePos.x - x;\n                mouseStartRight = x;\n            } else {\n                resultX = x;\n                resultWidth = mousePos.x - x;\n            }\n        }\n\n        return { x: resultX, width: resultWidth, y: mousePos.y };\n    }\n\n    function onMouseup(event: MouseEvent) {\n        window.removeEventListener('pointerup', onMouseup);\n        window.removeEventListener('pointermove', onMousemove, false);\n\n        if (triggered) {\n            const { x, width, y } = getValues(event);\n\n            const newFrom = options.utils.roundTo(options.columnService.getDateByPosition(x));\n            const newTo = options.utils.roundTo(options.columnService.getDateByPosition(x + width));\n            const newLeft = options.columnService.getPositionByDate(newFrom) | 0;\n            const newRight = options.columnService.getPositionByDate(newTo) | 0;\n\n            options.onEnd({\n                from: newFrom,\n                to: newTo,\n                x: newLeft,\n                width: newRight - newLeft,\n                y,\n            });\n        }\n\n        mouseStartRight = null;\n\n        initialX = null;\n        initialY = null;\n        triggered = false;\n    };\n\n    node.addEventListener('pointerdown', onMousedown);\n\n    return {\n        destroy() {\n            node.removeEventListener('pointerdown', onMousedown);\n            window.removeEventListener('pointermove', onMousemove);\n            window.removeEventListener('pointerup', onMouseup);\n        },\n        update(opts: Options) {\n            Object.assign(options, opts);\n        },\n    }\n}"
  },
  {
    "path": "packages/svelte-gantt/src/modules/dependencies/Dependency.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    const { rowStore, taskStore } = getContext('dataStore');\n\n    export let id;\n    export let fromId;\n    export let toId;\n    export let stroke: string = undefined;\n    export let strokeWidth: number = undefined;\n\n    const MIN_LEN = 12;\n    const ARROW_SIZE = 5;\n\n    let arrowPath;\n    let path;\n\n    let fromTask;\n    let isFromRowHidden;\n    let toTask;\n    let isToRowHidden;\n\n    $: {\n        fromTask = $taskStore.entities[fromId];\n        isFromRowHidden = $rowStore.entities[fromTask.model.resourceId].hidden;\n        toTask = $taskStore.entities[toId];\n        isToRowHidden = $rowStore.entities[toTask.model.resourceId].hidden;\n\n        let startY = fromTask.top + fromTask.height / 2;\n        let startX = fromTask.left + fromTask.width;\n        let endY = toTask.top + toTask.height / 2;\n        let endX = toTask.left;\n        let width = endX - startX;\n        let height = endY - startY;\n\n        if (isFromRowHidden) {\n            path = `M${endX} ${endY}`;\n            if (startX + MIN_LEN >= endX && startY != endY) {\n                path += `L ${endX + 1.5 - MIN_LEN} ${endY}`;\n            } else {\n                path += `L ${endX + 1.5 - width / 2} ${endY}`;\n            }\n            path += `m -2 -2 a 2 2 0 1 1 0 4 a 2 2 0 1 1 0 -4`;\n            arrowPath = `M${toTask.left - ARROW_SIZE}  ${\n                toTask.top + toTask.height / 2 - ARROW_SIZE\n            } \n                            L${toTask.left} ${toTask.top + toTask.height / 2} \n                            L${toTask.left - ARROW_SIZE} ${\n                                toTask.top + toTask.height / 2 + ARROW_SIZE\n                            } Z`;\n        } else if (isToRowHidden) {\n            path = `M${startX} ${startY}`;\n            if (startX + MIN_LEN >= endX && startY != endY) {\n                path += `L ${startX + 1.5 + MIN_LEN} ${startY}`;\n            } else {\n                path += `L ${startX + 1.5 + width / 2} ${startY}`;\n            }\n            path += `m -2 -2 a 2 2 0 1 1 0 4 a 2 2 0 1 1 0 -4`;\n            arrowPath = ``;\n        } else if (!isFromRowHidden && !isToRowHidden) {\n            path = `M${startX} ${startY}`;\n            if (startX + MIN_LEN >= endX && startY != endY) {\n                path += `L ${startX + MIN_LEN} ${startY} \n                            L ${startX + MIN_LEN} ${startY + height / 2}\n                            L ${endX - MIN_LEN} ${startY + height / 2}\n                            L ${endX - MIN_LEN} ${endY}\n                            L ${endX - 2} ${endY}`;\n            } else {\n                path += `L ${startX + width / 2} ${startY} \n                            L ${startX + width / 2} ${endY}\n                            L ${endX - 2} ${endY}`;\n            }\n            arrowPath = `M${toTask.left - ARROW_SIZE} ${\n                toTask.top + toTask.height / 2 - ARROW_SIZE\n            } \n                            L${toTask.left} ${toTask.top + toTask.height / 2} \n                            L${toTask.left - ARROW_SIZE} ${\n                                toTask.top + toTask.height / 2 + ARROW_SIZE\n                            } Z`;\n        }\n    }\n</script>\n\n{#if (!isFromRowHidden && !isToRowHidden) || isFromRowHidden !== isToRowHidden}\n    <div class=\"sg-dependency\" style=\"left:0;top:0\" data-dependency-id={id}>\n        <svg\n            class=\"sg-arrow\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            shape-rendering=\"crispEdges\"\n            height=\"100%\"\n            width=\"100%\"\n        >\n            <path class=\"sg-arrow-path select-area\" d={path} style:stroke={stroke} style:stroke-width={strokeWidth != null ? `${strokeWidth}px` : null} />\n            <path class=\"sg-arrow-head\" d={arrowPath} style:fill={stroke} />\n        </svg>\n    </div>\n{/if}\n\n<style>\n    .sg-dependency {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n    }\n\n    .sg-arrow {\n        position: absolute;\n        left: 0px;\n        pointer-events: none;\n    }\n\n    :global(path.sg-arrow-path) {\n        stroke: var(--sg-dependency-arrow-color);\n        fill: transparent;\n        stroke-width: 2px;\n    }\n\n    :global(.sg-arrow-head) {\n        fill: var(--sg-dependency-arrow-color);\n    }\n\n    .select-area {\n        pointer-events: visible;\n        position: absolute;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/dependencies/GanttDependencies.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from 'svelte';\n\n    import Dependency from './Dependency.svelte';\n\n    const { visibleHeight } = getContext('dimensions');\n    const { taskStore } = getContext('dataStore');\n\n    export let paddingTop;\n    export let dependencies = [];\n\n    let visibleDependencies = [];\n    $: {\n        const result = [];\n        for (let i = 0; i < dependencies.length; i++) {\n            const dependency = dependencies[i];\n            const map = $taskStore.entities;\n\n            const fromTask = map[dependency.fromId];\n            const toTask = map[dependency.toId];\n            if (\n                fromTask &&\n                toTask &&\n                Math.min(fromTask.top, toTask.top) <= paddingTop + $visibleHeight &&\n                Math.max(fromTask.top, toTask.top) >= paddingTop\n            ) {\n                result.push(dependency);\n            }\n        }\n        visibleDependencies = result;\n    }\n</script>\n\n<div class=\"dependency-container\">\n    {#each visibleDependencies as dependency (dependency.id)}\n        <Dependency {...dependency} />\n    {/each}\n</div>\n\n<style>\n    .dependency-container {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n\n        pointer-events: none;\n        top: 0;\n        float: left;\n        overflow: hidden;\n        z-index: 0;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/dependencies/dependency.ts",
    "content": "export interface DependencyModel {\n    id: number;\n    /** Id of dependent task */\n    fromId: number;\n    /** Id of dependency task */\n    toId: number;\n    /** Stroke color */\n    stroke: string;\n    /** Width of stroke */\n    strokeWidth: number;\n    /** Size of the arrow head */\n    arrowSize: number;\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/dependencies/index.ts",
    "content": "import SvelteGanttDependencies from './GanttDependencies.svelte';\nimport type { DependencyModel } from './dependency';\n\nexport { SvelteGanttDependencies };\nexport type { DependencyModel };\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/external/external.ts",
    "content": "import { isDraggable } from '../../utils/utils';\nimport { useDraggable } from '../../core/drag';\nimport type { SvelteRow } from '../../core/row';\nimport type { SvelteGanttComponent } from '../..';\nimport { getRelativePos, getRowAtPoint } from '../../utils/dom';\n\ninterface DragOptions {\n    /** SvelteGantt this is binded to */\n    gantt: SvelteGanttComponent;\n    /** Creates a dragging indicator element */\n    elementContent(): HTMLElement;\n    /** Is currently being dragged */\n    dragging: boolean;\n    /** Is enabled */\n    enabled: boolean;\n    /** Success callback, when dragged over a row */\n    onsuccess?(target: SvelteRow, date: number, gantt: SvelteGanttComponent): void;\n    /** Fail callback, when dragged outside gantt */\n    onfail?(): void;\n}\n\nconst defaults = {\n    enabled: true,\n    elementContent: () => {\n        const element = document.createElement('div');\n        element.innerHTML = 'New Task';\n        Object.assign(element.style, {\n            position: 'absolute',\n            background: '#eee',\n            padding: '0.5em 1em',\n            fontSize: '12px',\n            pointerEvents: 'none'\n        });\n        return element;\n    }\n};\n\nexport class SvelteGanttExternal {\n    draggable: { destroy(): void; };\n    element: HTMLElement;\n    public options: DragOptions;\n\n    constructor(node: HTMLElement, options: DragOptions) {\n        this.options = Object.assign({}, defaults, options);\n        this.draggable = useDraggable(node, {\n            onDrag: this.onDrag.bind(this),\n            dragAllowed: () => this.options.enabled,\n            resizeAllowed: false,\n            onDrop: this.onDrop.bind(this),\n            container: document.body,\n            getX: (event: MouseEvent) => event.pageX,\n            getY: (event: MouseEvent) => event.pageY,\n            getWidth: () => 0\n        });\n    }\n\n    onDrag({ x, y }) {\n        if (!this.element) {\n            this.element = this.options.elementContent();\n            document.body.appendChild(this.element);\n            this.options.dragging = true;\n        }\n\n        this.element.style.top = y + 'px';\n        this.element.style.left = x + 'px';\n    }\n\n    onDrop(event: { mouseEvent: MouseEvent }) {\n        const gantt = this.options.gantt;\n        const rowId = getRowAtPoint(event.mouseEvent);\n        const targetRow = gantt.getRow(rowId);\n        if (targetRow && isDraggable(targetRow.model)) {\n            const mousePos = getRelativePos(gantt.getRowContainer(), event.mouseEvent);\n            const date = gantt.utils.getDateByPosition(mousePos.x);\n\n            this.options.onsuccess?.(targetRow, date, gantt);\n        } else {\n            this.options.onfail?.();\n        }\n\n        document.body.removeChild(this.element);\n        this.options.dragging = false;\n        this.element = null;\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/table/Table.svelte",
    "content": "<script context=\"module\">\n    export const type = 'table';\n</script>\n\n<script lang=\"ts\">\n    import { createEventDispatcher, onMount, getContext } from 'svelte';\n\n    const dispatch = createEventDispatcher();\n\n    import TableRow from './TableRow.svelte';\n    import type { GanttDataStore } from '../../core/store';\n    import type { TableHeader } from './tableHeader';\n    import type { SvelteRow } from '../../core/row';\n\n    export let tableWidth;\n    export let paddingTop;\n    export let rowContainerHeight;\n    export let visibleRows: SvelteRow[];\n    // list of columns used in the table\n    // title: label to display in the header\n    // property: property of row to display in the cell\n    // width: width of column\n    export let tableHeaders: TableHeader[] = [{ title: 'Name', property: 'label', width: 100 }];\n\n    const { headerHeight, bottomScrollbarVisible } = getContext('dimensions');\n    const { rowPadding, rowHeight } = getContext('options');\n    const { rowStore, taskStore } = getContext('dataStore');\n    const { scrollables, updateLayout } = getContext('gantt');\n\n    onMount(() => {\n        dispatch('init', { module: this });\n    });\n\n    let headerContainer;\n    function scrollListener(node) {\n        scrollables.push({ node, orientation: 'vertical' });\n\n        function onScroll(event) {\n            headerContainer.scrollLeft = node.scrollLeft;\n        }\n\n        node.addEventListener('scroll', onScroll);\n\n        return {\n            destroy() {\n                node.removeEventListener('scroll', onScroll);\n            }\n        };\n    }\n\n    let scrollWidth;\n    $: {\n        let sum = 0;\n        tableHeaders.forEach(header => {\n            sum += header.width;\n        });\n        scrollWidth = sum;\n    }\n\n    function onRowExpanded(event) {\n        const row = event.detail.row as SvelteRow;\n        row.model.expanded = true;\n        if (row.children) show(row.children);\n        updateLayout();\n    }\n\n    function onRowCollapsed(event) {\n        const row = event.detail.row as SvelteRow;\n        row.model.expanded = false;\n        if (row.children) hide(row.children);\n        updateLayout();\n    }\n\n    function hide(children: SvelteRow[]) {\n        for (const row of children) {\n            if (row.children) hide(row.children);\n            row.hidden = true;\n        }\n    }\n\n    function show(children: SvelteRow[], hidden = false) {\n        for (const row of children) {\n            if (row.children) show(row.children, !row.model.expanded);\n            row.hidden = hidden;\n        }\n    }\n</script>\n\n<div class=\"sg-table sg-view\" style=\"width:{tableWidth}px;\">\n    <div class=\"sg-table-header\" style=\"height:{$headerHeight}px\" bind:this={headerContainer}>\n        {#each tableHeaders as header}\n            <div class=\"sg-table-header-cell sg-table-cell\" style=\"width:{header.width}px\">\n                {header.title}\n            </div>\n        {/each}\n    </div>\n\n    <div class=\"sg-table-body\" style={`padding-bottom: ${$bottomScrollbarVisible}px;`}>\n        <div class=\"sg-table-scroller\" use:scrollListener>\n            <div\n                class=\"sg-table-rows\"\n                style=\"padding-top:{paddingTop}px;height:{rowContainerHeight}px;\"\n            >\n                {#each visibleRows as row}\n                    <TableRow\n                        {row}\n                        headers={tableHeaders}\n                        on:rowExpanded={onRowExpanded}\n                        on:rowCollapsed={onRowCollapsed}\n                    />\n                {/each}\n            </div>\n        </div>\n    </div>\n</div>\n\n<style>\n    .sg-table {\n        overflow-x: auto;\n        display: flex;\n        flex-direction: column;\n    }\n\n    .sg-table-scroller {\n        width: 100%;\n        /* border-bottom: 1px solid #efefef; // instead of padding-bottom use an element (with borders) */\n        overflow-y: hidden;\n    }\n\n    .sg-table-header {\n        display: flex;\n        align-items: stretch;\n        overflow: hidden;\n        border-bottom: 1px solid var(--sg-table-header-cell-border-color);\n        background: var(--sg-table-header-cell-bg);\n    }\n\n    .sg-table-body {\n        display: flex;\n        flex: 1 1 0;\n        width: 100%;\n        overflow-y: hidden;\n    }\n\n    .sg-table-header-cell {\n        font-size: 14px;\n        font-weight: 400;\n    }\n\n    :global(.sg-table-cell) {\n        white-space: nowrap;\n        overflow: hidden;\n\n        display: flex;\n        align-items: center;\n        flex-shrink: 0;\n\n        padding: 0 0.5em;\n        height: 100%;\n    }\n\n    :global(.sg-table-cell:last-child) {\n        flex-grow: 1;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/table/TableRow.svelte",
    "content": "<script lang=\"ts\">\n    import { getContext } from 'svelte';\n\n    import TableTreeCell from './TableTreeCell.svelte';\n    import type { TableHeader } from './tableHeader';\n    import type { SvelteRow } from '../../core/row';\n    import { normalizeClassAttr } from '../../utils/dom';\n\n    export let headers: TableHeader[] = null;\n    export let row: SvelteRow = null;\n\n    const { hoveredRow, selectedRow } = getContext('gantt');\n\n    let treeIndentationStyle = '';\n    $: {\n        treeIndentationStyle = row.parent ? `padding-left: ${row.childLevel * 3}em;` : '';\n    }\n\n    $: classes = normalizeClassAttr(row.model.classes)\n</script>\n\n<div\n    data-row-id={row.model.id}\n    style=\"height:{row.height}px\"\n    class=\"sg-table-row {classes} sg-table-row-level-{row.childLevel}\"\n    class:sg-row-expanded={row.model.expanded}\n    class:sg-hover={$hoveredRow == row.model.id}\n    class:sg-selected={$selectedRow == row.model.id}\n>\n    {#each headers as header}\n        <div class=\"sg-table-body-cell sg-table-cell\" style=\"width:{header.width}px\">\n            {#if header.type == 'tree'}\n                <TableTreeCell on:rowCollapsed on:rowExpanded {row}>\n                    {#if row.model.iconClass}\n                        <div class=\"sg-table-icon\">\n                            <i class={row.model.iconClass}></i>\n                        </div>\n                    {/if}\n\n                    {#if row.model.headerHtml}\n                        {@html row.model.headerHtml}\n                    {:else if header.renderer}\n                        {@html header.renderer(row)}\n                    {:else}\n                        {row.model[header.property]}\n                    {/if}\n                </TableTreeCell>\n            {:else}\n                {#if row.model.iconClass}\n                    <div class=\"sg-table-icon\">\n                        <i class={row.model.iconClass}></i>\n                    </div>\n                {/if}\n\n                {#if row.model.headerHtml}\n                    {@html row.model.headerHtml}\n                {:else if header.renderer}\n                    {@html header.renderer(row)}\n                {:else if header.type === 'resourceInfo'}\n                    <img class=\"sg-resource-image\" src={row.model.imageSrc} alt=\"\" />\n                    <div class=\"sg-resource-title\">\n                        {row.model[header.property]}\n                    </div>\n                {:else}\n                    {row.model[header.property]}\n                {/if}\n            {/if}\n        </div>\n    {/each}\n</div>\n\n<style>\n    .sg-table-row {\n        display: inline-flex;\n        min-width: 100%;\n        align-items: stretch;\n\n        position: relative;\n\n        font-weight: 400;\n        font-size: 14px;  \n        transition: height 0.2s;\n    }\n\n    .sg-table-cell {\n        border-right: 1px solid var(--sg-table-cell-border-color);\n    }\n\n    .sg-table-cell:last-child {\n        border-right: 0;\n    }\n\n    .sg-table-body-cell {\n        border-bottom: 1px solid var(--sg-table-cell-border-color);\n        font-weight: bold;\n    }\n\n    .sg-table-row:last-child > .sg-table-body-cell {\n        border-bottom: 0;\n    }\n\n    .sg-resource-image {\n        width: 2.4em;\n        height: 2.4em;\n        border-radius: 50%;\n        margin-right: 0.6em;\n\n        background: #047c69;\n    }\n\n    .sg-resource-info {\n        flex: 1;\n        height: 100%;\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n    }\n\n    .sg-table-icon {\n        margin-right: 0.5em;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/table/TableTreeCell.svelte",
    "content": "<script lang=\"ts\">\n    import { whenEnterPress } from '../../utils/dom';\n    import type { SvelteRow } from '../../core/row';\n\n    import { createEventDispatcher } from 'svelte';\n\n    export let row: SvelteRow;\n    export let expandIconHtml: string = null;\n    export let collapseIconHtml: string = null;\n\n    const dispatch = createEventDispatcher();\n\n    function onExpandToggle() {\n        if (row.model.expanded || row.model.expanded == null) {\n            dispatch('rowCollapsed', { row });\n        } else {\n            dispatch('rowExpanded', { row });\n        }\n    }\n</script>\n\n<div class=\"sg-cell-inner\" style=\"padding-left: {row.childLevel * 3}em\">\n    {#if row.children}\n        <div\n            class=\"sg-tree-expander\"\n            role=\"button\"\n            tabindex=\"0\"\n            on:click={onExpandToggle}\n            on:keydown={whenEnterPress(onExpandToggle)}\n        >\n            {#if row.model.expanded}\n                {#if expandIconHtml}\n                    {@html expandIconHtml}\n                {:else}\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"sg-tree-icon\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\" />\n                    </svg>\n                {/if}\n            {:else}\n                {#if collapseIconHtml}\n                    {@html collapseIconHtml}\n                {:else}\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"sg-tree-icon\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n                    </svg>\n                {/if}\n            {/if}\n        </div>\n    {/if}\n    <slot />\n</div>\n\n<style>\n    .sg-tree-expander {\n        cursor: pointer;\n        min-width: 1.4em;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n    }\n\n    .sg-cell-inner {\n        display: flex;\n    }\n\n    .sg-tree-icon {\n        width: 1rem;\n        height: 1rem;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/table/index.ts",
    "content": "import SvelteGanttTable from './Table.svelte';\n\nexport { SvelteGanttTable };\n"
  },
  {
    "path": "packages/svelte-gantt/src/modules/table/tableHeader.ts",
    "content": "import type { SvelteRow } from '../../core/row';\n\nexport interface TableHeader {\n    /** Table column title */\n    title: string;\n    /** Table row property */\n    property: string;\n    width?: number;\n    /** Result can be a html string */\n    renderer?: (row: SvelteRow) => string;\n    /** Type of header, can be `tree` */\n    type?: 'tree' | any;\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/ui/ContextMenu.svelte",
    "content": "<script>\n    export let top;\n    export let left;\n    export let actions = [];\n    export let onactionend = null;\n\n    export function position(point) {\n        (top = point.y), (left = point.x);\n    }\n\n    function execute(event, action) {\n        event.stopPropagation();\n        action.action();\n        if (onactionend) onactionend();\n    }\n</script>\n\n<div class=\"sg-context-menu\" style=\"top:{top}px;left:{left}px\">\n    {#each actions as action}\n        <div class=\"context-option\" on:click={event => execute(event, action)}>{action.label}</div>\n    {/each}\n</div>\n\n<style>\n    .sg-context-menu {\n        position: absolute;\n        background: white;\n        border: 1px solid #ccc;\n        padding: 0.25em 0;\n        font-size: 10px;\n        transition: opacity 0.4s ease 0s;\n        opacity: 1;\n        box-shadow: rgba(0, 0, 0, 0.32) 1px 1px 3px 0px;\n    }\n\n    .context-option:hover {\n        background: #eee;\n    }\n\n    .context-option {\n        cursor: default;\n        padding: 0.2em 1em;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/ui/Resizer.svelte",
    "content": "<script>\n    import { createEventDispatcher } from 'svelte';\n\n    const dispatch = createEventDispatcher();\n\n    import { useDraggable } from '../core/drag';\n    import { setCursor } from '../utils/dom';\n\n    export let x;\n    export let container;\n\n    let dragging = false;\n    const dragOptions = {\n        onDrag: event => {\n            (x = event.x), (dragging = true);\n            dispatch('resize', { left: x });\n            setCursor('col-resize');\n        },\n        onDrop: event => {\n            (x = event.x), (dragging = false);\n            dispatch('resize', { left: x });\n            setCursor('default');\n        },\n        dragAllowed: true,\n        resizeAllowed: false,\n        container: container,\n        getX: () => x,\n        getY: () => 0,\n        getWidth: () => 0\n    };\n\n    $: dragOptions.container = container;\n\n    function resizer(node) {\n        const draggable = useDraggable(node, dragOptions, 'resizer');\n\n        return { destroy: () => draggable.destroy() };\n    }\n</script>\n\n<div class=\"sg-resize\" style=\"left:{x}px\" use:resizer></div>\n\n<style>\n    .sg-resize {\n        z-index: 2;\n        background: var(--sg-resize-color);\n        width: 5px;\n        cursor: col-resize;\n        position: absolute;\n        height: 100%;\n\n        transition:\n            width 0.2s,\n            transform 0.2s;\n    }\n\n    .sg-resize:hover {\n        transform: translateX(-2px);\n        width: 10px;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte-gantt/src/ui/index.ts",
    "content": "// this file is not typescript because of typescript not recognizing svelte components as modules\nimport ContextMenu from './ContextMenu.svelte';\nimport Resizer from './Resizer.svelte';\n\nexport { ContextMenu, Resizer };\n"
  },
  {
    "path": "packages/svelte-gantt/src/utils/contextMenuManager.ts",
    "content": "import { ContextMenu } from '../ui';\n\nexport class ContextMenuManager {\n    current: ContextMenu;\n\n    constructor() {\n        this.current = null;\n    }\n\n    open(actions, position) {\n        if (this.current) {\n            this.current.$destroy();\n        }\n\n        const contextMenu = new ContextMenu({\n            target: document.body,\n            props: {\n                actions,\n                left: position.x,\n                top: position.y,\n                onactionend: () => contextMenu.$destroy()\n            }\n        });\n\n        this.current = contextMenu;\n        return this.current;\n    }\n\n    close() {\n        if (this.current) {\n            this.current.$destroy();\n            this.current = null;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/utils/date.ts",
    "content": "export interface SvelteGanttDateAdapter {\n    roundTo(date: number, unit: string, offset: number): number;\n    format(date: number, format: string): string;\n}\n\nexport function startOf(date: number, unit: string): number {\n    const d = new Date(date);\n    const y = d.getFullYear();\n    const m = d.getMonth();\n    const dt = d.getDate();\n\n    switch (unit) {\n        case 'y':\n        case 'year':\n            return startOfDate(y, 0, 1);\n        case 'month':\n            return startOfDate(y, m, 1);\n        case 'week':\n            return startOfDate(y, m, dt, true);\n        case 'd':\n        case 'day':\n            return startOfDate(y, m, dt);\n        case 'h':\n        case 'hour':\n            d.setMinutes(0, 0, 0);\n            return d.valueOf();\n        case 'm':\n        case 'minute':\n        case 's':\n        case 'second': {\n            const unitMs = getDuration(unit);\n            const value = Math.floor(date / unitMs) * unitMs;\n            return value;\n        }\n        default:\n            throw new Error(`Unknown unit: ${unit}`);\n    }\n}\n\nfunction startOfDate(y: number, m: number, d: number, week = false) {\n    if (y < 100 && y >= 0) {\n        return new Date(y + 400, m, d).valueOf() - 31536000000;\n    } else if (week) {\n        return getFirstDayOfWeek(new Date(y, m, d).valueOf()).valueOf();\n    } else {\n        return new Date(y, m, d).valueOf();\n    }\n}\n\nfunction getFirstDayOfWeek(d: number) {\n    // 👇️ clone date object, so we don't mutate it\n    const date = new Date(d);\n    const day = date.getDay(); // 👉️ get day of week\n    // 👇️ day of month - day of week (-6 if Sunday), otherwise +1\n    const diff = date.getDate() - day + (day === 0 ? -6 : 1);\n\n    return new Date(date.setDate(diff));\n}\n\nfunction checkLeapYear(year) {\n    const leap = new Date(year, 1, 29).getDate() === 29;\n    if (leap) return true;\n    return false;\n}\n\nexport function getDuration(unit: string, offset = 1): number {\n    switch (unit) {\n        case 'y':\n        case 'year':\n            return offset * 31536000000;\n        case 'month':\n            return offset * 30 * 24 * 60 * 60 * 1000; // incorrect since months are of different durations\n        // 4 cases : 28 - 29 - 30 - 31\n        case 'week':\n            return offset * 7 * 24 * 60 * 60 * 1000;\n        case 'd':\n        case 'day':\n            return offset * 24 * 60 * 60 * 1000;\n        case 'h':\n        case 'hour':\n            return offset * 60 * 60 * 1000;\n        case 'm':\n        case 'minute':\n            return offset * 60 * 1000;\n        case 's':\n        case 'second':\n            return offset * 1000;\n        default:\n            throw new Error(`Unknown unit: ${unit}`);\n    }\n}\n\nexport function getDurationV2(unit: string, offset = 1, date = null): number {\n    switch (unit) {\n        case 'y':\n        case 'year':\n            // 2 cases 31622400000 (366) - 31536000000 (365)\n            if (date) {\n                const isLeapYear = checkLeapYear(date.getFullYear());\n                if (isLeapYear) return 31622400000;\n            }\n            return offset * 31536000000; // Incorrect since there is years with 366 days\n        case 'month':\n            if (date) {\n                const month_number_of_days = new Date(\n                    date.getFullYear(),\n                    date.getMonth(),\n                    0\n                ).getDate();\n                return offset * month_number_of_days * 24 * 60 * 60 * 1000;\n            }\n\n            return offset * 30 * 24 * 60 * 60 * 1000; // incorrect since months are of different durations\n        // 4 cases : 28 - 29 - 30 - 31\n        case 'week':\n            return offset * 7 * 24 * 60 * 60 * 1000;\n        case 'd':\n        case 'day':\n            return offset * 24 * 60 * 60 * 1000;\n        case 'h':\n        case 'hour':\n            return offset * 60 * 60 * 1000;\n        case 'm':\n        case 'minute':\n            return offset * 60 * 1000;\n        case 's':\n        case 'second':\n            return offset * 1000;\n        default:\n            throw new Error(`Unknown unit: ${unit}`);\n    }\n}\n\nfunction addSeconds(date: Date, offset = 1) {\n    date.setSeconds(date.getSeconds() + offset);\n    return date;\n}\n\nfunction addMinutes(date: Date, offset = 1) {\n    date.setMinutes(date.getMinutes() + offset);\n    return date;\n}\n\nfunction addHours(date: Date, offset = 1) {\n    date.setHours(date.getHours() + offset);\n    return date;\n}\n\nfunction addDays(date: Date, offset = 1) {\n    date.setDate(date.getDate() + offset);\n    date.setHours(0, 0, 0);\n    return date;\n}\n\nfunction addWeeks(date: Date, offset = 1) {\n    const d = date;\n    const day = d.getDay();\n    const diff = d.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n    d.setDate(diff);\n    d.setHours(0, 0, 0);\n    d.setDate(d.getDate() + 7 * offset);\n    return d;\n}\n\nfunction addMonths(date: Date, offset = 1) {\n    date.setMonth(date.getMonth() + offset);\n    date.setDate(1);\n    date.setHours(0, 0, 0);\n    return date;\n}\n\nfunction addYears(date: Date, offset = 1) {\n    date.setFullYear(date.getFullYear() + offset);\n    date.setMonth(0);\n    date.setDate(1);\n    date.setHours(0, 0, 0);\n    return date;\n}\n\nfunction getNextDate(date, unit, offset) {\n    switch (unit) {\n        case 'y':\n        case 'year':\n            return addYears(date, offset);\n        case 'month':\n            return addMonths(date, offset);\n        case 'week':\n            return addWeeks(date, offset);\n        case 'd':\n        case 'day':\n            return addDays(date, offset);\n        case 'h':\n        case 'hour':\n            return addHours(date, offset);\n        case 'm':\n        case 'minute':\n            return addMinutes(date, offset);\n        case 's':\n        case 'second':\n            return addSeconds(date, offset);\n        default:\n            break;\n    }\n}\n\nconst units = ['y', 'year', 'month', 'week', 'd', 'day', 'h', 'hour', 'm', 'minute', 's', 'second'];\n/**\n *\n * @param from Interval start\n * @param to Interval end\n * @param unit Column unit\n * @param offset Column spacing\n * @param highlightedDurations\n * @returns\n */\nexport function getAllPeriods(\n    from: number,\n    to: number,\n    unit: string,\n    offset: number = 1,\n    highlightedDurations?\n) {\n    if (units.indexOf(unit) !== -1) {\n        let tmsWorkOld = 0;\n        let interval_duration = 0;\n        const start = new Date(from); // Starts at hh:mm:ss\n        const dateWork = new Date(from);\n        let nextDate = getNextDate(dateWork, unit, offset);\n        let tmsWork = nextDate.getTime();\n        const firstDuration = nextDate.getTime() - from;\n        const all_periods = [\n            {\n                // start: start,\n                // end: nextDate,\n                from: from,\n                // from: startOf(from, unit), // incorrect if not circled down to the unit eg. 6:30\n                // TODO: think about offsetting the whole row, so for example if timeline starts at 6:30, the headers still show times for 6:00, 7:00 etc, and not 6:30, 7:30...\n                to: nextDate.getTime(),\n                duration: firstDuration,\n                // check whether duration is highlighted\n                isHighlighted: highlightedDurations && isUnitFraction(start, highlightedDurations)\n            }\n        ];\n\n        if (tmsWork < to) {\n            while (tmsWork < to) {\n                tmsWorkOld = tmsWork;\n                nextDate = getNextDate(new Date(tmsWork), unit, offset);\n                interval_duration = nextDate.getTime() - tmsWork;\n\n                all_periods.push({\n                    from: tmsWork,\n                    to: nextDate.getTime(),\n                    duration: interval_duration,\n                    //check whether duration is highlighted\n                    isHighlighted:\n                        highlightedDurations &&\n                        isUnitFraction(new Date(tmsWork), highlightedDurations)\n                });\n                tmsWork = nextDate.getTime();\n            }\n            const last_day_duration = to - tmsWorkOld;\n            all_periods[all_periods.length - 1].to = to;\n            all_periods[all_periods.length - 1].duration = last_day_duration;\n            // ToDo: there could be another option for hours, minutes, seconds based on pure math like in getPeriodDuration to optimise performance\n        }\n        return all_periods;\n    }\n    throw new Error(`Unknown unit: ${unit}`);\n}\n\nfunction isUnitFraction(localDate: Date, highlightedDurations): boolean {\n    // const localDate = new Date(timestamp * 1000);\n    let timeInUnit: number;\n\n    switch (highlightedDurations.unit) {\n        case 'm':\n        case 'minute':\n            timeInUnit = localDate.getMinutes();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'h':\n        case 'hour':\n            timeInUnit = localDate.getHours();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'd':\n        case 'day':\n            timeInUnit = localDate.getDay();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'week':\n            // getWeekNumber(localDate);\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'dayinMonth':\n            timeInUnit = localDate.getDate();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'month':\n            timeInUnit = localDate.getMonth();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        case 'y':\n        case 'year':\n            timeInUnit = localDate.getFullYear();\n            return highlightedDurations.fractions.includes(timeInUnit);\n        default:\n            throw new Error(`Invalid unit: ${highlightedDurations.unit}`);\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/utils/defaultDateAdapter.ts",
    "content": "import { SvelteGanttDateAdapter } from './date';\n\nexport class DefaultSvelteGanttDateAdapter implements SvelteGanttDateAdapter {\n    format(date: number, format: string): string {\n        const d = new Date(date);\n        switch (format) {\n            case 'H':\n                return d.getHours() + '';\n            case 'HH':\n                return pad(d.getHours());\n            case 'H:mm':\n                return `${d.getHours()}:${pad(d.getMinutes())}`;\n            case 'hh:mm':\n                return `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n            case 'hh:mm:ss':\n                return `${d.getHours()}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n            case 'dd/MM/yyyy':\n                return `${d.getDate()}/${d.getMonth() + 1}/${d.getFullYear()}`;\n            case 'dd/MM/yyyy hh:mm':\n                return `${d.getDate()}/${\n                    d.getMonth() + 1\n                }/${d.getFullYear()} ${d.getHours()}:${d.getMinutes()}`;\n            case 'dd/MM/yyyy hh:mm:ss':\n                return `${d.getDate()}/${\n                    d.getMonth() + 1\n                }/${d.getFullYear()} ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`;\n            // VPY More formats supported 10/12/2021\n            case 'YYYY':\n                return `${d.getFullYear()}`;\n            case 'Q':\n                return `${Math.floor(d.getMonth() / 3 + 1)}`;\n            case '[Q]Q':\n                return `Q${Math.floor(d.getMonth() / 3 + 1)}`;\n            case 'YYYY[Q]Q':\n                return `${d.getFullYear()}Q${Math.floor(d.getMonth() / 3 + 1)}`;\n            case 'MM': {\n                // const month = d.toLocaleString('default', { month: 'long' });\n                let month = String(d.getMonth() + 1);\n                if (month.length == 1) month = `0${month}`;\n                return `${month}`;\n            }\n            case 'MMMM': {\n                const month = d.toLocaleString('default', { month: 'long' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)}`;\n            }\n            case 'MMMM - YYYY': {\n                const month = d.toLocaleString('default', { month: 'long' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)}-${d.getFullYear()}`;\n            }\n            case 'MMMM YYYY': {\n                const month = d.toLocaleString('default', { month: 'long' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)} ${d.getFullYear()}`;\n            }\n            case 'MMM': {\n                const month = d.toLocaleString('default', { month: 'short' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)}`;\n            }\n            case 'MMM - YYYY': {\n                const month = d.toLocaleString('default', { month: 'short' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)} - ${d.getFullYear()}`;\n            }\n            case 'MMM YYYY': {\n                const month = d.toLocaleString('default', { month: 'short' });\n                return `${month.charAt(0).toUpperCase()}${month.substring(1)} ${d.getFullYear()}`;\n            }\n            case 'W':\n                return `${getWeekNumber(d)}`;\n            case 'WW': {\n                const weeknumber = getWeekNumber(d);\n                return `${weeknumber.toString().length == 1 ? '0' : ''}${weeknumber}`;\n            }\n            default:\n                console.warn(`Date Format '${format}' is not supported, use another date adapter.`);\n                return `${d.getDate()}/${d.getMonth() + 1}/${d.getFullYear()}`;\n        }\n    }\n\n    /**\n     * Rounds the date down to the nearest unit\n     *\n     * Note: This does not consider the timezone, rounds only to the UTC time, which makes it incorrect to round to day start or half hour time zones\n     */\n    roundTo(date: number, unit: string, offset: number): number {\n        const magnetDuration = getPeriodDuration(unit, offset);\n        const value = Math.round(date / magnetDuration) * magnetDuration; //\n        return value;\n    }\n}\n\nfunction pad(value: number): string {\n    let result = value.toString();\n    for (let i = result.length; i < 2; i++) {\n        result = '0' + result;\n    }\n    return result;\n}\n\nfunction getWeekNumber(d: Date) {\n    // Copy date so don't modify original\n    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n    // Set to nearest Thursday: current date + 4 - current day number\n    // Make Sunday's day number 7\n    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));\n    // Get first day of year\n    const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n    // Calculate full weeks to nearest Thursday\n    const weekNo = Math.ceil(((d.valueOf() - yearStart.valueOf()) / 86400000 + 1) / 7);\n    // Return array of year and week number\n    return weekNo;\n}\n\n/**\n * Return duration\n */\nfunction getPeriodDuration(unit: string, offset: number): number {\n    switch (unit) {\n        case 'y':\n        case 'year':\n            // 2 cases 31622400000 (366) - 31536000000 (365)\n            return offset * 31536000000; // Incorrect since there is years with 366 days\n        case 'month':\n            // 4 cases : 28 - 29 - 30 - 31\n            return offset * 30 * 24 * 60 * 60 * 1000; // incorrect since months are of different durations\n        case 'week':\n            return offset * 7 * 24 * 60 * 60 * 1000;\n        case 'd':\n        case 'day':\n            return offset * 24 * 60 * 60 * 1000;\n        case 'h':\n        case 'hour':\n            return offset * 60 * 60 * 1000;\n        case 'm':\n        case 'minute':\n            return offset * 60 * 1000;\n        case 's':\n        case 'second':\n            return offset * 1000;\n        default:\n            throw new Error(`Unknown unit: ${unit}`);\n    }\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/utils/dom.ts",
    "content": "export function isLeftClick(event) {\n    return event.which === 1;\n}\n\n/**\n * Gets mouse position within an element\n * @param node\n * @param event\n */\nexport function getRelativePos(node: HTMLElement, event: Pick<MouseEvent, 'clientX' | 'clientY'>) {\n    const rect = node.getBoundingClientRect();\n    const x = event.clientX - rect.left; //x position within the element.\n    const y = event.clientY - rect.top; //y position within the element.\n    return {\n        x: x,\n        y: y\n    };\n}\nexport function getRelativePosition(node: HTMLElement, event: Pick<MouseEvent, 'clientX' | 'clientY'>) {\n    const rect = node.getBoundingClientRect();\n    const x = event.clientX - rect.left; //x position within the element.\n    const y = event.clientY - rect.top; //y position within the element.\n    return [x, y] as const;\n}\n\n/**\n * Adds an event listener that triggers once.\n * @param target\n * @param type\n * @param listener\n * @param addOptions\n * @param removeOptions\n */\nexport function addEventListenerOnce(\n    target: HTMLElement | Window,\n    type: string,\n    listener,\n    addOptions?,\n    removeOptions?\n) {\n    target.addEventListener(type, function fn() {\n        target.removeEventListener(type, fn, removeOptions);\n        listener.apply(this, arguments, addOptions);\n    });\n}\n\n/**\n * Sets the cursor on an element. Globally by default.\n * @param cursor\n * @param node\n */\nexport function setCursor(cursor: string, node: HTMLElement = document.body) {\n    node.style.cursor = cursor;\n}\n\nexport function sortFn(prop: (element) => number | string) {\n    return function (a, b) {\n        if (prop(a) < prop(b)) {\n            return -1;\n        } else if (prop(a) > prop(b)) {\n            return 1;\n        }\n        return 0;\n    };\n}\n\nexport function normalizeClassAttr(classes: Array<string> | string) {\n    if (!classes) {\n        return '';\n    }\n    if (typeof classes === 'string') {\n        return classes;\n    }\n    if (Array.isArray(classes)) {\n        return classes.join(' ');\n    }\n    return '';\n}\n\n/* eslint-disable */\nexport function debounce<F extends (...args) => void>(func: F, wait: number, immediate = false) {\n    let timeout;\n    return function () {\n        const context = this,\n            args = arguments;\n        const later = function () {\n            timeout = null;\n            if (!immediate) func.apply(context, args);\n        };\n        const callNow = immediate && !timeout;\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n        if (callNow) func.apply(context, args);\n    } as F;\n}\n\nexport function throttle<F extends (...args) => void>(func: F, limit: number): F {\n    let wait = false;\n    return function () {\n        if (!wait) {\n            func.apply(null, arguments);\n            wait = true;\n            setTimeout(function () {\n                wait = false;\n            }, limit);\n        }\n    } as F;\n}\n\n/** How much pixels near the bounds user has to drag to start scrolling */\nconst DRAGGING_TO_SCROLL_TRESHOLD = 40;\n/** How much pixels does the view scroll when dragging */\nconst DRAGGING_TO_SCROLL_DELTA = 40;\n\nfunction outOfBounds(event: MouseEvent, rect: DOMRect) {\n    return {\n        left: event.clientX - rect.left < 0 + DRAGGING_TO_SCROLL_TRESHOLD,\n        top: event.clientY - rect.top < 0 + DRAGGING_TO_SCROLL_TRESHOLD,\n        right: event.clientX - rect.left > rect.width - DRAGGING_TO_SCROLL_TRESHOLD,\n        bottom: event.clientY - rect.top > rect.height - DRAGGING_TO_SCROLL_TRESHOLD\n    };\n}\n\nexport const scrollIfOutOfBounds = throttle((event: MouseEvent, scrollable: HTMLElement) => { // throttle elsewhere\n    // throttle the following\n    const mainContainerRect = scrollable.getBoundingClientRect();\n    const bounds = outOfBounds(event, mainContainerRect);\n    if (bounds.left || bounds.right) {\n        // scroll left\n        scrollable.scrollTo({\n            left: scrollable.scrollLeft + (bounds.left ? -DRAGGING_TO_SCROLL_DELTA : DRAGGING_TO_SCROLL_DELTA),\n            behavior: 'smooth'\n        });\n    }\n\n    if (bounds.top || bounds.bottom) {\n        // scroll top\n        scrollable.scrollTo({\n            top: scrollable.scrollTop + (bounds.top ? -DRAGGING_TO_SCROLL_DELTA : DRAGGING_TO_SCROLL_DELTA),\n            behavior: 'smooth'\n        });\n    }\n}, 250);\n\nexport function getRowAtPoint(event: MouseEvent) {\n    const elements = document.elementsFromPoint(event.clientX, event.clientY);\n    const rowElement = elements.find(element => !!element.getAttribute('data-row-id'));\n    if (rowElement !== undefined) {\n        const rowId = rowElement.getAttribute('data-row-id');\n        return rowId;\n    }\n    return null;\n}\n\nexport function whenEnterPress(callback: (e: KeyboardEvent) => void) {\n    return (e: KeyboardEvent) => {\n        if (e.key === 'Enter') {\n            callback(e);\n        }\n    }\n}"
  },
  {
    "path": "packages/svelte-gantt/src/utils/momentDateAdapter.ts",
    "content": "import { SvelteGanttDateAdapter } from './date';\n\n/**\n * Date adapter that uses MomentJS\n */\nexport class MomentSvelteGanttDateAdapter implements SvelteGanttDateAdapter {\n    moment;\n\n    constructor(moment) {\n        this.moment = moment;\n    }\n\n    format(date: number, format: string): string {\n        return this.moment(date).format(format);\n    }\n\n    roundTo(date: number, unit: string, offset: number): number {\n        const m = this.moment(date);\n        roundMoment(m, offset, unit);\n        return m.valueOf();\n    }\n}\n\nconst aliases = {\n    hour: 'hours',\n    minute: 'minutes',\n    second: 'seconds',\n    millisecond: 'milliseconds'\n};\n\n// TODO: write tests for this\nfunction roundMoment(m, precision, key, direction = 'round') {\n    if (precision === 1 && key === 'day') {\n        precision = 24;\n        key = 'hours';\n    }\n\n    if (aliases[key]) {\n        key = aliases[key];\n    }\n\n    const methods = {\n        hours: 24,\n        minutes: 60,\n        seconds: 60,\n        milliseconds: 1000\n    };\n\n    if (!methods[key]) {\n        console.warn(`Rounding dates by ${key} is not supported`);\n    }\n\n    let value = 0;\n    let rounded = false;\n    let subRatio = 1;\n    let maxValue;\n\n    for (const k in methods) {\n        if (k === key) {\n            value = m.get(key);\n            maxValue = methods[k];\n            rounded = true;\n        } else if (rounded) {\n            subRatio *= methods[k];\n            value += m.get(k) / subRatio;\n            m.set(k, 0);\n        }\n    }\n\n    value = Math[direction](value / precision) * precision; // value is date represented in units of `key`, ignoring the bigger units, eg 14h30m->14.5h\n    value = Math.min(value, maxValue);\n    m.set(key, value);\n    return m;\n}\n"
  },
  {
    "path": "packages/svelte-gantt/src/utils/utils.ts",
    "content": "import { SvelteGanttDateAdapter } from './date';\n\ntype UtilsParams = Readonly<{\n    from: number;\n    to: number;\n    width: number;\n    magnetOffset: number;\n    magnetUnit: string;\n    magnetDuration: number;\n    dateAdapter: SvelteGanttDateAdapter;\n\n    /** because gantt width is not always correct */\n    /**BlueFox 09.01.23: couldn't reproduce the above so I removed the code\n    //totalColumnDuration: number;\n    //totalColumnWidth: number;**/\n}>;\n\nexport function createUtils(params: UtilsParams) {\n    return {        \n        /**\n         * Returns position of date on a line if from and to represent length of width\n         * @param {*} date \n         */\n        getPositionByDate(date: number) {\n            return getPositionByDate(date, params.from, params.to, params.width);\n        },\n\n        getDateByPosition(x) {\n            return getDateByPosition(x, params.from, params.to, params.width);\n        },\n\n        roundTo(date: number) {\n            if (params.dateAdapter) {\n                return params.dateAdapter.roundTo(date, params.magnetUnit, params.magnetOffset);\n            }\n            // this does not consider the timezone, rounds only to the UTC time\n            // let value = Math.round((date - 7200000) / params.magnetDuration) * params.magnetDuration;\n            // cases where rounding to day or timezone offset is not rounded, this won't work\n            return null;\n        }\n    }\n}\n\nexport type GanttUtils = ReturnType<typeof createUtils>;\n\nexport function getPositionByDate(date: number, from: number, to: number, width: number) {\n    if (!date) {\n        return undefined;\n    }\n\n    const durationTo = date - from;\n    const durationToEnd = to - from;\n\n    return (durationTo / durationToEnd) * width;\n}\n\nexport function getDateByPosition(x: number, from: number, to: number, width: number) {\n    const durationTo = (x / width) * (to - from);\n    const dateAtPosition = from + durationTo;\n    return dateAtPosition;\n}\n\n// Returns the object on the left and right in an array using the given cmp function.\n// The compare function defined which property of the value to compare (e.g.: c => c.left)\nexport function getIndicesOnly<T, C = number | Date>(\n    input: T[],\n    value: C,\n    comparer: { (T: T): C },\n    strict?: boolean\n) {\n    let lo = -1;\n    let hi = input.length;\n    while (hi - lo > 1) {\n        const mid = Math.floor((lo + hi) / 2);\n        if (strict ? comparer(input[mid]) < value : comparer(input[mid]) <= value) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    if (!strict && input[lo] !== undefined && comparer(input[lo]) === value) {\n        hi = lo;\n    }\n    return [lo, hi];\n}\n\nexport function get<T, C = number | Date>(\n    input: T[],\n    value: C,\n    comparer: { (T: T): C },\n    strict?: boolean\n) {\n    const res = getIndicesOnly(input, value, comparer, strict);\n    return [input[res[0]], input[res[1]]];\n}\n\nexport function isDraggable(item: { draggable?: boolean; enableDragging?: boolean; }) {\n    return item.draggable ?? item.enableDragging ?? true;\n}\n\nexport function isResizable(item: { resizable?: boolean; enableResize?: boolean; }) {\n    return item.resizable ?? item.enableResize ?? true;\n}"
  },
  {
    "path": "packages/svelte-gantt/svelte.config.js",
    "content": "/** used exclusively for packaging with svelte-package */\n// import { vitePreprocess as sveltePreprocess } from '@sveltejs/kit/vite';\nimport sveltePreprocess from 'svelte-preprocess';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n    preprocess: sveltePreprocess()\n};\n\nexport default config;\n"
  },
  {
    "path": "packages/svelte-gantt/tools/build.js",
    "content": "import fs from 'fs';\nimport del from 'del';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { rollup as _rollup } from 'rollup';\nimport svelte from 'rollup-plugin-svelte';\nimport resolve from '@rollup/plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\n// import uglify from 'rollup-plugin-uglify';\nimport typescript from '@rollup/plugin-typescript';\nimport postcss from 'rollup-plugin-postcss';\nimport sveltePreprocess from 'svelte-preprocess';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json')));\n\nlet promise = Promise.resolve();\n\n// Clean up the output directory\nconst outputDir = './dist';\n\nif (!fs.existsSync(outputDir)) {\n    fs.mkdirSync(outputDir);\n} else {\n    promise = promise.then(() => del([`${outputDir}/*`]));\n}\n\npromise = promise.then(() =>\n    _rollup({\n        input: './src/index.ts',\n        // external: Object.keys(pkg.dependencies),\n        plugins: [\n            svelte({\n                // css: css => {\n                //     css.write(`${outputDir}/css/svelteGantt.css`);\n                // },\n                emitCss: true,\n                preprocess: sveltePreprocess()\n            }),\n            postcss(),\n            resolve({\n                browser: true\n                // dedupe: ['svelte', 'svelte/internal'],\n            }),\n            commonjs(),\n            typescript({\n                compilerOptions: {\n                    rootDir: \"./src\",\n                    declarationDir: `${outputDir}/types`\n                }\n            })\n        ]\n    })\n);\n\n// Compile source code into a distributable format\n['es', 'iife'].forEach(format => {\n    // /*, 'cjs', 'umd'*/\n    promise.then(bundle => {\n        return bundle.write({\n            file: `${outputDir}/${format === 'es' ? 'index' : `index.${format}`}.js`,\n            sourcemap: true,\n            format,\n            extend: format === 'iife',\n            name: format === 'iife' ? 'window' : undefined // pkg.name : undefined,\n        });\n    });\n});\n\n// Copy package.json and LICENSE.txt\npromise = promise.then(() => {\n    delete pkg.private;\n    delete pkg.devDependencies;\n    delete pkg.scripts;\n    delete pkg.eslintConfig;\n\n    pkg.peerDependencies = { svelte: '^4.0.0' };\n    pkg.devDependencies = { svelte: '^4.0.0' };\n    pkg.exports = {\n        '.': {\n            types: './types/index.d.ts',\n            default: './index.js'\n        },\n        './svelte': {\n            types: './svelte/index.d.ts',\n            svelte: './svelte/index.js'\n        }\n    };\n\n    fs.writeFileSync(`${outputDir}/package.json`, JSON.stringify(pkg, null, '  '), {\n        encoding: 'utf-8',\n        flag: 'w'\n    });\n    fs.writeFileSync(`${outputDir}/LICENSE.txt`, fs.readFileSync('./LICENSE.txt', 'utf-8'), {\n        encoding: 'utf-8',\n        flag: 'w'\n    });\n    fs.writeFileSync(`${outputDir}/README.md`, fs.readFileSync('./README.md', 'utf-8'), {\n        encoding: 'utf-8',\n        flag: 'w'\n    });\n});\n\npromise.catch(err => console.error(err.stack)); // eslint-disable-line no-console\n"
  },
  {
    "path": "packages/svelte-gantt/tsconfig.json",
    "content": "{\n    \"extends\": \"@tsconfig/svelte/tsconfig.json\",\n    \"compilerOptions\": {\n        \"sourceMap\": true,\n        \"baseUrl\": \"./\",\n        \"rootDir\": \".\",\n        \"target\": \"ESNext\",\n        \"module\": \"ESNext\",\n        \"moduleResolution\": \"node\",\n        \"types\": [\"svelte\"],\n        \"declaration\": true,\n        \"declarationDir\": \"./dist\",\n        // \"declarationDir\": \"./dist/types\",\n        \"importsNotUsedAsValues\": \"remove\",\n        \"isolatedModules\": false\n    },\n    \"include\": [\"src/**/*\"],\n    \"exclude\": [\"node_modules/*\", \"__sapper__/*\", \"public/*\"]\n}\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - 'packages/*'"
  }
]