@k2b/ui 0.31.0 → 0.33.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 (209) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/Dropdown.js +159 -99
  3. package/dist/browser/actions/Dropdown.js.map +1 -1
  4. package/dist/browser/actions/FilterChip.js +113 -56
  5. package/dist/browser/actions/FilterChip.js.map +1 -1
  6. package/dist/browser/actions/ViewTabs.js +8 -0
  7. package/dist/browser/actions/ViewTabs.js.map +1 -1
  8. package/dist/browser/actions/filter-messages.js +26 -2
  9. package/dist/browser/actions/filter-messages.js.map +1 -1
  10. package/dist/browser/actions/menu-rows.js +23 -3
  11. package/dist/browser/actions/menu-rows.js.map +1 -1
  12. package/dist/browser/actions/menu-sheet.js +2 -7
  13. package/dist/browser/actions/menu-sheet.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js +480 -403
  15. package/dist/browser/chat/ChatComposer.js.map +1 -1
  16. package/dist/browser/chat/chat-messages.js +14 -0
  17. package/dist/browser/chat/chat-messages.js.map +1 -1
  18. package/dist/browser/chat/index.js.map +1 -1
  19. package/dist/browser/content/Calendar.js +39 -29
  20. package/dist/browser/content/Calendar.js.map +1 -1
  21. package/dist/browser/content/CalendarDayView.js +159 -165
  22. package/dist/browser/content/CalendarDayView.js.map +1 -1
  23. package/dist/browser/content/Chart.js +104 -55
  24. package/dist/browser/content/Chart.js.map +1 -1
  25. package/dist/browser/content/ChartExplorer.js +5 -3
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/MapView.js +4 -4
  28. package/dist/browser/content/MapView.js.map +1 -1
  29. package/dist/browser/content/MessageRow.js +607 -343
  30. package/dist/browser/content/MessageRow.js.map +1 -1
  31. package/dist/browser/content/ReactionBar.js +17 -0
  32. package/dist/browser/content/ReactionBar.js.map +1 -1
  33. package/dist/browser/content/chart-inspection-core.js +4 -1
  34. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  35. package/dist/browser/content/code-highlight.js +66 -0
  36. package/dist/browser/content/code-highlight.js.map +1 -1
  37. package/dist/browser/content/index.js +2 -1
  38. package/dist/browser/content/index.js.map +1 -1
  39. package/dist/browser/content/map-view-live.js +47 -10
  40. package/dist/browser/content/map-view-live.js.map +1 -1
  41. package/dist/browser/content/map-view-types.js.map +1 -1
  42. package/dist/browser/feedback/dialog-core.js +6 -0
  43. package/dist/browser/feedback/dialog-core.js.map +1 -1
  44. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  45. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  46. package/dist/browser/inputs/RichSelect.js +1474 -0
  47. package/dist/browser/inputs/RichSelect.js.map +1 -0
  48. package/dist/browser/inputs/TextInput.js +99 -61
  49. package/dist/browser/inputs/TextInput.js.map +1 -1
  50. package/dist/browser/inputs/choice.js +19 -8
  51. package/dist/browser/inputs/choice.js.map +1 -1
  52. package/dist/browser/inputs/index.js +1 -0
  53. package/dist/browser/inputs/index.js.map +1 -1
  54. package/dist/browser/inputs/rich-select-messages.js +46 -0
  55. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  56. package/dist/browser/intl/shortcut-messages.js +4 -0
  57. package/dist/browser/intl/shortcut-messages.js.map +1 -1
  58. package/dist/browser/intl/shortcut.js +4 -0
  59. package/dist/browser/intl/shortcut.js.map +1 -1
  60. package/dist/browser/layout/AppWorkspace.js +624 -565
  61. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  62. package/dist/browser/layout/DetailPanel.js +10 -1
  63. package/dist/browser/layout/DetailPanel.js.map +1 -1
  64. package/dist/browser/layout/MobileShell.js +213 -38
  65. package/dist/browser/layout/MobileShell.js.map +1 -1
  66. package/dist/browser/layout/Navigation.js +14 -5
  67. package/dist/browser/layout/Navigation.js.map +1 -1
  68. package/dist/browser/layout/PageTitle.js +9 -3
  69. package/dist/browser/layout/PageTitle.js.map +1 -1
  70. package/dist/browser/layout/ResizeSeparator.js +8 -2
  71. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  72. package/dist/browser/layout/app-workspace-controller.js +192 -31
  73. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  74. package/dist/browser/layout/index.js +1 -0
  75. package/dist/browser/layout/index.js.map +1 -1
  76. package/dist/browser/layout/navigation-model.js.map +1 -1
  77. package/dist/browser/layout/resize-separator.js +25 -1
  78. package/dist/browser/layout/resize-separator.js.map +1 -1
  79. package/dist/browser/layout/scroll-fade.js +32 -5
  80. package/dist/browser/layout/scroll-fade.js.map +1 -1
  81. package/dist/browser/surfaces/NoticeCard.js +46 -30
  82. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  83. package/dist/browser/surfaces/Skeleton.js +14 -0
  84. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  85. package/dist/browser/surfaces/index.js +1 -0
  86. package/dist/browser/surfaces/index.js.map +1 -1
  87. package/dist/browser/surfaces/resource-messages.js +2 -2
  88. package/dist/browser/surfaces/resource-messages.js.map +1 -1
  89. package/dist/ssr/actions/Dropdown.js +51 -27
  90. package/dist/ssr/actions/Dropdown.js.map +1 -1
  91. package/dist/ssr/actions/FilterChip.js +67 -16
  92. package/dist/ssr/actions/FilterChip.js.map +1 -1
  93. package/dist/ssr/actions/ViewTabs.js +8 -0
  94. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  95. package/dist/ssr/actions/filter-messages.js +26 -2
  96. package/dist/ssr/actions/filter-messages.js.map +1 -1
  97. package/dist/ssr/actions/menu-rows.js +23 -3
  98. package/dist/ssr/actions/menu-rows.js.map +1 -1
  99. package/dist/ssr/actions/menu-sheet.js +2 -7
  100. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  101. package/dist/ssr/chat/ChatComposer.js +96 -67
  102. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  103. package/dist/ssr/chat/chat-messages.js +14 -0
  104. package/dist/ssr/chat/chat-messages.js.map +1 -1
  105. package/dist/ssr/chat/index.js.map +1 -1
  106. package/dist/ssr/content/Calendar.js +40 -31
  107. package/dist/ssr/content/Calendar.js.map +1 -1
  108. package/dist/ssr/content/CalendarDayView.js +40 -48
  109. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  110. package/dist/ssr/content/Chart.js +27 -7
  111. package/dist/ssr/content/Chart.js.map +1 -1
  112. package/dist/ssr/content/ChartExplorer.js +5 -3
  113. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  114. package/dist/ssr/content/MapView.js +4 -4
  115. package/dist/ssr/content/MapView.js.map +1 -1
  116. package/dist/ssr/content/MessageRow.js +264 -91
  117. package/dist/ssr/content/MessageRow.js.map +1 -1
  118. package/dist/ssr/content/ReactionBar.js +17 -0
  119. package/dist/ssr/content/ReactionBar.js.map +1 -1
  120. package/dist/ssr/content/chart-inspection-core.js +4 -1
  121. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  122. package/dist/ssr/content/code-highlight.js +66 -0
  123. package/dist/ssr/content/code-highlight.js.map +1 -1
  124. package/dist/ssr/content/index.js +2 -1
  125. package/dist/ssr/content/index.js.map +1 -1
  126. package/dist/ssr/content/map-view-types.js.map +1 -1
  127. package/dist/ssr/feedback/dialog-core.js +6 -0
  128. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  129. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  130. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  131. package/dist/ssr/inputs/RichSelect.js +950 -0
  132. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  133. package/dist/ssr/inputs/TextInput.js +44 -17
  134. package/dist/ssr/inputs/TextInput.js.map +1 -1
  135. package/dist/ssr/inputs/choice.js +19 -8
  136. package/dist/ssr/inputs/choice.js.map +1 -1
  137. package/dist/ssr/inputs/index.js +1 -0
  138. package/dist/ssr/inputs/index.js.map +1 -1
  139. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  140. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  141. package/dist/ssr/intl/shortcut-messages.js +4 -0
  142. package/dist/ssr/intl/shortcut-messages.js.map +1 -1
  143. package/dist/ssr/intl/shortcut.js +4 -0
  144. package/dist/ssr/intl/shortcut.js.map +1 -1
  145. package/dist/ssr/layout/AppWorkspace.js +166 -125
  146. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  147. package/dist/ssr/layout/DetailPanel.js +1 -1
  148. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  149. package/dist/ssr/layout/MobileShell.js +100 -20
  150. package/dist/ssr/layout/MobileShell.js.map +1 -1
  151. package/dist/ssr/layout/Navigation.js +1 -1
  152. package/dist/ssr/layout/Navigation.js.map +1 -1
  153. package/dist/ssr/layout/PageTitle.js +9 -3
  154. package/dist/ssr/layout/PageTitle.js.map +1 -1
  155. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  156. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  157. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  158. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  159. package/dist/ssr/layout/index.js +1 -0
  160. package/dist/ssr/layout/index.js.map +1 -1
  161. package/dist/ssr/layout/navigation-model.js.map +1 -1
  162. package/dist/ssr/layout/resize-separator.js +25 -1
  163. package/dist/ssr/layout/resize-separator.js.map +1 -1
  164. package/dist/ssr/layout/scroll-fade.js +32 -5
  165. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  166. package/dist/ssr/surfaces/NoticeCard.js +21 -12
  167. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  168. package/dist/ssr/surfaces/Skeleton.js +8 -0
  169. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  170. package/dist/ssr/surfaces/index.js +1 -0
  171. package/dist/ssr/surfaces/index.js.map +1 -1
  172. package/dist/ssr/surfaces/resource-messages.js +2 -2
  173. package/dist/ssr/surfaces/resource-messages.js.map +1 -1
  174. package/dist/styles.css +1 -1
  175. package/dist/types/actions/Dropdown.d.ts +14 -0
  176. package/dist/types/actions/FilterChip.d.ts +11 -0
  177. package/dist/types/actions/filter-messages.d.ts +12 -0
  178. package/dist/types/actions/menu-rows.d.ts +7 -2
  179. package/dist/types/chat/ChatComposer.d.ts +13 -0
  180. package/dist/types/chat/chat-messages.d.ts +7 -0
  181. package/dist/types/chat/index.d.ts +1 -1
  182. package/dist/types/content/Calendar.d.ts +7 -0
  183. package/dist/types/content/Chart.d.ts +4 -2
  184. package/dist/types/content/ChartExplorer.d.ts +0 -1
  185. package/dist/types/content/MessageRow.d.ts +64 -2
  186. package/dist/types/content/code-highlight.d.ts +3 -1
  187. package/dist/types/content/index.d.ts +3 -2
  188. package/dist/types/content/map-view-live.d.ts +1 -1
  189. package/dist/types/content/map-view-types.d.ts +2 -0
  190. package/dist/types/feedback/dialog-core.d.ts +3 -0
  191. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  192. package/dist/types/inputs/RichSelect.d.ts +93 -0
  193. package/dist/types/inputs/TextInput.d.ts +5 -2
  194. package/dist/types/inputs/choice.d.ts +24 -4
  195. package/dist/types/inputs/index.d.ts +2 -0
  196. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  197. package/dist/types/intl/shortcut-messages.d.ts +2 -0
  198. package/dist/types/layout/AppWorkspace.d.ts +9 -0
  199. package/dist/types/layout/DetailPanel.d.ts +2 -0
  200. package/dist/types/layout/MobileShell.d.ts +52 -5
  201. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  202. package/dist/types/layout/index.d.ts +2 -1
  203. package/dist/types/layout/navigation-model.d.ts +2 -0
  204. package/dist/types/layout/resize-separator.d.ts +1 -0
  205. package/dist/types/layout/scroll-fade.d.ts +5 -0
  206. package/dist/types/surfaces/NoticeCard.d.ts +3 -0
  207. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  208. package/dist/types/surfaces/index.d.ts +1 -0
  209. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["inputs/AutocompleteEditor.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport {\n buildSuggestContext,\n type Completion,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n plainTextHighlight,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"./completion\";\nimport { useCompletionMessages } from \"./completion-messages\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type AutocompleteEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n completions?: readonly Completion[];\n restoreExpansionOnBackspace?: boolean;\n highlight?: (text: string) => string;\n singleLine?: boolean;\n lines?: number;\n fill?: boolean;\n placeholder?: string;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n variant?: \"default\" | \"paper\";\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function AutocompleteEditor(props: AutocompleteEditorProps): JSX.Element {\n const messages = useUiMessages();\n const completionMessages = useCompletionMessages();\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let currentAbort: AbortController | null = null;\n let currentTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const useOverlay = createMemo(() => Boolean(props.highlight));\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n const suggestionGhost = (current: CompletionState, suggestion: Suggestion): { at: number; text: string } | undefined => {\n const edit = suggestion.textEdit;\n if (!edit) {\n return {\n at: current.context.end,\n text: suggestion.text.slice(current.context.text.length),\n };\n }\n if (edit.end !== current.context.end) return undefined;\n const replacing = localValue().slice(edit.start, edit.end);\n if (!edit.text.toLowerCase().startsWith(replacing.toLowerCase())) {\n return undefined;\n }\n return { at: edit.end, text: edit.text.slice(replacing.length) };\n };\n\n createEffect(() => {\n if (!preview) {\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n overlayInitialized = false;\n return;\n }\n const value = localValue();\n const highlighter = props.highlight ?? plainTextHighlight;\n const current = state();\n const active = activeSuggestion();\n const ghost = current && active ? suggestionGhost(current, active) : undefined;\n const anchor = current ? { at: current.context.start } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, highlighter, { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n currentAbort?.abort();\n currentAbort = null;\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !textarea?.isConnected) return;\n const anchor = preview?.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const currentText = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= currentText.length &&\n currentText.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n clearCompletion();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsync = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setCompletionError(error instanceof Error ? error.message : completionMessages().suggestionsCouldNotLoad);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setCompletionError(null);\n setLoading(true);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsync(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setCompletionError(error instanceof Error ? error.message : completionMessages().suggestionsCouldNotLoad);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, props.completions);\n if (!context) {\n clearCompletion();\n return;\n }\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n currentAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startResolution(context, currentAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = currentAbort.signal;\n currentTimer = setTimeout(() => {\n currentTimer = null;\n startResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, props.completions);\n if (!context) return clearCompletion();\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n currentAbort = new AbortController();\n startResolution(context, currentAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n clearCompletion();\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active, {\n trackExpansion: props.restoreExpansionOnBackspace ?? true,\n });\n clearCompletion();\n if (applied) queueMicrotask(recomputeCompletion);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n onMount(() => {\n const selectionChange = (): void => {\n if (document.activeElement === textarea) recomputeCompletion();\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (event.inputType.startsWith(\"insert\") && completionBehavior.tryExpand(event.currentTarget, props.completions)) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n (props.restoreExpansionOnBackspace ?? true) &&\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey) {\n if (current && dropdownCompletion && dropdownOpen()) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (props.singleLine) {\n event.preventDefault();\n props.onSubmit?.();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && !props.singleLine && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n clearCompletion();\n } else if ((props.completions?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n }\n }\n };\n\n const surfaceStyle = (): JSX.CSSProperties => ({\n \"--k2b-editor-lines\": String(props.lines ?? 3),\n });\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill && !props.singleLine}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-autocomplete\"\n data-overlay={useOverlay() ? \"true\" : undefined}\n data-single-line={props.singleLine ? \"true\" : undefined}\n data-fill={props.fill && !props.singleLine ? \"true\" : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"paper\" ? \"paper\" : undefined}\n style={surfaceStyle()}\n >\n <div class=\"k2b-autocomplete__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-autocomplete__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-autocomplete__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-autocomplete__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? false}\n maxLength={props.maxLength}\n rows={props.singleLine ? 1 : (props.lines ?? 3)}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={completionMessages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={completionMessages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n data-loading={loading() ? \"true\" : undefined}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"./completion\";\nexport { abbreviations } from \"./completion\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/AutocompleteEditor.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport {\n buildSuggestContext,\n type Completion,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n plainTextHighlight,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"./completion\";\nimport { useCompletionMessages } from \"./completion-messages\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type AutocompleteEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n completions?: readonly Completion[];\n restoreExpansionOnBackspace?: boolean;\n highlight?: (text: string) => string;\n singleLine?: boolean;\n lines?: number;\n fill?: boolean;\n placeholder?: string;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n variant?: \"default\" | \"paper\" | \"embedded\";\n readOnly?: boolean;\n /** Number logical lines; disables soft wrapping to keep the gutter aligned. */\n lineNumbers?: boolean;\n /** One-based line to mark in the gutter, for example a parser error. */\n markedLine?: number;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function AutocompleteEditor(props: AutocompleteEditorProps): JSX.Element {\n const messages = useUiMessages();\n const completionMessages = useCompletionMessages();\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let gutter: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let currentAbort: AbortController | null = null;\n let currentTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const useOverlay = createMemo(() => Boolean(props.highlight));\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n const suggestionGhost = (current: CompletionState, suggestion: Suggestion): { at: number; text: string } | undefined => {\n const edit = suggestion.textEdit;\n if (!edit) {\n return {\n at: current.context.end,\n text: suggestion.text.slice(current.context.text.length),\n };\n }\n if (edit.end !== current.context.end) return undefined;\n const replacing = localValue().slice(edit.start, edit.end);\n if (!edit.text.toLowerCase().startsWith(replacing.toLowerCase())) {\n return undefined;\n }\n return { at: edit.end, text: edit.text.slice(replacing.length) };\n };\n\n createEffect(() => {\n if (!preview) {\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n overlayInitialized = false;\n return;\n }\n const value = localValue();\n const highlighter = props.highlight ?? plainTextHighlight;\n const current = state();\n const active = activeSuggestion();\n const ghost = current && active ? suggestionGhost(current, active) : undefined;\n const anchor = current ? { at: current.context.start } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, highlighter, { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n currentAbort?.abort();\n currentAbort = null;\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n createEffect(() => {\n if (!props.readOnly) return;\n completionBehavior.reset();\n clearCompletion();\n });\n\n const positionDropdown = (): void => {\n if (props.readOnly || !dropdown?.isConnected || !textarea?.isConnected) return;\n const anchor = preview?.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n if (props.readOnly) return;\n const currentText = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= currentText.length &&\n currentText.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n clearCompletion();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsync = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted || props.readOnly) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || props.readOnly || isAbortError(error)) return;\n setLoading(false);\n setCompletionError(error instanceof Error ? error.message : completionMessages().suggestionsCouldNotLoad);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || props.readOnly || !textarea) return;\n setCompletionError(null);\n setLoading(true);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsync(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || props.readOnly || isAbortError(error)) return;\n setLoading(false);\n setCompletionError(error instanceof Error ? error.message : completionMessages().suggestionsCouldNotLoad);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (props.readOnly) return clearCompletion();\n if (!textarea) return;\n const context = detectQuery(textarea, props.completions);\n if (!context) {\n clearCompletion();\n return;\n }\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n currentAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startResolution(context, currentAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = currentAbort.signal;\n currentTimer = setTimeout(() => {\n currentTimer = null;\n startResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (props.readOnly || !textarea) return;\n const context = detectQuery(textarea, props.completions);\n if (!context) return clearCompletion();\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n currentTimer = null;\n currentAbort = new AbortController();\n startResolution(context, currentAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (props.readOnly || !textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n clearCompletion();\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active, {\n trackExpansion: props.restoreExpansionOnBackspace ?? true,\n });\n clearCompletion();\n if (applied) queueMicrotask(recomputeCompletion);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n onMount(() => {\n const selectionChange = (): void => {\n if (document.activeElement === textarea) recomputeCompletion();\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n currentAbort?.abort();\n if (currentTimer) clearTimeout(currentTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (props.readOnly) {\n event.currentTarget.value = localValue();\n return;\n }\n if (event.inputType.startsWith(\"insert\") && completionBehavior.tryExpand(event.currentTarget, props.completions)) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (props.readOnly) {\n if (\n event.key === \"Enter\" &&\n props.onSubmit &&\n ((props.singleLine && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey) ||\n (!props.singleLine && (event.metaKey || event.ctrlKey)))\n ) {\n event.preventDefault();\n props.onSubmit();\n }\n return;\n }\n if (\n (props.restoreExpansionOnBackspace ?? true) &&\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey) {\n if (current && dropdownCompletion && dropdownOpen()) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (props.singleLine) {\n event.preventDefault();\n props.onSubmit?.();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && !props.singleLine && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n clearCompletion();\n } else if ((props.completions?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n }\n }\n };\n\n const surfaceStyle = (): JSX.CSSProperties => ({\n \"--k2b-editor-lines\": String(props.lines ?? 3),\n });\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill && !props.singleLine}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-autocomplete\"\n data-line-numbers={props.lineNumbers ? \"true\" : undefined}\n data-overlay={useOverlay() ? \"true\" : undefined}\n data-single-line={props.singleLine ? \"true\" : undefined}\n data-fill={props.fill && !props.singleLine ? \"true\" : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"paper\" || props.variant === \"embedded\" ? props.variant : undefined}\n style={surfaceStyle()}\n >\n <div class=\"k2b-autocomplete__surface\">\n <Show when={props.lineNumbers}>\n <div ref={gutter} class=\"k2b-autocomplete__gutter\" aria-hidden=\"true\">\n <For each={localValue().split(\"\\n\")}>\n {(_, index) => <div data-marked={props.markedLine === index() + 1 ? \"true\" : undefined}>{index() + 1}</div>}\n </For>\n </div>\n </Show>\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-autocomplete__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div\n ref={preview}\n class=\"k2b-autocomplete__preview\"\n aria-hidden=\"true\"\n innerHTML={isServer ? renderWithOverlay(localValue(), props.highlight ?? plainTextHighlight, {}) : undefined}\n />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-autocomplete__input\"\n onInput={onInput}\n onChange={(event) => {\n if (!props.readOnly) props.onValueCommit?.(event.currentTarget.value);\n }}\n onKeyDown={onKeyDown}\n onScroll={(event) => {\n if (gutter) gutter.scrollTop = event.currentTarget.scrollTop;\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n readOnly={props.readOnly}\n required={props.required}\n spellcheck={props.spellcheck ?? false}\n maxLength={props.maxLength}\n wrap={props.lineNumbers ? \"off\" : \"soft\"}\n rows={props.singleLine ? 1 : (props.lines ?? 3)}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n >\n {/* HTML consumes one leading newline in textarea content. */}\n {isServer ? `\\n${localValue()}` : undefined}\n </textarea>\n </div>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={completionMessages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={completionMessages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n data-loading={loading() ? \"true\" : undefined}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"./completion\";\nexport { abbreviations } from \"./completion\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,EAAY,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QAAQ,UAAU;AACnI,SAAS,QAAQ,QAAQ,cAAc;AACvC,SAAS,eAAe,EAAE,KAAK,EAAE,gBAAgB,QAAQ,mBAAmB;AAC5E,SAAS,aAAa,QAAQ,kBAAkB;AAChD,SACE,mBAAmB,EAEnB,6BAA6B,EAC7B,WAAW,EACX,YAAY,EACZ,kBAAkB,EAElB,iBAAiB,EACjB,kBAAkB,QAEb,cAAc;AACrB,SAAS,qBAAqB,QAAQ,uBAAuB;AAE7D,SAAS,oBAAoB,QAAQ,kBAAkB;AA6BvD,OAAO,SAAS,kBAAkB,CAAC,KAA8B,EAAe;EAC9E,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,CAAC;EAClD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;EACtC,IAAI,QAAyC;EAC7C,IAAI,OAAmC;EACvC,IAAI,MAAkC;EACtC,IAAI,QAAoC;EACxC,IAAI,YAAoC,GAAG,IAAI;EAC/C,IAAI,YAAkD,GAAG,IAAI;EAC7D,IAAI,YAAgC;EACpC,IAAI,kBAAkB,GAAG,KAAK;EAC9B,IAAI,oBAA8C;EAClD,MAAM,kBAAkB,GAAG,6BAA6B,CAAC,CAAC;EAE1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;EACzF,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;EACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAyB,IAAI,CAAC;EACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EAC/E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC;EACrC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,cAAc;EACjE,MAAM,QAAQ,GAAI,KAAa,IAAa,GAAG,SAAS,IAAI,KAAK,EAAE;EACnE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC7D,MAAM,gBAAgB,GAAG,MAAyB;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,OAAO,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI;EAC5D,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE;MACnF,aAAa,CAAC,QAAQ,CAAC;IACzB;EACF,CAAC,CAAC;EAEF,YAAY,CAAC,MAAM;IACjB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE;MACzD,QAAQ,CAAC,KAAK,GAAG,MAAM;IACzB;EACF,CAAC,CAAC;EAEF,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAE,UAAsB,KAA+C;IACtH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ;IAChC,IAAI,CAAC,IAAI,EAAE;MACT,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QACvB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;MACzD,CAAC;IACH;IACA,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,SAAS;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;MAChE,OAAO,SAAS;IAClB;IACA,OAAO;MAAE,EAAE,EAAE,IAAI,CAAC,GAAG;MAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;IAAE,CAAC;EAClE,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,IAAI,CAAC,OAAO,EAAE;MACZ,IAAI,YAAY,KAAK,SAAS,EAAE,oBAAoB,CAAC,YAAY,CAAC;MAClE,YAAY,GAAG,SAAS;MACxB,oBAAoB,GAAG,SAAS;MAChC,kBAAkB,GAAG,KAAK;MAC1B;IACF;IACA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,IAAI,kBAAkB;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,IAAI,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS;IAC9E,MAAM,MAAM,GAAG,OAAO,GAAG;MAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;IAAM,CAAC,GAAG,SAAS;IAClE,oBAAoB,GAAG,MAAM;MAC3B,IAAI,CAAC,OAAO,EAAE;MACd,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE;QAAE,KAAK;QAAE;MAAO,CAAC,CAAC;MAC5E,IAAI,QAAQ,EAAE;QACZ,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;QACtC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;MAC1C;MACA,IAAI,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,kBAAkB,EAAE;MACvB,kBAAkB,GAAG,IAAI;MACzB,oBAAoB,CAAC,CAAC;MACtB,oBAAoB,GAAG,SAAS;MAChC;IACF;IACA,IAAI,YAAY,KAAK,SAAS,EAAE;IAChC,YAAY,GAAG,qBAAqB,CAAC,MAAM;MACzC,YAAY,GAAG,SAAS;MACxB,MAAM,MAAM,GAAG,oBAAoB;MACnC,oBAAoB,GAAG,SAAS;MAChC,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAM,aAAa,GAAG,MAAY;IAChC,IAAI,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,eAAe,CAAC,KAAK,CAAC;EACxB,CAAC;EAED,MAAM,eAAe,GAAG,MAAY;IAClC,YAAY,EAAE,KAAK,CAAC,CAAC;IACrB,YAAY,GAAG,IAAI;IACnB,IAAI,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC;IAC5C,YAAY,GAAG,IAAI;IACnB,QAAQ,CAAC,IAAI,CAAC;IACd,UAAU,CAAC,KAAK,CAAC;IACjB,kBAAkB,CAAC,IAAI,CAAC;IACxB,aAAa,CAAC,CAAC;EACjB,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IACrB,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1B,eAAe,CAAC,CAAC;EACnB,CAAC,CAAC;EAEF,MAAM,gBAAgB,GAAG,MAAY;IACnC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;IACxE,MAAM,MAAM,GAAG,OAAO,EAAE,aAAa,CAAc,0BAA0B,CAAC;IAC9E,MAAM,IAAI,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,GAAG;IACrB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;IACnD,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,UAAU;IACjE,IAAI,SAAS,EAAE;MACb,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;MACtD,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;IAC7F,CAAC,MAAM;MACL,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;MACtE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;IAC3D;IACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D;IACA;IACA,MAAM,KAAK,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;IAC/D,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;EAC3E,CAAC;EAED,MAAM,YAAY,GAAI,KAAc,IAClC,KAAK,YAAY,YAAY,GACzB,KAAK,CAAC,IAAI,KAAK,YAAY,GAC3B,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAK,KAAK,CAAsB,IAAI,KAAK,YAAY,CAAC;EAEzH,MAAM,mBAAmB,GAAG,CAAC,OAAqB,EAAE,WAAkC,KAAW;IAC/F,IAAI,KAAK,CAAC,QAAQ,EAAE;IACpB,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAE,UAAU,IAAK;MAChD,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,MAAM;UAAE,KAAK;UAAE,GAAG;UAAE;QAAK,CAAC,GAAG,UAAU,CAAC,QAAQ;QAChD,OACE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IACvB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IACrB,KAAK,IAAI,CAAC,IACV,GAAG,IAAI,KAAK,IACZ,GAAG,IAAI,WAAW,CAAC,MAAM,IACzB,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI;MAE1C;MACA,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;IAC7G,CAAC,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;MACvB,eAAe,CAAC,CAAC;MACjB;IACF;IACA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI;IACzC,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAE,UAAU,IAAK,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/F,QAAQ,CAAC;MACP,OAAO;MACP,WAAW,EAAE,MAAM;MACnB,aAAa,EAAE,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG;IAC5C,CAAC,CAAC;IACF,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE;MAC/B,eAAe,CAAC,IAAI,CAAC;MACrB,cAAc,CAAC,gBAAgB,CAAC;IAClC,CAAC,MAAM;MACL,aAAa,CAAC,CAAC;IACjB;EACF,CAAC;EAED,MAAM,QAAQ,GAAG,OAAO,OAAqB,EAAE,OAAuC,EAAE,MAAmB,KAAoB;IAC7H,IAAI;MACF,MAAM,WAAW,GAAG,MAAM,OAAO;MACjC,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;MACtC,UAAU,CAAC,KAAK,CAAC;MACjB,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;IAC3C,CAAC,CAAC,OAAO,KAAK,EAAE;MACd,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;MAC7D,UAAU,CAAC,KAAK,CAAC;MACjB,kBAAkB,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,uBAAuB,CAAC;MACzG,eAAe,CAAC,IAAI,CAAC;MACrB,cAAc,CAAC,gBAAgB,CAAC;IAClC;EACF,CAAC;EAED,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,MAAmB,KAAW;IAC5E,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACnD,kBAAkB,CAAC,IAAI,CAAC;IACxB,UAAU,CAAC,IAAI,CAAC;IAChB,eAAe,CAAC,IAAI,CAAC;IACrB,cAAc,CAAC,gBAAgB,CAAC;IAChC,IAAI;MACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;MACpH,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;QAC1B,UAAU,CAAC,KAAK,CAAC;QACjB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;MAC3C,CAAC,MAAM;QACL,KAAK,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;MAChD;IACF,CAAC,CAAC,OAAO,KAAK,EAAE;MACd,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;MAC7D,UAAU,CAAC,KAAK,CAAC;MACjB,kBAAkB,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,uBAAuB,CAAC;MACzG,eAAe,CAAC,IAAI,CAAC;MACrB,cAAc,CAAC,gBAAgB,CAAC;IAClC;EACF,CAAC;EAED,MAAM,mBAAmB,GAAG,MAAY;IACtC,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE;MACZ,eAAe,CAAC,CAAC;MACjB;IACF;IACA,YAAY,EAAE,KAAK,CAAC,CAAC;IACrB,IAAI,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC;IAC5C,YAAY,GAAG,IAAI;IACnB,YAAY,GAAG,IAAI,eAAe,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,IACE,OAAO,KACN,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IACtC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IACnC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IACrC,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,EACpD;MACA,QAAQ,CAAC,IAAI,CAAC;MACd,aAAa,CAAC,CAAC;IACjB;IACA,kBAAkB,CAAC,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;IAC/C,CAAC,MAAM;MACL,UAAU,CAAC,KAAK,CAAC;MACjB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;MAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;MAClC,YAAY,GAAG,UAAU,CAAC,MAAM;QAC9B,YAAY,GAAG,IAAI;QACnB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC;MAClC,CAAC,EAAE,KAAK,CAAC;IACX;EACF,CAAC;EAED,MAAM,eAAe,GAAG,MAAY;IAClC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACjC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE,OAAO,eAAe,CAAC,CAAC;IACtC,YAAY,EAAE,KAAK,CAAC,CAAC;IACrB,IAAI,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC;IAC5C,YAAY,GAAG,IAAI;IACnB,YAAY,GAAG,IAAI,eAAe,CAAC,CAAC;IACpC,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;EAC/C,CAAC;EAED,MAAM,kBAAkB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,KAAc;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;IAC1C,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;MAC5D,eAAe,CAAC,CAAC;MACjB,OAAO,KAAK;IACd;IACA,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;MACpF,cAAc,EAAE,KAAK,CAAC,2BAA2B,IAAI;IACvD,CAAC,CAAC;IACF,eAAe,CAAC,CAAC;IACjB,IAAI,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC;IAChD,OAAO,OAAO;EAChB,CAAC;EAED,MAAM,aAAa,GAAI,SAAiB,IAAW;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;IAClD,QAAQ,CAAC;MACP,GAAG,OAAO;MACV,aAAa,EAAE,CAAC,OAAO,CAAC,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IACxG,CAAC,CAAC;EACJ,CAAC;EAED,OAAO,CAAC,MAAM;IACZ,MAAM,eAAe,GAAG,MAAY;MAClC,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAChE,CAAC;IACD;IACA;IACA;IACA,MAAM,UAAU,GAAG,MAAY;MAC7B,IAAI,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IACD,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC;IAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,SAAS,CAAC,MAAM;MACd,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,eAAe,CAAC;MAChE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC;MAChD,IAAI,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;MAC9D,YAAY,EAAE,KAAK,CAAC,CAAC;MACrB,IAAI,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC;MAC5C,IAAI,YAAY,KAAK,SAAS,EAAE,oBAAoB,CAAC,YAAY,CAAC;MAClE,YAAY,GAAG,SAAS;MACxB,oBAAoB,GAAG,SAAS;MAChC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAM,OAAO,GAAI,KAA0D,IAAW;IACpF,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;MACxC;IACF;IACA,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE;MAChH;IACF;IACA,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IACxC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IAChD,mBAAmB,CAAC,CAAC;EACvB,CAAC;EAED,MAAM,SAAS,GAAI,KAAoB,IAAW;IAChD,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE;IACpC,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,IACE,KAAK,CAAC,GAAG,KAAK,OAAO,IACrB,KAAK,CAAC,QAAQ,KACZ,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IACvF,CAAC,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,CAAC,EAC1D;QACA,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC;MAClB;MACA;IACF;IACA,IACE,CAAC,KAAK,CAAC,2BAA2B,IAAI,IAAI,KAC1C,KAAK,CAAC,GAAG,KAAK,WAAW,IACzB,CAAC,KAAK,CAAC,OAAO,IACd,CAAC,KAAK,CAAC,OAAO,IACd,CAAC,KAAK,CAAC,MAAM,IACb,CAAC,KAAK,CAAC,QAAQ,IACf,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,EACvC;MACA,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB;IACF;IACA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC;IACvB,MAAM,kBAAkB,GAAG,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI;IACxE,IAAI,OAAO,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;MAC3F,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MACjD;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;MACjG,IAAI,OAAO,IAAI,kBAAkB,IAAI,YAAY,CAAC,CAAC,EAAE;QACnD,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,kBAAkB,CAAC,CAAC;QACpB;MACF;MACA,IAAI,KAAK,CAAC,UAAU,EAAE;QACpB,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,KAAK,CAAC,QAAQ,GAAG,CAAC;QAClB;MACF;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;MACpG,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,QAAQ,CAAC,CAAC;MAChB;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,EAAE;MAC1G,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,kBAAkB,CAAC,CAAC;MACpB;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;MAC1B,IAAI,OAAO,EAAE;QACX,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,eAAe,CAAC,CAAC;MACnB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/C,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;MACjB;IACF;EACF,CAAC;EAED,MAAM,YAAY,GAAG,OAA0B;IAC7C,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;EAC/C,CAAC,CAAC;EAEF,yBACG,KAAK;IAAA;MAAA,OACG,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,KAAK;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,WAAW;MAAA,OAAE,KAAK,CAAC,WAAW;IAAA;IAAA,IAC9B,KAAK;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,IAAI;MAAA,OAAE,oBAAK,CAAC,IAAI,OAAI,CAAC,KAAK,CAAC,UAAU;IAAA;IACrC,IAAI,EAAE,IAAI;IAAA,IACV,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA,IACxB,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA;MAAA,0DAIH,KAAK,CAAC,WAAW,GAAG,MAAM,YAAG,SAAS,iDAC3C,UAAU,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,qDAC7B,KAAK,CAAC,UAAU,GAAG,MAAM,YAAG,SAAS,8CAC5C,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,YAAG,SAAS,kDAChD,KAAK,CAAC,QAAQ,GAAG,MAAM,YAAG,SAAS,iDACpC,KAAK,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,iDAC5B,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,YAAG,KAAK,CAAC,OAAO,mBAAG,SAAS,4BAC5F,YAAY,CAAC,CAAC,8BAGlB,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,WAAW;QAAA;QAAA;UAAA,gDAExB,GAAG;YAAA,IAAC,IAAI;cAAA,OAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAAA;YAAA,UAChC,CAAC,CAAC,EAAE,KAAK,kDAAuB,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,YAAG,SAAS,iBAAG,cAAK,CAAC,CAAC,IAAG,CAAC;UAAO;QAAA;MAAA,gCAIhH,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,gBAAC,UAAU,CAAC,CAAC,OAAI,KAAK,CAAC,WAAW;QAAA;QAAA;UAAA,+BAEzC,KAAK,CAAC,WAAW;QAAA;MAAA,KAOT,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS;QAAA,IAO5G,EAAE;UAAA,OAAE,IAAI,CAAC,SAAS;QAAA;QAAA,IAClB,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,SACV,yBAAyB;QAAA,IAsB/B,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;QAAA,IACxB,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;QAAA,IACxB,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;QAAA,IACxB,UAAU;UAAA,OAAE,KAAK,CAAC,UAAU,IAAI,KAAK;QAAA;QAAA,IACrC,SAAS;UAAA,OAAE,KAAK,CAAC,SAAS;QAAA;QAAA,IAC1B,IAAI;UAAA,OAAE,KAAK,CAAC,WAAW,GAAG,KAAK,GAAG,MAAM;QAAA;QAAA,IACxC,IAAI;UAAA,OAAE,KAAK,CAAC,UAAU,GAAG,CAAC,GAAI,KAAK,CAAC,KAAK,IAAI,CAAE;QAAA;MAAA,SAC3C,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;QAAA,iBACnB,SAAS;QAAA,qBACL,MAAM;QAAA;UAAA,OACT,YAAY,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS;QAAA;QAAA;UAAA,OAC9B,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,aAAa,CAAC,GAAG,SAAS;QAAA;MAAA,IAG9F,QAAQ,GAAG,cAAK,UAAU,CAAC,CAAC,GAAE,YAAG,SAAS,sCAG9C,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC;QAAA;QAAA;UAAA,4DAMrC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,+CAE7C,SAAS,uDAA+D,kBAAkB,CAAC,CAAC,CAAC,WAAW,4CAC9G,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,OAAO,CAAC,CAAC;YAAA;YAAA;cAAA;YAAA;UAAA,gCAMpB,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,eAAe,CAAC,CAAC;YAAA;YAAA,UACzB,OAAO,4BAGE,OAAO,CAAC,CAAC,YAEb,QAAQ,CAAC,CAAC,CAAC,KAAK;UAGtB,gCAEF,GAAG;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,CAAC,EAAE,WAAW,IAAI,EAAE;YAAA;YAAA,UAClC,CAAC,UAAU,EAAE,KAAK,KACjB;YAAA,6CAEM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iDAGN,cAAK,CAAC,CAAC,qBAAK,KAAK,CAAC,CAAC,EAAE,aAAa,iDACnC,OAAO,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,0BAerC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAE,OAAO,CAAC,UAAU,CAAC,8BAC3D,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,UAAU,CAAC,IAAI;cAAA;cAAA,UAAI,IAAI,4BAAa,IAAI,CAAC,CAAC;YAAS;UAElE;QAAA;MAAA;IAAA;EAAA;AAQjB;AAGA,SAAS,aAAa,QAAQ,cAAc","ignoreList":[]}