@health-samurai/react-components 0.0.0-alpha.2 → 0.0.0-alpha.21
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.
- package/LICENSE +21 -0
- package/README.md +102 -1
- package/dist/bundle.css +2349 -754
- package/dist/src/components/button-dropdown.d.ts +10 -0
- package/dist/src/components/button-dropdown.d.ts.map +1 -0
- package/dist/src/components/button-dropdown.js +70 -0
- package/dist/src/components/button-dropdown.js.map +1 -0
- package/dist/src/components/button-dropdown.stories.js +48 -0
- package/dist/src/components/button-dropdown.stories.js.map +1 -0
- package/dist/src/components/code-editor/fhir-autocomplete.d.ts +70 -0
- package/dist/src/components/code-editor/fhir-autocomplete.d.ts.map +1 -0
- package/dist/src/components/code-editor/fhir-autocomplete.js +1850 -0
- package/dist/src/components/code-editor/fhir-autocomplete.js.map +1 -0
- package/dist/src/components/code-editor/fhir-autocomplete.test.js +1099 -0
- package/dist/src/components/code-editor/fhir-autocomplete.test.js.map +1 -0
- package/dist/src/components/code-editor/http/grammar/http.d.ts +3 -0
- package/dist/src/components/code-editor/http/grammar/http.d.ts.map +1 -0
- package/dist/src/components/code-editor/http/grammar/http.grammar +74 -0
- package/dist/src/components/code-editor/http/grammar/http.js +38 -0
- package/dist/src/components/code-editor/http/grammar/http.js.map +1 -0
- package/dist/src/components/code-editor/http/grammar/http.terms.d.ts +2 -0
- package/dist/src/components/code-editor/http/grammar/http.terms.d.ts.map +1 -0
- package/dist/src/components/code-editor/http/grammar/http.terms.js +4 -0
- package/dist/src/components/code-editor/http/grammar/http.terms.js.map +1 -0
- package/dist/src/components/code-editor/http/grammar/http.test.js +80 -0
- package/dist/src/components/code-editor/http/grammar/http.test.js.map +1 -0
- package/dist/src/components/code-editor/http/index.d.ts +12 -0
- package/dist/src/components/code-editor/http/index.d.ts.map +1 -0
- package/dist/src/components/code-editor/http/index.js +486 -0
- package/dist/src/components/code-editor/http/index.js.map +1 -0
- package/dist/src/components/code-editor/index.d.ts +39 -1
- package/dist/src/components/code-editor/index.d.ts.map +1 -1
- package/dist/src/components/code-editor/index.js +1792 -45
- package/dist/src/components/code-editor/index.js.map +1 -1
- package/dist/src/components/code-editor/json-ast.d.ts +46 -0
- package/dist/src/components/code-editor/json-ast.d.ts.map +1 -0
- package/dist/src/components/code-editor/json-ast.js +465 -0
- package/dist/src/components/code-editor/json-ast.js.map +1 -0
- package/dist/src/components/code-editor/json-ast.test.js +206 -0
- package/dist/src/components/code-editor/json-ast.test.js.map +1 -0
- package/dist/src/components/code-editor/sql-completion.d.ts +22 -0
- package/dist/src/components/code-editor/sql-completion.d.ts.map +1 -0
- package/dist/src/components/code-editor/sql-completion.js +897 -0
- package/dist/src/components/code-editor/sql-completion.js.map +1 -0
- package/dist/src/components/code-editor.stories.js +280 -3
- package/dist/src/components/code-editor.stories.js.map +1 -1
- package/dist/src/components/copy-icon.d.ts +5 -1
- package/dist/src/components/copy-icon.d.ts.map +1 -1
- package/dist/src/components/copy-icon.js +41 -3
- package/dist/src/components/copy-icon.js.map +1 -1
- package/dist/src/components/data-table.d.ts +9 -0
- package/dist/src/components/data-table.d.ts.map +1 -0
- package/dist/src/components/data-table.js +66 -0
- package/dist/src/components/data-table.js.map +1 -0
- package/dist/src/components/data-table.stories.js +240 -0
- package/dist/src/components/data-table.stories.js.map +1 -0
- package/dist/src/components/date-picker-input.d.ts +10 -0
- package/dist/src/components/date-picker-input.d.ts.map +1 -0
- package/dist/src/components/date-picker-input.js +90 -0
- package/dist/src/components/date-picker-input.js.map +1 -0
- package/dist/src/components/date-picker-input.stories.js +76 -0
- package/dist/src/components/date-picker-input.stories.js.map +1 -0
- package/dist/src/components/fhir-structure-view.d.ts +34 -0
- package/dist/src/components/fhir-structure-view.d.ts.map +1 -0
- package/dist/src/components/fhir-structure-view.js +230 -0
- package/dist/src/components/fhir-structure-view.js.map +1 -0
- package/dist/src/components/fhir-structure-view.stories.js +447 -0
- package/dist/src/components/fhir-structure-view.stories.js.map +1 -0
- package/dist/src/components/icon-button.d.ts +12 -0
- package/dist/src/components/icon-button.d.ts.map +1 -0
- package/dist/src/components/icon-button.js +41 -0
- package/dist/src/components/icon-button.js.map +1 -0
- package/dist/src/components/icon-button.stories.js +157 -0
- package/dist/src/components/icon-button.stories.js.map +1 -0
- package/dist/src/components/operation-outcome-view.d.ts +27 -0
- package/dist/src/components/operation-outcome-view.d.ts.map +1 -0
- package/dist/src/components/operation-outcome-view.js +198 -0
- package/dist/src/components/operation-outcome-view.js.map +1 -0
- package/dist/src/components/operation-outcome-view.stories.js +207 -0
- package/dist/src/components/operation-outcome-view.stories.js.map +1 -0
- package/dist/src/components/request-line-editor.d.ts +13 -35
- package/dist/src/components/request-line-editor.d.ts.map +1 -1
- package/dist/src/components/request-line-editor.js +73 -49
- package/dist/src/components/request-line-editor.js.map +1 -1
- package/dist/src/components/request-line-editor.stories.js +17 -53
- package/dist/src/components/request-line-editor.stories.js.map +1 -1
- package/dist/src/components/sandbox.d.ts +13 -0
- package/dist/src/components/sandbox.d.ts.map +1 -0
- package/dist/src/components/sandbox.js +107 -0
- package/dist/src/components/sandbox.js.map +1 -0
- package/dist/src/components/sandbox.stories.js +126 -0
- package/dist/src/components/sandbox.stories.js.map +1 -0
- package/dist/src/components/segment-control.d.ts +13 -0
- package/dist/src/components/segment-control.d.ts.map +1 -0
- package/dist/src/components/segment-control.js +33 -0
- package/dist/src/components/segment-control.js.map +1 -0
- package/dist/src/components/segment-control.stories.js +68 -0
- package/dist/src/components/segment-control.stories.js.map +1 -0
- package/dist/src/components/split-button.d.ts +12 -0
- package/dist/src/components/split-button.d.ts.map +1 -0
- package/dist/src/components/split-button.js +33 -0
- package/dist/src/components/split-button.js.map +1 -0
- package/dist/src/components/split-button.stories.js +84 -0
- package/dist/src/components/split-button.stories.js.map +1 -0
- package/dist/src/components/tag.d.ts +16 -0
- package/dist/src/components/tag.d.ts.map +1 -0
- package/dist/src/components/tag.js +198 -0
- package/dist/src/components/tag.js.map +1 -0
- package/dist/src/components/tag.stories.js +459 -0
- package/dist/src/components/tag.stories.js.map +1 -0
- package/dist/src/components/tile.d.ts +15 -0
- package/dist/src/components/tile.d.ts.map +1 -0
- package/dist/src/components/tile.js +76 -0
- package/dist/src/components/tile.js.map +1 -0
- package/dist/src/components/tile.stories.js +167 -0
- package/dist/src/components/tile.stories.js.map +1 -0
- package/dist/src/components/toolbar.d.ts +18 -0
- package/dist/src/components/toolbar.d.ts.map +1 -0
- package/dist/src/components/toolbar.js +61 -0
- package/dist/src/components/toolbar.js.map +1 -0
- package/dist/src/components/toolbar.stories.js +69 -0
- package/dist/src/components/toolbar.stories.js.map +1 -0
- package/dist/src/components/tree-view.d.ts +47 -0
- package/dist/src/components/tree-view.d.ts.map +1 -0
- package/dist/src/components/tree-view.js +122 -0
- package/dist/src/components/tree-view.js.map +1 -0
- package/dist/src/components/tree-view.stories.js +283 -0
- package/dist/src/components/tree-view.stories.js.map +1 -0
- package/dist/src/icons.d.ts +11 -0
- package/dist/src/icons.d.ts.map +1 -0
- package/dist/src/icons.js +328 -0
- package/dist/src/icons.js.map +1 -0
- package/dist/src/index.css +358 -74
- package/dist/src/index.d.ts +17 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +17 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/shadcn/components/ui/accordion.d.ts +2 -2
- package/dist/src/shadcn/components/ui/accordion.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/accordion.js +35 -9
- package/dist/src/shadcn/components/ui/accordion.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.d.ts +12 -4
- package/dist/src/shadcn/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.js +128 -18
- package/dist/src/shadcn/components/ui/alert-dialog.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.stories.js +269 -19
- package/dist/src/shadcn/components/ui/alert-dialog.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert.d.ts +29 -6
- package/dist/src/shadcn/components/ui/alert.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/alert.js +50 -19
- package/dist/src/shadcn/components/ui/alert.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert.stories.js +140 -36
- package/dist/src/shadcn/components/ui/alert.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.js +1 -0
- package/dist/src/shadcn/components/ui/aspect-ratio.js.map +1 -1
- package/dist/src/shadcn/components/ui/avatar.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/avatar.js +4 -3
- package/dist/src/shadcn/components/ui/avatar.js.map +1 -1
- package/dist/src/shadcn/components/ui/avatar.stories.js +68 -2
- package/dist/src/shadcn/components/ui/avatar.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/badge.d.ts +1 -1
- package/dist/src/shadcn/components/ui/badge.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/badge.js +16 -5
- package/dist/src/shadcn/components/ui/badge.js.map +1 -1
- package/dist/src/shadcn/components/ui/breadcrumb.d.ts +5 -2
- package/dist/src/shadcn/components/ui/breadcrumb.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/breadcrumb.js +98 -13
- package/dist/src/shadcn/components/ui/breadcrumb.js.map +1 -1
- package/dist/src/shadcn/components/ui/breadcrumb.stories.js +205 -45
- package/dist/src/shadcn/components/ui/breadcrumb.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/button.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/button.js +65 -11
- package/dist/src/shadcn/components/ui/button.js.map +1 -1
- package/dist/src/shadcn/components/ui/button.stories.js +99 -17
- package/dist/src/shadcn/components/ui/button.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/calendar.d.ts +1 -1
- package/dist/src/shadcn/components/ui/calendar.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/calendar.js +1 -0
- package/dist/src/shadcn/components/ui/calendar.js.map +1 -1
- package/dist/src/shadcn/components/ui/card.d.ts +5 -1
- package/dist/src/shadcn/components/ui/card.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/card.js +28 -7
- package/dist/src/shadcn/components/ui/card.js.map +1 -1
- package/dist/src/shadcn/components/ui/card.stories.js +23 -2
- package/dist/src/shadcn/components/ui/card.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/carousel.d.ts +1 -1
- package/dist/src/shadcn/components/ui/carousel.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/carousel.js +1 -0
- package/dist/src/shadcn/components/ui/carousel.js.map +1 -1
- package/dist/src/shadcn/components/ui/chart.d.ts +5 -5
- package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/chart.js +4 -3
- package/dist/src/shadcn/components/ui/chart.js.map +1 -1
- package/dist/src/shadcn/components/ui/checkbox.d.ts +5 -1
- package/dist/src/shadcn/components/ui/checkbox.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/checkbox.js +46 -6
- package/dist/src/shadcn/components/ui/checkbox.js.map +1 -1
- package/dist/src/shadcn/components/ui/checkbox.stories.js +156 -46
- package/dist/src/shadcn/components/ui/checkbox.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/combobox.d.ts +29 -0
- package/dist/src/shadcn/components/ui/combobox.d.ts.map +1 -0
- package/dist/src/shadcn/components/ui/combobox.js +226 -0
- package/dist/src/shadcn/components/ui/combobox.js.map +1 -0
- package/dist/src/shadcn/components/ui/combobox.stories.js +167 -0
- package/dist/src/shadcn/components/ui/combobox.stories.js.map +1 -0
- package/dist/src/shadcn/components/ui/command.d.ts +4 -2
- package/dist/src/shadcn/components/ui/command.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/command.js +75 -13
- package/dist/src/shadcn/components/ui/command.js.map +1 -1
- package/dist/src/shadcn/components/ui/command.stories.js +277 -57
- package/dist/src/shadcn/components/ui/command.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/context-menu.d.ts +7 -3
- package/dist/src/shadcn/components/ui/context-menu.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/context-menu.js +120 -13
- package/dist/src/shadcn/components/ui/context-menu.js.map +1 -1
- package/dist/src/shadcn/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/dialog.js +35 -7
- package/dist/src/shadcn/components/ui/dialog.js.map +1 -1
- package/dist/src/shadcn/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/drawer.js +27 -5
- package/dist/src/shadcn/components/ui/drawer.js.map +1 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.d.ts +7 -3
- package/dist/src/shadcn/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.js +122 -14
- package/dist/src/shadcn/components/ui/dropdown-menu.js.map +1 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.js +22 -5
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/form.d.ts +2 -2
- package/dist/src/shadcn/components/ui/form.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/form.js +17 -8
- package/dist/src/shadcn/components/ui/form.js.map +1 -1
- package/dist/src/shadcn/components/ui/hover-card.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/hover-card.js +2 -1
- package/dist/src/shadcn/components/ui/hover-card.js.map +1 -1
- package/dist/src/shadcn/components/ui/input-otp.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/input-otp.js +1 -0
- package/dist/src/shadcn/components/ui/input-otp.js.map +1 -1
- package/dist/src/shadcn/components/ui/input.d.ts +3 -1
- package/dist/src/shadcn/components/ui/input.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/input.js +126 -17
- package/dist/src/shadcn/components/ui/input.js.map +1 -1
- package/dist/src/shadcn/components/ui/input.stories.js +218 -29
- package/dist/src/shadcn/components/ui/input.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/label.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/label.js +9 -1
- package/dist/src/shadcn/components/ui/label.js.map +1 -1
- package/dist/src/shadcn/components/ui/menubar.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/menubar.js +35 -13
- package/dist/src/shadcn/components/ui/menubar.js.map +1 -1
- package/dist/src/shadcn/components/ui/pagination.d.ts +9 -2
- package/dist/src/shadcn/components/ui/pagination.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/pagination.js +41 -24
- package/dist/src/shadcn/components/ui/pagination.js.map +1 -1
- package/dist/src/shadcn/components/ui/pagination.stories.js +44 -37
- package/dist/src/shadcn/components/ui/pagination.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/popover.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/popover.js +13 -1
- package/dist/src/shadcn/components/ui/popover.js.map +1 -1
- package/dist/src/shadcn/components/ui/progress.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/progress.js +6 -2
- package/dist/src/shadcn/components/ui/progress.js.map +1 -1
- package/dist/src/shadcn/components/ui/radio-button-group.d.ts +21 -0
- package/dist/src/shadcn/components/ui/radio-button-group.d.ts.map +1 -0
- package/dist/src/shadcn/components/ui/radio-button-group.js +148 -0
- package/dist/src/shadcn/components/ui/radio-button-group.js.map +1 -0
- package/dist/src/shadcn/components/ui/radio-button-group.stories.js +283 -0
- package/dist/src/shadcn/components/ui/radio-button-group.stories.js.map +1 -0
- package/dist/src/shadcn/components/ui/radio-group.d.ts +5 -1
- package/dist/src/shadcn/components/ui/radio-group.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/radio-group.js +40 -7
- package/dist/src/shadcn/components/ui/radio-group.js.map +1 -1
- package/dist/src/shadcn/components/ui/radio-group.stories.js +107 -32
- package/dist/src/shadcn/components/ui/radio-group.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/resizable.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/resizable.js +2 -1
- package/dist/src/shadcn/components/ui/resizable.js.map +1 -1
- package/dist/src/shadcn/components/ui/resizable.stories.js +2 -2
- package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/scroll-area.js +10 -3
- package/dist/src/shadcn/components/ui/scroll-area.js.map +1 -1
- package/dist/src/shadcn/components/ui/select.d.ts +1 -2
- package/dist/src/shadcn/components/ui/select.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/select.js +49 -19
- package/dist/src/shadcn/components/ui/select.js.map +1 -1
- package/dist/src/shadcn/components/ui/select.stories.js +193 -70
- package/dist/src/shadcn/components/ui/select.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/separator.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/separator.js +8 -1
- package/dist/src/shadcn/components/ui/separator.js.map +1 -1
- package/dist/src/shadcn/components/ui/sheet.js +1 -1
- package/dist/src/shadcn/components/ui/sheet.js.map +1 -1
- package/dist/src/shadcn/components/ui/sidebar.d.ts +4 -4
- package/dist/src/shadcn/components/ui/sidebar.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/sidebar.js +21 -6
- package/dist/src/shadcn/components/ui/sidebar.js.map +1 -1
- package/dist/src/shadcn/components/ui/skeleton.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/skeleton.js +3 -1
- package/dist/src/shadcn/components/ui/skeleton.js.map +1 -1
- package/dist/src/shadcn/components/ui/slider.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/slider.js +35 -4
- package/dist/src/shadcn/components/ui/slider.js.map +1 -1
- package/dist/src/shadcn/components/ui/sonner.d.ts +24 -2
- package/dist/src/shadcn/components/ui/sonner.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/sonner.js +127 -9
- package/dist/src/shadcn/components/ui/sonner.js.map +1 -1
- package/dist/src/shadcn/components/ui/sonner.stories.js +251 -12
- package/dist/src/shadcn/components/ui/sonner.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/switch.d.ts +7 -1
- package/dist/src/shadcn/components/ui/switch.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/switch.js +55 -3
- package/dist/src/shadcn/components/ui/switch.js.map +1 -1
- package/dist/src/shadcn/components/ui/switch.stories.js +84 -9
- package/dist/src/shadcn/components/ui/switch.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/table.d.ts +23 -6
- package/dist/src/shadcn/components/ui/table.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/table.js +65 -20
- package/dist/src/shadcn/components/ui/table.js.map +1 -1
- package/dist/src/shadcn/components/ui/table.stories.js +217 -97
- package/dist/src/shadcn/components/ui/table.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.d.ts +30 -5
- package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.js +470 -23
- package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.stories.js +405 -181
- package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/textarea.d.ts +8 -1
- package/dist/src/shadcn/components/ui/textarea.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/textarea.js +30 -2
- package/dist/src/shadcn/components/ui/textarea.js.map +1 -1
- package/dist/src/shadcn/components/ui/textarea.stories.js +85 -4
- package/dist/src/shadcn/components/ui/textarea.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle-group.d.ts +3 -3
- package/dist/src/shadcn/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/toggle-group.js +14 -12
- package/dist/src/shadcn/components/ui/toggle-group.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle.d.ts +3 -4
- package/dist/src/shadcn/components/ui/toggle.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/toggle.js +44 -16
- package/dist/src/shadcn/components/ui/toggle.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle.stories.js +130 -7
- package/dist/src/shadcn/components/ui/toggle.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/tooltip.js +12 -1
- package/dist/src/shadcn/components/ui/tooltip.js.map +1 -1
- package/dist/src/shadcn/components/ui/tree.d.ts +29 -0
- package/dist/src/shadcn/components/ui/tree.d.ts.map +1 -0
- package/dist/src/shadcn/components/ui/tree.js +135 -0
- package/dist/src/shadcn/components/ui/tree.js.map +1 -0
- package/dist/src/shadcn/shadcn.css +4 -4
- package/dist/src/tokens.css +50 -20
- package/dist/src/typography.css +78 -15
- package/package.json +84 -64
- package/src/components/button-dropdown.stories.tsx +41 -0
- package/src/components/button-dropdown.tsx +97 -0
- package/src/components/code-editor/fhir-autocomplete.test.ts +993 -0
- package/src/components/code-editor/fhir-autocomplete.ts +2322 -0
- package/src/components/code-editor/http/grammar/http.grammar +74 -0
- package/src/components/code-editor/http/grammar/http.terms.ts +9 -0
- package/src/components/code-editor/http/grammar/http.test.ts +110 -0
- package/src/components/code-editor/http/grammar/http.ts +21 -0
- package/src/components/code-editor/http/index.ts +424 -0
- package/src/components/code-editor/index.tsx +1944 -42
- package/src/components/code-editor/json-ast.test.ts +230 -0
- package/src/components/code-editor/json-ast.ts +590 -0
- package/src/components/code-editor/sql-completion.ts +1112 -0
- package/src/components/code-editor.stories.tsx +325 -2
- package/src/components/copy-icon.tsx +57 -3
- package/src/components/data-table.stories.tsx +91 -0
- package/src/components/data-table.tsx +126 -0
- package/src/components/date-picker-input.stories.tsx +79 -0
- package/src/components/date-picker-input.tsx +104 -0
- package/src/components/fhir-structure-view.stories.tsx +439 -0
- package/src/components/fhir-structure-view.tsx +233 -0
- package/src/components/icon-button.stories.tsx +86 -0
- package/src/components/icon-button.tsx +57 -0
- package/src/components/operation-outcome-view.stories.tsx +163 -0
- package/src/components/operation-outcome-view.tsx +254 -0
- package/src/components/request-line-editor.stories.tsx +17 -27
- package/src/components/request-line-editor.tsx +103 -61
- package/src/components/sandbox.stories.tsx +131 -0
- package/src/components/sandbox.tsx +191 -0
- package/src/components/segment-control.stories.tsx +61 -0
- package/src/components/segment-control.tsx +83 -0
- package/src/components/split-button.stories.tsx +68 -0
- package/src/components/split-button.tsx +74 -0
- package/src/components/tag.stories.tsx +371 -0
- package/src/components/tag.tsx +236 -0
- package/src/components/tile.stories.tsx +149 -0
- package/src/components/tile.tsx +105 -0
- package/src/components/toolbar.stories.tsx +64 -0
- package/src/components/toolbar.tsx +98 -0
- package/src/components/tree-view.stories.tsx +265 -0
- package/src/components/tree-view.tsx +246 -0
- package/src/icons.tsx +331 -0
- package/src/index.css +358 -74
- package/src/index.tsx +17 -3
- package/src/shadcn/components/ui/accordion.tsx +91 -10
- package/src/shadcn/components/ui/alert-dialog.stories.tsx +209 -15
- package/src/shadcn/components/ui/alert-dialog.tsx +236 -26
- package/src/shadcn/components/ui/alert.stories.tsx +120 -21
- package/src/shadcn/components/ui/alert.tsx +125 -28
- package/src/shadcn/components/ui/aspect-ratio.tsx +1 -0
- package/src/shadcn/components/ui/avatar.stories.tsx +74 -1
- package/src/shadcn/components/ui/avatar.tsx +22 -6
- package/src/shadcn/components/ui/badge.tsx +67 -18
- package/src/shadcn/components/ui/breadcrumb.stories.tsx +161 -41
- package/src/shadcn/components/ui/breadcrumb.tsx +172 -23
- package/src/shadcn/components/ui/button.stories.tsx +106 -18
- package/src/shadcn/components/ui/button.tsx +151 -55
- package/src/shadcn/components/ui/calendar.tsx +1 -0
- package/src/shadcn/components/ui/card.stories.tsx +17 -3
- package/src/shadcn/components/ui/card.tsx +89 -14
- package/src/shadcn/components/ui/carousel.tsx +1 -0
- package/src/shadcn/components/ui/chart.tsx +9 -5
- package/src/shadcn/components/ui/checkbox.stories.tsx +78 -30
- package/src/shadcn/components/ui/checkbox.tsx +91 -8
- package/src/shadcn/components/ui/combobox.stories.tsx +148 -0
- package/src/shadcn/components/ui/combobox.tsx +324 -0
- package/src/shadcn/components/ui/command.stories.tsx +184 -39
- package/src/shadcn/components/ui/command.tsx +218 -37
- package/src/shadcn/components/ui/context-menu.tsx +333 -40
- package/src/shadcn/components/ui/dialog.tsx +101 -13
- package/src/shadcn/components/ui/drawer.tsx +94 -18
- package/src/shadcn/components/ui/dropdown-menu.stories.tsx +18 -2
- package/src/shadcn/components/ui/dropdown-menu.tsx +334 -68
- package/src/shadcn/components/ui/form.tsx +22 -11
- package/src/shadcn/components/ui/hover-card.tsx +2 -1
- package/src/shadcn/components/ui/input-otp.tsx +1 -0
- package/src/shadcn/components/ui/input.stories.tsx +235 -27
- package/src/shadcn/components/ui/input.tsx +400 -29
- package/src/shadcn/components/ui/label.tsx +22 -4
- package/src/shadcn/components/ui/menubar.tsx +188 -43
- package/src/shadcn/components/ui/pagination.stories.tsx +8 -2
- package/src/shadcn/components/ui/pagination.tsx +65 -8
- package/src/shadcn/components/ui/popover.tsx +36 -4
- package/src/shadcn/components/ui/progress.tsx +21 -5
- package/src/shadcn/components/ui/radio-button-group.stories.tsx +247 -0
- package/src/shadcn/components/ui/radio-button-group.tsx +188 -0
- package/src/shadcn/components/ui/radio-group.stories.tsx +70 -14
- package/src/shadcn/components/ui/radio-group.tsx +85 -9
- package/src/shadcn/components/ui/resizable.stories.tsx +2 -2
- package/src/shadcn/components/ui/resizable.tsx +2 -1
- package/src/shadcn/components/ui/scroll-area.tsx +34 -5
- package/src/shadcn/components/ui/select.stories.tsx +108 -32
- package/src/shadcn/components/ui/select.tsx +182 -36
- package/src/shadcn/components/ui/separator.tsx +16 -5
- package/src/shadcn/components/ui/sheet.tsx +1 -1
- package/src/shadcn/components/ui/sidebar.tsx +69 -26
- package/src/shadcn/components/ui/skeleton.tsx +4 -1
- package/src/shadcn/components/ui/slider.tsx +83 -11
- package/src/shadcn/components/ui/sonner.stories.tsx +238 -17
- package/src/shadcn/components/ui/sonner.tsx +254 -11
- package/src/shadcn/components/ui/switch.stories.tsx +52 -5
- package/src/shadcn/components/ui/switch.tsx +92 -7
- package/src/shadcn/components/ui/table.stories.tsx +252 -72
- package/src/shadcn/components/ui/table.tsx +204 -26
- package/src/shadcn/components/ui/tabs.stories.tsx +235 -123
- package/src/shadcn/components/ui/tabs.tsx +694 -36
- package/src/shadcn/components/ui/textarea.stories.tsx +94 -2
- package/src/shadcn/components/ui/textarea.tsx +70 -5
- package/src/shadcn/components/ui/toggle-group.tsx +35 -13
- package/src/shadcn/components/ui/toggle.stories.tsx +92 -5
- package/src/shadcn/components/ui/toggle.tsx +96 -23
- package/src/shadcn/components/ui/tooltip.tsx +34 -8
- package/src/shadcn/components/ui/tree.tsx +257 -0
- package/src/shadcn/shadcn.css +4 -4
- package/src/tokens.css +50 -20
- package/src/typography.css +78 -15
- package/dist/src/components/code-editor.stories.d.ts +0 -7
- package/dist/src/components/code-editor.stories.d.ts.map +0 -1
- package/dist/src/components/request-line-editor.stories.d.ts +0 -11
- package/dist/src/components/request-line-editor.stories.d.ts.map +0 -1
- package/dist/src/index.stories.d.ts +0 -14
- package/dist/src/index.stories.d.ts.map +0 -1
- package/dist/src/index.stories.js +0 -19
- package/dist/src/index.stories.js.map +0 -1
- package/dist/src/shadcn/components/ui/accordion.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/accordion.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/alert-dialog.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/alert-dialog.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/alert.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/alert.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/aspect-ratio.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/avatar.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/avatar.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/badge.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/badge.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/breadcrumb.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/breadcrumb.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/button.stories.d.ts +0 -23
- package/dist/src/shadcn/components/ui/button.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/calendar.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/calendar.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/card.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/card.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/carousel.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/carousel.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/chart.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/chart.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/checkbox.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/checkbox.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/collapsible.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/collapsible.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/command.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/command.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/context-menu.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/context-menu.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/dialog.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/dialog.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/drawer.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/drawer.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/form.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/form.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/hover-card.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/hover-card.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/input-otp.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/input-otp.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/input.stories.d.ts +0 -18
- package/dist/src/shadcn/components/ui/input.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/label.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/label.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/menubar.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/menubar.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/navigation-menu.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/navigation-menu.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/pagination.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/pagination.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/popover.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/popover.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/progress.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/progress.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/radio-group.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/radio-group.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/resizable.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/resizable.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/scroll-area.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/scroll-area.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/select.stories.d.ts +0 -11
- package/dist/src/shadcn/components/ui/select.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/separator.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/separator.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/sheet.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/sheet.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/sidebar.stories.d.ts +0 -11
- package/dist/src/shadcn/components/ui/sidebar.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/skeleton.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/skeleton.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/slider.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/slider.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/sonner.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/sonner.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/switch.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/switch.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/table.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/table.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/tabs.stories.d.ts +0 -32
- package/dist/src/shadcn/components/ui/tabs.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/textarea.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/textarea.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/toggle-group.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/toggle-group.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/toggle.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/toggle.stories.d.ts.map +0 -1
- package/dist/src/shadcn/components/ui/tooltip.stories.d.ts +0 -8
- package/dist/src/shadcn/components/ui/tooltip.stories.d.ts.map +0 -1
- package/src/index.stories.tsx +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/code-editor/index.tsx"],"sourcesContent":["import {\n\tautocompletion,\n\tcloseBrackets,\n\tcloseBracketsKeymap,\n\tcompletionKeymap,\n} from \"@codemirror/autocomplete\";\nimport { defaultKeymap, history, historyKeymap } from \"@codemirror/commands\";\nimport { json, jsonParseLinter } from \"@codemirror/lang-json\";\nimport {\n\tbracketMatching,\n\tfoldGutter,\n\tfoldKeymap,\n\tHighlightStyle,\n\tindentOnInput,\n\tsyntaxHighlighting,\n} from \"@codemirror/language\";\nimport { linter, lintGutter, lintKeymap } from \"@codemirror/lint\";\nimport { highlightSelectionMatches, searchKeymap } from \"@codemirror/search\";\nimport { EditorState } from \"@codemirror/state\";\nimport {\n\tcrosshairCursor,\n\tdrawSelection,\n\tdropCursor,\n\tEditorView,\n\thighlightActiveLine,\n\thighlightActiveLineGutter,\n\thighlightSpecialChars,\n\tkeymap,\n\tlineNumbers,\n\trectangularSelection,\n} from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\nimport * as React from \"react\";\n\nconst baseTheme = EditorView.baseTheme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tpaddingLeft: \"16px\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0)\",\n\t},\n});\n\nconst customHighlightStyle = HighlightStyle.define([\n\t{ tag: tags.propertyName, color: \"#EA4A35\" },\n\t{ tag: tags.string, color: \"#405CBF\" },\n\t{ tag: tags.number, color: \"#00A984\" },\n\t{ tag: tags.bool, color: \"#569cd6\" },\n\t{ tag: tags.null, color: \"#569cd6\" },\n]);\n\nexport function CodeEditor({\n\tdefaultValue,\n\tonChange,\n}: {\n\tdefaultValue?: string;\n\tonChange?: (value: string) => void;\n}) {\n\tconst editorRef = React.useRef(null);\n\n\tReact.useEffect(() => {\n\t\tif (!editorRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: editorRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: defaultValue ?? \"\",\n\t\t\t\textensions: [\n\t\t\t\t\tlineNumbers(),\n\t\t\t\t\tfoldGutter(),\n\t\t\t\t\thighlightSpecialChars(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tdrawSelection(),\n\t\t\t\t\tdropCursor(),\n\t\t\t\t\tEditorState.allowMultipleSelections.of(true),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\tjson(),\n\t\t\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\t\t\tbracketMatching(),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\tautocompletion(),\n\t\t\t\t\trectangularSelection(),\n\t\t\t\t\tcrosshairCursor(),\n\t\t\t\t\thighlightActiveLine(),\n\t\t\t\t\thighlightActiveLineGutter(),\n\t\t\t\t\thighlightSelectionMatches(),\n\t\t\t\t\tbaseTheme,\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t\tlinter(jsonParseLinter(), { delay: 300 }),\n\t\t\t\t\tlintGutter(),\n\t\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\t\tonChange(update.view.state.doc.toString());\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\n\t\treturn () => view.destroy();\n\t}, [defaultValue, onChange]);\n\n\treturn <div className=\"h-full w-full\" ref={editorRef} />;\n}\n"],"names":["autocompletion","closeBrackets","closeBracketsKeymap","completionKeymap","defaultKeymap","history","historyKeymap","json","jsonParseLinter","bracketMatching","foldGutter","foldKeymap","HighlightStyle","indentOnInput","syntaxHighlighting","linter","lintGutter","lintKeymap","highlightSelectionMatches","searchKeymap","EditorState","crosshairCursor","drawSelection","dropCursor","EditorView","highlightActiveLine","highlightActiveLineGutter","highlightSpecialChars","keymap","lineNumbers","rectangularSelection","tags","React","baseTheme","backgroundColor","height","width","fontSize","paddingTop","paddingBottom","overflow","fontFamily","padding","outline","border","paddingLeft","color","customHighlightStyle","define","tag","propertyName","string","number","bool","null","CodeEditor","defaultValue","onChange","editorRef","useRef","useEffect","current","view","parent","state","create","doc","extensions","allowMultipleSelections","of","delay","updateListener","update","docChanged","toString","destroy","div","className","ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/code-editor/index.tsx"],"sourcesContent":["import {\n\tacceptCompletion,\n\tautocompletion,\n\ttype Completion,\n\tcloseBrackets,\n\tcloseBracketsKeymap,\n\tcompletionKeymap,\n\tcompletionStatus,\n\tmoveCompletionSelection,\n} from \"@codemirror/autocomplete\";\nimport { defaultKeymap, history, historyKeymap } from \"@codemirror/commands\";\nimport { json, jsonParseLinter } from \"@codemirror/lang-json\";\nimport { SQLDialect, sql } from \"@codemirror/lang-sql\";\nimport { yaml } from \"@codemirror/lang-yaml\";\nimport {\n\tbracketMatching,\n\tfoldGutter,\n\tfoldKeymap,\n\tHighlightStyle,\n\tindentOnInput,\n\tsyntaxHighlighting,\n\tsyntaxTree,\n} from \"@codemirror/language\";\nimport { linter, lintKeymap } from \"@codemirror/lint\";\nimport {\n\tcloseSearchPanel,\n\tfindNext,\n\tfindPrevious,\n\tgetSearchQuery,\n\thighlightSelectionMatches,\n\tSearchQuery,\n\tsearch,\n\tsearchKeymap,\n\tsetSearchQuery,\n} from \"@codemirror/search\";\nimport {\n\tCompartment,\n\tEditorState,\n\ttype Extension,\n\tPrec,\n\tRangeSet,\n\tStateEffect,\n\tStateField,\n} from \"@codemirror/state\";\nimport {\n\tcrosshairCursor,\n\tDecoration,\n\tdrawSelection,\n\tdropCursor,\n\tEditorView,\n\tGutterMarker,\n\tgutterLineClass,\n\thighlightSpecialChars,\n\tkeymap,\n\tlineNumbers,\n\trectangularSelection,\n\ttype ViewUpdate,\n} from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\nimport { vim } from \"@replit/codemirror-vim\";\nimport {\n\tChevronDown,\n\tChevronsRight,\n\tChevronUp,\n\tColumns2,\n\tHeading,\n\tTable2,\n\tTerminal,\n\tX,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { createRoot } from \"react-dom/client\";\nimport {\n\tComplexTypeIcon,\n\tResourceIcon,\n\tSquareFunctionIcon,\n\tTypCodeIcon,\n} from \"../../icons\";\nimport {\n\tbuildFhirCompletionExtension,\n\ttype ExpandValueSet,\n\tfhirDiagnosticsField,\n\ttype GetStructureDefinitions,\n} from \"./fhir-autocomplete\";\nimport { type GetUrlSuggestions, http } from \"./http\";\nimport {\n\tbuildSqlCompletionExtensions,\n\tfetchSqlMetadata,\n\ttype SqlConfig,\n} from \"./sql-completion\";\n\n// --- Issue lines: gutter highlighting, line background, hover tooltip ---\n\ntype IssueLine = { line: number; message?: string };\n\nclass ErrorLineGutterMarker extends GutterMarker {\n\telementClass = \"cm-errorLineGutter\";\n}\nconst errorLineMarker = new ErrorLineGutterMarker();\nconst errorLineDecoration = Decoration.line({ class: \"cm-errorLine\" });\n\nconst setIssueLinesEffect = StateEffect.define<IssueLine[]>();\n\nlet errorTooltipEl: HTMLDivElement | null = null;\n\nfunction formatErrorTypeTitle(code: string): string {\n\treturn code\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\nfunction renderErrorCard(msg: string): HTMLElement {\n\tconst card = document.createElement(\"div\");\n\tObject.assign(card.style, {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tpadding: \"6px 10px\",\n\t\tboxShadow: \"0 2px 6px rgba(0, 0, 0, 0.08)\",\n\t});\n\tconst newlineIdx = msg.indexOf(\"\\n\");\n\tif (newlineIdx !== -1) {\n\t\tconst title = msg.slice(0, newlineIdx);\n\t\tconst body = msg.slice(newlineIdx + 1);\n\n\t\tconst titleEl = document.createElement(\"div\");\n\t\ttitleEl.textContent = formatErrorTypeTitle(title);\n\t\tObject.assign(titleEl.style, { fontWeight: \"600\" });\n\n\t\tconst hr = document.createElement(\"div\");\n\t\tObject.assign(hr.style, {\n\t\t\tborderTop: \"1px solid var(--color-border-primary)\",\n\t\t\tmargin: \"4px 0\",\n\t\t});\n\n\t\tconst bodyEl = document.createElement(\"div\");\n\t\tbodyEl.textContent = body;\n\t\tObject.assign(bodyEl.style, { whiteSpace: \"pre-wrap\" });\n\n\t\tcard.append(titleEl, hr, bodyEl);\n\t} else {\n\t\tcard.textContent = msg;\n\t\tcard.style.whiteSpace = \"pre-wrap\";\n\t}\n\treturn card;\n}\n\nfunction showErrorTooltip(message: string, x: number, y: number) {\n\thideErrorTooltip();\n\n\tconst tooltip = document.createElement(\"div\");\n\tObject.assign(tooltip.style, {\n\t\tposition: \"fixed\",\n\t\tfontSize: \"12px\",\n\t\tlineHeight: \"1.4\",\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tzIndex: \"1000\",\n\t\tpointerEvents: \"none\",\n\t\tmaxWidth: \"400px\",\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\tgap: \"6px\",\n\t});\n\n\tconst parts = message.split(\"\\n\\x00\\n\");\n\tfor (const part of parts) {\n\t\ttooltip.append(renderErrorCard(part ?? \"\"));\n\t}\n\n\tdocument.body.appendChild(tooltip);\n\terrorTooltipEl = tooltip;\n\n\tconst tooltipRect = tooltip.getBoundingClientRect();\n\tlet top = y - tooltipRect.height - 8;\n\t// If tooltip goes above viewport, show below cursor instead\n\tif (top < 4) {\n\t\ttop = y + 20;\n\t}\n\t// If it still goes below viewport, clamp to bottom\n\tif (top + tooltipRect.height > window.innerHeight - 4) {\n\t\ttop = window.innerHeight - tooltipRect.height - 4;\n\t}\n\t// Final clamp to top\n\tif (top < 4) top = 4;\n\ttooltip.style.left = `${x}px`;\n\ttooltip.style.top = `${top}px`;\n}\n\nfunction hideErrorTooltip() {\n\terrorTooltipEl?.remove();\n\terrorTooltipEl = null;\n}\n\nconst issueLinesField = StateField.define<{\n\tgutterMarkers: RangeSet<GutterMarker>;\n\tlineDecorations: RangeSet<Decoration>;\n\tmessages: Map<number, string>;\n}>({\n\tcreate() {\n\t\treturn {\n\t\t\tgutterMarkers: RangeSet.empty,\n\t\t\tlineDecorations: Decoration.none,\n\t\t\tmessages: new Map(),\n\t\t};\n\t},\n\tupdate(state, tr) {\n\t\tfor (const effect of tr.effects) {\n\t\t\tif (effect.is(setIssueLinesEffect)) {\n\t\t\t\tconst markers: { from: number; to: number; value: GutterMarker }[] = [];\n\t\t\t\tconst lineDecos: {\n\t\t\t\t\tfrom: number;\n\t\t\t\t\tto: number;\n\t\t\t\t\tvalue: Decoration;\n\t\t\t\t}[] = [];\n\t\t\t\tconst messages = new Map<number, string>();\n\t\t\t\tconst doc = tr.state.doc;\n\n\t\t\t\tfor (const issue of effect.value) {\n\t\t\t\t\tif (issue.line >= 1 && issue.line <= doc.lines) {\n\t\t\t\t\t\tconst line = doc.line(issue.line);\n\t\t\t\t\t\tmarkers.push(errorLineMarker.range(line.from));\n\t\t\t\t\t\tlineDecos.push(errorLineDecoration.range(line.from));\n\t\t\t\t\t\tif (issue.message) {\n\t\t\t\t\t\t\tmessages.set(issue.line, issue.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: RangeSet.of(markers, true),\n\t\t\t\t\tlineDecorations: Decoration.set(lineDecos, true),\n\t\t\t\t\tmessages,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (tr.docChanged) {\n\t\t\ttry {\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: state.gutterMarkers.map(tr.changes),\n\t\t\t\t\tlineDecorations: state.lineDecorations.map(tr.changes),\n\t\t\t\t\tmessages: state.messages,\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: RangeSet.empty,\n\t\t\t\t\tlineDecorations: Decoration.none,\n\t\t\t\t\tmessages: new Map(),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t},\n\tprovide(field) {\n\t\treturn [\n\t\t\tgutterLineClass.from(field, (val) => val.gutterMarkers),\n\t\t\tEditorView.decorations.from(field, (val) => val.lineDecorations),\n\t\t];\n\t},\n});\n\nfunction getErrorMessageForLine(\n\tview: EditorView,\n\tlineNo: number,\n): string | undefined {\n\tconst issueMsg = view.state.field(issueLinesField).messages.get(lineNo);\n\tif (issueMsg) return issueMsg;\n\ttry {\n\t\treturn view.state.field(fhirDiagnosticsField).messages.get(lineNo);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction handleErrorTooltipMove(event: Event, view: EditorView) {\n\tconst target = event.target as HTMLElement;\n\tconst mouseEvent = event as MouseEvent;\n\n\t// Check gutter line number\n\tconst gutterEl = target.closest(\n\t\t\".cm-lineNumbers .cm-gutterElement\",\n\t) as HTMLElement | null;\n\tif (gutterEl) {\n\t\tconst lineNo = Number.parseInt(gutterEl.textContent ?? \"\", 10);\n\t\tif (!Number.isNaN(lineNo)) {\n\t\t\tconst message = getErrorMessageForLine(view, lineNo);\n\t\t\tif (message) {\n\t\t\t\tshowErrorTooltip(message, mouseEvent.clientX, mouseEvent.clientY);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\thideErrorTooltip();\n\t\treturn false;\n\t}\n\n\t// Check content line (cm-line) — follow cursor\n\tconst lineEl = target.closest(\".cm-line\") as HTMLElement | null;\n\tif (lineEl) {\n\t\tconst pos = view.posAtDOM(lineEl);\n\t\tconst lineNo = view.state.doc.lineAt(pos).number;\n\t\tconst message = getErrorMessageForLine(view, lineNo);\n\t\tif (message) {\n\t\t\tshowErrorTooltip(message, mouseEvent.clientX, mouseEvent.clientY);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\thideErrorTooltip();\n\treturn false;\n}\n\nconst errorTooltipHandler = EditorView.domEventHandlers({\n\tmouseover: handleErrorTooltipMove,\n\tmousemove: handleErrorTooltipMove,\n\tmouseleave() {\n\t\thideErrorTooltip();\n\t\treturn false;\n\t},\n});\n\nconst baseTheme = EditorView.theme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t},\n\t\"&.cm-editor\": {\n\t\tpaddingTop: \"0 !important\",\n\t\tpaddingBottom: \"0 !important\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-cursor, .cm-dropCursor\": {\n\t\tborderLeftColor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"transparent\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tminWidth: \"3.5ch\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\tminWidth: \"3.5ch\",\n\t\tpaddingRight: \"4px\",\n\t\tcolor: \"var(--color-text-quaternary)\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-foldGutter .cm-gutterElement.cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst completionTheme = EditorView.theme({\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\tmaxHeight: \"400px\",\n\t},\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul > li\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"8px\",\n\t},\n\t\".cm-completionLabel\": {\n\t\tflex: \"1\",\n\t\tminWidth: \"0\",\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tfontSize: \"var(--font-size-sm)\",\n\t\tlineHeight: \"var(--font-leading-5)\",\n\t},\n\t\".cm-completionMatchedText\": {\n\t\ttextDecoration: \"none\",\n\t\tfontWeight: \"600\",\n\t\tcolor: \"var(--color-text-link)\",\n\t},\n\t\".cm-completionDetail\": {\n\t\tcolor: \"var(--color-text-tertiary)\",\n\t\tfontSize: \"12px\",\n\t\tmarginLeft: \"auto\",\n\t\twhiteSpace: \"nowrap\",\n\t},\n\t\".cm-completionInfo\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tfontSize: \"14px\",\n\t\tpadding: \"8px 12px\",\n\t\tmarginLeft: \"8px\",\n\t\tlineHeight: \"1.4\",\n\t\twhiteSpace: \"normal\",\n\t\tmaxWidth: \"300px\",\n\t},\n\t\".cm-completion-icon\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tflexShrink: \"0\",\n\t},\n});\n\nconst readOnlyTheme = EditorView.theme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t},\n\t\"&.cm-editor\": {\n\t\tpaddingTop: \"0 !important\",\n\t\tpaddingBottom: \"0 !important\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tminWidth: \"3.5ch\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\tminWidth: \"3.5ch\",\n\t\tpaddingRight: \"4px\",\n\t\tcolor: \"var(--color-text-quaternary)\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-foldGutter .cm-gutterElement.cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst iconButtonStyle: React.CSSProperties = {\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"28px\",\n\theight: \"28px\",\n\tborder: \"none\",\n\tborderRadius: \"var(--radius-sm)\",\n\tbackground: \"transparent\",\n\tcolor: \"var(--color-text-secondary)\",\n\tcursor: \"pointer\",\n\tpadding: 0,\n};\n\nfunction getMatchInfo(\n\tstate: EditorState,\n\tsearchText: string,\n): { current: number; total: number } {\n\tif (!searchText) return { current: 0, total: 0 };\n\tconst doc = state.doc.toString();\n\tconst sel = state.selection.main;\n\tconst lowerDoc = doc.toLowerCase();\n\tconst lowerSearch = searchText.toLowerCase();\n\tconst searchLen = searchText.length;\n\tlet total = 0;\n\tlet current = 0;\n\tlet pos = 0;\n\tfor (;;) {\n\t\tconst idx = lowerDoc.indexOf(lowerSearch, pos);\n\t\tif (idx === -1) break;\n\t\ttotal++;\n\t\tif (idx === sel.from && idx + searchLen === sel.to) {\n\t\t\tcurrent = total;\n\t\t}\n\t\tpos = idx + 1;\n\t}\n\treturn { current, total };\n}\n\nfunction createSearchPanel(view: EditorView) {\n\tconst dom = document.createElement(\"div\");\n\tconst root = createRoot(dom);\n\n\tconst panelRef: {\n\t\tsetSearch: ((v: string) => void) | null;\n\t\tsetMatch: ((info: { current: number; total: number }) => void) | null;\n\t\tlastSearch: string;\n\t\tlastCurrent: number;\n\t\tlastTotal: number;\n\t} = {\n\t\tsetSearch: null,\n\t\tsetMatch: null,\n\t\tlastSearch: \"\",\n\t\tlastCurrent: 0,\n\t\tlastTotal: 0,\n\t};\n\n\tfunction Panel() {\n\t\tconst [value, setValue] = React.useState(\n\t\t\t() => getSearchQuery(view.state).search,\n\t\t);\n\t\tconst [match, setMatchState] = React.useState({ current: 0, total: 0 });\n\n\t\tpanelRef.setSearch = setValue;\n\t\tpanelRef.setMatch = setMatchState;\n\n\t\tconst handleChange = (newValue: string) => {\n\t\t\tsetValue(newValue);\n\t\t\tview.dispatch({\n\t\t\t\teffects: setSearchQuery.of(new SearchQuery({ search: newValue })),\n\t\t\t});\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: \"2px\",\n\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\tmarginTop: \"4px\",\n\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\tboxShadow: \"0 2px 8px rgba(0, 0, 0, 0.12)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (e.shiftKey) findPrevious(view);\n\t\t\t\t\t\t\telse findNext(view);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\t\tview.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder=\"Find...\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"28px\",\n\t\t\t\t\t\tpadding: \"0 8px\",\n\t\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-primary)\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tflex: \"0 0 200px\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\tminWidth: \"70px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tvisibility: value ? \"visible\" : \"hidden\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{value\n\t\t\t\t\t\t? match.total > 0\n\t\t\t\t\t\t\t? `${match.current} of ${match.total}`\n\t\t\t\t\t\t\t: \"No results\"\n\t\t\t\t\t\t: \"No results\"}\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findPrevious(view)}\n\t\t\t\t\ttitle=\"Previous match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronUp size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findNext(view)}\n\t\t\t\t\ttitle=\"Next match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\tview.focus();\n\t\t\t\t\t}}\n\t\t\t\t\ttitle=\"Close\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<X size={14} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tflushSync(() => {\n\t\troot.render(<Panel />);\n\t});\n\n\tconst input = dom.querySelector(\"input\");\n\tif (input) input.setAttribute(\"main-field\", \"true\");\n\n\t// Compute initial match info\n\tconst q = getSearchQuery(view.state);\n\tpanelRef.lastSearch = q.search;\n\tif (q.search) {\n\t\tconst info = getMatchInfo(view.state, q.search);\n\t\tpanelRef.lastCurrent = info.current;\n\t\tpanelRef.lastTotal = info.total;\n\t\tpanelRef.setMatch?.(info);\n\t}\n\n\treturn {\n\t\tdom,\n\t\ttop: true,\n\t\tmount() {\n\t\t\tconst el = dom.querySelector(\"input\");\n\t\t\tif (el) {\n\t\t\t\tel.focus();\n\t\t\t\tel.select();\n\t\t\t}\n\t\t},\n\t\tupdate(update: ViewUpdate) {\n\t\t\tconst query = getSearchQuery(update.state);\n\n\t\t\tif (query.search !== panelRef.lastSearch) {\n\t\t\t\tpanelRef.setSearch?.(query.search);\n\t\t\t}\n\t\t\tpanelRef.lastSearch = query.search;\n\n\t\t\tconst info = getMatchInfo(update.state, query.search);\n\t\t\tif (\n\t\t\t\tinfo.current !== panelRef.lastCurrent ||\n\t\t\t\tinfo.total !== panelRef.lastTotal\n\t\t\t) {\n\t\t\t\tpanelRef.lastCurrent = info.current;\n\t\t\t\tpanelRef.lastTotal = info.total;\n\t\t\t\tpanelRef.setMatch?.(info);\n\t\t\t}\n\t\t},\n\t\tdestroy() {\n\t\t\troot.unmount();\n\t\t\tpanelRef.setSearch = null;\n\t\t\tpanelRef.setMatch = null;\n\t\t},\n\t};\n}\n\nconst searchPanelTheme = EditorView.theme({\n\t\"& .cm-panels-top\": {\n\t\tposition: \"absolute\",\n\t\ttop: \"8px\",\n\t\tright: \"4px\",\n\t\tleft: \"auto\",\n\t\tzIndex: \"10\",\n\t\tbackgroundColor: \"transparent\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-searchMatch\": {\n\t\tbackgroundColor: \"var(--color-blue-200) !important\",\n\t},\n\t\".cm-searchMatch-selected\": {\n\t\tbackgroundColor: \"var(--color-blue-400) !important\",\n\t},\n\t\".cm-selectionMatch\": {\n\t\tbackgroundColor: \"var(--color-blue-100) !important\",\n\t},\n});\n\nconst customSearchExtension = [\n\tsearch({ createPanel: createSearchPanel }),\n\tsearchPanelTheme,\n];\n\nconst customHighlightStyle = HighlightStyle.define([\n\t{ tag: tags.propertyName, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.string, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.number, color: \"var(--hs-syntax-number)\" },\n\t{ tag: tags.bool, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.null, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.keyword, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.operatorKeyword, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.controlKeyword, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.typeName, color: \"var(--hs-syntax-number)\" },\n\t{ tag: tags.variableName, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.operator, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.comment, color: \"var(--hs-syntax-comment)\" },\n\t{ tag: tags.lineComment, color: \"var(--hs-syntax-comment)\" },\n\t{ tag: tags.blockComment, color: \"var(--hs-syntax-comment)\" },\n]);\n\nconst SQL_KEYWORDS = [\n\t\"select\",\n\t\"from\",\n\t\"where\",\n\t\"and\",\n\t\"or\",\n\t\"not\",\n\t\"in\",\n\t\"between\",\n\t\"like\",\n\t\"ilike\",\n\t\"similar\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"create\",\n\t\"drop\",\n\t\"alter\",\n\t\"table\",\n\t\"index\",\n\t\"view\",\n\t\"materialized\",\n\t\"schema\",\n\t\"sequence\",\n\t\"type\",\n\t\"extension\",\n\t\"function\",\n\t\"procedure\",\n\t\"trigger\",\n\t\"join\",\n\t\"inner\",\n\t\"left\",\n\t\"right\",\n\t\"outer\",\n\t\"full\",\n\t\"cross\",\n\t\"lateral\",\n\t\"natural\",\n\t\"on\",\n\t\"using\",\n\t\"as\",\n\t\"order\",\n\t\"by\",\n\t\"group\",\n\t\"having\",\n\t\"limit\",\n\t\"offset\",\n\t\"fetch\",\n\t\"first\",\n\t\"next\",\n\t\"rows\",\n\t\"only\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"distinct\",\n\t\"all\",\n\t\"exists\",\n\t\"any\",\n\t\"some\",\n\t\"case\",\n\t\"when\",\n\t\"then\",\n\t\"else\",\n\t\"end\",\n\t\"null\",\n\t\"true\",\n\t\"false\",\n\t\"is\",\n\t\"isnull\",\n\t\"notnull\",\n\t\"asc\",\n\t\"desc\",\n\t\"nulls\",\n\t\"with\",\n\t\"recursive\",\n\t\"returning\",\n\t\"into\",\n\t\"values\",\n\t\"set\",\n\t\"default\",\n\t\"begin\",\n\t\"commit\",\n\t\"rollback\",\n\t\"savepoint\",\n\t\"release\",\n\t\"transaction\",\n\t\"explain\",\n\t\"analyze\",\n\t\"verbose\",\n\t\"costs\",\n\t\"buffers\",\n\t\"format\",\n\t\"grant\",\n\t\"revoke\",\n\t\"truncate\",\n\t\"cascade\",\n\t\"restrict\",\n\t\"vacuum\",\n\t\"reindex\",\n\t\"cluster\",\n\t\"copy\",\n\t\"do\",\n\t\"perform\",\n\t\"raise\",\n\t\"notice\",\n\t\"exception\",\n\t\"if\",\n\t\"elsif\",\n\t\"loop\",\n\t\"while\",\n\t\"for\",\n\t\"foreach\",\n\t\"return\",\n\t\"returns\",\n\t\"language\",\n\t\"plpgsql\",\n\t\"declare\",\n\t\"primary\",\n\t\"key\",\n\t\"foreign\",\n\t\"references\",\n\t\"unique\",\n\t\"check\",\n\t\"constraint\",\n\t\"not\",\n\t\"null\",\n\t\"add\",\n\t\"column\",\n\t\"rename\",\n\t\"to\",\n\t\"owner\",\n\t\"tablespace\",\n\t\"temporary\",\n\t\"temp\",\n\t\"unlogged\",\n\t\"if\",\n\t\"replace\",\n\t\"or\",\n\t\"conflict\",\n\t\"nothing\",\n\t\"window\",\n\t\"partition\",\n\t\"over\",\n\t\"range\",\n\t\"unbounded\",\n\t\"preceding\",\n\t\"following\",\n\t\"current\",\n\t\"row\",\n\t\"groups\",\n\t\"exclude\",\n\t\"ties\",\n\t\"filter\",\n\t\"within\",\n];\n\nconst SQL_BUILTIN = [\n\t// types\n\t\"varchar\",\n\t\"char\",\n\t\"text\",\n\t\"integer\",\n\t\"int\",\n\t\"smallint\",\n\t\"bigint\",\n\t\"decimal\",\n\t\"numeric\",\n\t\"float\",\n\t\"real\",\n\t\"double\",\n\t\"precision\",\n\t\"boolean\",\n\t\"bool\",\n\t\"date\",\n\t\"time\",\n\t\"timestamp\",\n\t\"timestamptz\",\n\t\"interval\",\n\t\"uuid\",\n\t\"json\",\n\t\"jsonb\",\n\t\"bytea\",\n\t\"serial\",\n\t\"bigserial\",\n\t\"smallserial\",\n\t\"money\",\n\t\"inet\",\n\t\"cidr\",\n\t\"macaddr\",\n\t\"point\",\n\t\"line\",\n\t\"lseg\",\n\t\"box\",\n\t\"path\",\n\t\"polygon\",\n\t\"circle\",\n\t\"tsquery\",\n\t\"tsvector\",\n\t\"xml\",\n\t\"oid\",\n\t\"regclass\",\n\t\"regtype\",\n\t// aggregate functions\n\t\"count\",\n\t\"sum\",\n\t\"avg\",\n\t\"min\",\n\t\"max\",\n\t\"array_agg\",\n\t\"string_agg\",\n\t\"json_agg\",\n\t\"jsonb_agg\",\n\t\"json_object_agg\",\n\t\"jsonb_object_agg\",\n\t\"bool_and\",\n\t\"bool_or\",\n\t\"every\",\n\t\"bit_and\",\n\t\"bit_or\",\n\t// window functions\n\t\"row_number\",\n\t\"rank\",\n\t\"dense_rank\",\n\t\"percent_rank\",\n\t\"cume_dist\",\n\t\"ntile\",\n\t\"lag\",\n\t\"lead\",\n\t\"first_value\",\n\t\"last_value\",\n\t\"nth_value\",\n\t// string functions\n\t\"coalesce\",\n\t\"nullif\",\n\t\"greatest\",\n\t\"least\",\n\t\"concat\",\n\t\"concat_ws\",\n\t\"substring\",\n\t\"upper\",\n\t\"lower\",\n\t\"trim\",\n\t\"ltrim\",\n\t\"rtrim\",\n\t\"length\",\n\t\"char_length\",\n\t\"octet_length\",\n\t\"position\",\n\t\"replace\",\n\t\"translate\",\n\t\"left\",\n\t\"right\",\n\t\"repeat\",\n\t\"reverse\",\n\t\"split_part\",\n\t\"regexp_match\",\n\t\"regexp_matches\",\n\t\"regexp_replace\",\n\t\"regexp_split_to_array\",\n\t\"regexp_split_to_table\",\n\t\"format\",\n\t\"encode\",\n\t\"decode\",\n\t\"md5\",\n\t\"starts_with\",\n\t// date/time functions\n\t\"now\",\n\t\"current_date\",\n\t\"current_time\",\n\t\"current_timestamp\",\n\t\"localtime\",\n\t\"localtimestamp\",\n\t\"clock_timestamp\",\n\t\"statement_timestamp\",\n\t\"transaction_timestamp\",\n\t\"timeofday\",\n\t\"age\",\n\t\"date_part\",\n\t\"date_trunc\",\n\t\"extract\",\n\t\"make_date\",\n\t\"make_time\",\n\t\"make_timestamp\",\n\t\"make_timestamptz\",\n\t\"make_interval\",\n\t\"to_char\",\n\t\"to_date\",\n\t\"to_timestamp\",\n\t\"to_number\",\n\t// json/jsonb functions\n\t\"json_build_object\",\n\t\"jsonb_build_object\",\n\t\"json_build_array\",\n\t\"jsonb_build_array\",\n\t\"json_extract_path\",\n\t\"jsonb_extract_path\",\n\t\"json_extract_path_text\",\n\t\"jsonb_extract_path_text\",\n\t\"jsonb_set\",\n\t\"jsonb_insert\",\n\t\"jsonb_strip_nulls\",\n\t\"jsonb_pretty\",\n\t\"jsonb_typeof\",\n\t\"jsonb_each\",\n\t\"jsonb_each_text\",\n\t\"jsonb_array_elements\",\n\t\"jsonb_array_elements_text\",\n\t\"jsonb_array_length\",\n\t\"jsonb_object_keys\",\n\t\"jsonb_to_record\",\n\t\"jsonb_to_recordset\",\n\t\"jsonb_populate_record\",\n\t\"jsonb_populate_recordset\",\n\t\"jsonb_path_query\",\n\t\"jsonb_path_query_array\",\n\t\"jsonb_path_query_first\",\n\t\"jsonb_path_exists\",\n\t\"to_json\",\n\t\"to_jsonb\",\n\t\"row_to_json\",\n\t// array functions\n\t\"array_length\",\n\t\"array_dims\",\n\t\"array_lower\",\n\t\"array_upper\",\n\t\"array_append\",\n\t\"array_prepend\",\n\t\"array_cat\",\n\t\"array_remove\",\n\t\"array_replace\",\n\t\"array_position\",\n\t\"array_positions\",\n\t\"array_to_string\",\n\t\"string_to_array\",\n\t\"unnest\",\n\t\"cardinality\",\n\t// set-returning functions\n\t\"generate_series\",\n\t\"generate_subscripts\",\n\t// math functions\n\t\"abs\",\n\t\"ceil\",\n\t\"ceiling\",\n\t\"floor\",\n\t\"round\",\n\t\"trunc\",\n\t\"sign\",\n\t\"sqrt\",\n\t\"cbrt\",\n\t\"power\",\n\t\"exp\",\n\t\"ln\",\n\t\"log\",\n\t\"mod\",\n\t\"random\",\n\t\"setseed\",\n\t\"pi\",\n\t\"degrees\",\n\t\"radians\",\n\t// system functions\n\t\"pg_typeof\",\n\t\"pg_size_pretty\",\n\t\"pg_table_size\",\n\t\"pg_indexes_size\",\n\t\"pg_total_relation_size\",\n\t\"pg_relation_size\",\n\t\"pg_database_size\",\n\t\"pg_cancel_backend\",\n\t\"pg_terminate_backend\",\n\t\"pg_stat_activity\",\n\t\"pg_stat_statements\",\n\t\"pg_advisory_lock\",\n\t\"pg_advisory_unlock\",\n\t\"pg_try_advisory_lock\",\n\t// cast/conversion\n\t\"cast\",\n\t\"pg_get_functiondef\",\n\t\"pg_get_viewdef\",\n\t\"pg_get_indexdef\",\n\t// misc\n\t\"exists\",\n\t\"in\",\n\t\"between\",\n\t\"like\",\n\t\"ilike\",\n\t\"similar\",\n\t\"any\",\n\t\"some\",\n\t\"row\",\n\t\"array\",\n\t\"nextval\",\n\t\"currval\",\n\t\"setval\",\n\t\"lastval\",\n\t\"txid_current\",\n];\n\nconst customSQLDialect = SQLDialect.define({\n\tkeywords: SQL_KEYWORDS.join(\" \"),\n\tbuiltin: SQL_BUILTIN.join(\" \"),\n});\n\nfunction computeYamlNewlineIndent(lineText: string): string {\n\tconst indent = lineText.match(/^(\\s*)/)?.[1] ?? \"\";\n\tconst trimmed = lineText.trimEnd();\n\n\tif (trimmed.endsWith(\":\")) {\n\t\t// After \"key:\" with no value — increase indent\n\t\t// For \" - key:\", base indent is at the dash content level\n\t\tconst dashMatch = trimmed.match(/^(\\s*-\\s+)/);\n\t\tconst baseIndent = dashMatch?.[1]\n\t\t\t? \" \".repeat(dashMatch[1].length)\n\t\t\t: indent;\n\t\treturn `${baseIndent} `;\n\t}\n\tif (/^\\s*-\\s*$/.test(trimmed)) {\n\t\t// After bare \"- \" (array item marker only) — align to content after dash\n\t\tconst dashMatch = trimmed.match(/^(\\s*-\\s*)/);\n\t\treturn dashMatch?.[1] ? \" \".repeat(dashMatch[1].length) : indent;\n\t}\n\t// Preserve current indent; for \" - key: val\" align to key level\n\tconst dashKeyMatch = trimmed.match(/^(\\s*-\\s+)\\S/);\n\treturn dashKeyMatch?.[1] ? \" \".repeat(dashKeyMatch[1].length) : indent;\n}\n\nfunction yamlEnterKeymap(): Extension {\n\treturn keymap.of([\n\t\t{\n\t\t\tkey: \"Enter\",\n\t\t\trun: (view) => {\n\t\t\t\tconst { state } = view;\n\t\t\t\tconst pos = state.selection.main.head;\n\t\t\t\tconst line = state.doc.lineAt(pos);\n\t\t\t\tconst newIndent = computeYamlNewlineIndent(line.text);\n\n\t\t\t\tview.dispatch({\n\t\t\t\t\tchanges: { from: pos, insert: `\\n${newIndent}` },\n\t\t\t\t\tselection: { anchor: pos + 1 + newIndent.length },\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t},\n\t]);\n}\n\nfunction httpYamlEnterKeymap(): Extension {\n\treturn keymap.of([\n\t\t{\n\t\t\tkey: \"Enter\",\n\t\t\trun: (view) => {\n\t\t\t\tconst { state } = view;\n\t\t\t\tconst pos = state.selection.main.head;\n\t\t\t\tconst doc = state.doc.toString();\n\n\t\t\t\t// Only handle if cursor is in YAML body (after blank line separator)\n\t\t\t\tconst textBeforeCursor = doc.slice(0, pos);\n\t\t\t\tconst blankLineIdx = textBeforeCursor.indexOf(\"\\n\\n\");\n\t\t\t\tif (blankLineIdx === -1 || pos <= blankLineIdx + 1) return false;\n\n\t\t\t\t// Check if the body looks like YAML (not JSON)\n\t\t\t\tconst bodyStart = blankLineIdx + 2;\n\t\t\t\tconst bodyPrefix = doc.slice(bodyStart, bodyStart + 20).trimStart();\n\t\t\t\tif (bodyPrefix.startsWith(\"{\") || bodyPrefix.startsWith(\"[\"))\n\t\t\t\t\treturn false;\n\n\t\t\t\tconst line = state.doc.lineAt(pos);\n\t\t\t\tconst newIndent = computeYamlNewlineIndent(line.text);\n\n\t\t\t\tview.dispatch({\n\t\t\t\t\tchanges: { from: pos, insert: `\\n${newIndent}` },\n\t\t\t\t\tselection: { anchor: pos + 1 + newIndent.length },\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t},\n\t]);\n}\n\ntype LanguageMode = \"json\" | \"http\" | \"sql\" | \"yaml\";\n\nfunction languageExtensions(\n\tmode: LanguageMode,\n\tsqlExtraBuiltins?: string[],\n\tgetUrlSuggestions?: GetUrlSuggestions,\n) {\n\tif (mode === \"http\") {\n\t\tconst jsonLang = json();\n\t\tconst yamlLang = yaml();\n\t\treturn [\n\t\t\thttp(\n\t\t\t\t(ct) =>\n\t\t\t\t\tct === \"application/json\"\n\t\t\t\t\t\t? jsonLang.language\n\t\t\t\t\t\t: ct === \"text/yaml\" ||\n\t\t\t\t\t\t\t\tct === \"application/yaml\" ||\n\t\t\t\t\t\t\t\tct === \"application/x-yaml\"\n\t\t\t\t\t\t\t? yamlLang.language\n\t\t\t\t\t\t\t: null,\n\t\t\t\tgetUrlSuggestions,\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tjsonAutoExpandBraces(),\n\t\t\thttpYamlEnterKeymap(),\n\t\t];\n\t} else if (mode === \"sql\") {\n\t\tlet dialect = customSQLDialect;\n\t\tif (sqlExtraBuiltins && sqlExtraBuiltins.length > 0) {\n\t\t\tdialect = SQLDialect.define({\n\t\t\t\tkeywords: SQL_KEYWORDS.join(\" \"),\n\t\t\t\tbuiltin: [...SQL_BUILTIN, ...sqlExtraBuiltins].join(\" \"),\n\t\t\t});\n\t\t}\n\t\treturn [sql({ dialect }), syntaxHighlighting(customHighlightStyle)];\n\t} else if (mode === \"yaml\") {\n\t\treturn [\n\t\t\tyaml(),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tyamlEnterKeymap(),\n\t\t];\n\t} else {\n\t\treturn [\n\t\t\tjson(),\n\t\t\tlinter(\n\t\t\t\t(view) => {\n\t\t\t\t\tif (!view.state.doc.toString().trim()) return [];\n\t\t\t\t\treturn jsonParseLinter()(view);\n\t\t\t\t},\n\t\t\t\t{ delay: 300 },\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tjsonAutoExpandBraces(),\n\t\t];\n\t}\n}\n\nfunction jsonAutoExpandBraces(): Extension {\n\treturn EditorState.transactionFilter.of((tr) => {\n\t\tif (!tr.docChanged) return tr;\n\n\t\tlet braceFrom = -1;\n\t\tlet braceTo = -1;\n\t\tlet changeCount = 0;\n\n\t\ttr.changes.iterChanges((fromA, toA, _fromB, _toB, inserted) => {\n\t\t\tchangeCount++;\n\t\t\tif (inserted.toString() === \"{}\") {\n\t\t\t\tbraceFrom = fromA;\n\t\t\t\tbraceTo = toA;\n\t\t\t}\n\t\t});\n\n\t\tif (changeCount !== 1 || braceFrom === -1) return tr;\n\n\t\tconst tree = syntaxTree(tr.startState);\n\t\tconst nodeBefore = tree.resolveInner(braceFrom, -1);\n\t\tif (nodeBefore.name === \"String\" || nodeBefore.parent?.name === \"String\") {\n\t\t\treturn tr;\n\t\t}\n\n\t\tconst line = tr.startState.doc.lineAt(braceFrom);\n\t\tconst indent = line.text.match(/^(\\s*)/)?.[1] ?? \"\";\n\t\tconst inner = `${indent} `;\n\n\t\t// Check if { is inside an extension array — insert {\"url\": \"\"} snippet\n\t\tconst docText = tr.startState.doc.toString();\n\t\tconst textBefore = docText.slice(0, braceFrom);\n\t\tconst isInExtArray =\n\t\t\t/\"(?:extension|modifierExtension)\"\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?\\}\\s*,?\\s*)*$/s.test(\n\t\t\t\ttextBefore,\n\t\t\t);\n\t\tif (isInExtArray) {\n\t\t\tconst insert = `{\\n${inner}\"url\": \"\"\\n${indent}}`;\n\t\t\treturn {\n\t\t\t\tchanges: { from: braceFrom, to: braceTo, insert },\n\t\t\t\tselection: { anchor: braceFrom + insert.lastIndexOf('\"\"') + 1 },\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom: braceFrom,\n\t\t\t\tto: braceTo,\n\t\t\t\tinsert: `{\\n${inner}\\n${indent}}`,\n\t\t\t},\n\t\t\tselection: { anchor: braceFrom + 2 + inner.length },\n\t\t};\n\t});\n}\n\ntype CodeEditorProps = {\n\treadOnly?: boolean;\n\tisReadOnlyTheme?: boolean;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n\tonUpdate?: (update: ViewUpdate) => void;\n\tid?: string;\n\tmode?: LanguageMode;\n\tviewCallback?: (view: EditorView) => void;\n\tadditionalExtensions?: Extension[];\n\tissueLineNumbers?: { line: number; message?: string }[];\n\tfoldGutter?: boolean;\n\tlineNumbers?: boolean;\n\tsql?: SqlConfig;\n\tgetStructureDefinitions?: GetStructureDefinitions;\n\tresourceTypeHint?: string;\n\texpandValueSet?: ExpandValueSet;\n\tgetUrlSuggestions?: GetUrlSuggestions;\n\tvimMode?: boolean;\n};\n\nexport type CodeEditorView = EditorView;\n\nexport type {\n\tExpandValueSet,\n\tGetStructureDefinitions,\n} from \"./fhir-autocomplete\";\nexport type { GetUrlSuggestions } from \"./http\";\nexport type {\n\tSqlConfig,\n\tSqlMetadata,\n\tSqlQueryType,\n} from \"./sql-completion\";\n\nexport function CodeEditor({\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n\tonUpdate,\n\tviewCallback,\n\treadOnly = false,\n\tid,\n\tmode = \"json\",\n\tisReadOnlyTheme = false,\n\tadditionalExtensions,\n\tissueLineNumbers,\n\tfoldGutter: enableFoldGutter = true,\n\tlineNumbers: enableLineNumbers = true,\n\tsql,\n\tgetStructureDefinitions,\n\tresourceTypeHint,\n\texpandValueSet,\n\tgetUrlSuggestions,\n\tvimMode = false,\n}: CodeEditorProps) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\n\tconst safeDispatch = React.useCallback(\n\t\t(spec: Parameters<EditorView[\"dispatch\"]>[0]) => {\n\t\t\ttry {\n\t\t\t\tview?.dispatch(spec);\n\t\t\t} catch {\n\t\t\t\t// Ignore RangeError from stale decoration positions during reconfigure\n\t\t\t}\n\t\t},\n\t\t[view],\n\t);\n\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tconst onChangeComparment = React.useRef(new Compartment());\n\tconst onUpdateComparment = React.useRef(new Compartment());\n\tconst languageCompartment = React.useRef(new Compartment());\n\tconst readOnlyCompartment = React.useRef(new Compartment());\n\tconst themeCompartment = React.useRef(new Compartment());\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\tconst sqlCompletionCompartment = React.useRef(new Compartment());\n\tconst fhirCompletionCompartment = React.useRef(new Compartment());\n\tconst vimCompartment = React.useRef(new Compartment());\n\tconst [sqlFunctions, setSqlFunctions] = React.useState<\n\t\tstring[] | undefined\n\t>();\n\tconst executeSqlRef = React.useRef(sql?.executeSql);\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tvimCompartment.current.of(vimMode ? vim() : []),\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\treadOnlyCompartment.current.of(EditorState.readOnly.of(false)),\n\t\t\t\t\t...(enableLineNumbers ? [lineNumbers()] : []),\n\t\t\t\t\t...(enableFoldGutter\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\tfoldGutter({\n\t\t\t\t\t\t\t\t\tmarkerDOM: (open) => {\n\t\t\t\t\t\t\t\t\t\tconst el = document.createElement(\"span\");\n\t\t\t\t\t\t\t\t\t\tel.style.display = \"flex\";\n\t\t\t\t\t\t\t\t\t\tel.style.alignItems = \"center\";\n\t\t\t\t\t\t\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\t\t\t\t\t\t\tel.style.width = \"100%\";\n\t\t\t\t\t\t\t\t\t\tel.style.height = \"100%\";\n\t\t\t\t\t\t\t\t\t\tel.innerHTML = open\n\t\t\t\t\t\t\t\t\t\t\t? '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>'\n\t\t\t\t\t\t\t\t\t\t\t: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"/></svg>';\n\t\t\t\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t\thighlightSpecialChars(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tdrawSelection(),\n\t\t\t\t\tdropCursor(),\n\t\t\t\t\tEditorState.allowMultipleSelections.of(true),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\tlanguageCompartment.current.of([]),\n\t\t\t\t\tbracketMatching(),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\tautocompletion({\n\t\t\t\t\t\ticons: false,\n\t\t\t\t\t\tmaxRenderedOptions: 1000,\n\t\t\t\t\t\tdefaultKeymap: false,\n\t\t\t\t\t\taddToOptions: [{ render: renderCompletionIcon, position: 20 }],\n\t\t\t\t\t\toptionClass: (_completion) =>\n\t\t\t\t\t\t\t\"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary flex items-center gap-2\",\n\t\t\t\t\t\ttooltipClass: (_state) =>\n\t\t\t\t\t\t\t\"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body\",\n\t\t\t\t\t\tcompareCompletions: (a, b) => {\n\t\t\t\t\t\t\tconst aIsProperty = a.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\tconst bIsProperty = b.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\treturn aIsProperty - bIsProperty;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\trectangularSelection(),\n\t\t\t\t\tcrosshairCursor(),\n\t\t\t\t\thighlightSelectionMatches(),\n\t\t\t\t\tPrec.highest(\n\t\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Tab\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn moveCompletionSelection(true)(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Shift-Tab\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn moveCompletionSelection(false)(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Enter\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn acceptCompletion(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\tthemeCompartment.current.of(baseTheme),\n\t\t\t\t\tcompletionTheme,\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...completionKeymap.filter((b) => b.key !== \"Enter\"),\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t\tissueLinesField,\n\t\t\t\t\terrorTooltipHandler,\n\t\t\t\t\tEditorView.exceptionSink.of(() => {}),\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tonChangeComparment.current.of([]),\n\t\t\t\t\tonUpdateComparment.current.of([]),\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t\tsqlCompletionCompartment.current.of([]),\n\t\t\t\t\tfhirCompletionCompartment.current.of([]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, [enableFoldGutter, enableLineNumbers, vimMode]);\n\n\tReact.useEffect(() => {\n\t\texecuteSqlRef.current = sql?.executeSql;\n\t});\n\n\tReact.useEffect(() => {\n\t\tif (!view || !sql) {\n\t\t\tif (view) {\n\t\t\t\tsafeDispatch({\n\t\t\t\t\teffects: sqlCompletionCompartment.current.reconfigure([]),\n\t\t\t\t});\n\t\t\t}\n\t\t\tsetSqlFunctions(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\n\t\tfetchSqlMetadata(sql.executeSql)\n\t\t\t.then((metadata) => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tsetSqlFunctions(metadata.functions);\n\t\t\t\tconst extensions = buildSqlCompletionExtensions(\n\t\t\t\t\tmetadata,\n\t\t\t\t\t(query, type) =>\n\t\t\t\t\t\texecuteSqlRef.current?.(query, type) ?? Promise.resolve([]),\n\t\t\t\t);\n\t\t\t\tsafeDispatch({\n\t\t\t\t\teffects: sqlCompletionCompartment.current.reconfigure(extensions),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(() => {});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [view, sql, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (!view) return;\n\t\tif (getStructureDefinitions) {\n\t\t\tsafeDispatch({\n\t\t\t\teffects: fhirCompletionCompartment.current.reconfigure(\n\t\t\t\t\tbuildFhirCompletionExtension(\n\t\t\t\t\t\tgetStructureDefinitions,\n\t\t\t\t\t\tresourceTypeHint,\n\t\t\t\t\t\texpandValueSet,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t});\n\t\t} else {\n\t\t\tsafeDispatch({\n\t\t\t\teffects: fhirCompletionCompartment.current.reconfigure([]),\n\t\t\t});\n\t\t}\n\t}, [\n\t\tview,\n\t\tgetStructureDefinitions,\n\t\tresourceTypeHint,\n\t\texpandValueSet,\n\t\tsafeDispatch,\n\t]);\n\n\tReact.useEffect(() => {\n\t\tif (viewCallback && view) {\n\t\t\tviewCallback(view);\n\t\t}\n\t}, [view, viewCallback]);\n\n\tReact.useEffect(() => {\n\t\tsafeDispatch({\n\t\t\teffects: onChangeComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [onChange, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tsafeDispatch({\n\t\t\teffects: onUpdateComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tonUpdate(update);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [onUpdate, safeDispatch]);\n\n\t// FIXME: it is probably better to have CM manage its state.\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tsafeDispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view, safeDispatch]);\n\n\tconst getUrlSuggestionsRef = React.useRef(getUrlSuggestions);\n\tgetUrlSuggestionsRef.current = getUrlSuggestions;\n\n\tconst stableGetUrlSuggestions = React.useMemo(() => {\n\t\tif (!getUrlSuggestions) return undefined;\n\t\treturn ((path: string, method: string) =>\n\t\t\tgetUrlSuggestionsRef.current?.(path, method) ?? []) as GetUrlSuggestions;\n\t}, [getUrlSuggestions]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: languageCompartment.current.reconfigure(\n\t\t\t\tlanguageExtensions(mode, sqlFunctions, stableGetUrlSuggestions),\n\t\t\t),\n\t\t});\n\t}, [mode, view, sqlFunctions, stableGetUrlSuggestions, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: [\n\t\t\t\treadOnlyCompartment.current.reconfigure(\n\t\t\t\t\tEditorState.readOnly.of(readOnly),\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [readOnly, view, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: [\n\t\t\t\tthemeCompartment.current.reconfigure(\n\t\t\t\t\tisReadOnlyTheme ? readOnlyTheme : baseTheme,\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [isReadOnlyTheme, view, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: [vimCompartment.current.reconfigure(vimMode ? vim() : [])],\n\t\t});\n\t}, [vimMode, view, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: setIssueLinesEffect.of(issueLineNumbers ?? []),\n\t\t});\n\t}, [issueLineNumbers, view, safeDispatch]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n\nconst editorInputTheme = EditorView.theme({\n\t\".cm-content\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tfontWeight: \"var(--font-weight-normal)\",\n\t\theight: \"36px\",\n\t\tpadding: \"8px 12px 8px 12px\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-editor\": {\n\t\tfontSize: \"var(--font-size-sm)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-cursor, .cm-dropCursor\": {\n\t\tborderLeftColor: \"var(--color-text-primary)\",\n\t},\n\t\"&.cm-editor.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\"&.cm-editor.cm-focused .cm-content\": {\n\t\tborder: \"1px solid var(--color-border-link)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t},\n\t\".cm-line\": {\n\t\tpadding: \"0\",\n\t},\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\tmaxHeight: \"400px\",\n\t},\n\t\".cm-completionInfo\": {\n\t\tdisplay: \"none\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t},\n\t\".cm-completionLabel\": {\n\t\tcolor: \"var(--color-text-link)\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-completionDetail\": {\n\t\tdisplay: \"none\",\n\t},\n\t\".cm-completion-icon\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tflexShrink: \"0\",\n\t},\n});\n\nconst KeywordIcon = () => <Terminal size={16} color=\"#717684\" />;\nconst OperatorIcon = () => <ChevronsRight size={16} color=\"#717684\" />;\nconst TableIcon = () => <Table2 size={16} color=\"#717684\" />;\nconst HeaderIcon = () => <Heading size={16} color=\"#717684\" />;\nconst ColumnIcon = () => <Columns2 size={16} color=\"#717684\" />;\n\nfunction getCompletionIcon(completion: Completion): React.FC | null {\n\tif (completion.type === \"function\") return SquareFunctionIcon;\n\tif (completion.type === \"keyword\") return KeywordIcon;\n\tif (completion.type === \"operator\") return OperatorIcon;\n\tif (completion.type === \"table\") return TableIcon;\n\tif (completion.type === \"header\") return HeaderIcon;\n\tif (completion.type === \"text\") return TypCodeIcon;\n\tif (completion.type === \"type\") return ResourceIcon;\n\tif (completion.type === \"search-param\") return null;\n\tconst detail = completion.detail;\n\tif (!detail) {\n\t\tif (completion.type === \"variable\") return ColumnIcon;\n\t\treturn TypCodeIcon;\n\t}\n\tif (completion.type === \"variable\") return ColumnIcon;\n\tconst typeName = detail.replace(/\\[\\]$/, \"\");\n\tif (!typeName) return TypCodeIcon;\n\t// Search param types (TOKEN, REFERENCE) — no icon\n\tif (typeName === typeName.toUpperCase()) return null;\n\tconst firstChar = typeName[0];\n\tif (!firstChar) return TypCodeIcon;\n\tconst isComplex = firstChar === firstChar.toUpperCase();\n\treturn isComplex ? ComplexTypeIcon : TypCodeIcon;\n}\n\nfunction renderCompletionIcon(completion: Completion): Node {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"cm-completion-icon\";\n\tconst Icon = getCompletionIcon(completion);\n\tif (Icon) {\n\t\tflushSync(() => {\n\t\t\tcreateRoot(container).render(<Icon />);\n\t\t});\n\t} else {\n\t\tcontainer.style.display = \"none\";\n\t}\n\treturn container;\n}\n\nlet activeTooltip: HTMLDivElement | null = null;\nlet activeRafId: number | null = null;\n\nfunction cleanupActiveTooltip() {\n\tactiveTooltip?.remove();\n\tactiveTooltip = null;\n\tif (activeRafId !== null) {\n\t\tcancelAnimationFrame(activeRafId);\n\t\tactiveRafId = null;\n\t}\n}\n\nfunction renderCompletionDetail(completion: Completion): Node | null {\n\tconst detail = completion.detail;\n\tif (!detail) return null;\n\n\tconst anchor = document.createElement(\"span\");\n\tanchor.style.display = \"none\";\n\n\tconst showTooltip = () => {\n\t\tcleanupActiveTooltip();\n\n\t\tconst tooltip = document.createElement(\"div\");\n\t\ttooltip.textContent = detail;\n\t\tObject.assign(tooltip.style, {\n\t\t\tposition: \"fixed\",\n\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\tpadding: \"8px 12px\",\n\t\t\tfontSize: \"12px\",\n\t\t\tlineHeight: \"1.4\",\n\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\twhiteSpace: \"normal\",\n\t\t\twidth: \"280px\",\n\t\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\t\tzIndex: \"1000\",\n\t\t\tpointerEvents: \"none\",\n\t\t});\n\t\tdocument.body.appendChild(tooltip);\n\t\tactiveTooltip = tooltip;\n\n\t\tconst autocompleteEl = anchor.closest(\".cm-tooltip-autocomplete\");\n\t\tconst anchorRect = autocompleteEl\n\t\t\t? autocompleteEl.getBoundingClientRect()\n\t\t\t: anchor.getBoundingClientRect();\n\t\ttooltip.style.top = `${anchorRect.top}px`;\n\t\ttooltip.style.left = `${anchorRect.right + 8}px`;\n\n\t\tconst checkAlive = () => {\n\t\t\tif (!anchor.isConnected) {\n\t\t\t\tcleanupActiveTooltip();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t\t};\n\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t};\n\n\trequestAnimationFrame(() => {\n\t\tconst option = anchor.closest(\"li\");\n\t\tif (!option) return;\n\t\toption.addEventListener(\"mouseenter\", showTooltip);\n\t\toption.addEventListener(\"mouseleave\", cleanupActiveTooltip);\n\t});\n\n\treturn anchor;\n}\n\nexport function EditorInput({\n\tadditionalExtensions,\n\tid,\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n}: {\n\tadditionalExtensions?: Extension[];\n\tid: string;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n}) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\tconst onChangeCompartment = React.useRef(new Compartment());\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tautocompletion({\n\t\t\t\t\t\ticons: false,\n\t\t\t\t\t\tmaxRenderedOptions: 1000,\n\t\t\t\t\t\tcloseOnBlur: false,\n\t\t\t\t\t\taddToOptions: [\n\t\t\t\t\t\t\t{ render: renderCompletionIcon, position: 20 },\n\t\t\t\t\t\t\t{ render: renderCompletionDetail, position: 80 },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptionClass: (_completion) =>\n\t\t\t\t\t\t\t\"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary grid grid-cols-[16px_1fr] items-center gap-2\",\n\t\t\t\t\t\ttooltipClass: (_state) =>\n\t\t\t\t\t\t\t\"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body\",\n\t\t\t\t\t\tcompareCompletions: (a, b) => {\n\t\t\t\t\t\t\tconst aIsProperty = a.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\tconst bIsProperty = b.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\treturn aIsProperty - bIsProperty;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\teditorInputTheme,\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t\tonChangeCompartment.current.of([]),\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t{ key: \"Tab\", preventDefault: true, run: acceptCompletion },\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onChangeCompartment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onChange]);\n\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n"],"names":["acceptCompletion","autocompletion","closeBrackets","closeBracketsKeymap","completionKeymap","completionStatus","moveCompletionSelection","defaultKeymap","history","historyKeymap","json","jsonParseLinter","SQLDialect","sql","yaml","bracketMatching","foldGutter","foldKeymap","HighlightStyle","indentOnInput","syntaxHighlighting","syntaxTree","linter","lintKeymap","closeSearchPanel","findNext","findPrevious","getSearchQuery","highlightSelectionMatches","SearchQuery","search","searchKeymap","setSearchQuery","Compartment","EditorState","Prec","RangeSet","StateEffect","StateField","crosshairCursor","Decoration","drawSelection","dropCursor","EditorView","GutterMarker","gutterLineClass","highlightSpecialChars","keymap","lineNumbers","rectangularSelection","tags","vim","ChevronDown","ChevronsRight","ChevronUp","Columns2","Heading","Table2","Terminal","X","React","flushSync","createRoot","ComplexTypeIcon","ResourceIcon","SquareFunctionIcon","TypCodeIcon","buildFhirCompletionExtension","fhirDiagnosticsField","http","buildSqlCompletionExtensions","fetchSqlMetadata","ErrorLineGutterMarker","elementClass","errorLineMarker","errorLineDecoration","line","class","setIssueLinesEffect","define","errorTooltipEl","formatErrorTypeTitle","code","split","map","w","charAt","toUpperCase","slice","join","renderErrorCard","msg","card","document","createElement","Object","assign","style","backgroundColor","border","borderRadius","padding","boxShadow","newlineIdx","indexOf","title","body","titleEl","textContent","fontWeight","hr","borderTop","margin","bodyEl","whiteSpace","append","showErrorTooltip","message","x","y","hideErrorTooltip","tooltip","position","fontSize","lineHeight","color","fontFamily","zIndex","pointerEvents","maxWidth","display","flexDirection","gap","parts","part","appendChild","tooltipRect","getBoundingClientRect","top","height","window","innerHeight","left","remove","issueLinesField","create","gutterMarkers","empty","lineDecorations","none","messages","Map","update","state","tr","effect","effects","is","markers","lineDecos","doc","issue","value","lines","push","range","from","set","of","docChanged","changes","provide","field","val","decorations","getErrorMessageForLine","view","lineNo","issueMsg","get","undefined","handleErrorTooltipMove","event","target","mouseEvent","gutterEl","closest","Number","parseInt","isNaN","clientX","clientY","lineEl","pos","posAtDOM","lineAt","number","errorTooltipHandler","domEventHandlers","mouseover","mousemove","mouseleave","baseTheme","theme","width","paddingTop","paddingBottom","overflow","outline","borderLeftColor","minWidth","paddingRight","alignItems","justifyContent","completionTheme","maxHeight","flex","textDecoration","marginLeft","flexShrink","readOnlyTheme","iconButtonStyle","background","cursor","getMatchInfo","searchText","current","total","toString","sel","selection","main","lowerDoc","toLowerCase","lowerSearch","searchLen","length","idx","to","createSearchPanel","dom","root","panelRef","setSearch","setMatch","lastSearch","lastCurrent","lastTotal","Panel","setValue","useState","match","setMatchState","handleChange","newValue","dispatch","div","marginTop","input","onChange","e","onKeyDown","key","preventDefault","shiftKey","focus","placeholder","span","textAlign","visibility","button","type","onClick","size","render","querySelector","setAttribute","q","info","mount","el","select","query","destroy","unmount","searchPanelTheme","right","customSearchExtension","createPanel","customHighlightStyle","tag","propertyName","string","bool","null","keyword","operatorKeyword","controlKeyword","typeName","variableName","operator","comment","lineComment","blockComment","SQL_KEYWORDS","SQL_BUILTIN","customSQLDialect","keywords","builtin","computeYamlNewlineIndent","lineText","indent","trimmed","trimEnd","endsWith","dashMatch","baseIndent","repeat","test","dashKeyMatch","yamlEnterKeymap","run","head","newIndent","text","insert","anchor","httpYamlEnterKeymap","textBeforeCursor","blankLineIdx","bodyStart","bodyPrefix","trimStart","startsWith","languageExtensions","mode","sqlExtraBuiltins","getUrlSuggestions","jsonLang","yamlLang","ct","language","jsonAutoExpandBraces","dialect","trim","delay","transactionFilter","braceFrom","braceTo","changeCount","iterChanges","fromA","toA","_fromB","_toB","inserted","tree","startState","nodeBefore","resolveInner","name","parent","inner","docText","textBefore","isInExtArray","lastIndexOf","CodeEditor","defaultValue","currentValue","onUpdate","viewCallback","readOnly","id","isReadOnlyTheme","additionalExtensions","issueLineNumbers","enableFoldGutter","enableLineNumbers","getStructureDefinitions","resourceTypeHint","expandValueSet","vimMode","domRef","useRef","setView","safeDispatch","useCallback","spec","initialValue","onChangeComparment","onUpdateComparment","languageCompartment","readOnlyCompartment","themeCompartment","additionalExtensionsCompartment","sqlCompletionCompartment","fhirCompletionCompartment","vimCompartment","sqlFunctions","setSqlFunctions","executeSqlRef","executeSql","useEffect","extensions","contentAttributes","markerDOM","open","innerHTML","allowMultipleSelections","icons","maxRenderedOptions","addToOptions","renderCompletionIcon","optionClass","_completion","tooltipClass","_state","compareCompletions","a","b","aIsProperty","bIsProperty","highest","v","filter","exceptionSink","reconfigure","cancelled","then","metadata","functions","Promise","resolve","catch","updateListener","currentDoc","getUrlSuggestionsRef","stableGetUrlSuggestions","useMemo","path","method","className","ref","editorInputTheme","KeywordIcon","OperatorIcon","TableIcon","HeaderIcon","ColumnIcon","getCompletionIcon","completion","detail","replace","firstChar","isComplex","container","Icon","activeTooltip","activeRafId","cleanupActiveTooltip","cancelAnimationFrame","renderCompletionDetail","showTooltip","autocompleteEl","anchorRect","checkAlive","isConnected","requestAnimationFrame","option","addEventListener","EditorInput","onChangeCompartment","closeOnBlur"],"mappings":"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AAK2P,OAAO;QAAEhL,OAAO;IAA2B;IACvD;QAAEqK,KAAKhP,KAAK4P,WAAW;QAAEjL,OAAO;IAA2B;IAC3D;QAAEqK,KAAKhP,KAAK6P,YAAY;QAAElL,OAAO;IAA2B;CAC5D;AAED,MAAMmL,eAAe;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACA;AAED,MAAMC,cAAc;IACnB,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,sBAAsB;IACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,mBAAmB;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,mBAAmB;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,sBAAsB;IACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,uBAAuB;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,kBAAkB;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,0BAA0B;IAC1B;IACA;IACA,iBAAiB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,mBAAmB;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,kBAAkB;IAClB;IACA;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACA;AAED,MAAMC,mBAAmBtS,WAAWmE,MAAM,CAAC;IAC1CoO,UAAUH,aAAavN,IAAI,CAAC;IAC5B2N,SAASH,YAAYxN,IAAI,CAAC;AAC3B;AAEA,SAAS4N,yBAAyBC,QAAgB;IACjD,MAAMC,SAASD,SAAS3D,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;IAChD,MAAM6D,UAAUF,SAASG,OAAO;IAEhC,IAAID,QAAQE,QAAQ,CAAC,MAAM;QAC1B,+CAA+C;QAC/C,2DAA2D;QAC3D,MAAMC,YAAYH,QAAQ7D,KAAK,CAAC;QAChC,MAAMiE,aAAaD,WAAW,CAAC,EAAE,GAC9B,IAAIE,MAAM,CAACF,SAAS,CAAC,EAAE,CAAC/E,MAAM,IAC9B2E;QACH,OAAO,GAAGK,WAAW,EAAE,CAAC;IACzB;IACA,IAAI,YAAYE,IAAI,CAACN,UAAU;QAC9B,yEAAyE;QACzE,MAAMG,YAAYH,QAAQ7D,KAAK,CAAC;QAChC,OAAOgE,WAAW,CAAC,EAAE,GAAG,IAAIE,MAAM,CAACF,SAAS,CAAC,EAAE,CAAC/E,MAAM,IAAI2E;IAC3D;IACA,iEAAiE;IACjE,MAAMQ,eAAeP,QAAQ7D,KAAK,CAAC;IACnC,OAAOoE,cAAc,CAAC,EAAE,GAAG,IAAIF,MAAM,CAACE,YAAY,CAAC,EAAE,CAACnF,MAAM,IAAI2E;AACjE;AAEA,SAASS;IACR,OAAOjR,OAAOyH,EAAE,CAAC;QAChB;YACC8F,KAAK;YACL2D,KAAK,CAACjJ;gBACL,MAAM,EAAEvB,KAAK,EAAE,GAAGuB;gBAClB,MAAMiB,MAAMxC,MAAM6E,SAAS,CAACC,IAAI,CAAC2F,IAAI;gBACrC,MAAMtP,OAAO6E,MAAMO,GAAG,CAACmC,MAAM,CAACF;gBAC9B,MAAMkI,YAAYd,yBAAyBzO,KAAKwP,IAAI;gBAEpDpJ,KAAK+E,QAAQ,CAAC;oBACbrF,SAAS;wBAAEJ,MAAM2B;wBAAKoI,QAAQ,CAAC,EAAE,EAAEF,WAAW;oBAAC;oBAC/C7F,WAAW;wBAAEgG,QAAQrI,MAAM,IAAIkI,UAAUvF,MAAM;oBAAC;gBACjD;gBACA,OAAO;YACR;QACD;KACA;AACF;AAEA,SAAS2F;IACR,OAAOxR,OAAOyH,EAAE,CAAC;QAChB;YACC8F,KAAK;YACL2D,KAAK,CAACjJ;gBACL,MAAM,EAAEvB,KAAK,EAAE,GAAGuB;gBAClB,MAAMiB,MAAMxC,MAAM6E,SAAS,CAACC,IAAI,CAAC2F,IAAI;gBACrC,MAAMlK,MAAMP,MAAMO,GAAG,CAACoE,QAAQ;gBAE9B,qEAAqE;gBACrE,MAAMoG,mBAAmBxK,IAAIxE,KAAK,CAAC,GAAGyG;gBACtC,MAAMwI,eAAeD,iBAAiBhO,OAAO,CAAC;gBAC9C,IAAIiO,iBAAiB,CAAC,KAAKxI,OAAOwI,eAAe,GAAG,OAAO;gBAE3D,+CAA+C;gBAC/C,MAAMC,YAAYD,eAAe;gBACjC,MAAME,aAAa3K,IAAIxE,KAAK,CAACkP,WAAWA,YAAY,IAAIE,SAAS;gBACjE,IAAID,WAAWE,UAAU,CAAC,QAAQF,WAAWE,UAAU,CAAC,MACvD,OAAO;gBAER,MAAMjQ,OAAO6E,MAAMO,GAAG,CAACmC,MAAM,CAACF;gBAC9B,MAAMkI,YAAYd,yBAAyBzO,KAAKwP,IAAI;gBAEpDpJ,KAAK+E,QAAQ,CAAC;oBACbrF,SAAS;wBAAEJ,MAAM2B;wBAAKoI,QAAQ,CAAC,EAAE,EAAEF,WAAW;oBAAC;oBAC/C7F,WAAW;wBAAEgG,QAAQrI,MAAM,IAAIkI,UAAUvF,MAAM;oBAAC;gBACjD;gBACA,OAAO;YACR;QACD;KACA;AACF;AAIA,SAASkG,mBACRC,IAAkB,EAClBC,gBAA2B,EAC3BC,iBAAqC;IAErC,IAAIF,SAAS,QAAQ;QACpB,MAAMG,WAAWxU;QACjB,MAAMyU,WAAWrU;QACjB,OAAO;YACNuD,KACC,CAAC+Q,KACAA,OAAO,qBACJF,SAASG,QAAQ,GACjBD,OAAO,eACPA,OAAO,sBACPA,OAAO,uBACND,SAASE,QAAQ,GACjB,MACLJ;YAED7T,mBAAmB6Q;YACnBqD;YACAf;SACA;IACF,OAAO,IAAIQ,SAAS,OAAO;QAC1B,IAAIQ,UAAUrC;QACd,IAAI8B,oBAAoBA,iBAAiBpG,MAAM,GAAG,GAAG;YACpD2G,UAAU3U,WAAWmE,MAAM,CAAC;gBAC3BoO,UAAUH,aAAavN,IAAI,CAAC;gBAC5B2N,SAAS;uBAAIH;uBAAgB+B;iBAAiB,CAACvP,IAAI,CAAC;YACrD;QACD;QACA,OAAO;YAAC5E,IAAI;gBAAE0U;YAAQ;YAAInU,mBAAmB6Q;SAAsB;IACpE,OAAO,IAAI8C,SAAS,QAAQ;QAC3B,OAAO;YACNjU;YACAM,mBAAmB6Q;YACnB+B;SACA;IACF,OAAO;QACN,OAAO;YACNtT;YACAY,OACC,CAAC0J;gBACA,IAAI,CAACA,KAAKvB,KAAK,CAACO,GAAG,CAACoE,QAAQ,GAAGoH,IAAI,IAAI,OAAO,EAAE;gBAChD,OAAO7U,kBAAkBqK;YAC1B,GACA;gBAAEyK,OAAO;YAAI;YAEdrU,mBAAmB6Q;YACnBqD;SACA;IACF;AACD;AAEA,SAASA;IACR,OAAOpT,YAAYwT,iBAAiB,CAAClL,EAAE,CAAC,CAACd;QACxC,IAAI,CAACA,GAAGe,UAAU,EAAE,OAAOf;QAE3B,IAAIiM,YAAY,CAAC;QACjB,IAAIC,UAAU,CAAC;QACf,IAAIC,cAAc;QAElBnM,GAAGgB,OAAO,CAACoL,WAAW,CAAC,CAACC,OAAOC,KAAKC,QAAQC,MAAMC;YACjDN;YACA,IAAIM,SAAS/H,QAAQ,OAAO,MAAM;gBACjCuH,YAAYI;gBACZH,UAAUI;YACX;QACD;QAEA,IAAIH,gBAAgB,KAAKF,cAAc,CAAC,GAAG,OAAOjM;QAElD,MAAM0M,OAAO/U,WAAWqI,GAAG2M,UAAU;QACrC,MAAMC,aAAaF,KAAKG,YAAY,CAACZ,WAAW,CAAC;QACjD,IAAIW,WAAWE,IAAI,KAAK,YAAYF,WAAWG,MAAM,EAAED,SAAS,UAAU;YACzE,OAAO9M;QACR;QAEA,MAAM9E,OAAO8E,GAAG2M,UAAU,CAACrM,GAAG,CAACmC,MAAM,CAACwJ;QACtC,MAAMpC,SAAS3O,KAAKwP,IAAI,CAACzE,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;QACjD,MAAM+G,QAAQ,GAAGnD,OAAO,EAAE,CAAC;QAE3B,uEAAuE;QACvE,MAAMoD,UAAUjN,GAAG2M,UAAU,CAACrM,GAAG,CAACoE,QAAQ;QAC1C,MAAMwI,aAAaD,QAAQnR,KAAK,CAAC,GAAGmQ;QACpC,MAAMkB,eACL,2EAA2E/C,IAAI,CAC9E8C;QAEF,IAAIC,cAAc;YACjB,MAAMxC,SAAS,CAAC,GAAG,EAAEqC,MAAM,WAAW,EAAEnD,OAAO,CAAC,CAAC;YACjD,OAAO;gBACN7I,SAAS;oBAAEJ,MAAMqL;oBAAW7G,IAAI8G;oBAASvB;gBAAO;gBAChD/F,WAAW;oBAAEgG,QAAQqB,YAAYtB,OAAOyC,WAAW,CAAC,QAAQ;gBAAE;YAC/D;QACD;QAEA,OAAO;YACNpM,SAAS;gBACRJ,MAAMqL;gBACN7G,IAAI8G;gBACJvB,QAAQ,CAAC,GAAG,EAAEqC,MAAM,EAAE,EAAEnD,OAAO,CAAC,CAAC;YAClC;YACAjF,WAAW;gBAAEgG,QAAQqB,YAAY,IAAIe,MAAM9H,MAAM;YAAC;QACnD;IACD;AACD;AAqCA,OAAO,SAASmI,WAAW,EAC1BC,YAAY,EACZC,YAAY,EACZ9G,QAAQ,EACR+G,QAAQ,EACRC,YAAY,EACZC,WAAW,KAAK,EAChBC,EAAE,EACFtC,OAAO,MAAM,EACbuC,kBAAkB,KAAK,EACvBC,oBAAoB,EACpBC,gBAAgB,EAChBxW,YAAYyW,mBAAmB,IAAI,EACnCzU,aAAa0U,oBAAoB,IAAI,EACrC7W,GAAG,EACH8W,uBAAuB,EACvBC,gBAAgB,EAChBC,cAAc,EACd5C,iBAAiB,EACjB6C,UAAU,KAAK,EACE;IACjB,MAAMC,SAASnU,MAAMoU,MAAM,CAAC;IAC5B,MAAM,CAAChN,MAAMiN,QAAQ,GAAGrU,MAAM8L,QAAQ,CAAoB;IAE1D,MAAMwI,eAAetU,MAAMuU,WAAW,CACrC,CAACC;QACA,IAAI;YACHpN,MAAM+E,SAASqI;QAChB,EAAE,OAAM;QACP,uEAAuE;QACxE;IACD,GACA;QAACpN;KAAK;IAGP,MAAMqN,eAAezU,MAAMoU,MAAM,CAAChB,gBAAgB;IAElD,MAAMsB,qBAAqB1U,MAAMoU,MAAM,CAAC,IAAI/V;IAC5C,MAAMsW,qBAAqB3U,MAAMoU,MAAM,CAAC,IAAI/V;IAC5C,MAAMuW,sBAAsB5U,MAAMoU,MAAM,CAAC,IAAI/V;IAC7C,MAAMwW,sBAAsB7U,MAAMoU,MAAM,CAAC,IAAI/V;IAC7C,MAAMyW,mBAAmB9U,MAAMoU,MAAM,CAAC,IAAI/V;IAC1C,MAAM0W,kCAAkC/U,MAAMoU,MAAM,CAAC,IAAI/V;IACzD,MAAM2W,2BAA2BhV,MAAMoU,MAAM,CAAC,IAAI/V;IAClD,MAAM4W,4BAA4BjV,MAAMoU,MAAM,CAAC,IAAI/V;IACnD,MAAM6W,iBAAiBlV,MAAMoU,MAAM,CAAC,IAAI/V;IACxC,MAAM,CAAC8W,cAAcC,gBAAgB,GAAGpV,MAAM8L,QAAQ;IAGtD,MAAMuJ,gBAAgBrV,MAAMoU,MAAM,CAACnX,KAAKqY;IAExCtV,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACpB,OAAO7J,OAAO,EAAE;YACpB;QACD;QAEA,MAAMlD,OAAO,IAAIrI,WAAW;YAC3B8T,QAAQsB,OAAO7J,OAAO;YACtBzE,OAAOvH,YAAY+G,MAAM,CAAC;gBACzBe,KAAKqO,aAAanK,OAAO;gBACzBkL,YAAY;oBACXN,eAAe5K,OAAO,CAAC1D,EAAE,CAACsN,UAAU3U,QAAQ,EAAE;oBAC9CR,WAAW0W,iBAAiB,CAAC7O,EAAE,CAAC;wBAAE,cAAc;oBAAQ;oBACxDiO,oBAAoBvK,OAAO,CAAC1D,EAAE,CAACtI,YAAYkV,QAAQ,CAAC5M,EAAE,CAAC;uBACnDkN,oBAAoB;wBAAC1U;qBAAc,GAAG,EAAE;uBACxCyU,mBACD;wBACAzW,WAAW;4BACVsY,WAAW,CAACC;gCACX,MAAM/H,KAAK3L,SAASC,aAAa,CAAC;gCAClC0L,GAAGvL,KAAK,CAACiC,OAAO,GAAG;gCACnBsJ,GAAGvL,KAAK,CAACmH,UAAU,GAAG;gCACtBoE,GAAGvL,KAAK,CAACoH,cAAc,GAAG;gCAC1BmE,GAAGvL,KAAK,CAAC2G,KAAK,GAAG;gCACjB4E,GAAGvL,KAAK,CAAC0C,MAAM,GAAG;gCAClB6I,GAAGgI,SAAS,GAAGD,OACZ,wNACA;gCACH,OAAO/H;4BACR;wBACD;qBACA,GACA,EAAE;oBACL1O;oBACAtC;oBACAiC;oBACAC;oBACAR,YAAYuX,uBAAuB,CAACjP,EAAE,CAAC;oBACvCrJ;oBACAqX,oBAAoBtK,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBACjCzJ;oBACAb;oBACAD,eAAe;wBACdyZ,OAAO;wBACPC,oBAAoB;wBACpBpZ,eAAe;wBACfqZ,cAAc;4BAAC;gCAAE1I,QAAQ2I;gCAAsBnS,UAAU;4BAAG;yBAAE;wBAC9DoS,aAAa,CAACC,cACb;wBACDC,cAAc,CAACC,SACd;wBACDC,oBAAoB,CAACC,GAAGC;4BACvB,MAAMC,cAAcF,EAAEpJ,IAAI,KAAK,aAAa,IAAI;4BAChD,MAAMuJ,cAAcF,EAAErJ,IAAI,KAAK,aAAa,IAAI;4BAChD,OAAOsJ,cAAcC;wBACtB;oBACD;oBACArX;oBACAV;oBACAX;oBACAO,KAAKoY,OAAO,CACXxX,OAAOyH,EAAE,CAAC;wBACT;4BACC8F,KAAK;4BACL2D,KAAK,CAACuG;gCACL,IAAIna,iBAAiBma,EAAE/Q,KAAK,MAAM,UAAU;oCAC3C,OAAOnJ,wBAAwB,MAAMka;gCACtC;gCACA,OAAO;4BACR;wBACD;wBACA;4BACClK,KAAK;4BACL2D,KAAK,CAACuG;gCACL,IAAIna,iBAAiBma,EAAE/Q,KAAK,MAAM,UAAU;oCAC3C,OAAOnJ,wBAAwB,OAAOka;gCACvC;gCACA,OAAO;4BACR;wBACD;wBACA;4BACClK,KAAK;4BACL2D,KAAK,CAACuG;gCACL,IAAIna,iBAAiBma,EAAE/Q,KAAK,MAAM,UAAU;oCAC3C,OAAOzJ,iBAAiBwa;gCACzB;gCACA,OAAO;4BACR;wBACD;qBACA;oBAEF9B,iBAAiBxK,OAAO,CAAC1D,EAAE,CAACkC;oBAC5BY;oBACAvK,OAAOyH,EAAE,CAAC;2BACNrK;2BACAC,iBAAiBqa,MAAM,CAAC,CAACL,IAAMA,EAAE9J,GAAG,KAAK;2BACzC/P;2BACAwB;2BACAtB;2BACAQ;2BACAM;qBACH;oBACDyH;oBACAqD;oBACA1J,WAAW+X,aAAa,CAAClQ,EAAE,CAAC,KAAO;uBAChCuH;oBACHuG,mBAAmBpK,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBAChC+N,mBAAmBrK,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBAChCmO,gCAAgCzK,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBAC7CoO,yBAAyB1K,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBACtCqO,0BAA0B3K,OAAO,CAAC1D,EAAE,CAAC,EAAE;iBACvC;YACF;QACD;QAEAyN,QAAQ,IAAMjN;QAEd,OAAO;YACNA,KAAK2G,OAAO;YACZsG,QAAQ,IAAM;QACf;IACD,GAAG;QAACR;QAAkBC;QAAmBI;KAAQ;IAEjDlU,MAAMuV,SAAS,CAAC;QACfF,cAAc/K,OAAO,GAAGrN,KAAKqY;IAC9B;IAEAtV,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACnO,QAAQ,CAACnK,KAAK;YAClB,IAAImK,MAAM;gBACTkN,aAAa;oBACZtO,SAASgP,yBAAyB1K,OAAO,CAACyM,WAAW,CAAC,EAAE;gBACzD;YACD;YACA3B,gBAAgB5N;YAChB;QACD;QAEA,IAAIwP,YAAY;QAEhBrW,iBAAiB1D,IAAIqY,UAAU,EAC7B2B,IAAI,CAAC,CAACC;YACN,IAAIF,WAAW;YACf5B,gBAAgB8B,SAASC,SAAS;YAClC,MAAM3B,aAAa9U,6BAClBwW,UACA,CAACpJ,OAAOX,OACPkI,cAAc/K,OAAO,GAAGwD,OAAOX,SAASiK,QAAQC,OAAO,CAAC,EAAE;YAE5D/C,aAAa;gBACZtO,SAASgP,yBAAyB1K,OAAO,CAACyM,WAAW,CAACvB;YACvD;QACD,GACC8B,KAAK,CAAC,KAAO;QAEf,OAAO;YACNN,YAAY;QACb;IACD,GAAG;QAAC5P;QAAMnK;QAAKqX;KAAa;IAE5BtU,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACnO,MAAM;QACX,IAAI2M,yBAAyB;YAC5BO,aAAa;gBACZtO,SAASiP,0BAA0B3K,OAAO,CAACyM,WAAW,CACrDxW,6BACCwT,yBACAC,kBACAC;YAGH;QACD,OAAO;YACNK,aAAa;gBACZtO,SAASiP,0BAA0B3K,OAAO,CAACyM,WAAW,CAAC,EAAE;YAC1D;QACD;IACD,GAAG;QACF3P;QACA2M;QACAC;QACAC;QACAK;KACA;IAEDtU,MAAMuV,SAAS,CAAC;QACf,IAAIhC,gBAAgBnM,MAAM;YACzBmM,aAAanM;QACd;IACD,GAAG;QAACA;QAAMmM;KAAa;IAEvBvT,MAAMuV,SAAS,CAAC;QACfjB,aAAa;YACZtO,SAAS0O,mBAAmBpK,OAAO,CAACyM,WAAW,CAAC;gBAC/ChY,WAAWwY,cAAc,CAAC3Q,EAAE,CAAC,CAAChB;oBAC7B,IAAIA,OAAOiB,UAAU,IAAI0F,UAAU;wBAClCA,SAAS3G,OAAOwB,IAAI,CAACvB,KAAK,CAACO,GAAG,CAACoE,QAAQ;oBACxC;gBACD;aACA;QACF;IACD,GAAG;QAAC+B;QAAU+H;KAAa;IAE3BtU,MAAMuV,SAAS,CAAC;QACfjB,aAAa;YACZtO,SAAS2O,mBAAmBrK,OAAO,CAACyM,WAAW,CAAC;gBAC/ChY,WAAWwY,cAAc,CAAC3Q,EAAE,CAAC,CAAChB;oBAC7B,IAAI0N,UAAU;wBACbA,SAAS1N;oBACV;gBACD;aACA;QACF;IACD,GAAG;QAAC0N;QAAUgB;KAAa;IAE3B,4DAA4D;IAC5DtU,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACnO,QAAQiM,iBAAiB7L,WAAW;YACxC;QACD;QAEA,MAAMgQ,aAAapQ,KAAKvB,KAAK,CAACO,GAAG,CAACoE,QAAQ;QAC1C,IAAIgN,eAAenE,cAAc;YAChCiB,aAAa;gBACZxN,SAAS;oBACRJ,MAAM;oBACNwE,IAAIsM,WAAWxM,MAAM;oBACrByF,QAAQ4C;gBACT;YACD;QACD;IACD,GAAG;QAACA;QAAcjM;QAAMkN;KAAa;IAErC,MAAMmD,uBAAuBzX,MAAMoU,MAAM,CAAC/C;IAC1CoG,qBAAqBnN,OAAO,GAAG+G;IAE/B,MAAMqG,0BAA0B1X,MAAM2X,OAAO,CAAC;QAC7C,IAAI,CAACtG,mBAAmB,OAAO7J;QAC/B,OAAQ,CAACoQ,MAAcC,SACtBJ,qBAAqBnN,OAAO,GAAGsN,MAAMC,WAAW,EAAE;IACpD,GAAG;QAACxG;KAAkB;IAEtBrR,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS4O,oBAAoBtK,OAAO,CAACyM,WAAW,CAC/C7F,mBAAmBC,MAAMgE,cAAcuC;QAEzC;IACD,GAAG;QAACvG;QAAM/J;QAAM+N;QAAcuC;QAAyBpD;KAAa;IAEpEtU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS;gBACR6O,oBAAoBvK,OAAO,CAACyM,WAAW,CACtCzY,YAAYkV,QAAQ,CAAC5M,EAAE,CAAC4M;aAEzB;QACF;IACD,GAAG;QAACA;QAAUpM;QAAMkN;KAAa;IAEjCtU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS;gBACR8O,iBAAiBxK,OAAO,CAACyM,WAAW,CACnCrD,kBAAkB1J,gBAAgBlB;aAEnC;QACF;IACD,GAAG;QAAC4K;QAAiBtM;QAAMkN;KAAa;IAExCtU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS;gBAACkP,eAAe5K,OAAO,CAACyM,WAAW,CAAC7C,UAAU3U,QAAQ,EAAE;aAAE;QACpE;IACD,GAAG;QAAC2U;QAAS9M;QAAMkN;KAAa;IAEhCtU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS;gBACR+O,gCAAgCzK,OAAO,CAACyM,WAAW,CAClDpD,wBAAwB,EAAE;aAE3B;QACF;IACD,GAAG;QAACA;QAAsBvM;QAAMkN;KAAa;IAE7CtU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAkN,aAAa;YACZtO,SAAS9E,oBAAoB0F,EAAE,CAACgN,oBAAoB,EAAE;QACvD;IACD,GAAG;QAACA;QAAkBxM;QAAMkN;KAAa;IAEzC,qBAAO,KAAClI;QAAI0L,WAAU;QAAgBC,KAAK5D;QAAQV,IAAIA;;AACxD;AAEA,MAAMuE,mBAAmBjZ,WAAWgK,KAAK,CAAC;IACzC,eAAe;QACdzG,iBAAiB;QACjBC,QAAQ;QACRC,cAAc;QACd0B,YAAY;QACZjB,YAAY;QACZ8B,QAAQ;QACRtC,SAAS;QACTsB,UAAU;IACX;IACA,cAAc;QACbA,UAAU;QACVE,OAAO;IACR;IACA,8BAA8B;QAC7BoF,iBAAiB;IAClB;IACA,0BAA0B;QACzBD,SAAS;IACV;IACA,sCAAsC;QACrC7G,QAAQ;QACRC,cAAc;IACf;IACA,YAAY;QACXC,SAAS;IACV;IACA,4CAA4C;QAC3CkH,WAAW;IACZ;IACA,sBAAsB;QACrBrF,SAAS;QACTJ,YAAY;IACb;IACA,uBAAuB;QACtBD,OAAO;QACPF,UAAU;IACX;IACA,wBAAwB;QACvBO,SAAS;IACV;IACA,uBAAuB;QACtBA,SAAS;QACTkF,YAAY;QACZC,gBAAgB;QAChBT,OAAO;QACPjE,QAAQ;QACRgF,YAAY;IACb;AACD;AAEA,MAAMkO,cAAc,kBAAM,KAACnY;QAASuN,MAAM;QAAIpJ,OAAM;;AACpD,MAAMiU,eAAe,kBAAM,KAACzY;QAAc4N,MAAM;QAAIpJ,OAAM;;AAC1D,MAAMkU,YAAY,kBAAM,KAACtY;QAAOwN,MAAM;QAAIpJ,OAAM;;AAChD,MAAMmU,aAAa,kBAAM,KAACxY;QAAQyN,MAAM;QAAIpJ,OAAM;;AAClD,MAAMoU,aAAa,kBAAM,KAAC1Y;QAAS0N,MAAM;QAAIpJ,OAAM;;AAEnD,SAASqU,kBAAkBC,UAAsB;IAChD,IAAIA,WAAWpL,IAAI,KAAK,YAAY,OAAO9M;IAC3C,IAAIkY,WAAWpL,IAAI,KAAK,WAAW,OAAO8K;IAC1C,IAAIM,WAAWpL,IAAI,KAAK,YAAY,OAAO+K;IAC3C,IAAIK,WAAWpL,IAAI,KAAK,SAAS,OAAOgL;IACxC,IAAII,WAAWpL,IAAI,KAAK,UAAU,OAAOiL;IACzC,IAAIG,WAAWpL,IAAI,KAAK,QAAQ,OAAO7M;IACvC,IAAIiY,WAAWpL,IAAI,KAAK,QAAQ,OAAO/M;IACvC,IAAImY,WAAWpL,IAAI,KAAK,gBAAgB,OAAO;IAC/C,MAAMqL,SAASD,WAAWC,MAAM;IAChC,IAAI,CAACA,QAAQ;QACZ,IAAID,WAAWpL,IAAI,KAAK,YAAY,OAAOkL;QAC3C,OAAO/X;IACR;IACA,IAAIiY,WAAWpL,IAAI,KAAK,YAAY,OAAOkL;IAC3C,MAAMvJ,WAAW0J,OAAOC,OAAO,CAAC,SAAS;IACzC,IAAI,CAAC3J,UAAU,OAAOxO;IACtB,kDAAkD;IAClD,IAAIwO,aAAaA,SAASnN,WAAW,IAAI,OAAO;IAChD,MAAM+W,YAAY5J,QAAQ,CAAC,EAAE;IAC7B,IAAI,CAAC4J,WAAW,OAAOpY;IACvB,MAAMqY,YAAYD,cAAcA,UAAU/W,WAAW;IACrD,OAAOgX,YAAYxY,kBAAkBG;AACtC;AAEA,SAAS2V,qBAAqBsC,UAAsB;IACnD,MAAMK,YAAY3W,SAASC,aAAa,CAAC;IACzC0W,UAAUd,SAAS,GAAG;IACtB,MAAMe,OAAOP,kBAAkBC;IAC/B,IAAIM,MAAM;QACT5Y,UAAU;YACTC,WAAW0Y,WAAWtL,MAAM,eAAC,KAACuL;QAC/B;IACD,OAAO;QACND,UAAUvW,KAAK,CAACiC,OAAO,GAAG;IAC3B;IACA,OAAOsU;AACR;AAEA,IAAIE,gBAAuC;AAC3C,IAAIC,cAA6B;AAEjC,SAASC;IACRF,eAAe3T;IACf2T,gBAAgB;IAChB,IAAIC,gBAAgB,MAAM;QACzBE,qBAAqBF;QACrBA,cAAc;IACf;AACD;AAEA,SAASG,uBAAuBX,UAAsB;IACrD,MAAMC,SAASD,WAAWC,MAAM;IAChC,IAAI,CAACA,QAAQ,OAAO;IAEpB,MAAM9H,SAASzO,SAASC,aAAa,CAAC;IACtCwO,OAAOrO,KAAK,CAACiC,OAAO,GAAG;IAEvB,MAAM6U,cAAc;QACnBH;QAEA,MAAMnV,UAAU5B,SAASC,aAAa,CAAC;QACvC2B,QAAQb,WAAW,GAAGwV;QACtBrW,OAAOC,MAAM,CAACyB,QAAQxB,KAAK,EAAE;YAC5ByB,UAAU;YACVxB,iBAAiB;YACjBC,QAAQ;YACRC,cAAc;YACdC,SAAS;YACTsB,UAAU;YACVC,YAAY;YACZC,OAAO;YACPC,YAAY;YACZZ,YAAY;YACZ0F,OAAO;YACPtG,WAAW;YACXyB,QAAQ;YACRC,eAAe;QAChB;QACAnC,SAASa,IAAI,CAAC6B,WAAW,CAACd;QAC1BiV,gBAAgBjV;QAEhB,MAAMuV,iBAAiB1I,OAAO5I,OAAO,CAAC;QACtC,MAAMuR,aAAaD,iBAChBA,eAAevU,qBAAqB,KACpC6L,OAAO7L,qBAAqB;QAC/BhB,QAAQxB,KAAK,CAACyC,GAAG,GAAG,GAAGuU,WAAWvU,GAAG,CAAC,EAAE,CAAC;QACzCjB,QAAQxB,KAAK,CAAC6C,IAAI,GAAG,GAAGmU,WAAWnL,KAAK,GAAG,EAAE,EAAE,CAAC;QAEhD,MAAMoL,aAAa;YAClB,IAAI,CAAC5I,OAAO6I,WAAW,EAAE;gBACxBP;gBACA;YACD;YACAD,cAAcS,sBAAsBF;QACrC;QACAP,cAAcS,sBAAsBF;IACrC;IAEAE,sBAAsB;QACrB,MAAMC,SAAS/I,OAAO5I,OAAO,CAAC;QAC9B,IAAI,CAAC2R,QAAQ;QACbA,OAAOC,gBAAgB,CAAC,cAAcP;QACtCM,OAAOC,gBAAgB,CAAC,cAAcV;IACvC;IAEA,OAAOtI;AACR;AAEA,OAAO,SAASiJ,YAAY,EAC3BhG,oBAAoB,EACpBF,EAAE,EACFL,YAAY,EACZC,YAAY,EACZ9G,QAAQ,EAOR;IACA,MAAM4H,SAASnU,MAAMoU,MAAM,CAAC;IAC5B,MAAM,CAAChN,MAAMiN,QAAQ,GAAGrU,MAAM8L,QAAQ,CAAoB;IAC1D,MAAMiJ,kCAAkC/U,MAAMoU,MAAM,CAAC,IAAI/V;IACzD,MAAMub,sBAAsB5Z,MAAMoU,MAAM,CAAC,IAAI/V;IAC7C,MAAMoW,eAAezU,MAAMoU,MAAM,CAAChB,gBAAgB;IAElDpT,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACpB,OAAO7J,OAAO,EAAE;YACpB;QACD;QAEA,MAAMlD,OAAO,IAAIrI,WAAW;YAC3B8T,QAAQsB,OAAO7J,OAAO;YACtBzE,OAAOvH,YAAY+G,MAAM,CAAC;gBACzBe,KAAKqO,aAAanK,OAAO;gBACzBkL,YAAY;oBACXnZ,eAAe;wBACdyZ,OAAO;wBACPC,oBAAoB;wBACpB8D,aAAa;wBACb7D,cAAc;4BACb;gCAAE1I,QAAQ2I;gCAAsBnS,UAAU;4BAAG;4BAC7C;gCAAEwJ,QAAQ4L;gCAAwBpV,UAAU;4BAAG;yBAC/C;wBACDoS,aAAa,CAACC,cACb;wBACDC,cAAc,CAACC,SACd;wBACDC,oBAAoB,CAACC,GAAGC;4BACvB,MAAMC,cAAcF,EAAEpJ,IAAI,KAAK,aAAa,IAAI;4BAChD,MAAMuJ,cAAcF,EAAErJ,IAAI,KAAK,aAAa,IAAI;4BAChD,OAAOsJ,cAAcC;wBACtB;oBACD;oBACApa;oBACAM;oBACAW;oBACAya;oBACAjZ,WAAW0W,iBAAiB,CAAC7O,EAAE,CAAC;wBAAE,cAAc;oBAAQ;uBACrDuH;oBACH4G,gCAAgCzK,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBAC7CgT,oBAAoBtP,OAAO,CAAC1D,EAAE,CAAC,EAAE;oBACjCzH,OAAOyH,EAAE,CAAC;wBACT;4BAAE8F,KAAK;4BAAOC,gBAAgB;4BAAM0D,KAAKjU;wBAAiB;2BACvDG;2BACAI;2BACAwB;2BACAtB;2BACAQ;2BACAb;2BACAmB;qBACH;iBACD;YACF;QACD;QAEA0W,QAAQ,IAAMjN;QAEd,OAAO;YACNA,KAAK2G,OAAO;YACZsG,QAAQ,IAAM;QACf;IACD,GAAG,EAAE;IAELrU,MAAMuV,SAAS,CAAC;QACf,IAAInO,SAAS,MAAM;YAClB;QACD;QACAA,KAAK+E,QAAQ,CAAC;YACbnG,SAAS;gBACR+O,gCAAgCzK,OAAO,CAACyM,WAAW,CAClDpD,wBAAwB,EAAE;aAE3B;QACF;IACD,GAAG;QAACA;QAAsBvM;KAAK;IAE/BpH,MAAMuV,SAAS,CAAC;QACfnO,MAAM+E,SAAS;YACdnG,SAAS4T,oBAAoBtP,OAAO,CAACyM,WAAW,CAAC;gBAChDhY,WAAWwY,cAAc,CAAC3Q,EAAE,CAAC,CAAChB;oBAC7B,IAAIA,OAAOiB,UAAU,IAAI0F,UAAU;wBAClCA,SAAS3G,OAAOwB,IAAI,CAACvB,KAAK,CAACO,GAAG,CAACoE,QAAQ;oBACxC;gBACD;aACA;QACF;IACD,GAAG;QAACpD;QAAMmF;KAAS;IAEnBvM,MAAMuV,SAAS,CAAC;QACf,IAAI,CAACnO,QAAQiM,iBAAiB7L,WAAW;YACxC;QACD;QAEA,MAAMgQ,aAAapQ,KAAKvB,KAAK,CAACO,GAAG,CAACoE,QAAQ;QAC1C,IAAIgN,eAAenE,cAAc;YAChCjM,KAAK+E,QAAQ,CAAC;gBACbrF,SAAS;oBACRJ,MAAM;oBACNwE,IAAIsM,WAAWxM,MAAM;oBACrByF,QAAQ4C;gBACT;YACD;QACD;IACD,GAAG;QAACA;QAAcjM;KAAK;IAEvB,qBAAO,KAACgF;QAAI0L,WAAU;QAAgBC,KAAK5D;QAAQV,IAAIA;;AACxD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { syntaxTree } from "@codemirror/language";
|
|
2
|
+
import type { SyntaxNode } from "@lezer/common";
|
|
3
|
+
export interface ScopeView {
|
|
4
|
+
getString(key: string): string | null;
|
|
5
|
+
getStringArray(parentKey: string, arrayKey: string): string[];
|
|
6
|
+
getKeys(): string[];
|
|
7
|
+
}
|
|
8
|
+
export interface DocumentContext {
|
|
9
|
+
fullPath: string[];
|
|
10
|
+
pos: number;
|
|
11
|
+
doc: string;
|
|
12
|
+
cursorPosition: {
|
|
13
|
+
kind: "property";
|
|
14
|
+
prefix: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "value";
|
|
17
|
+
key: string;
|
|
18
|
+
prefix: string;
|
|
19
|
+
} | {
|
|
20
|
+
kind: "array-item";
|
|
21
|
+
parentKey: string;
|
|
22
|
+
prefix: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "none";
|
|
25
|
+
};
|
|
26
|
+
getScope(levelsUp: number): ScopeView;
|
|
27
|
+
isInsideArray(): boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface PropertyInfo {
|
|
30
|
+
name: string;
|
|
31
|
+
path: string[];
|
|
32
|
+
resourceType: string;
|
|
33
|
+
from: number;
|
|
34
|
+
to: number;
|
|
35
|
+
}
|
|
36
|
+
export interface EmptyStringInfo {
|
|
37
|
+
from: number;
|
|
38
|
+
to: number;
|
|
39
|
+
}
|
|
40
|
+
export declare function buildJsonDocumentContext(doc: string, pos: number): DocumentContext;
|
|
41
|
+
export declare function walkJsonProperties(doc: string, tree: ReturnType<typeof syntaxTree>, resourceTypeHint: string | null): {
|
|
42
|
+
properties: PropertyInfo[];
|
|
43
|
+
emptyStrings: EmptyStringInfo[];
|
|
44
|
+
};
|
|
45
|
+
export declare function findRootJsonObject(doc: string, tree: ReturnType<typeof syntaxTree>): SyntaxNode | null;
|
|
46
|
+
//# sourceMappingURL=json-ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-ast.d.ts","sourceRoot":"","sources":["../../../../src/components/code-editor/json-ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,SAAS;IACzB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9D,OAAO,IAAI,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EACX;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACpC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC9C;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,aAAa,IAAI,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AAqXD,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,eAAe,CAgDjB;AAID,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,EACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC7B;IAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,YAAY,EAAE,eAAe,EAAE,CAAA;CAAE,CAiBjE;AAED,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GACjC,UAAU,GAAG,IAAI,CAuBnB"}
|