@sevn/elections-components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +297 -0
  3. package/dist/index.cjs +603 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +351 -0
  6. package/dist/index.d.ts +351 -0
  7. package/dist/index.js +15609 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/styles.css +38 -0
  10. package/dist/umd/candidate-by-state.js +98 -0
  11. package/dist/umd/candidate-carrousel-state-results-viewer.js +108 -0
  12. package/dist/umd/candidate-counting-progress.js +77 -0
  13. package/dist/umd/candidate-duel-state-result-viewer.js +91 -0
  14. package/dist/umd/candidate-map-by-state.js +104 -0
  15. package/dist/umd/candidate-multi-ring-chart-performance-by-municipality.js +105 -0
  16. package/dist/umd/candidate-performance-by-municipality.js +105 -0
  17. package/dist/umd/candidate-ranking.js +59 -0
  18. package/dist/umd/candidate-results-by-municipality.js +103 -0
  19. package/dist/umd/counting-progress.js +125 -0
  20. package/dist/umd/current-leader.js +43 -0
  21. package/dist/umd/election-round-analysis.js +100 -0
  22. package/dist/umd/election-status.js +135 -0
  23. package/dist/umd/final-results.js +141 -0
  24. package/dist/umd/live-summary.js +36 -0
  25. package/dist/umd/municipality-perfomance-map.js +82 -0
  26. package/dist/umd/party-performance.js +99 -0
  27. package/dist/umd/results-by-office.js +94 -0
  28. package/dist/umd/round-results-analysis.js +99 -0
  29. package/dist/umd/state-leaders.js +118 -0
  30. package/dist/umd/state-winners.js +129 -0
  31. package/dist/umd/top-dispute.js +43 -0
  32. package/dist/umd/vote-comparison-by-round.js +76 -0
  33. package/dist/umd/vote-counting-progress.js +23 -0
  34. package/dist/umd/voting-map.js +112 -0
  35. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../node_modules/esm-env/false.js","../node_modules/svelte/src/internal/shared/utils.js","../node_modules/svelte/src/internal/client/constants.js","../node_modules/svelte/src/internal/shared/errors.js","../node_modules/svelte/src/internal/client/errors.js","../node_modules/svelte/src/constants.js","../node_modules/svelte/src/internal/client/warnings.js","../node_modules/svelte/src/internal/client/reactivity/equality.js","../node_modules/svelte/src/internal/flags/index.js","../node_modules/svelte/src/internal/client/context.js","../node_modules/svelte/src/internal/client/dom/task.js","../node_modules/svelte/src/internal/client/error-handling.js","../node_modules/svelte/src/internal/client/reactivity/status.js","../node_modules/svelte/src/internal/client/reactivity/utils.js","../node_modules/svelte/src/internal/client/reactivity/batch.js","../node_modules/svelte/src/reactivity/create-subscriber.js","../node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../node_modules/svelte/src/internal/client/reactivity/async.js","../node_modules/svelte/src/internal/client/reactivity/deriveds.js","../node_modules/svelte/src/internal/client/reactivity/sources.js","../node_modules/svelte/src/internal/client/proxy.js","../node_modules/svelte/src/internal/client/dom/operations.js","../node_modules/svelte/src/internal/client/dom/elements/misc.js","../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../node_modules/svelte/src/internal/client/reactivity/effects.js","../node_modules/svelte/src/internal/client/runtime.js","../node_modules/svelte/src/utils.js","../node_modules/svelte/src/internal/client/dom/elements/events.js","../node_modules/svelte/src/internal/client/dom/reconciler.js","../node_modules/svelte/src/internal/client/dom/template.js","../node_modules/svelte/src/internal/client/render.js","../node_modules/svelte/src/internal/client/dom/blocks/branches.js","../node_modules/svelte/src/internal/client/dom/blocks/if.js","../node_modules/svelte/src/internal/client/dom/blocks/each.js","../node_modules/svelte/src/internal/client/dom/blocks/html.js","../node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../node_modules/svelte/src/internal/client/dom/css.js","../node_modules/svelte/src/internal/shared/attributes.js","../node_modules/svelte/src/internal/client/dom/elements/class.js","../node_modules/svelte/src/internal/client/dom/elements/style.js","../node_modules/svelte/src/internal/client/dom/elements/attributes.js","../node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","../node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../node_modules/svelte/src/internal/client/reactivity/store.js","../node_modules/svelte/src/internal/client/reactivity/props.js","../node_modules/svelte/src/index-client.js","../src/core/env.ts","../src/core/errors.ts","../src/core/store.ts","../src/core/config.ts","../src/core/styles.ts","../src/runtime/defineComponent.ts","../node_modules/svelte/src/version.js","../node_modules/svelte/src/internal/disclose-version.js","../src/lib/ad.svelte","../src/assets/avatarman.svg","../src/assets/avatarwoman.svg","../src/lib/avatar.svelte","../src/assets/icons/light_search.svg?url","../src/assets/icons/chevron.svg?url","../src/assets/icons/close.svg?url","../src/lib/autocomplete.svelte","../src/assets/icons/arrow-up.svg?url","../src/assets/icons/arrow-up-disable.svg?url","../src/lib/barChart.svelte","../src/lib/tag.svelte","../src/lib/candidate.svelte","../src/lib/candidatesCountPercent.svelte","../src/lib/candidateList.svelte","../src/lib/voteOverview.svelte","../src/utils/position.ts","../src/lib/candidatePercentage.svelte","../src/lib/candidatePositionCarrousel.svelte","../src/lib/candidateVoteComparison.svelte","../src/lib/candidateRankingTable.svelte","../src/lib/candidateVotesRanking.svelte","../src/utils/chartUtils.ts","../src/lib/donutChart.svelte","../src/lib/filterDropdown.svelte","../src/lib/filterState.svelte","../src/lib/header.svelte","../src/lib/leadershipMoment.svelte","../src/core/assets.ts","../src/lib/map.svelte","../src/lib/multiRingChart.svelte","../src/lib/mapLegend.svelte","../src/lib/rankingTag.svelte","../src/lib/tableCandidate.svelte","../src/lib/electionLineChart.svelte","../src/utils/formatName.ts","../src/utils/formatUpdate.ts","../src/components/FinalResults.svelte","../src/components/StateWinners.svelte","../src/components/VoteCountingProgress.svelte","../src/core/transport.ts","../src/services/api.ts","../src/components/VoteComparisonByRound.svelte","../src/components/CountingProgress.svelte","../src/components/StateLeaders.svelte","../src/components/CurrentLeader.svelte","../src/components/TopDispute.svelte","../src/components/CandidateRanking.svelte","../src/components/LiveSummary.svelte","../src/components/CandidatePerformanceByMunicipality.svelte","../src/components/RoundResultsAnalysis.svelte","../src/components/ElectionStatus.svelte","../src/components/CandidateResultsByMunicipality.svelte","../src/components/MunicipalityPerfomanceMap.svelte","../src/components/CandidateByState.svelte","../src/components/CandidateCarrouselStateResultsViewer.svelte","../src/components/CandidateDuelStateResultViewer.svelte","../src/components/CandidateMapByState.svelte","../src/components/ElectionRoundAnalysis.svelte","../src/utils/electionStatus.ts","../src/components/CandidateMultiRingChartPerformanceByMunicipality.svelte","../src/components/ResultsByOffice.svelte","../src/components/VotingMap.svelte","../src/components/CandidateCountingProgress.svelte","../src/components/PartyPerformance.svelte","../src/core/index.ts","../src/index.ts"],"sourcesContent":["export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed).\n */\nexport const WAS_MARKED = 1 << 16;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport * from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_volatile`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT, REACTION_RAN } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n * <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, REACTION_RAN, EFFECT } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? ' ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\n/** @import { Boundary } from '../dom/blocks/boundary' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tBOUNDARY_EFFECT,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs in non-async mode\n * TODO 6.0 remove this, as non-async mode will go away\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n// TODO this should really be a property of `batch`\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nlet is_flushing = false;\nexport let is_flushing_sync = false;\n\nexport class Batch {\n\tcommitted = false;\n\n\t/**\n\t * The current values of any sources that are updated in this batch\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Source, any>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any sources that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Source, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<() => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * The number of async effects that are currently in flight, _not_ inside a pending boundary\n\t */\n\t#blocking_pending = 0;\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\t#is_deferred() {\n\t\treturn this.is_fork || this.#blocking_pending > 0;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t */\n\tunskip_effect(effect) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Effect[]} root_effects\n\t */\n\tprocess(root_effects) {\n\t\tqueued_root_effects = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = [];\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\tfor (const root of root_effects) {\n\t\t\tthis.#traverse_effect_tree(root, effects, render_effects);\n\t\t\t// Note: #traverse_effect_tree runs block effects eagerly, which can schedule effects,\n\t\t\t// which means queued_root_effects now may be filled again.\n\n\t\t\t// Helpful for debugging reactivity loss that has to do with branches being skipped:\n\t\t\t// log_inconsistent_branches(root);\n\t\t}\n\n\t\tif (this.#is_deferred()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\t\t} else {\n\t\t\t// append/remove branches\n\t\t\tfor (const fn of this.#commit_callbacks) fn();\n\t\t\tthis.#commit_callbacks.clear();\n\n\t\t\tif (this.#pending === 0) {\n\t\t\t\tthis.#commit();\n\t\t\t}\n\n\t\t\t// If sources are written to, then work needs to happen in a separate batch, else prior sources would be mixed with\n\t\t\t// newly updated sources, which could lead to infinite loops when effects run over and over again.\n\t\t\tprevious_batch = this;\n\t\t\tcurrent_batch = null;\n\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\n\t\t\tprevious_batch = null;\n\n\t\t\tthis.#deferred?.resolve();\n\t\t}\n\n\t\tbatch_values = null;\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse_effect_tree(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Source} source\n\t * @param {any} value\n\t */\n\tcapture(source, value) {\n\t\tif (value !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, value);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, source.v);\n\t\t\tbatch_values?.set(source, source.v);\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t\tthis.apply();\n\t}\n\n\tdeactivate() {\n\t\t// If we're not the current batch, don't deactivate,\n\t\t// else we could create zombie batches that are never flushed\n\t\tif (current_batch !== this) return;\n\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\tthis.activate();\n\n\t\tif (queued_root_effects.length > 0) {\n\t\t\tflush_effects();\n\n\t\t\tif (current_batch !== null && current_batch !== this) {\n\t\t\t\t// this can happen if a new batch was created during `flush_effects()`\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (this.#pending === 0) {\n\t\t\tthis.process([]); // TODO this feels awkward\n\t\t}\n\n\t\tthis.deactivate();\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tif (batches.size > 1) {\n\t\t\tthis.previous.clear();\n\n\t\t\tvar previous_batch_values = batch_values;\n\t\t\tvar is_earlier = true;\n\n\t\t\tfor (const batch of batches) {\n\t\t\t\tif (batch === this) {\n\t\t\t\t\tis_earlier = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/** @type {Source[]} */\n\t\t\t\tconst sources = [];\n\n\t\t\t\tfor (const [source, value] of this.current) {\n\t\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\t\tif (is_earlier && value !== batch.current.get(source)) {\n\t\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\t\tbatch.current.set(source, value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.push(source);\n\t\t\t\t}\n\n\t\t\t\tif (sources.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches\n\t\t\t\tconst others = [...batch.current.keys()].filter((s) => !this.current.has(s));\n\t\t\t\tif (others.length > 0) {\n\t\t\t\t\t// Avoid running queued root effects on the wrong branch\n\t\t\t\t\tvar prev_queued_root_effects = queued_root_effects;\n\t\t\t\t\tqueued_root_effects = [];\n\n\t\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\t\tconst marked = new Set();\n\t\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\t\tconst checked = new Map();\n\t\t\t\t\tfor (const source of sources) {\n\t\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (queued_root_effects.length > 0) {\n\t\t\t\t\t\tcurrent_batch = batch;\n\t\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\t\tfor (const root of queued_root_effects) {\n\t\t\t\t\t\t\tbatch.#traverse_effect_tree(root, [], []);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO do we need to do anything with the dummy effect arrays?\n\n\t\t\t\t\t\tbatch.deactivate();\n\t\t\t\t\t}\n\n\t\t\t\t\tqueued_root_effects = prev_queued_root_effects;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = previous_batch_values;\n\t\t}\n\n\t\tthis.committed = true;\n\t\tbatches.delete(this);\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} blocking\n\t */\n\tincrement(blocking) {\n\t\tthis.#pending += 1;\n\t\tif (blocking) this.#blocking_pending += 1;\n\t}\n\n\t/**\n\t *\n\t * @param {boolean} blocking\n\t */\n\tdecrement(blocking) {\n\t\tthis.#pending -= 1;\n\t\tif (blocking) this.#blocking_pending -= 1;\n\n\t\tif (this.#decrement_queued) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\n\t\t\tif (!this.#is_deferred()) {\n\t\t\t\t// we only reschedule previously-deferred effects if we expect\n\t\t\t\t// to be able to run them after processing the batch\n\t\t\t\tthis.revive();\n\t\t\t} else if (queued_root_effects.length > 0) {\n\t\t\t\t// if other effects are scheduled, process the batch _without_\n\t\t\t\t// rescheduling the previously-deferred effects\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\t}\n\n\trevive() {\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tthis.flush();\n\t}\n\n\t/** @param {() => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\t\t\tbatches.add(current_batch);\n\n\t\t\tif (!is_flushing_sync) {\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.flush();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && batches.size === 1)) return;\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map(this.current);\n\n\t\t// ...and undo changes belonging to other batches\n\t\tfor (const batch of batches) {\n\t\t\tif (batch === this) continue;\n\n\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tif (current_batch !== null) {\n\t\t\t\tflush_effects();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\tcurrent_batch?.flush();\n\n\t\t\t\t// we need to check again, in case we just updated an `$effect.pending()`\n\t\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\t\t// this would be reset in `flush_effects()` but since we are early returning here,\n\t\t\t\t\t// we need to reset it here as well in case the first time there's 0 queued root effects\n\t\t\t\t\tlast_scheduled_effect = null;\n\n\t\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflush_effects();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction flush_effects() {\n\tis_flushing = true;\n\n\tvar source_stacks = DEV ? new Set() : null;\n\n\ttry {\n\t\tvar flush_count = 0;\n\n\t\twhile (queued_root_effects.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\n\t\t\tif (flush_count++ > 1000) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tvar updates = new Map();\n\n\t\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentry.count += update.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const update of updates.values()) {\n\t\t\t\t\t\tif (update.error) {\n\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\tconsole.error(update.error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinfinite_loop_guard();\n\t\t\t}\n\n\t\t\tbatch.process(queued_root_effects);\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t/** @type {Set<Source>} */ (source_stacks).add(source);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tqueued_root_effects = [];\n\n\t\tis_flushing = false;\n\t\tlast_scheduled_effect = null;\n\n\t\tif (DEV) {\n\t\t\tfor (const source of /** @type {Set<Source>} */ (source_stacks)) {\n\t\t\t\tsource.updated = null;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction infinite_loop_guard() {\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tvar effect = (last_scheduled_effect = signal);\n\n\tvar boundary = effect.b;\n\n\t// defer render effects inside a pending boundary\n\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\tif (\n\t\tboundary?.is_pending &&\n\t\t(signal.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t(signal.f & REACTION_RAN) === 0\n\t) {\n\t\tboundary.defer_effect(signal);\n\t\treturn;\n\t}\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t// updated an internal source, or because a branch is being unskipped,\n\t\t// bail out or we'll cause a second flush\n\t\tif (\n\t\t\tis_flushing &&\n\t\t\teffect === active_effect &&\n\t\t\t(flags & BLOCK_EFFECT) !== 0 &&\n\t\t\t(flags & HEAD_EFFECT) === 0 &&\n\t\t\t(flags & REACTION_RAN) !== 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t// branch is already dirty, bail\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\ttry {\n\t\tflushSync(() => {\n\t\t\tfor (const version of eager_versions) {\n\t\t\t\tupdate(version);\n\t\t\t}\n\t\t});\n\t} finally {\n\t\teager_versions = [];\n\t}\n}\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar version = source(0);\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\t// revert state changes\n\tfor (var [source, value] of batch.previous) {\n\t\tsource.v = value;\n\t}\n\n\t// make writable deriveds dirty, so they recalculate correctly\n\tfor (source of batch.current.keys()) {\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tset_signal_status(source, DIRTY);\n\t\t}\n\t}\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batches.has(batch)) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, value] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.revive();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batches.has(batch)) {\n\t\t\t\tbatches.delete(batch);\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\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};\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, schedule_effect } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\nimport { set_signal_status } from '../../reactivity/status.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n * failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n * pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @returns {void}\n */\nexport function boundary(node, props, children) {\n\tnew Boundary(node, props, children);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t */\n\tconstructor(node, props, children) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = /** @type {Comment} */ (this.#hydrate_open);\n\t\t\t\thydrate_next();\n\n\t\t\t\tif (comment.data === HYDRATION_START_ELSE) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\tBatch.ensure();\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve();\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t#resolve() {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be rescheduled —\n\t\t// after the next traversal (which will happen immediately, due to the\n\t\t// same update that brought us here) the effects will be flushed\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tschedule_effect(e);\n\t\t}\n\n\t\tthis.#dirty_effects.clear();\n\t\tthis.#maybe_dirty_effects.clear();\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t */\n\t#update_pending_count(d) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve();\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t */\n\tupdate_pending_count(d) {\n\t\tthis.#update_pending_count(d);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!onerror && !failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.#run(() => {\n\t\t\t\t// If the failure happened while flushing effects, current_batch can be null\n\t\t\t\tBatch.ensure();\n\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tonerror?.(error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (error) {\n\t\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t\t}\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\tBatch.ensure();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","/** @import { Blocker, Effect, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\tcurrent_async_effect,\n\tderived,\n\tderived_safe_equal,\n\tset_from_async_derived\n} from './deriveds.js';\nimport { aborted } from './effects.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(sync.map(d));\n\t\treturn;\n\t}\n\n\tvar batch = current_batch;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/** @param {Value[]} values */\n\tfunction finish(values) {\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn(values);\n\t\t} catch (error) {\n\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t}\n\t\t}\n\n\t\tbatch?.deactivate();\n\t\tunset_context();\n\t}\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish(sync.map(d)));\n\t\treturn;\n\t}\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\trestore();\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then((result) => finish([...sync.map(d), ...result]))\n\t\t\t.catch((error) => invoke_error_boundary(error, parent));\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(run);\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = active_effect;\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = current_batch;\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\t\tif (activate_batch) previous_batch?.activate();\n\n\t\tif (DEV) {\n\t\t\tset_from_async_derived(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = current_async_effect;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_from_async_derived(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had a normal completion and `return` is defined on the iterator, call it and return the value\n\t\tif (normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context() {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\n\tif (DEV) {\n\t\tset_from_async_derived(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\tif (errored) {\n\t\t\t\t\tthrow errored.error;\n\t\t\t\t}\n\n\t\t\t\tif (aborted(active)) {\n\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t}\n\n\t\t\t\trestore();\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\n\t\t\tunset_context();\n\t\t\tcurrent_batch?.deactivate();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(decrement_pending);\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\nexport function increment_pending() {\n\tvar boundary = /** @type {Boundary} */ (/** @type {Effect} */ (active_effect).b);\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = boundary.is_rendered();\n\n\tboundary.update_pending_count(1);\n\tbatch.increment(blocking);\n\n\treturn () => {\n\t\tboundary.update_pending_count(-1);\n\t\tbatch.decrement(blocking);\n\t};\n}\n","/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Effect | null} */\nexport let current_async_effect = null;\n\n/** @param {Effect | null} v */\nexport function set_from_async_derived(v) {\n\tcurrent_async_effect = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Map();\n\n\tasync_effect(() => {\n\t\tif (DEV) current_async_effect = active_effect;\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn())\n\t\t\t\t.then(d.resolve, d.reject)\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (batch === current_batch && batch.committed) {\n\t\t\t\t\t\t// if the batch was rejected as stale, we need to cleanup\n\t\t\t\t\t\t// after any `$.save(...)` calls inside `fn()`\n\t\t\t\t\t\tbatch.deactivate();\n\t\t\t\t\t}\n\n\t\t\t\t\tunset_context();\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) current_async_effect = null;\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\tvar decrement_pending = increment_pending();\n\n\t\t\tdeferreds.get(batch)?.reject(STALE_REACTION);\n\t\t\tdeferreds.delete(batch); // delete to ensure correct order in Map iteration below\n\t\t\tdeferreds.set(batch, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tcurrent_async_effect = null;\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tif (error !== STALE_REACTION) {\n\t\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\t\tinternal_set(signal, error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\t// All prior async derived runs are now stale\n\t\t\t\tfor (const [b, d] of deferreds) {\n\t\t\t\t\tdeferreds.delete(b);\n\t\t\t\t\tif (b === batch) break;\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (decrement_pending) {\n\t\t\t\tdecrement_pending();\n\t\t\t}\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds.values()) {\n\t\t\td.reject(STALE_REACTION);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\t// The original parent effect might've been destroyed but the derived\n\t\t\t// is used elsewhere now - do not return the destroyed effect in that case\n\t\t\treturn (parent.f & DESTROYED) === 0 ? /** @type {Effect} */ (parent) : null;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tderived.v = value;\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\te.ac?.abort(STALE_REACTION);\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing\n\t\t\te.teardown = noop;\n\t\t\te.ac = null;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { includes } from '../../shared/utils.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport { Batch, batch_values, eager_block_effects, schedule_effect } from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<any>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !includes.call(current_sources, source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\tupdate_derived_status(derived);\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & EAGER_EFFECT) !== 0) {\n\t\t\teager_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds can be reliably unmarked right away\n\t\t\t\tif (flags & CONNECTED) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(/** @type {Effect} */ (reaction));\n\t\t\t}\n\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\twith_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, REACTION_RAN } from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tdocument.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)\n\t);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tREACTION_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, schedule_effect } from './batch.js';\nimport { flatten, increment_pending } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\t// if an effect has already ran and doesn't need to be kept in the tree\n\t// (because it won't re-run, has no DOM, and has no teardown etc)\n\t// then we skip it and go to its child (if any)\n\tif (\n\t\tsync &&\n\t\te.deps === null &&\n\t\te.teardown === null &&\n\t\te.nodes === null &&\n\t\te.first === e.last && // either `null`, or a singular child\n\t\t(e.f & EFFECT_PRESERVED) === 0\n\t) {\n\t\te = e.first;\n\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & REACTION_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn, true);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tif (async.length > 0 || blockers.length > 0) {\n\t\tvar decrement_pending = increment_pending();\n\t}\n\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)), false);\n\n\t\tif (decrement_pending) {\n\t\t\tdecrement_pending();\n\t\t}\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent =\n\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tschedule_effect(effect);\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\tdestroy_derived_effects,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\n\nlet is_updating_effect = false;\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif (flags & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && includes.call(current_sources, signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\treaction.f |= REACTION_RAN;\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\tupdate_derived_status(derived);\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\t// TODO reinstate this, but make it actually work\n\t\t// if (current_async_effect) {\n\t\t// \tvar tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;\n\t\t// \tvar was_read = current_async_effect.deps?.includes(signal);\n\n\t\t// \tif (!tracking && !untracking && !was_read) {\n\t\t// \t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t// \t\tvar trace = get_error('traced at');\n\t\t// \t\t// eslint-disable-next-line no-console\n\t\t// \t\tif (trace) console.warn(trace);\n\t\t// \t}\n\t\t// }\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\tvar trace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n * // this will run when `data` changes, but not when `time` changes\n * save(data, {\n * timestamp: untrack(() => time)\n * });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event[event_symbol];\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent[event_symbol] = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[event_symbol] = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","/** @import {} from 'trusted-types' */\n\nimport { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nfunction create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n * @param {boolean} trusted\n */\nexport function create_fragment_from_html(html, trusted = false) {\n\tvar elem = create_element('template');\n\thtml = html.replaceAll('<!>', '<!---->'); // XHTML compliance\n\telem.innerHTML = trusted ? create_trusted_html(html) : html;\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content, true);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped, true));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.nodeName === TEMPLATE_TAG\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.nodeName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, STATE_SYMBOL } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /** @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t}\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t#commit = () => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t// or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit();\n\t\t}\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tconst data = read_hydration_instruction(node);\n\n\t\t\t/**\n\t\t\t * @type {number | false}\n\t\t\t * \"[\" = branch 0, \"[1\" = branch 1, \"[2\" = branch 2, ..., \"[!\" = else (false)\n\t\t\t */\n\t\t\tvar hydrated_key;\n\n\t\t\tif (data === HYDRATION_START) {\n\t\t\t\thydrated_key = 0;\n\t\t\t} else if (data === HYDRATION_START_ELSE) {\n\t\t\t\thydrated_key = false;\n\t\t\t} else {\n\t\t\t\thydrated_key = parseInt(data.substring(1)); // \"[1\", \"[2\", etc.\n\t\t\t}\n\n\t\t\tif (key !== hydrated_key) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(false, null);\n\t\t}\n\t}, flags);\n}\n","/** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { BRANCH_EFFECT, COMMENT_NODE, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor\n\t\tvar fast_path = transitions.length === 0 && controlled_anchor !== null;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(to_destroy, remove_dom = true) {\n\t// TODO only destroy effects if no pending batch needs them. otherwise,\n\t// just re-add the `EFFECT_OFFSCREEN` flag\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar items = new Map();\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(get_first_child(parent_node))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn is_array(collection) ? collection : collection == null ? [] : array_from(collection);\n\t});\n\n\t/** @type {V[]} */\n\tvar array;\n\n\tvar first_run = true;\n\n\tfunction commit() {\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tvar effect = block(() => {\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(() => {\n\t\t\t\t\t// TODO presumably we need to do something here?\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcommit();\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\t/** @type {EachState} */\n\tvar state = { effect, flags, items, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(current.next);\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { FILENAME, HYDRATION_ERROR } from '../../../../constants.js';\nimport { remove_effect_dom, template_effect } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport { hash, sanitize_location } from '../../../../utils.js';\nimport { DEV } from 'esm-env';\nimport { dev_current_component_function } from '../../context.js';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { active_effect } from '../../runtime.js';\nimport { COMMENT_NODE } from '#client/constants';\n\n/**\n * @param {Element} element\n * @param {string | null} server_hash\n * @param {string} value\n */\nfunction check_hash(element, server_hash, value) {\n\tif (!server_hash || server_hash === hash(String(value ?? ''))) return;\n\n\tlet location;\n\n\t// @ts-expect-error\n\tconst loc = element.__svelte_meta?.loc;\n\tif (loc) {\n\t\tlocation = `near ${loc.file}:${loc.line}:${loc.column}`;\n\t} else if (dev_current_component_function?.[FILENAME]) {\n\t\tlocation = `in ${dev_current_component_function[FILENAME]}`;\n\t}\n\n\tw.hydration_html_changed(sanitize_location(location));\n}\n\n/**\n * @param {Element | Text | Comment} node\n * @param {() => string} get_value\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(node, get_value, svg = false, mathml = false, skip_warning = false) {\n\tvar anchor = node;\n\n\tvar value = '';\n\n\ttemplate_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (value === (value = get_value() ?? '')) {\n\t\t\tif (hydrating) hydrate_next();\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes !== null) {\n\t\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\t\teffect.nodes = null;\n\t\t}\n\n\t\tif (value === '') return;\n\n\t\tif (hydrating) {\n\t\t\t// We're deliberately not trying to repair mismatches between server and client,\n\t\t\t// as it's costly and error-prone (and it's an edge case to have a mismatch anyway)\n\t\t\tvar hash = /** @type {Comment} */ (hydrate_node).data;\n\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = hydrate_next();\n\t\t\tvar last = next;\n\n\t\t\twhile (\n\t\t\t\tnext !== null &&\n\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t) {\n\t\t\t\tlast = next;\n\t\t\t\tnext = get_next_sibling(next);\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tw.hydration_mismatch();\n\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t}\n\n\t\t\tif (DEV && !skip_warning) {\n\t\t\t\tcheck_hash(/** @type {Element} */ (next.parentNode), hash, value);\n\t\t\t}\n\n\t\t\tassign_nodes(hydrate_node, last);\n\t\t\tanchor = set_hydrate_node(next);\n\t\t\treturn;\n\t\t}\n\n\t\tvar html = value + '';\n\t\tif (svg) html = `<svg>${html}</svg>`;\n\t\telse if (mathml) html = `<math>${html}</math>`;\n\n\t\t// Don't use create_fragment_with_script_from_html here because that would mean script tags are executed.\n\t\t// @html is basically `.innerHTML = ...` and that doesn't execute scripts either due to security reasons.\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = create_fragment_from_html(html);\n\n\t\tif (svg || mathml) {\n\t\t\tnode = /** @type {Element} */ (get_first_child(node));\n\t\t}\n\n\t\tassign_nodes(\n\t\t\t/** @type {TemplateNode} */ (get_first_child(node)),\n\t\t\t/** @type {TemplateNode} */ (node.lastChild)\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(node)) {\n\t\t\t\tanchor.before(/** @type {TemplateNode} */ (get_first_child(node)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(node);\n\t\t}\n\t});\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { prevent_snippet_stringification } from '../../../shared/validate.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tconst snippet = get_snippet() ?? null;\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tbranches.ensure(snippet, snippet && ((anchor) => snippet(anchor, ...args)));\n\t}, EFFECT_TRANSPARENT);\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\tconst snippet = (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n\n\tprevent_snippet_stringification(snippet);\n\n\treturn snippet;\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n * render: () => string\n * setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html, true);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== ELEMENT_NODE)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n","import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\nimport { create_element } from './operations.js';\n\n/**\n * @param {Node} anchor\n * @param {{ hash: string, code: string }} css\n */\nexport function append_styles(anchor, css) {\n\t// Use `queue_micro_task` to ensure `anchor` is in the DOM, otherwise getRootNode() will yield wrong results\n\teffect(() => {\n\t\tvar root = anchor.getRootNode();\n\n\t\tvar target = /** @type {ShadowRoot} */ (root).host\n\t\t\t? /** @type {ShadowRoot} */ (root)\n\t\t\t: /** @type {Document} */ (root).head ?? /** @type {Document} */ (root.ownerDocument).head;\n\n\t\t// Always querying the DOM is roughly the same perf as additionally checking for presence in a map first assuming\n\t\t// that you'll get cache hits half of the time, so we just always query the dom for simplicity and code savings.\n\t\tif (!target.querySelector('#' + css.hash)) {\n\t\t\tconst style = create_element('style');\n\t\t\tstyle.id = css.hash;\n\t\t\tstyle.textContent = css.code;\n\n\t\t\ttarget.appendChild(style);\n\n\t\t\tif (DEV) {\n\t\t\t\tregister_style(css.hash, style);\n\t\t\t}\n\t\t}\n\t});\n}\n","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized = (name in replacements && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key in directives) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key in styles) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","import { to_class } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev = dom.__className;\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\t// @ts-expect-error\n\tvar prev = dom.__style;\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tdom.__style = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { IS_XHTML, LOADING_ATTR_SYMBOL } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === LINK_TAG)\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.nodeName === OPTION_TAG;\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar is_delegated = can_delegate_event(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!is_delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (is_delegated) {\n\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\tdelegate([event_name]);\n\t\t\t} else if (value != null) {\n\t\t\t\t/**\n\t\t\t\t * @this {any}\n\t\t\t\t * @param {Event} evt\n\t\t\t\t */\n\t\t\t\tfunction handle(evt) {\n\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t}\n\n\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === SELECT_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { is_runes } from '../../../context.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// we need both, because in non-async mode, render effects run before previous_batch is set\n\t\t\tvar batch = /** @type {Batch} */ (previous_batch ?? current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\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}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","import { STATE_SYMBOL } from '#client/constants';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\nimport { queue_micro_task } from '../../task.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// We cannot use effects in the teardown phase, we we use a microtask instead.\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol();\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store the store to update\n * @param {any} expression the expression that mutates the store\n * @param {V} new_value the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tstore.set(new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tstore.set(store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tvar setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (this latter part is necessary\n\t\t\t// because `bind:this` can read props after the component has\n\t\t\t// been destroyed. TODO simplify `bind:this`\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: null; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","/**\n * Substitui o `browser` do `$app/environment`. Mesma semântica — false durante\n * SSR/prerender, true no navegador — mas sem depender do SvelteKit, que não\n * existe no bundle publicado.\n */\nexport const browser = typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Erro de integração: o consumidor não chamou `Core.applyKey()` antes de montar\n * um componente. A mensagem é exibida direto na UI (cada componente já embrulha\n * a chamada de API num `.catch`), então precisa ser legível por humanos.\n */\nexport class SevnKeyMissingError extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t'Chave de acesso não configurada. Chame Core.applyKey(\"sua-chave\") ' +\n\t\t\t\t'antes de montar o componente, ou carregue o script com ?cid=sua-chave.'\n\t\t);\n\t\tthis.name = 'SevnKeyMissingError';\n\t}\n}\n\n/** Erro de rede após esgotar todos os hosts (primário, secundário e failover). */\nexport class SevnNetworkError extends Error {\n\tconstructor(url: string, cause?: unknown) {\n\t\tsuper(`Não foi possível contatar a API para ${url}.`);\n\t\tthis.name = 'SevnNetworkError';\n\t\tthis.cause = cause;\n\t}\n}\n","import type { SevnConfig } from './config';\n\n/**\n * Estado compartilhado por TODAS as cópias do pacote na mesma página.\n *\n * Cada arquivo UMD é auto-suficiente e carrega a própria cópia deste módulo —\n * é o preço de um bundle por componente. Sem um ponto comum, `Core.setTheme()`\n * chamado uma vez afetaria só um dos componentes da página, e cada bundle\n * descobriria sozinho que um host caiu.\n *\n * A chave carrega a versão do formato: duas versões diferentes do pacote\n * convivendo numa página não podem se corromper.\n */\nconst GLOBAL_KEY = '__sevnElectionsState_v1__';\n\nexport interface TransportState {\n\t/** Índice do host em uso dentro de `apiHosts`. */\n\tactiveIndex: number;\n\t/** Quando esse host foi fixado. */\n\tpinnedAt: number;\n}\n\nexport interface SharedState {\n\tconfig: SevnConfig;\n\ttransport: TransportState;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst globalScope = globalThis as any;\n\nexport function getStore(makeDefaults: () => SevnConfig): SharedState {\n\tif (!globalScope[GLOBAL_KEY]) {\n\t\tglobalScope[GLOBAL_KEY] = {\n\t\t\tconfig: makeDefaults(),\n\t\t\ttransport: { activeIndex: 0, pinnedAt: 0 }\n\t\t} satisfies SharedState;\n\t}\n\treturn globalScope[GLOBAL_KEY] as SharedState;\n}\n\nexport function clearStore(): void {\n\tdelete globalScope[GLOBAL_KEY];\n}\n","import { SevnKeyMissingError } from './errors';\nimport { clearStore, getStore } from './store';\n\n/** Cores customizáveis pelo consumidor. Viram custom properties `--sevn-color-*`. */\nexport interface SevnTheme {\n\tprimary?: string;\n\tsecondary?: string;\n\ttertiary?: string;\n\tneutral?: string;\n\tred?: string;\n\tgreen?: string;\n\tblue?: string;\n\tyellow?: string;\n\ttextSecondary?: string;\n}\n\nexport interface SevnConfig {\n\t/** Chave do cliente. É o subdomínio da API dele. */\n\tkey: string | null;\n\t/** Hosts na ordem de tentativa. Derivado da key, ou definido à mão. */\n\tapiHosts: string[];\n\t/** Base da CDN de arquivos estáticos compartilhados (mapas, índice de cidades). */\n\tassetsBase: string;\n\t/** Versão do layout de arquivos na CDN estática. */\n\tassetsVersion: string;\n\tcache: {\n\t\tstorageKey: string;\n\t\tmaxEntries: number;\n\t};\n\trequest: {\n\t\t/** Timeout de cada tentativa individual. */\n\t\ttimeoutMs: number;\n\t\t/** Tentativas por host antes de passar para o próximo. */\n\t\tretriesPerHost: number;\n\t\t/** Espera entre tentativas no mesmo host. */\n\t\tretryDelayMs: number;\n\t\t/** Por quanto tempo fica fixado num host secundário antes de retentar o primário. */\n\t\tstickyWindowMs: number;\n\t};\n\ttheme: SevnTheme | null;\n}\n\nconst FAILOVER_HOST = 'https://failover-api.sevntech.com';\n\n/** Rótulo DNS válido — a key vira subdomínio, então não pode ter qualquer coisa. */\nconst KEY_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i;\n\nfunction defaults(): SevnConfig {\n\treturn {\n\t\tkey: null,\n\t\tapiHosts: [],\n\t\tassetsBase: 'https://cdn.sevnelections.com/static',\n\t\tassetsVersion: 'v1',\n\t\tcache: {\n\t\t\tstorageKey: 'election_cache',\n\t\t\tmaxEntries: 200\n\t\t},\n\t\trequest: {\n\t\t\ttimeoutMs: 8000,\n\t\t\tretriesPerHost: 3,\n\t\t\tretryDelayMs: 300,\n\t\t\tstickyWindowMs: 120_000\n\t\t},\n\t\ttheme: null\n\t};\n}\n\n/** Usado pelo store para recriar o estado inicial. */\nexport const defaultsForStore = defaults;\n\n/**\n * Toda leitura e escrita passa pelo store compartilhado, para que as várias\n * cópias do pacote numa mesma página (um bundle UMD por componente) enxerguem\n * a mesma configuração.\n */\nfunction state() {\n\treturn getStore(defaults);\n}\n\n/** Hosts derivados da key, na ordem de tentativa. O failover é genérico, sem key. */\nexport function hostsForKey(key: string): string[] {\n\treturn [\n\t\t`https://${key}-api1.sevnelections.com`,\n\t\t`https://${key}-api2.sevnelections.com`,\n\t\tFAILOVER_HOST\n\t];\n}\n\nexport interface ConfigureOptions extends Partial<Omit<SevnConfig, 'cache' | 'request'>> {\n\tcache?: Partial<SevnConfig['cache']>;\n\trequest?: Partial<SevnConfig['request']>;\n}\n\n/**\n * Aplica a chave do cliente. É o único passo obrigatório de configuração —\n * a partir dela saem os hosts da API daquele cliente.\n */\nexport function applyKey(key: string): void {\n\tif (typeof key !== 'string' || !KEY_PATTERN.test(key)) {\n\t\tthrow new Error(\n\t\t\t`[sevn] Chave inválida: ${JSON.stringify(key)}. ` +\n\t\t\t\t'Use apenas letras, números e hífen (a chave vira subdomínio da API).'\n\t\t);\n\t}\n\n\tconst current = state();\n\tcurrent.config.key = key;\n\tcurrent.config.apiHosts = hostsForKey(key);\n}\n\n/**\n * Sobrescreve configuração. Existe para o showcase, staging e testes apontarem\n * para outra API sem precisar inventar um subdomínio de cliente.\n */\nexport function configure(options: ConfigureOptions): void {\n\tconst { cache, request, key, ...rest } = options;\n\tconst current = state();\n\n\tcurrent.config = {\n\t\t...current.config,\n\t\t...rest,\n\t\tcache: { ...current.config.cache, ...cache },\n\t\trequest: { ...current.config.request, ...request }\n\t};\n\n\t// `key` continua derivando os hosts, a menos que `apiHosts` venha junto e\n\t// vença explicitamente.\n\tif (key) {\n\t\tapplyKey(key);\n\t\tif (rest.apiHosts) current.config.apiHosts = rest.apiHosts;\n\t}\n}\n\nexport function getConfig(): Readonly<SevnConfig> {\n\treturn state().config;\n}\n\n/** True quando há hosts resolvidos — via key ou via `configure({ apiHosts })`. */\nexport function isReady(): boolean {\n\treturn state().config.apiHosts.length > 0;\n}\n\n/** Base da API. Lança se nada foi configurado — o componente exibe a mensagem. */\nexport function requireApiHosts(): string[] {\n\tif (!isReady()) throw new SevnKeyMissingError();\n\treturn state().config.apiHosts;\n}\n\n/** URL de um arquivo na CDN estática compartilhada. */\nexport function assetUrl(path: string): string {\n\tconst { assetsBase, assetsVersion } = state().config;\n\tconst base = assetsBase.replace(/\\/+$/, '');\n\tconst clean = String(path).replace(/^\\/+/, '');\n\treturn `${base}/${assetsVersion}/${clean}`;\n}\n\n/** Só para testes — devolve a configuração ao estado inicial. */\nexport function resetConfig(): void {\n\tclearStore();\n}\n","import tokens from '../styles/tokens.css?inline';\nimport { browser } from './env';\nimport { getConfig, type SevnTheme } from './config';\n\nconst TOKENS_ATTR = 'data-sevn-tokens';\nconst THEME_ATTR = 'data-sevn-theme';\n\n/** Nome da custom property correspondente a cada chave do tema. */\nconst THEME_VARS: Record<keyof SevnTheme, string> = {\n\tprimary: '--sevn-color-primary',\n\tsecondary: '--sevn-color-secondary',\n\ttertiary: '--sevn-color-tertiary',\n\tneutral: '--sevn-color-neutral',\n\tred: '--sevn-color-red',\n\tgreen: '--sevn-color-green',\n\tblue: '--sevn-color-blue',\n\tyellow: '--sevn-color-yellow',\n\ttextSecondary: '--sevn-color-text-secondary'\n};\n\n/**\n * Injeta os tokens e o reset escopado uma única vez por documento. Chamado na\n * construção de cada componente — o consumidor não precisa linkar CSS nenhum.\n */\nexport function ensureTokens(): void {\n\tif (!browser) return;\n\tif (document.querySelector(`style[${TOKENS_ATTR}]`)) return;\n\n\tconst style = document.createElement('style');\n\tstyle.setAttribute(TOKENS_ATTR, '');\n\tstyle.textContent = tokens;\n\tdocument.head.prepend(style);\n\n\tconst theme = getConfig().theme;\n\tif (theme) applyTheme(theme);\n}\n\n/**\n * Sobrescreve as cores. Vem depois dos tokens no `<head>`, então vence sem\n * precisar de `!important`.\n */\nexport function applyTheme(theme: SevnTheme): void {\n\tif (!browser) return;\n\n\tconst declarations = (Object.keys(THEME_VARS) as (keyof SevnTheme)[])\n\t\t.filter((key) => theme[key])\n\t\t.map((key) => `\\t${THEME_VARS[key]}: ${theme[key]};`);\n\n\tif (declarations.length === 0) return;\n\n\tlet style = document.querySelector<HTMLStyleElement>(`style[${THEME_ATTR}]`);\n\tif (!style) {\n\t\tstyle = document.createElement('style');\n\t\tstyle.setAttribute(THEME_ATTR, '');\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tstyle.textContent = `:root {\\n${declarations.join('\\n')}\\n}`;\n}\n","import { mount, unmount } from 'svelte';\nimport { browser } from '../core/env';\nimport { ensureTokens } from '../core/styles';\n\n/** Onde montar: um elemento, ou um seletor CSS resolvido no momento da criação. */\nexport type SevnTarget = Element | string;\n\nexport type SevnOptions<P> = P & { target: SevnTarget };\n\nexport interface SevnInstance {\n\t/** Desmonta e remove o componente do DOM. */\n\tdestroy(): Promise<void>;\n}\n\nexport interface SevnComponent<P> {\n\tnew (options: SevnOptions<P>): SevnInstance;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype SvelteComponentModule = any;\n\n/**\n * Embrulha um componente Svelte numa classe JS comum.\n *\n * O Svelte 5 acabou com o componente-classe: `mount()` é uma função e o que ela\n * devolve não é instanciável. Como o pacote precisa ser usável por quem não tem\n * (nem quer ter) Svelte, a classe é reconstruída aqui — é a única camada do\n * pacote que o consumidor final enxerga.\n */\n// `object` e não `Record<string, unknown>`: interfaces não têm index signature\n// implícita e seriam rejeitadas pela restrição mais estrita.\nexport function defineComponent<P extends object>(\n\tComponent: SvelteComponentModule,\n\tname: string\n): SevnComponent<P> {\n\treturn class SevnComponentImpl implements SevnInstance {\n\t\t#instance: Record<string, unknown> | null = null;\n\n\t\tconstructor(options: SevnOptions<P>) {\n\t\t\tif (!browser) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`[sevn] ${name} só pode ser instanciado no navegador. ` +\n\t\t\t\t\t\t'Em SSR, monte o componente dentro de um efeito de cliente.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst { target, ...props } = (options ?? {}) as SevnOptions<Record<string, unknown>>;\n\n\t\t\tconst element = typeof target === 'string' ? document.querySelector(target) : target;\n\n\t\t\tif (!element) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`[sevn] ${name}: alvo não encontrado` +\n\t\t\t\t\t\t(typeof target === 'string' ? ` para o seletor \"${target}\".` : '.')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Injeta tokens e reset uma vez por documento — o consumidor não\n\t\t\t// precisa linkar CSS nenhum.\n\t\t\tensureTokens();\n\n\t\t\tthis.#instance = mount(Component, { target: element, props });\n\t\t}\n\n\t\tdestroy(): Promise<void> {\n\t\t\tif (!this.#instance) return Promise.resolve();\n\t\t\tconst instance = this.#instance;\n\t\t\tthis.#instance = null;\n\t\t\treturn unmount(instance);\n\t\t}\n\t};\n}\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.51.4';\nexport const PUBLIC_VERSION = '5';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","<script>\n\tlet { children } = $props();\n</script>\n\n<div class=\"ad-container\">\n\t{@render children()}\n</div>\n\n<style>\n\t.ad-container {\n\t\twidth: 100%;\n\t\t/* Prefixada: custom properties herdam, e sem o namespace um site cliente\n que use --ad-height por acaso mudaria a altura do nosso bloco. */\n\t\theight: var(--sevn-ad-height, 120px);\n\t\tbackground-color: #f0f0f0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t}\n</style>\n","export default \"data:image/svg+xml,%3csvg%20width='37'%20height='45'%20viewBox='0%200%2037%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20opacity='0.5'%3e%3cpath%20d='M11.3846%2028.125H25.6154C30.34%2028.125%2034.1538%2031.8937%2034.1538%2036.5625V42.1875H2.84615V36.5625C2.84615%2031.8937%206.66%2028.125%2011.3846%2028.125ZM11.3846%2011.25H25.6154V18.2812C25.6154%2020.1461%2024.8657%2021.9345%2023.5313%2023.2531C22.1969%2024.5717%2020.3871%2025.3125%2018.5%2025.3125C16.6129%2025.3125%2014.8031%2024.5717%2013.4687%2023.2531C12.1343%2021.9345%2011.3846%2020.1461%2011.3846%2018.2812V11.25ZM25.6154%2011.25C27.1808%2011.25%2028.4615%2012.5156%2028.4615%2014.0625C28.4615%2015.6094%2027.1808%2016.875%2025.6154%2016.875V11.25ZM11.3846%2016.875C9.81923%2016.875%208.53846%2015.6094%208.53846%2014.0625C8.53846%2012.5156%209.81923%2011.25%2011.3846%2011.25V16.875Z'%20fill='%231C1C1C'/%3e%3cpath%20d='M11.7262%2011.5875H10.3031C8.16847%209.84374%208.53847%207.17186%208.53847%204.92186C8.53847%202.67186%209.96154%204.19061%2011.3846%204.19061C12.8077%204.19061%2014.2308%205.59686%2014.2308%205.59686C11.7262%205.59686%2011.3846%202.78436%2011.3846%202.78436H19.9231C23.0539%202.78436%2025.6154%205.31561%2025.6154%208.40936H27.0385C27.0385%208.40936%2027.75%2010.5187%2026.6969%2011.925L11.7546%2011.5875H11.7262Z'%20fill='%231C1C1C'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='37'%20height='45'%20viewBox='0%200%2037%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20opacity='0.5'%3e%3cpath%20d='M11.3846%2028.125H25.6154C30.34%2028.125%2034.1539%2031.8937%2034.1539%2036.5625V42.1875H2.84616V36.5625C2.84616%2031.8937%206.66001%2028.125%2011.3846%2028.125ZM11.3846%2011.25H25.6154V18.2812C25.6154%2020.1461%2024.8657%2021.9345%2023.5313%2023.2531C22.197%2024.5717%2020.3871%2025.3125%2018.5%2025.3125C16.6129%2025.3125%2014.8031%2024.5717%2013.4687%2023.2531C12.1343%2021.9345%2011.3846%2020.1461%2011.3846%2018.2812V11.25Z'%20fill='black'/%3e%3cpath%20d='M27.0385%2011.0531V9.84375C27.0385%206.75%2024.4769%204.21875%2021.3461%204.21875L19.9231%202.8125H15.6538C12.5231%202.8125%209.96153%205.34375%209.96153%208.4375V11.0531C9.96153%2014.7938%208.45307%2018.3656%205.80615%2021.0094L4.26923%2022.5281L6.37538%2023.5688C8.53846%2024.6375%2011.1285%2024.2156%2012.8077%2022.5281H24.1923C25.9%2024.2156%2028.49%2024.6375%2030.6246%2023.5688L32.7308%2022.5281L31.1938%2021.0094C29.8732%2019.701%2028.8264%2018.1483%2028.1134%2016.4399C27.4004%2014.7316%2027.0351%2012.9011%2027.0385%2011.0531Z'%20fill='black'/%3e%3cpath%20d='M19.9231%202.8125C19.9231%202.8125%2021.3462%202.8125%2021.3462%204.21875H19.9231V2.8125Z'%20fill='black'/%3e%3c/g%3e%3c/svg%3e\"","<script>\n import avatarman from '../assets/avatarman.svg';\n import avatarwoman from '../assets/avatarwoman.svg';\n\n /** @type {{ name: string, photoUrl?: string, avatar?: 'man'|'woman', avatarColor?: string, size?: string, tag?: string, tagColor?: string }} */\n let { name, photoUrl, avatar = 'man', avatarColor, size = 'md', tag, tagColor = 'var(--sevn-color-green)' } = $props();\n\n // Se a foto real (vinda da API) falhar ao carregar, cai pro ícone genérico.\n let photoFailed = $state(false);\n\n const fallbackSrc = $derived(avatar === 'woman' ? avatarwoman : avatarman);\n const usePhoto = $derived(!!photoUrl && !photoFailed);\n const avatarSrc = $derived(usePhoto ? photoUrl : fallbackSrc);\n\n /** @type {Record<string, string>} */\n const sizes = {\n sm: '40px',\n md: '56px',\n lg: '72px'\n };\n\n /** @type {Record<string, { fontSize: string, padding: string }>} */\n const tagSizes = {\n sm: { fontSize: '9px', padding: '1px 5px' },\n md: { fontSize: '12px', padding: '2px 8px' },\n lg: { fontSize: '14px', padding: '3px 10px' }\n };\n\n const avatarSize = $derived(sizes[size] ?? size);\n const tagStyle = $derived(tagSizes[size] ?? tagSizes.md);\n</script>\n\n<div class=\"avatar-container\">\n <div class=\"avatar\" style=\"background-color: {avatarColor ?? 'var(--sevn-color-secondary)'}; width: {avatarSize}; height: {avatarSize};\">\n <img\n class=\"avatar-image\"\n class:avatar-image--photo={usePhoto}\n src={avatarSrc}\n alt={name}\n width=\"1\"\n height=\"1\"\n onerror={() => (photoFailed = true)}\n />\n </div>\n {#if tag}\n <span class=\"avatar-tag\" style=\"background-color: {tagColor}; font-size: {tagStyle.fontSize}; padding: {tagStyle.padding};\">{tag}</span>\n {/if}\n</div>\n\n<style>\n .avatar-container {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n flex-shrink: 0;\n }\n\n .avatar {\n border-radius: 50%;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n overflow: hidden;\n }\n\n .avatar-image {\n width: 75%;\n height: auto;\n display: block;\n margin-bottom: -6%;\n }\n\n .avatar-image--photo {\n width: 100%;\n height: 100%;\n margin-bottom: 0;\n object-fit: cover;\n object-position: center top;\n }\n\n .avatar-tag {\n position: absolute;\n bottom: -5px;\n color: #fff;\n font-weight: 700;\n letter-spacing: 0.05em;\n border-radius: 4px;\n border: 1px solid #fff;\n white-space: nowrap;\n }\n</style>\n","export default \"data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M25.9798%2026.872L17.6305%2018.5227C16.9638%2019.0907%2016.1971%2019.5302%2015.3305%2019.8413C14.4638%2020.1524%2013.5927%2020.308%2012.7171%2020.308C10.582%2020.308%208.77493%2019.5689%207.29582%2018.0907C5.8167%2016.6124%205.07715%2014.8058%205.07715%2012.6707C5.07715%2010.5356%205.81581%208.728%207.29315%207.248C8.77048%205.768%2010.5767%205.02711%2012.7118%205.02533C14.8469%205.02356%2016.6549%205.76311%2018.1358%207.244C19.6167%208.72489%2020.3571%2010.5324%2020.3571%2012.6667C20.3571%2013.5929%2020.1931%2014.4893%2019.8651%2015.356C19.5371%2016.2227%2019.106%2016.964%2018.5718%2017.58L26.9211%2025.928L25.9798%2026.872ZM12.7185%2018.9733C14.4874%2018.9733%2015.9807%2018.3644%2017.1985%2017.1467C18.4163%2015.9289%2019.0251%2014.4351%2019.0251%2012.6653C19.0251%2010.8956%2018.4163%209.40222%2017.1985%208.18533C15.9807%206.96844%2014.4874%206.35956%2012.7185%206.35867C10.9496%206.35778%209.45581%206.96667%208.23715%208.18533C7.01848%209.404%206.40959%2010.8973%206.41048%2012.6653C6.41137%2014.4333%207.02026%2015.9267%208.23715%2017.1453C9.45404%2018.364%2010.9474%2018.9729%2012.7171%2018.972'%20fill='%231C1C1C'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='13'%20height='8'%20viewBox='0%200%2013%208'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M11.91%20-0.00016065L12.97%201.06084L7.193%206.83984C7.10043%206.93299%206.99036%207.00692%206.86911%207.05737C6.74786%207.10782%206.61783%207.13379%206.4865%207.13379C6.35517%207.13379%206.22514%207.10782%206.10389%207.05737C5.98264%207.00692%205.87257%206.93299%205.78%206.83984L2.65457e-07%201.06084L1.06%200.000838803L6.485%205.42484L11.91%20-0.00016065Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M10.5%201.5L1.5%2010.5M1.5%201.5L10.5%2010.5'%20stroke='black'%20stroke-width='1.6'%20stroke-linecap='round'/%3e%3c/svg%3e\"","<script>\n import { onMount } from 'svelte';\n import searchIconUrl from '../assets/icons/light_search.svg?url';\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import closeIconUrl from '../assets/icons/close.svg?url';\n\n /**\n * Props:\n * - label : placeholder do campo e label mobile\n * - showLabel : exibe ou oculta a label mobile (default: true)\n * - options : [{ value, label }]\n * - value : valor selecionado (bindable)\n * - meta : texto extra exibido após o valor selecionado (só web)\n * - width : largura CSS do componente (default: '100%')\n * - height : altura CSS do campo (default: '48px')\n * - labelAsPlaceholder : usa o label como placeholder do campo (default: false)\n * - showPlaceholderOnMobile : exibe o placeholder no mobile (default: false)\n * - disabled : bloqueia a abertura do dropdown (default: false)\n * - clearable : exibe o X para limpar a seleção (default: true)\n */\n\n let {\n label = '',\n showLabel = true,\n options = [],\n value = $bindable(null),\n meta = '',\n width = '100%',\n height = '48px',\n icon = searchIconUrl,\n iconSize = 13,\n showLabelInField = false,\n showDescriptionSelection = true,\n labelAsPlaceholder = true,\n showPlaceholderOnMobile = false,\n disabled = false,\n clearable = true,\n } = $props();\n\n const listboxId = `autocomplete-listbox-${Math.random().toString(36).slice(2, 9)}`;\n\n let open = $state(false);\n let search = $state('');\n let wrapperEl = $state(null);\n let inputEl = $state(null);\n\n let filtered = $derived(\n search.trim()\n ? options.filter(o => o.label.toLowerCase().includes(search.trim().toLowerCase()))\n : options\n );\n\n let selectedOption = $derived(\n value != null ? (options.find(o => o.value === value) ?? null) : null\n );\n\n function select(option) {\n value = option.value;\n search = '';\n open = false;\n }\n\n function toggle() {\n if (disabled) return;\n open = !open;\n if (!open) search = '';\n }\n\n // stopPropagation: o X vive dentro do campo, que é o próprio alvo de clique do\n // dropdown — sem isso, limpar também abriria/fecharia a lista.\n function clear(e) {\n e.stopPropagation();\n value = null;\n search = '';\n open = false;\n }\n\n function handleFieldKeydown(e) {\n // Só reage à tecla quando o foco está no próprio campo. Sem isso, o espaço\n // digitado no input de busca (que borbulha até aqui) seria engolido.\n if (e.target !== e.currentTarget) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggle();\n }\n }\n\n function handleOutsideClick(e) {\n if (wrapperEl && !wrapperEl.contains(e.target)) {\n open = false;\n search = '';\n }\n }\n\n function handleInputKeydown(e) {\n if (e.key === 'Escape') {\n open = false;\n search = '';\n }\n }\n\n $effect(() => {\n if (open && inputEl) {\n inputEl.focus();\n }\n });\n\n $effect(() => {\n if (disabled) {\n open = false;\n search = '';\n }\n });\n\n onMount(() => {\n document.addEventListener('mousedown', handleOutsideClick);\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n });\n</script>\n\n<div\n class=\"autocomplete\"\n class:show-placeholder-mobile={showPlaceholderOnMobile}\n bind:this={wrapperEl}\n style=\"--field-width: {width}; --field-height: {height}\"\n>\n <!-- Label: visível apenas no mobile, acima do campo -->\n {#if showLabel && label}\n <span class=\"mobile-label\">{label}</span>\n {/if}\n\n <!-- Campo principal. É uma div (e não um <button>) porque o X de limpar é um\n botão de verdade e precisa viver dentro do campo — botão dentro de botão\n o parser de HTML desfaz no SSR. -->\n <div\n class=\"field\"\n class:open\n class:has-value={selectedOption && !open}\n class:disabled\n role=\"combobox\"\n tabindex={disabled ? -1 : 0}\n onclick={toggle}\n onkeydown={handleFieldKeydown}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-expanded={open}\n aria-disabled={disabled}\n >\n {#if open}\n <input\n bind:this={inputEl}\n class=\"search-input\"\n bind:value={search}\n placeholder={label}\n onkeydown={handleInputKeydown}\n onclick={e => e.stopPropagation()}\n type=\"text\"\n />\n {:else if selectedOption}\n <span class=\"field-text\">\n {#if showLabelInField}<span class=\"field-label-prefix\">{label}</span>{/if}{selectedOption.label}\n </span>\n {:else}\n {#if labelAsPlaceholder}<span class=\"field-text is-placeholder\" class:force-placeholder={showPlaceholderOnMobile}>{label}</span>{/if}\n {/if}\n\n <!-- Com valor selecionado o X toma o lugar do chevron (não os dois juntos). -->\n {#if selectedOption && clearable && !disabled}\n <button class=\"icon-clear\" type=\"button\" onclick={clear} aria-label=\"Limpar seleção\">\n <img src={closeIconUrl} alt=\"\" aria-hidden=\"true\" width={iconSize ? iconSize : 12} height={iconSize ? iconSize : 12} />\n </button>\n {:else if selectedOption}\n <img class=\"icon-chevron\" class:open src={chevronIconUrl} alt=\"\" aria-hidden=\"true\" width={iconSize ? iconSize : 12} height={iconSize ? iconSize : 12} />\n {:else}\n <img class=\"icon-search\" src={icon} alt=\"\" aria-hidden=\"true\" width={iconSize} height={iconSize} />\n {/if}\n </div>\n\n <!-- \"Você selecionou\": visível apenas na web -->\n {#if selectedOption && showDescriptionSelection}\n <div class=\"web-info\">\n <span class=\"selected-label\"><strong>Você selecionou:</strong> {selectedOption.label}</span>\n {#if meta}\n <span class=\"meta\">{meta}</span>\n {/if}\n </div>\n {/if}\n\n <!-- Dropdown de opções -->\n {#if open}\n <div class=\"dropdown\" id={listboxId} role=\"listbox\">\n {#each filtered as option (option.value)}\n <button\n class=\"option\"\n class:selected={option.value === value}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n onclick={() => select(option)}\n >\n {option.label}\n </button>\n {:else}\n <div class=\"no-results\">Nenhum resultado encontrado</div>\n {/each}\n </div>\n {/if}\n</div>\n\n<style>\n .autocomplete {\n position: relative;\n width: var(--field-width);\n font-family: inherit;\n }\n\n /* ── Label (mobile only) ─────────────────────────────── */\n .mobile-label {\n display: none;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin-bottom: 6px;\n }\n\n @media (max-width: 768px) {\n .mobile-label {\n display: block;\n }\n }\n\n /* ── Campo principal ─────────────────────────────────── */\n .field {\n display: flex;\n align-items: center;\n width: 100%;\n height: var(--field-height);\n padding: 0 14px;\n background: var(--sevn-color-neutral);\n border: 1px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n gap: 8px;\n transition: border-color 0.15s, box-shadow 0.15s;\n color: var(--sevn-color-tertiary);\n }\n\n .field:hover {\n border-color: #d1d1d6;\n }\n\n .field.disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n .field.disabled:hover {\n border-color: transparent;\n }\n\n .field.open {\n border-color: var(--sevn-color-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--sevn-color-primary) 15%, transparent);\n background: #fff;\n }\n\n /* ── Texto do campo ──────────────────────────────────── */\n .field-text {\n flex: 1;\n text-align: left;\n font-size: 0.9375rem;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .field-text.is-placeholder {\n color: #9a9aaa;\n }\n\n .field-label-prefix {\n font-weight: 600;\n margin-right: 4px;\n }\n\n /* ── Input de busca ──────────────────────────────────── */\n .search-input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.9375rem;\n font-family: inherit;\n color: var(--sevn-color-tertiary);\n background: transparent;\n min-width: 0;\n }\n\n .search-input::placeholder {\n color: #9a9aaa;\n }\n\n /* ── Ícone de lupa ───────────────────────────────────── */\n .icon-search {\n flex-shrink: 0;\n }\n\n .field.open .icon-search {\n opacity: 1;\n }\n\n /* ── Botão de limpar ─────────────────────────────────── */\n .icon-clear {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 0;\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .icon-clear:hover,\n .icon-clear:focus-visible {\n background: rgba(0, 0, 0, 0.08);\n }\n\n /* ── Ícone de chevron ────────────────────────────────── */\n .icon-chevron {\n flex-shrink: 0;\n transition: transform 0.2s ease;\n }\n\n .icon-chevron.open {\n transform: rotate(180deg);\n }\n\n /* ── \"Você selecionou\" (web only) ────────────────────── */\n .web-info {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 20px;\n font-size: 0.8125rem;\n color: var(--sevn-color-tertiary);\n }\n\n .selected-label strong {\n font-weight: 600;\n }\n\n .meta {\n font-size: 0.7rem;\n opacity: 50%;\n }\n\n @media (max-width: 768px) {\n .web-info {\n display: none;\n }\n\n .field-text {\n font-weight: 600;\n }\n\n .field-text.is-placeholder:not(.force-placeholder) {\n display: none;\n }\n\n .search-input::placeholder {\n color: transparent;\n }\n\n .show-placeholder-mobile .search-input::placeholder {\n color: #9a9aaa;\n }\n\n .icon-search {\n margin-left: auto;\n }\n }\n\n /* ── Dropdown ────────────────────────────────────────── */\n .dropdown {\n position: absolute;\n top: calc(var(--field-height) + 6px);\n left: 0;\n right: 0;\n background: #fff;\n border: 1px solid #d1d1d6;\n border-radius: 8px;\n max-height: 240px;\n overflow-y: auto;\n z-index: 200;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1);\n scrollbar-width: thin;\n scrollbar-color: #d1d1d6 transparent;\n }\n\n .dropdown::-webkit-scrollbar {\n width: 4px;\n }\n\n .dropdown::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .dropdown::-webkit-scrollbar-thumb {\n background-color: #d1d1d6;\n border-radius: 4px;\n }\n\n /* ── Opção ───────────────────────────────────────────── */\n .option {\n display: block;\n width: 100%;\n padding: 11px 14px;\n text-align: left;\n background: none;\n border: none;\n border-bottom: 1px solid #f0f0f5;\n cursor: pointer;\n font-size: 0.9375rem;\n font-family: inherit;\n color: var(--sevn-color-tertiary);\n transition: background 0.1s;\n line-height: 1.4;\n }\n\n .option:last-child {\n border-bottom: none;\n }\n\n .option:hover {\n background: var(--sevn-color-neutral);\n }\n\n .option.selected {\n background: color-mix(in srgb, var(--sevn-color-primary) 8%, transparent);\n color: var(--sevn-color-primary);\n font-weight: 600;\n }\n\n .no-results {\n padding: 14px;\n color: #9a9aaa;\n font-size: 0.875rem;\n text-align: center;\n }\n</style>\n","export default \"data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M13.5%206.5L19%2012L13.5%2017.5M17.75%2012L4.75%2012'%20stroke='%231C1C1C'%20stroke-width='2'%20stroke-linecap='square'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20opacity='0.6'%3e%3cpath%20d='M10.5%206.5L5%2012L10.5%2017.5M6.25%2012L19.25%2012'%20stroke='%231C1C1C'%20stroke-width='2'%20stroke-linecap='square'/%3e%3c/g%3e%3c/svg%3e\"","<script lang=\"ts\">\n import arrowUp from '../assets/icons/arrow-up.svg?url';\n import arrowUpDisable from '../assets/icons/arrow-up-disable.svg?url';\n\n /**\n * @property {{ label: string; value: number; color: string }[]} items\n * @property {number} [max]\n * @property {string} [unit]\n * @property {boolean} [showValues]\n * @property {number} [trackHeight]\n * @property {number} [labelHeight]\n * @property {number} [minColWidth]\n */\n let {\n items = [],\n max,\n unit = '',\n showValues = true,\n trackHeight = 200,\n visibleCount = 6,\n colWidth = 60,\n }: {\n items: { label: string; value: number; color: string }[];\n max?: number;\n unit?: string;\n showValues?: boolean;\n trackHeight?: number;\n visibleCount?: number;\n colWidth?: number;\n } = $props();\n\n // Fixed chart width: visibleCount columns + gaps between them\n const chartWidth = $derived(visibleCount * colWidth + (visibleCount - 1) * 16);\n\n const domainMax = $derived(max ?? Math.max(...items.map(i => i.value), 1));\n\n function barPct(value: number): string {\n return `${(value / domainMax) * 100}%`;\n }\n\n function splitLabel(label: string): { prefix: string; bold: string } {\n const idx = label.lastIndexOf(' ');\n if (idx === -1) return { prefix: '', bold: label };\n return { prefix: label.slice(0, idx + 1), bold: label.slice(idx + 1) };\n }\n\n let scrollEl = $state<HTMLElement | null>(null);\n let canScrollLeft = $state(false);\n let canScrollRight = $state(false);\n\n function updateScrollState() {\n if (!scrollEl) return;\n canScrollLeft = scrollEl.scrollLeft > 0;\n canScrollRight = scrollEl.scrollLeft + scrollEl.clientWidth < scrollEl.scrollWidth - 1;\n }\n\n $effect(() => {\n if (!scrollEl) return;\n updateScrollState();\n scrollEl.addEventListener('scroll', updateScrollState, { passive: true });\n const ro = new ResizeObserver(updateScrollState);\n ro.observe(scrollEl);\n return () => {\n scrollEl.removeEventListener('scroll', updateScrollState);\n ro.disconnect();\n };\n });\n\n function scrollLeft() {\n scrollEl?.scrollBy({ left: -200, behavior: 'smooth' });\n }\n\n function scrollRight() {\n scrollEl?.scrollBy({ left: 200, behavior: 'smooth' });\n }\n</script>\n\n<div\n class=\"bar-chart\"\n style=\"--track-h: {trackHeight}px; --col-w: {colWidth}px; width: {chartWidth}px;\"\n>\n <div\n class=\"bar-chart-scroll\"\n bind:this={scrollEl}\n role=\"img\"\n aria-label=\"Gráfico de barras\"\n >\n {#each items as item}\n {@const { prefix, bold } = splitLabel(item.label)}\n <div\n class=\"bar-col\"\n style=\"--bar-pct: {barPct(item.value)}; --bar-color: {item.color};\"\n >\n <div class=\"bar-track\">\n {#if showValues}\n <span class=\"bar-value\">{item.value}{unit}</span>\n {/if}\n <div class=\"bar-fill\"></div>\n </div>\n\n <div class=\"bar-label-area\">\n <span class=\"bar-label\">{prefix}<strong>{bold}</strong></span>\n </div>\n </div>\n {/each}\n </div>\n\n {#if items.length > visibleCount}\n <div class=\"bar-chart-footer\">\n <button\n class=\"bar-chart-arrow\"\n onclick={scrollLeft}\n disabled={!canScrollLeft}\n aria-label=\"Anterior\"\n >\n {#if canScrollLeft}\n <img src={arrowUp} alt=\"\" class=\"flip\" />\n {:else}\n <img src={arrowUpDisable} alt=\"\" />\n {/if}\n </button>\n\n <button\n class=\"bar-chart-arrow\"\n onclick={scrollRight}\n disabled={!canScrollRight}\n aria-label=\"Próximo\"\n >\n {#if canScrollRight}\n <img src={arrowUp} alt=\"\" />\n {:else}\n <img src={arrowUpDisable} alt=\"\" class=\"flip\" />\n {/if}\n </button>\n </div>\n {/if}\n</div>\n\n<style>\n /* ── Wrapper ──────────────────────────────── */\n .bar-chart {\n display: flex;\n flex-direction: column;\n gap: 4px;\n contain: layout;\n }\n\n /* ── Scroll container ─────────────────────── */\n .bar-chart-scroll {\n width: 100%;\n display: flex;\n gap: 16px;\n /* padding-top gives room for bar-value above tallest bar.\n overflow-x: auto forces overflow-y: auto (CSS spec), which would clip\n the value label — padding prevents that. CLS = 0: total height is fixed. */\n padding-top: 24px;\n height: calc(var(--track-h) + 24px);\n overflow-x: auto;\n scrollbar-width: none;\n border-bottom: 3px solid #e5e5ea;\n\n }\n\n .bar-chart-scroll::-webkit-scrollbar {\n display: none;\n }\n\n /* ── Column ───────────────────────────────── */\n .bar-col {\n flex: 0 0 var(--col-w);\n display: flex;\n flex-direction: row;\n }\n\n /* ── Bar track ────────────────────────────── */\n .bar-track {\n flex: 1;\n position: relative;\n align-self: stretch;\n border-bottom: 1.5px solid #e5e5ea;\n }\n\n .bar-fill {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--bar-pct);\n background: var(--bar-color);\n border-radius: 50px 50px 0 0;\n }\n\n /* Value label — sits just above the bar top */\n .bar-value {\n position: absolute;\n left: 50%;\n bottom: calc(var(--bar-pct) + 6px);\n transform: translateX(-50%);\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n line-height: 1;\n }\n\n /* ── Label area — à direita da barra ─────── */\n .bar-label-area {\n display: flex;\n align-items: flex-end;\n padding: 0 0 6px 6px;\n }\n\n /* writing-mode: vertical-rl + rotate(180deg)\n → characters read bottom-to-top, base on left */\n .bar-label {\n writing-mode: vertical-rl;\n transform: rotate(180deg);\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n line-height: 1;\n }\n\n .bar-label strong {\n font-weight: 700;\n }\n\n /* ── Footer ───────────────────────────────── */\n .bar-chart-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 2px;\n }\n\n .bar-chart-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .bar-chart-arrow:disabled {\n cursor: default;\n }\n\n .bar-chart-arrow img {\n width: 24px;\n height: 24px;\n display: block;\n }\n\n .bar-chart-arrow .flip {\n transform: scaleX(-1);\n }\n</style>\n","<script>\n let { label, color = '#1C1C1C', fontSize = '0.6875rem', class: className = '' } = $props();\n</script>\n\n<span class=\"tag {className}\" style=\"background-color: {color}; font-size: {fontSize}\">\n {label}\n</span>\n\n<style>\n .tag {\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 5px;\n font-family: inherit;\n font-weight: 700;\n color: #ffffff;\n white-space: nowrap;\n letter-spacing: 0.03em;\n width: fit-content;\n }\n</style>\n","<script>\n import Avatar from './avatar.svelte';\n import Tag from './tag.svelte';\n\n /** @type {{\n * name: string,\n * photoUrl?: string,\n * avatar?: 'man'|'woman',\n * avatarColor?: string,\n * tag?: string,\n * tagColor?: string,\n * elected?: boolean,\n * electedLabel?: string,\n * electedColor?: string,\n * avatarTag?: string,\n * avatarTagColor?: string,\n * description?: string,\n * descriptionSide?: 'inline'|'right',\n * position?: string,\n * positionSide?: 'left'|'right',\n * positionSize?: string,\n * size?: string,\n * fontSize?: string,\n * descSize?: string,\n * tagSize?: string,\n * nameWeight?: number,\n * descWeight?: number,\n * wrapper?: boolean,\n * percent?: string,\n * percentSuffix?: string,\n * votes?: string\n }}\n */\n let { name,\n photoUrl,\n avatar = 'man',\n avatarColor,\n tag,\n tagColor,\n elected = false,\n electedLabel = 'ELEITO',\n electedColor = 'var(--sevn-color-green)',\n avatarTag,\n avatarTagColor,\n description,\n descriptionSide = 'inline',\n position,\n positionSide = 'right',\n positionSize, size = 'md',\n fontSize,\n descSize,\n tagSize,\n nameWeight = 700,\n descWeight = 400,\n wrapper = false,\n percent,\n percentSuffix,\n votes,\n } = $props();\n\n /** @type {Record<string, { fontSize: string, descSize: string, tagSize: string }>} */\n const presets = {\n sm: { fontSize: '0.875rem', descSize: '0.75rem', tagSize: '0.625rem' },\n md: { fontSize: '1.125rem', descSize: '0.875rem', tagSize: '0.6875rem' },\n lg: { fontSize: '1.375rem', descSize: '1rem', tagSize: '0.75rem' },\n };\n\n const s = $derived(presets[size] ?? presets.md);\n</script>\n\n<div\n class=\"candidate\"\n style=\"\n --font-name: {fontSize ?? s.fontSize};\n --font-desc: {descSize ?? s.descSize};\n --font-tag: {tagSize ?? s.tagSize};\n --font-position: {positionSize ?? s.fontSize};\n --weight-name: {nameWeight};\n --weight-desc: {descWeight};\n gap: {wrapper ? '10px' : '18px'};\n \"\n>\n {#if wrapper}\n <div class=\"candidate-wrapper\">\n <Avatar {name} {photoUrl} {avatar} {avatarColor} {size} tag={avatarTag} tagColor={avatarTagColor} />\n\n <div class=\"candidate-info\" class:right={descriptionSide === 'right' && !!description}>\n <div class=\"candidate-name-row\">\n <span class=\"candidate-name\">{name}</span>\n {#if tag}\n <Tag label={tag} color={tagColor ?? 'var(--sevn-color-secondary)'} fontSize={tagSize ?? s.tagSize} />\n {/if}\n {#if elected}\n <Tag label={electedLabel} color={electedColor} fontSize={tagSize ?? s.tagSize} />\n {/if}\n </div>\n {#if description}\n <p class=\"candidate-description\">{description}</p>\n {:else if percent || votes}\n <div class=\"candidate-stats\">\n {#if percent}\n <span class=\"candidate-stats-percent\">\n {percent}\n {#if percentSuffix}\n <span class=\"candidate-stats-percent-suffix\">{percentSuffix}</span>\n {/if}\n </span>\n {/if}\n {#if votes}<span class=\"candidate-stats-votes\">{votes}</span>{/if}\n </div>\n {/if}\n </div>\n </div>\n {:else}\n <Avatar {name} {photoUrl} {avatar} {avatarColor} {size} tag={avatarTag} tagColor={avatarTagColor} />\n\n <div class=\"candidate-info\" class:right={descriptionSide === 'right' && !!description}>\n <div class=\"candidate-name-row\">\n <span class=\"candidate-name\">{name}</span>\n {#if tag}\n <Tag label={tag} color={tagColor ?? 'var(--sevn-color-secondary)'} fontSize={tagSize ?? s.tagSize} />\n {/if}\n {#if elected}\n <Tag label={electedLabel} color={electedColor} fontSize={tagSize ?? s.tagSize} />\n {/if}\n </div>\n {#if description}\n <p class=\"candidate-description\">{description}</p>\n {:else if percent || votes}\n <div class=\"candidate-stats\">\n {#if percent}\n <span class=\"candidate-stats-percent\">\n {percent}\n {#if percentSuffix}\n <span class=\"candidate-stats-percent-suffix\">{percentSuffix}</span>\n {/if}\n </span>\n {/if}\n {#if votes}<span class=\"candidate-stats-votes\">{votes}</span>{/if}\n </div>\n {/if}\n </div>\n {/if}\n\n {#if position}\n <span class=\"candidate-position\" class:left={positionSide === 'left'}>{position}</span>\n {/if}\n</div>\n\n<style>\n .candidate {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .candidate-wrapper {\n display: flex;\n align-items: center;\n gap: 15px;\n }\n\n .candidate-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n /* Desktop: description on the right inside the info block */\n .candidate-info.right {\n flex: 1;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .candidate-info.right .candidate-description {\n margin-left: auto;\n flex-shrink: 0;\n }\n\n .candidate-name-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .candidate-name {\n font-size: var(--font-name);\n font-weight: var(--weight-name);\n color: var(--sevn-color-tertiary);\n line-height: 1.2;\n }\n\n .candidate-description {\n font-size: var(--font-desc);\n font-weight: var(--weight-desc);\n color: var(--sevn-color-tertiary);\n opacity: 0.7;\n }\n\n .candidate-position {\n font-size: var(--font-position);\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n flex-shrink: 0;\n margin-left: auto;\n }\n\n .candidate-position.left {\n order: -1;\n margin-left: 0;\n }\n\n /* ── Stats ─────────────────────────────── */\n .candidate-stats {\n display: flex;\n flex-direction: column;\n gap: 4px;\n align-items: baseline;\n flex-shrink: 0;\n }\n\n .candidate-stats-percent {\n font-size: 1rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n line-height: 1.2;\n }\n\n .candidate-stats-votes {\n font-size: var(--font-desc);\n font-weight: 400;\n color: var(--sevn-color-tertiary);\n opacity: 0.7;\n }\n\n .candidate-stats-percent-suffix {\n display: inline;\n margin-left: 4px;\n }\n\n @media (min-width: 768px) {\n .candidate-stats {\n flex-direction: row;\n gap: 8px;\n }\n\n .candidate-stats-percent-suffix {\n display: none;\n }\n }\n\n @media (max-width: 640px) {\n .candidate {\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .candidate-info {\n flex: 1;\n }\n\n /* Mobile: description keeps right alignment */\n .candidate-info.right {\n flex-direction: row;\n align-items: center;\n }\n\n .candidate-position {\n order: 3;\n margin-left: auto;\n }\n\n .candidate-position.left {\n order: -1;\n margin-left: 0;\n }\n }\n</style>\n","<script>\n /**\n * @typedef {{ name: string, acronym: string, percent: number, votes: number, color: string }} Candidate\n * @type {{ candidates: Candidate[] }}\n */\n let { candidates } = $props();\n\n function formatVotes(n) {\n return n.toLocaleString('pt-BR');\n }\n\n function formatPercent(n) {\n return n.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + '%';\n }\n</script>\n\n<div class=\"candidate-count-percent-card\">\n {#each candidates as candidate, i (i)}\n <div class=\"candidate-count-percent-info-candidate\">\n <div class=\"candidate-count-percent-row-top\">\n <span class=\"candidate-count-percent-name\">\n {candidate.name}\n <span class=\"candidate-count-percent-political-party\">{candidate.acronym}</span>\n </span>\n <span class=\"candidate-count-percent-percent\">{formatPercent(candidate.percent)}</span>\n </div>\n <div class=\"candidate-count-percent-votes\">{formatVotes(candidate.votes)} votos</div>\n <div\n class=\"candidate-count-percent-bar-track\"\n style=\"background-color: {candidate.color};\"\n >\n </div>\n </div>\n {/each}\n</div>\n\n<style>\n .candidate-count-percent-card {\n background-color: var(--sevn-color-neutral);\n border-radius: 12px;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 0;\n max-width: 284px;\n box-shadow: 0 2px 12px #00000020;\n }\n\n .candidate-count-percent-info-candidate {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin: 12px 0;\n }\n\n .candidate-count-percent-row-top {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 8px;\n }\n\n .candidate-count-percent-name {\n font-size: 0.95rem;\n font-weight: 400;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n }\n\n .candidate-count-percent-political-party {\n font-weight: 400;\n color: #777;\n margin-left: 4px;\n }\n\n .candidate-count-percent-percent {\n font-size: 1rem;\n font-weight: 400;\n color: #777;\n white-space: nowrap;\n }\n\n .candidate-count-percent-votes {\n font-size: 0.8rem;\n font-weight: 600;\n color: #777;\n text-align: right;\n }\n\n .candidate-count-percent-bar-track {\n width: 100%;\n height: 24px;\n border-radius: 999px;\n overflow: hidden;\n margin-top: 2px;\n }\n</style>\n","<script>\n import Candidate from './candidate.svelte';\n\n /**\n * @type {{ candidates: Array<{\n * name: string,\n * photoUrl?: string,\n * avatar?: 'man'|'woman',\n * avatarColor?: string,\n * tag?: string,\n * tagColor?: string,\n * number: number|string,\n * votes: string,\n * position: string,\n * elected?: boolean\n * }>,\n * itemsPerPage?: number,\n * showMoreLabel?: string,\n * showLessLabel?: string\n * }}\n */\n let {\n candidates = [],\n itemsPerPage = 10,\n showMoreLabel = 'Ver mais',\n showLessLabel = 'Ver menos',\n } = $props();\n\n let pagesShown = $state(1);\n\n $effect(() => {\n candidates;\n itemsPerPage;\n pagesShown = 1;\n });\n\n // `itemsPerPage = 0` desliga a paginação e renderiza tudo.\n const paginated = $derived(itemsPerPage > 0 && candidates.length > itemsPerPage);\n const visible = $derived(\n paginated ? candidates.slice(0, pagesShown * itemsPerPage) : candidates\n );\n const remaining = $derived(candidates.length - visible.length);\n const expanded = $derived(paginated && remaining === 0);\n</script>\n\n<div class=\"candidate-list\">\n {#each visible as c}\n <div class=\"candidate-list-item\">\n\n <!-- ── Desktop ── -->\n <div class=\"candidate-list-row\">\n <span class=\"candidate-list-position\">{c.position}</span>\n <Candidate\n name={c.name}\n photoUrl={c.photoUrl}\n avatar={c.avatar ?? 'man'}\n avatarColor={c.avatarColor}\n tag={c.tag}\n tagColor={c.tagColor}\n elected={c.elected}\n size=\"md\"\n />\n <span class=\"candidate-list-number\">Nº {c.number}</span>\n <span class=\"candidate-list-votes\">{c.votes}</span>\n </div>\n\n <!-- ── Mobile ── -->\n <div class=\"candidate-list-card-mobile\">\n <span class=\"candidate-list-number-label\">Nº {c.number}</span>\n <Candidate\n name={c.name}\n photoUrl={c.photoUrl}\n avatar={c.avatar ?? 'man'}\n avatarColor={c.avatarColor}\n tag={c.tag}\n tagColor={c.tagColor}\n elected={c.elected}\n description={c.votes}\n position={c.position}\n positionSide=\"right\"\n size=\"sm\"\n />\n </div>\n\n </div>\n {/each}\n\n {#if paginated}\n <button\n class=\"candidate-list-more\"\n type=\"button\"\n onclick={() => (pagesShown = expanded ? 1 : pagesShown + 1)}\n >\n {#if expanded}\n {showLessLabel}\n {:else}\n {showMoreLabel} <span class=\"candidate-list-more-count\">({remaining})</span>\n {/if}\n </button>\n {/if}\n</div>\n\n<style>\n .candidate-list {\n display: flex;\n flex-direction: column;\n }\n\n .candidate-list-more {\n align-self: stretch;\n margin-top: 16px;\n padding: 10px 20px;\n background: none;\n border: 1px solid var(--sevn-color-neutral);\n border-radius: 8px;\n cursor: pointer;\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n transition: background 0.15s, border-color 0.15s;\n }\n\n .candidate-list-more:hover,\n .candidate-list-more:focus-visible {\n background: var(--sevn-color-neutral);\n border-color: #d1d1d6;\n }\n\n .candidate-list-more-count {\n font-weight: 400;\n opacity: 0.55;\n }\n\n /* ── Mobile (default) ─────────────────── */\n .candidate-list-row { display: none; }\n\n .candidate-list-card-mobile {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px 0;\n }\n\n .candidate-list-item:not(:last-child) .candidate-list-card-mobile {\n border-bottom: 1px solid var(--sevn-color-neutral);\n }\n\n .candidate-list-number-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin-bottom: 10px;\n opacity: 0.5;\n }\n\n /* ── Desktop ──────────────────────────── */\n @media (min-width: 768px) {\n .candidate-list-card-mobile { display: none; }\n\n .candidate-list-row {\n display: grid;\n grid-template-columns: 100px 1fr auto auto;\n align-items: center;\n column-gap: 24px;\n padding: 20px 0;\n }\n\n .candidate-list-item:not(:last-child) .candidate-list-row {\n border-bottom: 1px solid var(--sevn-color-neutral);\n }\n\n .candidate-list-position {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n }\n\n .candidate-list-number {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n white-space: nowrap;\n }\n\n .candidate-list-votes {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n white-space: nowrap;\n min-width: 190px;\n text-align: right;\n }\n\n .candidate-list :global(.candidate) {\n justify-content: flex-start;\n }\n }\n</style>\n","<script>\n /** @type {{\n * data?: Array<{ text: string, value: string }>,\n * date?: string,\n * font?: string,\n * borderTop?: boolean,\n * align?: 'start'|'end'\n }} */\n let {\n data = [],\n date,\n font,\n borderTop = false,\n align = 'start',\n } = $props();\n</script>\n\n<div class=\"vote-overview\" style=\"justify-content:{align === 'end' ? 'flex-end' : 'flex-start'};{borderTop ? 'border-top:1px solid var(--sevn-color-neutral)' : ''}\">\n {#if data.length}\n <div class=\"vote-overview-stats\">\n {#each data as item}\n <span>{item.text} {item.value}</span>\n {/each}\n </div>\n {/if}\n {#if date || font}\n <div class=\"vote-overview-meta\">\n {#if date}<span>Atualizado em {date}</span>{/if}\n {#if date && font}<span class=\"vote-overview-sep\">|</span>{/if}\n {#if font}<span>Fonte {font}</span>{/if}\n </div>\n {/if}\n</div>\n\n<style>\n .vote-overview {\n display: flex;\n align-items: center;\n padding: 0.5rem 1rem;\n font-size: 0.8rem;\n color: #1c1c1c;\n gap: 1rem;\n flex-wrap: wrap;\n opacity: 50%;\n }\n\n .vote-overview-stats {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n font-weight: 600;\n }\n\n .vote-overview-meta {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n font-weight: 400;\n white-space: nowrap;\n }\n\n .vote-overview-sep {\n opacity: 0.4;\n }\n</style>\n","/** Rótulo de colocação (\"1º lugar\", \"2º lugar\"…).\n *\n * Prefere a posição que o backend mandar; só cai no índice do array quando o\n * campo não vem. Alguns endpoints publicam `position` (ex.: results.json), mas\n * o timeline.json não — lá a ordem é decidida no front, ordenando por\n * `valid_votes_pct`. Por isso a lista precisa estar ORDENADA antes de chamar\n * isso com o índice. */\nexport function positionLabel(\n apiPosition: number | null | undefined,\n index: number\n): string {\n const position =\n typeof apiPosition === 'number' && Number.isFinite(apiPosition) && apiPosition > 0\n ? apiPosition\n : index + 1;\n\n return `${position}º lugar`;\n}\n","<script>\n import Avatar from './avatar.svelte';\n import Tag from './tag.svelte';\n import VoteOverview from './voteOverview.svelte';\n import { browser } from '$core/env';\n import { positionLabel } from '../utils/position';\n\n /**\n * @typedef {{\n * name: string,\n * acronym: string,\n * percent: number,\n * votes: number,\n * color: string,\n * photoUrl?: string,\n * avatar?: 'man'|'woman',\n * avatarTag?: string,\n * avatarTagColor?: string,\n * position?: number\n * }} CandidateData\n */\n\n /**\n * @type {{\n * candidates: CandidateData[],\n * layout?: 'duel'|'duel-compact'|'stack'|'compact',\n * overviewData?: { text: string, value: string }[],\n * date?: string,\n * font?: string,\n * percentSize?: string,\n * nameSize?: string,\n * votesSize?: string,\n * avatarSize?: string,\n * barHeight?: string,\n * duelCompactInfoDirection?: 'column'|'row',\n * overviewAlign?: 'start'|'end',\n * showPosition?: boolean,\n * positionTagColor?: string\n * }}\n */\n let {\n candidates,\n layout = 'duel',\n overviewData,\n date,\n font,\n percentSize,\n nameSize,\n votesSize,\n avatarSize,\n barHeight,\n duelCompactInfoDirection = 'column',\n overviewAlign = 'start',\n showPosition = false,\n positionTagColor,\n } = $props();\n\n /** @param {CandidateData} c @param {number} i */\n const positionTag = (c, i) => positionLabel(c.position, i);\n\n /** @param {CandidateData} c */\n const positionColor = (c) => positionTagColor ?? c.color;\n\n /** @type {Record<string, { \n * percentSize: string, \n * nameSize: string, \n * votesSize: string, \n * avatarSize: string, \n * barHeight: string \n }>\n } \n */\n const presets = {\n duel: { percentSize: '1.75rem', nameSize: '0.875rem', votesSize: '0.75rem', avatarSize: 'lg', barHeight: '10px' },\n 'duel-compact':{ percentSize: '1rem', nameSize: '0.8rem', votesSize: '0.75rem', avatarSize: 'sm', barHeight: '12px' },\n stack: { percentSize: '1.5rem', nameSize: '0.875rem', votesSize: '0.75rem', avatarSize: 'lg', barHeight: '10px' },\n compact: { percentSize: '0.875rem', nameSize: '0.8rem', votesSize: '0.75rem', avatarSize: 'sm', barHeight: '8px' },\n };\n\n const p = $derived(presets[layout] ?? presets.duel);\n const fPercentSize = $derived(percentSize ?? p.percentSize);\n const fNameSize = $derived(nameSize ?? p.nameSize);\n const fVotesSize = $derived(votesSize ?? p.votesSize);\n const fAvatarSize = $derived(avatarSize ?? p.avatarSize);\n const fBarHeight = $derived(barHeight ?? p.barHeight);\n\n const hasOverview = $derived(!!overviewData?.length);\n const hasMeta = $derived(!!date || !!font);\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n\n /** @param {number} n */\n function fmtVotes(n) {\n return n.toLocaleString('pt-BR');\n }\n\n /** @param {number} n */\n function fmtPercent(n) {\n return n.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + '%';\n }\n</script>\n\n<!-- ═══════════════════════════════════════════════════ DUEL -->\n{#if layout === 'duel'}\n <div\n class=\"candidate-percentage-layout duel\"\n style=\"--percent-size:{fPercentSize};--name-size:{fNameSize};--votes-size:{fVotesSize};--bar-height:{fBarHeight};\"\n >\n <div class=\"duel-candidates\">\n <!-- Avatar esquerda -->\n <Avatar\n name={candidates[0].name}\n photoUrl={candidates[0].photoUrl}\n avatar={candidates[0].avatar ?? 'man'}\n avatarColor={candidates[0].color}\n size={fAvatarSize}\n tag={candidates[0].avatarTag}\n tagColor={candidates[0].avatarTagColor}\n />\n\n <div class=\"duel-center\">\n <div class=\"duel-infos-row\">\n <div class=\"duel-info\">\n <span class=\"name\">{candidates[0].name} <span class=\"acronym\">{candidates[0].acronym}</span></span>\n <span class=\"percent\">{fmtPercent(candidates[0].percent)}</span>\n <span class=\"votes\">{fmtVotes(candidates[0].votes)} votos</span>\n </div>\n <div class=\"duel-info right\">\n <span class=\"name\">{candidates[1].name} <span class=\"acronym\">{candidates[1].acronym}</span></span>\n <span class=\"percent\">{fmtPercent(candidates[1].percent)}</span>\n <span class=\"votes\">{fmtVotes(candidates[1].votes)} votos</span>\n </div>\n </div>\n\n <div class=\"bar-dual\">\n {#each candidates as c, i}\n <div class=\"bar-seg\" style=\"width:calc({c.percent}% - 2px);{i === 0 ? 'left:0;' : 'left:auto;right:0;'}background-color:{c.color};\"></div>\n {/each}\n </div>\n\n {#if hasOverview || hasMeta}\n <VoteOverview data={overviewData} date={date} font={font} align={overviewAlign} />\n {/if}\n </div>\n\n <!-- Avatar direita -->\n <Avatar\n name={candidates[1].name}\n photoUrl={candidates[1].photoUrl}\n avatar={candidates[1].avatar ?? 'man'}\n avatarColor={candidates[1].color}\n size={fAvatarSize}\n tag={candidates[1].avatarTag}\n tagColor={candidates[1].avatarTagColor}\n />\n </div>\n </div>\n\n<!-- ═══════════════════════════════════════════════ DUEL-COMPACT -->\n{:else if layout === 'duel-compact'}\n <div\n class=\"candidate-percentage-layout duel-compact\"\n style=\"--percent-size:{fPercentSize};--name-size:{fNameSize};--votes-size:{fVotesSize};--bar-height:{fBarHeight};\"\n >\n <div class=\"duel-compact-candidates\">\n <!-- Avatar esquerdo -->\n <Avatar\n name={candidates[0].name}\n photoUrl={candidates[0].photoUrl}\n avatar={candidates[0].avatar ?? 'man'}\n avatarColor={candidates[0].color}\n size={fAvatarSize}\n tag={candidates[0].avatarTag}\n tagColor={candidates[0].avatarTagColor}\n />\n\n <!-- Info wrapper central -->\n <div class=\"duel-compact-info-wrapper\">\n <div class=\"duel-compact-info-row\">\n <div class=\"duel-compact-info\" style=\"flex-direction:{duelCompactInfoDirection}; gap: {duelCompactInfoDirection === 'row' ? '10px' : '2px'}\">\n {#if showPosition}\n <Tag label={positionTag(candidates[0], 0)} color={positionColor(candidates[0])} class=\"position-tag\" />\n {/if}\n <span class=\"name\">\n {candidates[0].name} \n <span class=\"acronym\">{candidates[0].acronym}</span> \n {#if !isMobile}\n <span class=\"divisor\" style=\"margin-left: 5px;\">|</span>\n {/if}\n </span>\n <span class=\"percent\">{fmtPercent(candidates[0].percent)}</span>\n <span class=\"votes\">{fmtVotes(candidates[0].votes)} votos</span>\n </div>\n <div class=\"duel-compact-info right\" style=\"flex-direction:{duelCompactInfoDirection}; gap: {duelCompactInfoDirection === 'row' ? '10px' : '2px'}\">\n {#if showPosition}\n <Tag label={positionTag(candidates[1], 1)} color={positionColor(candidates[1])} class=\"position-tag\" />\n {/if}\n {#if isMobile}\n <span class=\"name\">\n <span class=\"acronym\">{candidates[1].acronym}</span>\n {candidates[1].name} \n </span>\n <span class=\"percent\">{fmtPercent(candidates[1].percent)}</span>\n <span class=\"votes\">{fmtVotes(candidates[1].votes)} votos</span>\n {:else}\n <span class=\"votes\">{fmtVotes(candidates[1].votes)} votos</span>\n <span class=\"percent\">{fmtPercent(candidates[1].percent)}</span>\n <span class=\"name\">\n <span class=\"divisor\" style=\"margin-right: 5px;\">|</span> \n <span class=\"acronym\">{candidates[1].acronym}</span>\n {candidates[1].name} \n </span>\n {/if}\n </div>\n </div>\n\n {#if duelCompactInfoDirection === 'row'}\n <div class=\"bar-dual\">\n {#each candidates as c, i}\n <div class=\"bar-seg\" style=\"width:calc({c.percent}% - 2px);{i === 0 ? 'left:0;' : 'left:auto;right:0;'}background-color:{c.color};\"></div>\n {/each}\n </div>\n {/if}\n </div>\n\n <!-- Avatar direito -->\n <Avatar\n name={candidates[1].name}\n photoUrl={candidates[1].photoUrl}\n avatar={candidates[1].avatar ?? 'man'}\n avatarColor={candidates[1].color}\n size={fAvatarSize}\n tag={candidates[1].avatarTag}\n tagColor={candidates[1].avatarTagColor}\n />\n </div>\n\n {#if duelCompactInfoDirection === 'column'}\n <div class=\"bar-dual\">\n {#each candidates as c, i}\n <div class=\"bar-seg\" style=\"width:calc({c.percent}% - 2px);{i === 0 ? 'left:0;' : 'left:auto;right:0;'}background-color:{c.color};\"></div>\n {/each}\n </div>\n {/if}\n\n <!-- Overview alinhado à direita -->\n {#if hasOverview || hasMeta}\n <VoteOverview data={overviewData} date={date} font={font} borderTop align={overviewAlign} />\n {/if}\n </div>\n\n<!-- ═══════════════════════════════════════════════════ STACK -->\n{:else if layout === 'stack'}\n <div\n class=\"candidate-percentage-layout stack\"\n style=\"--percent-size:{fPercentSize};--name-size:{fNameSize};--votes-size:{fVotesSize};--bar-height:{fBarHeight};\"\n >\n {#each candidates as c, i}\n <div class=\"stack-item\">\n <div class=\"stack-header\">\n <Avatar\n name={c.name}\n photoUrl={c.photoUrl}\n avatar={c.avatar ?? 'man'}\n avatarColor={c.color}\n size={fAvatarSize}\n tag={c.avatarTag}\n tagColor={c.avatarTagColor}\n />\n <div class=\"stack-info\">\n {#if showPosition}\n <Tag label={positionTag(c, i)} color={positionColor(c)} class=\"position-tag\" />\n {/if}\n <span class=\"name\">{c.name} <span class=\"acronym\">{c.acronym}</span></span>\n <span class=\"percent\">{fmtPercent(c.percent)} <span class=\"percent-label\">dos votos válidos</span></span>\n <div class=\"bar-track\">\n <div class=\"bar-fill\" style=\"width:{c.percent}%;background-color:{c.color};\"></div>\n </div>\n <span class=\"votes stack-votes\">{fmtVotes(c.votes)} votos</span>\n\n {#if i === candidates.length - 1 && hasMeta}\n <p class=\"meta\">\n {#if date}Atualizado em {date}{' '}{/if}{#if font} | Fonte {font}{/if}\n </p>\n {/if}\n </div>\n </div>\n \n </div>\n {/each}\n </div>\n\n<!-- ═══════════════════════════════════════════════════ COMPACT -->\n{:else if layout === 'compact'}\n <div\n class=\"candidate-percentage-layout compact\"\n style=\"--percent-size:{fPercentSize};--name-size:{fNameSize};--votes-size:{fVotesSize};--bar-height:{fBarHeight};--bar-color:{candidates[0].color};\"\n >\n {#if hasOverview}\n <div class=\"compact-row\">\n <Avatar\n name={candidates[0].name}\n photoUrl={candidates[0].photoUrl}\n avatar={candidates[0].avatar ?? 'man'}\n avatarColor={candidates[0].color}\n size={fAvatarSize}\n tag={candidates[0].avatarTag}\n tagColor={candidates[0].avatarTagColor}\n />\n <div class=\"compact-content\">\n <div class=\"compact-top\">\n <span class=\"name\">{candidates[0].name} <span class=\"acronym\">{candidates[0].acronym} </span> <span class=\"divisor\">|</span> </span>\n <span class=\"percent compact-percent\">{fmtPercent(candidates[0].percent)}</span>\n <span class=\"votes compact-votes\">{fmtVotes(candidates[0].votes)} votos</span>\n </div>\n {#if !isMobile}\n <div class=\"compact-bottom\">\n <div class=\"bar-track compact-bar\">\n <div class=\"bar-fill\" style=\"width:{candidates[0].percent}%;background-color:{candidates[0].color};\"></div>\n </div>\n <div class=\"compact-stats\">\n {#each overviewData as stat}\n <span class=\"compact-stat\">\n <span class=\"compact-stat-text\">{stat.text}</span>\n <span class=\"compact-stat-text\">{stat.value}</span>\n </span>\n {/each}\n </div>\n </div>\n {/if}\n </div>\n </div>\n {#if isMobile}\n <div class=\"compact-bottom\">\n <div class=\"bar-track compact-bar\">\n <div class=\"bar-fill\" style=\"width:{candidates[0].percent}%;background-color:{candidates[0].color};\"></div>\n </div>\n <div class=\"compact-stats\">\n {#each overviewData as stat}\n <span class=\"compact-stat\">\n <span class=\"compact-stat-text\">{stat.text}</span>\n <span class=\"compact-stat-text\">{stat.value}</span>\n </span>\n {/each}\n </div>\n </div>\n {/if}\n {#if hasMeta}\n <div class=\"compact-meta\">\n {#if date}<span>Atualizado em {date}</span>{/if}\n {#if date && font}<span class=\"compact-sep\">|</span>{/if}\n {#if font}<span>Fonte {font}</span>{/if}\n </div>\n {/if}\n {:else}\n <div class=\"compact-row\">\n <div class=\"compact-left\">\n <Avatar\n name={candidates[0].name}\n photoUrl={candidates[0].photoUrl}\n avatar={candidates[0].avatar ?? 'man'}\n avatarColor={candidates[0].color}\n size={fAvatarSize}\n tag={candidates[0].avatarTag}\n tagColor={candidates[0].avatarTagColor}\n />\n <span class=\"name\">{candidates[0].name} <span class=\"acronym\">{candidates[0].acronym}</span></span>\n <span class=\"percent\">{fmtPercent(candidates[0].percent)}</span>\n <span class=\"votes\">{fmtVotes(candidates[0].votes)} votos</span>\n </div>\n </div>\n\n <div class=\"bar-track\">\n <div class=\"bar-fill\" style=\"width:{candidates[0].percent}%;background-color:{candidates[0].color};\"></div>\n </div>\n\n {#if hasMeta}\n <p class=\"meta\">\n {#if date}Atualizado em {date}{/if}{#if font} | Fonte {font}{/if}\n </p>\n {/if}\n {/if}\n </div>\n{/if}\n\n<style>\n .candidate-percentage-layout {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n /* ─── DUEL ──────────────────────────────── */\n .duel-candidates {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n }\n\n .duel-center {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 0;\n }\n\n .duel-center :global(.vote-overview) {\n padding: 10px 0;\n\n }\n\n .duel-infos-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n }\n\n .duel-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .duel-info.right {\n text-align: right;\n }\n\n /* ─── STACK ─────────────────────────────── */\n .stack {\n gap: 24px;\n }\n\n .stack-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .stack-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding-bottom: 12px; /* espaço para a tag do avatar */\n }\n\n .stack-info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n\n .stack-info :global(.position-tag) {\n margin-bottom: 6px;\n }\n\n .stack-votes {\n margin-top: 5px;\n margin-bottom: 5px;\n }\n\n .percent-label {\n font-size: 0.75em;\n font-weight: 400;\n opacity: 0.65;\n }\n\n /* ─── DUEL-COMPACT ─────────────────────── */\n .duel-compact-candidates {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .duel-compact-info-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .duel-compact-info-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n .duel-compact-info {\n display: flex;\n min-width: 0;\n }\n\n .duel-compact-info.right {\n text-align: right;\n }\n\n .duel-compact-info :global(.position-tag) {\n align-self: flex-start;\n margin-bottom: 4px;\n }\n\n .duel-compact-info.right :global(.position-tag) {\n align-self: flex-end;\n }\n\n .duel-compact :global(.vote-overview) {\n padding: 10px 0;\n }\n\n /* ─── COMPACT WITH OVERVIEW ────────────── */\n .compact-row {\n display: flex;\n align-items: center;\n gap: 10px;\n border-bottom: 1px solid var(--sevn-color-neutral);\n padding-bottom: 15px;\n }\n\n .compact-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .compact-top {\n display: flex;\n align-items: baseline;\n gap: 8px;\n }\n\n .compact-bottom {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .compact-bar {\n flex: 1;\n min-width: 60px;\n width: auto;\n }\n\n .compact-stats {\n display: flex;\n align-items: center;\n gap: 14px;\n flex-shrink: 0;\n }\n\n .compact-stat {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n }\n\n .compact-stat-text {\n opacity: 50%;\n font-weight: 600;\n }\n\n .compact-meta {\n display: none;\n }\n\n /* ─── COMPACT ───────────────────────────── */\n .compact-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n }\n\n .compact-left {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n\n /* ─── BARRAS ────────────────────────────── */\n .bar-dual {\n position: relative;\n height: var(--bar-height);\n border-radius: 999px;\n overflow: hidden;\n background-color: #e0e0e0;\n }\n\n .bar-seg {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: 999px;\n }\n\n .bar-track {\n width: 100%;\n height: var(--bar-height);\n background-color: #e0e0e0;\n border-radius: 999px;\n overflow: hidden;\n margin-top: 5px;\n }\n\n .bar-fill {\n height: 100%;\n border-radius: 999px;\n }\n\n /* ─── TIPOGRAFIA ────────────────────────── */\n .name {\n font-size: var(--name-size);\n color: var(--sevn-color-tertiary);\n line-height: 1.3;\n white-space: nowrap;\n }\n\n .acronym {\n font-size: var(--name-size);\n font-weight: 400;\n opacity: 0.55;\n margin-left: 4px;\n }\n\n .divisor {\n opacity: 0.2;\n }\n\n .percent {\n font-size: var(--percent-size);\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n line-height: 1.1;\n white-space: nowrap;\n }\n\n .votes {\n font-size: var(--votes-size);\n color: var(--sevn-color-tertiary);\n font-weight: 600;\n opacity: 0.65;\n white-space: nowrap;\n opacity: 50%;\n }\n\n /* ─── META ──────────────────────────────── */\n .meta {\n font-size: 0.72rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n }\n\n /* ─── RESPONSIVO MOBILE ─────────────────── */\n @media (max-width: 480px) {\n /* ── duel ── */\n .duel-candidates {\n gap: 8px;\n }\n\n .duel-info {\n min-width: 0;\n }\n\n .name {\n white-space: normal;\n word-break: break-word;\n }\n\n .percent {\n font-size: calc(var(--percent-size) * 0.8);\n }\n\n .votes {\n white-space: normal;\n }\n\n /* ── duel-compact ── */\n .duel-compact-candidates {\n gap: 6px;\n }\n\n .duel-compact-info-wrapper {\n gap: 6px;\n }\n\n .duel-compact-info .name,\n .duel-compact-info .percent,\n .duel-compact-info .votes {\n white-space: normal;\n word-break: break-word;\n }\n\n .duel-compact :global(.vote-overview) {\n padding: 3px;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .duel-compact :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n\n /* ── compact with overview ── */\n .compact-row {\n align-items: flex-start;\n }\n\n .compact-top {\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n\n .compact-percent {\n font-size: 1.15rem;\n font-weight: 800 !important;\n color: var(--sevn-color-tertiary);\n line-height: 1;\n }\n\n .compact-votes {\n font-size: 0.675rem;\n margin-top: 2px;\n }\n\n .compact-bottom {\n flex-direction: column;\n align-items: stretch;\n gap: 6px;\n }\n\n .compact-bar {\n flex: none;\n width: 100%;\n height: 8px;\n }\n\n .compact-stats {\n flex-wrap: wrap;\n gap: 6px 10px;\n }\n\n .compact-meta {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.6;\n flex-wrap: wrap;\n opacity: 50%;\n }\n\n .compact-sep {\n opacity: 0.4;\n }\n }\n</style>\n","<script>\n import Candidate from './candidate.svelte';\n import arrowUp from '../assets/icons/arrow-up.svg?url';\n import arrowUpDisable from '../assets/icons/arrow-up-disable.svg?url';\n import { browser } from '$core/env';\n\n\n /**\n * @property {Array<{position:string, name:string, photoUrl?:string, avatar?:string, avatarColor?:string, tag?:string, tagColor?:string, description?:string, size?:string, nameWeight?:number, descWeight?:number, percent?:string, percentSuffix?:string, votes?:string}>} candidates\n * @property {number} [itemsPerPage=3]\n */\n let { candidates = [], itemsPerPage = 3 } = $props();\n\n let page = $state(0);\n // Anima só a ENTRADA da página nova: ela já nasce deslocada/invisível (sem\n // transição) e no frame seguinte anima até a posição final. Antes, a troca\n // de página e a classe de animação eram setadas juntas, então o conteúdo\n // novo aparecia e só depois começava a \"sumir\" (fade-out) pra só então\n // voltar a aparecer — um pisca-apaga de ~800ms em vez de um slide de 400ms.\n let isEntering = $state(false);\n let slideDirection = $state('forward');\n\n const totalPages = $derived(Math.ceil(candidates.length / itemsPerPage));\n const pageItems = $derived(candidates.slice(page * itemsPerPage, (page + 1) * itemsPerPage));\n\n /**\n * @param {number} newPage\n * @param {'forward'|'backward'} direction\n */\n function goToPage(newPage, direction) {\n slideDirection = direction;\n isEntering = true;\n page = newPage;\n // Precisa de dois rAF: o primeiro garante que o navegador pintou o estado\n // \"instantâneo\" (sem transição, já deslocado); só no segundo é seguro\n // remover a classe e deixar a transição animar de volta ao centro.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isEntering = false;\n });\n });\n }\n\n function prev() {\n if (page > 0) goToPage(page - 1, 'backward');\n }\n\n function next() {\n if (page < totalPages - 1) goToPage(page + 1, 'forward');\n }\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n let touchStartX = 0;\n\n /** @param {TouchEvent} e */\n function handleTouchStart(e) {\n touchStartX = e.touches[0].clientX;\n }\n\n /** @param {TouchEvent} e */\n function handleTouchEnd(e) {\n const diff = touchStartX - e.changedTouches[0].clientX;\n if (Math.abs(diff) < 30) return;\n if (diff > 0) next();\n else prev();\n }\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n\n</script>\n\n<div class=\"candidate-position-carrousel\">\n <div class=\"candidate-position-carrousel-inner\">\n <button class=\"candidate-position-carrousel-arrow\" onclick={prev} disabled={page === 0} aria-label=\"Anterior\">\n {#if page === 0}\n <img src={arrowUpDisable} alt=\"\" />\n {:else}\n <img src={arrowUp} alt=\"\" class=\"flip\" />\n {/if}\n </button>\n\n <div class=\"candidate-position-carrousel-track\" class:entering={isEntering} class:forward={slideDirection === 'forward'} class:backward={slideDirection === 'backward'} role=\"presentation\" ontouchstart={handleTouchStart} ontouchend={handleTouchEnd}>\n {#each pageItems as candidate}\n <div class=\"candidate-position-carrousel-item\">\n <Candidate\n name={candidate.name}\n photoUrl={candidate.photoUrl}\n avatar={candidate.avatar ?? 'man'}\n avatarColor={candidate.avatarColor}\n tag={candidate.tag}\n tagColor={candidate.tagColor}\n description={candidate.description}\n position={candidate.position}\n positionSide={isMobile ? 'right' : 'left'}\n size={candidate.size ?? 'sm'}\n nameWeight={candidate.nameWeight ?? 800}\n descWeight={candidate.descWeight ?? 600}\n percent={candidate.percent}\n percentSuffix={candidate.percentSuffix}\n votes={candidate.votes}\n />\n </div>\n {/each}\n </div>\n\n <button class=\"candidate-position-carrousel-arrow\" onclick={next} disabled={page === totalPages - 1} aria-label=\"Próximo\">\n {#if page === totalPages - 1}\n <img src={arrowUpDisable} alt=\"\" class=\"flip\" />\n {:else}\n <img src={arrowUp} alt=\"\" />\n {/if}\n </button>\n </div>\n\n {#if totalPages > 1}\n <div class=\"candidate-position-carrousel-dots\">\n {#each { length: totalPages } as _, i}\n <button\n class=\"candidate-position-carrousel-dot\"\n class:active={i === page}\n onclick={() => goToPage(i, i > page ? 'forward' : 'backward')}\n aria-label=\"Página {i + 1}\"\n ></button>\n {/each}\n </div>\n {/if}\n</div>\n\n<style>\n .candidate-position-carrousel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .candidate-position-carrousel-inner {\n display: flex;\n align-items: center;\n }\n\n /* ── Track ─────────────────────────────── */\n .candidate-position-carrousel-track {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 14px;\n padding-bottom: 15px;\n opacity: 1;\n transform: translateX(0);\n transition: opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n /* Estado \"instantâneo\" (sem transição) da página que está entrando — o\n conteúdo já nasce deslocado/invisível pro lado de onde deve vir. */\n .candidate-position-carrousel-track.entering {\n transition: none;\n }\n\n .candidate-position-carrousel-track.entering.forward {\n opacity: 0;\n transform: translateX(20px);\n }\n\n .candidate-position-carrousel-track.entering.backward {\n opacity: 0;\n transform: translateX(-20px);\n }\n\n @media (min-width: 768px) {\n .candidate-position-carrousel-track.entering.forward {\n transform: translateX(40px);\n }\n\n .candidate-position-carrousel-track.entering.backward {\n transform: translateX(-40px);\n }\n }\n\n /* ── Item ─────────────────────────────── */\n .candidate-position-carrousel-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n\n /* ── Arrows ───────────────────────────── */\n .candidate-position-carrousel-arrow {\n display: none;\n }\n\n /* ── Dots ─────────────────────────────── */\n .candidate-position-carrousel-dots {\n display: flex;\n justify-content: center;\n gap: 6px;\n }\n\n .candidate-position-carrousel-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: none;\n padding: 0;\n cursor: pointer;\n background-color: var(--sevn-color-neutral);\n transition: width 0.2s, border-radius 0.2s, background-color 0.2s;\n }\n\n .candidate-position-carrousel-dot.active {\n width: 16px;\n border-radius: 40%;\n background-color: var(--sevn-color-tertiary);\n }\n\n /* ── Desktop ──────────────────────────── */\n @media (min-width: 768px) {\n .candidate-position-carrousel-track {\n flex-direction: row;\n gap: 0;\n border-bottom: 1px solid var(--sevn-color-neutral);\n }\n\n .candidate-position-carrousel-item {\n flex: 1;\n flex-direction: row;\n align-items: center;\n gap: 30px;\n padding: 0 20px;\n }\n\n .candidate-position-carrousel-item:first-child { padding-left: 12px; }\n\n .candidate-position-carrousel-arrow {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n flex-shrink: 0;\n }\n\n .candidate-position-carrousel-arrow:disabled {\n cursor: default;\n }\n\n .candidate-position-carrousel-arrow img {\n width: 24px;\n height: 24px;\n }\n\n .candidate-position-carrousel-arrow .flip {\n transform: scaleX(-1);\n }\n\n .candidate-position-carrousel-dots {\n display: none;\n }\n }\n\n @media (max-width: 767px) {\n .candidate-position-carrousel-item {\n padding-bottom: 15px;\n border-bottom: 1px solid var(--sevn-color-neutral);\n }\n }\n</style>\n","<script>\n import Avatar from './avatar.svelte';\n\n /**\n * @type {{\n * data: {\n * rounds: Array<{ label: string, candidatos: Array<{ name: string, photoUrl?: string, avatar?: 'man'|'woman', avatarColor?: string, tag?: string, tagColor?: string, percent: number, color: string }> }>\n * },\n * updatedAt?: string\n * }}\n */\n let { data, updatedAt = '' } = $props();\n const rounds = $derived(data.rounds ?? []);\n\n /** @param {number} n */\n const fmt = (n) => n.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + '%';\n</script>\n\n<div class=\"candidate-vote-comparison\">\n\n <!-- ── Desktop: candidates header (no %) ── -->\n {#if rounds[0]}\n <div class=\"candidate-vote-comparison-header\">\n <div class=\"candidate-vote-comparison-header-cand\">\n <Avatar name={rounds[0].candidatos[0].name} photoUrl={rounds[0].candidatos[0].photoUrl} avatar={rounds[0].candidatos[0].avatar ?? 'man'} avatarColor={rounds[0].candidatos[0].avatarColor} size=\"lg\" />\n <div class=\"candidate-vote-comparison-header-info\">\n <span class=\"candidate-vote-comparison-header-name\">{rounds[0].candidatos[0].name}</span>\n <span class=\"candidate-vote-comparison-header-tag\">{rounds[0].candidatos[0].tag}</span>\n </div>\n </div>\n <div class=\"candidate-vote-comparison-header-cand candidate-vote-comparison-header-cand-right\">\n <div class=\"candidate-vote-comparison-header-info candidate-vote-comparison-header-info-right\">\n <span class=\"candidate-vote-comparison-header-name\">{rounds[0].candidatos[1].name}</span>\n <span class=\"candidate-vote-comparison-header-tag\">{rounds[0].candidatos[1].tag}</span>\n </div>\n <Avatar name={rounds[0].candidatos[1].name} photoUrl={rounds[0].candidatos[1].photoUrl} avatar={rounds[0].candidatos[1].avatar ?? 'man'} avatarColor={rounds[0].candidatos[1].avatarColor} size=\"lg\" />\n </div>\n </div>\n {/if}\n\n <!-- ── Rounds ── -->\n {#each rounds as round, i}\n <div class=\"candidate-vote-comparison-round\">\n\n <!-- Mobile: label + mini-candidates with % -->\n <div class=\"candidate-vote-comparison-mobile-top\">\n <span class=\"candidate-vote-comparison-label-mobile\">{round.label}</span>\n <div class=\"candidate-vote-comparison-mobile-cands\">\n\n <div class=\"candidate-vote-comparison-mini-cand\">\n <div class=\"candidate-vote-comparison-mini-row\">\n <div>\n <Avatar name={round.candidatos[0].name} photoUrl={round.candidatos[0].photoUrl} avatar={round.candidatos[0].avatar ?? 'man'} avatarColor={round.candidatos[0].avatarColor} size=\"sm\" />\n </div>\n <div>\n <span class=\"candidate-vote-comparison-mini-name\">{round.candidatos[0].name}</span>\n <span class=\"candidate-vote-comparison-mini-tag\">{round.candidatos[0].tag}</span>\n <span class=\"candidate-vote-comparison-mini-percent\">{fmt(round.candidatos[0].percent)}</span>\n </div>\n </div>\n </div>\n\n <div class=\"candidate-vote-comparison-mini-cand candidate-vote-comparison-mini-cand-right\">\n <div class=\"candidate-vote-comparison-mini-row candidate-vote-comparison-mini-row-right\">\n <div>\n <span class=\"candidate-vote-comparison-mini-tag\">{round.candidatos[1].tag}</span>\n <span class=\"candidate-vote-comparison-mini-name\">{round.candidatos[1].name}</span>\n <span class=\"candidate-vote-comparison-mini-percent candidate-vote-comparison-mini-percent-right\">{fmt(round.candidatos[1].percent)}</span>\n </div>\n <div>\n <Avatar name={round.candidatos[1].name} photoUrl={round.candidatos[1].photoUrl} avatar={round.candidatos[1].avatar ?? 'man'} avatarColor={round.candidatos[1].avatarColor} size=\"sm\" />\n </div>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- Desktop: label centered above bar -->\n <p class=\"candidate-vote-comparison-label-desktop\">{round.label}</p>\n\n <!-- Bar (both layouts) -->\n <div class=\"candidate-vote-comparison-bar\">\n <div class=\"candidate-vote-comparison-bar-a\" style=\"width: {i === 0 ? round.candidatos[0].percent : (round.candidatos[0].percent > round.candidatos[1].percent ? round.candidatos[0].percent : 100)}%; background: {round.candidatos[0].color}; z-index: {round.candidatos[0].percent > round.candidatos[1].percent ? 1 : 0};\"></div>\n <div class=\"candidate-vote-comparison-bar-b\" style=\"width: {i === 0 ? round.candidatos[1].percent : (round.candidatos[1].percent > round.candidatos[0].percent ? round.candidatos[1].percent : 100)}%; background: {round.candidatos[1].color}; z-index: {round.candidatos[1].percent > round.candidatos[0].percent ? 1 : 0}; {i === 0 ? 'right: 0; left: auto;' : ''}\"></div>\n </div>\n\n <!-- Desktop: percentages below bar -->\n <div class=\"candidate-vote-comparison-desktop-percents\">\n <span class=\"candidate-vote-comparison-percent\">{fmt(round.candidatos[0].percent)}</span>\n <span class=\"candidate-vote-comparison-percent\">{fmt(round.candidatos[1].percent)}</span>\n </div>\n\n </div>\n {/each}\n\n {#if updatedAt}\n <p class=\"candidate-vote-comparison-footer\">{updatedAt}</p>\n {/if}\n\n</div>\n\n<style>\n .candidate-vote-comparison {\n display: flex;\n flex-direction: column;\n }\n\n /* ── Desktop header ───────────────────── */\n .candidate-vote-comparison-header { display: none; }\n\n /* ── Rounds ───────────────────────────── */\n .candidate-vote-comparison-round {\n display: flex;\n flex-direction: column;\n gap: 15px;\n margin-bottom: 20px;\n }\n\n /* ── Mobile top ── */\n .candidate-vote-comparison-label-mobile {\n font-size: 0.875rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n }\n \n .candidate-vote-comparison-mobile-cands {\n display: flex;\n gap: 12px;\n margin-top: 15px;\n }\n\n .candidate-vote-comparison-mini-cand {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .candidate-vote-comparison-mini-row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .candidate-vote-comparison-mini-row-right {\n justify-content: flex-end;\n text-align: right;\n }\n\n .candidate-vote-comparison-mini-name {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex-shrink: 1;\n }\n\n .candidate-vote-comparison-mini-tag {\n display: inline-block;\n flex-shrink: 0;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n padding: 2px 5px;\n border-radius: 4px;\n letter-spacing: 0.03em;\n opacity: 50%;\n }\n\n .candidate-vote-comparison-mini-percent {\n font-size: 1.25rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n }\n\n .candidate-vote-comparison-mini-cand-right .candidate-vote-comparison-mini-percent {\n text-align: right;\n }\n\n /* ── Desktop label + pcts (hidden on mobile) ── */\n .candidate-vote-comparison-label-desktop { display: none; }\n .candidate-vote-comparison-desktop-percents { display: none; }\n\n /* ── Bar ─────────────────────────────── */\n .candidate-vote-comparison-bar {\n position: relative;\n height: 12px;\n border-radius: 50px;\n overflow: hidden;\n background-color: #f2f2f7;\n }\n\n .candidate-vote-comparison-bar-a,\n .candidate-vote-comparison-bar-b {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: 50px;\n }\n\n /* ── Footer ──────────────────────────── */\n .candidate-vote-comparison-footer {\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.5;\n margin-top: 4px;\n }\n\n /* ── Desktop ──────────────────────────── */\n @media (min-width: 768px) {\n .candidate-vote-comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n }\n\n .candidate-vote-comparison-header-cand {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .candidate-vote-comparison-header-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .candidate-vote-comparison-header-info-right {\n text-align: right;\n }\n\n .candidate-vote-comparison-header-name {\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n }\n\n .candidate-vote-comparison-header-tag {\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n }\n\n .candidate-vote-comparison-mobile-top { display: none; }\n\n .candidate-vote-comparison-label-desktop {\n display: block;\n text-align: center;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .candidate-vote-comparison-desktop-percents {\n display: flex;\n justify-content: space-between;\n }\n\n .candidate-vote-comparison-percent {\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n }\n\n .candidate-vote-comparison-round {\n gap: 15px;\n margin-bottom: 16px;\n }\n\n .candidate-vote-comparison-bar {\n height: 36px;\n }\n\n .candidate-vote-comparison-bar-a,\n .candidate-vote-comparison-bar-b {\n border-radius: 50px;\n }\n }\n</style>\n","<script>\n import Avatar from './avatar.svelte';\n import Tag from './tag.svelte';\n\n /**\n * @typedef {{\n * position: number,\n * name: string,\n * photoUrl?: string,\n * avatar?: 'man'|'woman',\n * avatarColor?: string,\n * party: string,\n * partyColor?: string,\n * votes: number,\n * percent: number,\n * evolution?: number[]\n * }} RankingCandidate\n */\n\n /** @type {{ candidates: RankingCandidate[], maxHeight?: string, headers?: string[] }} */\n let { candidates = [], maxHeight = '480px', headers } = $props();\n\n let isMobile = $state(false);\n\n $effect(() => {\n const mq = window.matchMedia('(max-width: 640px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n\n /** @param {number} v */\n function formatVotes(v) {\n return v.toLocaleString('pt-BR');\n }\n\n /** @param {number} v */\n function formatVotesCompact(v) {\n if (v >= 1_000_000) return `+${Math.floor(v / 1_000_000)}M`;\n if (v >= 1_000) return `+${Math.floor(v / 1_000)}K`;\n return String(v);\n }\n\n /** @param {number} p */\n function formatPercent(p) {\n return p.toFixed(2).replace('.', ',') + '%';\n }\n\n /** @param {number} p */\n function formatPercentCompact(p) {\n return p.toFixed(1).replace('.', ',') + '%';\n }\n\n /**\n * @param {number[]} values\n * @param {number} w\n * @param {number} h\n * @returns {string}\n */\n function sparklinePath(values, w = 120, h = 36) {\n if (!values || values.length < 2) return '';\n const min = Math.min(...values);\n const max = Math.max(...values);\n const range = max - min || 1;\n const pad = 3;\n const innerH = h - pad * 2;\n const stepX = w / (values.length - 1);\n return values\n .map((v, i) => {\n const x = +(i * stepX).toFixed(2);\n const y = +(h - pad - ((v - min) / range) * innerH).toFixed(2);\n return `${i === 0 ? 'M' : 'L'}${x},${y}`;\n })\n .join(' ');\n }\n</script>\n\n<div class=\"candidate-ranking-table\">\n <div class=\"candidate-ranking-table-body\" style=\"max-height: {maxHeight};\">\n {#if headers && headers.length > 0}\n <div class=\"candidate-ranking-table-header\" aria-hidden=\"true\">\n {#each headers as h, i}\n <span class:col-rank-header={i === 0} class:col-party-header={i === 2}>{h}</span>\n {/each}\n </div>\n {/if}\n\n {#each candidates as c (c.position)}\n <div class=\"candidate-ranking-table-row\" role=\"listitem\">\n <span class=\"candidate-ranking-rank\">{c.position}º</span>\n\n <div class=\"candidate-ranking-candidate-cell\">\n {#if !isMobile}\n <Avatar\n name={c.name}\n photoUrl={c.photoUrl}\n avatar={c.avatar}\n avatarColor={c.avatarColor}\n size=\"sm\"\n />\n {/if}\n <span class=\"candidate-ranking-candidate-name\">{c.name}</span>\n </div>\n\n <div class=\"candidate-ranking-party-cell\">\n <Tag label={c.party} color={c.partyColor ?? 'var(--sevn-color-primary)'} fontSize=\"0.625rem\" />\n </div>\n\n <span class=\"candidate-ranking-votes\">\n <span class=\"candidate-ranking-votes-full\">{formatVotes(c.votes)}</span>\n <span class=\"candidate-ranking-votes-compact\">{formatVotesCompact(c.votes)}</span>\n </span>\n\n <span class=\"candidate-ranking-percent\">\n <span class=\"candidate-ranking-percent-full\">{formatPercent(c.percent)}</span>\n <span class=\"candidate-ranking-percent-compact\">{formatPercentCompact(c.percent)}</span>\n </span>\n\n <div class=\"candidate-ranking-evolution\">\n {#if c.evolution && c.evolution.length >= 2}\n <svg\n viewBox=\"0 0 120 36\"\n aria-hidden=\"true\"\n class=\"candidate-ranking-sparkline\"\n >\n <path\n d={sparklinePath(c.evolution)}\n fill=\"none\"\n stroke={c.avatarColor ?? 'var(--sevn-color-primary)'}\n stroke-width=\"2.2\"\n stroke-linejoin=\"round\"\n stroke-linecap=\"round\"\n />\n </svg>\n {/if}\n </div>\n </div>\n {/each}\n </div>\n</div>\n\n\n<style>\n .candidate-ranking-table {\n width: 100%;\n background: #fff;\n border-radius: 12px;\n overflow: hidden;\n border: 1px solid #DDDDDF;\n }\n\n /* Grid columns: rank | candidate | party | votes | % | evolution */\n .candidate-ranking-table-header,\n .candidate-ranking-table-row {\n display: grid;\n grid-template-columns: 80px 1fr 100px 112px 80px 136px;\n align-items: center;\n gap: 15px;\n padding: 0 16px;\n }\n\n .candidate-ranking-table-header {\n position: sticky;\n top: 0;\n z-index: 1;\n background: #fff;\n padding-top: 20px;\n padding-bottom: 20px;\n font-size: 0.75rem;\n font-weight: 500;\n color: #1C1C1C;\n border-bottom: 1px solid var(--sevn-color-neutral);\n }\n\n .candidate-ranking-table-row {\n gap: 15px;\n }\n\n .candidate-ranking-table-body {\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: #1C1C1C transparent;\n scrollbar-gutter: stable;\n }\n\n .candidate-ranking-table-body::-webkit-scrollbar {\n width: 4px;\n }\n\n .candidate-ranking-table-body::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .candidate-ranking-table-body::-webkit-scrollbar-thumb {\n background: #d1d1db;\n border-radius: 4px;\n }\n\n .candidate-ranking-table-row {\n padding-top: 14px;\n padding-bottom: 14px;\n border-bottom: 1px solid var(--sevn-color-neutral);\n transition: background 0.15s;\n }\n\n .candidate-ranking-table-row:last-child {\n border-bottom: none;\n }\n\n .candidate-ranking-table-row:hover {\n background: #fafafa;\n }\n\n .col-rank-header {\n text-align: center;\n }\n\n .col-party-header {\n text-align: center;\n }\n\n .candidate-ranking-rank {\n font-size: 0.9375rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n text-align: center;\n white-space: nowrap;\n }\n\n .candidate-ranking-candidate-cell {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .candidate-ranking-candidate-cell :global(.avatar-container) {\n flex-shrink: 0;\n }\n\n .candidate-ranking-candidate-name {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n .candidate-ranking-party-cell {\n display: flex;\n justify-content: center;\n }\n\n .candidate-ranking-votes,\n .candidate-ranking-percent {\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n }\n\n /* Desktop: show full, hide compact */\n .candidate-ranking-votes-compact,\n .candidate-ranking-percent-compact {\n display: none;\n }\n\n .candidate-ranking-evolution {\n display: flex;\n align-items: center;\n }\n\n .candidate-ranking-sparkline {\n display: block;\n width: 100%;\n height: 36px;\n overflow: visible;\n }\n\n /* Mobile */\n @media (max-width: 640px) {\n .candidate-ranking-table-header,\n .candidate-ranking-table-row {\n grid-template-columns: 36px 1fr 50px 38px 38px 60px;\n padding: 0 12px;\n }\n\n .candidate-ranking-table-header {\n gap: 16px;\n padding-top: 14px;\n padding-bottom: 14px;\n font-size: 0.6875rem;\n }\n\n .candidate-ranking-table-row {\n gap: 16px;\n padding-top: 10px;\n padding-bottom: 10px;\n }\n\n .candidate-ranking-rank {\n font-size: 0.8125rem;\n }\n\n /* Avatar override */\n .candidate-ranking-candidate-cell :global(.avatar-container) {\n flex-shrink: 0;\n width: 28px;\n }\n\n .candidate-ranking-candidate-cell :global(.avatar) {\n width: 28px !important;\n height: 28px !important;\n }\n\n .candidate-ranking-candidate-cell {\n gap: 6px;\n }\n\n .candidate-ranking-candidate-name {\n font-size: 0.75rem;\n }\n\n .candidate-ranking-votes-full,\n .candidate-ranking-percent-full {\n display: none;\n }\n\n .candidate-ranking-votes-compact,\n .candidate-ranking-percent-compact {\n display: inline;\n }\n\n .candidate-ranking-votes,\n .candidate-ranking-percent {\n font-size: 0.75rem;\n }\n\n .candidate-ranking-sparkline {\n height: 28px;\n }\n }\n</style>\n","<script>\n import Tag from './tag.svelte';\n import VoteOverview from './voteOverview.svelte';\n\n /**\n * @typedef {Object} CandidateRow\n * @property {string} name\n * @property {string} [dotColor] - color of the dot\n * @property {string} [tag] - party abbreviation, e.g. \"ABC\"\n * @property {string} [tagColor] - party tag color\n * @property {string} votes - e.g. \"42,8%\"\n * @property {boolean} [elected]\n * @property {string} [statusLabel] - rótulo do status da disputa, já traduzido\n * @property {string} [statusColor]\n */\n\n /** @type {{\n * candidates: CandidateRow[],\n * headerLeft?: string,\n * headerRight?: string,\n * totalVotes?: string,\n * date?: string,\n * font?: string,\n * dotSize?: string,\n * nameFontSize?: string,\n * nameWeight?: number,\n * votesFontSize?: string,\n * votesWeight?: number,\n * tagFontSize?: string,\n * electedColor?: string,\n * electedLabel?: string,\n * }} */\n let {\n candidates = [],\n headerLeft = 'Partido/ Candidato',\n headerRight = 'Votos',\n totalVotes,\n date,\n font,\n dotSize = '12px',\n nameFontSize = '1rem',\n nameWeight = 700,\n votesFontSize = '0.875rem',\n votesWeight = 600,\n tagFontSize = '0.6875rem',\n electedColor = 'var(--sevn-color-green)',\n electedLabel = 'ELEITO',\n } = $props();\n\n const hasFooter = $derived(!!(totalVotes || date || font));\n\n /** @type {Array<{ text: string, value: string }>} */\n const footerData = $derived(\n totalVotes ? [{ text: 'Total', value: `${totalVotes} votos` }] : []\n );\n</script>\n\n<div\n class=\"candidates-votes-ranking\"\n style=\"\n --dot-size: {dotSize};\n --name-size: {nameFontSize};\n --name-weight: {nameWeight};\n --votes-size: {votesFontSize};\n --votes-weight:{votesWeight};\n \"\n>\n <!-- Header -->\n <div class=\"candidates-votes-ranking-header\">\n <span>{headerLeft}</span>\n <span>{headerRight}</span>\n </div>\n\n <!-- Rows -->\n {#each candidates as c}\n <div class=\"candidates-votes-ranking-row\" class:elected={c.elected}>\n <div class=\"candidates-votes-ranking-candidate\">\n <span class=\"candidates-votes-ranking-dot\" style=\"background-color: {c.dotColor ?? 'var(--sevn-color-secondary)'}\"></span>\n <div class=\"candidates-votes-ranking-info\">\n <span class=\"candidates-votes-ranking-name\">{c.name}</span>\n {#if c.tag}\n <Tag\n label={c.tag}\n color={c.tagColor ?? 'var(--sevn-color-secondary)'}\n fontSize={tagFontSize}\n />\n {/if}\n {#if c.elected}\n <Tag\n label={electedLabel}\n color={electedColor}\n fontSize={tagFontSize}\n />\n {/if}\n <!-- Independente do `elected`: um candidato eleito no 1º turno mostra as\n duas tags (\"ELEITO\" e \"Eleito no 1° turno\"). -->\n {#if c.statusLabel}\n <Tag\n label={c.statusLabel}\n color={c.statusColor ?? 'var(--sevn-color-tertiary)'}\n fontSize={tagFontSize}\n />\n {/if}\n </div>\n </div>\n <span class=\"candidates-votes-ranking-votes\">{c.votes}</span>\n </div>\n {/each}\n\n <!-- Footer -->\n {#if hasFooter}\n <VoteOverview data={footerData} {date} {font} borderTop={true} />\n {/if}\n</div>\n\n<style>\n .candidates-votes-ranking {\n display: flex;\n flex-direction: column;\n font-family: inherit;\n }\n\n /* ── Header ── */\n .candidates-votes-ranking-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 0 8px;\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n }\n\n /* ── Row ── */\n .candidates-votes-ranking-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 14px 0;\n border-bottom: 1px solid var(--sevn-color-neutral);\n transition: background-color 0.15s ease;\n }\n\n .candidates-votes-ranking-row:last-of-type {\n border-bottom: none;\n }\n\n .candidates-votes-ranking-row.elected {\n background-color: #e8f5ee;\n margin: 0 -12px;\n padding: 14px 12px;\n border-radius: 8px;\n }\n\n /* ── Left side ── */\n .candidates-votes-ranking-candidate {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n flex: 1;\n }\n\n .candidates-votes-ranking-dot {\n width: var(--dot-size);\n height: var(--dot-size);\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n .candidates-votes-ranking-info {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n min-width: 0;\n }\n\n .candidates-votes-ranking-name {\n font-size: var(--name-size);\n font-weight: var(--name-weight);\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n }\n\n /* ── Right side ── */\n .candidates-votes-ranking-votes {\n font-size: var(--votes-size);\n font-weight: var(--votes-weight);\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n flex-shrink: 0;\n opacity: 0.5;\n }\n\n /* ── Responsive ── */\n @media (max-width: 480px) {\n .candidates-votes-ranking-name {\n font-size: calc(var(--name-size) * 0.9);\n }\n\n .candidates-votes-ranking-votes {\n font-size: calc(var(--votes-size) * 0.9);\n }\n\n .candidates-votes-ranking-row.elected {\n margin: 0 -8px;\n padding: 14px 8px;\n }\n }\n</style>\n","/** Mapeia um valor do domínio [dMin, dMax] para o range [rMin, rMax] */\nexport function scaleLinear(\n value: number,\n dMin: number,\n dMax: number,\n rMin: number,\n rMax: number,\n): number {\n if (dMax === dMin) return rMin;\n return rMin + ((value - dMin) / (dMax - dMin)) * (rMax - rMin);\n}\n\n/** Formata número grande: 1234567 → '1,2M' */\nexport function formatNumber(n: number): string {\n if (n >= 1_000_000) return (n / 1_000_000).toLocaleString('pt-BR', { maximumFractionDigits: 1 }) + 'M';\n if (n >= 1_000) return (n / 1_000).toLocaleString('pt-BR', { maximumFractionDigits: 1 }) + 'mil';\n return n.toLocaleString('pt-BR');\n}\n\n/** Calcula o path SVG de um arco de donut */\nexport function arcPath(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n thickness: number,\n): string {\n const inner = r - thickness;\n const s = toRad(startAngle);\n const e = toRad(endAngle);\n const large = endAngle - startAngle > 180 ? 1 : 0;\n\n const x1 = cx + r * Math.cos(s);\n const y1 = cy + r * Math.sin(s);\n const x2 = cx + r * Math.cos(e);\n const y2 = cy + r * Math.sin(e);\n const x3 = cx + inner * Math.cos(e);\n const y3 = cy + inner * Math.sin(e);\n const x4 = cx + inner * Math.cos(s);\n const y4 = cy + inner * Math.sin(s);\n\n return [\n `M ${x1} ${y1}`,\n `A ${r} ${r} 0 ${large} 1 ${x2} ${y2}`,\n `L ${x3} ${y3}`,\n `A ${inner} ${inner} 0 ${large} 0 ${x4} ${y4}`,\n 'Z',\n ].join(' ');\n}\n\nfunction toRad(deg: number) {\n return (deg * Math.PI) / 180;\n}\n","<script lang=\"ts\">\n import { arcPath } from '../utils/chartUtils.ts';\n\n /**\n * @property {{ label: string; value: number; color: string }[]} segments\n * @property {string} [centerLabel]\n * @property {string} [centerSub]\n * @property {string} [size]\n * @property {number} [radius] - outer ring radius in SVG units (viewBox 200x200). default 80\n * @property {number} [thickness] - ring width in SVG units. center hole = radius - thickness\n * @property {number} [gap]\n * @property {number} [centerLabelSize] - font-size of centerLabel in SVG units. default 22\n * @property {number} [centerSubSize] - font-size of centerSub in SVG units. default 10\n */\n let {\n segments = [],\n centerLabel,\n centerSub,\n size = '200px',\n radius = 80,\n thickness = 32,\n gap = 2,\n centerLabelSize = 22,\n centerSubSize = 10,\n }: {\n segments: { label: string; value: number; color: string }[];\n centerLabel?: string;\n centerSub?: string;\n size?: string;\n radius?: number;\n thickness?: number;\n gap?: number;\n centerLabelSize?: number;\n centerSubSize?: number;\n } = $props();\n\n const CX = 100;\n const CY = 100;\n\n let hoveredIndex = $state<number | null>(null);\n let tooltipPos = $state({ x: 0, y: 0 });\n\n function handleMouseEnter(e: MouseEvent, index: number) {\n hoveredIndex = index;\n const rect = (e.currentTarget as SVGPathElement).getBoundingClientRect();\n tooltipPos = {\n x: rect.left + rect.width / 2,\n y: rect.top - 10,\n };\n }\n\n function handleMouseLeave() {\n hoveredIndex = null;\n }\n\n const total = $derived(segments.reduce((s, i) => s + i.value, 0));\n\n const clampedRadius = $derived(Math.min(radius, 100));\n const clampedThickness = $derived(Math.min(thickness, 50));\n\n type Arc = { path: string; color: string; label: string };\n\n const arcs = $derived.by((): Arc[] => {\n if (total === 0) return [];\n const GAP_DEG = gap;\n let angle = -90;\n return segments.map(seg => {\n const span = (seg.value / total) * 360 - GAP_DEG;\n const start = angle + GAP_DEG / 2;\n const end = start + span;\n angle += (seg.value / total) * 360;\n return {\n path: arcPath(CX, CY, clampedRadius, start, end, clampedThickness),\n color: seg.color,\n label: seg.label,\n };\n });\n });\n</script>\n\n<div class=\"donut-chart\" style=\"width: {size}; height: {size};\">\n <svg viewBox=\"0 0 200 200\" role=\"img\" aria-label=\"Gráfico de donut\">\n {#each arcs as arc, i}\n <path\n d={arc.path}\n fill={arc.color}\n onmouseenter={(e) => handleMouseEnter(e, i)}\n onmouseleave={handleMouseLeave}\n style=\"cursor: pointer; transition: opacity 0.2s;\"\n class:hovered={hoveredIndex === i}\n role=\"button\"\n tabindex=\"0\"\n >\n <title>{arc.label}</title>\n </path>\n {/each}\n\n {#if centerLabel}\n <text\n x={CX}\n y={centerSub ? CY - 6 : CY}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"donut-chart-center-label\"\n style=\"font-size: {centerLabelSize}px\"\n >{centerLabel}</text>\n {/if}\n\n {#if centerSub}\n <text\n x={CX}\n y={CY + 18}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"donut-chart-center-sub\"\n style=\"font-size: {centerSubSize}px\"\n >{centerSub}</text>\n {/if}\n </svg>\n\n {#if hoveredIndex !== null && segments[hoveredIndex]}\n {@const hovered = segments[hoveredIndex]}\n <div class=\"donut-tooltip\" style=\"--tooltip-x: {tooltipPos.x}px; --tooltip-y: {tooltipPos.y}px;\">\n <div class=\"donut-tooltip-content\">\n <div class=\"donut-tooltip-header\" style=\"background-color: {hovered.color};\"></div>\n <div class=\"donut-tooltip-body\">\n <div class=\"donut-tooltip-label\">{hovered.label}</div>\n <div class=\"donut-tooltip-value\">{hovered.value.toFixed(1)}%</div>\n </div>\n </div>\n <div class=\"donut-tooltip-arrow\"></div>\n </div>\n {/if}\n</div>\n\n<style>\n .donut-chart {\n display: inline-block;\n }\n\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n .donut-chart-center-label {\n font-family: inherit;\n font-weight: 700;\n fill: var(--sevn-color-tertiary);\n }\n\n .donut-chart-center-sub {\n font-family: inherit;\n font-weight: 500;\n fill: #9a9aaa;\n }\n\n /* ── Hover effect ─────────────────────── */\n svg path.hovered {\n opacity: 0.8;\n filter: brightness(1.1);\n }\n\n /* ── Foco: sem outline ao clicar (mouse), mantém pra navegação por teclado ── */\n svg path:focus {\n outline: none;\n }\n\n svg path:focus-visible {\n outline: 2px solid var(--sevn-color-tertiary, #1c1c1c);\n outline-offset: 2px;\n }\n\n /* ── Tooltip ──────────────────────────── */\n .donut-tooltip {\n position: fixed;\n left: var(--tooltip-x);\n top: var(--tooltip-y);\n transform: translate(-50%, -100%);\n z-index: 1000;\n pointer-events: none;\n animation: slideUp 0.2s ease-out;\n }\n\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translate(-50%, -90%);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -100%);\n }\n }\n\n .donut-tooltip-content {\n background: white;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n min-width: 140px;\n }\n\n .donut-tooltip-header {\n height: 4px;\n width: 100%;\n }\n\n .donut-tooltip-body {\n padding: 12px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .donut-tooltip-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary, #1c1c1c);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .donut-tooltip-value {\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary, #1c1c1c);\n }\n\n .donut-tooltip-arrow {\n position: absolute;\n bottom: -6px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid white;\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));\n }\n</style>\n","<script>\n import { onMount } from 'svelte';\n import chevronUrl from '../assets/icons/chevron.svg?url';\n import closeIconUrl from '../assets/icons/close.svg?url';\n\n /**\n * Props:\n * - label : prefixo exibido antes do valor (\"Cargo\", \"Turno\"…)\n * - options : [{ value, label }]\n * - value : valor selecionado (bindable)\n * - clearable : exibe o X para limpar a seleção (default: true)\n */\n let {\n label = '',\n options = [],\n value = $bindable(null),\n clearable = true,\n } = $props();\n\n let open = $state(false);\n let wrapperEl = $state(null);\n\n const selectedOption = $derived(\n value != null ? (options.find(o => o.value === value) ?? null) : null\n );\n\n function select(option) {\n value = option.value;\n open = false;\n }\n\n function clear() {\n value = null;\n open = false;\n }\n\n function handleOutsideClick(e) {\n if (wrapperEl && !wrapperEl.contains(e.target)) {\n open = false;\n }\n }\n\n onMount(() => {\n document.addEventListener('mousedown', handleOutsideClick);\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n });\n</script>\n\n<div class=\"filter-dropdown\" bind:this={wrapperEl}>\n <button\n class=\"trigger\"\n class:open\n type=\"button\"\n onclick={() => (open = !open)}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {#if label}\n <span class=\"trigger-label\">{label}:</span>\n {/if}\n <span class=\"trigger-value\">\n {selectedOption ? selectedOption.label : ''}\n </span>\n <!-- Com valor selecionado o X (fora do trigger) toma o lugar do chevron. -->\n {#if !(selectedOption && clearable)}\n <img\n class=\"trigger-chevron\"\n class:rotated={open}\n src={chevronUrl}\n alt=\"\"\n aria-hidden=\"true\"\n width=\"10\"\n height=\"10\"\n />\n {/if}\n </button>\n\n {#if selectedOption && clearable}\n <button class=\"clear\" type=\"button\" onclick={clear} aria-label=\"Limpar {label || 'filtro'}\">\n <img src={closeIconUrl} alt=\"\" aria-hidden=\"true\" width=\"8\" height=\"8\" />\n </button>\n {/if}\n\n {#if open}\n <div class=\"dropdown\" role=\"listbox\">\n {#each options as option (option.value)}\n <button\n class=\"option\"\n class:selected={option.value === value}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n onclick={() => select(option)}\n >\n {option.label}\n </button>\n {/each}\n </div>\n {/if}\n</div>\n\n<style>\n .filter-dropdown {\n position: relative;\n display: inline-flex;\n align-items: center;\n }\n\n /* ── Trigger ─────────────────────────────── */\n .trigger {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n }\n\n .trigger-label {\n font-weight: 700;\n }\n\n .trigger-value {\n font-weight: 400;\n }\n\n .trigger-chevron {\n flex-shrink: 0;\n transition: transform 0.2s ease;\n margin-left: 2px;\n }\n\n .trigger-chevron.rotated {\n transform: rotate(180deg);\n }\n\n /* ── Botão de limpar ─────────────────────── */\n .clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n margin-left: 4px;\n padding: 0;\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .clear:hover,\n .clear:focus-visible {\n background: rgba(0, 0, 0, 0.08);\n }\n\n /* ── Dropdown ────────────────────────────── */\n .dropdown {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n min-width: 100%;\n background: #fff;\n border: 1px solid #d1d1d6;\n border-radius: 8px;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1);\n z-index: 200;\n overflow: hidden;\n }\n\n /* ── Options ─────────────────────────────── */\n .option {\n display: block;\n width: 100%;\n padding: 10px 14px;\n text-align: left;\n background: none;\n border: none;\n border-bottom: 1px solid #f0f0f5;\n cursor: pointer;\n font-size: 0.875rem;\n font-family: inherit;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n transition: background 0.1s;\n }\n\n .option:last-child {\n border-bottom: none;\n }\n\n .option:hover {\n background: var(--sevn-color-neutral);\n }\n\n .option.selected {\n background: color-mix(in srgb, var(--sevn-color-primary) 8%, transparent);\n color: var(--sevn-color-primary);\n font-weight: 600;\n }\n</style>\n","<script>\n import arrowUp from '../assets/icons/arrow-up.svg?url';\n import arrowUpDisable from '../assets/icons/arrow-up-disable.svg?url';\n import closeIconUrl from '../assets/icons/close.svg?url';\n\n /**\n * @property {Array<{value: string, label: string}>} states\n * @property {string|null} [value]\n * @property {string} [meta]\n * @property {string} [activeBackground]\n * @property {string} [activeColor]\n * @property {string} [fontSize]\n * @property {boolean} [clearable] exibe o X para limpar a seleção (default: true)\n */\n\n let {\n states = [],\n value = $bindable(null),\n meta,\n activeBackground = 'var(--sevn-color-tertiary)',\n activeColor = '#fff',\n fontSize = '0.8125rem',\n showDescriptionSelection = true,\n clearable = true,\n } = $props();\n\n let scrollEl = $state(null);\n let canScrollLeft = $state(false);\n let canScrollRight = $state(false);\n\n function updateScrollState() {\n if (!scrollEl) return;\n canScrollLeft = scrollEl.scrollLeft > 0;\n canScrollRight = scrollEl.scrollLeft + scrollEl.clientWidth < scrollEl.scrollWidth - 1;\n }\n\n $effect(() => {\n if (!scrollEl) return;\n updateScrollState();\n scrollEl.addEventListener('scroll', updateScrollState);\n const ro = new ResizeObserver(updateScrollState);\n ro.observe(scrollEl);\n return () => {\n scrollEl.removeEventListener('scroll', updateScrollState);\n ro.disconnect();\n };\n });\n\n function scrollLeft() {\n scrollEl?.scrollBy({ left: -160, behavior: 'smooth' });\n }\n\n function scrollRight() {\n scrollEl?.scrollBy({ left: 160, behavior: 'smooth' });\n }\n\n const selectedLabel = $derived(states.find(s => s.value === value)?.label ?? null);\n</script>\n\n<div class=\"filter-state\">\n <div class=\"filter-state-bar\" style=\"--pill-active-bg: {activeBackground}; --pill-active-color: {activeColor}; --pill-font-size: {fontSize};\">\n <button\n class=\"filter-state-arrow\"\n onclick={scrollLeft}\n disabled={!canScrollLeft}\n aria-label=\"Anterior\"\n >\n {#if canScrollLeft}\n <img src={arrowUp} alt=\"\" class=\"flip\" />\n {:else}\n <img src={arrowUpDisable} alt=\"\" />\n {/if}\n </button>\n\n <div class=\"filter-state-track\" bind:this={scrollEl}>\n {#each states as state}\n <button\n class=\"filter-state-pill\"\n class:active={value === state.value}\n onclick={() => (value = value === state.value ? null : state.value)}\n >\n {state.value.toUpperCase()}\n </button>\n {/each}\n </div>\n\n <button\n class=\"filter-state-arrow\"\n onclick={scrollRight}\n disabled={!canScrollRight}\n aria-label=\"Próximo\"\n >\n {#if canScrollRight}\n <img src={arrowUp} alt=\"\" />\n {:else}\n <img src={arrowUpDisable} alt=\"\" class=\"flip\" />\n {/if}\n </button>\n </div>\n\n {#if showDescriptionSelection && (selectedLabel || meta)}\n <div class=\"filter-state-info\">\n {#if selectedLabel}\n <span class=\"filter-state-selected\">\n <strong>Você selecionou:</strong> {selectedLabel}\n {#if clearable}\n <button\n class=\"filter-state-clear\"\n type=\"button\"\n onclick={() => (value = null)}\n aria-label=\"Limpar estado selecionado\"\n >\n <img src={closeIconUrl} alt=\"\" aria-hidden=\"true\" width=\"9\" height=\"9\" />\n </button>\n {/if}\n </span>\n {/if}\n {#if meta}\n <span class=\"filter-state-meta\">{meta}</span>\n {/if}\n </div>\n {/if}\n</div>\n\n<style>\n .filter-state {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n /* ── Bar ──────────────────────────────── */\n .filter-state-bar {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n /* ── Arrows ───────────────────────────── */\n .filter-state-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n }\n\n .filter-state-arrow:disabled {\n cursor: default;\n }\n\n .filter-state-arrow img {\n width: 24px;\n height: 24px;\n display: block;\n }\n\n .filter-state-arrow .flip {\n transform: scaleX(-1);\n }\n\n /* ── Track ────────────────────────────── */\n .filter-state-track {\n flex: 1;\n display: flex;\n gap: 6px;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n\n .filter-state-track::-webkit-scrollbar {\n display: none;\n }\n\n /* ── Pills ────────────────────────────── */\n .filter-state-pill {\n flex-shrink: 0;\n scroll-snap-align: start;\n padding: 6px 12px;\n border-radius: 8px;\n border: none;\n cursor: pointer;\n font-family: inherit;\n font-size: var(--pill-font-size);\n font-weight: 600;\n background-color: var(--sevn-color-neutral);\n color: var(--sevn-color-tertiary);\n transition: background-color 0.15s, color 0.15s;\n white-space: nowrap;\n line-height: 1;\n }\n\n .filter-state-pill:hover:not(.active) {\n background-color: #e2e2ea;\n }\n\n .filter-state-pill.active {\n background-color: var(--pill-active-bg);\n color: var(--pill-active-color);\n }\n\n /* ── Info row ─────────────────────────── */\n .filter-state-info {\n display: flex;\n align-items: baseline;\n gap: 12px;\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n }\n\n .filter-state-selected strong {\n font-weight: 700;\n }\n\n .filter-state-clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 2px;\n padding: 0;\n vertical-align: middle;\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .filter-state-clear:hover,\n .filter-state-clear:focus-visible {\n background: rgba(0, 0, 0, 0.08);\n }\n\n .filter-state-meta {\n font-size: 0.75rem;\n color: #9a9aaa;\n }\n</style>\n","<script>\n import Tag from './tag.svelte';\n\n let { title, description, tag, tagColor, titleFontSize, titleFontWeight, descriptionFontSize } = $props();\n</script>\n\n<header class=\"header\" style=\"\n --header-title-font-size: {titleFontSize ?? '1.75rem'};\n --header-title-font-weight: {titleFontWeight ?? 700};\n --header-description-font-size: {descriptionFontSize ?? '0.875rem'};\n\">\n {#if tag}\n <span class=\"header-tag-above\">\n <Tag label={tag} color={tagColor} />\n </span>\n {/if}\n <div class=\"header-title-row\">\n <h1 class=\"header-title\">{title}</h1>\n {#if tag}\n <span class=\"header-tag-inline\">\n <Tag label={tag} color={tagColor} />\n </span>\n {/if}\n </div>\n {#if description}\n <p class=\"header-description\">{description}</p>\n {/if}\n</header>\n\n<style>\n .header {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .header-tag-inline {\n display: none;\n }\n\n .header-title-row {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .header-title {\n font-size: var(--header-title-font-size);\n font-weight: var(--header-title-font-weight);\n color: var(--sevn-color-tertiary);\n line-height: 1.15;\n }\n\n .header-description {\n font-size: var(--header-description-font-size);\n color: var(--sevn-color-tertiary);\n }\n\n @media (max-width: 767px) {\n .header-title {\n font-size: calc(var(--header-title-font-size) * 0.75);\n max-width: 60%;\n }\n\n .header-description {\n font-size: calc(var(--header-description-font-size) * 0.9);\n }\n }\n\n @media (min-width: 768px) {\n .header-tag-above {\n display: none;\n }\n\n .header-tag-inline {\n display: inline-flex;\n }\n }\n</style>\n","<script>\n import Candidate from './candidate.svelte';\n\n /** @type {{\n * candidates: Array<{\n * name: string,\n * photoUrl?: string,\n * avatar?: 'man'|'woman',\n * avatarColor?: string,\n * tag?: string,\n * tagColor?: string,\n * description?: string,\n * position?: string,\n * }>,\n * date?: string,\n * font?: string,\n }} */\n let { candidates = [], date, font } = $props();\n\n const leader = $derived(candidates[0]);\n const runners = $derived(candidates.slice(1, 3));\n</script>\n\n<div class=\"leadership-moment\">\n <h2 class=\"leadership-moment-title\">Liderança do momento:</h2>\n\n <!-- Layout desktop -->\n <div class=\"leadership-moment-layout-desktop\">\n {#if leader}\n <div class=\"leadership-moment-leader\">\n <Candidate\n name={leader.name}\n photoUrl={leader.photoUrl}\n avatar={leader.avatar}\n avatarColor={leader.avatarColor}\n tag={leader.tag}\n tagColor={leader.tagColor}\n description={leader.description}\n descSize=\"0.875rem\"\n size=\"lg\"\n wrapper\n />\n </div>\n <hr class=\"leadership-moment-divider\" />\n {/if}\n\n {#if runners.length}\n <div class=\"leadership-moment-runners\">\n {#each runners as runner}\n <div class=\"leadership-moment-runner\">\n {#if runner.position}<span class=\"leadership-moment-runner-position\">{runner.position}</span>{/if}\n <Candidate\n name={runner.name}\n photoUrl={runner.photoUrl}\n avatar={runner.avatar}\n avatarColor={runner.avatarColor}\n tag={runner.tag}\n tagColor={runner.tagColor}\n description={runner.description}\n size=\"sm\"\n wrapper\n />\n </div>\n {/each}\n </div>\n {/if}\n </div>\n\n <!-- Layout mobile -->\n <div class=\"leadership-moment-layout-mobile\">\n {#each candidates.slice(0, 3) as candidate, i}\n <div class=\"leadership-moment-mobile-row\">\n <Candidate\n name={candidate.name}\n photoUrl={candidate.photoUrl}\n avatar={candidate.avatar}\n avatarColor={candidate.avatarColor}\n tag={candidate.tag}\n tagColor={candidate.tagColor}\n description={candidate.description}\n position={candidate.position}\n positionSide=\"right\"\n positionSize=\"0.8rem\"\n size=\"sm\"\n />\n </div>\n {#if i < candidates.slice(0, 3).length - 1}\n <hr class=\"leadership-moment-divider\" />\n {/if}\n {/each}\n </div>\n\n {#if date || font}\n <p class=\"leadership-moment-footer\">\n {#if date}Atualizado em {date}{/if}{#if date && font} {' '} | {' '} {/if}{#if font}Fonte {font}{/if}\n </p>\n {/if}\n</div>\n\n<style>\n .leadership-moment {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .leadership-moment-title {\n font-size: 1.375rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n /* ── Desktop ── */\n .leadership-moment-layout-desktop {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .leadership-moment-layout-mobile {\n display: none;\n }\n\n .leadership-moment-leader {\n padding-bottom: 4px;\n }\n\n .leadership-moment-divider {\n border: none;\n border-top: 1px solid #e0e0e0;\n margin: 0;\n }\n\n .leadership-moment-runners {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n\n .leadership-moment-runner {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .leadership-moment-runner-position {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n opacity: 0.7;\n }\n\n /* ── Mobile ── */\n @media (max-width: 600px) {\n .leadership-moment-layout-desktop {\n display: none;\n }\n\n .leadership-moment-title {\n display: none;\n }\n\n .leadership-moment-layout-mobile {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 10px;\n }\n\n .leadership-moment-mobile-row {\n padding: 4px 0;\n }\n }\n\n .leadership-moment-footer {\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.6;\n margin: 0;\n }\n</style>\n","import { assetUrl } from './config';\n\n/**\n * Mapas SVG vindos da CDN estática compartilhada.\n *\n * Deliberadamente **não** usa o `@sevn/reqcache`: os mapas nacionais têm 1,7 MB\n * cada e estourariam a cota de ~5 MB do localStorage. Aqui o cache do navegador\n * já faz o trabalho; o que a gente adiciona é memória de processo e\n * deduplicação, para dois componentes na mesma página não baixarem o mesmo\n * mapa duas vezes.\n */\nconst memory = new Map<string, string>();\nconst inflight = new Map<string, Promise<string>>();\n\n/**\n * @param id Caminho lógico sem extensão: `'br'`, `'brazil-municipalities'`,\n * `'states/sp'`, `'municipalities/sp/campinas'`.\n */\nexport function fetchMapSvg(id: string): Promise<string> {\n\tconst cached = memory.get(id);\n\tif (cached !== undefined) return Promise.resolve(cached);\n\n\tconst pending = inflight.get(id);\n\tif (pending) return pending;\n\n\tconst url = assetUrl(`maps/${id}.svg`);\n\n\tconst request = fetch(url)\n\t\t.then((response) => {\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Mapa indisponível (HTTP ${response.status}): ${id}`);\n\t\t\t}\n\t\t\treturn response.text();\n\t\t})\n\t\t.then((svg) => {\n\t\t\tmemory.set(id, svg);\n\t\t\tinflight.delete(id);\n\t\t\treturn svg;\n\t\t})\n\t\t.catch((err) => {\n\t\t\tinflight.delete(id);\n\t\t\tthrow err;\n\t\t});\n\n\tinflight.set(id, request);\n\treturn request;\n}\n\n/** URL do índice nacional de municípios, na CDN compartilhada. */\nexport function citiesIndexUrl(): string {\n\treturn assetUrl('data/cities-index.json');\n}\n\n/** Só para testes. */\nexport function resetAssetCache(): void {\n\tmemory.clear();\n\tinflight.clear();\n}\n","<script module>\n let _instanceCount = 0;\n</script>\n\n<script lang=\"ts\">\n import { browser } from '$core/env';\n import { assetUrl } from '$core/config';\n import { fetchMapSvg } from '$core/assets';\n import Candidate from './candidate.svelte';\n\n export interface MapColor {\n match?: 'exact' | 'endsWith';\n id: string;\n color: string;\n }\n\n export interface RegionHoverInfo {\n cid: string;\n uf?: string;\n municipio?: string;\n clientX: number;\n clientY: number;\n element: Element;\n }\n\n export type RegionClickInfo = RegionHoverInfo;\n\n export interface MapModalItem {\n name: string;\n tag: string;\n tagColor: string;\n photoUrl?: string;\n avatar?: 'man' | 'woman';\n avatarColor?: string;\n description?: string;\n descriptionSide?: 'inline' | 'right';\n position?: string;\n }\n\n export interface MapModalData {\n title?: string;\n footer?: string;\n items: MapModalItem[];\n }\n\n interface Props {\n type: 'brazil' | 'brazil-states' | 'state' | 'municipality';\n uf?: string;\n municipio?: string;\n colors?: MapColor[];\n labels?: boolean;\n aspectRatio?: string;\n class?: string;\n interactive?: boolean;\n priority?: boolean;\n selectionStroke?: string;\n selectionStrokeWidth?: number;\n toggleSelection?: boolean;\n /** Controla o contorno de seleção de fora (ex.: escolha feita num Autocomplete,\n * não só por clique direto no mapa). Undefined = comportamento antigo, só clique. */\n selected?: string | null;\n onRegionClick?: (info: RegionClickInfo) => void;\n onRegionHover?: (info: RegionHoverInfo) => void;\n modalData?: Record<string, MapModalData>;\n modalTrigger?: 'click' | 'hover' | 'both';\n }\n\n let {\n type,\n uf,\n municipio,\n colors,\n labels,\n aspectRatio = '4/3',\n class: className = '',\n interactive,\n priority = false,\n selectionStroke,\n selectionStrokeWidth = 3,\n toggleSelection = false,\n selected,\n onRegionClick,\n onRegionHover,\n modalData,\n modalTrigger = 'click',\n }: Props = $props();\n\n const showModalOnClick = $derived(modalTrigger === 'click' || modalTrigger === 'both');\n const showModalOnHover = $derived(modalTrigger === 'hover' || modalTrigger === 'both');\n\n const _uid = ++_instanceCount;\n\n // Fallback estático do mapa nacional não-interativo.\n const brazilUrl = assetUrl('maps/brazil-municipalities.svg');\n\n // ── Derived (props only) ───────────────────────────────────────────────────\n\n let scopeClass = $derived(\n type === 'brazil' ? `map--brazil-${_uid}` :\n type === 'state' ? `map--state-${uf ?? ''}-${_uid}` :\n `map--muni-${uf ?? ''}-${municipio ?? ''}-${_uid}`\n );\n\n let isInteractive = $derived(\n Boolean(interactive) || Boolean(onRegionClick) || Boolean(onRegionHover) || Boolean(selectionStroke) || Boolean(modalData)\n );\n\n let needsInline = $derived(\n type === 'brazil-states' ||\n type !== 'brazil' ||\n Boolean(colors?.length) ||\n Boolean(labels) ||\n Boolean(onRegionClick) ||\n Boolean(onRegionHover) ||\n Boolean(selectionStroke) ||\n Boolean(modalData)\n );\n\n // Id lógico do mapa na CDN estática (sem extensão) — vira\n // {assetsBase}/v1/maps/{id}.svg em $core/assets.\n let targetPath = $derived(\n !needsInline ? null :\n type === 'brazil-states' ? 'br' :\n type === 'brazil' && labels ? 'brazil-municipalities-labeled' :\n type === 'brazil' ? 'brazil-municipalities' :\n type === 'state' && uf ? `states/${uf}` :\n uf && municipio ? `municipalities/${uf}/${municipio}` :\n null\n );\n\n\n let selectedCid = $state<string | null>(null);\n\n // Sincroniza a seleção quando o pai controla de fora (ex.: Autocomplete),\n // sem quebrar quem nunca passa `selected` (undefined = só clique, como sempre foi).\n $effect(() => {\n if (selected !== undefined) selectedCid = selected;\n });\n\n let modalInfo = $state<RegionHoverInfo | null>(null);\n let modalX = $state(0);\n let modalY = $state(0);\n\n let svgContent = $state('');\n let loading = $state(false);\n let error = $state(false);\n\n\n // Linha fina demarcando o limite de cada município — o SVG em si não tem\n // nenhum stroke, então sem isso os municípios só se distinguem quando têm\n // cores de preenchimento diferentes. Só nos mapas em nível de município\n // ('brazil' = nacional, 'state' = um estado só); brazil-states já é nível\n // de estado, onde os limites já ficam claros pela própria escala do mapa.\n let boundaryCSS = $derived(\n type === 'brazil' || type === 'state'\n ? `.${scopeClass} path{stroke:#8a8a92;stroke-width:0.5px;vector-effect:non-scaling-stroke}`\n : ''\n );\n\n let colorCSS = $derived(\n colors?.length\n ? colors.map(({ id, color, match }) => {\n const attr = match === 'endsWith'\n ? `[data-cid$=\"::${id}\"]`\n : `[data-cid=\"${id}\"]`;\n // target path directly (data-cid on path) or paths inside containers (data-cid on <a>/<g>)\n return `.${scopeClass} path${attr},.${scopeClass} ${attr} path{fill:${color}!important}`;\n }).join('')\n : ''\n );\n\n let selectionCSS = $derived(\n selectedCid && selectionStroke\n ? `.${scopeClass} [data-cid=\"${selectedCid}\"] path{stroke:${selectionStroke}!important;stroke-width:${selectionStrokeWidth}px!important;vector-effect:non-scaling-stroke!important;paint-order:stroke fill!important}`\n : ''\n );\n\n let generatedCSS = $derived(browser ? boundaryCSS + colorCSS + selectionCSS : '');\n\n\n let container: HTMLDivElement | undefined;\n\n let loadGen = 0;\n\n\n $effect(() => {\n const path = targetPath;\n\n if (!path) {\n svgContent = '';\n loading = false;\n return;\n }\n\n const gen = ++loadGen;\n\n function doLoad() {\n loading = true;\n error = false;\n svgContent = '';\n fetchMapSvg(path!).then((content) => {\n if (gen !== loadGen) return;\n svgContent = content;\n loading = false;\n\n // Reorder SVG so text labels are always on top\n queueMicrotask(() => {\n const svg = container?.querySelector('svg');\n if (!svg) return;\n\n // The labels group carries font-size/anchor/pointer-events for its <text>\n // children, so move the whole group — never the <text> nodes alone.\n const labelGroup = svg.querySelector('.map-labels');\n if (labelGroup) {\n svg.appendChild(labelGroup);\n return;\n }\n\n // Other maps style each <text> individually, so they can move on their own.\n svg.querySelectorAll('text').forEach(text => svg.appendChild(text));\n });\n }).catch(() => {\n if (gen !== loadGen) return;\n error = true;\n loading = false;\n });\n }\n\n if (priority) {\n doLoad();\n return;\n }\n\n if (!container) {\n doLoad();\n return;\n }\n\n const io = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n io.disconnect();\n doLoad();\n }\n },\n { rootMargin: '200px' }\n );\n io.observe(container);\n return () => io.disconnect();\n });\n\n // Escape key closes modal.\n $effect(() => {\n if (!modalData) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') modalInfo = null;\n }\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n });\n\n // ── Interaction ────────────────────────────────────────────────────────────\n\n let hoveredCid = $state<string | null>(null);\n\n function buildInfo(e: MouseEvent, el: Element): RegionHoverInfo {\n const cid = el.getAttribute('data-cid') ?? '';\n const parts = cid.split('::');\n const ufPart = parts.length > 1 ? parts[1] || undefined : parts[0] || undefined;\n const municipioPart = parts.length > 1 ? parts[0] || undefined : undefined;\n return { cid, uf: ufPart, municipio: municipioPart, clientX: e.clientX, clientY: e.clientY, element: el };\n }\n\n function handleClick(e: MouseEvent) {\n if (!isInteractive) return;\n\n const el = (e.target as Element).closest('[data-cid]');\n\n if (!el) {\n if (modalTrigger === 'click') modalInfo = null;\n return;\n }\n\n const cid = el.getAttribute('data-cid') ?? '';\n if (!cid) return;\n\n selectedCid = toggleSelection && selectedCid === cid ? null : cid;\n\n // Move element to top but before text labels\n const svg = el.closest('svg');\n const parent = el.parentNode;\n\n if (svg && parent) {\n if (parent === svg) {\n // Element is direct child of SVG, move before text labels\n const labelsAnchor =\n svg.querySelector(':scope > .map-labels') ??\n Array.from(svg.children).find(child => child.nodeName === 'text');\n if (labelsAnchor) {\n svg.insertBefore(el, labelsAnchor);\n } else {\n svg.appendChild(el);\n }\n } else {\n // Element is in a group, just move to end of group\n parent.appendChild(el);\n }\n }\n\n const info = buildInfo(e, el);\n\n if (modalData && showModalOnClick) {\n if (modalInfo?.cid === cid) {\n modalInfo = null;\n } else {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n modalX = e.clientX - rect.left;\n modalY = e.clientY - rect.top;\n modalInfo = info;\n }\n }\n\n onRegionClick?.(info);\n }\n\n function handleMouseMove(e: MouseEvent) {\n if (!isInteractive) return;\n if (!onRegionHover && !showModalOnHover) return;\n\n const el = (e.target as Element).closest('[data-cid]');\n if (!el) return;\n\n const cid = el.getAttribute('data-cid') ?? '';\n if (!cid || cid === hoveredCid) return;\n\n hoveredCid = cid;\n const info = buildInfo(e, el);\n\n if (modalData && showModalOnHover) {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n modalX = e.clientX - rect.left;\n modalY = e.clientY - rect.top;\n modalInfo = info;\n }\n\n onRegionHover?.(info);\n }\n\n function handleMouseLeave() {\n hoveredCid = null;\n if (showModalOnHover) modalInfo = null;\n }\n</script>\n\n<div\n bind:this={container}\n class=\"map {scopeClass} {className}\"\n class:loading\n class:error\n class:interactive={isInteractive}\n style=\"aspect-ratio:{aspectRatio};contain:layout;position:relative\"\n onclick={handleClick}\n onmousemove={handleMouseMove}\n onmouseleave={handleMouseLeave}\n role={isInteractive ? 'group' : undefined}\n>\n {#if generatedCSS}\n {@html `<style>${generatedCSS}</style>`}\n {/if}\n\n {#if type === 'brazil' && !svgContent && !loading}\n <img\n src={brazilUrl}\n alt=\"Mapa do Brasil\"\n decoding=\"async\"\n fetchpriority={priority ? 'high' : 'auto'}\n loading={priority ? 'eager' : 'lazy'}\n />\n {:else if loading}\n <div class=\"map-placeholder\" aria-hidden=\"true\"></div>\n {:else if error}\n <div class=\"map-error\">Mapa não encontrado</div>\n {:else if svgContent}\n {@html svgContent}\n {/if}\n\n {#if modalData && modalInfo}\n {@const data = modalData[modalInfo.cid]}\n {#if data}\n <div\n class=\"map-modal\"\n style=\"left:{modalX}px;top:{modalY}px\"\n role=\"dialog\"\n tabindex=\"-1\"\n onclick={(e) => e.stopPropagation()}\n onkeydown={(e) => e.stopPropagation()}\n >\n <div class=\"map-modal-card\">\n {#if data.title}\n <p class=\"map-modal-title\">{data.title}:</p>\n {/if}\n {#each data.items as candidate}\n <div class=\"map-modal-item\">\n <Candidate\n name={candidate.name}\n tag={candidate.tag}\n tagColor={candidate.tagColor}\n photoUrl={candidate.photoUrl}\n avatar={candidate.avatar}\n avatarColor={candidate.avatarColor}\n description={candidate.description}\n descriptionSide={candidate.descriptionSide}\n position={candidate.position}\n positionSide=\"left\"\n size=\"sm\"\n wrapper\n />\n </div>\n {/each}\n {#if data.footer}\n <div class=\"map-modal-footer\">{data.footer}</div>\n {/if}\n </div>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .map {\n display: block;\n width: 100%;\n }\n\n .map img,\n .map :global(svg) {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n /* Default fill for uncolored paths */\n .map :global(path) {\n fill: var(--sevn-color-neutral);\n }\n\n /* Pointer cursor and smooth hover on clickable regions */\n .map.interactive :global(path[data-cid]),\n .map.interactive :global(g[data-cid]),\n .map.interactive :global(a[data-cid]) {\n cursor: pointer;\n }\n\n .map.interactive :global(path[data-cid]),\n .map.interactive :global(a[data-cid] path) {\n transition: filter 0.12s ease;\n }\n\n .map.interactive :global(path[data-cid]:hover),\n .map.interactive :global(a[data-cid]:hover path) {\n filter: brightness(1.15);\n }\n\n /* State labels: font-size is set as SVG attr (0.8 user units) so it scales with the map.\n stroke-width in em stays proportional to font-size. */\n .map :global(.map-labels text) {\n font-family: inherit;\n font-weight: 600;\n fill: white;\n stroke: rgba(0, 0, 0, 0.35);\n stroke-width: 0.06em;\n paint-order: stroke fill;\n letter-spacing: 0.04em;\n }\n\n /* Floating modal — positioned at the click point inside the map container.\n transform centers it horizontally and places it above the cursor. */\n .map-modal {\n position: absolute;\n z-index: 10;\n transform: translate(-50%, calc(-100% - 12px));\n pointer-events: auto;\n }\n\n .map-modal-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n padding: 14px 16px;\n min-width: 210px;\n font-family: inherit;\n }\n\n .map-modal-title {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0 0 10px;\n }\n\n .map-modal-item {\n margin-bottom: 10px;\n }\n\n .map-modal-footer {\n border-top: 1px solid #f0f0f5;\n margin-top: 10px;\n padding-top: 8px;\n font-size: 0.75rem;\n color: #9a9aaa;\n }\n\n .map-placeholder {\n position: absolute;\n inset: 0;\n background: var(--sevn-color-neutral);\n border-radius: 4px;\n animation: pulse 1.4s ease-in-out infinite;\n }\n\n .map-error {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--sevn-color-red);\n font-size: 0.85rem;\n }\n\n .map-modal-card :global(.candidate) {\n justify-content: flex-start;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n</style>\n","<script lang=\"ts\">\n import { arcPath } from '../utils/chartUtils.ts';\n\n /**\n * @property {{ value: number; color?: string; label?: string }[]} rings\n * @property {string} [centerLabel]\n * @property {string} [centerSub]\n * @property {string} [size]\n * @property {number} [outerRadius] - radius of the outermost ring in SVG units (viewBox 200x200). default 85\n * @property {number} [thickness] - ring width in SVG units. default 10\n * @property {number} [ringGap] - space between rings in SVG units. default 4\n * @property {string} [trackColor] - empty track color. default '#e5e5ea'\n * @property {number} [centerLabelSize] - font-size of centerLabel in SVG units. default 22\n * @property {number} [centerSubSize] - font-size of centerSub in SVG units. default 10\n * @property {boolean} [roundCaps] - rounded ends on colored arcs. default true\n */\n let {\n rings = [],\n centerLabel,\n centerSub,\n size = '200px',\n outerRadius = 85,\n thickness = 10,\n ringGap = 4,\n trackColor = '#e5e5ea',\n centerLabelSize = 22,\n centerSubSize = 10,\n roundCaps = true,\n }: {\n rings: { value: number; color?: string; label?: string }[];\n centerLabel?: string;\n centerSub?: string;\n size?: string;\n outerRadius?: number;\n thickness?: number;\n ringGap?: number;\n trackColor?: string;\n centerLabelSize?: number;\n centerSubSize?: number;\n roundCaps?: boolean;\n } = $props();\n\n const CX = 100;\n const CY = 100;\n\n type RingArc = {\n track: string;\n arc: string;\n color: string | undefined;\n capR: number;\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n value: number;\n };\n\n let hoveredIndex = $state<number | null>(null);\n let tooltipPos = $state({ x: 0, y: 0 });\n\n function handleMouseEnter(e: MouseEvent, index: number) {\n hoveredIndex = index;\n const rect = (e.currentTarget as SVGPathElement).getBoundingClientRect();\n tooltipPos = {\n x: rect.left + rect.width / 2,\n y: rect.top - 10,\n };\n }\n\n function handleMouseLeave() {\n hoveredIndex = null;\n }\n\n const clampedRadius = $derived(Math.min(outerRadius, 100));\n const clampedThickness = $derived(Math.min(thickness, 10));\n const clampedGap = $derived(Math.min(ringGap, 5));\n\n // Com muitos anéis (ex.: presidente, com 10+ candidatos), thickness+gap fixos\n // faziam o raio dos anéis mais internos chegar a zero ou negativo — a arco\n // colapsava numa bolinha no centro em vez de desenhar um anel fino. Encolhe\n // thickness+gap proporcionalmente só quando não há espaço pra todos os anéis\n // caberem sem estourar o raio disponível; com poucos anéis, fica igual a antes.\n const ringStep = $derived.by(() => {\n const requested = clampedThickness + clampedGap;\n if (rings.length <= 1) return requested;\n const available = Math.max(clampedRadius - 4, clampedThickness);\n const maxStep = available / rings.length;\n return Math.min(requested, maxStep);\n });\n\n const ringThickness = $derived.by(() => {\n const requested = clampedThickness + clampedGap;\n if (ringStep >= requested) return clampedThickness;\n return Math.max(1, ringStep * (clampedThickness / requested));\n });\n\n function toRad(deg: number) { return (deg * Math.PI) / 180; }\n\n const ringArcs = $derived.by((): RingArc[] => {\n return rings.map((ring, i) => {\n const r = clampedRadius - i * ringStep;\n const midR = r - ringThickness / 2;\n const endAngle = -90 + (Math.min(ring.value, 100) / 100) * 360;\n return {\n track: arcPath(CX, CY, r, -90, 269.9999, ringThickness),\n arc: arcPath(CX, CY, r, -90, endAngle, ringThickness),\n color: ring.color,\n capR: ringThickness / 2,\n startX: CX + midR * Math.cos(toRad(-90)),\n startY: CY + midR * Math.sin(toRad(-90)),\n endX: CX + midR * Math.cos(toRad(endAngle)),\n endY: CY + midR * Math.sin(toRad(endAngle)),\n value: Math.min(ring.value, 100),\n };\n });\n });\n</script>\n\n<div class=\"multi-ring-chart\" style=\"width: {size}; height: {size};\">\n <svg viewBox=\"0 0 200 200\" role=\"img\" aria-label=\"Gráfico de anéis\">\n {#each ringArcs as ring, i}\n <path d={ring.track} fill={trackColor} />\n {#if ring.color && ring.value > 0}\n <path\n d={ring.arc}\n fill={ring.color}\n onmouseenter={(e) => handleMouseEnter(e, i)}\n onmouseleave={handleMouseLeave}\n style=\"cursor: pointer; transition: opacity 0.2s;\"\n class:hovered={hoveredIndex === i}\n role=\"button\"\n tabindex=\"0\"\n />\n {#if roundCaps}\n <circle cx={ring.startX} cy={ring.startY} r={ring.capR} fill={ring.color} />\n {#if ring.value < 100}\n <circle cx={ring.endX} cy={ring.endY} r={ring.capR} fill={ring.color} />\n {/if}\n {/if}\n {/if}\n {/each}\n\n {#if centerLabel}\n <text\n x={CX}\n y={centerSub ? CY - 6 : CY}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"multi-ring-center-label\"\n style=\"font-size: {centerLabelSize}px\"\n >{centerLabel}</text>\n {/if}\n\n {#if centerSub}\n <text\n x={CX}\n y={CY + 18}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"multi-ring-center-sub\"\n style=\"font-size: {centerSubSize}px\"\n >{centerSub}</text>\n {/if}\n </svg>\n\n {#if hoveredIndex !== null && rings[hoveredIndex]}\n {@const hovered = rings[hoveredIndex]}\n <div class=\"multi-ring-tooltip\" style=\"--tooltip-x: {tooltipPos.x}px; --tooltip-y: {tooltipPos.y}px;\">\n <div class=\"multi-ring-tooltip-content\">\n <div class=\"multi-ring-tooltip-header\" style=\"background-color: {hovered.color};\"></div>\n <div class=\"multi-ring-tooltip-body\">\n {#if hovered.label}\n <div class=\"multi-ring-tooltip-label\">{hovered.label}</div>\n {/if}\n <div class=\"multi-ring-tooltip-value\">{hovered.value.toFixed(1)}%</div>\n </div>\n </div>\n <div class=\"multi-ring-tooltip-arrow\"></div>\n </div>\n {/if}\n</div>\n\n<style>\n .multi-ring-chart {\n display: inline-block;\n }\n\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n .multi-ring-center-label {\n font-family: inherit;\n font-weight: 700;\n fill: var(--sevn-color-tertiary);\n }\n\n .multi-ring-center-sub {\n font-family: inherit;\n font-weight: 500;\n fill: #9a9aaa;\n }\n\n /* ── Hover effect ─────────────────────── */\n svg path.hovered {\n opacity: 0.8;\n filter: brightness(1.1);\n }\n\n /* ── Tooltip ──────────────────────────── */\n .multi-ring-tooltip {\n position: fixed;\n left: var(--tooltip-x);\n top: var(--tooltip-y);\n transform: translate(-50%, -100%);\n z-index: 1000;\n pointer-events: none;\n animation: slideUp 0.2s ease-out;\n }\n\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translate(-50%, -90%);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -100%);\n }\n }\n\n .multi-ring-tooltip-content {\n background: white;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n min-width: 140px;\n }\n\n .multi-ring-tooltip-header {\n height: 4px;\n width: 100%;\n }\n\n .multi-ring-tooltip-body {\n padding: 12px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .multi-ring-tooltip-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary, #1c1c1c);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .multi-ring-tooltip-value {\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary, #1c1c1c);\n }\n\n .multi-ring-tooltip-arrow {\n position: absolute;\n bottom: -6px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid white;\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));\n }\n</style>\n","<script lang=\"ts\">\n import arrowUpIcon from '../assets/icons/arrow-up.svg?url';\n\n export interface LegendSegment {\n label?: string;\n color: string;\n tooltip?: string;\n }\n\n interface Props {\n title?: string;\n segments: LegendSegment[];\n sortSegments?: boolean;\n startLabel?: string;\n endLabel?: string;\n class?: string;\n }\n\n let { title, segments, sortSegments = false, startLabel, endLabel, class: className = '' }: Props = $props();\n\n const sortKey = (s: LegendSegment) => s.label ?? s.tooltip ?? '';\n\n let orderedSegments = $derived(\n sortSegments\n ? [...segments].sort((a, b) => sortKey(a).localeCompare(sortKey(b), 'pt-BR'))\n : segments\n );\n\n let hasSegmentLabels = $derived(orderedSegments.some(s => s.label));\n let hasExtremeLabels = $derived(Boolean(startLabel || endLabel));\n</script>\n\n<div class=\"map-legend {className}\">\n {#if title}\n <p class=\"map-legend-title\">{title}</p>\n {/if}\n\n <div class=\"map-legend-bar\">\n {#each orderedSegments as segment}\n <div\n class=\"map-legend-segment\"\n class:map-legend-segment--hoverable={segment.tooltip}\n style=\"background:{segment.color}\"\n data-tooltip={segment.tooltip}\n role={segment.tooltip ? 'img' : undefined}\n aria-label={segment.tooltip}\n ></div>\n {/each}\n </div>\n\n {#if hasSegmentLabels}\n <div class=\"map-legend-labels\">\n {#each orderedSegments as segment}\n <span class=\"map-legend-label\">{segment.label ?? ''}</span>\n {/each}\n </div>\n {:else if hasExtremeLabels}\n <div class=\"map-legend-extremes\">\n {#if startLabel}\n <span class=\"map-legend-extreme-label\">\n <img src={arrowUpIcon} alt=\"arrow-start\" class=\"map-legend-arrow map-legend-arrow--start\" />\n {startLabel}\n </span>\n {:else}\n <span></span>\n {/if}\n {#if endLabel}\n <span class=\"map-legend-extreme-label\">\n {endLabel}\n <img src={arrowUpIcon} alt=\"arrow-end\" class=\"map-legend-arrow map-legend-arrow--end\" />\n </span>\n {/if}\n </div>\n {/if}\n</div>\n\n<style>\n .map-legend {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-family: inherit;\n box-sizing: border-box;\n }\n\n .map-legend-title {\n margin: 0 0 4px;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .map-legend-bar {\n display: flex;\n height: 14px;\n border-radius: 3px;\n min-width: 0;\n }\n\n .map-legend-segment {\n flex: 1;\n min-width: 0;\n }\n\n .map-legend-segment:first-child {\n border-radius: 3px 0 0 3px;\n }\n\n .map-legend-segment:last-child {\n border-radius: 0 3px 3px 0;\n }\n\n .map-legend-segment:only-child {\n border-radius: 3px;\n }\n\n .map-legend-segment--hoverable {\n position: relative;\n cursor: default;\n }\n\n .map-legend-segment--hoverable:hover::after {\n content: attr(data-tooltip);\n position: absolute;\n bottom: calc(100% + 6px);\n left: 50%;\n transform: translateX(-50%);\n z-index: 2;\n padding: 4px 8px;\n border-radius: 4px;\n background: var(--sevn-color-tertiary, #1a1a2e);\n color: #fff;\n font-size: 0.7rem;\n font-weight: 500;\n line-height: 1.2;\n white-space: nowrap;\n pointer-events: none;\n }\n\n .map-legend-segment--hoverable:hover::before {\n content: '';\n position: absolute;\n bottom: calc(100% + 2px);\n left: 50%;\n transform: translateX(-50%);\n z-index: 2;\n border: 4px solid transparent;\n border-top-color: var(--sevn-color-tertiary, #1a1a2e);\n pointer-events: none;\n }\n\n .map-legend-labels {\n display: flex;\n min-width: 0;\n }\n\n .map-legend-label {\n flex: 1;\n font-size: 0.65rem;\n color: var(--sevn-color-tertiary);\n text-align: left;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .map-legend-extremes {\n display: flex;\n justify-content: space-between;\n min-width: 0;\n gap: 4px;\n margin-top: 10px;\n }\n\n .map-legend-extreme-label {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n font-size: 0.70rem;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n min-width: 0;\n overflow: hidden;\n }\n\n .map-legend-arrow {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n }\n\n .map-legend-arrow--start {\n transform: scaleX(-1);\n }\n\n @media (max-width: 480px) {\n .map-legend-title {\n font-size: 0.7rem;\n }\n\n .map-legend-bar {\n height: 10px;\n }\n\n .map-legend-label,\n .map-legend-extreme-label {\n font-size: 0.6rem;\n }\n\n .map-legend-arrow {\n width: 10px;\n height: 10px;\n }\n }\n</style>\n","<script>\n import Tag from './tag.svelte';\n\n /**\n * @typedef {{\n * position: number,\n * tag: string,\n * tagColor?: string,\n * votes: number\n * }} RankingTagItem\n */\n\n /** @type {{ items: RankingTagItem[], voteLabel?: string }} */\n let { items = [], voteLabel = 'Votos' } = $props();\n\n /** @param {number} v */\n function formatVotes(v) {\n return v.toLocaleString('pt-BR');\n }\n</script>\n\n<div class=\"ranking-tag\">\n {#each items as item (item.position)}\n <div class=\"ranking-tag-row\">\n <span class=\"ranking-tag-position\">{item.position}°</span>\n <Tag label={item.tag} color={item.tagColor ?? '#1C1C1C'} />\n <span class=\"ranking-tag-votes\">{formatVotes(item.votes)} {voteLabel}</span>\n </div>\n {/each}\n</div>\n\n<style>\n .ranking-tag {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n\n .ranking-tag-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 0;\n border-bottom: 1px solid var(--sevn-color-neutral, #EBEBEF);\n }\n\n .ranking-tag-row:last-child {\n border-bottom: none;\n }\n\n .ranking-tag-position {\n font-size: 0.9375rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary, #1C1C1C);\n min-width: 28px;\n text-align: right;\n flex-shrink: 0;\n }\n\n .ranking-tag-votes {\n font-size: 0.9375rem;\n font-weight: 400;\n color: var(--sevn-color-tertiary, #1C1C1C);\n white-space: nowrap;\n }\n\n /* Mobile */\n @media (max-width: 640px) {\n .ranking-tag-row {\n gap: 10px;\n padding: 12px 0;\n }\n\n .ranking-tag-position {\n font-size: 0.8125rem;\n min-width: 24px;\n }\n\n .ranking-tag-votes {\n font-size: 0.8125rem;\n }\n }\n</style>\n","<script>\n /**\n * @typedef {Object} Candidate\n * @property {string} name\n * @property {string} party\n * @property {number} percentage\n * @property {number} votes\n * @property {string} color \n * @property {boolean} [elected]\n */\n\n /** @type {{ title: string, candidates: Candidate[] }} */\n let { title, candidates } = $props();\n\n function formatVotes(n) {\n return n.toLocaleString('pt-BR') + ' votos';\n }\n\n function formatPercent(n) {\n return n.toFixed(1).replace('.', ',') + '%';\n }\n</script>\n\n<div class=\"table-candidate-wrapper\">\n {#if title}\n <div class=\"table-candidate-title\">{title}</div>\n {/if}\n\n {#each candidates as candidate}\n <div class=\"table-candidate-row\" class:elected={candidate.elected}>\n <div class=\"table-candidate-color-bar\" style=\"background-color: {candidate.color}\"></div>\n\n <div class=\"table-candidate-content\">\n <div class=\"table-candidate-name-group\">\n <span class=\"table-candidate-name\">{candidate.name}, {candidate.party}</span>\n {#if candidate.elected}\n <span class=\"table-candidate-badge\">ELEITO</span>\n {/if}\n </div>\n <span class=\"table-candidate-percent\">{formatPercent(candidate.percentage)}</span>\n <span class=\"table-candidate-votes\">{formatVotes(candidate.votes)}</span>\n </div>\n </div>\n {/each}\n</div>\n\n<style>\n .table-candidate-wrapper {\n background: #fff;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n font-family: inherit;\n }\n\n .table-candidate-title {\n display: none;\n }\n\n .table-candidate-row {\n display: flex;\n align-items: stretch;\n border-bottom: 1px solid #f0f0f0;\n }\n\n .table-candidate-row:last-child {\n border-bottom: none;\n }\n\n .table-candidate-row.elected {\n background-color: #e8f5ee;\n }\n\n .table-candidate-color-bar {\n width: 3px;\n flex-shrink: 0;\n }\n\n .table-candidate-content {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 12px 16px 10px 12px;\n gap: 0 8px;\n min-width: 0;\n }\n\n .table-candidate-name-group {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n\n .table-candidate-name {\n font-weight: 700;\n font-size: 0.85rem;\n color: var(--sevn-color-tertiary);\n }\n\n .table-candidate-badge {\n background-color: var(--sevn-color-green);\n color: #fff;\n font-size: 0.58rem;\n font-weight: 600;\n padding: 2px 4px;\n border-radius: 4px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n .table-candidate-percent {\n font-size: 0.85rem;\n font-weight: 400;\n color: var(--sevn-color-tertiary);\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n .table-candidate-votes {\n flex-basis: 100%;\n font-size: 0.80rem;\n font-weight: 400;\n color: var(--sevn-color-tertiary);\n margin-top: 2px;\n }\n\n @media (min-width: 600px) {\n .table-candidate-title {\n display: block;\n padding: 16px 20px 12px;\n font-weight: 700;\n font-size: 1rem;\n color: var(--sevn-color-tertiary);\n border-bottom: 1px solid #e8e8e8;\n }\n\n .table-candidate-color-bar {\n width: 6px;\n }\n\n .table-candidate-content {\n display: grid;\n grid-template-columns: 1fr 120px 230px;\n align-items: center;\n gap: 0;\n }\n\n .table-candidate-name {\n font-weight: 700;\n font-size: 0.95rem;\n color: var(--sevn-color-tertiary);\n }\n\n .table-candidate-badge {\n font-size: 0.68rem;\n padding: 3px 8px;\n }\n\n .table-candidate-percent {\n text-align: right;\n font-size: 0.95rem;\n }\n\n .table-candidate-votes {\n flex-basis: auto;\n font-size: 0.95rem;\n margin-top: 0;\n text-align: right;\n }\n }\n</style>\n","<script lang=\"ts\">\n import { scaleLinear } from '../utils/chartUtils.js';\n\n type Candidate = {\n label: string;\n tag: string;\n tagColor: string;\n color: string;\n data: number[];\n };\n\n let {\n candidates = [],\n timestamps = [],\n electedIndex,\n yMin,\n yMax,\n updatedAt,\n source,\n }: {\n candidates: Candidate[];\n timestamps: number[];\n electedIndex?: number;\n yMin?: number;\n yMax?: number;\n updatedAt?: string;\n source?: string;\n } = $props();\n\n // ViewBox dimensions — VW reativo ao container para responsividade\n let containerW = $state(0);\n let hoveredIndex = $state<number | null>(null);\n const VW = $derived(Math.min(Math.round((containerW || 800) * 1.1), 1000));\n const VH = 290;\n const PAD = { top: 20, right: 38, bottom: 44, left: 50 };\n const plotW = $derived(VW - PAD.left - PAD.right);\n const plotH = VH - PAD.top - PAD.bottom;\n\n function formatHour(ts: number): string {\n const d = new Date(ts * 1000);\n const h = d.getUTCHours();\n const m = d.getUTCMinutes();\n return m === 0 ? `${h}h` : `${h}h${String(m).padStart(2, '0')}`;\n }\n\n // Nome real do candidato (ex.: \"SAMARA MARTINS DA SILVA FEITOSA\") é bem mais\n // longo que o mock (\"Candidato A\") — sem truncar, encavala com o percentual\n // no tooltip, que tem largura fixa.\n function truncateLabel(label: string, max = 18): string {\n return label.length > max ? `${label.slice(0, max - 1).trimEnd()}…` : label;\n }\n\n function handleSvgMouseMove(e: MouseEvent) {\n const svg = e.currentTarget as SVGSVGElement;\n const rect = svg.getBoundingClientRect();\n const clientX = e.clientX - rect.left;\n\n const scaleX = svg.viewBox.baseVal.width / rect.width;\n const svgX = clientX * scaleX;\n\n let closestIndex = 0;\n let closestDistance = Infinity;\n\n for (let i = 0; i < timestamps.length; i++) {\n const x = xPos(timestamps[i]);\n const distance = Math.abs(x - svgX);\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = i;\n }\n }\n\n if (closestDistance < 40) {\n hoveredIndex = closestIndex;\n } else {\n hoveredIndex = null;\n }\n }\n\n function handleSvgMouseLeave() {\n hoveredIndex = null;\n }\n\n // Auto Y range and ticks (same logic as before)\n const effRange = $derived.by(() => {\n if (candidates.length === 0 || timestamps.length === 0) {\n return { effYMin: 0, effYMax: 100, yTicks: [0, 25, 50, 75, 100] as number[] };\n }\n const allValues = candidates.flatMap((c) => c.data);\n const dataMin = Math.min(...allValues);\n const dataMax = Math.max(...allValues);\n const pad = Math.max(5, Math.round((dataMax - dataMin) * 0.5));\n const effYMin = yMin ?? Math.max(0, Math.floor((dataMin - pad) / 5) * 5);\n const effYMax = yMax ?? Math.min(100, Math.ceil((dataMax + pad) / 5) * 5);\n const rangeSize = effYMax - effYMin;\n const tickStep = rangeSize <= 20 ? 5 : rangeSize <= 50 ? 10 : 25;\n const yTicks: number[] = [];\n for (let v = Math.ceil(effYMin / tickStep) * tickStep; v <= effYMax + 0.001; v += tickStep) {\n yTicks.push(Math.round(v));\n }\n return { effYMin, effYMax, yTicks };\n });\n\n const xMin = $derived(timestamps[0] ?? 0);\n const xMax = $derived(timestamps[timestamps.length - 1] ?? 1);\n\n function xPos(ts: number): number {\n return PAD.left + scaleLinear(ts, xMin, xMax, 0, plotW);\n }\n\n const isMobile = $derived(containerW > 0 && containerW < 560);\n\n // Distância mínima (em unidades do viewBox) entre dois rótulos do eixo X.\n // Os timestamps da API real não são igualmente espaçados no tempo (podem vir\n // com 3min ou 45min de intervalo entre pontos vizinhos) — como o eixo posiciona\n // por tempo real, escolher índices igualmente espaçados não evita rótulos\n // caindo pertinho um do outro quando os timestamps deles são próximos. Por\n // isso decide por distância em pixel já calculada (xPos), não por contagem.\n const minTickSpacing = $derived(isMobile ? 60 : 80);\n\n const visibleTickIndices = $derived.by(() => {\n const n = timestamps.length;\n if (n <= 2) return new Set([0]);\n const lastEligible = n - 2; // último índice elegível (o final tem o pill próprio)\n if (lastEligible === 0) return new Set([0]);\n\n const indices = new Set<number>();\n let lastX = -Infinity;\n for (let i = 0; i <= lastEligible; i++) {\n const x = xPos(timestamps[i]);\n if (x - lastX >= minTickSpacing) {\n indices.add(i);\n lastX = x;\n }\n }\n return indices;\n });\n\n function yPos(val: number): number {\n return PAD.top + scaleLinear(val, effRange.effYMin, effRange.effYMax, plotH, 0);\n }\n\n const polylines = $derived(\n candidates.map((c) =>\n c.data.map((v, i) => `${xPos(timestamps[i])},${yPos(v)}`).join(' '),\n ),\n );\n\n const endDots = $derived(\n candidates.map((c, i) => ({\n cx: xPos(xMax),\n cy: yPos(c.data[c.data.length - 1]),\n color: c.color,\n elected: i === electedIndex,\n })),\n );\n\n // Badge constants (in viewBox units)\n const PILL_W = 64;\n const PILL_H = 22;\n const BADGE_W = 74;\n const BADGE_H = 24;\n\n const pillX = $derived(xPos(xMax) - PILL_W / 2);\n const pillY = $derived(PAD.top + plotH + 8);\n</script>\n\n<div class=\"election-line-chart\">\n {#if candidates.length > 0 && timestamps.length > 0}\n <div class=\"election-line-chart-area\" bind:clientWidth={containerW}>\n <svg\n viewBox=\"0 0 {VW} {VH}\"\n role=\"img\"\n aria-label=\"Gráfico de evolução eleitoral\"\n preserveAspectRatio=\"xMidYMid meet\"\n onmousemove={handleSvgMouseMove}\n onmouseleave={handleSvgMouseLeave}\n >\n <!-- Y grid lines + labels -->\n {#each effRange.yTicks as tick}\n {@const y = yPos(tick)}\n <line\n x1={PAD.left}\n y1={y}\n x2={PAD.left + plotW}\n y2={y}\n stroke=\"#676C75\"\n stroke-width=\"1\"\n stroke-dasharray=\"4 4\"\n />\n <text\n x={PAD.left - 10}\n y={y}\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n class=\"election-line-axis-text-y\"\n >{tick}%</text>\n {/each}\n\n <!-- X tick lines + labels (all except last) -->\n {#each timestamps as ts, i}\n {@const x = xPos(ts)}\n\n {#if i < timestamps.length - 1 && visibleTickIndices.has(i)}\n <text\n x={i === 0 ? x + 20 : x}\n y={PAD.top + plotH + 19}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"election-line-axis-text\"\n >{formatHour(ts)}</text>\n {/if}\n {/each}\n\n <!-- Series lines -->\n {#each candidates as c, i}\n <polyline\n points={polylines[i]}\n fill=\"none\"\n stroke={c.color}\n stroke-width=\"2.5\"\n stroke-linejoin=\"round\"\n stroke-linecap=\"round\"\n />\n {/each}\n\n <!-- End dots -->\n {#each endDots as dot}\n <circle\n cx={dot.cx}\n cy={dot.cy}\n r=\"6\"\n fill={dot.color}\n stroke=\"#fff\"\n stroke-width=\"2.5\"\n />\n {/each}\n\n <!-- Last-tick pill -->\n <rect\n x={pillX}\n y={pillY}\n width={PILL_W}\n height={PILL_H}\n rx=\"4\"\n fill=\"var(--sevn-color-tertiary, #1c1c1c)\"\n />\n <text\n x={pillX + PILL_W / 2}\n y={pillY + PILL_H / 2}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"election-line-badge-text\"\n style=\"font-size: 13px\"\n >{formatHour(xMax).toUpperCase()}</text>\n\n <!-- ELEITO badge -->\n {#if electedIndex !== undefined && endDots[electedIndex]}\n {@const dot = endDots[electedIndex]}\n {@const bx = dot.cx - BADGE_W / 1.7}\n {@const by = dot.cy - BADGE_H - 10}\n <g>\n <rect\n x={bx}\n y={by}\n width={BADGE_W}\n height={BADGE_H}\n rx=\"4\"\n fill=\"var(--sevn-color-green, #1e6704)\"\n />\n <text\n x={bx + BADGE_W / 2}\n y={by + BADGE_H / 2}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"election-line-badge-text\"\n style=\"font-size: 12px\"\n >ELEITO</text>\n </g>\n {/if}\n\n <!-- Hover line and tooltip -->\n {#if hoveredIndex !== null}\n {@const hoverX = xPos(timestamps[hoveredIndex])}\n <line\n x1={hoverX}\n y1={PAD.top}\n x2={hoverX}\n y2={PAD.top + plotH}\n stroke=\"rgba(0, 0, 0, 0.1)\"\n stroke-width=\"2\"\n stroke-dasharray=\"4 4\"\n pointer-events=\"none\"\n />\n\n <!-- Hover dots on each candidate line -->\n {#each candidates as c, i}\n <circle\n cx={hoverX}\n cy={yPos(c.data[hoveredIndex])}\n r=\"5\"\n fill={c.color}\n stroke=\"#fff\"\n stroke-width=\"2\"\n pointer-events=\"none\"\n />\n {/each}\n\n <!-- Tooltip background -->\n {@const tooltipW = 200}\n {@const tooltipH = 16 + candidates.length * 22 + 8}\n {@const tooltipX = Math.max(PAD.left + 4, Math.min(hoverX - tooltipW / 2, VW - PAD.right - tooltipW - 4))}\n {@const tooltipY = Math.max(PAD.top + 4, PAD.top - tooltipH - 12)}\n <g pointer-events=\"none\">\n <rect\n x={tooltipX}\n y={tooltipY}\n width={tooltipW}\n height={tooltipH}\n rx=\"6\"\n fill=\"#1c1c1c\"\n opacity=\"0.95\"\n />\n <text\n x={tooltipX + tooltipW / 2}\n y={tooltipY + 14}\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n class=\"election-line-tooltip-hour\"\n >{formatHour(timestamps[hoveredIndex])}</text>\n\n {#each candidates as c, i}\n <text\n x={tooltipX + 12}\n y={tooltipY + 36 + i * 22}\n text-anchor=\"start\"\n dominant-baseline=\"middle\"\n class=\"election-line-tooltip-label\"\n >{truncateLabel(c.label)}</text>\n <text\n x={tooltipX + 188}\n y={tooltipY + 36 + i * 22}\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n class=\"election-line-tooltip-value\"\n style=\"fill: {c.color}\"\n >{c.data[hoveredIndex].toFixed(1)}%</text>\n {/each}\n </g>\n {/if}\n </svg>\n </div>\n {/if}\n\n <!-- Legend -->\n {#if candidates.length > 0}\n <div class=\"election-line-legend\">\n {#each candidates as c}\n <span class=\"election-line-legend-item\">\n <span class=\"election-line-legend-tag\" style=\"background:{c.tagColor};\">{c.tag}</span>\n {c.label}\n </span>\n {/each}\n </div>\n {/if}\n\n <!-- Footer -->\n {#if updatedAt}\n <p class=\"election-line-footer\">\n Atualizado em {updatedAt}{source ? ` | Fonte ${source}` : ''}\n </p>\n {/if}\n</div>\n\n<style>\n .election-line-chart {\n width: 100%;\n display: flex;\n flex-direction: column;\n background: var(--sevn-color-neutral, #f2f2f7);\n border-radius: 8px;\n overflow: hidden;\n }\n\n .election-line-chart-area {\n width: 100%;\n padding: 15px;\n }\n\n svg {\n width: 100%;\n height: auto;\n display: block;\n }\n\n .election-line-axis-text-y {\n fill: var(--sevn-color-tertiary);\n font-weight: 600;\n }\n\n .election-line-axis-text {\n font-family: inherit;\n font-size: 14px;\n fill: #9a9aaa;\n }\n\n .election-line-badge-text {\n font-family: inherit;\n font-size: 14px;\n font-weight: 700;\n fill: #fff;\n letter-spacing: 0.04em;\n }\n\n .election-line-tooltip-hour {\n font-family: inherit;\n font-size: 13px;\n font-weight: 700;\n fill: #fff;\n letter-spacing: 0.02em;\n }\n\n .election-line-tooltip-label {\n font-family: inherit;\n font-size: 12px;\n font-weight: 500;\n fill: #e0e0e0;\n }\n\n .election-line-tooltip-value {\n font-family: inherit;\n font-size: 12px;\n font-weight: 700;\n }\n\n\n /* ─── Legend ─────────────────────────────────────────────── */\n .election-line-legend {\n display: flex;\n flex-wrap: wrap;\n gap: 20px;\n padding: 20px 16px;\n border: 1px solid #d1d1d6;\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n background: #fff;\n }\n\n .election-line-legend-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--sevn-color-tertiary, #1c1c1c);\n }\n\n .election-line-legend-tag {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 700;\n color: #fff;\n letter-spacing: 0.03em;\n }\n\n /* ─── Footer ─────────────────────────────────────────────── */\n .election-line-footer {\n font-size: 0.75rem;\n color: #9a9aaa;\n padding: 20px 16px 10px;\n margin: 0;\n background: #fff;\n }\n</style>\n","const LOWERCASE_CONNECTORS = new Set(['da', 'de', 'do', 'das', 'dos', 'e']);\n\n/** Nomes de candidato vêm em CAIXA ALTA de todos os endpoints da API — formata\n * em Title Case, mantendo conectores comuns em português em minúsculo. */\nexport function toTitleCase(str: string): string {\n return str\n .toLowerCase()\n .split(' ')\n .map((word, i) => (i > 0 && LOWERCASE_CONNECTORS.has(word)) ? word : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n","/** Formatação única dos carimbos de \"última atualização\" da apuração.\n *\n * Antes cada componente reimplementava isso no seu próprio `$derived`, com\n * pequenas divergências entre eles (uns em UTC, outros no fuso local; uns com\n * mês por extenso, outros só com a hora). Aqui fica um formato só.\n *\n * O horário exibido é EXATAMENTE o que o backend manda: não há conversão de\n * fuso em lugar nenhum. Quem decide o fuso publicado é a API; o front repete.\n * Por isso o parse é literal — `new Date('...-03:00')` deslocaria a hora\n * sozinho, e `2026-10-05T19:21` sairia como 22h21 na tela. */\n\n/** Devolve uma Date cujos campos UTC são os dígitos escritos na string, sem\n * qualquer deslocamento. Um sufixo `Z` ou `-03:00` é ignorado de propósito. */\nfunction parseAsWritten(timestamp: string | number | Date): Date | null {\n if (typeof timestamp === 'string') {\n const parts = timestamp.match(/^(\\d{4})-(\\d{2})-(\\d{2})[T ](\\d{2}):(\\d{2})(?::(\\d{2}))?/);\n if (parts) {\n return new Date(\n Date.UTC(\n Number(parts[1]),\n Number(parts[2]) - 1,\n Number(parts[3]),\n Number(parts[4]),\n Number(parts[5]),\n Number(parts[6] ?? 0)\n )\n );\n }\n }\n\n // Number (epoch) ou string fora do formato ISO: sem dígitos literais pra\n // preservar, cai no parse normal.\n const date = new Date(timestamp);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** Epoch em segundos preservando a hora escrita — use para posicionar pontos\n * num eixo de tempo sem que o rótulo mude de fuso ao ser formatado de volta.\n * Devolve `null` para timestamp ausente ou inválido. */\nexport function toEpochSeconds(timestamp: string | number | null | undefined): number | null {\n if (timestamp == null || timestamp === '') return null;\n const date = parseAsWritten(timestamp);\n return date ? Math.floor(date.getTime() / 1000) : null;\n}\n\n/** `2026-10-05T19:21:00Z` → `05/10/2026 às 19h21`. String vazia se o timestamp\n * for ausente ou inválido — nunca uma data de mentira. */\nexport function formatUpdate(timestamp: string | number | null | undefined): string {\n if (timestamp == null || timestamp === '') return '';\n\n const date = parseAsWritten(timestamp);\n if (!date) return '';\n\n const day = String(date.getUTCDate()).padStart(2, '0');\n const month = String(date.getUTCMonth() + 1).padStart(2, '0');\n const year = date.getUTCFullYear();\n const hours = String(date.getUTCHours()).padStart(2, '0');\n const minutes = String(date.getUTCMinutes()).padStart(2, '0');\n\n return `${day}/${month}/${year} às ${hours}h${minutes}`;\n}\n\n/** Rodapé completo: `Atualizado em 05/10/2026 às 19h21 | Fonte TSE`.\n * Sem timestamp, sobra só a fonte — nada de \"Atualizado em\" vazio. */\nexport function formatUpdateMeta(\n timestamp: string | number | null | undefined,\n source = 'TSE'\n): string {\n const stamp = formatUpdate(timestamp);\n return stamp ? `Atualizado em ${stamp} | Fonte ${source}` : `Fonte ${source}`;\n}\n\n/** Carimbo fixo do modo mock (`mock={true}`). Sai do mesmo formatador pra não\n * divergir do formato real quando ele mudar. */\nexport const MOCK_UPDATE = formatUpdate('2022-10-31T00:18:00Z');\n\n/** Rodapé completo do modo mock. */\nexport const MOCK_UPDATE_META = formatUpdateMeta('2022-10-31T00:18:00Z');\n","<script lang=\"ts\">\n import type { FinalResultsProps } from './props';\n import { Header, Ad, CandidatePercentage, CandidatesCountPercent, Map, TableCandidate, Autocomplete } from '$lib';\n import type { HeaderProps } from '$lib';\n import type { StateResults } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, showAd = true, data = null, stateResults = null, header = {\n title: 'Presidente',\n description: '100% das urnas apuradas',\n tag: '1º TURNO',\n tagColor: 'var(--sevn-color-blue, #3b82f6)'\n } }: FinalResultsProps = $props();\n\n const CAND_A_COLOR = 'var(--sevn-color-primary)';\n const CAND_B_COLOR = 'var(--sevn-color-secondary)';\n\n const mockCandidates = [\n { name: 'Candidato A', acronym: 'ABC', percent: 51.90, votes: 60345999, color: CAND_A_COLOR, avatar: 'man', avatarTag: 'ELEITO', avatarTagColor: 'var(--sevn-color-green)' },\n { name: 'Candidato B', acronym: 'DEF', percent: 48.10, votes: 58206354, color: CAND_B_COLOR, avatar: 'man' },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!data?.candidates) return [];\n return data.candidates.slice(0, 2).map((c: any) => ({\n name: toTitleCase(c.ballot_name),\n acronym: c.party_abbr,\n percent: c.valid_votes_pct,\n votes: c.votes,\n color: c.party_color,\n photoUrl: c.photo_url,\n avatar: 'man',\n avatarTag: c.elected ? 'ELEITO' : undefined,\n avatarTagColor: c.elected ? 'var(--sevn-color-green)' : undefined,\n }));\n });\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!data?.summary) return [];\n const totalVotes = data.summary.total_valid_votes + data.summary.null_votes + data.summary.blank_votes;\n return [\n { text: 'Nulos', value: `${((data.summary.null_votes / totalVotes) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((data.summary.blank_votes / totalVotes) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${data.summary.total_valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const stateWinnersA = new Set(['al','am','ap','ba','ce','ma','mg','pa','pb','pe','pi','rn','se','sp']);\n\n const ALL_UFS = ['ac','al','am','ap','ba','ce','df','es','go','ma','mg','ms','mt','pa','pb','pe','pi','pr','rj','rn','ro','rr','rs','sc','se','sp','to'];\n\n // Colore só os estados que já têm líder real publicado (getStateResults);\n // os demais ficam com o preenchimento neutro padrão do próprio mapa (map.svelte),\n // em vez de fingir que todo estado já tem um resultado.\n const mapColors = $derived.by(() => {\n if (mock) {\n return ALL_UFS.map((uf) => ({\n id: uf,\n color: stateWinnersA.has(uf) ? CAND_A_COLOR : CAND_B_COLOR,\n }));\n }\n return (stateResults?.states ?? [])\n .filter((s) => s.leader?.party_color)\n .map((s) => ({\n id: s.state.toLowerCase(),\n color: s.leader.party_color,\n }));\n });\n\n const ufs = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ].sort((a, b) => a.label.localeCompare(b.label));\n\n const stateOverrides = {\n sp: [\n { name: 'Candidato A', party: 'ABC', percentage: 54.1, votes: 1728159, color: CAND_A_COLOR, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 43.1, votes: 1377441, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.1, votes: 35623, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.7, votes: 21439, color: '#22c55e' },\n { name: 'Candidato E', party: 'MNO', percentage: 0.5, votes: 17344, color: '#eab308' },\n { name: 'Candidato F', party: 'PQR', percentage: 0.2, votes: 5149, color: '#e74c3c' },\n ],\n rj: [\n { name: 'Candidato B', party: 'DEF', percentage: 50.8, votes: 1200450, color: CAND_B_COLOR, elected: true },\n { name: 'Candidato A', party: 'ABC', percentage: 46.3, votes: 1094523, color: CAND_A_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.8, votes: 42568, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 1.1, votes: 26123, color: '#22c55e' },\n ],\n mg: [\n { name: 'Candidato A', party: 'ABC', percentage: 53.4, votes: 2341200, color: CAND_A_COLOR, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 43.7, votes: 1916300, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.5, votes: 65820, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.9, votes: 39492, color: '#22c55e' },\n { name: 'Candidato E', party: 'MNO', percentage: 0.5, votes: 21940, color: '#eab308' },\n ],\n rs: [\n { name: 'Candidato B', party: 'DEF', percentage: 53.6, votes: 1580120, color: CAND_B_COLOR, elected: true },\n { name: 'Candidato A', party: 'ABC', percentage: 43.8, votes: 1291440, color: CAND_A_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.4, votes: 41280, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.8, votes: 23616, color: '#22c55e' },\n { name: 'Candidato E', party: 'MNO', percentage: 0.4, votes: 11808, color: '#eab308' },\n ],\n ba: [\n { name: 'Candidato A', party: 'ABC', percentage: 68.2, votes: 3012450, color: CAND_A_COLOR, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 29.4, votes: 1298970, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.5, votes: 66273, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.9, votes: 39764, color: '#22c55e' },\n ],\n pr: [\n { name: 'Candidato B', party: 'DEF', percentage: 57.4, votes: 1423680, color: CAND_B_COLOR, elected: true },\n { name: 'Candidato A', party: 'ABC', percentage: 39.8, votes: 987360, color: CAND_A_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.6, votes: 39712, color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.8, votes: 19856, color: '#22c55e' },\n { name: 'Candidato E', party: 'MNO', percentage: 0.4, votes: 9928, color: '#eab308' },\n ],\n };\n\n function getStateData(uf) {\n if (stateOverrides[uf]) return stateOverrides[uf];\n const v = uf.charCodeAt(0) * 7 + uf.charCodeAt(1) * 3;\n const aWins = stateWinnersA.has(uf);\n const aP = aWins ? 52 + (v % 16) : 33 + (v % 12);\n const bP = aWins ? 38 + (v % 8) : 52 + (v % 14);\n const rem = 100 - aP - bP;\n const cP = Math.max(1, Math.round(rem * 0.55));\n const dP = Math.max(1, Math.round(rem * 0.28));\n const eP = Math.max(1, rem - cP - dP);\n const total = 400000 + v * 8000;\n return [\n { name: 'Candidato A', party: 'ABC', percentage: aP, votes: Math.round(total * aP / 100), color: CAND_A_COLOR, elected: aWins },\n { name: 'Candidato B', party: 'DEF', percentage: bP, votes: Math.round(total * bP / 100), color: CAND_B_COLOR, elected: !aWins },\n { name: 'Candidato C', party: 'GHI', percentage: cP, votes: Math.round(total * cP / 100), color: '#3b82f6' },\n { name: 'Candidato D', party: 'JKL', percentage: dP, votes: Math.round(total * dP / 100), color: '#22c55e' },\n { name: 'Candidato E', party: 'MNO', percentage: eP, votes: Math.round(total * eP / 100), color: '#eab308' },\n ];\n }\n\n function getStateName(uf) {\n return ufs.find(u => u.value === uf)?.label?.replace(/\\s+[A-Z]{2}$/, '') ?? uf.toUpperCase();\n }\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(data?.summary?.last_updated)\n );\n\n\n let selectedUf = $state(/** @type {string|null} */ (null));\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedUf = $state<string | null>(null);\n let pinnedX = $state(0);\n let pinnedY = $state(0);\n\n const displayUf = $derived(pinnedUf ?? selectedUf);\n\n // `data` (ElectionResults) traz sempre um recorte nacional único — não existe\n // resultado por estado dentro dele. O hover por estado usa `stateResults`\n // (getStateResults/by-state), que só publica alguns estados por vez; quando o\n // estado passado no mouse não está aí, mostramos isso de forma honesta em vez\n // de inventar candidatos.\n const selectedData = $derived.by(() => {\n if (!displayUf) return [];\n if (mock) return getStateData(displayUf);\n\n const state = stateResults?.states?.find(\n (s) => s.state.toLowerCase() === displayUf\n );\n if (!state?.leader || !state?.runner_up) return null;\n\n return [\n {\n name: toTitleCase(state.leader.name),\n party: state.leader.party_abbr,\n percentage: state.leader.valid_votes_pct,\n votes: state.leader.votes,\n color: state.leader.party_color,\n elected: state.leader.elected,\n },\n {\n name: toTitleCase(state.runner_up.name),\n party: state.runner_up.party_abbr,\n percentage: state.runner_up.valid_votes_pct,\n votes: state.runner_up.votes,\n color: state.runner_up.party_color,\n elected: state.runner_up.elected,\n },\n ];\n });\n const selectedTitle = $derived(displayUf ? `Presidente: ${getStateName(displayUf)}` : '');\n\n function handleRegionHover(info) {\n selectedUf = info.cid;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedUf === info.cid) {\n pinnedUf = null;\n } else {\n pinnedUf = info.cid;\n pinnedX = info.clientX - rect.left;\n pinnedY = info.clientY - rect.top;\n }\n }\n\n $effect(() => {\n if (!pinnedUf) return;\n function handleOutsideClick(e: MouseEvent) {\n if (mapWebEl && !mapWebEl.contains(e.target as Node)) {\n pinnedUf = null;\n }\n }\n document.addEventListener('click', handleOutsideClick);\n return () => document.removeEventListener('click', handleOutsideClick);\n });\n</script>\n\n<div class=\"sevn_final_results\" class:sevn_final_results--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if mock || candidates.length >= 2}\n <div class=\"sevn_final_results__candidate-web\">\n <CandidatePercentage\n layout=\"duel\"\n {candidates}\n overviewData={overviewData}\n avatarSize=\"120px\"\n barHeight=\"24px\"\n date={lastUpdate}\n font=\"TSE\"\n />\n </div>\n\n <div class=\"sevn_final_results__candidate-mobile\">\n <CandidatePercentage\n layout=\"duel-compact\"\n {candidates}\n overviewData={overviewData}\n date={lastUpdate}\n font=\"TSE\"\n />\n </div>\n {:else}\n <!-- duel/duel-compact exigem exatamente 2 candidatos (candidates[0]/[1]) —\n sem isso, CandidatePercentage quebra tentando ler propriedades de undefined. -->\n <p class=\"sevn_final_results__empty-label\">Resultado ainda não publicado.</p>\n {/if}\n\n {#if showAd}\n <div class=\"sevn_final_results__ad\">\n <Ad><span class=\"sevn_final_results__ad-label\">anúncio</span></Ad>\n </div>\n {/if}\n\n <div class=\"sevn_final_results__map-web\" bind:this={mapWebEl} onmouseleave={() => selectedUf = null} role=\"presentation\">\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n <div class=\"sevn_final_results__count-overlay\">\n <CandidatesCountPercent {candidates} />\n </div>\n {#if selectedUf}\n <div class=\"sevn_final_results__table-overlay\" style=\"left:{overlayX}px;top:{overlayY}px\">\n {#if selectedData}\n <TableCandidate title={selectedTitle} candidates={selectedData} />\n {:else}\n <p class=\"sevn_final_results__empty-label\">Resultado ainda não publicado para {getStateName(displayUf)}.</p>\n {/if}\n </div>\n {/if}\n </div>\n\n <div class=\"sevn_final_results__mobile-section\">\n <div class=\"sevn_final_results__overview\">\n <span class=\"sevn_final_results__overview-label\">Visão geral:</span>\n <div class=\"sevn_final_results__overview-dots\">\n {#each candidates as c}\n <span class=\"sevn_final_results__overview-dot-item\">\n <span class=\"sevn_final_results__overview-dot\" style=\"background:{c.color}\"></span>\n {c.name} | {c.acronym}\n </span>\n {/each}\n </div>\n </div>\n\n <div class=\"sevn_final_results__map-mobile\">\n <Map type=\"brazil-states\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_final_results__search\">\n <Autocomplete\n label={selectedUf ? \"Você selecionou:\" : \"Selecione um estado:\"}\n options={ufs}\n bind:value={selectedUf}\n />\n </div>\n\n {#if selectedUf}\n {#if selectedData}\n <TableCandidate title={selectedTitle} candidates={selectedData} />\n {:else}\n <p class=\"sevn_final_results__empty-label\">Resultado ainda não publicado para {getStateName(displayUf)}.</p>\n {/if}\n {/if}\n\n </div>\n\n</div>\n\n<style>\n .sevn_final_results {\n display: flex;\n flex-direction: column;\n gap: 30px;\n }\n\n /* ── CandidatePercentage ──────────────────────────────── */\n .sevn_final_results__candidate-mobile { display: flex; flex-direction: column; }\n .sevn_final_results__candidate-web { display: none; }\n\n /* ── Ad ───────────────────────────────────────────────── */\n .sevn_final_results__ad { display: none; }\n .sevn_final_results__ad-label { font-size: 0.875rem; color: #aaa; }\n\n /* ── Mapa web ─────────────────────────────────────────── */\n .sevn_final_results__map-web { display: none; position: relative; }\n\n /* ── Overlay TableCandidate (web) ─────────────────────── */\n .sevn_final_results__table-overlay {\n position: absolute;\n z-index: 10;\n width: 500px;\n transform: translate(-50%, 12px);\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n pointer-events: none;\n }\n\n .sevn_final_results__table-overlay :global(.table-candidate-content) {\n display: grid;\n grid-template-columns: 1fr 80px 160px;\n align-items: center;\n gap: 0;\n }\n\n .sevn_final_results__table-overlay :global(.table-candidate-percent) {\n text-align: right;\n }\n\n .sevn_final_results__table-overlay :global(.table-candidate-votes) {\n flex-basis: auto;\n margin-top: 0;\n text-align: right;\n }\n\n .sevn_final_results__empty-label {\n margin: 0;\n padding: 14px 18px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n text-align: center;\n }\n\n /* ── Seção mobile ─────────────────────────────────────── */\n .sevn_final_results__mobile-section {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n /* ── Visão geral ──────────────────────────────────────── */\n .sevn_final_results__overview {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .sevn_final_results__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_final_results__overview-dots {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .sevn_final_results__overview-dot-item {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 0.8125rem;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_final_results__overview-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n /* ── Mapa mobile + overlay CandidatesCountPercent ──────── */\n .sevn_final_results__map-mobile {\n position: relative;\n width: 100%;\n }\n\n .sevn_final_results__count-overlay {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 5;\n width: 400px;\n }\n\n \n\n /* ── Desktop ──────────────────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_final_results__candidate-mobile { display: none; }\n .sevn_final_results__candidate-web { display: flex; flex-direction: column; }\n .sevn_final_results__ad { display: block; }\n .sevn_final_results__map-web { display: block; }\n .sevn_final_results__mobile-section { display: none; }\n }\n\n @media (max-width: 767px) {\n .sevn_final_results__search :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n\n /* ── Raw ──────────────────────────────────────────────── */\n .sevn_final_results--raw,\n .sevn_final_results--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { StateWinnersProps } from './props';\n import { Header, CandidatePercentage, Map, MapLegend, Autocomplete } from '$lib';\n import type { HeaderProps } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, data = null, header = {\n title: 'Quem ganhou em cada estado',\n description: 'Veja o resultado por estado'\n } }: StateWinnersProps = $props();\n\n const allStates = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n const mockCANDIDATO_A = { nome: 'Candidato A', partido: 'ABC', cor: 'var(--sevn-color-primary)' };\n const mockCANDIDATO_B = { nome: 'Candidato B', partido: 'DEF', cor: 'var(--sevn-color-secondary)' };\n\n const mockResultados = {\n ac: { estado: 'Acre', candidato: mockCANDIDATO_B, percent: 54.1 },\n al: { estado: 'Alagoas', candidato: mockCANDIDATO_A, percent: 61.3 },\n am: { estado: 'Amazonas', candidato: mockCANDIDATO_A, percent: 52.7 },\n ap: { estado: 'Amapá', candidato: mockCANDIDATO_A, percent: 57.8 },\n ba: { estado: 'Bahia', candidato: mockCANDIDATO_A, percent: 68.2 },\n ce: { estado: 'Ceará', candidato: mockCANDIDATO_A, percent: 66.4 },\n df: { estado: 'Distrito Federal', candidato: mockCANDIDATO_B, percent: 55.9 },\n es: { estado: 'Espírito Santo', candidato: mockCANDIDATO_B, percent: 51.2 },\n go: { estado: 'Goiás', candidato: mockCANDIDATO_B, percent: 58.6 },\n ma: { estado: 'Maranhão', candidato: mockCANDIDATO_A, percent: 63.5 },\n mg: { estado: 'Minas Gerais', candidato: mockCANDIDATO_A, percent: 53.4 },\n ms: { estado: 'Mato Grosso do Sul', candidato: mockCANDIDATO_B, percent: 56.3 },\n mt: { estado: 'Mato Grosso', candidato: mockCANDIDATO_B, percent: 60.1 },\n pa: { estado: 'Pará', candidato: mockCANDIDATO_A, percent: 59.7 },\n pb: { estado: 'Paraíba', candidato: mockCANDIDATO_A, percent: 62.0 },\n pe: { estado: 'Pernambuco', candidato: mockCANDIDATO_A, percent: 64.8 },\n pi: { estado: 'Piauí', candidato: mockCANDIDATO_A, percent: 65.3 },\n pr: { estado: 'Paraná', candidato: mockCANDIDATO_B, percent: 57.4 },\n rj: { estado: 'Rio de Janeiro', candidato: mockCANDIDATO_B, percent: 50.8 },\n rn: { estado: 'Rio Grande do Norte', candidato: mockCANDIDATO_A, percent: 60.2 },\n ro: { estado: 'Rondônia', candidato: mockCANDIDATO_B, percent: 62.5 },\n rr: { estado: 'Roraima', candidato: mockCANDIDATO_B, percent: 58.0 },\n rs: { estado: 'Rio Grande do Sul', candidato: mockCANDIDATO_B, percent: 53.6 },\n sc: { estado: 'Santa Catarina', candidato: mockCANDIDATO_B, percent: 67.1 },\n se: { estado: 'Sergipe', candidato: mockCANDIDATO_A, percent: 58.9 },\n sp: { estado: 'São Paulo', candidato: mockCANDIDATO_A, percent: 54.1 },\n to: { estado: 'Tocantins', candidato: mockCANDIDATO_B, percent: 51.7 },\n };\n\n // Estados sem `leader` ainda (apuração não determinou um líder) ficam de fora\n // — não usa cor/nome de preenchimento, senão o mapa colore um estado que na\n // verdade não tem resultado nenhum ainda.\n const resultados = $derived.by(() => {\n if (mock) return mockResultados;\n if (!data?.states || !Array.isArray(data.states)) return {};\n return Object.fromEntries(\n data.states\n .filter((state: any) => state.leader?.party_color)\n .map((state: any) => [\n state.state.toLowerCase(),\n {\n estado: state.state_name,\n candidato: {\n nome: toTitleCase(state.leader.name),\n partido: state.leader.party_abbr,\n cor: state.leader.party_color,\n },\n percent: state.leader.valid_votes_pct,\n },\n ])\n );\n });\n\n const mapColors = $derived(\n Object.entries(resultados).map(([uf, r]) => ({\n id: uf,\n color: r.candidato.cor,\n }))\n );\n\n const ufs = $derived(\n Object.entries(resultados)\n .map(([value, r]) => ({ value, label: `${r.estado} ${value.toUpperCase()}` }))\n .sort((a, b) => a.label.localeCompare(b.label))\n );\n\n const ufsOptions = $derived(\n !mock ? allStates : ufs\n );\n\n const mockStackCandidates = [\n { name: 'Candidato A', acronym: 'ABC', percent: 50.9, votes: 60345999, color: 'var(--sevn-color-primary)', avatar: 'man', avatarTag: 'ELEITO', avatarTagColor: 'var(--sevn-color-green)' },\n { name: 'Candidato B', acronym: 'DEF', percent: 49.1, votes: 58206354, color: 'var(--sevn-color-secondary)', avatar: 'man' },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n let selectedUf = $state<string | null>(null);\n let mapContainer: HTMLElement | undefined = $state();\n let isMobile = $state(false);\n\n $effect(() => {\n const handleResize = () => {\n isMobile = window.innerWidth < 768;\n };\n\n handleResize();\n window.addEventListener('resize', handleResize);\n\n return () => window.removeEventListener('resize', handleResize);\n });\n\n $effect(() => {\n if (selectedUf && mapContainer && isMobile) {\n mapContainer.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n });\n\n const selectedStateData = $derived(\n selectedUf && data?.states && Array.isArray(data.states)\n ? data.states.find((s: any) => s.state.toLowerCase() === selectedUf)\n : null\n );\n\n // `selectedStateData` vem de um .find() em `data.states` — a API só publica\n // parte dos estados por vez, então esse estado específico pode não estar lá\n // ainda mesmo com `data` existindo. Só cai no mock quando mock===true; quando\n // real e o estado não tem leader+runner_up, fica vazio (honesto) em vez de\n // inventar candidatos.\n const stackCandidates = $derived.by(() => {\n if (!selectedUf) return [];\n if (mock) return mockStackCandidates;\n if (!selectedStateData?.leader || !selectedStateData?.runner_up) return [];\n\n return [\n {\n name: toTitleCase(selectedStateData.leader.name),\n acronym: selectedStateData.leader.party_abbr,\n percent: selectedStateData.leader.valid_votes_pct,\n votes: selectedStateData.leader.votes,\n color: selectedStateData.leader.party_color,\n photoUrl: selectedStateData.leader.photo_url,\n avatar: 'man',\n avatarTag: selectedStateData.leader.elected ? 'ELEITO' : undefined,\n avatarTagColor: selectedStateData.leader.elected ? 'var(--sevn-color-green)' : undefined,\n },\n {\n name: toTitleCase(selectedStateData.runner_up.name),\n acronym: selectedStateData.runner_up.party_abbr,\n percent: selectedStateData.runner_up.valid_votes_pct,\n votes: selectedStateData.runner_up.votes,\n color: selectedStateData.runner_up.party_color,\n photoUrl: selectedStateData.runner_up.photo_url,\n avatar: 'man',\n avatarTag: selectedStateData.runner_up.elected ? 'ELEITO' : undefined,\n avatarTagColor: selectedStateData.runner_up.elected ? 'var(--sevn-color-green)' : undefined,\n },\n ];\n });\n\n const hasStackData = $derived(stackCandidates.length > 0);\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(data?.last_updated)\n );\n\n const overviewData = $derived.by(() => {\n if (!selectedUf) return [];\n if (mock) return mockOverviewData;\n if (!selectedStateData) return [];\n\n return [\n { text: 'Status', value: selectedStateData.status },\n { text: 'Urnas contadas', value: `${selectedStateData.ballots_counted_pct}%` },\n ];\n });\n\n const mockPartySegments = [\n { color: '#4a0e0e', tooltip: 'ABC' },\n { color: '#8b1a1a', tooltip: 'DEF' },\n { color: '#c0392b', tooltip: 'GHI' },\n { color: '#e74c3c', tooltip: 'JKL' },\n { color: '#f1948a', tooltip: 'MNO' },\n { color: '#fadbd8', tooltip: 'PQR' },\n { color: '#d6e4f0', tooltip: 'STU' },\n { color: '#a9cce3', tooltip: 'VWX' },\n { color: '#5dade2', tooltip: 'YZA' },\n { color: '#2e86c1', tooltip: 'BCD' },\n { color: '#1a5276', tooltip: 'EFG' },\n { color: '#0d2137', tooltip: 'HIJ' },\n { color: '#b7950b', tooltip: 'KLM' },\n { color: '#9a7d0a', tooltip: 'NOP' },\n { color: '#7d6608', tooltip: 'QRS' },\n ];\n\n const partySegments = $derived.by(() => {\n if (mock) return mockPartySegments;\n if (!data?.states || !Array.isArray(data.states)) return [];\n return Array.from(\n new globalThis.Map<string, { color: string; tooltip: string }>(\n data.states\n .flatMap((state: any) => [state.leader, state.runner_up])\n .filter((c: any) => c?.party_abbr && c?.party_color)\n .map((c: any) => [c.party_abbr, { color: c.party_color, tooltip: c.party_abbr }])\n ).values()\n );\n });\n\n function handleRegionClick(info: any) {\n const uf = info.cid;\n selectedUf = selectedUf === uf ? null : uf;\n }\n</script>\n\n<div class=\"sevn_state_winners\" class:sevn_state_winners--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_state_winners__search\">\n <Autocomplete\n label=\"Busque por estado\"\n options={ufsOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n />\n </div>\n\n {#if selectedUf}\n <div class=\"sevn_state_winners__grid\">\n <div class=\"sevn_state_winners__candidates\">\n {#if hasStackData}\n <CandidatePercentage\n layout=\"stack\"\n candidates={stackCandidates}\n overviewData={overviewData}\n avatarSize=\"133px\"\n barHeight=\"24px\"\n date={lastUpdate}\n font=\"TSE\"\n />\n {:else}\n <p class=\"sevn_state_winners__empty-label\">Resultado ainda não publicado para {allStates.find((s) => s.value === selectedUf)?.label ?? selectedUf?.toUpperCase()}.</p>\n {/if}\n </div>\n <div class=\"sevn_state_winners__map\" bind:this={mapContainer}>\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n interactive\n onRegionClick={handleRegionClick}\n />\n </div>\n </div>\n \n <div class=\"sevn_state_winners__mobile\">\n {#if hasStackData}\n <CandidatePercentage\n layout=\"duel-compact\"\n candidates={stackCandidates}\n overviewData={overviewData}\n date={lastUpdate}\n font=\"TSE\"\n />\n\n <div class=\"sevn_state_winners__overview\">\n <span class=\"sevn_state_winners__overview__label\">Visão geral:</span>\n <div class=\"sevn_state_winners__overview__dots\">\n {#each stackCandidates as c}\n <span class=\"sevn_state_winners__overview__dot_item\">\n <span class=\"sevn_state_winners__overview__dot\" style=\"background:{c.color}\"></span>\n {c.name} | {c.acronym}\n </span>\n {/each}\n </div>\n </div>\n {:else}\n <p class=\"sevn_state_winners__empty-label\">Resultado ainda não publicado para {allStates.find((s) => s.value === selectedUf)?.label ?? selectedUf?.toUpperCase()}.</p>\n {/if}\n\n <div class=\"sevn_state_winners__map\" bind:this={mapContainer}>\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n />\n </div>\n </div>\n \n <MapLegend\n title=\"Partidos\"\n segments={partySegments}\n sortSegments\n />\n { /if}\n</div>\n\n<style>\n .sevn_state_winners {\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n \n /* ── Search ──────────────────────────────── */\n .sevn_state_winners__search {\n width: 100%;\n }\n\n /* ── Grid web ────────────────────────────── */\n .sevn_state_winners__grid {\n display: grid;\n grid-template-columns: 2fr 3fr;\n gap: 40px;\n align-items: center;\n }\n\n .sevn_state_winners__candidates {\n display: flex;\n flex-direction: column;\n }\n\n .sevn_state_winners__empty-label {\n margin: 0;\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_state_winners__map {\n width: 100%;\n }\n\n /* ── Mobile layout ───────────────────────── */\n .sevn_state_winners__mobile {\n display: none;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_state_winners__overview {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .sevn_state_winners__overview__label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_state_winners__overview__dots {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .sevn_state_winners__overview__dot_item {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 0.8125rem;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_state_winners__overview__dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n /* ── Responsivo ──────────────────────────── */\n @media (max-width: 767px) {\n .sevn_state_winners__grid {\n display: none;\n }\n\n .sevn_state_winners__mobile {\n display: flex;\n }\n\n /* Dropdown flui no documento em vez de sobrepor */\n .sevn_state_winners__search :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n\n /* ── Raw (sem estilos) ───────────────────── */\n .sevn_state_winners--raw,\n .sevn_state_winners--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { VoteCountingProgressProps } from './props';\n import { Header, ElectionLineChart } from '$lib';\n import type { HeaderProps } from '$lib';\n import type { HeadToHeadLiveTimeline, HeadToHeadLivePoint } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate, toEpochSeconds } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, data = null, header = {\n title: 'Evolução da apuração',\n description: 'Acompanhe em tempo real',\n tag: '1º turno',\n tagColor: '#0E2A41'\n } }: VoteCountingProgressProps = $props();\n\n const mockCandidates = [\n { label: 'Candidato A', tag: 'ABC', tagColor: '#0A3E27', color: '#1E6704',\n data: [49, 50, 51, 51, 52, 52] },\n { label: 'Candidato B', tag: 'DEF', tagColor: '#C38214', color: '#C38214',\n data: [47, 47, 47, 48, 48, 48] },\n ];\n\n const mockTimestamps = [1667247480, 1667248800, 1667250000, 1667251140, 1667252940, 1667253480];\n\n const hasRealData = $derived(\n !mock && !!data?.points?.length && !!data?.candidate_a && !!data?.candidate_b\n );\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!hasRealData) return [];\n return [\n {\n label: toTitleCase(data!.candidate_a.name),\n tag: data!.candidate_a.party_abbr,\n tagColor: data!.candidate_a.party_color,\n color: data!.candidate_a.party_color,\n data: data!.points.map((p: HeadToHeadLivePoint) => p.candidate_a_pct),\n },\n {\n label: toTitleCase(data!.candidate_b.name),\n tag: data!.candidate_b.party_abbr,\n tagColor: data!.candidate_b.party_color,\n color: data!.candidate_b.party_color,\n data: data!.points.map((p: HeadToHeadLivePoint) => p.candidate_b_pct),\n },\n ];\n });\n\n const timestamps = $derived.by(() => {\n if (mock) return mockTimestamps;\n if (!hasRealData) return [];\n return data!.points.map((p: HeadToHeadLivePoint) => toEpochSeconds(p.timestamp) ?? 0);\n });\n\n const electedIndex = $derived.by((): number | undefined => {\n if (mock) return 0;\n if (!hasRealData) return undefined;\n if ((data!.candidate_a as any)?.elected) return 0;\n if ((data!.candidate_b as any)?.elected) return 1;\n return undefined;\n });\n\n const yMin = $derived.by(() => {\n if (mock) return 0;\n if (!hasRealData) return 0;\n const allValues = data!.points.flatMap((p: HeadToHeadLivePoint) => [p.candidate_a_pct, p.candidate_b_pct]);\n return Math.max(0, Math.floor(Math.min(...allValues) - 5));\n });\n\n const yMax = $derived.by(() => {\n if (mock) return 75;\n if (!hasRealData) return 75;\n const allValues = data!.points.flatMap((p: HeadToHeadLivePoint) => [p.candidate_a_pct, p.candidate_b_pct]);\n return Math.min(100, Math.ceil(Math.max(...allValues) + 5));\n });\n\n const updatedAt = $derived.by(() => {\n if (mock) return MOCK_UPDATE;\n if (!hasRealData) return '';\n return formatUpdate(data!.points[data!.points.length - 1].timestamp);\n });\n</script>\n\n<div class=\"sevn_vote_counting_progress\" class:sevn_vote_counting_progress--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if !mock && !hasRealData}\n <p class=\"sevn_vote_counting_progress__status\">Dados indisponíveis no momento.</p>\n {:else}\n <ElectionLineChart\n {candidates}\n {timestamps}\n {electedIndex}\n {yMin}\n {yMax}\n {updatedAt}\n source=\"TSE\"\n />\n {/if}\n</div>\n\n<style>\n .sevn_vote_counting_progress {\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n\n .sevn_vote_counting_progress__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n /* ── Raw (sem estilos) ───────────────────── */\n .sevn_vote_counting_progress--raw,\n .sevn_vote_counting_progress--raw * {\n all: revert;\n }\n</style>\n","import { defaultsForStore, getConfig, requireApiHosts } from './config';\nimport { getStore } from './store';\nimport { SevnNetworkError } from './errors';\n\n/**\n * Host atualmente em uso (índice em `apiHosts`) e quando ele foi fixado.\n * Depois de cair para um secundário, continuamos nele por `stickyWindowMs`\n * antes de retentar o primário — senão cada request pagaria de novo os\n * timeouts do host que está fora.\n *\n * Mora no store compartilhado: numa página com vários bundles UMD, o host\n * morto é descoberto uma vez só, e não uma vez por componente.\n */\nfunction transportState() {\n\treturn getStore(defaultsForStore).transport;\n}\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Combina o sinal do chamador com o timeout desta tentativa. `AbortSignal.any`\n * é recente; sem ele, o timeout sozinho já cobre o caso que importa.\n */\nfunction attemptSignal(timeoutMs: number, caller?: AbortSignal | null): AbortSignal {\n\tconst timeout = AbortSignal.timeout(timeoutMs);\n\tif (!caller) return timeout;\n\tif (typeof AbortSignal.any === 'function') return AbortSignal.any([caller, timeout]);\n\treturn timeout;\n}\n\n/** Troca a origem da URL mantendo path, query e hash. */\nfunction withHost(url: string, host: string): string {\n\tconst target = new URL(url);\n\tconst base = new URL(host);\n\ttarget.protocol = base.protocol;\n\ttarget.host = base.host;\n\treturn target.toString();\n}\n\nfunction rotateFrom(start: number, length: number): number[] {\n\treturn Array.from({ length }, (_, i) => (start + i) % length);\n}\n\n/**\n * `fetch` com failover entre os hosts do cliente.\n *\n * Por host: até `retriesPerHost` tentativas. Esgotou, vai para o próximo —\n * `{key}-api1` → `{key}-api2` → `failover-api.sevntech.com`.\n *\n * 4xx **não** cascateia: é resposta legítima do backend (404 aqui significa\n * \"recorte ainda não publicado\", tratado em `services/api.ts`), e insistir nos\n * outros hosts só geraria três vezes o mesmo 404.\n */\nexport const sevnFetch: typeof fetch = async (input, init) => {\n\tconst url =\n\t\ttypeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n\tconst hosts = requireApiHosts();\n\tconst { timeoutMs, retriesPerHost, retryDelayMs, stickyWindowMs } = getConfig().request;\n\n\tconst sticky = transportState();\n\n\t// Passou a janela de fixação? Volta a começar pelo primário.\n\t// `>=` para que stickyWindowMs: 0 signifique \"não fixar em host nenhum\".\n\tif (sticky.activeIndex !== 0 && Date.now() - sticky.pinnedAt >= stickyWindowMs) {\n\t\tsticky.activeIndex = 0;\n\t}\n\n\tlet lastError: unknown = null;\n\n\tfor (const index of rotateFrom(sticky.activeIndex, hosts.length)) {\n\t\tconst target = withHost(url, hosts[index]);\n\n\t\tfor (let attempt = 0; attempt < retriesPerHost; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(target, {\n\t\t\t\t\t...init,\n\t\t\t\t\tsignal: attemptSignal(timeoutMs, init?.signal)\n\t\t\t\t});\n\n\t\t\t\t// 5xx é problema do host — vale tentar de novo e, depois, trocar.\n\t\t\t\tif (response.status >= 500) {\n\t\t\t\t\tlastError = new Error(`HTTP ${response.status} em ${hosts[index]}`);\n\t\t\t\t\tif (attempt < retriesPerHost - 1) await sleep(retryDelayMs);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Respondeu (2xx, 3xx ou 4xx): o host está vivo.\n\t\t\t\tsticky.activeIndex = index;\n\t\t\t\tsticky.pinnedAt = Date.now();\n\t\t\t\treturn response;\n\t\t\t} catch (err) {\n\t\t\t\tlastError = err;\n\t\t\t\tif (attempt < retriesPerHost - 1) await sleep(retryDelayMs);\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new SevnNetworkError(url, lastError);\n};\n\n/** Host que respondeu por último. Útil para diagnóstico. */\nexport function activeHost(): string | null {\n\treturn getConfig().apiHosts[transportState().activeIndex] ?? null;\n}\n\n/** Só para testes. */\nexport function resetTransport(): void {\n\tconst sticky = transportState();\n\tsticky.activeIndex = 0;\n\tsticky.pinnedAt = 0;\n}\n","import { RequestCache, type StorageLike } from '@sevn/reqcache';\nimport { getConfig, requireApiHosts } from '$core/config';\nimport { citiesIndexUrl } from '$core/assets';\nimport { sevnFetch } from '$core/transport';\nimport type {\n\tCitiesIndex,\n\tCountingProgress,\n\tElectionOffice,\n\tElectionResults,\n\tHeadToHeadLiveTimeline,\n\tLegislativeOffice,\n\tMunicipalitiesList,\n\tMunicipalityResults,\n\tResultsByParty,\n\tResultsComparison,\n\tResultsTimeline,\n\tStateResults,\n} from './types';\n\nconst TTL_DEFAULT = 5 * 60;\nconst TTL_STATIC = 60 * 60;\n\nconst memoryStore = new Map<string, string>();\n\nfunction isLocalStorageAvailable(): boolean {\n\ttry {\n\t\treturn typeof window !== 'undefined' && typeof localStorage !== 'undefined';\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nconst storage: StorageLike = {\n\tgetItem(key) {\n\t\tif (isLocalStorageAvailable()) return localStorage.getItem(key);\n\t\treturn memoryStore.get(key) ?? null;\n\t},\n\tsetItem(key, value) {\n\t\tif (isLocalStorageAvailable()) {\n\t\t\ttry {\n\t\t\t\tlocalStorage.setItem(key, value);\n\t\t\t} catch {\n\t\t\t\tconsole.warn('[api] Cota do localStorage excedida, ignorando escrita');\n\t\t\t}\n\t\t} else {\n\t\t\tmemoryStore.set(key, value);\n\t\t}\n\t},\n\tremoveItem(key) {\n\t\tif (isLocalStorageAvailable()) localStorage.removeItem(key);\n\t\telse memoryStore.delete(key);\n },\n};\n\n// Criado sob demanda: o Core pode ser reconfigurado depois do import do módulo\n// (é o caso do UMD, que só lê a chave quando a tag <script> executa).\nlet cache: RequestCache | null = null;\n\nfunction getCache(): RequestCache {\n\tif (!cache) {\n\t\tconst { storageKey, maxEntries } = getConfig().cache;\n\t\tcache = new RequestCache({ storage, storageKey, maxEntries });\n\t}\n\treturn cache;\n}\n\n/** Descarta a instância de cache — usado quando a configuração muda. */\nexport function resetCache(): void {\n\tcache = null;\n}\n\nasync function get<T>(\n\tpath: string,\n\tparams?: Record<string, string | number | null | undefined>,\n\tttlSeconds = TTL_DEFAULT,\n\tmonotonicKey?: string\n): Promise<T> {\n\t// A URL canônica aponta sempre para o host primário porque ela é a CHAVE do\n\t// cache. Quem troca de host em caso de falha é o sevnFetch — assim o dado\n\t// tem uma entrada só, independente de qual host acabou respondendo.\n\tconst [primaryHost] = requireApiHosts();\n\tconst cleanPath = path.replace(/^\\/+/, '');\n\tconst url = new URL(cleanPath, `${primaryHost.replace(/\\/+$/, '')}/`);\n\n\tif (params) {\n\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\tif (value !== null && value !== undefined) {\n\t\t\t\turl.searchParams.set(key, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet data: T;\n\ttry {\n\t\tdata = await getCache().getFetch<T>(url.toString(), ttlSeconds * 1000, {\n\t\t\tmonotonicKey,\n\t\t\tfetcher: sevnFetch\n\t\t});\n\t} catch (err) {\n\t\t// Alguns recortes (ex.: 2º turno de presidente, que nem começou ainda)\n\t\t// simplesmente não existem no CDN — 404 puro, sem o stub published:false\n\t\t// que os outros recortes têm. Pro usuário é a mesma coisa: dado ainda não\n\t\t// disponível. Normaliza aqui pra não vazar \"HTTP 404 ao buscar <url>\" na tela.\n\t\tif (err instanceof Error && /^HTTP 404 /.test(err.message)) {\n\t\t\tthrow new Error('Dados ainda não publicados');\n\t\t}\n\t\tthrow err;\n\t}\n\n\t// CDN novo: rota válida sem publicação vem como HTTP 200 com published:false.\n\t// Trata como erro pra reaproveitar o try/catch que já existe em cada componente.\n\tif (data && typeof data === 'object' && (data as { published?: boolean }).published === false) {\n\t\tthrow new Error((data as { reason?: string }).reason ?? 'Dados ainda não publicados');\n\t}\n\n\treturn data;\n}\n\n// ── Reference ─────────────────────────────────────────────────────────────────\n\nexport function getMunicipalities(state: string): Promise<MunicipalitiesList> {\n\treturn get(`v1/reference/municipalities/${state.toUpperCase()}.json`, undefined, TTL_STATIC);\n}\n\n// Dado de referência, igual para todo cliente: mora na CDN estática\n// compartilhada, não na API do cliente. Por isso não passa pelo get() nem pelo\n// sevnFetch, que reescreveriam a origem para os hosts da API.\nexport function getCitiesIndex(): Promise<CitiesIndex> {\n\treturn getCache().getFetch<CitiesIndex>(citiesIndexUrl(), TTL_STATIC * 1000);\n}\n\n// ── Main results ──────────────────────────────────────────────────────────────\n\nexport function getElectionResults(\n\tyear: number,\n\toptions?: {\n\t\tround?: number;\n\t\tstate?: string;\n\t\toffice?: ElectionOffice;\n\t\tmunicipalityId?: number;\n\t}\n): Promise<ElectionResults> {\n\tconst round = options?.round ?? 1;\n\tconst office = options?.office ?? 'president';\n\n\tlet scope = 'br';\n\tif (options?.municipalityId) {\n\t\tscope = `mun/${options.municipalityId}`;\n\t} else if (options?.state) {\n\t\tscope = `uf/${options.state.toUpperCase()}`;\n\t}\n\n\treturn get(\n\t\t`v1/elections/${year}/r${round}/${office}/${scope}/results.json`,\n\t\tundefined,\n\t\tTTL_DEFAULT,\n\t\t'summary.ballots_counted'\n\t);\n}\n\nexport function getStateResults(\n\tyear: number,\n\toffice: 'president' | 'governor',\n\tround: number\n): Promise<StateResults> {\n\treturn get(`v1/elections/${year}/r${round}/${office}/by-state.json`);\n}\n\nexport function getMunicipalityResults(\n\tyear: number,\n\toffice: 'president' | 'governor' | 'senator',\n\tround: number,\n\tstate: string\n): Promise<MunicipalityResults> {\n\treturn get(`v1/elections/${year}/r${round}/${office}/uf/${state.toUpperCase()}/by-municipality.json`);\n}\n\nexport function getResultsComparison(\n\tyear: number,\n\toffice: 'president' | 'governor',\n\toptions?: { state?: string; municipalityId?: number }\n): Promise<ResultsComparison> {\n\tconst scope = options?.state ? `uf/${options.state.toUpperCase()}` : 'br';\n\n\treturn get(`v1/elections/${year}/${office}/${scope}/comparison.json`);\n}\n\nexport function getResultsTimeline(\n\tyear: number,\n\toffice: 'president' | 'governor',\n\tround: number,\n\tstate?: string\n): Promise<ResultsTimeline> {\n\tconst scope = state ? `uf/${state.toUpperCase()}` : 'br';\n\n\treturn get(`v1/elections/${year}/r${round}/${office}/${scope}/timeline.json`);\n}\n\nexport function getHeadToHeadLiveTimeline(\n\tyear: number,\n\toffice: 'president' | 'governor',\n\tround: number,\n\tstate?: string\n): Promise<HeadToHeadLiveTimeline> {\n\tconst scope = state ? `uf/${state.toUpperCase()}` : 'br';\n\n\treturn get(`v1/elections/${year}/r${round}/${office}/${scope}/head-to-head.json`);\n}\n\nexport function getCountingProgress(\n\tyear: number,\n\tround: number,\n\tstate?: string\n): Promise<CountingProgress> {\n\tconst scope = state ? `uf/${state.toUpperCase()}` : 'br';\n\n\treturn get(\n\t\t`v1/elections/${year}/r${round}/counting-progress/${scope}.json`,\n\t\tundefined,\n\t\tTTL_DEFAULT,\n\t\t'totals.ballots_counted'\n\t);\n}\n\nexport function getResultsByParty(\n\tyear: number,\n\toffice: LegislativeOffice,\n\tround: number,\n\tstate: string\n): Promise<ResultsByParty> {\n\treturn get(`v1/elections/${year}/r${round}/${office}/uf/${state.toUpperCase()}/by-party.json`);\n}\n","<script lang=\"ts\">\n import type { VoteComparisonByRoundProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Autocomplete, FilterDropdown, CandidateVoteComparison } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getResultsComparison } from '$services/api';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, defaultOffice = 'president', header = {\n title: 'Comparação de votos entre 1º e 2º turno',\n description: 'Veja o resultado por estado',\n tag: '2º TURNO',\n tagColor: 'var(--sevn-color-blue, #3b82f6)'\n } }: VoteComparisonByRoundProps = $props();\n\n // Presidente e governador têm o mesmo formato de comparison.json — troca por\n // select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n let data = $state<any>(null);\n\n const ufs = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ].sort((a, b) => a.label.localeCompare(b.label));\n\n let selectedUf = $state<string | null>(null);\n\n const mockComparisonData = {\n rounds: [\n {\n label: '1º Turno',\n candidatos: [\n { name: 'Candidato A', tag: 'ABC', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', percent: 26.54, color: '#8faa96' },\n { name: 'Candidato B', tag: 'DEF', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', percent: 34.38, color: '#c8b97a' },\n ],\n },\n {\n label: '2º Turno',\n candidatos: [\n { name: 'Candidato A', tag: 'ABC', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', percent: 53.73, color: 'var(--sevn-color-primary)' },\n { name: 'Candidato B', tag: 'DEF', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', percent: 46.27, color: 'var(--sevn-color-secondary)' },\n ],\n },\n ],\n };\n\n // round_2 vem sempre presente no comparison.json, mas zerado (votes:0) até o\n // 2º turno de fato acontecer (semanas depois do 1º) — não é \"resultado real\n // de 0%\", é \"ainda não aconteceu\". Só mostra o bloco de 2º turno quando ao\n // menos um candidato tem voto real ali.\n const round2HasData = $derived(\n !!data?.candidates && data.candidates.some((c: any) => c.round_2?.votes > 0)\n );\n\n const comparisonData = $derived.by(() => {\n if (mock) return mockComparisonData;\n if (!selectedUf || !data?.candidates || !Array.isArray(data.candidates)) return null;\n\n const mapRound = (key: 'round_1' | 'round_2') =>\n data.candidates.map((candidate: any) => ({\n name: toTitleCase(candidate.name),\n photoUrl: candidate.photo_url,\n tag: candidate.party_abbr,\n avatar: 'man',\n avatarColor: candidate.party_color,\n percent: candidate[key]?.valid_votes_pct || 0,\n color: candidate.party_color,\n }));\n\n const rounds = [{ label: '1º Turno', candidatos: mapRound('round_1') }];\n if (round2HasData) {\n rounds.push({ label: '2º Turno', candidatos: mapRound('round_2') });\n }\n return { rounds };\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(data?.last_updated)\n );\n\n $effect(() => {\n if (selectedUf && selectedOffice && !mock) {\n fetchComparisonData(selectedUf, officeMap[selectedOffice] || 'governor');\n } else if (!selectedUf) {\n data = null;\n }\n });\n\n async function fetchComparisonData(state: string, office: 'president' | 'governor') {\n try {\n const result = await getResultsComparison(2026, office, { state });\n data = result;\n } catch (error) {\n console.error('Erro ao buscar dados de comparação:', error);\n }\n }\n</script>\n\n<div class=\"sevn_vote_comparison_by_round\" class:sevn_vote_comparison_by_round--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if !mock}\n <div class=\"sevn_vote_comparison_by_round__filter-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_vote_comparison_by_round__filter-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n {/if}\n\n {#if mock || selectedOffice}\n <div class=\"sevn_vote_comparison_by_round__search\">\n <Autocomplete\n label={selectedUf ? 'Você selecionou:' : 'Busque por estado'}\n options={ufs}\n bind:value={selectedUf}\n />\n </div>\n\n {#if selectedUf}\n <div class=\"sevn_vote_comparison_by_round__vote_comparison\">\n {#if comparisonData}\n <CandidateVoteComparison\n data={comparisonData}\n updatedAt={lastUpdate}\n />\n {#if !mock && !round2HasData}\n <p class=\"sevn_vote_comparison_by_round__status\">2º turno ainda não apurado para este estado.</p>\n {/if}\n {:else}\n <p class=\"sevn_vote_comparison_by_round__status\">Resultado ainda não publicado para este estado.</p>\n {/if}\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_vote_comparison_by_round {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_vote_comparison_by_round__filter-web {\n display: none;\n }\n\n .sevn_vote_comparison_by_round__filter-mobile {\n display: block;\n width: 220px;\n }\n\n .sevn_vote_comparison_by_round__search {\n width: 100%;\n }\n\n @media (min-width: 768px) {\n .sevn_vote_comparison_by_round__filter-web {\n display: block;\n }\n\n .sevn_vote_comparison_by_round__filter-mobile {\n display: none;\n }\n }\n\n .sevn_vote_comparison_by_round__vote_comparison {\n margin-top: 10px;\n }\n\n .sevn_vote_comparison_by_round__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n margin: 0;\n }\n\n @media (max-width: 767px) {\n .sevn_vote_comparison_by_round__search :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n\n .sevn_vote_comparison_by_round--raw,\n .sevn_vote_comparison_by_round--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { CountingProgressProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Autocomplete, FilterDropdown, Map, MapLegend, LeadershipMoment } from '$lib';\n import type { HeaderProps } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n import { getStateResults } from '$services/api';\n import type { StateResults } from '$services/types';\n import { browser } from '$core/env';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, year = 2026, defaultOffice = 'president', header = {\n title: 'Progresso da Apuração',\n description: 'Explore o mapa e analise o status de contagem por região',\n tagColor: 'var(--sevn-color-tertiary, #1a1a2e)'\n } }: CountingProgressProps = $props();\n\n // Presidente e governador têm dado no mesmo formato (by-state) — troca por\n // select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n let stateResults: StateResults | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n $effect(() => {\n if (!browser || mock) return;\n // Sem cargo (inclusive depois de limpar o filtro) zera o resultado — senão\n // fica na tela o dado do cargo anterior.\n if (!selectedOffice) {\n stateResults = null;\n countingProgress = null;\n return;\n }\n\n const office = officeMap[selectedOffice] || 'president';\n loading = true;\n error = null;\n stateResults = null;\n\n getStateResults(year, office, 1)\n .then((stateData: StateResults) => {\n stateResults = stateData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch results:', err);\n error = err instanceof Error ? err.message : 'Não foi possível carregar os resultados.';\n loading = false;\n });\n });\n\n const PROGRESS_COLORS = {\n full: '#1a1a2e',\n high: '#4a5568',\n mid: '#718096',\n low: '#cbd5e0',\n };\n\n const legendSegments = [\n { label: '0 - 25%', color: PROGRESS_COLORS.low },\n { label: '26 - 60%', color: PROGRESS_COLORS.mid },\n { label: '61 - 99%', color: PROGRESS_COLORS.high },\n { label: '100%', color: PROGRESS_COLORS.full },\n ];\n\n const mockStateProgress = {\n ac: 'low', al: 'low', am: 'mid', ap: 'low', ba: 'high',\n ce: 'high', df: 'low', es: 'high', go: 'high', ma: 'mid',\n mg: 'full', ms: 'high', mt: 'mid', pa: 'mid', pb: 'mid',\n pe: 'high', pi: 'low', pr: 'full', rj: 'full', rn: 'mid',\n ro: 'low', rr: 'low', rs: 'full', sc: 'full', se: 'low',\n sp: 'full', to: 'low',\n };\n\n function getProgressBucket(pct: number): 'low' | 'mid' | 'high' | 'full' {\n if (pct === 100) return 'full';\n if (pct >= 61) return 'high';\n if (pct >= 26) return 'mid';\n return 'low';\n }\n\n // Quando mock===false, nunca cai no fixo — se `stateResults` vier vazio\n // (falha total no fetch, ou API ainda sem publicação), o mapa fica neutro\n // (array vazio) em vez de fingir os buckets do mock.\n //\n // Usa `ballots_counted_pct` do by-state.json (que já buscamos pra liderança)\n // em vez do counting-progress nacional: o escopo \"br\" desse endpoint só\n // devolve totais agregados do país (sem quebra por estado — `regions` nem\n // existe nesse payload), então colorir o mapa a partir dele sempre resultava\n // num array vazio e o mapa ficava neutro em produção.\n const stateProgress = $derived.by(() => {\n if (mock) return mockStateProgress;\n return Object.fromEntries(\n (stateResults?.states ?? []).map((state: any) => [\n state.state.toLowerCase(),\n getProgressBucket(state.ballots_counted_pct),\n ])\n );\n });\n\n const mapColors = $derived.by(() =>\n Object.entries(stateProgress).map(([id, level]: [string, string]) => ({\n id,\n color: PROGRESS_COLORS[level as keyof typeof PROGRESS_COLORS],\n }))\n );\n\n const ufs = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ].sort((a, b) => a.label.localeCompare(b.label));\n\n function getStateName(uf) {\n return ufs.find(u => u.value === uf)?.label?.replace(/\\s+[A-Z]{2}$/, '') ?? uf.toUpperCase();\n }\n\n const leadershipOverrides = {\n mg: [\n { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', description: '41,8% dos votos válidos', position: '1º Lugar' },\n { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', description: '36,4% dos votos válidos', position: '2º Lugar' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#3b82f6', avatar: 'man', avatarColor: '#3b82f6', description: '21,8% dos votos válidos', position: '3º Lugar' },\n ],\n sp: [\n { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', description: '54,1% dos votos válidos', position: '1º Lugar' },\n { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', description: '43,1% dos votos válidos', position: '2º Lugar' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#3b82f6', avatar: 'man', avatarColor: '#3b82f6', description: '1,1% dos votos válidos', position: '3º Lugar' },\n ],\n rj: [\n { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', description: '50,8% dos votos válidos', position: '1º Lugar' },\n { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', description: '46,3% dos votos válidos', position: '2º Lugar' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#3b82f6', avatar: 'man', avatarColor: '#3b82f6', description: '1,8% dos votos válidos', position: '3º Lugar' },\n ],\n rs: [\n { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', description: '53,6% dos votos válidos', position: '1º Lugar' },\n { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', description: '43,8% dos votos válidos', position: '2º Lugar' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#3b82f6', avatar: 'man', avatarColor: '#3b82f6', description: '1,4% dos votos válidos', position: '3º Lugar' },\n ],\n };\n\n function getLeadershipData(uf) {\n if (leadershipOverrides[uf]) return leadershipOverrides[uf];\n const v = uf.charCodeAt(0) * 7 + uf.charCodeAt(1) * 3;\n const aFirst = v % 2 === 0;\n const aP = aFirst ? (42 + v % 14).toFixed(1) : (33 + v % 10).toFixed(1);\n const bP = aFirst ? (35 + v % 8).toFixed(1) : (44 + v % 12).toFixed(1);\n const cP = (100 - parseFloat(aP) - parseFloat(bP)).toFixed(1);\n const first = aFirst\n ? { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatarColor: 'var(--sevn-color-primary)', pct: aP }\n : { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatarColor: 'var(--sevn-color-secondary)', pct: bP };\n const second = aFirst\n ? { name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatarColor: 'var(--sevn-color-secondary)', pct: bP }\n : { name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatarColor: 'var(--sevn-color-primary)', pct: aP };\n return [\n { ...first, avatar: 'man', description: `${first.pct}% dos votos válidos`, position: '1º Lugar' },\n { ...second, avatar: 'man', description: `${second.pct}% dos votos válidos`, position: '2º Lugar' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#3b82f6', avatar: 'man', avatarColor: '#3b82f6', description: `${cP}% dos votos válidos`, position: '3º Lugar' },\n ];\n }\n\n let selectedUf = $state<string | null>(null);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedUf = $state<string | null>(null);\n\n // Autocomplete também escreve em pinnedUf agora — precisam contar como \"dentro\"\n // pro clique de escolher o estado não disparar o handleOutsideClick e se autoanular.\n let searchWebEl = $state<HTMLDivElement | null>(null);\n let searchMobileEl = $state<HTMLDivElement | null>(null);\n\n const displayUf = $derived(pinnedUf ?? selectedUf);\n\n const selectedStateData = $derived(\n displayUf && stateResults?.states && Array.isArray(stateResults.states)\n ? stateResults.states.find((s: any) => s.state.toLowerCase() === displayUf)\n : null\n );\n\n const selectedStateName = $derived(displayUf ? getStateName(displayUf) : null);\n\n const selectedLeadership = $derived.by(() => {\n if (!displayUf) return [];\n if (mock) return getLeadershipData(displayUf);\n if (selectedStateData?.leader && selectedStateData?.runner_up) {\n return [\n {\n name: toTitleCase(selectedStateData.leader.name),\n photoUrl: selectedStateData.leader.photo_url,\n tag: selectedStateData.leader.party_abbr,\n tagColor: selectedStateData.leader.party_color,\n avatar: 'man',\n avatarColor: selectedStateData.leader.party_color,\n description: `${selectedStateData.leader.valid_votes_pct}% dos votos válidos`,\n position: '1º Lugar',\n },\n {\n name: toTitleCase(selectedStateData.runner_up.name),\n photoUrl: selectedStateData.runner_up.photo_url,\n tag: selectedStateData.runner_up.party_abbr,\n tagColor: selectedStateData.runner_up.party_color,\n avatar: 'man',\n avatarColor: selectedStateData.runner_up.party_color,\n description: `${selectedStateData.runner_up.valid_votes_pct}% dos votos válidos`,\n position: '2º Lugar',\n },\n ];\n }\n // Dado real ausente para este estado especificamente (API ainda não publicou este recorte):\n // não cai no mock, deixa lista vazia para o template mostrar aviso honesto.\n return [];\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(stateResults?.last_updated)\n );\n\n function handleRegionHover(info) {\n selectedUf = info.cid;\n }\n\n function handleRegionClick(info: { cid: string }) {\n pinnedUf = pinnedUf === info.cid ? null : info.cid;\n }\n\n $effect(() => {\n if (!pinnedUf) return;\n\n function handleOutsideClick(e: MouseEvent) {\n const target = e.target as Node;\n const insideMap = mapWebEl?.contains(target);\n const insideSearch = searchWebEl?.contains(target) || searchMobileEl?.contains(target);\n if (!insideMap && !insideSearch) {\n pinnedUf = null;\n }\n }\n\n // Adia o registro pro próximo tick: o Autocomplete fecha o dropdown (unmount)\n // no mesmo clique que seleciona, e registrar o listener na hora fazia ele\n // disparar pro próprio clique que acabou de setar pinnedUf, zerando na hora.\n const timer = setTimeout(() => {\n document.addEventListener('click', handleOutsideClick);\n }, 0);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('click', handleOutsideClick);\n };\n });\n</script>\n\n<div class=\"sevn_counting_progress\" class:sevn_counting_progress--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_counting_progress__office-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_counting_progress__office-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n\n {#if mock || selectedOffice}\n {#if loading}\n <p class=\"sevn_counting_progress__empty-label\">Carregando...</p>\n {:else if error}\n <p class=\"sevn_counting_progress__empty-label sevn_counting_progress__empty-label--error\">{error}</p>\n {:else}\n <div class=\"sevn_counting_progress__search-web\" bind:this={searchWebEl}>\n <Autocomplete\n label=\"Busque por estado ou interaja com o mapa\"\n options={ufs}\n bind:value={pinnedUf}\n />\n </div>\n\n <div class=\"sevn_counting_progress__body-web\">\n <div class=\"sevn_counting_progress__map-col\" bind:this={mapWebEl} onmouseleave={() => selectedUf = null} role=\"presentation\">\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n selected={displayUf}\n selectionStroke=\"#da00008c\"\n selectionStrokeWidth={7}\n toggleSelection\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n <div class=\"sevn_counting_progress__legend\">\n <MapLegend\n title=\"Porcentagem das urnas apuradas:\"\n segments={legendSegments}\n />\n </div>\n </div>\n\n <div class=\"sevn_counting_progress__info-col\">\n {#if displayUf && selectedStateName}\n <p class=\"sevn_counting_progress__selected-label\">\n Você selecionou: <strong>{selectedStateName}</strong>\n </p>\n {#if selectedLeadership.length > 0}\n <LeadershipMoment\n candidates={selectedLeadership}\n date={lastUpdate}\n font=\"TSE\"\n />\n {:else}\n <p class=\"sevn_counting_progress__empty-label\">\n Resultado ainda não publicado para {selectedStateName}.\n </p>\n {/if}\n {:else}\n <p class=\"sevn_counting_progress__empty-label\">\n Clique em um estado no mapa para ver a liderança\n </p>\n {/if}\n </div>\n </div>\n\n <div class=\"sevn_counting_progress__mobile-section\">\n <p class=\"sevn_counting_progress__overview-label\">Visão geral:</p>\n \n <div class=\"sevn_counting_progress__map-mobile\">\n <Map type=\"brazil-states\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_counting_progress__legend\">\n <MapLegend\n title=\"Porcentagem das urnas apuradas:\"\n segments={legendSegments}\n />\n </div>\n\n <div class=\"sevn_counting_progress__search-mobile\" bind:this={searchMobileEl}>\n <Autocomplete\n label={pinnedUf ? 'Você selecionou:' : 'Busque por estado e veja a liderança atual:'}\n options={ufs}\n bind:value={pinnedUf}\n />\n </div>\n\n {#if pinnedUf}\n {#if selectedLeadership.length > 0}\n <LeadershipMoment\n candidates={selectedLeadership}\n date={lastUpdate}\n font=\"TSE\"\n />\n {:else}\n <p class=\"sevn_counting_progress__empty-label\">\n Resultado ainda não publicado para {selectedStateName}.\n </p>\n {/if}\n {/if}\n\n </div>\n {/if}\n {/if}\n\n</div>\n\n<style>\n .sevn_counting_progress {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n /* ── Search ─────────────────────────────────────────── */\n .sevn_counting_progress__search-web { display: none; }\n .sevn_counting_progress__search-mobile { width: 100%; margin-top: 10px; }\n\n /* ── Mobile section ─────────────────────────────────── */\n .sevn_counting_progress__mobile-section {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .sevn_counting_progress__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_counting_progress__empty-label {\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n margin: 0;\n opacity: 0.5;\n }\n\n .sevn_counting_progress__empty-label--error {\n color: #e11d48;\n opacity: 1;\n }\n\n .sevn_counting_progress__office-web {\n display: none;\n }\n\n .sevn_counting_progress__office-mobile {\n display: block;\n width: 220px;\n }\n\n @media (min-width: 768px) {\n .sevn_counting_progress__office-web {\n display: block;\n }\n\n .sevn_counting_progress__office-mobile {\n display: none;\n }\n }\n\n .sevn_counting_progress__map-mobile {\n width: 100%;\n }\n\n /* ── Web body ───────────────────────────────────────── */\n .sevn_counting_progress__body-web { display: none; }\n\n /* ── Legend ─────────────────────────────────────────── */\n .sevn_counting_progress__legend {\n margin-top: 12px;\n }\n\n /* ── Search mobile dropdown ─────────────────────────── */\n @media (max-width: 767px) {\n .sevn_counting_progress__search-mobile :global(.dropdown),\n .sevn_counting_progress__office-mobile :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n\n /* ── Desktop ────────────────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_counting_progress__search-web { display: block; }\n .sevn_counting_progress__mobile-section { display: none; }\n .sevn_counting_progress__body-web {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 60px;\n align-items: start;\n }\n\n .sevn_counting_progress__map-col {\n display: flex;\n flex-direction: column;\n }\n\n .sevn_counting_progress__info-col {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding-top: 8px;\n }\n\n .sevn_counting_progress__selected-label {\n font-size: 0.875rem;\n color: var(--sevn-color-tertiary);\n margin: 0;\n opacity: 0.7;\n }\n }\n\n /* ── Raw ────────────────────────────────────────────── */\n .sevn_counting_progress--raw,\n .sevn_counting_progress--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { StateLeadersProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Map, Tag, TableCandidate, Autocomplete, FilterDropdown, VoteOverview } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getElectionResults, getStateResults } from '$services/api';\n import type { StateResults } from '$services/types';\n import { browser } from '$core/env';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n defaultOffice = 'president',\n header = {\n title: 'Veja quem lidera em cada estado',\n description: 'As cores no mapa representam o partido que está em primeiro lugar no momento',\n tag: 'VISÃO NACIONAL',\n tagColor: 'var(--sevn-color-tertiary, #1a1a2e)'\n }\n }: StateLeadersProps = $props();\n\n // Presidente e governador têm dado no mesmo formato (by-state) — troca por\n // select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n let data: StateResults | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n $effect(() => {\n if (!browser || mock) return;\n // Sem cargo (inclusive depois de limpar o filtro) zera o resultado — senão\n // fica na tela o dado do cargo anterior.\n if (!selectedOffice) {\n data = null;\n return;\n }\n\n const office = officeMap[selectedOffice] || 'president';\n loading = true;\n error = null;\n data = null;\n\n getStateResults(year, office, 1)\n .then((fetchedData: StateResults) => {\n data = fetchedData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch state results:', err);\n error = err instanceof Error ? err.message : 'Não foi possível carregar os resultados.';\n loading = false;\n });\n });\n\n const PARTIES = [\n { party: 'ABC', color: 'var(--sevn-color-primary)' },\n { party: 'DEF', color: 'var(--sevn-color-secondary)' },\n { party: 'GHI', color: '#1e4d6b' },\n { party: 'JKL', color: '#0f172a' },\n { party: 'MNO', color: '#16a34a' },\n { party: 'PQR', color: '#e11d48' },\n ];\n\n const partyColorMap = Object.fromEntries(PARTIES.map(p => [p.party, p.color]));\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n // Visão nacional: só existe pra presidente — governador é eleição por estado,\n // não tem um \"br/results.json\" agregado (backend não publica esse recorte\n // pra governador). Fora do presidente, não busca e escondemos o bloco.\n let summaryData = $state<any>(null);\n\n const showNationalOverview = $derived(mock || officeMap[selectedOffice] === 'president');\n\n $effect(() => {\n if (!browser || mock || !selectedOffice) return;\n const office = officeMap[selectedOffice] || 'president';\n if (office !== 'president') {\n summaryData = null;\n return;\n }\n getElectionResults(year, { office, round: 1 })\n .then((res: any) => { summaryData = res?.summary ?? null; })\n .catch((err: unknown) => { console.error('Failed to fetch national summary:', err); });\n });\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!summaryData) return [];\n const { total_valid_votes, null_votes, blank_votes } = summaryData;\n const total = total_valid_votes + null_votes + blank_votes;\n if (!total) return []; // resumo nacional ainda zerado (ex.: results.json br fora de sincronia)\n return [\n { text: 'Nulos', value: `${((null_votes / total) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / total) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${total_valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const overviewDate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(summaryData?.last_updated)\n );\n\n const stateLeader = {\n ac: 'PQR', al: 'ABC', am: 'ABC', ap: 'GHI', ba: 'ABC',\n ce: 'GHI', df: 'JKL', es: 'GHI', go: 'DEF', ma: 'DEF',\n mg: 'GHI', ms: 'DEF', mt: 'DEF', pa: 'GHI', pb: 'JKL',\n pe: 'GHI', pi: 'ABC', pr: 'DEF', rj: 'ABC', rn: 'MNO',\n ro: 'DEF', rr: 'PQR', rs: 'JKL', sc: 'JKL', se: 'ABC',\n sp: 'ABC', to: 'DEF',\n };\n\n const mapColors = $derived.by(() => {\n if (mock) {\n return Object.entries(stateLeader).map(([id, party]) => ({\n id,\n color: partyColorMap[party],\n }));\n }\n // Sem mock: só colore estados com líder real publicado. Se `data` falhar\n // por inteiro ou faltar líder pra um estado específico, esse estado fica\n // com o preenchimento neutro padrão do mapa em vez de herdar o mock.\n return (data?.states ?? [])\n .filter((/** @type {any} */ s) => s.leader?.party_color)\n .map((/** @type {any} */ s) => ({\n id: s.state.toLowerCase(),\n color: s.leader.party_color,\n }));\n });\n\n const parties = $derived.by(() => {\n if (!mock && data?.states) {\n const seen = new Set();\n const result = [];\n for (const s of /** @type {any[]} */ (data.states)) {\n const abbr = s.leader?.party_abbr;\n if (abbr && !seen.has(abbr)) {\n seen.add(abbr);\n result.push({ party: abbr, color: s.leader.party_color });\n }\n }\n return result.sort((a, b) => a.party.localeCompare(b.party, 'pt-BR'));\n }\n return PARTIES;\n });\n\n const ufs = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ].sort((a, b) => a.label.localeCompare(b.label));\n\n function getStateName(uf) {\n return ufs.find(u => u.value === uf)?.label?.replace(/\\s+[A-Z]{2}$/, '') ?? uf.toUpperCase();\n }\n\n const CAND_A_COLOR = 'var(--sevn-color-primary)';\n const CAND_B_COLOR = 'var(--sevn-color-secondary)';\n\n const stateOverrides = {\n sp: [\n { name: 'Candidato A', party: 'ABC', percentage: 54.1, votes: 1728159, color: CAND_A_COLOR, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 43.1, votes: 1377441, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 1.1, votes: 35623, color: '#1e4d6b' },\n { name: 'Candidato D', party: 'JKL', percentage: 0.7, votes: 21439, color: '#0f172a' },\n { name: 'Candidato E', party: 'MNO', percentage: 0.5, votes: 17344, color: '#16a34a' },\n { name: 'Candidato F', party: 'PQR', percentage: 0.2, votes: 5149, color: '#e11d48' },\n ],\n mg: [\n { name: 'Candidato C', party: 'GHI', percentage: 41.8, votes: 1832400, color: '#1e4d6b', elected: true },\n { name: 'Candidato A', party: 'ABC', percentage: 36.4, votes: 1595680, color: CAND_A_COLOR },\n { name: 'Candidato B', party: 'DEF', percentage: 14.2, votes: 622480, color: CAND_B_COLOR },\n { name: 'Candidato D', party: 'JKL', percentage: 4.6, votes: 201640, color: '#0f172a' },\n { name: 'Candidato E', party: 'MNO', percentage: 3.0, votes: 131490, color: '#16a34a' },\n ],\n rj: [\n { name: 'Candidato A', party: 'ABC', percentage: 50.8, votes: 1200450, color: CAND_A_COLOR, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 33.4, votes: 789230, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 9.6, votes: 226840, color: '#1e4d6b' },\n { name: 'Candidato F', party: 'PQR', percentage: 4.2, votes: 99246, color: '#e11d48' },\n { name: 'Candidato E', party: 'MNO', percentage: 2.0, votes: 47245, color: '#16a34a' },\n ],\n rs: [\n { name: 'Candidato D', party: 'JKL', percentage: 53.6, votes: 1580120, color: '#0f172a', elected: true },\n { name: 'Candidato A', party: 'ABC', percentage: 28.4, votes: 837580, color: CAND_A_COLOR },\n { name: 'Candidato B', party: 'DEF', percentage: 12.8, votes: 377560, color: CAND_B_COLOR },\n { name: 'Candidato C', party: 'GHI', percentage: 5.2, votes: 153340, color: '#1e4d6b' },\n ],\n };\n\n function getStateData(uf) {\n if (stateOverrides[uf]) return stateOverrides[uf];\n const v = uf.charCodeAt(0) * 7 + uf.charCodeAt(1) * 3;\n const leader = stateLeader[uf];\n const leaderColor = partyColorMap[leader];\n const leaderP = 38 + (v % 18);\n const secondP = 24 + (v % 10);\n const thirdP = Math.max(5, 100 - leaderP - secondP - 15);\n const others = 100 - leaderP - secondP - thirdP;\n const total = 300000 + v * 6000;\n const parties = PARTIES.filter(p => p.party !== leader);\n const [s1, s2, s3, s4, s5] = parties;\n return [\n { name: `Candidato ${leader}`, party: leader, percentage: leaderP, votes: Math.round(total * leaderP / 100), color: leaderColor, elected: true },\n { name: `Candidato ${s1.party}`, party: s1.party, percentage: secondP, votes: Math.round(total * secondP / 100), color: s1.color },\n { name: `Candidato ${s2.party}`, party: s2.party, percentage: thirdP, votes: Math.round(total * thirdP / 100), color: s2.color },\n { name: `Candidato ${s3.party}`, party: s3.party, percentage: Math.round(others * 0.5), votes: Math.round(total * others * 0.5 / 100), color: s3.color },\n { name: `Candidato ${s4.party}`, party: s4.party, percentage: Math.round(others * 0.3), votes: Math.round(total * others * 0.3 / 100), color: s4.color },\n { name: `Candidato ${s5.party}`, party: s5.party, percentage: Math.round(others * 0.2), votes: Math.round(total * others * 0.2 / 100), color: s5.color },\n ];\n }\n\n let selectedUf = $state(/** @type {string|null} */ (null));\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedUf = $state<string | null>(null);\n let pinnedX = $state(0);\n let pinnedY = $state(0);\n\n const displayUf = $derived(pinnedUf ?? selectedUf);\n // `data` só publica parte dos estados por vez; quando o estado passado no mouse\n // não está em `data.states` ainda, mostra isso honestamente em vez de inventar\n // candidatos (getStateData só é usado quando mock===true, de propósito).\n const selectedData = $derived.by(() => {\n if (!displayUf) return [];\n if (mock) return getStateData(displayUf);\n\n const stateResult = data?.states?.find(\n (/** @type {any} */ s) => s.state.toLowerCase() === displayUf.toLowerCase()\n );\n if (!stateResult) return null;\n\n const candidates = [];\n if (stateResult.leader) {\n candidates.push({\n name: toTitleCase(stateResult.leader.name),\n party: stateResult.leader.party_abbr,\n percentage: stateResult.leader.valid_votes_pct,\n votes: stateResult.leader.votes,\n color: stateResult.leader.party_color,\n elected: stateResult.leader.elected ?? false,\n });\n }\n if (stateResult.runner_up) {\n candidates.push({\n name: toTitleCase(stateResult.runner_up.name),\n party: stateResult.runner_up.party_abbr,\n percentage: stateResult.runner_up.valid_votes_pct,\n votes: stateResult.runner_up.votes,\n color: stateResult.runner_up.party_color,\n elected: false,\n });\n }\n return candidates.length > 0 ? candidates : null;\n });\n const selectedOfficeLabel = $derived(officeOptions.find(o => o.value === selectedOffice)?.label ?? 'Presidente');\n const selectedTitle = $derived(displayUf ? `${selectedOfficeLabel}: ${getStateName(displayUf)}` : '');\n\n function handleRegionHover(info) {\n selectedUf = info.cid;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedUf === info.cid) {\n pinnedUf = null;\n } else {\n pinnedUf = info.cid;\n pinnedX = info.clientX - rect.left;\n pinnedY = info.clientY - rect.top;\n }\n }\n\n $effect(() => {\n if (!pinnedUf) return;\n function handleOutsideClick(e: MouseEvent) {\n if (mapWebEl && !mapWebEl.contains(e.target as Node)) {\n pinnedUf = null;\n }\n }\n document.addEventListener('click', handleOutsideClick);\n return () => document.removeEventListener('click', handleOutsideClick);\n });\n</script>\n\n<div class=\"sevn_state_leaders\" class:sevn_state_leaders--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if !mock}\n <div class=\"sevn_state_leaders__filter-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_state_leaders__filter-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n {/if}\n\n {#if mock || selectedOffice}\n {#if loading}\n <p class=\"sevn_state_leaders__empty-label\">Carregando resultados...</p>\n {:else if error}\n <p class=\"sevn_state_leaders__empty-label sevn_state_leaders__empty-label--error\">{error}</p>\n {:else}\n <div class=\"sevn_state_leaders__overview-mobile\">\n <span class=\"sevn_state_leaders__overview-label\">Visão geral:</span>\n <div class=\"sevn_state_leaders__tags-row\">\n {#each parties as p}\n <Tag label={p.party} color={p.color} />\n {/each}\n </div>\n </div>\n\n <div class=\"sevn_state_leaders__map-web\" bind:this={mapWebEl} onmouseleave={() => selectedUf = null} role=\"presentation\">\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n\n <div class=\"sevn_state_leaders__legend-overlay\">\n {#each parties as p}\n <Tag label={p.party} color={p.color} />\n {/each}\n </div>\n\n {#if displayUf}\n <div class=\"sevn_state_leaders__table-overlay\" style=\"left:{overlayX}px;top:{overlayY}px\">\n {#if selectedData}\n <TableCandidate title={selectedTitle} candidates={selectedData} />\n {:else}\n <p class=\"sevn_state_leaders__empty-label\">Resultado ainda não publicado para {getStateName(displayUf)}.</p>\n {/if}\n </div>\n {/if}\n </div>\n\n <div class=\"sevn_state_leaders__mobile-section\">\n <div class=\"sevn_state_leaders__map-mobile\">\n <Map type=\"brazil-states\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_state_leaders__search-mobile\">\n <Autocomplete\n label={selectedUf ? 'Você selecionou' : 'Busque por estado:'}\n options={ufs}\n bind:value={selectedUf}\n />\n </div>\n\n {#if selectedUf}\n {#if selectedData}\n <TableCandidate title={selectedTitle} candidates={selectedData} />\n {:else}\n <p class=\"sevn_state_leaders__empty-label\">Resultado ainda não publicado para {getStateName(selectedUf)}.</p>\n {/if}\n {/if}\n\n {#if showNationalOverview}\n <VoteOverview data={overviewData} date={overviewDate} font=\"TSE\" />\n {/if}\n </div>\n\n {#if showNationalOverview}\n <div class=\"sevn_state_leaders__overview-web\">\n <VoteOverview data={overviewData} date={overviewDate} font=\"TSE\" />\n </div>\n {/if}\n {/if}\n {/if}\n\n</div>\n\n<style>\n .sevn_state_leaders {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_state_leaders__filter-web {\n display: none;\n }\n\n .sevn_state_leaders__filter-mobile {\n display: block;\n width: 220px;\n }\n\n @media (min-width: 768px) {\n .sevn_state_leaders__filter-web {\n display: block;\n }\n\n .sevn_state_leaders__filter-mobile {\n display: none;\n }\n }\n\n .sevn_state_leaders__empty-label--error {\n color: #e11d48;\n opacity: 1;\n }\n\n /* ── Visão geral mobile ──────────────────────────────── */\n .sevn_state_leaders__overview-mobile {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .sevn_state_leaders__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_state_leaders__tags-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n /* ── Mapa web ────────────────────────────────────────── */\n .sevn_state_leaders__map-web { display: none; position: relative; }\n\n /* ── Legenda overlay (web) ───────────────────────────── */\n .sevn_state_leaders__legend-overlay {\n position: absolute;\n bottom: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n z-index: 5;\n }\n\n /* ── TableCandidate overlay (web) ────────────────────── */\n .sevn_state_leaders__table-overlay {\n position: absolute;\n z-index: 10;\n width: 500px;\n transform: translate(-50%, 12px);\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n pointer-events: none;\n }\n\n .sevn_state_leaders__empty-label {\n margin: 0;\n padding: 14px 18px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n text-align: center;\n }\n\n .sevn_state_leaders__table-overlay :global(.table-candidate-content) {\n display: grid;\n grid-template-columns: 1fr 55px 120px;\n align-items: center;\n gap: 0;\n }\n\n .sevn_state_leaders__table-overlay :global(.table-candidate-percent) {\n text-align: right;\n }\n\n .sevn_state_leaders__table-overlay :global(.table-candidate-votes) {\n flex-basis: auto;\n margin-top: 0;\n text-align: right;\n }\n\n /* ── Seção mobile ────────────────────────────────────── */\n .sevn_state_leaders__mobile-section {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .sevn_state_leaders__map-mobile {\n width: 100%;\n }\n\n .sevn_state_leaders :global(.vote-overview) {\n padding: 8px 0;\n gap: 8px;\n align-items: flex-end;\n }\n\n @media (max-width: 767px) {\n .sevn_state_leaders__search-mobile :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_state_leaders :global(.vote-overview) {\n padding: 3px;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_state_leaders :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n }\n .sevn_state_leaders__overview-web { display: none; }\n\n /* ── Desktop ─────────────────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_state_leaders__overview-mobile { display: none; }\n .sevn_state_leaders__map-web { display: block; }\n .sevn_state_leaders__mobile-section { display: none; }\n .sevn_state_leaders__overview-web { display: block; }\n }\n\n /* ── Raw ─────────────────────────────────────────────── */\n .sevn_state_leaders--raw,\n .sevn_state_leaders--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { CurrentLeaderProps } from './props';\n import { Header, CandidatePercentage } from '$lib';\n import type { HeaderProps } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, data = null, header = { title: 'Liderança Atual', tag: 'PRESIDENTE', tagColor: 'var(--sevn-color-tertiary, #1a1a2e)' } }: CurrentLeaderProps = $props();\n\n const mockCandidates = [\n {\n name: 'Candidato A',\n acronym: 'ABC',\n percent: 50.90,\n votes: 59276176,\n color: 'var(--sevn-color-primary)',\n avatar: 'man',\n },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n const latestSnapshot = $derived.by(() => {\n if (!mock && data?.snapshots && Array.isArray(data.snapshots)) {\n return data.snapshots[data.snapshots.length - 1];\n }\n return null;\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!latestSnapshot?.results?.length || !data?.candidates_meta || !Array.isArray(data.candidates_meta)) return [];\n\n const results = latestSnapshot.results;\n const leader = results.reduce((prev: any, current: any) =>\n current.valid_votes_pct > prev.valid_votes_pct ? current : prev\n );\n const meta = data.candidates_meta.find((c: any) => c.candidate_id === leader.candidate_id);\n\n return [\n {\n name: meta?.name ? toTitleCase(meta.name) : 'Unknown',\n acronym: meta?.party_abbr || '',\n percent: leader.valid_votes_pct,\n votes: leader.votes,\n color: meta?.party_color || 'var(--sevn-color-primary)',\n photoUrl: meta?.photo_url,\n avatar: 'man',\n },\n ];\n });\n\n const ballotsCounted = $derived(latestSnapshot?.ballots_counted_pct || 0);\n\n const derivedDescription = $derived(\n mock\n ? 'X% das urnas apuradas'\n : ballotsCounted\n ? `${ballotsCounted}% das urnas apuradas`\n : ''\n );\n\n const headerDescription = $derived(header.description ?? derivedDescription);\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!latestSnapshot?.overview) return [];\n const { valid_votes, null_votes, blank_votes } = latestSnapshot.overview;\n const total = valid_votes + null_votes + blank_votes;\n return [\n { text: 'Nulos', value: `${((null_votes / total) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / total) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(latestSnapshot?.timestamp)\n );\n</script>\n\n<div class=\"sevn_current_leader\" class:sevn_current_leader--raw={rawStyle}>\n <Header\n title={header.title}\n description={headerDescription}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if mock || candidates.length >= 1}\n <CandidatePercentage\n layout=\"compact\"\n {candidates}\n {overviewData}\n date={lastUpdate}\n font=\"TSE\"\n />\n {:else}\n <!-- layout=\"compact\" acessa candidates[0] sem checar — sem isso,\n CandidatePercentage quebra tentando ler propriedades de undefined. -->\n <p class=\"sevn_current_leader__empty-label\">Resultado ainda não publicado.</p>\n {/if}\n\n</div>\n\n<style>\n .sevn_current_leader {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_current_leader--raw,\n .sevn_current_leader--raw * {\n all: revert;\n }\n\n .sevn_current_leader__empty-label {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n margin: 0;\n }\n</style>\n","<script lang=\"ts\">\n import type { TopDisputeProps } from './props';\n import { Header, CandidatePercentage } from '$lib';\n import type { HeaderProps } from '$lib';\n import { browser } from '$core/env';\n import { getResultsTimeline } from '$services/api';\n import type { ResultsTimeline } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, year = 2026, header = { title: 'Disputa no topo', tag: 'PRESIDENTE', tagColor: 'var(--sevn-color-tertiary, #1a1a2e)' } }: TopDisputeProps = $props();\n\n // Só presidente tem disputa de escopo nacional — governador é eleição por\n // estado, não tem timeline.json agregado nacionalmente, então não faz\n // sentido oferecer select de cargo aqui (ver componente-06 pro caso análogo).\n let data: ResultsTimeline | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n $effect(() => {\n if (!browser || mock) return;\n\n loading = true;\n error = null;\n data = null;\n\n getResultsTimeline(year, 'president', 1)\n .then((fetchedData: ResultsTimeline) => {\n data = fetchedData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch timeline:', err);\n error = err instanceof Error ? err.message : 'Não foi possível carregar os resultados.';\n loading = false;\n });\n });\n\n const mockCandidates = [\n {\n name: 'Candidato A',\n acronym: 'ABC',\n percent: 50.90,\n votes: 59276176,\n color: 'var(--sevn-color-primary)',\n avatar: 'man',\n },\n {\n name: 'Candidato B',\n acronym: 'DEF',\n percent: 49.10,\n votes: 59276176,\n color: 'var(--sevn-color-secondary)',\n avatar: 'man',\n },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n const latestSnapshot = $derived.by(() => {\n if (!mock && data?.snapshots && Array.isArray(data.snapshots)) {\n return data.snapshots[data.snapshots.length - 1];\n }\n return null;\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!latestSnapshot?.results?.length || !data?.candidates_meta || !Array.isArray(data.candidates_meta)) return [];\n\n const results = [...latestSnapshot.results].sort((a: any, b: any) => b.valid_votes_pct - a.valid_votes_pct);\n return results.slice(0, 2).map((result: any) => {\n const meta = data.candidates_meta.find((c: any) => c.candidate_id === result.candidate_id);\n return {\n name: meta?.name ? toTitleCase(meta.name) : 'Unknown',\n acronym: meta?.party_abbr || '',\n percent: result.valid_votes_pct,\n votes: result.votes,\n color: meta?.party_color || 'var(--sevn-color-primary)',\n photoUrl: meta?.photo_url,\n avatar: 'man',\n };\n });\n });\n\n const ballotsCounted = $derived(latestSnapshot?.ballots_counted_pct || 0);\n\n const derivedDescription = $derived(\n mock\n ? 'X% das urnas apuradas'\n : ballotsCounted\n ? `${ballotsCounted}% das urnas apuradas`\n : ''\n );\n\n const headerDescription = $derived(header.description ?? derivedDescription);\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!latestSnapshot?.overview) return [];\n const { valid_votes, null_votes, blank_votes } = latestSnapshot.overview;\n const total = valid_votes + null_votes + blank_votes;\n return [\n { text: 'Nulos', value: `${((null_votes / total) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / total) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(latestSnapshot?.timestamp)\n );\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n</script>\n\n<div class=\"sevn_top_dispute\" class:sevn_top_dispute--raw={rawStyle}>\n <Header\n title={header.title}\n description={headerDescription}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if loading}\n <p class=\"sevn_top_dispute__status\">Carregando...</p>\n {:else if error}\n <p class=\"sevn_top_dispute__status sevn_top_dispute__status--error\">{error}</p>\n {:else if !mock && candidates.length < 2}\n <!-- duel-compact exige exatamente 2 candidatos (candidates[0]/[1]) — sem isso,\n CandidatePercentage quebra tentando ler propriedades de undefined. -->\n <p class=\"sevn_top_dispute__status\">Resultado ainda não publicado para este recorte.</p>\n {:else}\n <CandidatePercentage\n layout=\"duel-compact\"\n duelCompactInfoDirection={isMobile ? \"column\" : \"row\"}\n overviewAlign={isMobile ? \"start\" : \"end\"}\n {candidates}\n {overviewData}\n date={lastUpdate}\n font=\"TSE\"\n />\n {/if}\n</div>\n\n<style>\n .sevn_top_dispute {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_top_dispute--raw,\n .sevn_top_dispute--raw * {\n all: revert;\n }\n\n .sevn_top_dispute__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_top_dispute__status--error {\n color: #e11d48;\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateRankingProps } from './props';\n import { Header, CandidatePositionCarrousel } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getResultsTimeline } from '$services/api';\n import type { ResultsTimeline } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { positionLabel } from '../utils/position';\n import { browser } from '$core/env';\n\n let { mock = false, rawStyle = false, year = 2026, header = { title: 'Posições de liderança', tagColor: 'var(--sevn-color-tertiary, #1a1a2e)' } }: CandidateRankingProps = $props();\n\n // Só presidente tem disputa de escopo nacional — governador é eleição por\n // estado, não tem timeline.json agregado nacionalmente, então não faz\n // sentido oferecer select de cargo aqui (ver componente-06 pro caso análogo).\n let data: ResultsTimeline | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n $effect(() => {\n if (!browser || mock) return;\n\n loading = true;\n error = null;\n data = null;\n\n getResultsTimeline(year, 'president', 1)\n .then((fetchedData: ResultsTimeline) => {\n data = fetchedData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch timeline:', err);\n error = err instanceof Error ? err.message : 'Não foi possível carregar os resultados.';\n loading = false;\n });\n });\n\n const mockCandidates = [\n { position: '1º lugar', name: 'Candidato A', tag: 'ABC', tagColor: 'var(--sevn-color-primary)', avatar: 'man', avatarColor: 'var(--sevn-color-primary)', description: '41,8% dos votos válidos' },\n { position: '2º lugar', name: 'Candidato B', tag: 'DEF', tagColor: 'var(--sevn-color-secondary)', avatar: 'man', avatarColor: 'var(--sevn-color-secondary)', description: '36,4% dos votos válidos' },\n { position: '3º lugar', name: 'Candidato C', tag: 'GHI', tagColor: '#1e4d6b', avatar: 'man', avatarColor: '#1e4d6b', description: '21,8% dos votos válidos' },\n { position: '4º lugar', name: 'Candidato D', tag: 'JKL', tagColor: '#0f172a', avatar: 'man', avatarColor: '#0f172a', description: '8,4% dos votos válidos' },\n { position: '5º lugar', name: 'Candidato E', tag: 'MNO', tagColor: '#16a34a', avatar: 'man', avatarColor: '#16a34a', description: '3,2% dos votos válidos' },\n { position: '6º lugar', name: 'Candidato F', tag: 'PQR', tagColor: '#e11d48', avatar: 'man', avatarColor: '#e11d48', description: '1,7% dos votos válidos' },\n ];\n\n const latestSnapshot = $derived.by(() => {\n if (!mock && data?.snapshots && Array.isArray(data.snapshots)) {\n return data.snapshots[data.snapshots.length - 1];\n }\n return null;\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!latestSnapshot?.results?.length || !data?.candidates_meta || !Array.isArray(data.candidates_meta)) return [];\n\n const results = [...latestSnapshot.results].sort((a: any, b: any) => b.valid_votes_pct - a.valid_votes_pct);\n\n // Sem corte fixo: o carrossel (CandidatePositionCarrousel) já pagina sozinho\n // (itemsPerPage), então cortar a lista aqui só escondia candidatos de verdade\n // (ex.: presidencial real tem 13, só os 6 primeiros apareciam).\n return results.map((result: any, index: number) => {\n const meta = data.candidates_meta.find((c: any) => c.candidate_id === result.candidate_id);\n return {\n position: positionLabel(result.position, index),\n name: meta?.name ? toTitleCase(meta.name) : 'Unknown',\n photoUrl: meta?.photo_url,\n tag: meta?.party_abbr || '',\n tagColor: meta?.party_color || 'var(--sevn-color-primary)',\n avatar: 'man',\n avatarColor: meta?.party_color || 'var(--sevn-color-primary)',\n description: `${result.valid_votes_pct}% dos votos válidos`,\n };\n });\n });\n\n const ballotsCounted = $derived(latestSnapshot?.ballots_counted_pct || 0);\n\n const derivedDescription = $derived(\n mock\n ? 'X% das urnas apuradas'\n : ballotsCounted\n ? `${ballotsCounted}% das urnas apuradas`\n : ''\n );\n\n const headerDescription = $derived(header.description ?? derivedDescription);\n</script>\n\n<div class=\"sevn_candidate_ranking\" class:sevn_candidate_ranking--raw={rawStyle}>\n <Header\n title={header.title}\n description={headerDescription}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if loading}\n <p class=\"sevn_candidate_ranking__status\">Carregando...</p>\n {:else if error}\n <p class=\"sevn_candidate_ranking__status sevn_candidate_ranking__status--error\">{error}</p>\n {:else}\n <CandidatePositionCarrousel {candidates} itemsPerPage={3} />\n {/if}\n</div>\n\n<style>\n .sevn_candidate_ranking {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_ranking--raw,\n .sevn_candidate_ranking--raw * {\n all: revert;\n }\n\n .sevn_candidate_ranking__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_candidate_ranking__status--error {\n color: #e11d48;\n }\n</style>\n","<script lang=\"ts\">\n import type { LiveSummaryProps } from './props';\n import { Header, Candidate, VoteOverview } from '$lib';\n import type { HeaderProps } from '$lib';\n import { browser } from '$core/env';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let { mock = false, rawStyle = false, data = null, header = { title: 'Resumo em tempo real', tag: 'PRESIDENTE', tagColor: 'var(--sevn-color-tertiary, #1a1a2e)' } }: LiveSummaryProps = $props();\n\n const mockCandidates = [\n {\n name: 'Candidato A',\n tag: 'ABC',\n tagColor: 'var(--sevn-color-primary)',\n avatar: 'man',\n avatarColor: 'var(--sevn-color-primary)',\n description: '42,8% dos votos válidos',\n position: '1º Lugar',\n },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n const latestSnapshot = $derived.by(() => {\n if (!mock && data?.snapshots && Array.isArray(data.snapshots)) {\n return data.snapshots[data.snapshots.length - 1];\n }\n return null;\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!latestSnapshot?.results?.length || !data?.candidates_meta || !Array.isArray(data.candidates_meta)) return [];\n\n const results = [...latestSnapshot.results].sort((a: any, b: any) => b.valid_votes_pct - a.valid_votes_pct);\n const leader = results[0];\n const meta = data.candidates_meta.find((c: any) => c.candidate_id === leader.candidate_id);\n\n return [\n {\n name: meta?.name ? toTitleCase(meta.name) : 'Unknown',\n photoUrl: meta?.photo_url,\n tag: meta?.party_abbr || '',\n tagColor: meta?.party_color || 'var(--sevn-color-primary)',\n avatar: 'man',\n avatarColor: meta?.party_color || 'var(--sevn-color-primary)',\n description: `${leader.valid_votes_pct}% dos votos válidos`,\n position: '1º Lugar',\n },\n ];\n });\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!latestSnapshot?.overview) return [];\n const { valid_votes, null_votes, blank_votes } = latestSnapshot.overview;\n const total = valid_votes + null_votes + blank_votes;\n return [\n { text: 'Nulos', value: `${((null_votes / total) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / total) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const ballotsCounted = $derived(latestSnapshot?.ballots_counted_pct || 0);\n\n const derivedDescription = $derived(\n mock\n ? 'X% das urnas apuradas'\n : ballotsCounted\n ? `${ballotsCounted}% das urnas apuradas`\n : ''\n );\n\n const headerDescription = $derived(header.description ?? derivedDescription);\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(latestSnapshot?.timestamp)\n );\n\n const date = $derived(lastUpdate);\n const font = 'TSE';\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n\n</script>\n\n<div class=\"sevn_live_summary\" class:sevn_live_summary--raw={rawStyle}>\n <Header\n title={header.title}\n description={headerDescription}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_live_summary__candidates\">\n {#each candidates as c, i}\n {#if i > 0}\n <hr class=\"sevn_live_summary__divider\" />\n {/if}\n <Candidate\n name={c.name}\n tag={c.tag}\n tagColor={c.tagColor}\n avatar={c.avatar}\n avatarColor={c.avatarColor}\n description={c.description}\n position={c.position}\n positionSide={isMobile ? 'right' : 'left'}\n descriptionSide={isMobile ? 'left' : 'right'}\n descWeight={isMobile ? 400 : 600}\n />\n {/each}\n </div>\n\n <VoteOverview data={overviewData} {date} {font} borderTop />\n</div>\n\n<style>\n .sevn_live_summary {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_live_summary--raw,\n .sevn_live_summary--raw * {\n all: revert;\n }\n\n .sevn_live_summary__candidates {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_live_summary__divider {\n border: none;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n margin: 0;\n }\n\n .sevn_live_summary :global(.vote-overview) {\n padding: 10px 0;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_live_summary :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n\n</style>\n","<script lang=\"ts\">\n import type { CandidatePerformanceByMunicipalityProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Autocomplete, FilterDropdown, DonutChart, CandidateVotesRanking } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getElectionResults, getMunicipalities } from '$services/api';\n import type { ElectionResults, MunicipalitiesList, Municipality } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { browser } from '$core/env';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n defaultOffice = 'president',\n header = {\n title: 'Consulte o desempenho dos candidatos por município',\n description: 'Resultados presidenciais por município, em tempo real'\n }\n }: CandidatePerformanceByMunicipalityProps = $props();\n\n // Presidente e governador têm o mesmo formato de results.json — troca por\n // select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n const filterOptions = [\n { value: '1turno', label: '1º Turno' },\n { value: '2turno', label: '2º Turno' },\n ];\n\n type Option = { value: string; label: string };\n\n const mockMunicipalityOptions: Option[] = [\n { value: '3507001', label: 'Boituva' },\n { value: '3509502', label: 'Campinas' },\n { value: '3518800', label: 'Guarulhos' },\n { value: '3543402', label: 'Ribeirão Preto' },\n { value: '3548500', label: 'Santos' },\n { value: '3549805', label: 'São João da Boa Vista' },\n { value: '3550308', label: 'São Paulo' },\n { value: '3552205', label: 'Sorocaba' },\n ];\n\n let selectedUf = $state(/** @type {string|null} */ (''));\n let selectedMunicipality = $state<string | null>(null);\n let selectedFilter = $state(/** @type {string|null} */ (''));\n\n let municipalitiesData: MunicipalitiesList | null = $state(null);\n let municipalitiesLoading = $state(false);\n\n let resultsData: ElectionResults | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n // Ao trocar a UF, recarrega a lista de municípios e limpa a seleção anterior\n $effect(() => {\n if (!browser || !selectedUf) return;\n\n selectedMunicipality = null;\n if (mock) return;\n\n municipalitiesData = null;\n municipalitiesLoading = true;\n\n getMunicipalities(selectedUf)\n .then((data: MunicipalitiesList) => {\n municipalitiesData = data;\n municipalitiesLoading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch municipalities:', err);\n municipalitiesLoading = false;\n });\n });\n\n const municipalityOptions = $derived.by((): Option[] => {\n if (!mock && municipalitiesData?.municipalities) {\n return municipalitiesData.municipalities.map((m: Municipality) => ({\n value: String(m.municipality_id),\n label: m.name,\n }));\n }\n return mock ? mockMunicipalityOptions : [];\n });\n\n const selectedMunicipalityLabel = $derived(\n municipalityOptions.find((o) => o.value === selectedMunicipality)?.label ?? null\n );\n\n // Município é opcional — só a UF já mostra o resultado do estado inteiro.\n const municipalityFilterLabel = $derived.by(() => {\n if (!selectedUf) return 'Selecione a UF primeiro';\n if (municipalitiesLoading) return 'Carregando municípios...';\n if (selectedMunicipality) return 'Você selecionou:';\n return 'Busque pelo município (opcional)';\n });\n\n // Guarda o recorte (UF + cargo + município) pro qual já detectamos o turno\n // automaticamente — evita repetir a detecção só porque o usuário trocou o\n // turno manualmente no filtro, sem mudar UF/cargo/município.\n let autoDetectedScope: string | null = $state(null);\n\n // Detecta automaticamente o turno vigente: tenta o 2º turno pro recorte\n // atual; se já tiver voto de verdade, assume que é o turno em andamento,\n // senão cai pro 1º. Só define um padrão — o usuário ainda pode trocar\n // manualmente depois pelo filtro.\n $effect(() => {\n if (!browser || mock || !selectedUf || !selectedOffice) return;\n\n const scopeKey = `${selectedUf}|${selectedOffice}|${selectedMunicipality ?? ''}`;\n if (autoDetectedScope === scopeKey) return;\n\n const office = officeMap[selectedOffice] || 'president';\n const municipalityId = selectedMunicipality ? Number(selectedMunicipality) : undefined;\n let cancelled = false;\n\n getElectionResults(year, { office, round: 2, state: selectedUf, municipalityId })\n .then((r2: ElectionResults) => {\n if (cancelled) return;\n const hasRound2Data = !!r2?.candidates?.some((c: any) => c.votes > 0);\n selectedFilter = hasRound2Data ? '2turno' : '1turno';\n autoDetectedScope = scopeKey;\n })\n .catch(() => {\n if (cancelled) return;\n selectedFilter = '1turno';\n autoDetectedScope = scopeKey;\n });\n\n return () => { cancelled = true; };\n });\n\n $effect(() => {\n if (!browser || mock) return;\n // Sem UF (inclusive depois de limpar o filtro) zera o resultado — senão fica\n // na tela o dado do estado anterior.\n if (!selectedUf || !selectedFilter || !selectedOffice) {\n resultsData = null;\n return;\n }\n\n const round = selectedFilter === '2turno' ? 2 : 1;\n const office = officeMap[selectedOffice] || 'president';\n\n loading = true;\n error = null;\n resultsData = null;\n\n getElectionResults(year, {\n office,\n round,\n state: selectedUf,\n municipalityId: selectedMunicipality ? Number(selectedMunicipality) : undefined,\n })\n .then((fetchedData: ElectionResults) => {\n resultsData = fetchedData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch municipality results:', err);\n error = err instanceof Error ? err.message : 'Não foi possível carregar os resultados.';\n loading = false;\n });\n });\n\n const mockCandidates = [\n { name: 'Candidato A', tag: 'ABC', dotColor: 'var(--sevn-color-primary)', tagColor: 'var(--sevn-color-primary)', votes: '42,8%' },\n { name: 'Candidato B', tag: 'EFG', dotColor: '#16a34a', tagColor: '#16a34a', votes: '31,4%' },\n { name: 'Candidato C', tag: 'HIJ', dotColor: '#1e4d6b', tagColor: '#1e4d6b', votes: '12,6%' },\n { name: 'Candidato D', tag: 'KLM', dotColor: '#0f172a', tagColor: '#0f172a', votes: '6,7%' },\n { name: 'Candidato E', tag: 'MNO', dotColor: '#e11d48', tagColor: '#e11d48', votes: '4,1%' },\n ];\n\n const mockDonutSegments = [\n { label: 'ABC', value: 42.8, color: 'var(--sevn-color-primary)' },\n { label: 'EFG', value: 31.4, color: '#16a34a' },\n { label: 'HIJ', value: 12.6, color: '#1e4d6b' },\n { label: 'KLM', value: 6.7, color: '#0f172a' },\n { label: 'MNO', value: 4.1, color: '#e11d48' },\n ];\n\n const processedData = $derived.by(() => {\n if (mock) {\n return {\n candidates: mockCandidates,\n segments: mockDonutSegments,\n totalVotes: '118.552.353',\n };\n }\n\n if (!resultsData?.candidates || !Array.isArray(resultsData.candidates)) {\n return { candidates: [], segments: [], totalVotes: null };\n }\n\n const results = [...resultsData.candidates].sort(\n (a, b) => b.valid_votes_pct - a.valid_votes_pct\n );\n\n const candidatesList = results.map((result) => ({\n name: toTitleCase(result.ballot_name),\n tag: result.party_abbr,\n dotColor: result.party_color || 'var(--sevn-color-primary)',\n tagColor: result.party_color || 'var(--sevn-color-primary)',\n votes: `${result.valid_votes_pct.toFixed(1).replace('.', ',')}%`,\n }));\n\n const segments = results.map((result) => ({\n label: result.party_abbr,\n value: result.valid_votes_pct,\n color: result.party_color || 'var(--sevn-color-primary)',\n }));\n\n return {\n candidates: candidatesList,\n segments,\n totalVotes: resultsData.summary?.total_valid_votes.toLocaleString('pt-BR') ?? null,\n };\n });\n\n const candidates = $derived(processedData.candidates);\n const donutSegments = $derived(processedData.segments);\n const totalVotesDisplay = $derived(processedData.totalVotes);\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(resultsData?.summary?.last_updated)\n );\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (/** @type {MediaQueryListEvent} */ e) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n</script>\n\n<div class=\"sevn_candidate_performance\" class:sevn_candidate_performance--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_candidate_performance__office-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_candidate_performance__office-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n\n <div class=\"sevn_candidate_performance__filters\">\n <div class=\"sevn_candidate_performance__uf\">\n <Autocomplete\n label={selectedUf ? 'Você selecionou:' : 'Busque por UF'}\n icon={chevronIconUrl}\n iconSize={13}\n options={ufOptions}\n bind:value={selectedUf}\n />\n </div>\n <div class=\"sevn_candidate_performance__municipality\">\n <Autocomplete\n label={municipalityFilterLabel}\n icon={chevronIconUrl}\n iconSize={13}\n options={municipalityOptions}\n bind:value={selectedMunicipality}\n disabled={!selectedUf || municipalitiesLoading}\n />\n </div>\n <div class=\"sevn_candidate_performance__filter\">\n <Autocomplete\n label=\"Filtrar por\"\n icon={chevronIconUrl}\n iconSize={13}\n options={filterOptions}\n bind:value={selectedFilter}\n />\n </div>\n </div>\n\n {#if selectedUf && selectedFilter && selectedOffice}\n {#if loading}\n <p class=\"sevn_candidate_performance__status\">\n Carregando resultados{selectedMunicipalityLabel ? ` de ${selectedMunicipalityLabel}` : ''}...\n </p>\n {:else if error}\n <p class=\"sevn_candidate_performance__status sevn_candidate_performance__status--error\">{error}</p>\n {:else if !mock && candidates.length === 0}\n <p class=\"sevn_candidate_performance__status\">Resultado ainda não publicado para este recorte.</p>\n {:else}\n <div class=\"sevn_candidate_performance__content\">\n <div class=\"sevn_candidate_performance__chart\">\n <DonutChart\n segments={donutSegments}\n centerLabel={filterOptions.find(f => f.value === selectedFilter)?.label ?? ''}\n size={isMobile ? \"250px\" : \"388px\"}\n centerLabelSize={15}\n centerSubSize={10}\n radius={85}\n thickness={18}\n gap={1}\n />\n </div>\n <div class=\"sevn_candidate_performance__ranking\">\n <CandidateVotesRanking\n {candidates}\n totalVotes={totalVotesDisplay}\n date={lastUpdate}\n font=\"TSE\"\n />\n </div>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_candidate_performance {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_performance--raw,\n .sevn_candidate_performance--raw * {\n all: revert;\n }\n\n .sevn_candidate_performance__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_candidate_performance__status--error {\n color: #e11d48;\n }\n\n /* Filters row */\n .sevn_candidate_performance__filters {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n\n .sevn_candidate_performance__uf,\n .sevn_candidate_performance__municipality {\n flex: 1;\n min-width: 0;\n }\n\n .sevn_candidate_performance__filter {\n width: 200px;\n flex-shrink: 0;\n }\n\n .sevn_candidate_performance__office-web {\n display: none;\n }\n\n .sevn_candidate_performance__office-mobile {\n display: block;\n width: 220px;\n }\n\n @media (min-width: 769px) {\n .sevn_candidate_performance__office-web {\n display: block;\n }\n\n .sevn_candidate_performance__office-mobile {\n display: none;\n }\n }\n\n /* Content: chart + ranking side by side on web */\n .sevn_candidate_performance__content {\n display: flex;\n gap: 40px;\n align-items: center;\n }\n\n .sevn_candidate_performance__chart {\n flex-shrink: 0;\n }\n\n .sevn_candidate_performance__ranking {\n flex: 1;\n min-width: 0;\n }\n\n .sevn_candidate_performance :global(.vote-overview) {\n gap: 8px;\n padding: 0.5rem 0;\n align-items: flex-end;\n }\n\n /* Mobile */\n @media (max-width: 768px) {\n .sevn_candidate_performance__filters {\n flex-direction: column;\n gap: 12px;\n }\n\n .sevn_candidate_performance__office-mobile,\n .sevn_candidate_performance__uf,\n .sevn_candidate_performance__municipality,\n .sevn_candidate_performance__filter {\n width: 100%;\n }\n\n .sevn_candidate_performance__uf :global(.dropdown),\n .sevn_candidate_performance__municipality :global(.dropdown),\n .sevn_candidate_performance__filter :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_candidate_performance__content {\n flex-direction: column;\n align-items: stretch;\n gap: 24px;\n }\n\n .sevn_candidate_performance__chart {\n display: flex;\n justify-content: center;\n }\n\n .sevn_candidate_performance :global(.vote-overview) {\n padding: 3px;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_candidate_performance :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { RoundResultsAnalysisProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Autocomplete, FilterDropdown, DonutChart, CandidateVotesRanking } from '$lib';\n import type { HeaderProps } from '$lib';\n import { browser } from '$core/env';\n import { getElectionResults, getMunicipalities } from '$services/api';\n import { toTitleCase } from '../utils/formatName';\n import type {\n CandidateResult,\n ElectionResults,\n MunicipalitiesList,\n Municipality,\n } from '$services/types';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, MOCK_UPDATE_META, formatUpdate, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n defaultOffice = 'president',\n header = {\n title: 'Análise de resultados por turno',\n description: 'Resultados presidenciais por município, em tempo real'\n }\n }: RoundResultsAnalysisProps = $props();\n\n // Presidente e governador têm o mesmo formato de results.json — troca por\n // select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n type Option = { value: string; label: string };\n\n const mockMunicipalityOptions: Option[] = [\n { value: '3507001', label: 'Boituva' },\n { value: '3509502', label: 'Campinas' },\n { value: '3518800', label: 'Guarulhos' },\n { value: '3543402', label: 'Ribeirão Preto' },\n { value: '3548500', label: 'Santos' },\n { value: '3549805', label: 'São João da Boa Vista' },\n { value: '3550308', label: 'São Paulo' },\n { value: '3552205', label: 'Sorocaba' },\n ];\n\n let selectedUf = $state<string | null>('');\n let selectedMunicipality = $state<string | null>(null);\n\n let municipalitiesData = $state<MunicipalitiesList | null>(null);\n let municipalitiesLoading = $state(false);\n\n // Ao trocar a UF, recarrega a lista de municípios e limpa a seleção anterior\n $effect(() => {\n if (!browser || !selectedUf) return;\n\n selectedMunicipality = null;\n if (mock) return;\n\n municipalitiesData = null;\n municipalitiesLoading = true;\n\n getMunicipalities(selectedUf)\n .then((data: MunicipalitiesList) => {\n municipalitiesData = data;\n municipalitiesLoading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch municipalities:', err);\n municipalitiesLoading = false;\n });\n });\n\n const municipalityOptions = $derived.by((): Option[] => {\n if (!mock && municipalitiesData?.municipalities) {\n return municipalitiesData.municipalities.map((m: Municipality) => ({\n value: String(m.municipality_id),\n label: m.name,\n }));\n }\n return mock ? mockMunicipalityOptions : [];\n });\n\n const selectedMunicipalityLabel = $derived(\n municipalityOptions.find((o) => o.value === selectedMunicipality)?.label ?? null\n );\n\n // Município é opcional — só a UF já mostra o resultado do estado inteiro.\n const municipalityFilterLabel = $derived.by(() => {\n if (!selectedUf) return 'Selecione a UF primeiro';\n if (municipalitiesLoading) return 'Carregando municípios...';\n if (selectedMunicipality) return 'Você selecionou:';\n return 'Busque pelo município (opcional)';\n });\n\n // ── Mock data ──────────────────────────────────────────────────────────────\n\n const mockRound1Candidates = [\n { name: 'Candidato A', tag: 'ABC', dotColor: 'var(--sevn-color-primary)', tagColor: 'var(--sevn-color-primary)', votes: '42,8%' },\n { name: 'Candidato B', tag: 'DEF', dotColor: '#16a34a', tagColor: '#16a34a', votes: '31,4%' },\n { name: 'Candidato C', tag: 'GHI', dotColor: '#1e4d6b', tagColor: '#1e4d6b', votes: '12,6%' },\n { name: 'Candidato D', tag: 'JKL', dotColor: '#0f172a', tagColor: '#0f172a', votes: '9,7%' },\n { name: 'Candidato E', tag: 'MNO', dotColor: '#e11d48', tagColor: '#e11d48', votes: '4,1%' },\n ];\n\n const mockRound1Segments = [\n { label: 'ABC', value: 42.8, color: 'var(--sevn-color-primary)' },\n { label: 'DEF', value: 31.4, color: '#16a34a' },\n { label: 'GHI', value: 12.6, color: '#1e4d6b' },\n { label: 'JKL', value: 9.7, color: '#0f172a' },\n { label: 'MNO', value: 4.1, color: '#e11d48' },\n ];\n\n const mockRound2Candidates = [\n { name: 'Candidato A', tag: 'ABC', dotColor: 'var(--sevn-color-primary)', tagColor: 'var(--sevn-color-primary)', votes: '54,2%', elected: true },\n { name: 'Candidato B', tag: 'DEF', dotColor: '#16a34a', tagColor: '#16a34a', votes: '45,8%' },\n ];\n\n const mockRound2Segments = [\n { label: 'ABC', value: 54.2, color: 'var(--sevn-color-primary)' },\n { label: 'DEF', value: 45.8, color: '#16a34a' },\n ];\n\n // ── API state ──────────────────────────────────────────────────────────────\n\n let round1Data = $state<ElectionResults | null>(null);\n let round2Data = $state<ElectionResults | null>(null);\n let loading = $state(false);\n let error = $state<string | null>(null);\n // 2º turno é exceção, não regra — a maioria dos municípios nunca chega lá.\n // Buscamos os dois turnos de forma independente pra um 2º turno ainda não\n // publicado (published:false → erro no api.ts) não derrubar o 1º turno junto.\n let round2NotPublished = $state(false);\n\n $effect(() => {\n if (!browser || mock) return;\n // Sem UF (inclusive depois de limpar o filtro) zera o resultado — senão fica\n // na tela o dado do estado anterior.\n if (!selectedUf || !selectedOffice) {\n round1Data = null;\n round2Data = null;\n round2NotPublished = false;\n return;\n }\n\n round1Data = null;\n round2Data = null;\n round2NotPublished = false;\n loading = true;\n error = null;\n\n const state = selectedUf;\n const municipalityId = selectedMunicipality ? Number(selectedMunicipality) : undefined;\n const office = officeMap[selectedOffice] || 'president';\n\n getElectionResults(year, { round: 1, state, municipalityId, office })\n .then((r1: ElectionResults) => { round1Data = r1; })\n .catch((err: unknown) => {\n console.error('Failed to fetch round 1 results:', err);\n error = 'Failed to load data';\n })\n .finally(() => { loading = false; });\n\n getElectionResults(year, { round: 2, state, municipalityId, office })\n .then((r2: ElectionResults) => { round2Data = r2; })\n .catch((err: unknown) => {\n console.error(`No round 2 results for ${selectedMunicipality}:`, err);\n round2Data = null;\n round2NotPublished = true;\n });\n });\n\n // ── Derived data ───────────────────────────────────────────────────────────\n\n const round1Candidates = $derived.by(() => {\n if (mock) return mockRound1Candidates;\n if (!round1Data?.candidates) return [];\n return round1Data.candidates.map((c: CandidateResult) => ({\n name: toTitleCase(c.ballot_name),\n tag: c.party_abbr,\n dotColor: c.party_color,\n tagColor: c.party_color,\n votes: `${c.valid_votes_pct.toFixed(1).replace('.', ',')}%`,\n elected: c.elected,\n }));\n });\n\n const round1Segments = $derived.by(() => {\n if (mock) return mockRound1Segments;\n if (!round1Data?.candidates) return [];\n return round1Data.candidates.map((c: CandidateResult) => ({\n label: c.party_abbr,\n value: c.valid_votes_pct,\n color: c.party_color,\n }));\n });\n\n const round2Candidates = $derived.by(() => {\n if (mock) return mockRound2Candidates;\n if (!round2Data?.candidates) return [];\n return round2Data.candidates.map((c: CandidateResult) => ({\n name: toTitleCase(c.ballot_name),\n tag: c.party_abbr,\n dotColor: c.party_color,\n tagColor: c.party_color,\n votes: `${c.valid_votes_pct.toFixed(1).replace('.', ',')}%`,\n elected: c.elected,\n }));\n });\n\n const round2Segments = $derived.by(() => {\n if (mock) return mockRound2Segments;\n if (!round2Data?.candidates) return [];\n return round2Data.candidates.map((c: CandidateResult) => ({\n label: c.party_abbr,\n value: c.valid_votes_pct,\n color: c.party_color,\n }));\n });\n\n const round1TotalVotes = $derived.by(() => {\n if (mock) return '118.552.353';\n return round1Data?.summary ? round1Data.summary.total_valid_votes.toLocaleString('pt-BR') : null;\n });\n\n const round2TotalVotes = $derived.by(() => {\n if (mock) return '118.552.353';\n return round2Data?.summary ? round2Data.summary.total_valid_votes.toLocaleString('pt-BR') : null;\n });\n\n const round1Date = $derived(\n mock ? MOCK_UPDATE : formatUpdate(round1Data?.summary?.last_updated)\n );\n\n const round2Date = $derived(\n mock ? MOCK_UPDATE : formatUpdate(round2Data?.summary?.last_updated)\n );\n\n const updatedMeta = $derived(\n mock\n ? MOCK_UPDATE_META\n : formatUpdateMeta(round2Data?.summary?.last_updated ?? round1Data?.summary?.last_updated)\n );\n\n // ── Mobile breakpoint ──────────────────────────────────────────────────────\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (e: MediaQueryListEvent) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n</script>\n\n<div class=\"sevn_round_results\" class:sevn_round_results--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_round_results__office-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_round_results__office-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n\n <div class=\"sevn_round_results__filters\">\n <div class=\"sevn_round_results__filter\">\n <Autocomplete\n label={selectedUf ? 'Você selecionou' : 'Busque por UF'}\n icon={chevronIconUrl}\n iconSize={13}\n options={ufOptions}\n bind:value={selectedUf}\n meta={updatedMeta}\n />\n </div>\n <div class=\"sevn_round_results__filter\">\n <Autocomplete\n label={municipalityFilterLabel}\n icon={chevronIconUrl}\n iconSize={13}\n options={municipalityOptions}\n bind:value={selectedMunicipality}\n disabled={!selectedUf || municipalitiesLoading}\n />\n </div>\n </div>\n\n {#if selectedUf && selectedOffice}\n {#if loading}\n <p class=\"sevn_round_results__status\">\n Carregando resultados{selectedMunicipalityLabel ? ` de ${selectedMunicipalityLabel}` : ''}...\n </p>\n {:else if error}\n <p class=\"sevn_round_results__status sevn_round_results__status--error\">{error}</p>\n {:else}\n <div class=\"sevn_round_results__grid\">\n <div class=\"sevn_round_results__round\">\n <div class=\"sevn_round_results__chart\">\n <DonutChart\n segments={round1Segments}\n centerLabel=\"1ºTurno\"\n size={isMobile ? \"250px\" : \"300px\"}\n radius={85}\n thickness={18}\n centerLabelSize={15}\n gap={1}\n />\n </div>\n <CandidateVotesRanking\n candidates={round1Candidates}\n totalVotes={round1TotalVotes}\n date={round1Date}\n font=\"TSE\"\n />\n </div>\n\n <div class=\"sevn_round_results__round\">\n {#if !mock && round2NotPublished}\n <p class=\"sevn_round_results__status\">2º turno ainda não publicado para este município.</p>\n {:else}\n <div class=\"sevn_round_results__chart\">\n <DonutChart\n segments={round2Segments}\n centerLabel=\"2ºTurno\"\n size={isMobile ? \"250px\" : \"300px\"}\n radius={85}\n thickness={18}\n centerLabelSize={15}\n gap={1}\n />\n </div>\n <CandidateVotesRanking\n candidates={round2Candidates}\n totalVotes={round2TotalVotes}\n date={round2Date}\n font=\"TSE\"\n />\n {/if}\n </div>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_round_results {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_round_results--raw,\n .sevn_round_results--raw * {\n all: revert;\n }\n\n .sevn_round_results__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_round_results__status--error {\n color: #e11d48;\n }\n\n /* Filters row */\n .sevn_round_results__filters {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n\n .sevn_round_results__filter {\n flex: 1;\n min-width: 0;\n }\n\n .sevn_round_results__office-web {\n display: none;\n }\n\n .sevn_round_results__office-mobile {\n display: block;\n width: 220px;\n }\n\n @media (min-width: 769px) {\n .sevn_round_results__office-web {\n display: block;\n }\n\n .sevn_round_results__office-mobile {\n display: none;\n }\n }\n\n /* Grid: two rounds side by side on web */\n .sevn_round_results__grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n }\n\n .sevn_round_results__round {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_round_results__chart {\n display: flex;\n justify-content: center;\n }\n\n .sevn_round_results :global(.vote-overview) {\n gap: 8px;\n padding: 0.5rem 0;\n align-items: flex-end;\n }\n\n /* Mobile */\n @media (max-width: 768px) {\n .sevn_round_results__grid {\n grid-template-columns: 1fr;\n gap: 40px;\n }\n\n .sevn_round_results__filters {\n flex-direction: column;\n gap: 12px;\n }\n\n .sevn_round_results__filter {\n width: 100%;\n }\n\n .sevn_round_results__filter :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_round_results :global(.vote-overview) {\n padding: 3px;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_round_results :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { ElectionStatusProps } from './props';\n import { onMount, untrack } from 'svelte';\n import { browser } from '$core/env';\n import { Header, Autocomplete, FilterDropdown, Map, MapLegend, Tag, BarChart } from '$lib';\n import type { HeaderProps } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n import { getMunicipalityResults, getMunicipalities, getCountingProgress } from '$services/api';\n import type { MunicipalityResults, MunicipalitiesList, CountingProgress } from '$services/types';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n defaultOffice = 'president',\n header = {\n title: 'Situação eleitoral',\n description: '2.045 eleitores',\n tagColor: 'var(--sevn-color-tertiary, #1a1a2e)'\n }\n }: ElectionStatusProps = $props();\n\n // Presidente e governador têm o mesmo formato de dados — troca por select em\n // vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'presidente', label: 'Presidente' },\n { value: 'governador', label: 'Governador' },\n ];\n const officeMap: Record<string, 'president' | 'governor'> = {\n presidente: 'president',\n governador: 'governor',\n };\n const officeReverseMap: Record<'president' | 'governor', string> = {\n president: 'presidente',\n governor: 'governador',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'presidente'));\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n let selectedUf = $state('');\n let selectedMunicipio: string | null = $state(null);\n let municipalityData: MunicipalityResults | null = $state(null);\n let municipioData: MunicipalitiesList | null = $state(null);\n let progressData: CountingProgress | null = $state(null);\n let loading = $state(false);\n let error: string | null = $state(null);\n\n const selectedUfLabel = $derived(\n ufOptions.find(o => o.value === selectedUf)?.label?.replace(/\\s+[A-Z]{2}$/, '') ?? selectedUf\n );\n\n // Preposição que cada estado exige (\"do Acre\", \"da Bahia\", \"de São Paulo\"...).\n const ufPreposition: Record<string, 'do' | 'da' | 'de'> = {\n ac: 'do', al: 'de', ap: 'do', am: 'do', ba: 'da', ce: 'do',\n df: 'do', es: 'do', go: 'de', ma: 'do', mt: 'do', ms: 'do',\n mg: 'de', pa: 'do', pb: 'da', pr: 'do', pe: 'de', pi: 'do',\n rj: 'do', rn: 'do', rs: 'do', ro: 'de', rr: 'de', sc: 'de',\n sp: 'de', se: 'de', to: 'do',\n };\n\n const selectedUfWithPreposition = $derived(\n `${ufPreposition[selectedUf] ?? 'de'} ${selectedUfLabel}`\n );\n\n const selectedOfficeLabel = $derived(\n officeOptions.find(o => o.value === selectedOffice)?.label ?? 'Governador'\n );\n\n let isMobile = $state(false);\n let visibleCount = $derived(isMobile ? 4 : 6);\n let colWidth = $derived(isMobile ? 80 : 82);\n\n let leftHeight = $state(0);\n // bar-chart total height = trackHeight + 24px (padding-top) + 4px (gap) + ~36px (footer)\n let trackHeight = $derived(Math.max(leftHeight - 64, 150));\n\n onMount(() => {\n const mq = window.matchMedia('(max-width: 768px)');\n isMobile = mq.matches;\n const handler = (e: MediaQueryListEvent) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n\n $effect(() => {\n if (!browser || !selectedUf || !selectedOffice || mock) {\n municipalityData = null;\n return;\n }\n\n loading = true;\n error = null;\n\n const office = officeMap[selectedOffice] || 'governor';\n\n getMunicipalityResults(year, office, 1, selectedUf)\n .then((data: MunicipalityResults) => {\n municipalityData = data;\n })\n .catch((err: any) => {\n error = err?.message || 'Erro ao carregar dados';\n municipalityData = null;\n })\n .finally(() => {\n loading = false;\n });\n });\n\n // Lista de municípios da UF selecionada, para o seletor de município.\n $effect(() => {\n if (!browser || mock || !selectedUf) {\n municipioData = null;\n return;\n }\n\n selectedMunicipio = null;\n\n getMunicipalities(selectedUf)\n .then((data: MunicipalitiesList) => {\n municipioData = data;\n })\n .catch((err: any) => {\n console.error('Failed to fetch municipalities:', err);\n municipioData = null;\n });\n });\n\n // Apuração (progresso de contagem de urnas) por município da UF selecionada.\n $effect(() => {\n if (!browser || mock || !selectedUf) {\n progressData = null;\n return;\n }\n\n getCountingProgress(year, 1, selectedUf)\n .then((data: CountingProgress) => {\n progressData = data;\n })\n .catch((err: any) => {\n console.error('Failed to fetch counting progress:', err);\n progressData = null;\n });\n });\n\n const mockParties = [\n { tag: 'ABC', color: '#16a34a' },\n { tag: 'DEF', color: 'var(--sevn-color-primary)' },\n { tag: 'GHI', color: '#1e4d6b' },\n { tag: 'JKL', color: '#0f172a' },\n ];\n\n // Municípios considerados no ranking (Tags/BarChart): só o selecionado, ou o estado inteiro\n // quando nenhum município está selecionado.\n const scopedMunicipalities = $derived.by(() => {\n if (!municipalityData?.municipalities) return [];\n if (!selectedMunicipio) return municipalityData.municipalities;\n return municipalityData.municipalities.filter(\n (m) => String(m.municipality_id) === selectedMunicipio\n );\n });\n\n const parties = $derived.by(() => {\n if (mock) return mockParties;\n if (!scopedMunicipalities.length) return [];\n\n const seen: Record<string, string> = {};\n for (const m of scopedMunicipalities) {\n if (!seen[m.leader.party_abbr]) {\n seen[m.leader.party_abbr] = m.leader.party_color;\n }\n }\n return Object.entries(seen).map(([tag, color]) => ({ tag, color }));\n });\n\n // Cada partido tem só 1 candidato a governador no estado — usa isso pra\n // mostrar o nome junto da sigla também na visão do estado inteiro, não só\n // ao selecionar um município.\n const candidateNameByParty = $derived.by(() => {\n const map: Record<string, string> = {};\n for (const m of scopedMunicipalities) {\n if (m.leader && !map[m.leader.party_abbr]) {\n map[m.leader.party_abbr] = toTitleCase(m.leader.name);\n }\n }\n return map;\n });\n\n const spMunicipalities = [\n 'adamantina','adolfo','aguai','aguas-da-prata','aguas-de-lindoia','aguas-de-santa-barbara',\n 'aguas-de-sao-pedro','agudos','alambari','alfredo-marcondes','altair','altinopolis',\n 'alto-alegre','aluminio','alvares-florence','alvares-machado','alvaro-de-carvalho',\n 'alvinlandia','americana','americo-brasiliense','americo-de-campos','amparo','analandia',\n 'andradina','angatuba','anhembi','anhumas','aparecida','aparecida-doeste','apiai',\n 'aracariguama','aracatuba','aracoiaba-da-serra','aramina','arandu','arapei','araraquara',\n 'araras','arcoiris','arealva','areias','areiopolis','ariranha','artur-nogueira','aruja',\n 'aspasia','assis','atibaia','auriflama','avai','avanhandava','avare','bady-bassitt',\n 'balbinos','balsamo','bananal','barao-de-antonina','barbosa','bariri','barra-bonita',\n 'barra-do-chapeu','barra-do-turvo','barretos','barrinha','barueri','bastos','batatais',\n 'bauru','bebedouro','bento-de-abreu','bernardino-de-campos','bertioga','bilac','birigui',\n 'biritiba-mirim','boa-esperanca-do-sul','bocaina','bofete','boituva','bom-jesus-dos-perdoes',\n 'bom-sucesso-de-itarare','bora','boraceia','borborema','borebi','botucatu','braganca-paulista',\n 'brauna','brejo-alegre','brodowski','brotas','buri','buritama','buritizal','cabralia-paulista',\n 'cabreuva','cacapava','cachoeira-paulista','caconde','cafelandia','caiabu','caieiras','caiua',\n 'cajamar','cajati','cajobi','cajuru','campina-do-monte-alegre','campinas','campo-limpo-paulista',\n 'campos-do-jordao','campos-novos-paulista','cananeia','canas','candido-mota','candido-rodrigues',\n 'canitar','capao-bonito','capela-do-alto','capivari','caraguatatuba','carapicuiba','cardoso',\n 'casa-branca','cassia-dos-coqueiros','castilho','catanduva','catigua','cedral','cerqueira-cesar',\n 'cerquilho','cesario-lange','charqueada','chavantes','clementina','colina','colombia','conchal',\n 'conchas','cordeiropolis','coroados','coronel-macedo','corumbatai','cosmopolis','cosmorama',\n 'cotia','cravinhos','cristais-paulista','cruzalia','cruzeiro','cubatao','cunha','descalvado',\n 'diadema','dirce-reis','divinolandia','dobrada','dois-corregos','dolcinopolis','dourado',\n 'dracena','duartina','dumont','echapora','eldorado','elias-fausto','elisiario','embauba',\n 'embu-das-artes','embuguacu','emilianopolis','engenheiro-coelho','espirito-santo-do-pinhal',\n 'espirito-santo-do-turvo','estiva-gerbi','estrela-do-norte','estrela-doeste',\n 'euclides-da-cunha-paulista','fartura','fernando-prestes','fernandopolis','fernao',\n 'ferraz-de-vasconcelos','flora-rica','floreal','florida-paulista','florinea','franca',\n 'francisco-morato','franco-da-rocha','gabriel-monteiro','galia','garca','gastao-vidigal',\n 'gaviao-peixoto','general-salgado','getulina','glicerio','guaicara','guaimbe','guaira',\n 'guapiacu','guapiara','guara','guaracai','guaraci','guarani-doeste','guaranta','guararapes',\n 'guararema','guaratingueta','guarei','guariba','guaruja','guarulhos','guatapara','guzolandia',\n 'herculandia','holambra','hortolandia','iacanga','iacri','iaras','ibate','ibira','ibirarema',\n 'ibitinga','ibiuna','icem','iepe','igaracu-do-tiete','igarapava','igarata','iguape',\n 'ilha-comprida','ilha-solteira','ilhabela','indaiatuba','indiana','indiapora','inubia-paulista',\n 'ipaussu','ipero','ipeuna','ipigua','iporanga','ipua','iracemapolis','irapua','irapuru',\n 'itabera','itai','itajobi','itaju','itanhaem','itaoca','itapecerica-da-serra','itapetininga',\n 'itapeva','itapevi','itapira','itapirapua-paulista','itapolis','itaporanga','itapui','itapura',\n 'itaquaquecetuba','itarare','itariri','itatiba','itatinga','itirapina','itirapua','itobi','itu',\n 'itupeva','ituverava','jaborandi','jaboticabal','jacarei','jaci','jacupiranga','jaguariuna',\n 'jales','jambeiro','jandira','jardinopolis','jarinu','jau','jeriquara','joanopolis',\n 'joao-ramalho','jose-bonifacio','julio-mesquita','jumirim','jundiai','junqueiropolis',\n 'juquia','juquitiba','lagoinha','laranjal-paulista','lavinia','lavrinhas','leme',\n 'lencois-paulista','limeira','lindoia','lins','lorena','lourdes','louveira','lucelia',\n 'lucianopolis','luis-antonio','luiziania','lupercio','lutecia','macatuba','macaubal',\n 'macedonia','magda','mairinque','mairipora','manduri','maraba-paulista','maracai','marapoama',\n 'mariapolis','marilia','marinopolis','martinopolis','matao','maua','mendonca','meridiano',\n 'mesopolis','miguelopolis','mineiros-do-tiete','mira-estrela','miracatu','mirandopolis',\n 'mirante-do-paranapanema','mirassol','mirassolandia','mococa','mogi-das-cruzes','mogi-guacu',\n 'mogi-mirim','mombuca','moncoes','mongagua','monte-alegre-do-sul','monte-alto',\n 'monte-aprazivel','monte-azul-paulista','monte-castelo','monte-mor','monteiro-lobato',\n 'morro-agudo','morungaba','motuca','murutinga-do-sul','nantes','narandiba',\n 'natividade-da-serra','nazare-paulista','neves-paulista','nhandeara','nipoa','nova-alianca',\n 'nova-campina','nova-canaa-paulista','nova-castilho','nova-europa','nova-granada',\n 'nova-guataporanga','nova-independencia','nova-luzitania','nova-odessa','novais',\n 'novo-horizonte','nuporanga','ocaucu','oleo','olimpia','onda-verde','oriente','orindiuva',\n 'orlandia','osasco','oscar-bressane','osvaldo-cruz','ourinhos','ouro-verde','ouroeste',\n 'pacaembu','palestina','palmares-paulista','palmeira-doeste','palmital','panorama',\n 'paraguacu-paulista','paraibuna','paraiso','paranapanema','paranapua','parapua','pardinho',\n 'pariqueraacu','parisi','patrocinio-paulista','pauliceia','paulinia','paulistania',\n 'paulo-de-faria','pederneiras','pedra-bela','pedranopolis','pedregulho','pedreira',\n 'pedrinhas-paulista','pedro-de-toledo','penapolis','pereira-barreto','pereiras','peruibe',\n 'piacatu','piedade','pilar-do-sul','pindamonhangaba','pindorama','pinhalzinho','piquerobi',\n 'piquete','piracaia','piracicaba','piraju','pirajui','pirangi','pirapora-do-bom-jesus',\n 'pirapozinho','pirassununga','piratininga','pitangueiras','planalto','platina','poa','poloni',\n 'pompeia','pongai','pontal','pontalinda','pontes-gestal','populina','porangaba','porto-feliz',\n 'porto-ferreira','potim','potirendaba','pracinha','pradopolis','praia-grande','pratania',\n 'presidente-alves','presidente-bernardes','presidente-epitacio','presidente-prudente',\n 'presidente-venceslau','promissao','quadra','quata','queiroz','queluz','quintana','rafard',\n 'rancharia','redencao-da-serra','regente-feijo','reginopolis','registro','restinga','ribeira',\n 'ribeirao-bonito','ribeirao-branco','ribeirao-corrente','ribeirao-do-sul','ribeirao-dos-indios',\n 'ribeirao-grande','ribeirao-pires','ribeirao-preto','rifaina','rincao','rinopolis','rio-claro',\n 'rio-das-pedras','rio-grande-da-serra','riolandia','riversul','rosana','roseira','rubiacea',\n 'rubineia','sabino','sagres','sales','sales-oliveira','salesopolis','salmourao','saltinho',\n 'salto','salto-de-pirapora','salto-grande','sandovalina','santa-adelia','santa-albertina',\n 'santa-barbara-doeste','santa-branca','santa-clara-doeste','santa-cruz-da-conceicao',\n 'santa-cruz-da-esperanca','santa-cruz-das-palmeiras','santa-cruz-do-rio-pardo',\n 'santa-ernestina','santa-fe-do-sul','santa-gertrudes','santa-isabel','santa-lucia',\n 'santa-maria-da-serra','santa-mercedes','santa-rita-do-passa-quatro','santa-rita-doeste',\n 'santa-rosa-de-viterbo','santa-salete','santana-da-ponte-pensa','santana-de-parnaiba',\n 'santo-anastacio','santo-andre','santo-antonio-da-alegria','santo-antonio-de-posse',\n 'santo-antonio-do-aracangua','santo-antonio-do-jardim','santo-antonio-do-pinhal',\n 'santo-expedito','santopolis-do-aguapei','santos','sao-bento-do-sapucai',\n 'sao-bernardo-do-campo','sao-caetano-do-sul','sao-carlos','sao-francisco',\n 'sao-joao-da-boa-vista','sao-joao-das-duas-pontes','sao-joao-de-iracema',\n 'sao-joao-do-pau-dalho','sao-joaquim-da-barra','sao-jose-da-bela-vista',\n 'sao-jose-do-barreiro','sao-jose-do-rio-pardo','sao-jose-do-rio-preto',\n 'sao-jose-dos-campos','sao-lourenco-da-serra','sao-luiz-do-paraitinga','sao-manuel',\n 'sao-miguel-arcanjo','sao-paulo','sao-pedro','sao-pedro-do-turvo','sao-roque',\n 'sao-sebastiao','sao-sebastiao-da-grama','sao-simao','sao-vicente','sarapui','sarutaia',\n 'sebastianopolis-do-sul','serra-azul','serra-negra','serrana','sertaozinho','sete-barras',\n 'severinia','silveiras','socorro','sorocaba','sud-mennucci','sumare','suzanapolis','suzano',\n 'tabapua','tabatinga','taboao-da-serra','taciba','taguai','taiacu','taiuva','tambau','tanabi',\n 'tapirai','tapiratiba','taquaral','taquaritinga','taquarituba','taquarivai','tarabai','taruma',\n 'tatui','taubate','tejupa','teodoro-sampaio','terra-roxa','tiete','timburi','torre-de-pedra',\n 'torrinha','trabiju','tremembe','tres-fronteiras','tuiuti','tupa','tupi-paulista','turiuba',\n 'turmalina','ubarana','ubatuba','ubirajara','uchoa','uniao-paulista','urania','uru','urupes',\n 'valentim-gentil','valinhos','valparaiso','vargem','vargem-grande-do-sul',\n 'vargem-grande-paulista','varzea-paulista','vera-cruz','vinhedo','viradouro',\n 'vista-alegre-do-alto','vitoria-brasil','votorantim','votuporanga','zacarias',\n ];\n\n // Só usado no ramo mock (ver mapColors) — referencia mockParties diretamente\n // em vez do `parties` reativo, que agora pode ficar vazio quando mock===false.\n const municipalityColorsBySP = spMunicipalities.map((name, i) => ({\n id: `${name}::sp`,\n color: mockParties[i % mockParties.length].color,\n }));\n\n const municipioOptions = $derived.by(() => {\n if (!mock && municipioData?.municipalities) {\n return municipioData.municipalities.map((m) => ({\n value: String(m.municipality_id),\n label: m.name,\n }));\n }\n return [];\n });\n\n function slugify(name: string): string {\n return name\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n }\n\n const bucketColors: Record<string, string> = {\n '0_25': '#D9D9D9',\n '26_60': '#A0A0A0',\n '61_99': '#5A5A5A',\n '100': '#1C1C1C',\n };\n\n const legendSegments = [\n { color: '#D9D9D9', label: '0 - 25%' },\n { color: '#A0A0A0', label: '26 - 60%' },\n { color: '#5A5A5A', label: '61 - 99%' },\n { color: '#1C1C1C', label: '100%' },\n ];\n\n function handleMapClick(info: { cid: string }) {\n const cid = info.cid ?? '';\n const [muniSlug] = cid.split('::');\n if (!muniSlug) return;\n\n const option = municipioOptions.find((o) => slugify(o.label) === muniSlug);\n if (option) {\n selectedMunicipio = selectedMunicipio === option.value ? null : option.value;\n }\n }\n\n // Cores do mapa: prioriza a apuração real (buckets de % de urnas apuradas, igual ao\n // componente 25); cai para a liderança por município. Sem mock, nunca cai no mock de\n // SP — se os dois falharem (ex.: by-municipality ainda sem publicação), o mapa fica\n // neutro, em vez de fingir que todo município já tem um resultado.\n const mapColors = $derived.by(() => {\n if (mock) return selectedUf === 'sp' ? municipalityColorsBySP : [];\n\n if (progressData?.regions?.length) {\n const uf = selectedUf || 'sp';\n return progressData.regions.map((region) => ({\n id: `${slugify(region.municipality_name ?? '')}::${uf}`,\n color: bucketColors[region.bucket] ?? '#D9D9D9',\n }));\n }\n if (municipalityData?.municipalities) {\n return municipalityData.municipalities.map((m: any) => ({\n id: `${m.municipality_name}::${selectedUf}`,\n color: m.leader.party_color,\n }));\n }\n return [];\n });\n\n const filterMeta = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(progressData?.last_updated)\n );\n\n const barItems = $derived.by(() => {\n if (mock) {\n return [\n { label: 'Candidato A (ABC)', value: 32, color: '#16a34a' },\n { label: 'Candidato B (DEF)', value: 24, color: 'var(--sevn-color-primary)' },\n { label: 'Candidato C (GHI)', value: 11, color: '#1e4d6b' },\n { label: 'Candidato D (JKL)', value: 8, color: '#0f172a' },\n { label: 'Nenhum/ Nulo', value: 20, color: '#c7c7d0' },\n { label: 'Não sabe/ Não opinou', value: 5, color: '#e5e5ea' },\n ];\n }\n\n // Município específico selecionado: mostra o resultado real dele (líder x vice), em %.\n if (selectedMunicipio && scopedMunicipalities.length === 1) {\n const m = scopedMunicipalities[0];\n return [m.leader, m.runner_up]\n .filter(Boolean)\n .sort((a, b) => b.valid_votes_pct - a.valid_votes_pct)\n .map((c) => ({\n label: `${toTitleCase(c.name)} (${c.party_abbr})`,\n value: c.valid_votes_pct,\n color: c.party_color,\n }));\n }\n\n // Sem município selecionado: ranking de quantos municípios cada partido lidera no estado.\n if (scopedMunicipalities.length) {\n const counts: Record<string, { count: number; color: string; abbr: string }> = {};\n\n scopedMunicipalities.forEach((m: any) => {\n const key = m.leader.party_abbr;\n if (!counts[key]) {\n counts[key] = { count: 0, color: m.leader.party_color, abbr: key };\n }\n counts[key].count++;\n });\n\n const sorted = Object.values(counts)\n .sort((a, b) => b.count - a.count)\n .slice(0, 4);\n\n return sorted.map((item) => ({\n label: `${candidateNameByParty[item.abbr] ?? ''} (${item.abbr})`,\n value: item.count,\n color: item.color,\n }));\n }\n\n // Dado real ausente (endpoint sem publicação ainda): não inventa ranking fictício.\n return [];\n });\n</script>\n\n<div class=\"sevn_election_status\" class:sevn_election_status--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_election_status__office-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_election_status__office-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n\n {#if selectedOffice}\n <div class=\"sevn_election_status__filter\">\n <Autocomplete\n label={selectedUf ? 'Você selecionou' : 'Busque por estado'}\n options={ufOptions}\n bind:value={selectedUf}\n />\n </div>\n {/if}\n\n {#if selectedOffice && selectedUf}\n <div class=\"sevn_election_status__filter\">\n <Autocomplete\n label={selectedMunicipio ? 'Você selecionou' : 'Busque por município'}\n options={municipioOptions}\n bind:value={selectedMunicipio}\n />\n </div>\n {/if}\n\n {#if selectedOffice && selectedUf }\n <div class=\"sevn_election_status__body\">\n <div class=\"sevn_election_status__left\" bind:clientHeight={leftHeight}>\n <p class=\"sevn_election_status__desc\">\n Confira quais partidos lideram a apuração para {selectedOfficeLabel.toLowerCase()} nas diferentes regiões do Estado {selectedUfWithPreposition}.\n </p>\n\n <div class=\"sevn_election_status__map\">\n <Map\n type=\"state\"\n uf={selectedUf ?? 'sp'}\n colors={mapColors}\n onRegionClick={handleMapClick}\n selectionStroke=\"#00000033\"\n />\n </div>\n\n <div class=\"sevn_election_status__legend\">\n <MapLegend\n title=\"Porcentagem das urnas apuradas:\"\n segments={legendSegments}\n />\n </div>\n\n <div class=\"sevn_election_status__tags\">\n {#each parties as p}\n <Tag label={p.tag} color={p.color} />\n {/each}\n </div>\n\n <p class=\"sevn_election_status__source\">\n {filterMeta}\n </p>\n </div>\n\n <div class=\"sevn_election_status__right\">\n <BarChart\n items={barItems}\n unit=\"%\"\n {visibleCount}\n {colWidth}\n {trackHeight}\n />\n </div>\n </div>\n {/if}\n</div>\n\n<style>\n .sevn_election_status {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_election_status--raw,\n .sevn_election_status--raw * {\n all: revert;\n }\n\n /* Body: two columns on web */\n .sevn_election_status__body {\n display: flex;\n gap: 40px;\n align-items: stretch;\n }\n\n .sevn_election_status__left {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 0 0 38%;\n }\n\n .sevn_election_status__right {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: flex-end;\n }\n\n /* Description text */\n .sevn_election_status__desc {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n line-height: 1.5;\n margin: 0;\n }\n\n /* Source / footer */\n .sevn_election_status__source {\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n margin: 0;\n line-height: 1.4;\n }\n\n /* Tags row */\n .sevn_election_status__tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .sevn_election_status__office-web {\n display: none;\n }\n\n .sevn_election_status__office-mobile {\n display: block;\n width: 220px;\n }\n\n @media (min-width: 769px) {\n .sevn_election_status__office-web {\n display: block;\n }\n\n .sevn_election_status__office-mobile {\n display: none;\n }\n }\n\n /* Mobile */\n @media (max-width: 768px) {\n .sevn_election_status__filter :global(.dropdown),\n .sevn_election_status__office-mobile :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_election_status__body {\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_election_status__left {\n flex: unset;\n width: 100%;\n }\n\n /* Hide map (e legenda associada) on mobile */\n .sevn_election_status__map,\n .sevn_election_status__legend {\n display: none;\n }\n\n .sevn_election_status__right {\n overflow-x: auto;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateResultsByMunicipalityProps } from './props';\n import { Header, Autocomplete, Map, TableCandidate } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getElectionResults, getMunicipalityResults, getCitiesIndex } from '$services/api';\n import type { ElectionResults, MunicipalityResults, CitiesIndex } from '$services/types';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n header = {\n title: 'Consulte o desempenho dos candidatos por município',\n description: 'Resultados presidenciais por município, em tempo real'\n }\n }: CandidateResultsByMunicipalityProps = $props();\n\n let electionData: ElectionResults | null = $state(null);\n\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n let searchWebEl = $state<HTMLDivElement | null>(null);\n let searchMobileEl = $state<HTMLDivElement | null>(null);\n\n // O SVG do mapa \"brazil\" já é por município (data-cid=\"nome-do-municipio::uf\"),\n // no mesmo formato usado pelo citiesIndex — dá pra resolver o município\n // direto do hover/clique, sem precisar de um segundo mapa por estado.\n let hoveredCid = $state<string | null>(null);\n let pinnedCid = $state<string | null>(null);\n\n const displayCid = $derived(pinnedCid ?? hoveredCid);\n\n // Busca nacional por município (docs/cities-by-cids-v2.json) — usada tanto\n // pra resolver o cid do hover/clique no mapa quanto pro autocomplete de busca.\n let citiesIndex: CitiesIndex | null = $state(null);\n\n $effect(() => {\n getCitiesIndex()\n .then((data: CitiesIndex) => { citiesIndex = data; })\n .catch((err: any) => { console.error('Failed to fetch cities index:', err); });\n });\n\n const municipioOptions = $derived.by(() => {\n const index = citiesIndex;\n if (!index) return [];\n return Object.values(index)\n .map((c: any) => ({ value: c.cid, label: `${c.name} - ${c.uf}` }))\n .sort((a, b) => a.label.localeCompare(b.label));\n });\n\n const displayCityName = $derived(\n displayCid ? (citiesIndex?.[displayCid]?.name ?? '') : ''\n );\n\n // Busca por `displayCid` (hover OU fixado) — evita mostrar o título certo com\n // dado de outro município. Debounce evita disparar uma busca a cada pixel do\n // mouse varrendo o mapa; o contador de geração descarta respostas fora de ordem.\n let fetchGen = 0;\n $effect(() => {\n if (mock) return;\n const cid = displayCid;\n const city = cid ? citiesIndex?.[cid] : null;\n const timer = setTimeout(() => {\n const gen = ++fetchGen;\n if (!city) {\n if (gen === fetchGen) electionData = null;\n return;\n }\n getElectionResults(year, { office: 'president', round: 1, state: city.uf, municipalityId: city.id })\n .then((data: ElectionResults) => { if (gen === fetchGen) electionData = data; })\n .catch((err: any) => { console.error('Failed to fetch election results:', err); });\n }, 200);\n return () => clearTimeout(timer);\n });\n\n // true só quando o pin acabou de ser setado por um clique real no mapa (que já\n // calcula overlayX/Y a partir da posição do clique); usado pra distinguir do\n // pin vindo do Autocomplete, que não tem coordenada de mouse nenhuma.\n let pinnedViaClick = false;\n\n $effect(() => {\n if (!pinnedCid) return;\n if (pinnedViaClick) { pinnedViaClick = false; return; }\n // Veio do dropdown, não de um clique: centraliza o modal sobre o mapa em vez\n // de deixá-lo na última posição de mouse (ou em 0,0 se nunca houve hover).\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = rect.width / 2;\n overlayY = rect.height / 2;\n }\n });\n\n let selectedCid = $state<string | null>(null);\n\n $effect(() => {\n if (!selectedCid) return;\n pinnedCid = selectedCid;\n });\n\n const partyColors: Record<string, string> = {\n ABC: 'var(--sevn-color-primary)',\n DEF: '#d97706',\n GHI: '#1e4d6b',\n JKL: '#0f172a',\n MNO: '#16a34a',\n PQR: '#e11d48',\n };\n\n const stateWinners: Record<string, string> = {\n sp: 'ABC', rj: 'ABC', sc: 'ABC', pr: 'ABC', rs: 'ABC', es: 'ABC', df: 'ABC', go: 'ABC',\n am: 'DEF', rr: 'DEF', ro: 'DEF', ac: 'DEF', ap: 'DEF', pa: 'DEF', ma: 'DEF',\n to: 'DEF', pi: 'DEF', ce: 'DEF', pb: 'DEF', rn: 'DEF', ba: 'DEF',\n mg: 'GHI', pe: 'GHI', al: 'GHI', se: 'GHI',\n ms: 'JKL', mt: 'JKL',\n };\n\n const mockCandidates = [\n { name: 'Candidato A', party: 'ABC', percentage: 54.1, votes: 1728159, color: partyColors.ABC, elected: true },\n { name: 'Candidato B', party: 'DEF', percentage: 43.1, votes: 1377441, color: partyColors.DEF },\n { name: 'Candidato C', party: 'GHI', percentage: 1.1, votes: 35623, color: partyColors.GHI },\n { name: 'Candidato D', party: 'JKL', percentage: 0.7, votes: 21439, color: partyColors.JKL },\n { name: 'Candidato E', party: 'MNO', percentage: 0.5, votes: 17344, color: partyColors.MNO },\n { name: 'Candidato F', party: 'PQR', percentage: 0.2, votes: 5149, color: partyColors.PQR },\n ];\n\n const ALL_UFS = [\n 'ac', 'al', 'am', 'ap', 'ba', 'ce', 'df', 'es', 'go', 'ma', 'mg', 'ms',\n 'mt', 'pa', 'pb', 'pe', 'pi', 'pr', 'rj', 'rn', 'ro', 'rr', 'rs', 'sc',\n 'se', 'sp', 'to',\n ];\n\n // by-municipality.json só cobre os municípios \"selecionados\" de cada UF (ex.:\n // SP retorna 100 de 645) — não existe endpoint nacional único por município.\n // Busca as 27 UFs em paralelo pra colorir cada município com o líder real\n // dele; quem não está nessa lista fica com o preenchimento neutro padrão do\n // mapa, em vez de herdar (incorretamente) a cor do estado inteiro.\n let municipalityResultsByUf: Record<string, MunicipalityResults> = $state({});\n\n $effect(() => {\n if (mock) return;\n Promise.allSettled(\n ALL_UFS.map((uf) =>\n getMunicipalityResults(year, 'president', 1, uf).then((data: MunicipalityResults) => [uf, data] as const)\n )\n ).then((results) => {\n const byUf: Record<string, MunicipalityResults> = {};\n for (const r of results) {\n if (r.status === 'fulfilled') {\n const [uf, data] = r.value;\n byUf[uf] = data;\n } else {\n console.error('Failed to fetch municipality results:', r.reason);\n }\n }\n municipalityResultsByUf = byUf;\n });\n });\n\n // Índice nacional de cidades já traz o municipality_id (código IBGE) de cada\n // uma — usa isso pra resolver o cid do mapa (`nome-do-municipio::uf`) em vez\n // de reimplementar um slugify próprio, evitando qualquer divergência entre os dois.\n const cidByMunicipalityId = $derived.by(() => {\n const map: Record<number, string> = {};\n if (citiesIndex) {\n for (const c of Object.values(citiesIndex) as CitiesIndex[string][]) {\n map[c.id] = c.cid;\n }\n }\n return map;\n });\n\n const mapColors = $derived.by(() => {\n if (mock) {\n return Object.entries(stateWinners).map(([uf, party]) => ({\n id: uf,\n match: 'endsWith' as const,\n color: partyColors[party],\n }));\n }\n const colors: { id: string; color: string }[] = [];\n for (const data of Object.values(municipalityResultsByUf)) {\n for (const m of data.municipalities) {\n const cid = cidByMunicipalityId[m.municipality_id];\n if (cid && m.leader?.party_color) {\n colors.push({ id: cid, color: m.leader.party_color });\n }\n }\n }\n return colors;\n });\n\n function toTitleCase(str: string): string {\n const lowercaseWords = new Set(['da', 'de', 'do', 'das', 'dos', 'e']);\n return str\n .toLowerCase()\n .split(' ')\n .map((word, i) => (i > 0 && lowercaseWords.has(word)) ? word : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n\n const selectedMunicipioCandidates = $derived.by(() => {\n if (!mock && electionData?.candidates) {\n return electionData.candidates.map((c: any) => ({\n name: toTitleCase(c.ballot_name),\n party: c.party_abbr,\n percentage: c.valid_votes_pct,\n votes: c.votes,\n color: c.party_color,\n elected: c.elected ?? false,\n }));\n }\n if (mock) return mockCandidates;\n return [];\n });\n\n const updatedMeta = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(electionData?.summary?.last_updated)\n );\n\n function handleRegionHover(info: { cid: string; clientX: number; clientY: number }) {\n hoveredCid = info.cid ?? null;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedCid === info.cid) {\n pinnedCid = null;\n selectedCid = null;\n } else {\n pinnedViaClick = true;\n pinnedCid = info.cid;\n // Clique direto no mapa não corresponde a nenhum município buscado —\n // limpa a busca pra não ficar mostrando uma cidade errada como \"selecionada\".\n selectedCid = null;\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n // Autocomplete (busca por município) também dispara isso via selectedCid → pinnedCid\n // — precisa contar como \"dentro\" e adiar o registro pro próximo tick, senão o\n // próprio clique que escolhe um município se autoanula (mesmo bug já corrigido\n // no componente-05: o Autocomplete fecha o dropdown no mesmo clique que seleciona).\n $effect(() => {\n if (!pinnedCid) return;\n\n function handleOutsideClick(e: MouseEvent) {\n const target = e.target as Node;\n const insideMap = mapWebEl?.contains(target);\n const insideSearch = searchWebEl?.contains(target) || searchMobileEl?.contains(target);\n if (!insideMap && !insideSearch) {\n pinnedCid = null;\n selectedCid = null;\n }\n }\n\n const timer = setTimeout(() => {\n document.addEventListener('click', handleOutsideClick);\n }, 0);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('click', handleOutsideClick);\n };\n });\n</script>\n\n<div class=\"sevn_candidate_results\" class:sevn_candidate_results--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: search above map -->\n <div class=\"sevn_candidate_results__filter-web\" bind:this={searchWebEl}>\n <Autocomplete\n label=\"Busque por município\"\n options={municipioOptions}\n bind:value={selectedCid}\n />\n </div>\n\n <!-- Web: map + overlay -->\n <div class=\"sevn_candidate_results__map-web\" bind:this={mapWebEl} onmouseleave={() => hoveredCid = null} role=\"presentation\">\n <Map\n type=\"brazil\"\n colors={mapColors}\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n\n {#if displayCid}\n <div class=\"sevn_candidate_results__modal\" style=\"left:{overlayX}px;top:{overlayY}px\">\n <TableCandidate\n title=\"Candidatos: {displayCityName}\"\n candidates={selectedMunicipioCandidates}\n />\n </div>\n {/if}\n </div>\n\n <!-- Mobile section -->\n <div class=\"sevn_candidate_results__mobile\">\n <p class=\"sevn_candidate_results__overview-label\">Visão geral:</p>\n\n <div class=\"sevn_candidate_results__map-mobile\">\n <Map type=\"brazil\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_candidate_results__filter-mobile\" bind:this={searchMobileEl}>\n <Autocomplete\n label={selectedCid ? 'Você selecionou:' : 'Busque por município:'}\n options={municipioOptions}\n bind:value={selectedCid}\n />\n </div>\n\n {#if pinnedCid}\n <TableCandidate\n title=\"Candidatos: {citiesIndex?.[pinnedCid]?.name ?? ''}\"\n candidates={selectedMunicipioCandidates}\n />\n <p class=\"sevn_candidate_results__source\">\n {updatedMeta}\n </p>\n {/if}\n </div>\n</div>\n\n<style>\n .sevn_candidate_results {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_results--raw,\n .sevn_candidate_results--raw * {\n all: revert;\n }\n\n /* ── Web elements: hidden on mobile ─────────────────── */\n .sevn_candidate_results__filter-web { display: none; }\n .sevn_candidate_results__map-web { display: none; }\n\n /* ── Mobile section ──────────────────────────────────── */\n .sevn_candidate_results__mobile {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .sevn_candidate_results__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_candidate_results__map-mobile {\n width: 100%;\n }\n\n .sevn_candidate_results__filter-mobile {\n width: 100%;\n }\n\n .sevn_candidate_results__filter-mobile :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_candidate_results__source {\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.55;\n margin: 0;\n line-height: 1.4;\n }\n\n /* ── Desktop ─────────────────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_candidate_results__filter-web { display: block; }\n .sevn_candidate_results__map-web {\n display: block;\n position: relative;\n }\n .sevn_candidate_results__mobile { display: none; }\n }\n\n /* ── Floating modal ──────────────────────────────────── */\n .sevn_candidate_results__modal {\n position: absolute;\n z-index: 10;\n transform: translate(-50%, 12px);\n pointer-events: auto;\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n width: 500px;\n max-height: 240px;\n overflow-y: auto;\n border-radius: 12px;\n scrollbar-width: thin;\n scrollbar-color: #d1d1d6 transparent;\n }\n\n \n \n\n /* ── Raw ─────────────────────────────────────────────── */\n .sevn_candidate_results--raw,\n .sevn_candidate_results--raw * {\n all: revert;\n }\n</style>\n","<script lang=\"ts\">\n import type { MunicipalityPerfomanceMapProps } from './props';\n import { Header, Map, CandidateVotesRanking, TableCandidate } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getMunicipalityResults, getStateResults, getCitiesIndex } from '$services/api';\n import type { ElectionResults, MunicipalityResults, StateResults, CitiesIndex } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n data = null,\n year = 2026,\n header = {\n title: 'Consulte o desempenho dos candidatos por município',\n description: 'Resultados presidenciais por município, em tempo real'\n }\n }: MunicipalityPerfomanceMapProps = $props();\n\n const partyColors = {\n ABC: '#d97706',\n DEF: '#1e4d6b',\n GHI: '#1e3461',\n JKL: '#0f172a',\n MNO: '#e11d48',\n };\n\n const mockStateWinners = {\n am: 'ABC', rr: 'ABC', ro: 'ABC', ac: 'ABC', ap: 'ABC', pa: 'ABC',\n to: 'ABC', ma: 'ABC', pi: 'ABC', ce: 'ABC', mt: 'ABC', go: 'ABC',\n sp: 'DEF', pr: 'DEF', sc: 'DEF', rs: 'DEF', mg: 'DEF', rj: 'DEF',\n es: 'DEF', ba: 'DEF',\n pe: 'GHI', pb: 'GHI', rn: 'GHI', al: 'GHI',\n ms: 'JKL', df: 'JKL',\n se: 'MNO',\n };\n\n const mockCandidates = [\n { name: 'Candidato A', tag: 'ABC', dotColor: partyColors.ABC, tagColor: partyColors.ABC, votes: '42,8%' },\n { name: 'Candidato B', tag: 'DEF', dotColor: partyColors.DEF, tagColor: partyColors.DEF, votes: '31,4%' },\n { name: 'Candidato C', tag: 'GHI', dotColor: partyColors.GHI, tagColor: partyColors.GHI, votes: '12,6%' },\n { name: 'Candidato D', tag: 'JKL', dotColor: partyColors.JKL, tagColor: partyColors.JKL, votes: '6,7%' },\n { name: 'Candidato E', tag: 'MNO', dotColor: partyColors.MNO, tagColor: partyColors.MNO, votes: '4,1%' },\n ];\n\n // getElectionResults (usado no ranking nacional ao lado) não tem quebra por\n // estado — busca getStateResults à parte só pra colorir o mapa com o líder\n // real de cada estado (mesmo padrão do componente-23).\n let stateResultsData: StateResults | null = $state(null);\n\n $effect(() => {\n if (mock) return;\n getStateResults(year, 'president', 1)\n .then((data: StateResults) => { stateResultsData = data; })\n .catch((err: any) => { console.error('Failed to fetch state results:', err); });\n });\n\n const mapColors = $derived.by(() => {\n if (mock) {\n return Object.entries(mockStateWinners).map(([uf, party]) => ({\n id: uf,\n match: 'endsWith' as const,\n color: partyColors[party as keyof typeof partyColors],\n }));\n }\n if (!stateResultsData?.states) return [];\n return stateResultsData.states\n .filter((s: any) => s.leader?.party_color)\n .map((s: any) => ({\n id: s.state.toLowerCase(),\n match: 'endsWith' as const,\n color: s.leader.party_color,\n }));\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n if (!(data as ElectionResults | null)?.candidates) return [];\n return (data as ElectionResults).candidates.map((c: any) => ({\n name: toTitleCase(c.ballot_name),\n tag: c.party_abbr,\n dotColor: c.party_color,\n tagColor: c.party_color,\n votes: `${c.valid_votes_pct.toFixed(1)}%`,\n elected: c.elected,\n }));\n });\n\n const totalVotes = $derived.by(() => {\n if (mock) return '118.552.353';\n if (!(data as ElectionResults | null)?.summary) return null;\n return (data as ElectionResults).summary.total_valid_votes.toLocaleString('pt-BR');\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate((data as ElectionResults | null)?.summary?.last_updated)\n );\n\n const ufs = [\n { value: 'ac', label: 'Acre' }, { value: 'al', label: 'Alagoas' },\n { value: 'am', label: 'Amazonas' }, { value: 'ap', label: 'Amapá' },\n { value: 'ba', label: 'Bahia' }, { value: 'ce', label: 'Ceará' },\n { value: 'df', label: 'Distrito Federal' }, { value: 'es', label: 'Espírito Santo' },\n { value: 'go', label: 'Goiás' }, { value: 'ma', label: 'Maranhão' },\n { value: 'mg', label: 'Minas Gerais' }, { value: 'ms', label: 'Mato Grosso do Sul' },\n { value: 'mt', label: 'Mato Grosso' }, { value: 'pa', label: 'Pará' },\n { value: 'pb', label: 'Paraíba' }, { value: 'pe', label: 'Pernambuco' },\n { value: 'pi', label: 'Piauí' }, { value: 'pr', label: 'Paraná' },\n { value: 'rj', label: 'Rio de Janeiro' }, { value: 'rn', label: 'Rio Grande do Norte' },\n { value: 'ro', label: 'Rondônia' }, { value: 'rr', label: 'Roraima' },\n { value: 'rs', label: 'Rio Grande do Sul' }, { value: 'sc', label: 'Santa Catarina' },\n { value: 'se', label: 'Sergipe' }, { value: 'sp', label: 'São Paulo' },\n { value: 'to', label: 'Tocantins' },\n ];\n\n function getStateName(uf: string) {\n return ufs.find(u => u.value === uf)?.label ?? uf.toUpperCase();\n }\n\n let selectedCid = $state<string | null>(null);\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedCid = $state<string | null>(null);\n let pinnedX = $state(0);\n let pinnedY = $state(0);\n\n function formatMunicipioName(slug: string) {\n return slug.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n }\n\n function parseCid(cid: string | null) {\n if (!cid) return null;\n const [first, second] = cid.split('::');\n return second ? { uf: second, municipio: first } : { uf: first, municipio: undefined as string | undefined };\n }\n\n const displayRegion = $derived(parseCid(pinnedCid ?? selectedCid));\n const displayUf = $derived(displayRegion?.uf ?? null);\n const selectedTitle = $derived(\n !displayRegion ? '' :\n displayRegion.municipio\n ? `Resultados: ${formatMunicipioName(displayRegion.municipio)} - ${displayRegion.uf.toUpperCase()}`\n : `Resultados: ${getStateName(displayRegion.uf)}`\n );\n\n // Índice nacional de municípios (mesmo do componente-23) — resolve o cid do\n // mapa (ex.: \"aparecida-doeste::sp\") pro municipality_id (IBGE), que é como\n // o by-municipality.json identifica cada município.\n let citiesIndex: CitiesIndex | null = $state(null);\n\n $effect(() => {\n getCitiesIndex()\n .then((data: CitiesIndex) => { citiesIndex = data; })\n .catch((err: any) => { console.error('Failed to fetch cities index:', err); });\n });\n\n // by-municipality.json é por UF — busca (debounced) toda vez que o estado em\n // foco muda; hover/clique num município diferente dentro do MESMO estado\n // reusa a resposta (o RequestCache já cacheia por URL).\n let municipalityResultsData: MunicipalityResults | null = $state(null);\n let fetchGen = 0;\n\n $effect(() => {\n if (mock || !displayUf) { municipalityResultsData = null; return; }\n const uf = displayUf;\n const timer = setTimeout(() => {\n const gen = ++fetchGen;\n getMunicipalityResults(year, 'president', 1, uf)\n .then((data: MunicipalityResults) => { if (gen === fetchGen) municipalityResultsData = data; })\n .catch((err: any) => { console.error('Failed to fetch municipality results:', err); });\n }, 200);\n return () => clearTimeout(timer);\n });\n\n // Antes o card sempre mostrava `data.candidates` (nacional) com o título do\n // que fosse hover/clicado — mostrava o local certo com o número errado. Agora\n // busca o líder/vice reais: por município (via by-municipality.json + índice\n // de cidades) ou por estado inteiro (via stateResultsData, o mesmo do mapa).\n const tableData = $derived.by(() => {\n if (mock) {\n return mockCandidates.map(c => ({\n name: c.name,\n party: c.tag,\n percentage: parseFloat(String(c.votes).replace(',', '.')),\n votes: 0,\n color: c.dotColor,\n }));\n }\n if (!displayRegion) return [];\n\n if (displayRegion.municipio) {\n const cid = `${displayRegion.municipio}::${displayRegion.uf}`;\n const cityId = citiesIndex?.[cid]?.id;\n const m = cityId\n ? municipalityResultsData?.municipalities?.find((mm: any) => mm.municipality_id === cityId)\n : undefined;\n if (!m?.leader || !m?.runner_up) return [];\n return [m.leader, m.runner_up].map((c: any) => ({\n name: toTitleCase(c.name),\n party: c.party_abbr,\n percentage: c.valid_votes_pct,\n votes: c.votes,\n color: c.party_color,\n elected: c.elected ?? false,\n }));\n }\n\n const state = stateResultsData?.states?.find((s: any) => s.state.toLowerCase() === displayRegion.uf);\n if (!state?.leader || !state?.runner_up) return [];\n return [state.leader, state.runner_up].map((c: any) => ({\n name: toTitleCase(c.name),\n party: c.party_abbr,\n percentage: c.valid_votes_pct,\n votes: c.votes,\n color: c.party_color,\n elected: c.elected ?? false,\n }));\n });\n\n function handleRegionHover(info: { cid: string; uf?: string; clientX: number; clientY: number }) {\n selectedCid = info.cid;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; uf?: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedCid === info.cid) {\n pinnedCid = null;\n } else {\n pinnedCid = info.cid;\n pinnedX = info.clientX - rect.left;\n pinnedY = info.clientY - rect.top;\n }\n }\n\n $effect(() => {\n if (!pinnedCid) return;\n function handleOutsideClick(e: MouseEvent) {\n if (mapWebEl && !mapWebEl.contains(e.target as Node)) {\n pinnedCid = null;\n }\n }\n document.addEventListener('click', handleOutsideClick);\n return () => document.removeEventListener('click', handleOutsideClick);\n });\n</script>\n\n<div class=\"sevn_municipality_map\" class:sevn_municipality_map--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_municipality_map__body\">\n <div class=\"sevn_municipality_map__map\" bind:this={mapWebEl} onmouseleave={() => selectedCid = null} role=\"presentation\">\n <Map\n type=\"brazil\"\n colors={mapColors}\n aspectRatio=\"16:9\"\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n {#if displayUf}\n <div class=\"sevn_municipality_map__table-overlay\" style=\"left:{overlayX}px;top:{overlayY}px\">\n <TableCandidate title={selectedTitle} candidates={tableData} />\n </div>\n {/if}\n </div>\n\n <div class=\"sevn_municipality_map__ranking\">\n <CandidateVotesRanking\n candidates={candidates}\n totalVotes={totalVotes}\n date={lastUpdate}\n font=\"TSE\"\n />\n </div>\n </div>\n</div>\n\n<style>\n .sevn_municipality_map {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_municipality_map--raw,\n .sevn_municipality_map--raw * {\n all: revert;\n }\n\n .sevn_municipality_map__body {\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n\n .sevn_municipality_map__map {\n width: 100%;\n position: relative;\n }\n\n .sevn_municipality_map__table-overlay {\n position: absolute;\n z-index: 10;\n width: 500px;\n transform: translate(-50%, 12px);\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n pointer-events: none;\n }\n\n .sevn_municipality_map__table-overlay :global(.table-candidate-content) {\n display: grid;\n grid-template-columns: 1fr 80px 160px;\n align-items: center;\n gap: 0;\n }\n\n .sevn_municipality_map__table-overlay :global(.table-candidate-percent) {\n text-align: right;\n }\n\n .sevn_municipality_map__table-overlay :global(.table-candidate-votes) {\n flex-basis: auto;\n margin-top: 0;\n text-align: right;\n }\n\n .sevn_municipality_map__ranking {\n width: 100%;\n }\n\n .sevn_municipality_map :global(.vote-overview) {\n padding: 10px 0;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_municipality_map :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n \n\n @media (min-width: 768px) {\n .sevn_municipality_map__body {\n flex-direction: row;\n align-items: center;\n gap: 48px;\n }\n\n .sevn_municipality_map__map {\n flex: 0 0 45%;\n }\n\n .sevn_municipality_map__ranking {\n flex: 1;\n }\n\n .sevn_municipality_map :global(.vote-overview) {\n gap: 8px;\n padding: 0.5rem 0;\n align-items: flex-end;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateByStateProps } from './props';\n import { Header, Map, Tag, Autocomplete, Candidate } from '$lib';\n import type { HeaderProps } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n data = null,\n year = 2026,\n header = {\n title: 'Governador por Estado',\n description: 'Você pode interagir com o mapa para ver o resultado por estado'\n },\n }: CandidateByStateProps = $props();\n\n const mockParties = [\n { id: 'ABC', color: '#1e3461' },\n { id: 'DEF', color: '#1e4d6b' },\n { id: 'GHI', color: '#d97706' },\n { id: 'JKL', color: '#0f172a' },\n { id: 'MNO', color: '#16a34a' },\n { id: 'PQR', color: '#e11d48' },\n ];\n\n const partyColorMap: Record<string, string> = Object.fromEntries(mockParties.map((p) => [p.id, p.color]));\n\n const parties = $derived.by(() => {\n if (mock) return mockParties;\n const seen = new Set<string>();\n const result: Array<{ id: string; color: string }> = [];\n for (const state of (data?.states ?? [])) {\n const abbr = state.leader?.party_abbr;\n if (abbr && !seen.has(abbr)) {\n seen.add(abbr);\n result.push({ id: abbr, color: state.leader.party_color });\n }\n }\n return result.sort((a, b) => a.id.localeCompare(b.id, 'pt-BR'));\n });\n\n const stateWinners: Record<string, string> = {\n sp: 'ABC', ac: 'ABC', ro: 'ABC', to: 'ABC', pb: 'ABC', pi: 'ABC',\n am: 'DEF', pa: 'DEF', ap: 'DEF', ba: 'DEF', ma: 'DEF', mg: 'DEF', rj: 'DEF',\n mt: 'GHI', go: 'GHI', ms: 'GHI', es: 'GHI', pr: 'GHI', sc: 'GHI',\n rs: 'JKL', df: 'JKL', al: 'JKL', se: 'JKL',\n rn: 'MNO', ce: 'MNO',\n rr: 'PQR', pe: 'PQR',\n };\n\n const stateNames: Record<string, string> = {\n ac: 'Acre', al: 'Alagoas', am: 'Amazonas', ap: 'Amapá', ba: 'Bahia',\n ce: 'Ceará', df: 'Distrito Federal', es: 'Espírito Santo', go: 'Goiás',\n ma: 'Maranhão', mg: 'Minas Gerais', ms: 'Mato Grosso do Sul', mt: 'Mato Grosso',\n pa: 'Pará', pb: 'Paraíba', pe: 'Pernambuco', pi: 'Piauí', pr: 'Paraná',\n rj: 'Rio de Janeiro', rn: 'Rio Grande do Norte', ro: 'Rondônia', rr: 'Roraima',\n rs: 'Rio Grande do Sul', sc: 'Santa Catarina', se: 'Sergipe', sp: 'São Paulo', to: 'Tocantins',\n };\n\n const partyCandidates: Record<string, { name: string; description: string }> = {\n ABC: { name: 'Candidato A', description: '41,8% dos votos válidos' },\n DEF: { name: 'Candidato B', description: '38,2% dos votos válidos' },\n GHI: { name: 'Candidato C', description: '52,4% dos votos válidos' },\n JKL: { name: 'Candidato D', description: '34,7% dos votos válidos' },\n MNO: { name: 'Candidato E', description: '41,2% dos votos válidos' },\n PQR: { name: 'Candidato F', description: '29,5% dos votos válidos' },\n };\n\n // Sem mock: só colore estados que já estão em `data.states` (a API publica\n // parte por vez). Se `data` falhar por inteiro, o mapa fica neutro, não usa\n // o `stateWinners` fixo.\n const mapColors = $derived.by(() => {\n if (mock) {\n return Object.entries(stateWinners).map(([uf, party]) => ({\n id: uf,\n color: partyColorMap[party],\n }));\n }\n return (data?.states ?? []).map((state: any) => ({\n id: state.state.toLowerCase(),\n color: state.leader.party_color,\n }));\n });\n\n const modalData = $derived.by(() => {\n if (mock) {\n return Object.fromEntries(\n Object.entries(stateWinners).map(([uf, party]) => {\n const candidate = partyCandidates[party];\n return [\n uf,\n {\n title: stateNames[uf],\n footer: `Última atualização: ${MOCK_UPDATE}`,\n items: [{\n name: candidate.name,\n tag: party,\n tagColor: partyColorMap[party],\n avatarColor: partyColorMap[party],\n description: candidate.description,\n }],\n },\n ];\n })\n );\n }\n\n // Sem mock: só monta entrada para estados presentes em `data.states`. Um\n // estado ausente simplesmente não aparece aqui — o template já trata isso\n // (`{#if displayUf && selectedModal}`), sem overlay nenhum em vez de fake.\n const stateMap: Record<string, any> = {};\n for (const state of data?.states ?? []) {\n const uf = state.state.toLowerCase();\n stateMap[uf] = {\n title: stateNames[uf],\n footer: `Última atualização: ${formatUpdate(data.last_updated)}`,\n items: [{\n name: toTitleCase(state.leader.name),\n photoUrl: state.leader.photo_url,\n tag: state.leader.party_abbr,\n tagColor: state.leader.party_color,\n avatarColor: state.leader.party_color,\n description: `${state.leader.valid_votes_pct.toFixed(1)}% dos votos válidos`,\n }],\n };\n }\n return stateMap;\n });\n\n const ufOptions = [\n { label: 'Acre AC', value: 'ac' },\n { label: 'Alagoas AL', value: 'al' },\n { label: 'Amapá AP', value: 'ap' },\n { label: 'Amazonas AM', value: 'am' },\n { label: 'Bahia BA', value: 'ba' },\n { label: 'Ceará CE', value: 'ce' },\n { label: 'Distrito Federal DF', value: 'df' },\n { label: 'Espírito Santo ES', value: 'es' },\n { label: 'Goiás GO', value: 'go' },\n { label: 'Maranhão MA', value: 'ma' },\n { label: 'Minas Gerais MG', value: 'mg' },\n { label: 'Mato Grosso do Sul MS', value: 'ms' },\n { label: 'Mato Grosso MT', value: 'mt' },\n { label: 'Pará PA', value: 'pa' },\n { label: 'Paraíba PB', value: 'pb' },\n { label: 'Pernambuco PE', value: 'pe' },\n { label: 'Piauí PI', value: 'pi' },\n { label: 'Paraná PR', value: 'pr' },\n { label: 'Rio de Janeiro RJ', value: 'rj' },\n { label: 'Rio Grande do Norte RN', value: 'rn' },\n { label: 'Rondônia RO', value: 'ro' },\n { label: 'Roraima RR', value: 'rr' },\n { label: 'Rio Grande do Sul RS', value: 'rs' },\n { label: 'Santa Catarina SC', value: 'sc' },\n { label: 'Sergipe SE', value: 'se' },\n { label: 'São Paulo SP', value: 'sp' },\n { label: 'Tocantins TO', value: 'to' },\n ];\n\n let selectedUf = $state<string | null>(null);\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedUf = $state<string | null>(null);\n let pinnedX = $state(0);\n let pinnedY = $state(0);\n\n const displayUf = $derived(pinnedUf ?? selectedUf);\n const selectedModal = $derived(displayUf ? modalData[displayUf] : null);\n\n function handleRegionHover(info: { cid: string; clientX: number; clientY: number }) {\n selectedUf = info.cid;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedUf === info.cid) {\n pinnedUf = null;\n } else {\n pinnedUf = info.cid;\n pinnedX = info.clientX - rect.left;\n pinnedY = info.clientY - rect.top;\n }\n }\n\n $effect(() => {\n if (!pinnedUf) return;\n function handleOutsideClick(e: MouseEvent) {\n if (mapWebEl && !mapWebEl.contains(e.target as Node)) {\n pinnedUf = null;\n }\n }\n document.addEventListener('click', handleOutsideClick);\n return () => document.removeEventListener('click', handleOutsideClick);\n });\n</script>\n\n<div class=\"sevn_governor\" class:sevn_governor--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: interactive map + footer tags -->\n <div class=\"sevn_governor__web\">\n <div class=\"sevn_governor__map-web\" bind:this={mapWebEl} onmouseleave={() => selectedUf = null} role=\"presentation\">\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n {#if displayUf && selectedModal}\n <div class=\"sevn_governor__overlay\" style=\"left:{overlayX}px;top:{overlayY}px\">\n <div class=\"sevn_governor__overlay-card\">\n {#if selectedModal.title}\n <p class=\"sevn_governor__overlay-title\">{selectedModal.title}</p>\n {/if}\n {#each selectedModal.items as item}\n <Candidate\n name={item.name}\n photoUrl={item.photoUrl}\n tag={item.tag}\n tagColor={item.tagColor}\n avatarColor={item.avatarColor}\n description={item.description}\n size=\"sm\"\n wrapper\n />\n {/each}\n {#if selectedModal.footer}\n <p class=\"sevn_governor__overlay-footer\">{selectedModal.footer}</p>\n {/if}\n </div>\n </div>\n {/if}\n </div>\n <div class=\"sevn_governor__footer\">\n <div class=\"sevn_governor__tags-col\">\n {#each parties as party}\n <Tag label={party.id} color={party.color} />\n {/each}\n </div>\n <p class=\"sevn_governor__date\">{formatUpdateMeta(data?.last_updated)}</p>\n </div>\n </div>\n\n <!-- Mobile: overview label + tags + static map + autocomplete + result -->\n <div class=\"sevn_governor__mobile\">\n <p class=\"sevn_governor__overview-label\">Visão geral:</p>\n\n <div class=\"sevn_governor__tags-row\">\n {#each parties as party}\n <Tag label={party.id} color={party.color} />\n {/each}\n </div>\n\n <div class=\"sevn_governor__map-mobile\">\n <Map type=\"brazil-states\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_governor__filter\">\n <Autocomplete label=\"Busque por estado\" options={ufOptions} bind:value={selectedUf} />\n </div>\n\n {#if selectedUf}\n {@const item = modalData[selectedUf]}\n {#if item}\n {@const candidate = item.items[0]}\n <div class=\"sevn_governor__result\">\n <Candidate\n name={candidate.name}\n photoUrl={candidate.photoUrl}\n tag={candidate.tag}\n tagColor={candidate.tagColor}\n avatarColor={candidate.avatarColor}\n description={candidate.description}\n size=\"sm\"\n />\n </div>\n <p class=\"sevn_governor__result-date\">{item.footer}</p>\n {/if}\n {/if}\n </div>\n</div>\n\n<style>\n .sevn_governor {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_governor--raw,\n .sevn_governor--raw * {\n all: revert;\n }\n\n /* ── Web (hidden on mobile) ─────────────────────────── */\n .sevn_governor__web {\n display: none;\n }\n\n .sevn_governor__footer {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .sevn_governor__tags-col {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-start;\n }\n\n .sevn_governor__date {\n font-size: 0.75rem;\n color: #9a9aaa;\n margin: 0;\n }\n\n /* ── Mobile (shown by default) ──────────────────────── */\n .sevn_governor__mobile {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_governor__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_governor__tags-row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .sevn_governor__map-mobile {\n width: 100%;\n }\n\n /* Inline dropdown on mobile */\n .sevn_governor__filter :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_governor__result {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n border: 1px solid #DFE1E7;\n border-radius: 12px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);\n }\n\n .sevn_governor__result-date {\n font-size: 0.75rem;\n color: #9a9aaa;\n margin: 0;\n }\n\n /* ── Map web container ──────────────────────────────── */\n .sevn_governor__map-web {\n position: relative;\n }\n\n /* ── Overlay (web hover/pin) ────────────────────────── */\n .sevn_governor__overlay {\n position: absolute;\n z-index: 10;\n transform: translate(-50%, 12px);\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n pointer-events: none;\n }\n\n .sevn_governor__overlay-card {\n background: white;\n border-radius: 10px;\n padding: 14px 16px;\n min-width: 210px;\n width: 270px;\n font-family: inherit;\n }\n\n .sevn_governor__overlay-title {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0 0 10px;\n }\n\n .sevn_governor__overlay-footer {\n border-top: 1px solid #f0f0f5;\n margin-top: 10px;\n padding-top: 8px;\n font-size: 0.75rem;\n color: #9a9aaa;\n margin-bottom: 0;\n }\n\n .sevn_governor__overlay-card :global(.candidate) {\n justify-content: flex-start;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_governor__web {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_governor :global(.map-modal-card .candidate) {\n justify-content: flex-start;\n }\n\n .sevn_governor__mobile {\n display: none;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateCarrouselStateResultsViewerProps } from './props';\n import { Header, FilterState, CandidatePositionCarrousel, Autocomplete } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getResultsTimeline } from '$services/api';\n import type { ResultsTimeline } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n import { positionLabel } from '../utils/position';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n office = 'governor',\n header = {\n title: 'Governador',\n description: 'Selecione o estado e veja a apuração em tempo real',\n tag: 'APURAÇÃO EM ANDAMENTO',\n tagColor: '#0E2A41'\n },\n }: CandidateCarrouselStateResultsViewerProps = $props();\n\n let timelineData: ResultsTimeline | null = $state(null);\n let loading = $state(false);\n let error = $state<string | null>(null);\n\n const ufStates = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n const mockCandidates = [\n { position: '1º lugar', name: 'Candidato A', tag: 'ABC', tagColor: '#1e4d6b', avatarColor: '#1e4d6b', percent: '42,8%', percentSuffix: 'dos votos válidos', votes: '59.276.176 votos', nameWeight: 400 },\n { position: '2º lugar', name: 'Candidato B', tag: 'DEF', tagColor: '#d97706', avatarColor: '#d97706', percent: '31,4%', percentSuffix: 'dos votos válidos', votes: '59.276.176 votos', nameWeight: 400 },\n { position: '3º lugar', name: 'Candidato C', tag: 'GHI', tagColor: '#1e3461', avatarColor: '#1e3461', percent: '15,6%', percentSuffix: 'dos votos válidos', votes: '59.276.176 votos', nameWeight: 400 },\n { position: '4º lugar', name: 'Candidato D', tag: 'JKL', tagColor: '#0f172a', avatarColor: '#0f172a', percent: '6,7%', percentSuffix: 'dos votos válidos', votes: '59.276.176 votos', nameWeight: 400 },\n ];\n\n let selectedUf = $state('');\n\n $effect(() => {\n if (!mock && selectedUf) {\n const loadTimelineData = async () => {\n loading = true;\n error = null;\n try {\n const data = await getResultsTimeline(year, office, 1, selectedUf);\n timelineData = data;\n } catch (err) {\n console.error(`Failed to fetch timeline for ${selectedUf}:`, err);\n error = 'Falha ao carregar dados';\n timelineData = null;\n } finally {\n loading = false;\n }\n };\n loadTimelineData();\n } else if (!selectedUf) {\n timelineData = null;\n }\n });\n\n const filterMeta = $derived.by(() => {\n if (mock) return MOCK_UPDATE_META;\n const snapshots = timelineData?.snapshots;\n return formatUpdateMeta(snapshots?.length ? snapshots[snapshots.length - 1].timestamp : null);\n });\n\n const candidates = $derived.by(() => {\n if (mock) return mockCandidates;\n\n const latestSnapshot = timelineData?.snapshots?.[timelineData.snapshots.length - 1];\n if (!latestSnapshot) return [];\n\n return [...latestSnapshot.results]\n .sort((a: any, b: any) => b.valid_votes_pct - a.valid_votes_pct)\n .map((result: any, index: number) => {\n const meta = timelineData?.candidates_meta.find((m: any) => m.candidate_id === result.candidate_id);\n return {\n position: positionLabel(result.position, index),\n name: meta?.name ? toTitleCase(meta.name) : 'Desconhecido',\n photoUrl: meta?.photo_url,\n tag: meta?.party_abbr || '',\n tagColor: meta?.party_color || '#ccc',\n avatarColor: meta?.party_color || '#ccc',\n percent: `${result.valid_votes_pct.toFixed(1)}%`,\n percentSuffix: 'dos votos válidos',\n votes: result.votes.toLocaleString('pt-BR') + ' votos',\n nameWeight: 400,\n };\n });\n });\n</script>\n\n<div class=\"sevn_candidate_carrousel_state_results_viewer\" class:sevn_candidate_carrousel_state_results_viewer--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: FilterState -->\n <div class=\"sevn_candidate_carrousel_state_results_viewer__filter-web\">\n <FilterState\n states={ufStates}\n bind:value={selectedUf}\n meta={filterMeta}\n />\n </div>\n\n <!-- Mobile: label + autocomplete -->\n <div class=\"sevn_candidate_carrousel_state_results_viewer__filter-mobile\">\n <div class=\"sevn_candidate_carrousel_state_results_viewer__autocomplete\">\n <Autocomplete label={selectedUf ? \"Você selecionou\" : \"Busque por estado\"} options={ufStates} bind:value={selectedUf} />\n </div>\n </div>\n\n {#if error}\n <div class=\"sevn_candidate_carrousel_state_results_viewer__error\">\n {error}\n </div>\n {:else if loading}\n <div class=\"sevn_candidate_carrousel_state_results_viewer__loading\">\n Carregando...\n </div>\n {:else if selectedUf && !mock && candidates.length === 0}\n <div class=\"sevn_candidate_carrousel_state_results_viewer__error\">\n Resultado ainda não publicado para este estado.\n </div>\n {:else if selectedUf}\n <CandidatePositionCarrousel {candidates} itemsPerPage={3} />\n {/if}\n</div>\n\n<style>\n .sevn_candidate_carrousel_state_results_viewer {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_carrousel_state_results_viewer--raw,\n .sevn_candidate_carrousel_state_results_viewer--raw * {\n all: revert;\n }\n\n /* ── Web filter (hidden on mobile) ─────────────── */\n .sevn_candidate_carrousel_state_results_viewer__filter-web {\n display: none;\n margin-bottom: 30px;\n }\n\n /* ── Mobile filter (shown by default) ──────────── */\n .sevn_candidate_carrousel_state_results_viewer__filter-mobile {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .sevn_candidate_carrousel_state_results_viewer__loading,\n .sevn_candidate_carrousel_state_results_viewer__error {\n padding: 24px;\n text-align: center;\n font-size: 0.875rem;\n }\n\n .sevn_candidate_carrousel_state_results_viewer__error {\n color: #dc2626;\n }\n\n .sevn_candidate_carrousel_state_results_viewer__label {\n font-size: 0.875rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n /* Inline dropdown on mobile */\n .sevn_candidate_carrousel_state_results_viewer__autocomplete :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n /* ── Desktop overrides ──────────────────────────── */\n @media (min-width: 768px) {\n .sevn_candidate_carrousel_state_results_viewer__filter-web {\n display: block;\n }\n\n .sevn_candidate_carrousel_state_results_viewer__filter-mobile {\n display: none;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateDuelStateResultViewerProps } from './props';\n import { Header, FilterState, CandidatePercentage, VoteOverview, Autocomplete } from '$lib';\n import { getElectionResults } from '$services/api';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, MOCK_UPDATE_META, formatUpdate, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n data = null,\n year = 2026,\n header = {\n title: 'Governador',\n description: 'Selecione o estado e veja a apuração em tempo real',\n tag: 'APURAÇÃO EM ANDAMENTO',\n tagColor: '#0E2A41'\n },\n showPosition = false,\n positionTagColor = undefined,\n }: CandidateDuelStateResultViewerProps = $props();\n\n const ufStates = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n let selectedUf = $state('');\n\n const mockCandidates = [\n { position: 1, name: 'Candidato A', acronym: 'ABC', percent: 50.90, votes: 60345999, color: '#1e3461', elected: false },\n { position: 2, name: 'Candidato B', acronym: 'DEF', percent: 49.10, votes: 58206354, color: '#d97706', elected: false },\n ];\n\n const mockOverviewData = [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ];\n\n const candidates = $derived(\n !mock && data?.states && Array.isArray(data.states) && data.states.length > 0 && selectedUf\n ? (() => {\n const state = data.states.find((s: any) => s.state.toLowerCase() === selectedUf);\n if (state?.leader && state?.runner_up) {\n return [\n {\n position: state.leader.position ?? 1,\n name: toTitleCase(state.leader.name),\n photoUrl: state.leader.photo_url,\n acronym: state.leader.party_abbr,\n percent: state.leader.valid_votes_pct,\n votes: state.leader.votes,\n color: state.leader.party_color,\n elected: state.leader.elected ?? false,\n },\n {\n position: state.runner_up.position ?? 2,\n name: toTitleCase(state.runner_up.name),\n photoUrl: state.runner_up.photo_url,\n acronym: state.runner_up.party_abbr,\n percent: state.runner_up.valid_votes_pct,\n votes: state.runner_up.votes,\n color: state.runner_up.party_color,\n elected: state.runner_up.elected ?? false,\n },\n ];\n }\n return [] as typeof mockCandidates;\n })()\n : mock\n ? mockCandidates\n : ([] as typeof mockCandidates)\n );\n\n // by-state.json não traz nulos/brancos/válidos por estado (só líder/vice/status,\n // pra caber todos os 27 estados num arquivo só). Esse detalhamento só existe no\n // results.json escopado por UF, então buscamos ele à parte quando o usuário\n // seleciona um estado.\n let stateSummary = $state<{ total_valid_votes: number; null_votes: number; blank_votes: number } | null>(null);\n\n $effect(() => {\n if (mock || !selectedUf) {\n stateSummary = null;\n return;\n }\n stateSummary = null;\n getElectionResults(year, { office: 'governor', round: 1, state: selectedUf })\n .then((res: any) => { stateSummary = res?.summary ?? null; })\n .catch((err: any) => { console.error('Failed to fetch state summary:', err); });\n });\n\n const overviewData = $derived.by(() => {\n if (mock) return mockOverviewData;\n if (!stateSummary) return [];\n const { total_valid_votes, null_votes, blank_votes } = stateSummary;\n const total = total_valid_votes + null_votes + blank_votes;\n return [\n { text: 'Nulos', value: `${((null_votes / total) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / total) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${total_valid_votes.toLocaleString('pt-BR')} votos` },\n ];\n });\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(data?.last_updated)\n );\n\n const updatedMeta = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(data?.last_updated)\n );\n\n const winnerIndex = $derived(candidates.findIndex((c) => c.elected));\n</script>\n\n<div class=\"sevn_duel_state\" class:sevn_duel_state--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: FilterState com pills -->\n <div class=\"sevn_duel_state__filter-web\">\n <FilterState states={ufStates} bind:value={selectedUf} meta={updatedMeta} />\n </div>\n\n <!-- Web: dois candidatos em colunas com layout stack -->\n {#if selectedUf}\n <div class=\"sevn_duel_state__candidates-web\">\n {#each candidates as candidate}\n <div\n class=\"sevn_duel_state__col\"\n class:sevn_duel_state__col--dimmed={winnerIndex !== -1 && !candidate.elected}\n >\n <CandidatePercentage layout=\"stack\" candidates={[candidate]} avatarSize=\"130px\" barHeight=\"24px\" {showPosition} {positionTagColor} />\n </div>\n {/each}\n </div>\n {/if}\n\n <!-- Mobile: Autocomplete inline -->\n <div class=\"sevn_duel_state__filter-mobile\">\n <div class=\"sevn_duel_state__autocomplete\">\n <Autocomplete label={selectedUf ? 'Você selecionou:' : 'Busque por estado:'} options={ufStates} bind:value={selectedUf} />\n </div>\n </div>\n\n <!-- Mobile: duel + VoteOverview -->\n {#if selectedUf}\n <div\n class=\"sevn_duel_state__candidates-mobile\"\n class:winner-left={winnerIndex === 0}\n class:winner-right={winnerIndex === 1}\n >\n <CandidatePercentage layout=\"duel-compact\" candidates={candidates} avatarSize=\"sm\" {showPosition} {positionTagColor} />\n <VoteOverview data={overviewData} date={lastUpdate} font=\"TSE\" />\n </div>\n {/if}\n</div>\n\n<style>\n .sevn_duel_state {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_duel_state--raw,\n .sevn_duel_state--raw * {\n all: revert;\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_duel_state__filter-web {\n display: none;\n }\n\n .sevn_duel_state__candidates-web {\n display: none;\n }\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_duel_state__filter-mobile {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n /* Dropdown inline no mobile */\n .sevn_duel_state__autocomplete :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n .sevn_duel_state__candidates-mobile {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .sevn_duel_state__candidates-mobile.winner-left :global(.duel-side.reverse) {\n opacity: 0.35;\n }\n\n .sevn_duel_state__candidates-mobile.winner-right :global(.duel-side:not(.reverse)) {\n opacity: 0.35;\n }\n\n .sevn_duel_state :global(.vote-overview) {\n padding: 10px 0;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_duel_state :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_duel_state__filter-web {\n display: block;\n }\n\n .sevn_duel_state__candidates-web {\n display: flex;\n flex-direction: row;\n gap: 40px;\n }\n\n .sevn_duel_state__col {\n flex: 1;\n transition: opacity 0.2s ease;\n }\n\n .sevn_duel_state__col--dimmed {\n opacity: 0.35;\n }\n\n .sevn_duel_state__filter-mobile {\n display: none;\n }\n\n .sevn_duel_state__candidates-mobile {\n display: none;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateMapByStateProps } from './props';\n import { Header, Map, MapLegend, Autocomplete, Candidate } from '$lib';\n import { toTitleCase } from '../utils/formatName';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n data = null,\n header = {\n title: 'Governador por Estado',\n description: 'Você pode interagir com o mapa e ver quais estados já elegeram governador e onde a disputa seguirá para o segundo turno',\n tag: '1° E 2° TURNO',\n tagColor: '#1e3461'\n }\n }: CandidateMapByStateProps = $props();\n\n const GRAY = '#d1d5db';\n const ORANGE = '#d97706';\n const GREEN = '#1e3461';\n\n /** @type {Record<string, 'elected'|'second'|'counting'>} */\n const mockStateStatus = {\n rr: 'elected', am: 'elected', ap: 'elected', al: 'elected', se: 'elected',\n ce: 'elected', ba: 'elected', df: 'elected', sp: 'elected', pr: 'elected',\n sc: 'elected', rs: 'elected', pb: 'elected', pi: 'elected', rj: 'elected',\n go: 'elected',\n mt: 'second', ms: 'second', mg: 'second', ma: 'second', pa: 'second',\n ro: 'second', es: 'second', rn: 'second', pe: 'second',\n ac: 'counting', to: 'counting',\n };\n\n /** @type {Record<string, string>} */\n const stateNames = {\n ac: 'Acre', al: 'Alagoas', am: 'Amazonas', ap: 'Amapá', ba: 'Bahia',\n ce: 'Ceará', df: 'Distrito Federal', es: 'Espírito Santo', go: 'Goiás',\n ma: 'Maranhão', mg: 'Minas Gerais', ms: 'Mato Grosso do Sul', mt: 'Mato Grosso',\n pa: 'Pará', pb: 'Paraíba', pe: 'Pernambuco', pi: 'Piauí', pr: 'Paraná',\n rj: 'Rio de Janeiro', rn: 'Rio Grande do Norte', ro: 'Rondônia', rr: 'Roraima',\n rs: 'Rio Grande do Sul', sc: 'Santa Catarina', se: 'Sergipe', sp: 'São Paulo', to: 'Tocantins',\n };\n\n /** @type {Record<string, string>} */\n const statusLabels = {\n elected_round_1: 'Eleito no 1° turno',\n elected_round_2: 'Eleito no 2° turno',\n counting: 'Em apuração',\n runoff: '2° turno',\n // mock fallbacks\n elected: 'Eleito',\n second: '2° turno',\n };\n\n /** @type {Record<string, string>} */\n const statusColors = {\n elected_round_1: GREEN,\n elected_round_2: GREEN,\n counting: GRAY,\n runoff: ORANGE,\n };\n\n const mockByStatus = {\n elected: { percents: ['51,8% dos votos válidos', '48,2% dos votos válidos'] },\n second: { percents: ['51,8% dos votos válidos', '49,2% dos votos válidos'] },\n counting: { percents: ['41,8% dos votos válidos', '41,8% dos votos válidos'] },\n };\n\n const baseCandidates = [\n { pos: '1°', name: 'Candidato A', photoUrl: /** @type {string|undefined} */ (undefined), acronym: 'ABC', color: '#475569', elected: /** @type {boolean|undefined} */ (undefined) },\n { pos: '2°', name: 'Candidato B', photoUrl: /** @type {string|undefined} */ (undefined), acronym: 'EFG', color: GREEN, elected: /** @type {boolean|undefined} */ (undefined) },\n ];\n\n /** @param {string} uf */\n function getMockStateInfo(uf) {\n const status = mockStateStatus[uf] ?? 'counting';\n const percents = mockByStatus[status].percents;\n return {\n name: stateNames[uf] ?? uf.toUpperCase(),\n statusLabel: statusLabels[status],\n candidates: baseCandidates.map((c, i) => ({ ...c, percent: percents[i] })),\n };\n }\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n // ── Derived from API ─────────────────────────────────────\n\n // Só considera \"dado real\" se de fato veio algo da API — sem isso (falha de\n // rede, CORS na hidratação, etc.), não finge apuração com o mock.\n const hasRealData = $derived(!mock && !!(/** @type {any} */ (data)?.states?.length));\n\n const lastUpdate = $derived(\n mock ? MOCK_UPDATE : formatUpdate(/** @type {any} */ (data)?.last_updated)\n );\n\n const mapColors = $derived.by(() => {\n if (mock) {\n return Object.entries(mockStateStatus).map(([id, status]) => ({\n id,\n color: status === 'elected' ? GREEN : status === 'second' ? ORANGE : GRAY,\n }));\n }\n if (!hasRealData) return [];\n return /** @type {any} */ (data).states.map((/** @type {any} */ s) => ({\n id: s.state.toLowerCase(),\n color: statusColors[s.status] ?? GRAY,\n }));\n });\n\n const legendSegments = [\n { label: 'Em apuração', color: GRAY },\n { label: '2° turno', color: ORANGE },\n { label: 'Eleito no 1° turno', color: GREEN },\n ];\n\n const modalData = $derived.by(() => {\n if (mock) {\n return Object.fromEntries(\n Object.keys(mockStateStatus).map(uf => {\n const info = getMockStateInfo(uf);\n return [uf, {\n title: `${info.name}: ${info.statusLabel}`,\n footer: `Última atualização: ${MOCK_UPDATE}`,\n items: info.candidates.map(c => ({\n position: c.pos,\n name: c.name,\n tag: c.acronym,\n tagColor: c.color,\n avatarColor: c.color,\n description: c.percent,\n })),\n }];\n })\n );\n }\n if (!hasRealData) return {};\n return Object.fromEntries(\n /** @type {any} */ (data).states.map((/** @type {any} */ s) => [\n s.state.toLowerCase(),\n {\n title: `${s.state_name}: ${statusLabels[s.status] ?? s.status}`,\n footer: lastUpdate ? `Última atualização: ${lastUpdate}` : '',\n items: [\n ...(s.leader ? [{\n position: '1°',\n name: toTitleCase(s.leader.name),\n photoUrl: s.leader.photo_url,\n tag: s.leader.party_abbr,\n tagColor: s.leader.party_color,\n avatarColor: s.leader.party_color,\n avatarTag: s.leader.elected ? 'ELEITO' : undefined,\n description: `${s.leader.valid_votes_pct.toFixed(1)}% dos votos válidos`,\n }] : []),\n ...(s.runner_up ? [{\n position: '2°',\n name: toTitleCase(s.runner_up.name),\n photoUrl: s.runner_up.photo_url,\n tag: s.runner_up.party_abbr,\n tagColor: s.runner_up.party_color,\n avatarColor: s.runner_up.party_color,\n avatarTag: s.runner_up.elected ? 'ELEITO' : undefined,\n description: `${s.runner_up.valid_votes_pct.toFixed(1)}% dos votos válidos`,\n }] : []),\n ],\n },\n ])\n );\n });\n\n // ── Web state (hover / pin) ──────────────────────────────\n\n let selectedUf = $state<string | null>(null);\n let overlayX = $state(0);\n let overlayY = $state(0);\n let mapWebEl = $state<HTMLDivElement | null>(null);\n\n let pinnedUf = $state<string | null>(null);\n let pinnedX = $state(0);\n let pinnedY = $state(0);\n\n const displayUf = $derived(pinnedUf ?? selectedUf);\n const selectedModal = $derived(displayUf ? modalData[displayUf] : null);\n\n function handleRegionHover(info: { cid: string; clientX: number; clientY: number }) {\n selectedUf = info.cid;\n if (mapWebEl) {\n const rect = mapWebEl.getBoundingClientRect();\n overlayX = info.clientX - rect.left;\n overlayY = info.clientY - rect.top;\n }\n }\n\n function handleRegionClick(info: { cid: string; clientX: number; clientY: number }) {\n if (!mapWebEl) return;\n const rect = mapWebEl.getBoundingClientRect();\n if (pinnedUf === info.cid) {\n pinnedUf = null;\n } else {\n pinnedUf = info.cid;\n pinnedX = info.clientX - rect.left;\n pinnedY = info.clientY - rect.top;\n }\n }\n\n $effect(() => {\n if (!pinnedUf) return;\n function handleOutsideClick(e: MouseEvent) {\n if (mapWebEl && !mapWebEl.contains(e.target as Node)) {\n pinnedUf = null;\n }\n }\n document.addEventListener('click', handleOutsideClick);\n return () => document.removeEventListener('click', handleOutsideClick);\n });\n\n // ── Mobile state ─────────────────────────────────────────\n\n let mobileSelectedUf = $state(/** @type {string|null} */ (null));\n\n const mobileStateInfo = $derived.by(() => {\n if (!mobileSelectedUf) return null;\n if (mock) return getMockStateInfo(mobileSelectedUf);\n if (!hasRealData) return null;\n\n const s = /** @type {any} */ (data).states.find((/** @type {any} */ st) => st.state.toLowerCase() === mobileSelectedUf);\n if (!s) return null;\n\n return {\n candidates: [\n ...(s.leader ? [{ pos: '1°', name: toTitleCase(s.leader.name), photoUrl: s.leader.photo_url, acronym: s.leader.party_abbr, color: s.leader.party_color, elected: s.leader.elected, percent: `${s.leader.valid_votes_pct.toFixed(1)}% dos votos válidos` }] : []),\n ...(s.runner_up ? [{ pos: '2°', name: toTitleCase(s.runner_up.name), photoUrl: s.runner_up.photo_url, acronym: s.runner_up.party_abbr, color: s.runner_up.party_color, elected: s.runner_up.elected, percent: `${s.runner_up.valid_votes_pct.toFixed(1)}% dos votos válidos` }] : []),\n ],\n };\n });\n</script>\n\n<div class=\"sevn_candidate_map\" class:sevn_candidate_map--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n {#if !mock && !hasRealData}\n <p class=\"sevn_candidate_map__status\">\n Dados indisponíveis no momento.\n </p>\n {/if}\n\n <!-- ── Web: mapa interativo + overlay externo + legenda ── -->\n <div class=\"sevn_candidate_map__web\">\n <div class=\"sevn_candidate_map__map-web\" bind:this={mapWebEl} onmouseleave={() => selectedUf = null} role=\"presentation\">\n <Map\n type=\"brazil-states\"\n colors={mapColors}\n interactive\n onRegionHover={handleRegionHover}\n onRegionClick={handleRegionClick}\n />\n {#if displayUf && selectedModal}\n <div class=\"sevn_candidate_map__overlay\" style=\"left:{overlayX}px;top:{overlayY}px\">\n <div class=\"sevn_candidate_map__overlay-card\">\n {#if selectedModal.title}\n <p class=\"sevn_candidate_map__overlay-title\">{selectedModal.title}</p>\n {/if}\n {#each selectedModal.items as item}\n <Candidate\n name={item.name}\n photoUrl={item.photoUrl}\n tag={item.tag}\n tagColor={item.tagColor}\n avatarColor={item.avatarColor}\n avatarTag={item.avatarTag}\n position={item.position}\n positionSide=\"left\"\n description={item.description}\n descriptionSide=\"right\"\n size=\"sm\"\n wrapper\n />\n {/each}\n {#if selectedModal.footer}\n <p class=\"sevn_candidate_map__overlay-footer\">{selectedModal.footer}</p>\n {/if}\n </div>\n </div>\n {/if}\n </div>\n\n <MapLegend segments={legendSegments} />\n </div>\n\n <!-- ── Mobile: visão geral + legenda + mapa estático + autocomplete + resultado ── -->\n <div class=\"sevn_candidate_map__mobile\">\n <p class=\"sevn_candidate_map__overview-label\">Visão geral:</p>\n\n <MapLegend segments={legendSegments} />\n\n <div class=\"sevn_candidate_map__map-mobile\">\n <Map type=\"brazil-states\" colors={mapColors} />\n </div>\n\n <div class=\"sevn_candidate_map__filter\">\n <div class=\"sevn_candidate_map__autocomplete\">\n <Autocomplete label={mobileSelectedUf ? 'Você selecionou:' : 'Busque por estado:'} options={ufOptions} bind:value={mobileSelectedUf} />\n </div>\n </div>\n\n {#if mobileStateInfo}\n <div class=\"sevn_candidate_map__result\">\n {#each mobileStateInfo.candidates as c}\n <Candidate name={c.name} photoUrl={c.photoUrl} avatarColor={c.color} position={c.pos} positionSide=\"left\" avatarSize=\"46px\" tag={c.acronym} tagColor={c.color} avatarTag={c.elected ? 'ELEITO' : undefined} description={c.percent} descriptionSide=\"right\" size=\"sm\" />\n {/each}\n </div>\n {#if lastUpdate}\n <p class=\"sevn_candidate_map__result-footer\">Última atualização: {lastUpdate}</p>\n {/if}\n {/if}\n </div>\n</div>\n\n<style>\n .sevn_candidate_map {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_map--raw,\n .sevn_candidate_map--raw * {\n all: revert;\n }\n\n .sevn_candidate_map__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_candidate_map__web {\n display: none;\n flex-direction: column;\n gap: 12px;\n }\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_candidate_map__mobile {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_candidate_map__overview-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_candidate_map__map-mobile {\n width: 100%;\n }\n\n .sevn_candidate_map__filter {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n /* Dropdown inline no mobile */\n .sevn_candidate_map__autocomplete :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n /* Resultado mobile */\n .sevn_candidate_map__result {\n display: flex;\n flex-direction: column;\n gap: 10px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);\n padding: 16px;\n }\n\n\n .sevn_candidate_map__result-footer {\n font-size: 0.7rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.5;\n margin: 0;\n }\n\n /* ── Map web container ──────────────────────────────── */\n .sevn_candidate_map__map-web {\n position: relative;\n }\n\n /* ── Overlay (web hover/pin) ────────────────────────── */\n .sevn_candidate_map__overlay {\n position: absolute;\n z-index: 10;\n transform: translate(-50%, 12px);\n filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.18));\n pointer-events: none;\n }\n\n .sevn_candidate_map__overlay-card {\n background: white;\n border-radius: 10px;\n padding: 14px 16px;\n width: 300px;\n font-family: inherit;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .sevn_candidate_map__overlay-title {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_candidate_map__overlay-footer {\n border-top: 1px solid #f0f0f5;\n padding-top: 8px;\n font-size: 0.75rem;\n color: #9a9aaa;\n margin: 0;\n }\n\n .sevn_candidate_map__overlay-card :global(.candidate) {\n justify-content: flex-start;\n }\n\n .sevn_candidate_map :global(.candidate-info.right .candidate-description) {\n margin-left: 0;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_candidate_map__web {\n display: flex;\n }\n\n .sevn_candidate_map__mobile {\n display: none;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { ElectionRoundAnalysisProps } from './props';\n import { Header, Autocomplete, FilterDropdown, MultiRingChart, CandidateVotesRanking } from '$lib';\n import type { HeaderProps } from '$lib';\n import { browser } from '$core/env';\n import { getElectionResults } from '$services/api';\n import { toTitleCase } from '../utils/formatName';\n import type { ElectionResults, ElectionOffice } from '$services/types';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n header = {\n title: 'Análise de resultados por turno',\n description: 'Resultados governamentais por município, em tempo real'\n }\n }: ElectionRoundAnalysisProps = $props();\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n // Só cargos majoritários que podem ter 2º turno (senador é turno único,\n // nunca tem o que comparar aqui).\n const filterOptions = [\n { value: 'governador', label: 'Governador' },\n { value: 'presidente', label: 'Presidente' },\n ];\n\n const officeMap: Record<string, ElectionOffice> = {\n governador: 'governor',\n presidente: 'president',\n };\n\n let selectedUf = $state('');\n let selectedFilter = $state<string | null>(filterOptions[0].value);\n\n\n // ── Mock data ──────────────────────────────────────────────────────────────\n\n const mockRound1Candidates = [\n { name: 'Candidato A', tag: 'ABC', tagColor: '#d97706', dotColor: '#d97706', votes: '42,8%' },\n { name: 'Candidato B', tag: 'DEF', tagColor: '#166534', dotColor: '#166534', votes: '31,4%' },\n { name: 'Candidato C', tag: 'GHI', tagColor: '#1e3461', dotColor: '#1e3461', votes: '12,6%' },\n { name: 'Candidato D', tag: 'JKL', tagColor: '#e11d48', dotColor: '#e11d48', votes: '10,8%' },\n ];\n\n const mockRound2Candidates = [\n { name: 'Candidato A', tag: 'ABC', tagColor: '#d97706', dotColor: '#d97706', votes: '54,2%', elected: true },\n { name: 'Candidato B', tag: 'DEF', tagColor: '#166534', dotColor: '#166534', votes: '45,8%' },\n ];\n\n const mockRound1Rings = [\n { value: 42.8, color: '#d97706', label: 'ABC' },\n { value: 31.4, color: '#166534', label: 'DEF' },\n { value: 12.6, color: '#1e3461', label: 'GHI' },\n { value: 10.8, color: '#e11d48', label: 'JKL' },\n ];\n\n const mockRound2Rings = [\n { value: 54.2, color: '#d97706', label: 'ABC' },\n { value: 45.8, color: '#166534', label: 'DEF' },\n ];\n\n // ── API state ──────────────────────────────────────────────────────────────\n\n let round1Data = $state<ElectionResults | null>(null);\n let round2Data = $state<ElectionResults | null>(null);\n\n $effect(() => {\n if (mock) return;\n if (!selectedUf || !selectedFilter) return;\n round1Data = null;\n round2Data = null;\n const state = selectedUf;\n const office: ElectionOffice = officeMap[selectedFilter] ?? 'president';\n\n // Turnos buscados de forma independente: o 2º turno pode ainda não ter\n // sido publicado (nem existir no CDN) sem impedir a exibição do 1º.\n getElectionResults(year, { round: 1, state, office })\n .then((r1: ElectionResults) => { round1Data = r1; })\n .catch((err: any) => { console.error('Failed to fetch round 1 election results:', err); });\n\n getElectionResults(year, { round: 2, state, office })\n .then((r2: ElectionResults) => { round2Data = r2; })\n .catch((err: any) => { console.error('Failed to fetch round 2 election results:', err); });\n });\n\n // ── Derived data ───────────────────────────────────────────────────────────\n\n const round1Candidates = $derived.by(() => {\n if (mock) return mockRound1Candidates;\n if (!round1Data?.candidates) return [];\n return round1Data.candidates.map((c: any) => ({\n name: toTitleCase(c.ballot_name),\n tag: c.party_abbr,\n tagColor: c.party_color,\n dotColor: c.party_color,\n votes: `${c.valid_votes_pct.toFixed(1)}%`,\n elected: c.elected,\n }));\n });\n\n const round1Rings = $derived.by(() => {\n if (mock) return mockRound1Rings;\n if (!round1Data?.candidates) return [];\n return round1Data.candidates.map((c: any) => ({\n value: c.valid_votes_pct,\n color: c.party_color,\n label: c.party_abbr,\n }));\n });\n\n const round2Candidates = $derived.by(() => {\n if (mock) return mockRound2Candidates;\n if (!round2Data?.candidates) return [];\n return round2Data.candidates.map((c: any) => ({\n name: toTitleCase(c.ballot_name),\n tag: c.party_abbr,\n tagColor: c.party_color,\n dotColor: c.party_color,\n votes: `${c.valid_votes_pct.toFixed(1)}%`,\n elected: c.elected,\n }));\n });\n\n const round2Rings = $derived.by(() => {\n if (mock) return mockRound2Rings;\n if (!round2Data?.candidates) return [];\n return round2Data.candidates.map((c: any) => ({\n value: c.valid_votes_pct,\n color: c.party_color,\n label: c.party_abbr,\n }));\n });\n\n const round1TotalVotes = $derived(\n mock\n ? '118.552.353 votos'\n : round1Data?.summary\n ? `${round1Data.summary.total_valid_votes.toLocaleString('pt-BR')} votos`\n : null\n );\n\n const round2TotalVotes = $derived(\n mock\n ? '118.552.353 votos'\n : round2Data?.summary\n ? `${round2Data.summary.total_valid_votes.toLocaleString('pt-BR')} votos`\n : null\n );\n\n const round1Date = $derived(\n mock ? MOCK_UPDATE : formatUpdate(round1Data?.summary?.last_updated)\n );\n const round2Date = $derived(\n mock ? MOCK_UPDATE : formatUpdate(round2Data?.summary?.last_updated)\n );\n\n // Turno 2 pode legitimamente não existir ainda (não publicado) — mostra\n // aviso honesto em vez de fingir dado real ou sumir sem explicação.\n const round2NotPublished = $derived(!mock && selectedUf !== '' && !!selectedFilter && !round2Data);\n\n // ── Mobile breakpoint ──────────────────────────────────────────────────────\n\n let isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n $effect(() => {\n if (!browser) return;\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (e: MediaQueryListEvent) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n</script>\n\n<div class=\"sevn_election_round\" class:sevn_election_round--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: cargo em dropdown compacto, no padrão dos componentes 04/05/06 -->\n <div class=\"sevn_election_round__office-web\">\n <FilterDropdown label=\"Cargo\" options={filterOptions} bind:value={selectedFilter} />\n </div>\n\n <!-- Web: filtro de UF -->\n <div class=\"sevn_election_round__filters-web\">\n <div class=\"sevn_election_round__filter-uf\">\n <Autocomplete \n label=\"Busque por UF\" \n options={ufOptions} \n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf} \n />\n </div>\n </div>\n\n <!-- Mobile: filtro único -->\n <div class=\"sevn_election_round__filter-mobile\">\n <Autocomplete \n label={selectedUf ? `Você selecionou:` : \"Busque por estado:\"} \n options={ufOptions} \n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf} \n />\n </div>\n\n {#if selectedUf}\n <div class=\"sevn_election_round__filter-secondary-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={filterOptions}\n bind:value={selectedFilter}\n />\n </div>\n {/if}\n\n <!-- Grid dos turnos -->\n {#if selectedUf && selectedFilter}\n <div class=\"sevn_election_round__grid\">\n <!-- 1° Turno -->\n <div class=\"sevn_election_round__col\">\n <div class=\"sevn_election_round__chart\">\n <MultiRingChart\n rings={round1Rings}\n centerLabel=\"1°Turno\"\n centerLabelSize={14}\n size={isMobile ? \"220px\" : \"280px\"}\n outerRadius={100}\n thickness={10}\n ringGap={5}\n />\n </div>\n <CandidateVotesRanking\n candidates={round1Candidates}\n totalVotes={round1TotalVotes}\n date={round1Date}\n font=\"TSE\"\n />\n </div>\n\n <!-- 2° Turno -->\n <div class=\"sevn_election_round__col\">\n {#if round2NotPublished}\n <p class=\"sevn_election_round__status\">\n 2º turno ainda não publicado para este recorte.\n </p>\n {:else}\n <div class=\"sevn_election_round__chart\">\n <MultiRingChart\n rings={round2Rings}\n centerLabel=\"2°Turno\"\n centerLabelSize={14}\n size={isMobile ? \"220px\" : \"280px\"}\n outerRadius={100}\n thickness={10}\n ringGap={5}\n />\n </div>\n <CandidateVotesRanking\n candidates={round2Candidates}\n totalVotes={round2TotalVotes}\n date={round2Date}\n font=\"TSE\"\n />\n {/if}\n </div>\n </div>\n {/if}\n</div>\n\n<style>\n .sevn_election_round {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_election_round--raw,\n .sevn_election_round--raw * {\n all: revert;\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_election_round__office-web,\n .sevn_election_round__filters-web {\n display: none;\n }\n\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_election_round__filter-mobile {\n display: block;\n }\n\n .sevn_election_round__grid {\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n\n .sevn_election_round__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_election_round__col {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_election_round__chart {\n width: 200px;\n margin: 0 auto;\n }\n\n .sevn_election_round :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n /* A regra acima é para os Autocomplete, que abrem empurrando o conteúdo. O\n FilterDropdown do cargo se posiciona sozinho (absolute, abaixo do gatilho)\n — sem esta exceção ele vira um item do flex e abre ao lado, não abaixo. */\n .sevn_election_round .sevn_election_round__office-web :global(.dropdown) {\n position: absolute;\n margin-top: 0;\n }\n\n .sevn_election_round :global(.vote-overview) {\n padding: 10px 0;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_election_round :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_election_round__office-web {\n display: block;\n }\n\n .sevn_election_round__filters-web {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n\n .sevn_election_round__filter-uf {\n flex: 3;\n }\n\n .sevn_election_round__filter-mobile {\n display: none;\n }\n\n .sevn_election_round__grid {\n flex-direction: row;\n gap: 40px;\n }\n\n .sevn_election_round__col {\n flex: 1;\n }\n\n .sevn_election_round__chart {\n width: 260px;\n }\n\n .sevn_election_round :global(.vote-overview) {\n padding: 8px 0;\n gap: 8px;\n align-items: flex-end;\n }\n\n .sevn_election_round__filter-secondary-mobile {\n display: none;\n }\n }\n</style>\n","/** Tradução do campo `status` publicado pela API (mesmos rótulos e cores do\n * mapa do componente-18). */\n\nexport const STATUS_LABELS: Record<string, string> = {\n elected_round_1: 'Eleito no 1° turno',\n elected_round_2: 'Eleito no 2° turno',\n counting: 'Em apuração',\n runoff: '2° turno',\n // valores que só aparecem nos mocks\n elected: 'Eleito',\n second: '2° turno',\n};\n\nexport const STATUS_COLORS: Record<string, string> = {\n elected_round_1: '#1e3461',\n elected_round_2: '#1e3461',\n counting: '#d1d5db',\n runoff: '#d97706',\n second: '#d97706',\n};\n\n/** Status que viram tag na lista de candidatos.\n *\n * `counting` e `elected` ficam de fora de propósito: \"Em apuração\" é o estado\n * padrão de todo mundo (não informa nada) e \"Eleito\" já é coberto pela tag que\n * sai da flag `elected`, que é por candidato. */\nconst TAGGABLE_STATUS = new Set(['elected_round_1', 'elected_round_2', 'runoff', 'second']);\n\n/** Rótulo da tag de status, ou `null` quando o status não deve virar tag\n * (ausente, desconhecido, ou fora da lista acima). */\nexport function statusTagLabel(status: string | null | undefined): string | null {\n if (!status || !TAGGABLE_STATUS.has(status)) return null;\n return STATUS_LABELS[status] ?? null;\n}\n\n/** Cor da tag de status; cinza neutro se o status não tiver cor mapeada. */\nexport function statusTagColor(status: string | null | undefined): string {\n return (status && STATUS_COLORS[status]) || '#d1d5db';\n}\n","<script lang=\"ts\">\n import type { CandidateMultiRingChartPerformanceByMunicipalityProps } from './props';\n\timport { Header, Autocomplete, FilterDropdown, MultiRingChart, CandidateVotesRanking } from '$lib';\n\timport type { HeaderProps } from '$lib';\n\timport { getMunicipalityResults, getMunicipalities, getElectionResults } from '$services/api';\n\timport type { MunicipalityResults, MunicipalitiesList, Municipality, ElectionResults } from '$services/types';\n\timport { browser } from '$core/env';\n\timport { toTitleCase } from '../utils/formatName';\n\n\timport chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n import { statusTagLabel, statusTagColor } from '../utils/electionStatus';\n\n\tlet {\n\t\tmock = false,\n\t\trawStyle = false,\n\t\tyear = 2026,\n\t\theader = {\n\t\t\ttitle: 'Consulte o desempenho dos candidatos por município',\n\t\t\tdescription: 'Resultados eleitorais por município, em tempo real'\n\t\t}\n\t}: CandidateMultiRingChartPerformanceByMunicipalityProps = $props();\n\n\tlet municipalityResultsData: MunicipalityResults | null = $state(null);\n\tlet municipioOptions: { value: string; label: string }[] = $state([]);\n\tlet loading = $state(false);\n\tlet error = $state<string | null>(null);\n\n\tconst ufOptions = [\n\t\t{ value: 'ac', label: 'Acre AC' },\n\t\t{ value: 'al', label: 'Alagoas AL' },\n\t\t{ value: 'ap', label: 'Amapá AP' },\n\t\t{ value: 'am', label: 'Amazonas AM' },\n\t\t{ value: 'ba', label: 'Bahia BA' },\n\t\t{ value: 'ce', label: 'Ceará CE' },\n\t\t{ value: 'df', label: 'Distrito Federal DF' },\n\t\t{ value: 'es', label: 'Espírito Santo ES' },\n\t\t{ value: 'go', label: 'Goiás GO' },\n\t\t{ value: 'ma', label: 'Maranhão MA' },\n\t\t{ value: 'mg', label: 'Minas Gerais MG' },\n\t\t{ value: 'ms', label: 'Mato Grosso do Sul MS' },\n\t\t{ value: 'mt', label: 'Mato Grosso MT' },\n\t\t{ value: 'pa', label: 'Pará PA' },\n\t\t{ value: 'pb', label: 'Paraíba PB' },\n\t\t{ value: 'pe', label: 'Pernambuco PE' },\n\t\t{ value: 'pi', label: 'Piauí PI' },\n\t\t{ value: 'pr', label: 'Paraná PR' },\n\t\t{ value: 'rj', label: 'Rio de Janeiro RJ' },\n\t\t{ value: 'rn', label: 'Rio Grande do Norte RN' },\n\t\t{ value: 'ro', label: 'Rondônia RO' },\n\t\t{ value: 'rr', label: 'Roraima RR' },\n\t\t{ value: 'rs', label: 'Rio Grande do Sul RS' },\n\t\t{ value: 'sc', label: 'Santa Catarina SC' },\n\t\t{ value: 'se', label: 'Sergipe SE' },\n\t\t{ value: 'sp', label: 'São Paulo SP' },\n\t\t{ value: 'to', label: 'Tocantins TO' }\n\t];\n\n\tconst filterOptions = [\n\t\t{ value: 'governador', label: 'Governador' },\n\t\t{ value: 'presidente', label: 'Presidente' },\n\t\t{ value: 'senador', label: 'Senador' }\n\t];\n\n\tlet selectedUf: string | null = $state(null);\n\tlet selectedMunicipio: string | null = $state(null);\n\t// Sem cargo escolhido o componente não busca nada — começa no primeiro da\n\t// lista, como os demais filtros de cargo do projeto.\n\tlet selectedFilter: string = $state(filterOptions[0].value);\n\n\tconst officeMap: Record<string, 'president' | 'governor' | 'senator' | 'federal_deputy' | 'state_deputy'> = {\n\t\tgovernador: 'governor',\n\t\tpresidente: 'president',\n\t\tsenador: 'senator'\n\t};\n\n\t// Ao trocar a UF, busca a lista de municípios daquele estado para popular o seletor.\n\t// Município é opcional — só a UF já mostra o resultado do estado inteiro.\n\t$effect(() => {\n\t\tif (!browser || mock || !selectedUf) {\n\t\t\tmunicipioOptions = [];\n\t\t\treturn;\n\t\t}\n\n\t\tselectedMunicipio = null;\n\n\t\tgetMunicipalities(selectedUf)\n\t\t\t.then((fetchedData: MunicipalitiesList) => {\n\t\t\t\tmunicipioOptions = fetchedData.municipalities.map((m: Municipality) => ({\n\t\t\t\t\tvalue: String(m.municipality_id),\n\t\t\t\t\tlabel: m.name\n\t\t\t\t}));\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tconsole.error('Failed to fetch municipalities:', err);\n\t\t\t\tmunicipioOptions = [];\n\t\t\t});\n\t});\n\n\t// Resultado real por município (leader/runner-up de cada município da UF selecionada).\n\t$effect(() => {\n\t\tif (!browser || mock) return;\n\t\t// Sem UF (inclusive depois de limpar o filtro) zera o resultado — senão fica\n\t\t// na tela o dado do estado anterior.\n\t\tif (!selectedUf || !selectedFilter) {\n\t\t\tmunicipalityResultsData = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedOffice = officeMap[selectedFilter] || 'governor';\n\t\tconst round = 1;\n\n\t\tloading = true;\n\t\terror = null;\n\t\tmunicipalityResultsData = null;\n\n\t\tgetMunicipalityResults(year, selectedOffice, round, selectedUf)\n\t\t\t.then((fetchedData: MunicipalityResults) => {\n\t\t\t\tmunicipalityResultsData = fetchedData;\n\t\t\t\tloading = false;\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tconsole.error('Failed to fetch municipality results:', err);\n\t\t\t\terror = 'Failed to load data';\n\t\t\t\tloading = false;\n\t\t\t});\n\t});\n\n\t// Sem município selecionado: by-municipality.json não tem um total\n\t// consolidado do estado (só leader/runner-up por município) — busca à\n\t// parte o resultado completo escopado pro estado (sem municipalityId),\n\t// que já traz o ranking inteiro de candidatos e o total de votos válidos.\n\tlet stateResultsData: ElectionResults | null = $state(null);\n\n\t$effect(() => {\n\t\tif (!browser || mock) return;\n\t\tif (!selectedUf || !selectedFilter) {\n\t\t\tstateResultsData = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedOffice = officeMap[selectedFilter] || 'governor';\n\n\t\tloading = true;\n\t\terror = null;\n\t\tstateResultsData = null;\n\n\t\tgetElectionResults(year, { office: selectedOffice, round: 1, state: selectedUf })\n\t\t\t.then((fetchedData: ElectionResults) => {\n\t\t\t\tstateResultsData = fetchedData;\n\t\t\t\tloading = false;\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tconsole.error('Failed to fetch state results:', err);\n\t\t\t\terror = 'Failed to load data';\n\t\t\t\tloading = false;\n\t\t\t});\n\t});\n\n\tconst selectedUfLabel = $derived(\n\t\tufOptions.find((o) => o.value === selectedUf)?.label.replace(/ [A-Z]{2}$/, '') ?? null\n\t);\n\n\tconst mockCandidates = [\n\t\t{ name: 'Candidato A', tag: 'ABC', tagColor: '#d97706', dotColor: '#d97706', votes: '42,8%' },\n\t\t{ name: 'Candidato B', tag: 'EFG', tagColor: '#166534', dotColor: '#166534', votes: '31,4%' },\n\t\t{ name: 'Candidato C', tag: 'HIJ', tagColor: '#1e3461', dotColor: '#1e3461', votes: '12,6%' },\n\t\t{ name: 'Candidato D', tag: 'KLM', tagColor: '#374151', dotColor: '#374151', votes: '6,7%' }\n\t];\n\n\tconst mockRings = [\n\t\t{ value: 42.8, color: '#d97706', label: 'ABC' },\n\t\t{ value: 31.4, color: '#166534', label: 'EFG' },\n\t\t{ value: 12.6, color: '#1e3461', label: 'HIJ' },\n\t\t{ value: 6.7, color: '#374151', label: 'KLM' }\n\t];\n\n\t// Município selecionado dentro da lista de resultados da UF (a API só devolve leader/runner-up por município).\n\tconst selectedMunicipioData = $derived.by(() => {\n\t\tif (\n\t\t\t!mock &&\n\t\t\tselectedMunicipio &&\n\t\t\tmunicipalityResultsData?.municipalities &&\n\t\t\tArray.isArray(municipalityResultsData.municipalities)\n\t\t) {\n\t\t\treturn (\n\t\t\t\tmunicipalityResultsData.municipalities.find(\n\t\t\t\t\t(m: { municipality_id: number }) => String(m.municipality_id) === selectedMunicipio\n\t\t\t\t) ?? null\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t});\n\n\tconst processedData = $derived.by(() => {\n\t\tif (mock) {\n\t\t\treturn { candidates: mockCandidates, rings: mockRings, totalVotes: '118.552.353' };\n\t\t}\n\n\t\tif (!selectedMunicipio) {\n\t\t\tif (!stateResultsData?.candidates?.length) return { candidates: [], rings: [], totalVotes: null };\n\n\t\t\tconst results = [...stateResultsData.candidates].sort((a, b) => b.valid_votes_pct - a.valid_votes_pct);\n\n\t\t\treturn {\n\t\t\t\tcandidates: results.map((c) => ({\n\t\t\t\t\tname: toTitleCase(c.ballot_name),\n\t\t\t\t\ttag: c.party_abbr,\n\t\t\t\t\tdotColor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\t\t\ttagColor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\t\t\tvotes: `${c.valid_votes_pct.toFixed(1)}%`,\n\t\t\t\t\telected: c.elected ?? false,\n\t\t\t\t\t// `status` ainda não é publicado nesse endpoint — quando vier, a tag\n\t\t\t\t\t// aparece sozinha; sem ele, statusTagLabel devolve null e nada muda.\n\t\t\t\t\tstatusLabel: statusTagLabel((c as any).status),\n\t\t\t\t\tstatusColor: statusTagColor((c as any).status)\n\t\t\t\t})),\n\t\t\t\trings: results.map((c) => ({\n\t\t\t\t\tvalue: c.valid_votes_pct,\n\t\t\t\t\tcolor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\t\t\tlabel: c.party_abbr\n\t\t\t\t})),\n\t\t\t\ttotalVotes: stateResultsData.summary?.total_valid_votes.toLocaleString('pt-BR') ?? null,\n\t\t\t};\n\t\t}\n\n\t\tif (!selectedMunicipioData) {\n\t\t\t// Sem dado real pra esse município (ainda não publicado, ou fora da\n\t\t\t// curadoria de by-municipality) — lista vazia, não finge dado.\n\t\t\treturn { candidates: [], rings: [], totalVotes: null };\n\t\t}\n\n\t\t// A rota by-municipality só traz os 2 primeiros colocados (leader/runner-up) por município.\n\t\tconst results = [selectedMunicipioData.leader, selectedMunicipioData.runner_up]\n\t\t\t.filter(Boolean)\n\t\t\t.sort((a, b) => b.valid_votes_pct - a.valid_votes_pct);\n\n\t\tconst candidatesList = results.map((c) => ({\n\t\t\tname: c.name ? toTitleCase(c.name) : 'Unknown',\n\t\t\ttag: c.party_abbr || '',\n\t\t\tdotColor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\ttagColor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\tvotes: `${c.valid_votes_pct.toFixed(1)}%`,\n\t\t\telected: c.elected ?? false,\n\t\t\tstatusLabel: statusTagLabel((c as any).status),\n\t\t\tstatusColor: statusTagColor((c as any).status)\n\t\t}));\n\n\t\tconst rings = results.map((c) => ({\n\t\t\tvalue: c.valid_votes_pct,\n\t\t\tcolor: c.party_color || 'var(--sevn-color-primary)',\n\t\t\tlabel: c.party_abbr || ''\n\t\t}));\n\n\t\t// Sem \"Total\": by-municipality só traz o 1º e 2º colocados, então somar\n\t\t// os dois não é o total de votos do município (falta o resto).\n\t\treturn { candidates: candidatesList, rings, totalVotes: null };\n\t});\n\n\tconst candidates = $derived(processedData.candidates);\n\tconst rings = $derived(processedData.rings);\n\t// CandidateVotesRanking já adiciona o sufixo \"votos\" sozinho — só repassa o número.\n\tconst totalVotesDisplay = $derived(processedData.totalVotes);\n\n\tconst lastUpdate = $derived.by(() => {\n\t\tif (mock) return MOCK_UPDATE;\n\t\treturn formatUpdate(\n\t\t\t!selectedMunicipio\n\t\t\t\t? stateResultsData?.summary?.last_updated\n\t\t\t\t: municipalityResultsData?.last_updated\n\t\t);\n\t});\n\n\tlet isMobile = $state(browser ? window.innerWidth <= 480 : false);\n\n\t$effect(() => {\n\t\tif (!browser) return;\n\t\tconst mq = window.matchMedia('(max-width: 480px)');\n\t\tisMobile = mq.matches;\n\t\tconst handler = (e: MediaQueryListEvent) => {\n\t\t\tisMobile = e.matches;\n\t\t};\n\t\tmq.addEventListener('change', handler);\n\t\treturn () => mq.removeEventListener('change', handler);\n\t});\n</script>\n\n<div class=\"sevn_perf_muni\" class:sevn_perf_muni--raw={rawStyle}>\n\t<Header\n\t\ttitle={header.title}\n\t\tdescription={header.description}\n\t\ttag={header.tag}\n\t\ttagColor={header.tagColor}\n\t/>\n\n\t<!-- Web: cargo em dropdown compacto, no padrão dos componentes 04/05/06 -->\n\t<div class=\"sevn_perf_muni__office-web\">\n\t\t<FilterDropdown label=\"Cargo\" options={filterOptions} bind:value={selectedFilter} />\n\t</div>\n\n\t<!-- Web: filtros lado a lado -->\n\t<div class=\"sevn_perf_muni__filters-web\">\n\t\t<div class=\"sevn_perf_muni__filter-uf\">\n\t\t\t<Autocomplete\n\t\t\t\tlabel=\"Busque por UF\"\n\t\t\t\toptions={ufOptions}\n\t\t\t\ticon={chevronIconUrl}\n\t\t\t\ticonSize={13}\n\t\t\t\tbind:value={selectedUf}\n\t\t\t/>\n\t\t</div>\n\t\t<div class=\"sevn_perf_muni__filter-municipio\">\n\t\t\t<Autocomplete\n\t\t\t\tlabel=\"Busque por município (opcional)\"\n\t\t\t\toptions={municipioOptions}\n\t\t\t\ticon={chevronIconUrl}\n\t\t\t\ticonSize={13}\n\t\t\t\tbind:value={selectedMunicipio}\n\t\t\t/>\n\t\t</div>\n\t</div>\n\n\t<!-- Mobile: filtro de UF -->\n\t<div class=\"sevn_perf_muni__filter-mobile\">\n\t\t<Autocomplete\n\t\t\tlabel={selectedUf ? `Você selecionou:` : 'Busque por estado'}\n\t\t\toptions={ufOptions}\n\t\t\ticon={chevronIconUrl}\n\t\t\ticonSize={13}\n\t\t\tbind:value={selectedUf}\n\t\t/>\n\t</div>\n\n\t<!-- Mobile: após selecionar UF, mostra filtro de município -->\n\t{#if selectedUf}\n\t\t<div class=\"sevn_perf_muni__filter-secondary-mobile\">\n\t\t\t<Autocomplete\n\t\t\t\tlabel=\"Busque por município (opcional):\"\n\t\t\t\toptions={municipioOptions}\n\t\t\t\ticon={chevronIconUrl}\n\t\t\t\ticonSize={13}\n\t\t\t\tbind:value={selectedMunicipio}\n\t\t\t/>\n\t\t</div>\n\t{/if}\n\n\t<!-- Mobile: após selecionar UF, mostra filtro secundário (município é opcional) -->\n\t{#if selectedUf}\n\t\t<div class=\"sevn_perf_muni__filter-secondary-mobile\">\n\t\t\t<Autocomplete\n\t\t\t\tlabel=\"Cargo:\"\n\t\t\t\tshowLabel={false}\n\t\t\t\tshowLabelInField={true}\n\t\t\t\tlabelAsPlaceholder={true}\n\t\t\t\tshowPlaceholderOnMobile={true}\n\t\t\t\toptions={filterOptions}\n\t\t\t\tbind:value={selectedFilter}\n\t\t\t/>\n\t\t</div>\n\t{/if}\n\n\t<!-- Conteúdo: gráfico + ranking -->\n\t{#if selectedUf && selectedFilter}\n\t\t{#if loading}\n\t\t\t<p class=\"sevn_perf_muni__status\">Carregando...</p>\n\t\t{:else if error}\n\t\t\t<p class=\"sevn_perf_muni__status sevn_perf_muni__status--error\">{error}</p>\n\t\t{:else if !mock && candidates.length === 0}\n\t\t\t<p class=\"sevn_perf_muni__status\">\n\t\t\t\tResultado ainda não publicado para {selectedMunicipio ? 'este município' : 'este estado'}.\n\t\t\t</p>\n\t\t{:else}\n\t\t\t<div class=\"sevn_perf_muni__content\">\n\t\t\t\t<div class=\"sevn_perf_muni__chart\">\n\t\t\t\t\t<MultiRingChart\n\t\t\t\t\t\t{rings}\n\t\t\t\t\t\tcenterLabel={filterOptions.find((f) => f.value === selectedFilter)?.label ?? ''}\n\t\t\t\t\t\tcenterLabelSize={14}\n\t\t\t\t\t\tsize={isMobile ? '230px' : '350px'}\n\t\t\t\t\t\touterRadius={100}\n\t\t\t\t\t\tthickness={10}\n\t\t\t\t\t\tringGap={5}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"sevn_perf_muni__ranking\">\n\t\t\t\t\t<CandidateVotesRanking\n\t\t\t\t\t\t{candidates}\n\t\t\t\t\t\ttotalVotes={totalVotesDisplay}\n\t\t\t\t\t\tdate={lastUpdate}\n\t\t\t\t\t\tfont=\"TSE\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{/if}\n\t{/if}\n</div>\n\n<style>\n\t.sevn_perf_muni {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 24px;\n\t}\n\n\t.sevn_perf_muni--raw,\n\t.sevn_perf_muni--raw * {\n\t\tall: revert;\n\t}\n\n\t.sevn_perf_muni__status {\n\t\tfont-size: 0.875rem;\n\t\tcolor: var(--sevn-color-text-secondary, #6b7280);\n\t}\n\n\t.sevn_perf_muni__status--error {\n\t\tcolor: #e11d48;\n\t}\n\n\t/* ── Web (oculto no mobile) ─────────────────────────── */\n\t.sevn_perf_muni__office-web,\n\t.sevn_perf_muni__filters-web {\n\t\tdisplay: none;\n\t}\n\n\t/* ── Mobile (visível por padrão) ────────────────────── */\n\t.sevn_perf_muni__filter-mobile {\n\t\tdisplay: block;\n\t}\n\n\t.sevn_perf_muni__filter-secondary-mobile {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\t}\n\n\t/* Dropdown inline no mobile */\n\t.sevn_perf_muni__filter-secondary-mobile :global(.dropdown) {\n\t\tposition: static;\n\t\tmargin-top: 10px;\n\t}\n\n\t/* Mobile: chart centralizado, ranking abaixo */\n\t.sevn_perf_muni__content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 24px;\n\t}\n\n\t.sevn_perf_muni__chart {\n\t\twidth: 220px;\n\t\tmargin: 0 auto;\n\t}\n\n\t.sevn_perf_muni :global(.dropdown) {\n\t\tposition: static;\n\t\tmargin-top: 10px;\n\t}\n\n\t/* A regra acima é para os Autocomplete, que abrem empurrando o conteúdo. O\n\t FilterDropdown do cargo se posiciona sozinho (absolute, abaixo do gatilho)\n\t — sem esta exceção ele vira um item do flex e abre ao lado, não abaixo. */\n\t.sevn_perf_muni .sevn_perf_muni__office-web :global(.dropdown) {\n\t\tposition: absolute;\n\t\tmargin-top: 0;\n\t}\n\n\t.sevn_perf_muni :global(.vote-overview) {\n\t\tpadding: 10px 0;\n\t\tfont-size: 0.7rem;\n\t\tgap: 8px;\n\t}\n\n\t.sevn_perf_muni :global(.vote-overview .vote-overview-stats) {\n\t\tgap: 8px;\n\t}\n\n\t/* ── Desktop overrides ──────────────────────────────── */\n\t@media (min-width: 768px) {\n\t\t.sevn_perf_muni__office-web {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.sevn_perf_muni__filters-web {\n\t\t\tdisplay: flex;\n\t\t\tgap: 16px;\n\t\t\talign-items: flex-start;\n\t\t}\n\n\t\t.sevn_perf_muni__filter-uf {\n\t\t\tflex: 2;\n\t\t}\n\n\t\t.sevn_perf_muni__filter-municipio {\n\t\t\tflex: 2;\n\t\t}\n\n\t\t.sevn_perf_muni__filter-mobile {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.sevn_perf_muni__filter-secondary-mobile {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t/* Web: chart à esquerda, ranking à direita */\n\t\t.sevn_perf_muni__content {\n\t\t\tflex-direction: row;\n\t\t\talign-items: center;\n\t\t\tgap: 48px;\n\t\t}\n\n\t\t.sevn_perf_muni__chart {\n\t\t\twidth: 370px;\n\t\t\tflex-shrink: 0;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.sevn_perf_muni__ranking {\n\t\t\tflex: 1;\n\t\t}\n\n\t\t.sevn_perf_muni :global(.vote-overview) {\n\t\t\tpadding: 8px 0;\n\t\t\tgap: 8px;\n\t\t\talign-items: flex-end;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n import type { ResultsByOfficeProps } from './props';\n import { untrack } from 'svelte';\n import { Header, Autocomplete, FilterDropdown, CandidateList, VoteOverview } from '$lib';\n import type { HeaderProps } from '$lib';\n import { browser } from '$core/env';\n import { getElectionResults, getMunicipalities } from '$services/api';\n import { toTitleCase } from '../utils/formatName';\n import type {\n CandidateResult,\n ElectionOffice,\n ElectionResults,\n MunicipalitiesList,\n Municipality,\n } from '$services/types';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, formatUpdate } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n defaultOffice = 'senator',\n itemsPerPage = 10,\n header = {\n title: 'Resultados por cargo',\n description: 'Filtre por cargo, estado ou município e confira os votos, percentuais e dados de cada candidato.'\n }\n }: ResultsByOfficeProps = $props();\n\n // Senador, deputado federal e deputado estadual têm o mesmo formato de\n // results.json — troca por select em vez de duplicar o componente pra cada cargo.\n const officeOptions = [\n { value: 'senador', label: 'Senador' },\n { value: 'deputado-federal', label: 'Deputado Federal' },\n { value: 'deputado-estadual', label: 'Deputado Estadual' },\n ];\n const officeMap: Record<string, ElectionOffice> = {\n senador: 'senator',\n 'deputado-federal': 'federal_deputy',\n 'deputado-estadual': 'state_deputy',\n };\n const officeReverseMap: Record<'senator' | 'federal_deputy' | 'state_deputy', string> = {\n senator: 'senador',\n federal_deputy: 'deputado-federal',\n state_deputy: 'deputado-estadual',\n };\n\n let selectedOffice = $state(untrack(() => officeReverseMap[defaultOffice] ?? 'senador'));\n\n let resultsData: ElectionResults | null = $state(null);\n let loading = $state(false);\n let error = $state<string | null>(null);\n\n const ufOptions = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n type Option = { value: string; label: string };\n\n const mockMunicipalityOptions: Option[] = [\n { value: '3507001', label: 'Boituva' },\n { value: '3509502', label: 'Campinas' },\n { value: '3518800', label: 'Guarulhos' },\n { value: '3543402', label: 'Ribeirão Preto' },\n { value: '3548500', label: 'Santos' },\n { value: '3549805', label: 'São João da Boa Vista' },\n { value: '3550308', label: 'São Paulo' },\n { value: '3552205', label: 'Sorocaba' },\n ];\n\n let selectedUf = $state<string | null>(null);\n let selectedMunicipality = $state<string | null>(null);\n\n let municipalitiesData = $state<MunicipalitiesList | null>(null);\n let municipalitiesLoading = $state(false);\n\n // Ao trocar a UF, recarrega a lista de municípios e limpa a seleção anterior\n $effect(() => {\n if (!browser || !selectedUf) return;\n\n selectedMunicipality = null;\n if (mock) return;\n\n municipalitiesData = null;\n municipalitiesLoading = true;\n\n getMunicipalities(selectedUf)\n .then((data: MunicipalitiesList) => {\n municipalitiesData = data;\n municipalitiesLoading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch municipalities:', err);\n municipalitiesLoading = false;\n });\n });\n\n const municipalityOptions = $derived.by((): Option[] => {\n if (!mock && municipalitiesData?.municipalities) {\n return municipalitiesData.municipalities.map((m: Municipality) => ({\n value: String(m.municipality_id),\n label: m.name,\n }));\n }\n return mock ? mockMunicipalityOptions : [];\n });\n\n const selectedMunicipalityLabel = $derived(\n municipalityOptions.find((o) => o.value === selectedMunicipality)?.label ?? null\n );\n\n const municipalityFilterLabel = $derived.by(() => {\n if (!selectedUf) return 'Selecione a UF primeiro';\n if (municipalitiesLoading) return 'Carregando municípios...';\n if (selectedMunicipality) return 'Você selecionou:';\n return 'Busque pelo município';\n });\n\n // Senado é eleição de turno único\n const ROUND = 1;\n\n // Município é opcional — \"filtre por estado ou município\": só a UF já\n // mostra o resultado estadual; escolher o município também refina pra ele.\n $effect(() => {\n if (!browser || mock) return;\n // Sem UF (inclusive depois de limpar o filtro) zera o resultado — senão fica\n // na tela o dado do estado anterior.\n if (!selectedUf || !selectedOffice) {\n resultsData = null;\n return;\n }\n\n loading = true;\n error = null;\n resultsData = null;\n\n getElectionResults(year, {\n office: officeMap[selectedOffice] || 'senator',\n round: ROUND,\n state: selectedUf,\n municipalityId: selectedMunicipality ? Number(selectedMunicipality) : undefined,\n })\n .then((fetchedData: ElectionResults) => {\n resultsData = fetchedData;\n loading = false;\n })\n .catch((err: unknown) => {\n console.error('Failed to fetch municipality results:', err);\n error = 'Failed to load data';\n loading = false;\n });\n });\n\n const mockCandidates = [\n { position: '1° Lugar', name: 'Candidato A', tag: 'ABC', tagColor: '#166534', avatarColor: '#166534', number: '123', votes: '42,8% dos votos válidos', elected: true },\n { position: '2° Lugar', name: 'Candidato B', tag: 'DEF', tagColor: '#d97706', avatarColor: '#d97706', number: '456', votes: '31,4% dos votos válidos', elected: true },\n { position: '3° Lugar', name: 'Candidato C', tag: 'GHI', tagColor: '#1e3461', avatarColor: '#1e3461', number: '789', votes: '15,6% dos votos válidos' },\n { position: '4° Lugar', name: 'Candidato D', tag: 'JKL', tagColor: '#374151', avatarColor: '#374151', number: '321', votes: '6,7% dos votos válidos' },\n { position: '5° Lugar', name: 'Candidato E', tag: 'MNO', tagColor: '#e11d48', avatarColor: '#e11d48', number: '654', votes: '3,5% dos votos válidos' },\n ];\n\n const processedData = $derived.by(() => {\n if (!mock && resultsData?.candidates && Array.isArray(resultsData.candidates)) {\n const results = [...resultsData.candidates].sort(\n (a, b) => b.valid_votes_pct - a.valid_votes_pct\n );\n\n const candidatesList = results.map((result: CandidateResult, index: number) => ({\n position: `${index + 1}° Lugar`,\n name: toTitleCase(result.ballot_name),\n photoUrl: result.photo_url,\n tag: result.party_abbr,\n tagColor: result.party_color || 'var(--sevn-color-primary)',\n avatarColor: result.party_color || 'var(--sevn-color-primary)',\n number: result.number ?? '',\n votes: `${result.valid_votes_pct.toFixed(1).replace('.', ',')}% dos votos válidos`,\n elected: result.elected ?? false,\n }));\n\n const { total_valid_votes, null_votes, blank_votes } = resultsData.summary;\n const totalCast = total_valid_votes + null_votes + blank_votes;\n\n return {\n candidates: candidatesList,\n overview: [\n { text: 'Nulos', value: `${((null_votes / totalCast) * 100).toFixed(2)}%` },\n { text: 'Brancos', value: `${((blank_votes / totalCast) * 100).toFixed(2)}%` },\n { text: 'Válidos', value: `${total_valid_votes.toLocaleString('pt-BR')} votos` },\n ],\n lastUpdate: formatUpdate(resultsData.summary.last_updated),\n };\n }\n\n if (mock) {\n return {\n candidates: mockCandidates,\n overview: [\n { text: 'Nulos', value: '3,16%' },\n { text: 'Brancos', value: '1,43%' },\n { text: 'Válidos', value: '118.552.353 votos' },\n ],\n lastUpdate: MOCK_UPDATE,\n };\n }\n\n return {\n candidates: [],\n overview: [],\n lastUpdate: '',\n };\n });\n\n const candidates = $derived(processedData.candidates);\n const overviewData = $derived(processedData.overview);\n const lastUpdateDisplay = $derived(processedData.lastUpdate);\n\n const updatedMeta = $derived(\n lastUpdateDisplay ? `Atualizado em ${lastUpdateDisplay} | Fonte TSE` : 'Fonte TSE'\n );\n</script>\n\n<div class=\"sevn_results_office\" class:sevn_results_office--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <div class=\"sevn_results_office__office-web\">\n <FilterDropdown label=\"Cargo\" options={officeOptions} bind:value={selectedOffice} />\n </div>\n <div class=\"sevn_results_office__office-mobile\">\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={officeOptions}\n bind:value={selectedOffice}\n />\n </div>\n\n {#if selectedOffice}\n <!-- Web: dois filtros lado a lado -->\n <div class=\"sevn_results_office__filters-web\">\n <div class=\"sevn_results_office__filter-uf\">\n <Autocomplete\n label=\"Busque por UF\"\n options={ufOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n meta={updatedMeta}\n />\n </div>\n <div class=\"sevn_results_office__filter-by\">\n <Autocomplete\n label={municipalityFilterLabel}\n options={municipalityOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedMunicipality}\n disabled={!selectedUf || municipalitiesLoading}\n />\n </div>\n </div>\n\n <!-- Mobile: filtros empilhados -->\n <div class=\"sevn_results_office__filters-mobile\">\n <Autocomplete\n label={selectedUf ? \"Você selecionou:\" : \"Busque por estado:\"}\n options={ufOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n />\n <Autocomplete\n label={municipalityFilterLabel}\n options={municipalityOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedMunicipality}\n disabled={!selectedUf || municipalitiesLoading}\n />\n </div>\n\n <!-- Loading/Error/Content -->\n {#if selectedUf}\n {#if loading}\n <p class=\"sevn_results_office__status\">\n Carregando resultados{selectedMunicipalityLabel ? ` de ${selectedMunicipalityLabel}` : ''}...\n </p>\n {:else if error}\n <p class=\"sevn_results_office__status sevn_results_office__status--error\">{error}</p>\n {:else}\n <!-- Lista de candidatos -->\n <CandidateList {candidates} {itemsPerPage} />\n\n <!-- Footer -->\n <VoteOverview\n data={overviewData}\n date={lastUpdateDisplay}\n font=\"TSE\"\n borderTop={true}\n />\n {/if}\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_results_office {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_results_office--raw,\n .sevn_results_office--raw * {\n all: revert;\n }\n\n .sevn_results_office__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_results_office__status--error {\n color: #e11d48;\n }\n\n .sevn_results_office__office-web {\n display: none;\n }\n\n .sevn_results_office__office-mobile {\n display: block;\n width: 100%;\n }\n\n @media (min-width: 768px) {\n .sevn_results_office__office-web {\n display: block;\n }\n\n .sevn_results_office__office-mobile {\n display: none;\n }\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_results_office__filters-web {\n display: none;\n }\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_results_office__filters-mobile {\n display: flex;\n flex-direction: column;\n gap: 25px;\n }\n\n .sevn_results_office :global(.vote-overview) {\n padding: 10px 0;\n font-size: 0.7rem;\n gap: 8px;\n }\n\n .sevn_results_office :global(.vote-overview .vote-overview-stats) {\n gap: 8px;\n }\n\n @media (max-width: 767px) {\n .sevn_results_office :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_results_office__filters-web {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n\n .sevn_results_office__filter-uf,\n .sevn_results_office__filter-by {\n flex: 1;\n min-width: 0;\n }\n\n .sevn_results_office__filters-mobile {\n display: none;\n }\n\n .sevn_results_office :global(.vote-overview) {\n padding: 8px 0;\n gap: 8px;\n align-items: flex-end;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { VotingMapProps } from './props';\n import { onMount } from 'svelte';\n import { Header, FilterState, Autocomplete, Ad, Map, MapLegend, Candidate } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getMunicipalities, getCountingProgress, getMunicipalityResults, getElectionResults } from '$services/api';\n import type { MunicipalitiesList, CountingProgress, MunicipalityResults, ElectionResults } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE, MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n showAd = false,\n year = 2026,\n round = 1,\n header = {\n title: 'Mapa de Votação',\n description: 'Selecione o estado e veja a apuração em tempo real'\n }\n }: VotingMapProps = $props();\n\n const ufStates = [\n { value: 'ac', label: 'Acre' },\n { value: 'al', label: 'Alagoas' },\n { value: 'ap', label: 'Amapá' },\n { value: 'am', label: 'Amazonas' },\n { value: 'ba', label: 'Bahia' },\n { value: 'ce', label: 'Ceará' },\n { value: 'df', label: 'Distrito Federal' },\n { value: 'es', label: 'Espírito Santo' },\n { value: 'go', label: 'Goiás' },\n { value: 'ma', label: 'Maranhão' },\n { value: 'mg', label: 'Minas Gerais' },\n { value: 'ms', label: 'Mato Grosso do Sul' },\n { value: 'mt', label: 'Mato Grosso' },\n { value: 'pa', label: 'Pará' },\n { value: 'pb', label: 'Paraíba' },\n { value: 'pe', label: 'Pernambuco' },\n { value: 'pi', label: 'Piauí' },\n { value: 'pr', label: 'Paraná' },\n { value: 'rj', label: 'Rio de Janeiro' },\n { value: 'rn', label: 'Rio Grande do Norte' },\n { value: 'ro', label: 'Rondônia' },\n { value: 'rr', label: 'Roraima' },\n { value: 'rs', label: 'Rio Grande do Sul' },\n { value: 'sc', label: 'Santa Catarina' },\n { value: 'se', label: 'Sergipe' },\n { value: 'sp', label: 'São Paulo' },\n { value: 'to', label: 'Tocantins' },\n ];\n\n const officeOptions = [\n { value: 'president', label: 'Presidente' },\n { value: 'governor', label: 'Governador' },\n { value: 'senator', label: 'Senador' },\n ];\n\n const mockMunicipioOptions = [\n { value: 'sao-joao-da-boa-vista', label: 'São João da Boa Vista' },\n { value: 'campinas', label: 'Campinas' },\n { value: 'sao-paulo', label: 'São Paulo' },\n { value: 'sorocaba', label: 'Sorocaba' },\n { value: 'santos', label: 'Santos' },\n { value: 'guarulhos', label: 'Guarulhos' },\n { value: 'ribeirao-preto', label: 'Ribeirão Preto' },\n ];\n\n let selectedUf = $state('');\n let selectedOffice = $state<'president' | 'governor' | 'senator'>('president');\n let selectedMunicipio = $state<string | null>(null);\n let municipioData = $state<MunicipalitiesList | null>(null);\n let municipioLoading = $state(false);\n let progressData = $state<CountingProgress | null>(null);\n let progressLoading = $state(false);\n let municipalityResultsData = $state<MunicipalityResults | null>(null);\n let municipalityResultsLoading = $state(false);\n let selectedCid = $state<string | null>(null);\n let mapWrapperEl = $state<HTMLDivElement | undefined>(undefined);\n let sideWebEl = $state<HTMLDivElement | undefined>(undefined);\n let muniMobileEl = $state<HTMLDivElement | undefined>(undefined);\n\n $effect(() => {\n if (!mock && selectedUf) {\n selectedMunicipio = null;\n municipioData = null;\n municipioLoading = true;\n\n getMunicipalities(selectedUf)\n .then((data: MunicipalitiesList) => {\n municipioData = data;\n municipioLoading = false;\n })\n .catch((err: any) => {\n console.error('Failed to fetch municipalities:', err);\n municipioLoading = false;\n });\n } else if (!selectedUf) {\n selectedMunicipio = null;\n municipioData = null;\n }\n });\n\n $effect(() => {\n if (!mock && selectedUf) {\n progressData = null;\n progressLoading = true;\n\n getCountingProgress(year, round, selectedUf)\n .then((data: CountingProgress) => {\n progressData = data;\n progressLoading = false;\n })\n .catch((err: any) => {\n console.error('Failed to fetch counting progress:', err);\n progressLoading = false;\n });\n } else if (!selectedUf) {\n progressData = null;\n }\n });\n\n $effect(() => {\n if (!mock && selectedUf && selectedOffice) {\n municipalityResultsData = null;\n municipalityResultsLoading = true;\n\n getMunicipalityResults(year, selectedOffice, round, selectedUf)\n .then((data: MunicipalityResults) => {\n municipalityResultsData = data;\n municipalityResultsLoading = false;\n })\n .catch((err: any) => {\n console.error('Failed to fetch municipality results:', err);\n municipalityResultsLoading = false;\n });\n } else if (!selectedUf) {\n municipalityResultsData = null;\n }\n });\n\n // Sem município selecionado: by-municipality.json não tem um resultado\n // consolidado do estado — busca à parte o resultado completo escopado pro\n // estado (sem municipalityId), com o ranking inteiro de candidatos.\n let stateResultsData: ElectionResults | null = $state(null);\n\n $effect(() => {\n if (!mock && selectedUf && selectedOffice) {\n stateResultsData = null;\n\n getElectionResults(year, { office: selectedOffice, round, state: selectedUf })\n .then((data: ElectionResults) => { stateResultsData = data; })\n .catch((err: any) => { console.error('Failed to fetch state results:', err); });\n } else if (!selectedUf) {\n stateResultsData = null;\n }\n });\n\n // Município é opcional — sem seleção, mostra o resultado do estado inteiro.\n const municipioOptions = $derived.by(() => {\n if (!mock && municipioData?.municipalities) {\n return municipioData.municipalities.map((m: any) => ({\n value: String(m.municipality_id),\n label: m.name,\n }));\n }\n return mock ? mockMunicipioOptions : ([] as typeof mockMunicipioOptions);\n });\n\n const selectedUfLabel = $derived(\n ufStates.find(s => s.value === selectedUf)?.label ?? null\n );\n\n const selectedMunicipioLabel = $derived(\n municipioOptions.find((o: any) => o.value === selectedMunicipio)?.label ?? null\n );\n\n const legendSegments = [\n { color: '#D9D9D9', label: '0 - 25%' },\n { color: '#A0A0A0', label: '26 - 60%' },\n { color: '#5A5A5A', label: '61 - 99%' },\n { color: '#1C1C1C', label: '100%' },\n ];\n\n function slugify(name: string): string {\n return name\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n }\n\n const bucketColors: Record<string, string> = {\n '0_25': '#D9D9D9',\n '26_60': '#A0A0A0',\n '61_99': '#5A5A5A',\n '100': '#1C1C1C',\n };\n\n const mockMapColors = [\n { id: 'sao-paulo::sp', color: '#D9D9D9' },\n { id: 'campinas::sp', color: '#A0A0A0' },\n { id: 'santos::sp', color: '#A0A0A0' },\n { id: 'sorocaba::sp', color: '#5A5A5A' },\n { id: 'ribeirao-preto::sp', color: '#1C1C1C' },\n { id: 'sao-jose-dos-campos::sp', color: '#5A5A5A' },\n { id: 'sao-bernardo-do-campo::sp', color: '#A0A0A0' },\n { id: 'guarulhos::sp', color: '#A0A0A0' },\n { id: 'osasco::sp', color: '#5A5A5A' },\n { id: 'sao-joao-da-boa-vista::sp', color: '#1C1C1C' },\n { id: 'maua::sp', color: '#5A5A5A' },\n { id: 'franca::sp', color: '#1C1C1C' },\n ];\n\n const mapColors = $derived.by(() => {\n if (!mock && progressData?.regions?.length) {\n const uf = selectedUf || 'sp';\n return progressData.regions.map((region: any) => ({\n id: `${slugify(region.municipality_name)}::${uf}`,\n color: bucketColors[region.bucket] ?? '#D9D9D9',\n }));\n }\n return mock ? mockMapColors : ([] as typeof mockMapColors);\n });\n\n const mockModalData = {\n 'sao-joao-da-boa-vista::sp': {\n title: 'São Paulo: São João da Boa Vista',\n footer: `Última atualização: ${MOCK_UPDATE}`,\n items: [\n { position: '1°', name: 'Candidato A', tag: 'ABC', tagColor: '#1e3461', avatarColor: '#1e3461', description: '51,8% dos votos válidos' },\n { position: '2°', name: 'Candidato B', tag: 'EFG', tagColor: '#166534', avatarColor: '#166534', description: '49,2% dos votos válidos' },\n ],\n },\n 'campinas::sp': {\n title: 'São Paulo: Campinas',\n footer: `Última atualização: ${MOCK_UPDATE}`,\n items: [\n { position: '1°', name: 'Candidato A', tag: 'ABC', tagColor: '#1e3461', avatarColor: '#1e3461', description: '55,3% dos votos válidos' },\n { position: '2°', name: 'Candidato B', tag: 'EFG', tagColor: '#166534', avatarColor: '#166534', description: '44,7% dos votos válidos' },\n ],\n },\n };\n\n type MunicipioInfo = { title: string; footer: string; candidates: Array<{ position: string; name: string; tag: string; tagColor: string; avatarColor: string; description: string }> };\n const mockMunicipioInfo: Record<string, MunicipioInfo> = ({\n 'sao-joao-da-boa-vista': {\n title: 'São João da Boa Vista',\n footer: `Última atualização: ${MOCK_UPDATE}`,\n candidates: [\n { position: '1°', name: 'Candidato A', tag: 'ABC', tagColor: '#1e3461', avatarColor: '#1e3461', description: '41,8% dos votos válidos' },\n { position: '2°', name: 'Candidato B', tag: 'EFG', tagColor: '#166534', avatarColor: '#166534', description: '41,8% dos votos válidos' },\n ],\n },\n 'campinas': {\n title: 'Campinas',\n footer: `Última atualização: ${MOCK_UPDATE}`,\n candidates: [\n { position: '1°', name: 'Candidato A', tag: 'ABC', tagColor: '#1e3461', avatarColor: '#1e3461', description: '55,3% dos votos válidos' },\n { position: '2°', name: 'Candidato B', tag: 'EFG', tagColor: '#166534', avatarColor: '#166534', description: '44,7% dos votos válidos' },\n ],\n },\n });\n\n // Líder/vice do município selecionado, para o cargo (presidente/governador/senador) em vigor.\n const selectedMunicipioResult = $derived.by(() => {\n if (!mock && selectedMunicipio && municipalityResultsData?.municipalities) {\n return municipalityResultsData.municipalities.find(\n (m: any) => String(m.municipality_id) === selectedMunicipio\n ) ?? null;\n }\n return null;\n });\n\n // A rota by-municipality só traz os 2 primeiros colocados (leader/runner-up) por município.\n const resultCandidates = $derived.by(() => {\n if (!selectedMunicipioResult) return [];\n return [selectedMunicipioResult.leader, selectedMunicipioResult.runner_up]\n .filter(Boolean)\n .sort((a, b) => b.valid_votes_pct - a.valid_votes_pct)\n .map((c, i) => ({\n position: `${i + 1}°`,\n name: toTitleCase(c.name),\n photoUrl: c.photo_url,\n tag: c.party_abbr,\n tagColor: c.party_color,\n avatarColor: c.party_color,\n description: `${c.valid_votes_pct.toFixed(1)}% dos votos válidos`,\n }));\n });\n\n const resultFooter = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(municipalityResultsData?.last_updated)\n );\n\n // Top 2 candidatos do estado inteiro (ranking completo do getElectionResults,\n // diferente do resultCandidates que só existe por município).\n const stateWideCandidates = $derived.by(() => {\n if (!stateResultsData?.candidates?.length) return [];\n return [...stateResultsData.candidates]\n .sort((a, b) => b.valid_votes_pct - a.valid_votes_pct)\n .slice(0, 2)\n .map((c, i) => ({\n position: `${i + 1}°`,\n name: toTitleCase(c.ballot_name),\n photoUrl: c.photo_url,\n tag: c.party_abbr,\n tagColor: c.party_color,\n avatarColor: c.party_color,\n description: `${c.valid_votes_pct.toFixed(1)}% dos votos válidos`,\n }));\n });\n\n const stateWideFooter = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(stateResultsData?.summary?.last_updated)\n );\n\n const selectedMunicipioInfo = $derived.by(() => {\n if (!mock) {\n if (!selectedMunicipio) {\n return stateWideCandidates.length\n ? { title: '', footer: stateWideFooter, candidates: stateWideCandidates }\n : null;\n }\n return selectedMunicipioResult\n ? { title: selectedMunicipioResult.municipality_name, footer: resultFooter, candidates: resultCandidates }\n : null;\n }\n return selectedMunicipio ? (mockMunicipioInfo[selectedMunicipio] ?? null) : null;\n });\n\n const filterMeta = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(progressData?.last_updated)\n );\n\n const modalCid = $derived(selectedCid);\n\n const activeModalData = $derived.by(() => {\n if (!mock) {\n if (!selectedMunicipio) {\n return stateWideCandidates.length\n ? { title: `${selectedUfLabel}`, footer: stateWideFooter, items: stateWideCandidates }\n : null;\n }\n return selectedMunicipioResult\n ? { title: `${selectedUfLabel}: ${selectedMunicipioResult.municipality_name}`, footer: resultFooter, items: resultCandidates }\n : null;\n }\n return modalCid ? ((mockModalData as Record<string, any>)[modalCid] ?? null) : null;\n });\n\n $effect(() => {\n if (!selectedUf || !selectedMunicipio) {\n selectedCid = null;\n return;\n }\n const option = municipioOptions.find((o: any) => o.value === selectedMunicipio);\n const muniSlug = option ? slugify(option.label) : selectedMunicipio;\n selectedCid = `${muniSlug}::${selectedUf}`;\n });\n\n function handleMapClick(info: any) {\n const cid: string = info.cid ?? '';\n const [muniSlug] = cid.split('::');\n if (!muniSlug) return;\n\n const option = municipioOptions.find((o: any) => slugify(o.label) === muniSlug);\n if (option) {\n selectedMunicipio = selectedMunicipio === option.value ? null : option.value;\n }\n }\n\n onMount(() => {\n function handleOutsideClick(e: MouseEvent) {\n if (!selectedMunicipio) return;\n const target = e.target as Node;\n if (mapWrapperEl?.contains(target)) return;\n if (sideWebEl?.contains(target)) return;\n if (muniMobileEl?.contains(target)) return;\n selectedMunicipio = null;\n }\n document.addEventListener('mousedown', handleOutsideClick);\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n });\n</script>\n\n<div class=\"sevn_voting_map\" class:sevn_voting_map--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: filtro de estados em pills -->\n <div class=\"sevn_voting_map__filter-web\">\n <FilterState\n states={ufStates}\n bind:value={selectedUf}\n meta={filterMeta}\n />\n </div>\n\n <!-- Mobile: autocomplete de UF -->\n <div class=\"sevn_voting_map__filter-mobile\">\n <Autocomplete\n label=\"Busque por estado:\"\n options={ufStates}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n />\n </div>\n\n <!-- Mobile: legenda acima do mapa -->\n <div class=\"sevn_voting_map__legend-mobile\">\n <MapLegend\n title=\"Porcentagem das urnas apuradas:\"\n segments={legendSegments}\n />\n </div>\n\n <!-- Corpo principal -->\n <div class=\"sevn_voting_map__body\">\n <!-- Coluna do mapa -->\n {#if selectedUf}\n <div class=\"sevn_voting_map__map-col\">\n <div\n class=\"sevn_voting_map__map-wrapper\"\n bind:this={mapWrapperEl}\n role=\"presentation\"\n >\n <Map\n type=\"state\"\n uf={selectedUf || 'sp'}\n colors={mapColors}\n onRegionClick={handleMapClick}\n selectionStroke=\"#00000033\"\n />\n </div>\n\n <!-- Web: legenda abaixo do mapa -->\n <div class=\"sevn_voting_map__legend-web\">\n <MapLegend\n title=\"Porcentagem das urnas apuradas:\"\n segments={legendSegments}\n />\n </div>\n </div>\n\n <!-- Web: coluna lateral (autocomplete + card do candidato + anúncio) -->\n <div class=\"sevn_voting_map__side-web\" bind:this={sideWebEl}>\n <Autocomplete\n label={selectedMunicipio ? \"Você selecionou:\" : \"Busque por Município (opcional)\"}\n options={municipioOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedMunicipio}\n />\n <div class=\"sevn_voting_map__office-field\">\n <Autocomplete\n label=\"Filtrar por\"\n options={officeOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedOffice}\n />\n </div>\n\n {#if activeModalData}\n <div class=\"sevn_voting_map__modal-card\">\n {#if activeModalData.title}\n <p class=\"sevn_voting_map__modal-title\">{activeModalData.title}:</p>\n {/if}\n {#each activeModalData.items as item}\n <div class=\"sevn_voting_map__modal-item\">\n <Candidate\n name={item.name}\n photoUrl={item.photoUrl}\n tag={item.tag}\n tagColor={item.tagColor}\n avatarColor={item.avatarColor}\n description={item.description}\n position={item.position}\n positionSide=\"left\"\n size=\"sm\"\n wrapper\n />\n </div>\n {/each}\n {#if activeModalData.footer}\n <div class=\"sevn_voting_map__modal-footer\">{activeModalData.footer}</div>\n {/if}\n </div>\n {/if}\n\n {#if showAd}\n <Ad>anuncio</Ad>\n {/if}\n </div>\n {/if}\n </div>\n\n <!-- Mobile: autocomplete de município + info card -->\n <div class=\"sevn_voting_map__muni-mobile\" bind:this={muniMobileEl}>\n <Autocomplete\n label={selectedMunicipio ? \"Você selecionou:\" : \"Busque por município (opcional):\"}\n options={municipioOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedMunicipio}\n />\n\n <div class=\"sevn_voting_map__office-field\">\n <Autocomplete\n label=\"Filtrar por:\"\n options={officeOptions}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedOffice}\n />\n </div>\n\n {#if selectedMunicipioInfo}\n <p class=\"sevn_voting_map__muni-card-title\">\n {selectedUfLabel}{selectedMunicipioInfo.title ? `: ${selectedMunicipioInfo.title}` : ''}\n </p>\n <div class=\"sevn_voting_map__muni-card\">\n {#each selectedMunicipioInfo.candidates as c}\n <Candidate\n name={c.name}\n tag={c.tag}\n tagColor={c.tagColor}\n avatarColor={c.avatarColor}\n description={c.description}\n position={c.position}\n positionSide=\"left\"\n size=\"sm\"\n />\n {/each}\n </div>\n <p class=\"sevn_voting_map__muni-card-footer\">{selectedMunicipioInfo.footer}</p>\n {/if}\n </div>\n</div>\n\n<style>\n .sevn_voting_map {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_voting_map--raw,\n .sevn_voting_map--raw * {\n all: revert;\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_voting_map__filter-web {\n display: none;\n }\n\n .sevn_voting_map__legend-web {\n display: none;\n }\n\n .sevn_voting_map__side-web {\n display: none;\n }\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_voting_map__body {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_voting_map__map-col {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_voting_map__map-wrapper {\n position: relative;\n }\n\n .sevn_voting_map__modal-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n padding: 14px 16px;\n min-width: 210px;\n font-family: inherit;\n }\n\n .sevn_voting_map__modal-title {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 0 0 10px;\n }\n\n .sevn_voting_map__modal-item {\n margin-bottom: 10px;\n }\n\n .sevn_voting_map__modal-item:last-child {\n margin-bottom: 0;\n }\n\n .sevn_voting_map__modal-footer {\n border-top: 1px solid #f0f0f5;\n margin-top: 10px;\n padding-top: 8px;\n font-size: 0.75rem;\n color: #9a9aaa;\n }\n\n .sevn_voting_map__muni-mobile {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .sevn_voting_map__muni-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);\n background: #fff;\n }\n\n .sevn_voting_map__muni-card-title {\n font-size: 0.875rem;\n font-weight: 700;\n color: var(--sevn-color-tertiary);\n margin: 0;\n }\n\n .sevn_voting_map__muni-card-footer {\n font-size: 0.75rem;\n color: var(--sevn-color-tertiary);\n opacity: 0.6;\n margin: 0;\n }\n\n .sevn_voting_map :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n /* Filtro de cargo: dropdown flutua por cima do conteúdo em vez de\n empurrar o card de resultado/anúncio para baixo ao abrir. */\n .sevn_voting_map .sevn_voting_map__office-field :global(.dropdown) {\n position: absolute;\n margin-top: 0;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_voting_map__filter-web {\n display: block;\n }\n\n .sevn_voting_map__filter-mobile {\n display: none;\n }\n\n .sevn_voting_map__legend-mobile {\n display: none;\n }\n\n .sevn_voting_map__muni-mobile {\n display: none;\n }\n\n .sevn_voting_map__body {\n flex-direction: row;\n align-items: flex-start;\n gap: 32px;\n }\n\n .sevn_voting_map__map-col {\n flex: 3;\n }\n\n .sevn_voting_map__legend-web {\n display: block;\n }\n\n .sevn_voting_map__side-web {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n min-width: 0;\n }\n\n .sevn_voting_map__side-web :global(.ad-container) {\n flex: 1;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { CandidateCountingProgressProps } from './props';\n import { Header, FilterState, Autocomplete, CandidateRankingTable } from '$lib';\n import { getResultsTimeline } from '$services/api';\n import type { ResultsTimeline } from '$services/types';\n import { toTitleCase } from '../utils/formatName';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n header = {\n title: 'Evolução da Apuração para Governador',\n description: 'Selecione o estado e veja a apuração em tempo real'\n }\n }: CandidateCountingProgressProps = $props();\n\n let timelineData: ResultsTimeline | null = $state(null);\n let loading = $state(false);\n let error = $state<string | null>(null);\n\n const ufStates = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n let selectedUf = $state('');\n\n $effect(() => {\n if (!mock && selectedUf) {\n const office = 'governor';\n const round = 1;\n const requestedUf = selectedUf;\n\n loading = true;\n error = null;\n timelineData = null;\n\n getResultsTimeline(year, office, round, requestedUf)\n .then((fetchedData: ResultsTimeline) => {\n if (requestedUf !== selectedUf) return; // seleção já mudou, descarta resposta velha\n timelineData = fetchedData;\n loading = false;\n })\n .catch((err: any) => {\n if (requestedUf !== selectedUf) return;\n console.error('Failed to fetch timeline data:', err);\n error = 'Failed to load data';\n loading = false;\n });\n } else if (!selectedUf) {\n timelineData = null;\n }\n });\n\n const mockCandidates = [\n { position: 1, name: 'Candidato A', avatarColor: '#d97706', party: 'ABC', partyColor: '#d97706', votes: 1245890, percent: 4.82, evolution: [2, 3, 4, 3.5, 4.2, 4.8, 4.82] },\n { position: 2, name: 'Candidato B', avatarColor: '#166534', party: 'DEF', partyColor: '#166534', votes: 1245890, percent: 4.82, evolution: [3, 3, 4, 3.8, 3.5, 4.5, 4.82] },\n { position: 3, name: 'Candidato C', avatarColor: '#374151', party: 'GHI', partyColor: '#374151', votes: 1245890, percent: 4.82, evolution: [4, 3.5, 3, 3.2, 3.8, 4.2, 4.82] },\n { position: 4, name: 'Candidato D', avatarColor: '#1e3461', party: 'JKL', partyColor: '#1e3461', votes: 1245890, percent: 4.82, evolution: [2, 2.5, 3.5, 4, 3.8, 4.5, 4.82] },\n { position: 5, name: 'Candidato E', avatarColor: '#e11d48', party: 'MNO', partyColor: '#e11d48', votes: 1245890, percent: 4.82, evolution: [3, 2.8, 3.2, 3.5, 4, 4.5, 4.82] },\n { position: 6, name: 'Candidato F', avatarColor: '#7c2d12', party: 'PQR', partyColor: '#7c2d12', votes: 1245890, percent: 4.82, evolution: [4, 3.8, 3.2, 3, 3.5, 4.2, 4.82] },\n ];\n\n const filterMeta = $derived.by(() => {\n if (mock) return MOCK_UPDATE_META;\n const snapshots = timelineData?.snapshots;\n return formatUpdateMeta(snapshots?.length ? snapshots[snapshots.length - 1].timestamp : null);\n });\n\n const tableHeaders = ['Ranking', 'Candidato', 'Partido', 'Votos', '%', 'Evolução'];\n\n const processedData = $derived.by(() => {\n if (!mock && timelineData?.snapshots && Array.isArray(timelineData.snapshots) && timelineData.snapshots.length > 0) {\n const snapshots = timelineData.snapshots;\n const latestSnapshot = snapshots[snapshots.length - 1];\n\n if (!latestSnapshot || !timelineData.candidates_meta) {\n return { candidates: [] };\n }\n\n const results = [...latestSnapshot.results].sort((a: any, b: any) => b.valid_votes_pct - a.valid_votes_pct);\n\n const candidatesList = results.map((result: any, index: number) => {\n const meta = timelineData!.candidates_meta.find((c: any) => c.candidate_id === result.candidate_id);\n\n const evolution = meta?.series?.map((s: any) => parseFloat(s.valid_votes_pct.toFixed(2))) ?? [];\n\n return {\n position: index + 1,\n name: meta?.name ? toTitleCase(meta.name) : 'Unknown',\n photoUrl: meta?.photo_url,\n avatarColor: meta?.party_color || 'var(--sevn-color-primary)',\n party: meta?.party_abbr || '',\n partyColor: meta?.party_color || 'var(--sevn-color-primary)',\n votes: result.votes,\n percent: parseFloat(result.valid_votes_pct.toFixed(2)),\n evolution,\n };\n });\n\n return { candidates: candidatesList };\n }\n\n if (mock) return { candidates: mockCandidates };\n\n return { candidates: [] };\n });\n\n const candidates = $derived(processedData.candidates);\n</script>\n\n<div class=\"sevn_candidate_counting\" class:sevn_candidate_counting--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: FilterState em pills -->\n <div class=\"sevn_candidate_counting__filter-web\">\n <FilterState\n states={ufStates}\n bind:value={selectedUf}\n meta={filterMeta}\n />\n </div>\n\n <!-- Mobile: autocomplete de UF -->\n <div class=\"sevn_candidate_counting__filter-mobile\">\n <Autocomplete\n label={selectedUf ? \"Você selecionou:\" : \"Selecione o estado:\"}\n options={ufStates}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n />\n </div>\n\n <!-- Loading/Error/Content -->\n {#if selectedUf}\n {#if loading}\n <p class=\"sevn_candidate_counting__status\">Carregando...</p>\n {:else if error}\n <p class=\"sevn_candidate_counting__status sevn_candidate_counting__status--error\">{error}</p>\n {:else}\n <CandidateRankingTable {candidates} headers={tableHeaders} />\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_candidate_counting {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_candidate_counting--raw,\n .sevn_candidate_counting--raw * {\n all: revert;\n }\n\n .sevn_candidate_counting__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_candidate_counting__status--error {\n color: #e11d48;\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_candidate_counting__filter-web {\n display: none;\n }\n\n .sevn_candidate_counting :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_candidate_counting__filter-web {\n display: block;\n }\n\n .sevn_candidate_counting__filter-mobile {\n display: none;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { PartyPerformanceProps } from './props';\n import { onMount } from 'svelte';\n import { Header, FilterState, Autocomplete, FilterDropdown, BarChart, RankingTag } from '$lib';\n import type { HeaderProps } from '$lib';\n import { getResultsByParty } from '$services/api';\n import type { ResultsByParty } from '$services/types';\n\n import chevronIconUrl from '../assets/icons/chevron.svg?url';\n import { MOCK_UPDATE_META, formatUpdateMeta } from '../utils/formatUpdate';\n\n let {\n mock = false,\n rawStyle = false,\n year = 2026,\n header = {\n title: 'Desempenho por Partido (senador/deputado)',\n description: 'Acompanhe a distribuição de votos por partido, comparando desempenho eleitoral, força regional e evolução da apuração em tempo real.'\n }\n }: PartyPerformanceProps = $props();\n\n let partyData: ResultsByParty | null = $state(null);\n let loading = $state(false);\n let error = $state<string | null>(null);\n\n const ufStates = [\n { value: 'ac', label: 'Acre AC' },\n { value: 'al', label: 'Alagoas AL' },\n { value: 'ap', label: 'Amapá AP' },\n { value: 'am', label: 'Amazonas AM' },\n { value: 'ba', label: 'Bahia BA' },\n { value: 'ce', label: 'Ceará CE' },\n { value: 'df', label: 'Distrito Federal DF' },\n { value: 'es', label: 'Espírito Santo ES' },\n { value: 'go', label: 'Goiás GO' },\n { value: 'ma', label: 'Maranhão MA' },\n { value: 'mg', label: 'Minas Gerais MG' },\n { value: 'ms', label: 'Mato Grosso do Sul MS' },\n { value: 'mt', label: 'Mato Grosso MT' },\n { value: 'pa', label: 'Pará PA' },\n { value: 'pb', label: 'Paraíba PB' },\n { value: 'pe', label: 'Pernambuco PE' },\n { value: 'pi', label: 'Piauí PI' },\n { value: 'pr', label: 'Paraná PR' },\n { value: 'rj', label: 'Rio de Janeiro RJ' },\n { value: 'rn', label: 'Rio Grande do Norte RN' },\n { value: 'ro', label: 'Rondônia RO' },\n { value: 'rr', label: 'Roraima RR' },\n { value: 'rs', label: 'Rio Grande do Sul RS' },\n { value: 'sc', label: 'Santa Catarina SC' },\n { value: 'se', label: 'Sergipe SE' },\n { value: 'sp', label: 'São Paulo SP' },\n { value: 'to', label: 'Tocantins TO' },\n ];\n\n const cargoOptions = [\n { value: 'federal_deputy', label: 'Deputado Federal' },\n { value: 'state_deputy', label: 'Deputado Estadual' },\n { value: 'senator', label: 'Senador' },\n ];\n\n let selectedUf = $state<string | null>(null);\n let selectedCargo = $state(cargoOptions[0].value);\n\n const cargoMap: Record<string, 'federal_deputy' | 'state_deputy' | 'senator'> = {\n 'federal_deputy': 'federal_deputy',\n 'state_deputy': 'state_deputy',\n 'senator': 'senator',\n };\n\n $effect(() => {\n if (!mock && selectedUf && selectedCargo.trim()) {\n const selectedOffice = cargoMap[selectedCargo] || 'federal_deputy';\n\n loading = true;\n error = null;\n partyData = null;\n\n getResultsByParty(year, selectedOffice, 1, selectedUf)\n .then((fetchedData: ResultsByParty) => {\n partyData = fetchedData;\n loading = false;\n })\n .catch((err: any) => {\n console.error('Failed to fetch party results:', err);\n error = 'Failed to load data';\n loading = false;\n });\n }\n });\n\n let selectedUfLabel = $derived(ufStates.find(s => s.value === selectedUf)?.label ?? null);\n\n const mockBarItems = [\n { label: 'Partido ABC', value: 32, color: '#166534' },\n { label: 'Partido DEF', value: 24, color: '#d97706' },\n { label: 'Partido GHI', value: 11, color: '#1e3461' },\n { label: 'Partido JKL', value: 8, color: '#1C1C1C' },\n { label: 'Partido MNO', value: 20, color: '#e11d48' },\n { label: 'Partido PQR', value: 5, color: '#15803d' },\n { label: 'Partido STU', value: 3, color: '#dc2626' },\n { label: 'Partido VWX', value: 2, color: '#7c2d12' },\n ];\n\n const mockRankingItems = [\n { position: 1, tag: 'ABC', tagColor: '#166534', votes: 20526 },\n { position: 2, tag: 'DEF', tagColor: '#d97706', votes: 18022 },\n { position: 3, tag: 'GHI', tagColor: '#1e3461', votes: 13302 },\n { position: 4, tag: 'JKL', tagColor: '#1C1C1C', votes: 13257 },\n { position: 5, tag: 'MNO', tagColor: '#e11d48', votes: 11789 },\n { position: 6, tag: 'PQR', tagColor: '#15803d', votes: 11647 },\n { position: 7, tag: 'STU', tagColor: '#dc2626', votes: 9526 },\n { position: 8, tag: 'VWX', tagColor: '#7c2d12', votes: 7478 },\n ];\n\n const processedData = $derived.by(() => {\n if (!mock && partyData?.parties && Array.isArray(partyData.parties)) {\n const sortedParties = [...partyData.parties].sort((a: any, b: any) => b.votes - a.votes);\n\n // Denominador fixo em \"válidos + brancos + nulos\" (era escolhível pelo\n // filtro \"Tipo de votos\", agora removido).\n const barItems = sortedParties.map((party: any) => ({\n label: `Partido ${party.party_abbr || ''}`,\n value: party.pct_with_blank_null ?? 0,\n color: party.party_color || '#ccc',\n }));\n\n const rankingItems = sortedParties.map((party: any, index: number) => ({\n position: index + 1,\n tag: party.party_abbr || '',\n tagColor: party.party_color || '#ccc',\n votes: party.votes ?? 0,\n }));\n\n return { barItems, rankingItems };\n }\n\n if (mock) return { barItems: mockBarItems, rankingItems: mockRankingItems };\n\n return { barItems: [], rankingItems: [] };\n });\n\n const filterMeta = $derived(\n mock ? MOCK_UPDATE_META : formatUpdateMeta(partyData?.last_updated)\n );\n\n const barItems = $derived(processedData.barItems);\n const rankingItems = $derived(processedData.rankingItems);\n\n let isMobile = $state(false);\n let visibleCount = $derived(isMobile ? 4 : 6);\n let colWidth = $derived(isMobile ? 80 : 86);\n\n let rankingHeight = $state(0);\n let trackHeight = $derived(Math.max(rankingHeight - 64, 150));\n\n onMount(() => {\n const mq = window.matchMedia('(max-width: 480px)');\n isMobile = mq.matches;\n const handler = (e: MediaQueryListEvent) => { isMobile = e.matches; };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n });\n</script>\n\n<div class=\"sevn_party_perf\" class:sevn_party_perf--raw={rawStyle}>\n <Header\n title={header.title}\n description={header.description}\n tag={header.tag}\n tagColor={header.tagColor}\n />\n\n <!-- Web: filtro de cargo -->\n <div class=\"sevn_party_perf__filters-row-web\">\n <FilterDropdown label=\"Cargo\" options={cargoOptions} bind:value={selectedCargo} />\n </div>\n \n <!-- Web: FilterState em pills -->\n <div class=\"sevn_party_perf__filter-web\">\n <FilterState\n states={ufStates}\n bind:value={selectedUf}\n showDescriptionSelection={false}\n meta={filterMeta}\n />\n </div>\n\n\n <!-- Web: info do estado selecionado -->\n {#if selectedUfLabel}\n <div class=\"sevn_party_perf__selection-info\">\n <span><strong>Você selecionou:</strong> {selectedUfLabel}</span>\n <span class=\"sevn_party_perf__selection-meta\">{filterMeta}</span>\n </div>\n {/if}\n\n\n <!-- Mobile: autocomplete de UF + filtros empilhados -->\n <div class=\"sevn_party_perf__filters-mobile\">\n <Autocomplete\n label={selectedUf ? \"Você selecionou:\" : \"Selecione o estado:\"}\n options={ufStates}\n icon={chevronIconUrl}\n iconSize={13}\n bind:value={selectedUf}\n />\n <p class=\"sevn_party_perf__filter-section-label\">Filtrar por:</p>\n <Autocomplete\n label=\"Cargo:\"\n showLabel={false}\n showLabelInField={true}\n labelAsPlaceholder={true}\n showPlaceholderOnMobile={true}\n options={cargoOptions}\n bind:value={selectedCargo} />\n </div>\n\n <!-- Corpo: gráfico + ranking -->\n {#if selectedUf && selectedCargo.trim()}\n {#if loading}\n <p class=\"sevn_party_perf__status\">Carregando...</p>\n {:else if error}\n <p class=\"sevn_party_perf__status sevn_party_perf__status--error\">{error}</p>\n {:else}\n <div class=\"sevn_party_perf__body\">\n <div class=\"sevn_party_perf__chart-col\">\n <BarChart items={barItems} unit=\"%\" {trackHeight} {visibleCount} {colWidth} />\n </div>\n <div class=\"sevn_party_perf__ranking-col\" bind:clientHeight={rankingHeight}>\n <RankingTag items={rankingItems} />\n </div>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .sevn_party_perf {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .sevn_party_perf--raw,\n .sevn_party_perf--raw * {\n all: revert;\n }\n\n .sevn_party_perf__status {\n font-size: 0.875rem;\n color: var(--sevn-color-text-secondary, #6b7280);\n }\n\n .sevn_party_perf__status--error {\n color: #e11d48;\n }\n\n /* ── Web (oculto no mobile) ─────────────────────────── */\n .sevn_party_perf__filter-web {\n display: none;\n }\n\n .sevn_party_perf__filters-row-web {\n display: none;\n }\n\n /* ── Mobile (visível por padrão) ────────────────────── */\n .sevn_party_perf__filters-mobile {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .sevn_party_perf__filter-section-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--sevn-color-tertiary);\n margin: 8px 0 0;\n }\n\n .sevn_party_perf__body {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n @media (max-width: 767px) {\n .sevn_party_perf :global(.dropdown) {\n position: static;\n margin-top: 10px;\n }\n }\n \n /* ── Info seleção (web only) ────────────────────────── */\n .sevn_party_perf__selection-info {\n display: none;\n }\n\n /* ── Desktop overrides ──────────────────────────────── */\n @media (min-width: 768px) {\n .sevn_party_perf__filter-web {\n display: block;\n }\n\n .sevn_party_perf__filters-row-web {\n display: flex;\n gap: 40px;\n align-items: flex-start;\n }\n\n .sevn_party_perf__filters-mobile {\n display: none;\n }\n\n .sevn_party_perf__selection-info {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.8125rem;\n color: var(--sevn-color-tertiary);\n }\n\n .sevn_party_perf__selection-meta {\n font-size: 0.75rem;\n opacity: 0.5;\n }\n\n .sevn_party_perf__body {\n flex-direction: row;\n align-items: flex-start;\n gap: 40px;\n }\n\n .sevn_party_perf__chart-col {\n flex: 3;\n min-width: 0;\n align-self: flex-end;\n }\n\n .sevn_party_perf__ranking-col {\n flex: 2;\n min-width: 0;\n }\n }\n</style>\n","import { applyKey, configure, getConfig, isReady, assetUrl, type SevnTheme } from './config';\nimport { applyTheme } from './styles';\nimport { activeHost } from './transport';\n\nexport type { SevnConfig, SevnTheme, ConfigureOptions } from './config';\nexport { SevnKeyMissingError, SevnNetworkError } from './errors';\n\n/**\n * Configuração global do pacote. O único passo obrigatório é `applyKey`.\n *\n * ```js\n * import { Core } from '@sevn/elections-components';\n * Core.applyKey('minha-chave');\n * ```\n *\n * No UMD a chave é lida automaticamente do `?cid=` da própria tag `<script>`.\n */\nexport const Core = {\n\tapplyKey,\n\n\tconfigure(options: Parameters<typeof configure>[0]) {\n\t\tconfigure(options);\n\t\tif (options.theme) applyTheme(options.theme);\n\t},\n\n\tgetConfig,\n\tisReady,\n\tassetUrl,\n\n\t/** Cor(es) a sobrescrever, sem mexer no resto da configuração. */\n\tsetTheme(theme: SevnTheme) {\n\t\tconfigure({ theme });\n\t\tapplyTheme(theme);\n\t},\n\n\t/** Host que respondeu por último. Diagnóstico. */\n\tactiveHost\n};\n","/**\n * Superfície pública de @sevn/elections-components.\n *\n * Cada componente é exportado como uma classe JS comum — o Svelte que os\n * implementa não aparece aqui nem exige nada do projeto que consome:\n *\n * ```js\n * import { Core, StateLeaders } from '@sevn/elections-components';\n *\n * Core.applyKey('minha-chave');\n * const componente = new StateLeaders({ target: '#placeholder' });\n * componente.destroy();\n * ```\n */\nimport { defineComponent } from './runtime/defineComponent';\n\n// As anotações /*#__PURE__*/ abaixo são o que torna o pacote tree-shakeable:\n// sem elas o bundler do consumidor trata cada defineComponent() como efeito\n// colateral e mantém os 25 componentes mesmo quando só um é importado.\n\nimport FinalResultsComponent from './components/FinalResults.svelte';\nimport StateWinnersComponent from './components/StateWinners.svelte';\nimport VoteCountingProgressComponent from './components/VoteCountingProgress.svelte';\nimport VoteComparisonByRoundComponent from './components/VoteComparisonByRound.svelte';\nimport CountingProgressComponent from './components/CountingProgress.svelte';\nimport StateLeadersComponent from './components/StateLeaders.svelte';\nimport CurrentLeaderComponent from './components/CurrentLeader.svelte';\nimport TopDisputeComponent from './components/TopDispute.svelte';\nimport CandidateRankingComponent from './components/CandidateRanking.svelte';\nimport LiveSummaryComponent from './components/LiveSummary.svelte';\nimport CandidatePerformanceByMunicipalityComponent from './components/CandidatePerformanceByMunicipality.svelte';\nimport RoundResultsAnalysisComponent from './components/RoundResultsAnalysis.svelte';\nimport ElectionStatusComponent from './components/ElectionStatus.svelte';\nimport CandidateResultsByMunicipalityComponent from './components/CandidateResultsByMunicipality.svelte';\nimport MunicipalityPerfomanceMapComponent from './components/MunicipalityPerfomanceMap.svelte';\nimport CandidateByStateComponent from './components/CandidateByState.svelte';\nimport CandidateCarrouselStateResultsViewerComponent from './components/CandidateCarrouselStateResultsViewer.svelte';\nimport CandidateDuelStateResultViewerComponent from './components/CandidateDuelStateResultViewer.svelte';\nimport CandidateMapByStateComponent from './components/CandidateMapByState.svelte';\nimport ElectionRoundAnalysisComponent from './components/ElectionRoundAnalysis.svelte';\nimport CandidateMultiRingChartPerformanceByMunicipalityComponent from './components/CandidateMultiRingChartPerformanceByMunicipality.svelte';\nimport ResultsByOfficeComponent from './components/ResultsByOffice.svelte';\nimport VotingMapComponent from './components/VotingMap.svelte';\nimport CandidateCountingProgressComponent from './components/CandidateCountingProgress.svelte';\nimport PartyPerformanceComponent from './components/PartyPerformance.svelte';\n\nimport type {\n\tFinalResultsProps,\n\tStateWinnersProps,\n\tVoteCountingProgressProps,\n\tVoteComparisonByRoundProps,\n\tCountingProgressProps,\n\tStateLeadersProps,\n\tCurrentLeaderProps,\n\tTopDisputeProps,\n\tCandidateRankingProps,\n\tLiveSummaryProps,\n\tCandidatePerformanceByMunicipalityProps,\n\tRoundResultsAnalysisProps,\n\tElectionStatusProps,\n\tCandidateResultsByMunicipalityProps,\n\tMunicipalityPerfomanceMapProps,\n\tCandidateByStateProps,\n\tCandidateCarrouselStateResultsViewerProps,\n\tCandidateDuelStateResultViewerProps,\n\tCandidateMapByStateProps,\n\tElectionRoundAnalysisProps,\n\tCandidateMultiRingChartPerformanceByMunicipalityProps,\n\tResultsByOfficeProps,\n\tVotingMapProps,\n\tCandidateCountingProgressProps,\n\tPartyPerformanceProps\n} from './components/props';\n\nexport { Core } from './core';\nexport type { SevnConfig, SevnTheme, ConfigureOptions } from './core';\nexport { SevnKeyMissingError, SevnNetworkError } from './core';\nexport type {\n\tSevnComponent,\n\tSevnInstance,\n\tSevnOptions,\n\tSevnTarget\n} from './runtime/defineComponent';\n\nexport type {\n\tBaseComponentProps,\n\tHeaderProps,\n\tFinalResultsProps,\n\tStateWinnersProps,\n\tVoteCountingProgressProps,\n\tVoteComparisonByRoundProps,\n\tCountingProgressProps,\n\tStateLeadersProps,\n\tCurrentLeaderProps,\n\tTopDisputeProps,\n\tCandidateRankingProps,\n\tLiveSummaryProps,\n\tCandidatePerformanceByMunicipalityProps,\n\tRoundResultsAnalysisProps,\n\tElectionStatusProps,\n\tCandidateResultsByMunicipalityProps,\n\tMunicipalityPerfomanceMapProps,\n\tCandidateByStateProps,\n\tCandidateCarrouselStateResultsViewerProps,\n\tCandidateDuelStateResultViewerProps,\n\tCandidateMapByStateProps,\n\tElectionRoundAnalysisProps,\n\tCandidateMultiRingChartPerformanceByMunicipalityProps,\n\tResultsByOfficeProps,\n\tVotingMapProps,\n\tCandidateCountingProgressProps,\n\tPartyPerformanceProps\n} from './components/props';\n\nexport const FinalResults = /*#__PURE__*/ defineComponent<FinalResultsProps>(\n\tFinalResultsComponent,\n\t'FinalResults'\n);\nexport const StateWinners = /*#__PURE__*/ defineComponent<StateWinnersProps>(\n\tStateWinnersComponent,\n\t'StateWinners'\n);\nexport const VoteCountingProgress = /*#__PURE__*/ defineComponent<VoteCountingProgressProps>(\n\tVoteCountingProgressComponent,\n\t'VoteCountingProgress'\n);\nexport const VoteComparisonByRound = /*#__PURE__*/ defineComponent<VoteComparisonByRoundProps>(\n\tVoteComparisonByRoundComponent,\n\t'VoteComparisonByRound'\n);\nexport const CountingProgress = /*#__PURE__*/ defineComponent<CountingProgressProps>(\n\tCountingProgressComponent,\n\t'CountingProgress'\n);\nexport const StateLeaders = /*#__PURE__*/ defineComponent<StateLeadersProps>(\n\tStateLeadersComponent,\n\t'StateLeaders'\n);\nexport const CurrentLeader = /*#__PURE__*/ defineComponent<CurrentLeaderProps>(\n\tCurrentLeaderComponent,\n\t'CurrentLeader'\n);\nexport const TopDispute = /*#__PURE__*/ defineComponent<TopDisputeProps>(\n\tTopDisputeComponent,\n\t'TopDispute'\n);\nexport const CandidateRanking = /*#__PURE__*/ defineComponent<CandidateRankingProps>(\n\tCandidateRankingComponent,\n\t'CandidateRanking'\n);\nexport const LiveSummary = /*#__PURE__*/ defineComponent<LiveSummaryProps>(\n\tLiveSummaryComponent,\n\t'LiveSummary'\n);\nexport const CandidatePerformanceByMunicipality =\n\t/*#__PURE__*/ defineComponent<CandidatePerformanceByMunicipalityProps>(\n\t\tCandidatePerformanceByMunicipalityComponent,\n\t\t'CandidatePerformanceByMunicipality'\n\t);\nexport const RoundResultsAnalysis = /*#__PURE__*/ defineComponent<RoundResultsAnalysisProps>(\n\tRoundResultsAnalysisComponent,\n\t'RoundResultsAnalysis'\n);\nexport const ElectionStatus = /*#__PURE__*/ defineComponent<ElectionStatusProps>(\n\tElectionStatusComponent,\n\t'ElectionStatus'\n);\nexport const CandidateResultsByMunicipality =\n\t/*#__PURE__*/ defineComponent<CandidateResultsByMunicipalityProps>(\n\t\tCandidateResultsByMunicipalityComponent,\n\t\t'CandidateResultsByMunicipality'\n\t);\nexport const MunicipalityPerfomanceMap =\n\t/*#__PURE__*/ defineComponent<MunicipalityPerfomanceMapProps>(\n\t\tMunicipalityPerfomanceMapComponent,\n\t\t'MunicipalityPerfomanceMap'\n\t);\nexport const CandidateByState = /*#__PURE__*/ defineComponent<CandidateByStateProps>(\n\tCandidateByStateComponent,\n\t'CandidateByState'\n);\nexport const CandidateCarrouselStateResultsViewer =\n\t/*#__PURE__*/ defineComponent<CandidateCarrouselStateResultsViewerProps>(\n\t\tCandidateCarrouselStateResultsViewerComponent,\n\t\t'CandidateCarrouselStateResultsViewer'\n\t);\nexport const CandidateDuelStateResultViewer =\n\t/*#__PURE__*/ defineComponent<CandidateDuelStateResultViewerProps>(\n\t\tCandidateDuelStateResultViewerComponent,\n\t\t'CandidateDuelStateResultViewer'\n\t);\nexport const CandidateMapByState = /*#__PURE__*/ defineComponent<CandidateMapByStateProps>(\n\tCandidateMapByStateComponent,\n\t'CandidateMapByState'\n);\nexport const ElectionRoundAnalysis = /*#__PURE__*/ defineComponent<ElectionRoundAnalysisProps>(\n\tElectionRoundAnalysisComponent,\n\t'ElectionRoundAnalysis'\n);\nexport const CandidateMultiRingChartPerformanceByMunicipality =\n\t/*#__PURE__*/ defineComponent<CandidateMultiRingChartPerformanceByMunicipalityProps>(\n\t\tCandidateMultiRingChartPerformanceByMunicipalityComponent,\n\t\t'CandidateMultiRingChartPerformanceByMunicipality'\n\t);\nexport const ResultsByOffice = /*#__PURE__*/ defineComponent<ResultsByOfficeProps>(\n\tResultsByOfficeComponent,\n\t'ResultsByOffice'\n);\nexport const VotingMap = /*#__PURE__*/ defineComponent<VotingMapProps>(\n\tVotingMapComponent,\n\t'VotingMap'\n);\nexport const CandidateCountingProgress =\n\t/*#__PURE__*/ defineComponent<CandidateCountingProgressProps>(\n\t\tCandidateCountingProgressComponent,\n\t\t'CandidateCountingProgress'\n\t);\nexport const PartyPerformance = /*#__PURE__*/ defineComponent<PartyPerformanceProps>(\n\tPartyPerformanceComponent,\n\t'PartyPerformance'\n);\n"],"names":["DEV","is_array","index_of","includes","array_from","define_property","get_descriptor","get_descriptors","object_prototype","array_prototype","get_prototype_of","is_extensible","noop","run_all","arr","i","deferred","resolve","reject","promise","res","rej","DERIVED","EFFECT","RENDER_EFFECT","MANAGED_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","CONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","REACTION_RAN","EFFECT_TRANSPARENT","EAGER_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","EFFECT_OFFSCREEN","WAS_MARKED","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","STALE_REACTION","lifecycle_outside_component","name","async_derived_orphan","each_key_duplicate","b","value","effect_in_teardown","rune","effect_in_unowned_derived","effect_orphan","effect_update_depth_exceeded","props_invalid_value","key","state_descriptors_fixed","state_prototype_fixed","state_unsafe_mutation","svelte_boundary_reset_onerror","EACH_ITEM_REACTIVE","EACH_INDEX_REACTIVE","EACH_IS_CONTROLLED","EACH_IS_ANIMATED","EACH_ITEM_IMMUTABLE","PROPS_IS_IMMUTABLE","PROPS_IS_UPDATED","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","TEMPLATE_FRAGMENT","TEMPLATE_USE_IMPORT_NODE","UNINITIALIZED","NAMESPACE_HTML","svelte_boundary_reset_noop","equals","safe_not_equal","safe_equals","tracing_mode_flag","component_context","set_component_context","context","push","props","runes","fn","pop","component","effects","create_user_effect","is_runes","micro_tasks","run_micro_tasks","tasks","queue_micro_task","is_flushing_sync","flush_tasks","handle_error","error","effect","active_effect","active_reaction","invoke_error_boundary","e","STATUS_MASK","set_signal_status","signal","status","update_derived_status","derived","clear_marked","deps","dep","defer_effect","dirty_effects","maybe_dirty_effects","batches","current_batch","previous_batch","batch_values","queued_root_effects","last_scheduled_effect","is_flushing","Batch","#commit_callbacks","#discard_callbacks","#pending","#blocking_pending","#deferred","#dirty_effects","#maybe_dirty_effects","#skipped_branches","#decrement_queued","#is_deferred","tracked","schedule_effect","root_effects","render_effects","root","#traverse_effect_tree","#defer_effects","t","reset_branch","#commit","flush_queued_effects","flags","is_branch","is_skippable_branch","skip","is_dirty","update_effect","child","next","source","flush_effects","previous_batch_values","is_earlier","batch","sources","others","s","prev_queued_root_effects","marked","checked","mark_effects","blocking","flushSync","was_flushing_sync","result","source_stacks","flush_count","updates","entry","infinite_loop_guard","old_values","e.effect_update_depth_exceeded","eager_block_effects","length","unlink_effect","ordered_effects","ancestor","j","reaction","depends_on","depends","boundary","createSubscriber","start","subscribers","version","stop","effect_tracking","get","render_effect","untrack","increment","node","children","Boundary","#anchor","#hydrate_open","#props","#children","#effect","#main_effect","#pending_effect","#failed_effect","#offscreen_fragment","#local_pending_count","#pending_count","#pending_count_update_queued","#effect_pending","#effect_pending_subscriber","anchor","block","#render","#hydrate_resolved_content","branch","#hydrate_pending_content","pending","fragment","create_text","#run","pause_effect","#resolve","move_effect","previous_effect","previous_reaction","previous_ctx","set_active_effect","set_active_reaction","#update_pending_count","d","internal_set","onerror","failed","destroy_effect","did_reset","calling_on_error","reset","w.svelte_boundary_reset_noop","e.svelte_boundary_reset_onerror","flatten","blockers","sync","async","parent","restore","capture","blocker_promise","finish","values","unset_context","run","expression","async_derived","previous_component_context","activate_batch","increment_pending","parent_derived","label","location","e.async_derived_orphan","should_suspend","deferreds","async_effect","decrement_pending","handler","teardown","fulfil","p","go","user_derived","push_reaction_value","derived_safe_equal","destroy_derived_effects","get_derived_parent_effect","execute_derived","prev_active_effect","update_reaction","update_derived","increment_write_version","is_destroying_effect","freeze_derived_effects","remove_reactions","destroy_effect_children","unfreeze_derived_effects","eager_effects","eager_effects_deferred","v","stack","state","mutable_source","initial_value","immutable","trackable","set","should_proxy","untracking","current_sources","e.state_unsafe_mutation","new_value","proxy","old_value","mark_reactions","untracked_writes","set_untracked_writes","flush_eager_effects","reactions","not_dirty","prototype","is_proxied_array","parent_version","update_version","with_parent","set_update_version","prop","descriptor","e.state_descriptors_fixed","target","receiver","exists","has","other_s","ls","n","own_keys","e.state_prototype_fixed","$window","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","get_first_child","get_next_sibling","is_text","first_child","first","sibling","count","next_sibling","clear_text_content","should_defer_append","create_element","tag","namespace","is","listening_to_form_reset","add_form_reset_listener","evt","without_reactive_context","listen_to_event_and_reset_event","element","event","on_reset","prev","validate_effect","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","push_effect","parent_effect","parent_last","create_effect","type","user_effect","defer","component_root","options","template_effect","execute_effect_teardown","previously_destroying_effect","set_is_destroying_effect","remove_dom","controller","destroy_block_effect_children","removed","remove_effect_dom","transitions","transition","end","callback","destroy","pause_children","remaining","check","local","transparent","resume_effect","resume_children","is_updating_effect","new_deps","skipped_deps","write_version","read_version","dependencies","dependency","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_sources","previous_untracking","previous_update_version","is_fork","remove_reaction","index","new_length","start_index","was_updating_effect","tick","is_derived","destroyed","depends_on_old_values","should_connect","is_new","reconnect","PASSIVE_EVENTS","is_passive_event","event_symbol","all_registered_events","root_event_handles","create_event","event_name","dom","target_handler","handle_event_propagation","passive","delegated","delegate","events","last_propagated_event","handler_element","owner_document","path","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","policy","html","create_trusted_html","create_fragment_from_html","trusted","elem","assign_nodes","from_html","content","is_fragment","use_import_node","has_start","clone","from_namespace","ns","wrapped","from_svg","text","comment","frag","append","set_text","str","mount","_mount","listeners","Component","intro","unmount","anchor_node","ctx","registered_events","event_handle","counts","mounted_components","BranchManager","#batches","#onscreen","#offscreen","#outroing","#transition","onscreen","offscreen","k","on_destroy","#discard","keys","if_block","elseif","branches","update_branch","has_branch","_","pause_effects","to_destroy","controlled_anchor","group","groups","destroy_effects","fast_path","parent_node","offscreen_anchor","each","get_collection","get_key","render_fn","fallback_fn","items","is_controlled","fallback","each_array","collection","array","first_run","commit","reconcile","move","item","create_item","e.each_key_duplicate","skip_to_branch","is_animated","current","seen","to_animate","matched","stashed","link","a","destroy_length","dest","next_node","get_value","svg","mathml","skip_warning","snippet","get_snippet","args","append_styles","css","style","whitespace","to_class","hash","directives","classname","len","to_style","styles","set_class","is_html","prev_classes","next_classes","next_class_name","is_present","set_style","prev_styles","next_styles","next_style_attr","IS_CUSTOM_ELEMENT","IS_HTML","set_attribute","attribute","attributes","get_attributes","get_setters","setters_cache","cache_key","setters","descriptors","proto","element_proto","bind_value","input","is_reset","is_numberlike_input","to_number","ResizeObserverSingleton","#listeners","#observer","#options","listener","#getObserver","entries","resize_observer_border_box","bind_element_size","unsub","is_bound_this","bound_value","element_or_component","bind_this","update","get_parts","old_parts","parts","is_store_binding","capture_store_binding","previous_is_store_binding","bindable","lazy","fallback_value","fallback_dirty","get_fallback","setter","is_entry_props","is_store_sub","e.props_invalid_value","getter","legacy_parent","mutation","overridden","onMount","e.lifecycle_outside_component","cleanup","browser","SevnKeyMissingError","SevnNetworkError","url","cause","GLOBAL_KEY","globalScope","getStore","makeDefaults","FAILOVER_HOST","KEY_PATTERN","defaults","defaultsForStore","hostsForKey","applyKey","configure","cache","request","rest","getConfig","isReady","requireApiHosts","assetUrl","assetsBase","assetsVersion","base","clean","TOKENS_ATTR","THEME_ATTR","THEME_VARS","ensureTokens","tokens","theme","applyTheme","declarations","defineComponent","#instance","instance","PUBLIC_VERSION","div","avatarman","avatarwoman","avatar","size","tagColor","photoFailed","$.state","fallbackSrc","usePhoto","avatarSrc","$.derived","$.get","$$props","sizes","tagSizes","avatarSize","tagStyle","div_1","img","$.child","span","root_1","$.set_style","classes","$.set_class","$.set_attribute","$.set","searchIconUrl","chevronIconUrl","closeIconUrl","showLabel","$.prop","meta","width","height","icon","iconSize","showLabelInField","showDescriptionSelection","labelAsPlaceholder","showPlaceholderOnMobile","disabled","clearable","listboxId","open","search","wrapperEl","inputEl","filtered","o","selectedOption","select","option","toggle","clear","handleFieldKeydown","handleOutsideClick","handleInputKeydown","$.user_effect","$$render","consequent","$.sibling","node_1","root_2","$$value","$.template_effect","$.delegated","$.append","$$anchor","span_1","root_3","span_2","root_4","consequent_2","$.set_text","text_2","span_3","root_6","classes_2","consequent_4","consequent_3","alternate","button","root_7","img_1","root_8","classes_3","img_2","root_9","consequent_6","alternate_1","node_5","div_2","root_10","span_4","span_5","root_11","consequent_7","text_4","consequent_8","div_3","root_12","button_1","root_13","text_6","classes_4","div_4","root_14","consequent_9","classes_1","arrowUpIcon","arrowUpDisable","unit","showValues","trackHeight","visibleCount","colWidth","chartWidth","domainMax","barPct","splitLabel","idx","scrollEl","canScrollLeft","canScrollRight","updateScrollState","ro","scrollLeft","scrollRight","prefix","bold","strong","text_1","$0","div_5","node_2","arrowUp","root_5","consequent_1","node_3","img_3","color","fontSize","className","elected","electedLabel","electedColor","descriptionSide","positionSide","nameWeight","descWeight","wrapper","presets","Avatar","$1","Tag","node_8","div_6","p_1","div_7","span_6","root_15","span_7","root_16","span_8","root_17","formatVotes","formatPercent","$.each","candidate","candidates","itemsPerPage","showMoreLabel","showLessLabel","pagesShown","paginated","visible","expanded","c","Candidate","text_3","node_4","text_5","data","borderTop","align","$.index","positionLabel","apiPosition","layout","duelCompactInfoDirection","overviewAlign","showPosition","positionTag","positionColor","fPercentSize","fNameSize","fVotesSize","fAvatarSize","fBarHeight","hasOverview","hasMeta","isMobile","$.proxy","mq","fmtVotes","fmtPercent","VoteOverview","div_8","div_9","div_10","div_11","div_12","span_9","text_8","span_10","span_11","span_12","div_13","span_13","$.first_child","fragment_4","span_14","span_15","span_16","text_12","text_13","span_17","fragment_5","span_18","span_19","span_20","text_18","text_19","consequent_5","div_14","div_15","node_10","div_16","div_17","text_9","div_18","div_19","div_20","node_13","div_21","consequent_10","span_21","node_14","span_22","text_20","span_23","div_22","div_23","span_24","root_18","consequent_13","text_21","div_24","root_21","node_18","div_25","fragment_10","node_19","div_26","div_27","span_25","span_26","text_26","span_27","span_28","div_28","root_23","div_29","div_30","div_31","stat","span_29","root_24","span_30","span_31","text_30","text_31","consequent_15","div_32","root_25","div_33","div_34","div_35","span_32","root_26","span_33","span_34","text_32","text_33","consequent_16","div_36","root_27","span_35","root_28","span_36","root_29","span_37","root_30","consequent_20","text_27","div_37","fragment_11","div_38","node_26","span_38","span_39","text_36","span_40","span_41","div_39","div_40","p_2","root_32","consequent_24","text_37","consequent_21","consequent_14","consequent_25","page","isEntering","slideDirection","totalPages","pageItems","goToPage","newPage","direction","touchStartX","handleTouchStart","handleTouchEnd","diff","button_2","updatedAt","rounds","fmt","round","text_11","maxHeight","formatVotesCompact","formatPercentCompact","sparklinePath","w","h","min","range","pad","innerH","stepX","x","y","headerLeft","headerRight","dotSize","nameFontSize","votesFontSize","votesWeight","tagFontSize","hasFooter","footerData","scaleLinear","dMin","dMax","rMin","rMax","arcPath","cx","cy","startAngle","endAngle","thickness","inner","toRad","large","x1","y1","x2","y2","x3","y3","x4","y4","deg","segments","radius","gap","centerLabelSize","centerSubSize","CX","CY","hoveredIndex","tooltipPos","handleMouseEnter","rect","handleMouseLeave","total","clampedRadius","clampedThickness","arcs","GAP_DEG","angle","seg","arc","title","$.event","hovered","chevronUrl","states","activeBackground","activeColor","selectedLabel","button_3","img_4","header","h1","leader","runners","runner","fragment_1","hr","memory","inflight","fetchMapSvg","id","cached","response","err","citiesIndexUrl","_instanceCount","aspectRatio","priority","selectionStrokeWidth","toggleSelection","modalTrigger","showModalOnClick","showModalOnHover","_uid","brazilUrl","scopeClass","isInteractive","needsInline","targetPath","selectedCid","modalInfo","modalX","modalY","svgContent","loading","boundaryCSS","colorCSS","match","attr","selectionCSS","generatedCSS","container","loadGen","gen","doLoad","labelGroup","io","onKey","hoveredCid","buildInfo","el","cid","ufPart","municipioPart","handleClick","labelsAnchor","info","handleMouseMove","$.html","rings","outerRadius","ringGap","trackColor","roundCaps","clampedGap","ringStep","requested","maxStep","ringThickness","ringArcs","ring","r","midR","path_1","circle","fragment_2","circle_1","node_7","sortSegments","sortKey","orderedSegments","hasSegmentLabels","hasExtremeLabels","segment","voteLabel","timestamps","containerW","VW","VH","PAD","plotW","plotH","formatHour","ts","m","truncateLabel","max","handleSvgMouseMove","clientX","scaleX","svgX","closestIndex","closestDistance","xPos","distance","handleSvgMouseLeave","effRange","allValues","dataMin","dataMax","effYMin","effYMax","rangeSize","tickStep","yTicks","xMin","xMax","minTickSpacing","visibleTickIndices","lastEligible","indices","lastX","yPos","val","polylines","endDots","PILL_W","PILL_H","BADGE_W","BADGE_H","pillX","pillY","svg_1","line","polyline","dot","rect_1","node_6","bx","by","g","rect_2","hoverX","tooltipW","tooltipH","tooltipX","tooltipY","line_1","g_1","rect_3","text_7","node_9","fragment_3","text_10","$.bind_element_size","text_14","LOWERCASE_CONNECTORS","toTitleCase","word","parseAsWritten","timestamp","date","toEpochSeconds","formatUpdate","day","month","year","hours","minutes","formatUpdateMeta","stamp","MOCK_UPDATE","MOCK_UPDATE_META","mock","rawStyle","showAd","stateResults","CAND_A_COLOR","CAND_B_COLOR","mockCandidates","mockOverviewData","overviewData","totalVotes","stateWinnersA","ALL_UFS","mapColors","uf","ufs","stateOverrides","getStateData","aWins","aP","bP","rem","cP","dP","eP","getStateName","u","lastUpdate","selectedUf","overlayX","overlayY","mapWebEl","pinnedUf","pinnedX","pinnedY","displayUf","selectedData","selectedTitle","handleRegionHover","handleRegionClick","Header","CandidatePercentage","Ad","Map","CandidatesCountPercent","TableCandidate","Autocomplete","node_11","alternate_2","allStates","mockCANDIDATO_A","mockCANDIDATO_B","mockResultados","resultados","ufsOptions","mockStackCandidates","mapContainer","handleResize","selectedStateData","stackCandidates","hasStackData","mockPartySegments","partySegments","MapLegend","mockTimestamps","hasRealData","electedIndex","yMin","yMax","ElectionLineChart","transportState","sleep","ms","attemptSignal","timeoutMs","caller","timeout","withHost","host","rotateFrom","sevnFetch","init","hosts","retriesPerHost","retryDelayMs","stickyWindowMs","sticky","lastError","attempt","activeHost","TTL_DEFAULT","TTL_STATIC","memoryStore","isLocalStorageAvailable","storage","getCache","storageKey","maxEntries","RequestCache","params","ttlSeconds","monotonicKey","primaryHost","cleanPath","getMunicipalities","getCitiesIndex","getElectionResults","office","scope","getStateResults","getMunicipalityResults","getResultsComparison","getResultsTimeline","getCountingProgress","getResultsByParty","defaultOffice","officeOptions","officeMap","officeReverseMap","selectedOffice","mockComparisonData","round2HasData","comparisonData","mapRound","fetchComparisonData","FilterDropdown","CandidateVoteComparison","stateData","PROGRESS_COLORS","legendSegments","mockStateProgress","getProgressBucket","pct","stateProgress","level","leadershipOverrides","getLeadershipData","aFirst","second","searchWebEl","searchMobileEl","selectedStateName","selectedLeadership","insideMap","insideSearch","timer","LeadershipMoment","p_3","p_4","node_12","p_5","alternate_3","fetchedData","PARTIES","partyColorMap","summaryData","showNationalOverview","total_valid_votes","null_votes","blank_votes","overviewDate","stateLeader","party","parties","abbr","leaderColor","leaderP","secondP","thirdP","s1","s2","s3","s4","s5","stateResult","selectedOfficeLabel","node_15","latestSnapshot","ballotsCounted","derivedDescription","headerDescription","valid_votes","CandidatePositionCarrousel","font","ufOptions","filterOptions","mockMunicipalityOptions","selectedMunicipality","selectedFilter","municipalitiesData","municipalitiesLoading","resultsData","municipalityOptions","selectedMunicipalityLabel","municipalityFilterLabel","autoDetectedScope","scopeKey","municipalityId","cancelled","r2","hasRound2Data","mockDonutSegments","processedData","results","candidatesList","donutSegments","totalVotesDisplay","f","DonutChart","CandidateVotesRanking","mockRound1Candidates","mockRound1Segments","mockRound2Candidates","mockRound2Segments","round1Data","round2Data","round2NotPublished","r1","round1Candidates","round1Segments","round2Candidates","round2Segments","round1TotalVotes","round2TotalVotes","round1Date","round2Date","updatedMeta","selectedMunicipio","municipalityData","municipioData","progressData","selectedUfLabel","ufPreposition","selectedUfWithPreposition","leftHeight","mockParties","scopedMunicipalities","candidateNameByParty","map","municipalityColorsBySP","municipioOptions","slugify","bucketColors","handleMapClick","muniSlug","region","filterMeta","barItems","BarChart","electionData","pinnedCid","displayCid","citiesIndex","displayCityName","fetchGen","city","pinnedViaClick","partyColors","stateWinners","municipalityResultsByUf","byUf","cidByMunicipalityId","colors","lowercaseWords","selectedMunicipioCandidates","mockStateWinners","stateResultsData","formatMunicipioName","slug","parseCid","displayRegion","municipalityResultsData","tableData","cityId","mm","stateNames","partyCandidates","modalData","stateMap","selectedModal","timelineData","ufStates","snapshots","FilterState","positionTagColor","stateSummary","winnerIndex","GRAY","ORANGE","GREEN","mockStateStatus","statusLabels","statusColors","mockByStatus","baseCandidates","getMockStateInfo","percents","mobileSelectedUf","mobileStateInfo","st","mockRound1Rings","mockRound2Rings","round1Rings","round2Rings","MultiRingChart","STATUS_LABELS","STATUS_COLORS","TAGGABLE_STATUS","statusTagLabel","statusTagColor","mockRings","selectedMunicipioData","ROUND","totalCast","lastUpdateDisplay","CandidateList","mockMunicipioOptions","municipioLoading","progressLoading","municipalityResultsLoading","mapWrapperEl","sideWebEl","muniMobileEl","mockMapColors","mockModalData","mockMunicipioInfo","selectedMunicipioResult","resultCandidates","resultFooter","stateWideCandidates","stateWideFooter","selectedMunicipioInfo","modalCid","activeModalData","node_16","requestedUf","tableHeaders","evolution","CandidateRankingTable","partyData","cargoOptions","selectedCargo","cargoMap","mockBarItems","mockRankingItems","sortedParties","rankingItems","rankingHeight","RankingTag","Core","FinalResults","FinalResultsComponent","StateWinners","StateWinnersComponent","VoteCountingProgress","VoteCountingProgressComponent","VoteComparisonByRound","VoteComparisonByRoundComponent","CountingProgress","CountingProgressComponent","StateLeaders","StateLeadersComponent","CurrentLeader","CurrentLeaderComponent","TopDispute","TopDisputeComponent","CandidateRanking","CandidateRankingComponent","LiveSummary","LiveSummaryComponent","CandidatePerformanceByMunicipality","CandidatePerformanceByMunicipalityComponent","RoundResultsAnalysis","RoundResultsAnalysisComponent","ElectionStatus","ElectionStatusComponent","CandidateResultsByMunicipality","CandidateResultsByMunicipalityComponent","MunicipalityPerfomanceMap","MunicipalityPerfomanceMapComponent","CandidateByState","CandidateByStateComponent","CandidateCarrouselStateResultsViewer","CandidateCarrouselStateResultsViewerComponent","CandidateDuelStateResultViewer","CandidateDuelStateResultViewerComponent","CandidateMapByState","CandidateMapByStateComponent","ElectionRoundAnalysis","ElectionRoundAnalysisComponent","CandidateMultiRingChartPerformanceByMunicipality","CandidateMultiRingChartPerformanceByMunicipalityComponent","ResultsByOffice","ResultsByOfficeComponent","VotingMap","VotingMapComponent","CandidateCountingProgress","CandidateCountingProgressComponent","PartyPerformance","PartyPerformanceComponent"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,53,54]}