@qoretechnologies/reqraft 0.10.62 → 0.10.63-pr.142.g0b675cd
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/README.md +21 -1
- package/dist/components/Description/describedControl.d.ts +48 -0
- package/dist/components/Description/describedControl.d.ts.map +1 -0
- package/dist/components/Description/describedControl.js +81 -0
- package/dist/components/Description/describedControl.js.map +1 -0
- package/dist/components/Description/index.d.ts.map +1 -1
- package/dist/components/Description/index.js +3 -2
- package/dist/components/Description/index.js.map +1 -1
- package/dist/components/colorValue/colorValue.d.ts +59 -0
- package/dist/components/colorValue/colorValue.d.ts.map +1 -0
- package/dist/components/colorValue/colorValue.js +245 -0
- package/dist/components/colorValue/colorValue.js.map +1 -0
- package/dist/components/colorValue/index.d.ts +34 -0
- package/dist/components/colorValue/index.d.ts.map +1 -0
- package/dist/components/colorValue/index.js +136 -0
- package/dist/components/colorValue/index.js.map +1 -0
- package/dist/components/colorValue/labels.d.ts +12 -0
- package/dist/components/colorValue/labels.d.ts.map +1 -0
- package/dist/components/colorValue/labels.js +11 -0
- package/dist/components/colorValue/labels.js.map +1 -0
- package/dist/components/composer/Composer.d.ts +1 -1
- package/dist/components/composer/Composer.d.ts.map +1 -1
- package/dist/components/composer/Composer.js +2 -2
- package/dist/components/composer/Composer.js.map +1 -1
- package/dist/components/dpqlEditor/DpqlEditor.d.ts.map +1 -1
- package/dist/components/dpqlEditor/DpqlEditor.js +25 -5
- package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts +10 -1
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlHelpers.js +30 -13
- package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlTags.d.ts +11 -7
- package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlTags.js +11 -6
- package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
- package/dist/components/dpqlEditor/types.d.ts +47 -8
- package/dist/components/dpqlEditor/types.d.ts.map +1 -1
- package/dist/components/dpqlEditor/useDpqlSession.d.ts +2 -2
- package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
- package/dist/components/dpqlEditor/useDpqlSession.js +16 -7
- package/dist/components/dpqlEditor/useDpqlSession.js.map +1 -1
- package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
- package/dist/components/form/engine/CompactRow.js +151 -83
- package/dist/components/form/engine/CompactRow.js.map +1 -1
- package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
- package/dist/components/form/engine/CompactToolbar.js +29 -3
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +34 -1
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +487 -87
- package/dist/components/form/engine/FormEngine.js.map +1 -1
- package/dist/components/form/engine/HiddenFieldsNote.d.ts +28 -0
- package/dist/components/form/engine/HiddenFieldsNote.d.ts.map +1 -0
- package/dist/components/form/engine/HiddenFieldsNote.js +32 -0
- package/dist/components/form/engine/HiddenFieldsNote.js.map +1 -0
- package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
- package/dist/components/form/engine/OptionFieldMessages.js +24 -3
- package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
- package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts +2 -2
- package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
- package/dist/components/form/engine/_structuredData/SchemaDataView.js +12 -6
- package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +19 -0
- package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowContext.js.map +1 -1
- package/dist/components/form/engine/compactRowStyles.d.ts +0 -1
- package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +12 -20
- package/dist/components/form/engine/compactRowStyles.js.map +1 -1
- package/dist/components/form/engine/compactToolbarColors.d.ts +16 -0
- package/dist/components/form/engine/compactToolbarColors.d.ts.map +1 -0
- package/dist/components/form/engine/compactToolbarColors.js +21 -0
- package/dist/components/form/engine/compactToolbarColors.js.map +1 -0
- package/dist/components/form/engine/readFirst.d.ts +24 -8
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +77 -109
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/engine/readFirstColors.d.ts +30 -0
- package/dist/components/form/engine/readFirstColors.d.ts.map +1 -0
- package/dist/components/form/engine/readFirstColors.js +51 -0
- package/dist/components/form/engine/readFirstColors.js.map +1 -0
- package/dist/components/form/engine/rowFocus.d.ts +2 -0
- package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
- package/dist/components/form/engine/rowFocus.js +26 -3
- package/dist/components/form/engine/rowFocus.js.map +1 -1
- package/dist/components/form/engine/typeChoices.d.ts +1 -1
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantCalmTable.js +2 -1
- package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -1
- package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantCards.js +2 -1
- package/dist/components/form/engine/variants/VariantCards.js.map +1 -1
- package/dist/components/form/engine/variants/VariantFocus.js +1 -1
- package/dist/components/form/engine/variants/VariantFocus.js.map +1 -1
- package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantMinimal.js +2 -1
- package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -1
- package/dist/components/form/engine/variants/variantParts.d.ts +1 -1
- package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -1
- package/dist/components/form/engine/variants/variantParts.js +25 -17
- package/dist/components/form/engine/variants/variantParts.js.map +1 -1
- package/dist/components/form/expressions/DpqlRendering.d.ts +1 -1
- package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -1
- package/dist/components/form/expressions/DpqlRendering.js +3 -3
- package/dist/components/form/expressions/DpqlRendering.js.map +1 -1
- package/dist/components/form/expressions/ExpressionField.d.ts +41 -3
- package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
- package/dist/components/form/expressions/ExpressionField.js +396 -99
- package/dist/components/form/expressions/ExpressionField.js.map +1 -1
- package/dist/components/form/expressions/builder/argumentDetail.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/argumentDetail.js +4 -1
- package/dist/components/form/expressions/builder/argumentDetail.js.map +1 -1
- package/dist/components/form/expressions/builder/argumentLabel.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/argumentLabel.js +27 -9
- package/dist/components/form/expressions/builder/argumentLabel.js.map +1 -1
- package/dist/components/form/expressions/builder/argumentWrapper.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/argumentWrapper.js +4 -2
- package/dist/components/form/expressions/builder/argumentWrapper.js.map +1 -1
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js +5 -4
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js.map +1 -1
- package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts +1 -1
- package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js +6 -3
- package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js.map +1 -1
- package/dist/components/form/expressions/builder/index.d.ts +24 -2
- package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/index.js +121 -77
- package/dist/components/form/expressions/builder/index.js.map +1 -1
- package/dist/components/form/expressions/builder/item.d.ts +6 -2
- package/dist/components/form/expressions/builder/item.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/item.js +19 -5
- package/dist/components/form/expressions/builder/item.js.map +1 -1
- package/dist/components/form/expressions/builder/renderTemplate.js +1 -1
- package/dist/components/form/expressions/builder/renderTemplate.js.map +1 -1
- package/dist/components/form/expressions/expressionOperands.d.ts +16 -0
- package/dist/components/form/expressions/expressionOperands.d.ts.map +1 -0
- package/dist/components/form/expressions/expressionOperands.js +97 -0
- package/dist/components/form/expressions/expressionOperands.js.map +1 -0
- package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
- package/dist/components/form/expressions/mockExpressions.js +22 -5
- package/dist/components/form/expressions/mockExpressions.js.map +1 -1
- package/dist/components/form/expressions/renderExpressionToText.d.ts +2 -0
- package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
- package/dist/components/form/expressions/renderExpressionToText.js +35 -9
- package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
- package/dist/components/form/expressions/textOfExpression.d.ts +18 -0
- package/dist/components/form/expressions/textOfExpression.d.ts.map +1 -0
- package/dist/components/form/expressions/textOfExpression.js +37 -0
- package/dist/components/form/expressions/textOfExpression.js.map +1 -0
- package/dist/components/form/expressions/useExpressionType.d.ts +26 -0
- package/dist/components/form/expressions/useExpressionType.d.ts.map +1 -0
- package/dist/components/form/expressions/useExpressionType.js +181 -0
- package/dist/components/form/expressions/useExpressionType.js.map +1 -0
- package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
- package/dist/components/form/expressions/useRenderExpression.js +7 -7
- package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
- package/dist/components/form/fields/Field.d.ts.map +1 -1
- package/dist/components/form/fields/Field.js +20 -7
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +17 -4
- package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
- package/dist/components/form/fields/array/ArrayAuto.d.ts.map +1 -1
- package/dist/components/form/fields/array/ArrayAuto.js +24 -0
- package/dist/components/form/fields/array/ArrayAuto.js.map +1 -1
- package/dist/components/form/fields/array/ArrayAutoField.d.ts.map +1 -1
- package/dist/components/form/fields/array/ArrayAutoField.js +36 -13
- package/dist/components/form/fields/array/ArrayAutoField.js.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts +20 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.js +81 -36
- package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
- package/dist/components/form/fields/auto/hostEditorValue.d.ts +30 -0
- package/dist/components/form/fields/auto/hostEditorValue.d.ts.map +1 -0
- package/dist/components/form/fields/auto/hostEditorValue.js +53 -0
- package/dist/components/form/fields/auto/hostEditorValue.js.map +1 -0
- package/dist/components/form/fields/binary/Binary.d.ts.map +1 -1
- package/dist/components/form/fields/binary/Binary.js +23 -3
- package/dist/components/form/fields/binary/Binary.js.map +1 -1
- package/dist/components/form/fields/boolean/Boolean.d.ts +5 -0
- package/dist/components/form/fields/boolean/Boolean.d.ts.map +1 -1
- package/dist/components/form/fields/boolean/Boolean.js +9 -1
- package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
- package/dist/components/form/fields/color/Color.d.ts +103 -16
- package/dist/components/form/fields/color/Color.d.ts.map +1 -1
- package/dist/components/form/fields/color/Color.js +611 -16
- package/dist/components/form/fields/color/Color.js.map +1 -1
- package/dist/components/form/fields/emittedValues.d.ts +34 -3
- package/dist/components/form/fields/emittedValues.d.ts.map +1 -1
- package/dist/components/form/fields/emittedValues.js +24 -1
- package/dist/components/form/fields/emittedValues.js.map +1 -1
- package/dist/components/form/fields/file/File.d.ts +1 -1
- package/dist/components/form/fields/file/File.d.ts.map +1 -1
- package/dist/components/form/fields/file/File.js +4 -2
- package/dist/components/form/fields/file/File.js.map +1 -1
- package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
- package/dist/components/form/fields/long-string/LongString.js +17 -3
- package/dist/components/form/fields/long-string/LongString.js.map +1 -1
- package/dist/components/form/fields/markdown/MarkdownView.js +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js +4 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/number/Number.d.ts +6 -0
- package/dist/components/form/fields/number/Number.d.ts.map +1 -1
- package/dist/components/form/fields/number/Number.js +41 -6
- package/dist/components/form/fields/number/Number.js.map +1 -1
- package/dist/components/form/fields/object/Object.d.ts +1 -1
- package/dist/components/form/fields/object/Object.d.ts.map +1 -1
- package/dist/components/form/fields/object/Object.js +4 -2
- package/dist/components/form/fields/object/Object.js.map +1 -1
- package/dist/components/form/fields/pendingEdit.d.ts +52 -0
- package/dist/components/form/fields/pendingEdit.d.ts.map +1 -0
- package/dist/components/form/fields/pendingEdit.js +79 -0
- package/dist/components/form/fields/pendingEdit.js.map +1 -0
- package/dist/components/form/fields/rich-text/RichText.d.ts +8 -1
- package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
- package/dist/components/form/fields/rich-text/RichText.js +190 -81
- package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
- package/dist/components/form/fields/rich-text/useTemplateTags.d.ts +18 -0
- package/dist/components/form/fields/rich-text/useTemplateTags.d.ts.map +1 -0
- package/dist/components/form/fields/rich-text/useTemplateTags.js +49 -0
- package/dist/components/form/fields/rich-text/useTemplateTags.js.map +1 -0
- package/dist/components/form/fields/schema-definition/CatalogLeafForm.d.ts.map +1 -1
- package/dist/components/form/fields/schema-definition/CatalogLeafForm.js +4 -1
- package/dist/components/form/fields/schema-definition/CatalogLeafForm.js.map +1 -1
- package/dist/components/form/fields/schema-definition/CatalogNodeEditor.d.ts.map +1 -1
- package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js +20 -5
- package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js.map +1 -1
- package/dist/components/form/fields/schema-definition/TableEditor.d.ts.map +1 -1
- package/dist/components/form/fields/schema-definition/TableEditor.js +10 -2
- package/dist/components/form/fields/schema-definition/TableEditor.js.map +1 -1
- package/dist/components/form/fields/schema-definition/index.d.ts.map +1 -1
- package/dist/components/form/fields/schema-definition/index.js +8 -4
- package/dist/components/form/fields/schema-definition/index.js.map +1 -1
- package/dist/components/form/fields/select/Select.d.ts +2 -0
- package/dist/components/form/fields/select/Select.d.ts.map +1 -1
- package/dist/components/form/fields/select/Select.js +19 -10
- package/dist/components/form/fields/select/Select.js.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.js +8 -2
- package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
- package/dist/components/form/fields/select/unavailableRow.d.ts +23 -0
- package/dist/components/form/fields/select/unavailableRow.d.ts.map +1 -0
- package/dist/components/form/fields/select/unavailableRow.js +55 -0
- package/dist/components/form/fields/select/unavailableRow.js.map +1 -0
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts +5 -5
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +11 -4
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
- package/dist/components/form/fields/template/TemplateBrowser.d.ts +22 -0
- package/dist/components/form/fields/template/TemplateBrowser.d.ts.map +1 -0
- package/dist/components/form/fields/template/TemplateBrowser.js +54 -0
- package/dist/components/form/fields/template/TemplateBrowser.js.map +1 -0
- package/dist/components/form/fields/template/TemplateField.d.ts +83 -1
- package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
- package/dist/components/form/fields/template/TemplateField.js +535 -85
- package/dist/components/form/fields/template/TemplateField.js.map +1 -1
- package/dist/components/form/fields/template/TemplateText.d.ts +0 -17
- package/dist/components/form/fields/template/TemplateText.d.ts.map +1 -1
- package/dist/components/form/fields/template/TemplateText.js +8 -4
- package/dist/components/form/fields/template/TemplateText.js.map +1 -1
- package/dist/components/form/fields/template/writtenAsText.d.ts +55 -0
- package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
- package/dist/components/form/fields/template/writtenAsText.js +188 -0
- package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
- package/dist/components/form/index.d.ts +10 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +23 -1
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
- package/dist/components/imageLightbox/ImageLightbox.js +19 -7
- package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
- package/dist/components/log/Log.d.ts.map +1 -1
- package/dist/components/log/Log.js +15 -7
- package/dist/components/log/Log.js.map +1 -1
- package/dist/components/menu/Menu.d.ts.map +1 -1
- package/dist/components/menu/Menu.js +19 -10
- package/dist/components/menu/Menu.js.map +1 -1
- package/dist/components/smartEditor/CompletionMenu.d.ts +43 -0
- package/dist/components/smartEditor/CompletionMenu.d.ts.map +1 -0
- package/dist/components/smartEditor/CompletionMenu.js +196 -0
- package/dist/components/smartEditor/CompletionMenu.js.map +1 -0
- package/dist/components/smartEditor/MarkdownDoc.d.ts +1 -1
- package/dist/components/smartEditor/MarkdownDoc.js +1 -1
- package/dist/components/smartEditor/MarkdownDoc.js.map +1 -1
- package/dist/components/smartEditor/SmartEditor.d.ts.map +1 -1
- package/dist/components/smartEditor/SmartEditor.js +51 -136
- package/dist/components/smartEditor/SmartEditor.js.map +1 -1
- package/dist/components/smartEditor/completionStyle.d.ts +27 -0
- package/dist/components/smartEditor/completionStyle.d.ts.map +1 -0
- package/dist/components/smartEditor/completionStyle.js +66 -0
- package/dist/components/smartEditor/completionStyle.js.map +1 -0
- package/dist/components/smartEditor/index.d.ts +5 -1
- package/dist/components/smartEditor/index.d.ts.map +1 -1
- package/dist/components/smartEditor/index.js +19 -1
- package/dist/components/smartEditor/index.js.map +1 -1
- package/dist/components/smartEditor/templateCompletions.d.ts +18 -0
- package/dist/components/smartEditor/templateCompletions.d.ts.map +1 -0
- package/dist/components/smartEditor/templateCompletions.js +94 -0
- package/dist/components/smartEditor/templateCompletions.js.map +1 -0
- package/dist/components/smartEditor/types.d.ts +12 -1
- package/dist/components/smartEditor/types.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspAutocomplete.d.ts +32 -0
- package/dist/components/smartEditor/useLspAutocomplete.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspAutocomplete.js +228 -118
- package/dist/components/smartEditor/useLspAutocomplete.js.map +1 -1
- package/dist/components/smartEditor/useLspHover.d.ts +22 -7
- package/dist/components/smartEditor/useLspHover.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspHover.js +86 -17
- package/dist/components/smartEditor/useLspHover.js.map +1 -1
- package/dist/components/smartEditor/useLspSemanticTokens.js +1 -1
- package/dist/components/smartEditor/useLspSemanticTokens.js.map +1 -1
- package/dist/components/smartEditor/useLspSession.d.ts +6 -0
- package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspSession.js +7 -6
- package/dist/components/smartEditor/useLspSession.js.map +1 -1
- package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -1
- package/dist/components/supportTicket/AttachmentChips.js +15 -5
- package/dist/components/supportTicket/AttachmentChips.js.map +1 -1
- package/dist/components/supportTicket/ReferencePicker.d.ts +9 -2
- package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
- package/dist/components/supportTicket/ReferencePicker.js +27 -6
- package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
- package/dist/components/supportTicket/TicketHeader.d.ts +3 -4
- package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
- package/dist/components/supportTicket/TicketHeader.js +20 -2
- package/dist/components/supportTicket/TicketHeader.js.map +1 -1
- package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
- package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
- package/dist/components/ticketReferences/TicketReferences.js +9 -4
- package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
- package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
- package/dist/components/ticketThread/TicketThread.js +36 -11
- package/dist/components/ticketThread/TicketThread.js.map +1 -1
- package/dist/helpers/descriptionTooltip.d.ts +43 -0
- package/dist/helpers/descriptionTooltip.d.ts.map +1 -0
- package/dist/helpers/descriptionTooltip.js +70 -0
- package/dist/helpers/descriptionTooltip.js.map +1 -0
- package/dist/helpers/domProps.d.ts +5 -0
- package/dist/helpers/domProps.d.ts.map +1 -0
- package/dist/helpers/domProps.js +47 -0
- package/dist/helpers/domProps.js.map +1 -0
- package/dist/helpers/expressions.d.ts +107 -2
- package/dist/helpers/expressions.d.ts.map +1 -1
- package/dist/helpers/expressions.js +223 -8
- package/dist/helpers/expressions.js.map +1 -1
- package/dist/helpers/hoveringPointer.d.ts +26 -0
- package/dist/helpers/hoveringPointer.d.ts.map +1 -0
- package/dist/helpers/hoveringPointer.js +29 -0
- package/dist/helpers/hoveringPointer.js.map +1 -0
- package/dist/helpers/markdownText.d.ts +14 -0
- package/dist/helpers/markdownText.d.ts.map +1 -0
- package/dist/helpers/markdownText.js +160 -0
- package/dist/helpers/markdownText.js.map +1 -0
- package/dist/helpers/qorusTypeCatalogue.d.ts +53 -0
- package/dist/helpers/qorusTypeCatalogue.d.ts.map +1 -0
- package/dist/helpers/qorusTypeCatalogue.js +262 -0
- package/dist/helpers/qorusTypeCatalogue.js.map +1 -0
- package/dist/helpers/readableColors.d.ts +36 -0
- package/dist/helpers/readableColors.d.ts.map +1 -0
- package/dist/helpers/readableColors.js +116 -0
- package/dist/helpers/readableColors.js.map +1 -0
- package/dist/helpers/templateItems.d.ts +2 -2
- package/dist/helpers/templateItems.d.ts.map +1 -1
- package/dist/helpers/templateItems.js +6 -4
- package/dist/helpers/templateItems.js.map +1 -1
- package/dist/helpers/templates.d.ts +26 -1
- package/dist/helpers/templates.d.ts.map +1 -1
- package/dist/helpers/templates.js +41 -6
- package/dist/helpers/templates.js.map +1 -1
- package/dist/helpers/validations.d.ts +9 -0
- package/dist/helpers/validations.d.ts.map +1 -1
- package/dist/helpers/validations.js +139 -33
- package/dist/helpers/validations.js.map +1 -1
- package/dist/hooks/useQorusTypes.d.ts +7 -15
- package/dist/hooks/useQorusTypes.d.ts.map +1 -1
- package/dist/hooks/useQorusTypes.js +25 -166
- package/dist/hooks/useQorusTypes.js.map +1 -1
- package/dist/hooks/useReadableIntentShade.d.ts +9 -0
- package/dist/hooks/useReadableIntentShade.d.ts.map +1 -0
- package/dist/hooks/useReadableIntentShade.js +23 -0
- package/dist/hooks/useReadableIntentShade.js.map +1 -0
- package/dist/hooks/useReadableOpacity.d.ts +6 -0
- package/dist/hooks/useReadableOpacity.d.ts.map +1 -0
- package/dist/hooks/useReadableOpacity.js +17 -0
- package/dist/hooks/useReadableOpacity.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tracking/ui/ExperimentCard.d.ts +1 -1
- package/dist/tracking/ui/ExperimentCard.d.ts.map +1 -1
- package/dist/tracking/ui/ExperimentCard.js +26 -10
- package/dist/tracking/ui/ExperimentCard.js.map +1 -1
- package/dist/tracking/ui/card.d.ts +2 -2
- package/dist/tracking/ui/card.d.ts.map +1 -1
- package/dist/tracking/ui/card.js +2 -2
- package/dist/tracking/ui/card.js.map +1 -1
- package/dist/tracking/ui/readable.d.ts +14 -0
- package/dist/tracking/ui/readable.d.ts.map +1 -0
- package/dist/tracking/ui/readable.js +60 -0
- package/dist/tracking/ui/readable.js.map +1 -0
- package/package.json +14 -5
- package/.claude/CLAUDE.md +0 -317
- package/.tasks/EXPORT_EXPRESSION_BUILDER.md +0 -38
- package/.tasks/EXPRESSION_BUILDER_REPORT.md +0 -149
- package/.tasks/EXPRESSION_FIELD_SEAMS.md +0 -66
- package/.tasks/FIELD_STACK_REPORT.md +0 -234
- package/.tasks/FORM_ENGINE_COMPACT_READ_FIRST.md +0 -558
- package/.tasks/FORM_ENGINE_EXPRESSIONS.md +0 -197
- package/.tasks/FORM_ENGINE_OPTIONS_SYNC.md +0 -95
- package/.tasks/FORM_FIELD_EXTRAS.md +0 -72
- package/.tasks/INDEX.md +0 -111
- package/.tasks/LSP_SHARED_CONNECTION.md +0 -75
- package/.tasks/QONSOLE_ASSIST_FEATURES.md +0 -306
- package/.tasks/RENDER_EXPRESSION_LSP.md +0 -159
- package/.tasks/REQRAFT_AUTO_FIELD.md +0 -176
- package/.tasks/SCHEMA_DEFINITION_FIELD.md +0 -250
- package/.tasks/SMART_EDITOR_CONTEXT_AND_POLISH.md +0 -340
- package/.tasks/SMART_EDITOR_LSP_FEATURES.md +0 -299
- package/.tasks/SMART_EDITOR_REVIEW_FOLLOWUPS.md +0 -280
- package/.tasks/SMART_EDITOR_UX_POLISH.md +0 -383
- package/.tasks/SMART_EDITOR_VISUAL_POLISH.md +0 -246
- package/.tasks/STORY_NETWORK_ISOLATION.md +0 -98
- package/.tasks/TEMPLATE_TOKEN_GRAMMAR.md +0 -72
- package/CODE_OF_CONDUCT.md +0 -105
- package/CONTRIBUTING.MD +0 -78
- package/SECURITY.md +0 -3
- package/chromatic.config.json +0 -5
- package/design/COMPACT_ENGINE_REDESIGN.md +0 -156
- package/design/COMPACT_INFO_DISPLAY.md +0 -87
- package/design/COMPACT_PARITY.md +0 -85
- package/design/EXPRESSION_BUILDER_REPORT_STRATEGY.md +0 -92
- package/design/FORM_ENGINE_COMPACT.md +0 -300
- package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +0 -353
- package/design/FORM_ENGINE_EXPRESSIONS.md +0 -257
- package/design/FORM_ENGINE_FIELD_MIGRATION.md +0 -419
- package/design/IDE_INTEGRATION.md +0 -64
- package/design/RENDER_EXPRESSION_TRANSPORT.md +0 -156
- package/design/SELECT_DIALOG_FLOOR.md +0 -86
- package/design/SMART_EDITOR_UX.md +0 -438
- package/design/TRACKING.md +0 -290
- package/design/UNAVAILABLE_ALLOWED_VALUES.md +0 -226
- package/src/components/Description/index.tsx +0 -254
- package/src/components/Description/markdownRendererContext.tsx +0 -29
- package/src/components/FocusedEditing/index.tsx +0 -50
- package/src/components/codeSize/index.tsx +0 -79
- package/src/components/composer/Composer.stories.tsx +0 -238
- package/src/components/composer/Composer.tsx +0 -554
- package/src/components/composer/helpers.ts +0 -74
- package/src/components/composer/index.ts +0 -2
- package/src/components/dpqlEditor/DpqlEditor.stories.tsx +0 -1183
- package/src/components/dpqlEditor/DpqlEditor.tsx +0 -219
- package/src/components/dpqlEditor/dpqlHelpers.ts +0 -287
- package/src/components/dpqlEditor/dpqlInserter.ts +0 -121
- package/src/components/dpqlEditor/dpqlProbe.ts +0 -165
- package/src/components/dpqlEditor/dpqlTags.ts +0 -114
- package/src/components/dpqlEditor/index.ts +0 -41
- package/src/components/dpqlEditor/types.ts +0 -203
- package/src/components/dpqlEditor/useDpqlProbe.ts +0 -33
- package/src/components/dpqlEditor/useDpqlSession.ts +0 -411
- package/src/components/form/engine/CompactRow.tsx +0 -2620
- package/src/components/form/engine/CompactToolbar.tsx +0 -330
- package/src/components/form/engine/FormEngine.stories.tsx +0 -9920
- package/src/components/form/engine/FormEngine.tsx +0 -4569
- package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
- package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -331
- package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
- package/src/components/form/engine/OptionFieldMessages.tsx +0 -477
- package/src/components/form/engine/OptionsHelpDialog.tsx +0 -29
- package/src/components/form/engine/__fixtures__/basicFormOptions.ts +0 -309
- package/src/components/form/engine/__fixtures__/fieldChromeOptions.ts +0 -45
- package/src/components/form/engine/_structuredData/SchemaDataView.stories.tsx +0 -233
- package/src/components/form/engine/_structuredData/SchemaDataView.tsx +0 -742
- package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +0 -85
- package/src/components/form/engine/_structuredData/StructuredDataView.tsx +0 -75
- package/src/components/form/engine/_structuredData/structuredData.ts +0 -145
- package/src/components/form/engine/compactRowContext.ts +0 -148
- package/src/components/form/engine/compactRowStyles.ts +0 -898
- package/src/components/form/engine/compactToolbarContext.ts +0 -69
- package/src/components/form/engine/optionActions.ts +0 -128
- package/src/components/form/engine/optionsContext.ts +0 -24
- package/src/components/form/engine/readFirst.ts +0 -1077
- package/src/components/form/engine/rendererTypes.ts +0 -107
- package/src/components/form/engine/revealRow.ts +0 -123
- package/src/components/form/engine/rowFocus.ts +0 -101
- package/src/components/form/engine/rowMenuContext.ts +0 -159
- package/src/components/form/engine/rowOpenPicker.ts +0 -27
- package/src/components/form/engine/typeChoices.ts +0 -63
- package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +0 -159
- package/src/components/form/engine/variants/VariantCalmTable.tsx +0 -244
- package/src/components/form/engine/variants/VariantCards.tsx +0 -212
- package/src/components/form/engine/variants/VariantFocus.tsx +0 -382
- package/src/components/form/engine/variants/VariantMinimal.tsx +0 -170
- package/src/components/form/engine/variants/focusDemo.ts +0 -145
- package/src/components/form/engine/variants/variantModel.ts +0 -223
- package/src/components/form/engine/variants/variantParts.tsx +0 -313
- package/src/components/form/expressions/DpqlRendering.tsx +0 -85
- package/src/components/form/expressions/ExpressionField.stories.tsx +0 -1395
- package/src/components/form/expressions/ExpressionField.tsx +0 -503
- package/src/components/form/expressions/argumentPresence.ts +0 -213
- package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +0 -1683
- package/src/components/form/expressions/builder/argumentDetail.tsx +0 -17
- package/src/components/form/expressions/builder/argumentLabel.tsx +0 -146
- package/src/components/form/expressions/builder/argumentSlot.tsx +0 -101
- package/src/components/form/expressions/builder/argumentWrapper.tsx +0 -243
- package/src/components/form/expressions/builder/confirmMismatchedTypesModal.tsx +0 -120
- package/src/components/form/expressions/builder/confirmUnsupportedTypeModal.tsx +0 -69
- package/src/components/form/expressions/builder/index.tsx +0 -1545
- package/src/components/form/expressions/builder/item.tsx +0 -89
- package/src/components/form/expressions/builder/moveToPositionStrip.tsx +0 -156
- package/src/components/form/expressions/builder/renderTemplate.tsx +0 -42
- package/src/components/form/expressions/dpqlMockLanguage.ts +0 -566
- package/src/components/form/expressions/dpqlMockLsp.ts +0 -126
- package/src/components/form/expressions/mockExpressions.ts +0 -317
- package/src/components/form/expressions/renderExpressionToText.ts +0 -137
- package/src/components/form/expressions/types.ts +0 -110
- package/src/components/form/expressions/useExpressions.ts +0 -101
- package/src/components/form/expressions/useRenderExpression.ts +0 -165
- package/src/components/form/fields/Field.stories.tsx +0 -143
- package/src/components/form/fields/Field.tsx +0 -732
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -297
- package/src/components/form/fields/array/ArrayAuto.tsx +0 -237
- package/src/components/form/fields/array/ArrayAutoField.stories.tsx +0 -475
- package/src/components/form/fields/array/ArrayAutoField.tsx +0 -367
- package/src/components/form/fields/auto/AutoFormField.stories.tsx +0 -825
- package/src/components/form/fields/auto/AutoFormField.tsx +0 -1164
- package/src/components/form/fields/binary/Binary.stories.tsx +0 -122
- package/src/components/form/fields/binary/Binary.tsx +0 -91
- package/src/components/form/fields/boolean/Boolean.stories.tsx +0 -125
- package/src/components/form/fields/boolean/Boolean.tsx +0 -34
- package/src/components/form/fields/byte-size/ByteSize.stories.tsx +0 -87
- package/src/components/form/fields/byte-size/ByteSize.tsx +0 -58
- package/src/components/form/fields/color/Color.stories.tsx +0 -99
- package/src/components/form/fields/color/Color.tsx +0 -46
- package/src/components/form/fields/cron/Cron.stories.tsx +0 -68
- package/src/components/form/fields/cron/Cron.tsx +0 -80
- package/src/components/form/fields/date/Date.stories.tsx +0 -77
- package/src/components/form/fields/date/Date.tsx +0 -55
- package/src/components/form/fields/emittedValues.ts +0 -70
- package/src/components/form/fields/file/File.stories.tsx +0 -161
- package/src/components/form/fields/file/File.tsx +0 -227
- package/src/components/form/fields/long-string/LongString.stories.tsx +0 -120
- package/src/components/form/fields/long-string/LongString.tsx +0 -130
- package/src/components/form/fields/markdown/Markdown.stories.tsx +0 -76
- package/src/components/form/fields/markdown/Markdown.tsx +0 -81
- package/src/components/form/fields/markdown/MarkdownView.tsx +0 -222
- package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +0 -139
- package/src/components/form/fields/number/Number.stories.tsx +0 -159
- package/src/components/form/fields/number/Number.tsx +0 -160
- package/src/components/form/fields/object/Object.stories.tsx +0 -398
- package/src/components/form/fields/object/Object.tsx +0 -255
- package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +0 -95
- package/src/components/form/fields/radio-group/RadioGroup.tsx +0 -46
- package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
- package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
- package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
- package/src/components/form/fields/rich-text/RichText.stories.tsx +0 -260
- package/src/components/form/fields/rich-text/RichText.tsx +0 -537
- package/src/components/form/fields/schema-definition/CatalogLeafForm.tsx +0 -242
- package/src/components/form/fields/schema-definition/CatalogNodeEditor.tsx +0 -758
- package/src/components/form/fields/schema-definition/Hint.tsx +0 -22
- package/src/components/form/fields/schema-definition/InlineValidationBanner.tsx +0 -138
- package/src/components/form/fields/schema-definition/Loader.tsx +0 -20
- package/src/components/form/fields/schema-definition/MigrationsTab.tsx +0 -187
- package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +0 -286
- package/src/components/form/fields/schema-definition/TableEditor.tsx +0 -155
- package/src/components/form/fields/schema-definition/TablesTab.tsx +0 -138
- package/src/components/form/fields/schema-definition/catalog.ts +0 -237
- package/src/components/form/fields/schema-definition/helpers.ts +0 -90
- package/src/components/form/fields/schema-definition/index.tsx +0 -418
- package/src/components/form/fields/schema-definition/mockCatalog.ts +0 -325
- package/src/components/form/fields/schema-definition/mockDefinition.ts +0 -111
- package/src/components/form/fields/schema-definition/referenceSuggestions.tsx +0 -152
- package/src/components/form/fields/schema-definition/starterTemplate.ts +0 -68
- package/src/components/form/fields/schema-definition/types.ts +0 -185
- package/src/components/form/fields/schema-definition/useSchemaOptionCatalog.ts +0 -49
- package/src/components/form/fields/select/Select.stories.tsx +0 -872
- package/src/components/form/fields/select/Select.tsx +0 -624
- package/src/components/form/fields/select/SelectCollection.tsx +0 -594
- package/src/components/form/fields/string/String.stories.tsx +0 -86
- package/src/components/form/fields/string/String.tsx +0 -43
- package/src/components/form/fields/template/ExampleValueModal.stories.tsx +0 -114
- package/src/components/form/fields/template/ExampleValueModal.tsx +0 -99
- package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +0 -47
- package/src/components/form/fields/template/TemplateField.stories.tsx +0 -1121
- package/src/components/form/fields/template/TemplateField.tsx +0 -1717
- package/src/components/form/fields/template/TemplateText.tsx +0 -115
- package/src/components/form/fields/template/__fixtures__/longExampleValue.ts +0 -7
- package/src/components/form/fields/template/__fixtures__/multiLevelTemplates.json +0 -147
- package/src/components/form/fields/template/__fixtures__/templates.json +0 -83
- package/src/components/form/fields/timeout/Timeout.stories.tsx +0 -228
- package/src/components/form/fields/timeout/Timeout.tsx +0 -87
- package/src/components/form/fields/url/Url.stories.tsx +0 -94
- package/src/components/form/fields/url/Url.tsx +0 -85
- package/src/components/form/index.tsx +0 -47
- package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
- package/src/components/imageLightbox/ImageLightbox.tsx +0 -236
- package/src/components/imageLightbox/index.ts +0 -1
- package/src/components/log/Log.stories.tsx +0 -333
- package/src/components/log/Log.tsx +0 -285
- package/src/components/menu/Menu.stories.tsx +0 -155
- package/src/components/menu/Menu.tsx +0 -312
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +0 -797
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.tsx +0 -105
- package/src/components/qonsoleSmartInput/index.ts +0 -16
- package/src/components/qonsoleSmartInput/qonsoleInserter.ts +0 -77
- package/src/components/qonsoleSmartInput/types.ts +0 -133
- package/src/components/qonsoleSmartInput/useQonsoleSession.ts +0 -124
- package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +0 -62
- package/src/components/searchFilterBar/SearchFilterBar.tsx +0 -144
- package/src/components/searchFilterBar/index.ts +0 -1
- package/src/components/smartEditor/MarkdownDoc.tsx +0 -190
- package/src/components/smartEditor/SmartEditor.stories.tsx +0 -475
- package/src/components/smartEditor/SmartEditor.tsx +0 -808
- package/src/components/smartEditor/__fixtures__/mockLspServer.ts +0 -205
- package/src/components/smartEditor/helpers.ts +0 -217
- package/src/components/smartEditor/index.ts +0 -35
- package/src/components/smartEditor/styling.ts +0 -45
- package/src/components/smartEditor/types.ts +0 -211
- package/src/components/smartEditor/useLspAutocomplete.ts +0 -758
- package/src/components/smartEditor/useLspDiagnosticDecorations.ts +0 -125
- package/src/components/smartEditor/useLspHover.ts +0 -230
- package/src/components/smartEditor/useLspSemanticTokens.ts +0 -298
- package/src/components/smartEditor/useLspSession.ts +0 -231
- package/src/components/smartEditor/useLspSignatureHelp.ts +0 -198
- package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -171
- package/src/components/supportTicket/AttachmentChips.tsx +0 -147
- package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -257
- package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -129
- package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -584
- package/src/components/supportTicket/ReferencePicker.tsx +0 -563
- package/src/components/supportTicket/TicketConversation.stories.tsx +0 -121
- package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
- package/src/components/supportTicket/TicketHeader.tsx +0 -247
- package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
- package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
- package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -354
- package/src/components/supportTicket/TicketReplyBox.tsx +0 -150
- package/src/components/supportTicket/__fixtures__/kindMarks.ts +0 -28
- package/src/components/supportTicket/attachmentAccess.ts +0 -97
- package/src/components/supportTicket/fileToAttachment.ts +0 -24
- package/src/components/supportTicket/index.ts +0 -10
- package/src/components/supportTicket/meta.ts +0 -206
- package/src/components/supportTicket/ticketModel.ts +0 -131
- package/src/components/supportTicket/useLoadedImages.ts +0 -73
- package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -315
- package/src/components/ticketReferences/TicketReferences.tsx +0 -906
- package/src/components/ticketReferences/index.ts +0 -2
- package/src/components/ticketThread/TicketThread.stories.tsx +0 -829
- package/src/components/ticketThread/TicketThread.tsx +0 -719
- package/src/components/ticketThread/index.ts +0 -6
- package/src/contexts/FetchContext.tsx +0 -25
- package/src/contexts/ReqraftContext.tsx +0 -9
- package/src/contexts/StorageContext.tsx +0 -33
- package/src/global.d.ts +0 -4
- package/src/helpers/allowedValues.ts +0 -249
- package/src/helpers/choiceChip.ts +0 -227
- package/src/helpers/common.ts +0 -326
- package/src/helpers/dpqlDetection.ts +0 -209
- package/src/helpers/expressions.ts +0 -140
- package/src/helpers/optionUiTypes.ts +0 -199
- package/src/helpers/options.ts +0 -150
- package/src/helpers/providerValue.ts +0 -125
- package/src/helpers/scrollbar.ts +0 -32
- package/src/helpers/singleLineString.ts +0 -61
- package/src/helpers/templateItems.ts +0 -81
- package/src/helpers/templateText.ts +0 -350
- package/src/helpers/templates.ts +0 -602
- package/src/helpers/validations.ts +0 -2085
- package/src/hooks/useArgSchema.ts +0 -37
- package/src/hooks/useCoarsePointer.ts +0 -30
- package/src/hooks/useFetch/useFetch.stories.tsx +0 -379
- package/src/hooks/useFetch/useFetch.tsx +0 -154
- package/src/hooks/usePhoneViewport.ts +0 -34
- package/src/hooks/useQorusTypes.ts +0 -233
- package/src/hooks/useReqraftProperty.ts +0 -16
- package/src/hooks/useStorage/useStorage.stories.tsx +0 -168
- package/src/hooks/useStorage/useStorage.ts +0 -35
- package/src/hooks/useTemplates.ts +0 -123
- package/src/hooks/useValidation.ts +0 -9
- package/src/hooks/useWebSocket/useWebSocket.ts +0 -224
- package/src/hooks/useWebSocket/useWebsocket.stories.tsx +0 -640
- package/src/hooks/useWhyDidYouUpdate.ts +0 -38
- package/src/index.tsx +0 -86
- package/src/providers/FetchProvider.tsx +0 -40
- package/src/providers/ReqraftProvider.tsx +0 -52
- package/src/providers/StorageProvider.tsx +0 -131
- package/src/stores/currentUser/currentUser.stories.tsx +0 -100
- package/src/stores/currentUser/currentUser.tsx +0 -94
- package/src/stories/Data/fileFieldArgSchema.json +0 -86
- package/src/stories/Tests/utils.ts +0 -320
- package/src/stories/storyNetwork.ts +0 -92
- package/src/stories/tracking.tsx +0 -206
- package/src/tracking/browser/attach.ts +0 -186
- package/src/tracking/browser/env.ts +0 -78
- package/src/tracking/core/consent.ts +0 -37
- package/src/tracking/core/engagement.ts +0 -47
- package/src/tracking/core/experiments.ts +0 -258
- package/src/tracking/core/hash.ts +0 -26
- package/src/tracking/core/ids.ts +0 -25
- package/src/tracking/core/observable.ts +0 -23
- package/src/tracking/core/queue.ts +0 -131
- package/src/tracking/core/sections.ts +0 -166
- package/src/tracking/core/storage.ts +0 -69
- package/src/tracking/core/tracker.ts +0 -417
- package/src/tracking/core/types.ts +0 -162
- package/src/tracking/core/utm.ts +0 -23
- package/src/tracking/index.ts +0 -72
- package/src/tracking/markup.ts +0 -17
- package/src/tracking/react/Experiment.tsx +0 -44
- package/src/tracking/react/TrackingProvider.tsx +0 -56
- package/src/tracking/react/hooks.ts +0 -106
- package/src/tracking/react/index.ts +0 -13
- package/src/tracking/testing.ts +0 -108
- package/src/tracking/ui/ExperimentCard.stories.tsx +0 -296
- package/src/tracking/ui/ExperimentCard.tsx +0 -667
- package/src/tracking/ui/ExperimentsOverlay.stories.tsx +0 -155
- package/src/tracking/ui/ExperimentsOverlay.tsx +0 -437
- package/src/tracking/ui/anchor.ts +0 -180
- package/src/tracking/ui/card.ts +0 -464
- package/src/tracking/ui/client.ts +0 -117
- package/src/tracking/ui/index.ts +0 -77
- package/src/tracking/ui/types.ts +0 -110
- package/src/tracking/ui/useExperimentsAdmin.ts +0 -103
- package/src/types/Form.ts +0 -29
- package/src/types.ts +0 -14
- package/src/utils/datetime.ts +0 -10
- package/src/utils/fetch.ts +0 -457
- package/src/utils/lspClient.ts +0 -711
- package/src/utils/lspClient.types.ts +0 -211
- package/src/utils/queryUnlessCancelled.ts +0 -28
- package/src/utils/websocket.ts +0 -293
- package/vite.config.ts +0 -58
- package/vitest.config.ts +0 -69
|
@@ -1,758 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 Qore Technologies, s.r.o.
|
|
2
|
-
|
|
3
|
-
import { debounce } from 'lodash';
|
|
4
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
-
import { BaseEditor, Transforms } from 'slate';
|
|
6
|
-
import { HistoryEditor } from 'slate-history';
|
|
7
|
-
import { ReactEditor } from 'slate-react';
|
|
8
|
-
import { ILspCompletionItem } from '../../utils/lspClient.types';
|
|
9
|
-
import { mapCompletionKindToIcon } from './helpers';
|
|
10
|
-
import { ISlateConverter, ISlateElement, TCompletionInserter } from './types';
|
|
11
|
-
|
|
12
|
-
const DEFAULT_TRIGGER_CHARS = new Set(['.', ':', ' ']);
|
|
13
|
-
const DEBOUNCE_MS = 150;
|
|
14
|
-
// Defer `isFetching=true` so the "Loading…" stub only shows for genuinely
|
|
15
|
-
// slow responses; sub-250ms responses never set the flag.
|
|
16
|
-
const LOADER_DELAY_MS = 250;
|
|
17
|
-
|
|
18
|
-
const COMPLETION_KIND_LABELS: Record<number, string> = {
|
|
19
|
-
2: 'Methods',
|
|
20
|
-
3: 'Functions',
|
|
21
|
-
5: 'Fields',
|
|
22
|
-
6: 'Variables',
|
|
23
|
-
14: 'Keywords',
|
|
24
|
-
15: 'Snippets',
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const COMPLETION_KIND_CHIPS: Record<number, string> = {
|
|
28
|
-
1: 'Text',
|
|
29
|
-
2: 'Method',
|
|
30
|
-
3: 'Function',
|
|
31
|
-
4: 'Constructor',
|
|
32
|
-
5: 'Field',
|
|
33
|
-
6: 'Variable',
|
|
34
|
-
7: 'Class',
|
|
35
|
-
8: 'Interface',
|
|
36
|
-
9: 'Module',
|
|
37
|
-
10: 'Property',
|
|
38
|
-
11: 'Unit',
|
|
39
|
-
12: 'Value',
|
|
40
|
-
13: 'Enum',
|
|
41
|
-
14: 'Keyword',
|
|
42
|
-
15: 'Snippet',
|
|
43
|
-
16: 'Color',
|
|
44
|
-
17: 'File',
|
|
45
|
-
18: 'Reference',
|
|
46
|
-
19: 'Folder',
|
|
47
|
-
20: 'EnumMember',
|
|
48
|
-
21: 'Constant',
|
|
49
|
-
22: 'Struct',
|
|
50
|
-
23: 'Event',
|
|
51
|
-
24: 'Operator',
|
|
52
|
-
25: 'TypeParameter',
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export interface ICompletionDropdownItem {
|
|
56
|
-
label: string;
|
|
57
|
-
value: string;
|
|
58
|
-
icon?: string;
|
|
59
|
-
description?: string;
|
|
60
|
-
documentation?: ILspCompletionItem['documentation'];
|
|
61
|
-
kindLabel?: string;
|
|
62
|
-
// Non-standard LSP field; Qonsole emits it on mutating verbs.
|
|
63
|
-
warning?: string;
|
|
64
|
-
raw: ILspCompletionItem;
|
|
65
|
-
metadata?: {
|
|
66
|
-
insertTextFormat?: number;
|
|
67
|
-
retrigger?: boolean;
|
|
68
|
-
kind?: number;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface ICompletionGroup {
|
|
73
|
-
label: string;
|
|
74
|
-
items: ICompletionDropdownItem[];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export interface IUseLspAutocompleteOptions {
|
|
78
|
-
/** Function that requests completions at a plain-text offset. */
|
|
79
|
-
getCompletions: (plainText: string, offset: number) => Promise<ILspCompletionItem[]>;
|
|
80
|
-
/** Whether the LSP session is ready to serve requests. */
|
|
81
|
-
isReady: boolean;
|
|
82
|
-
/** Characters that open the dropdown. Defaults to `{., :, space}`. */
|
|
83
|
-
triggerCharacters?: Set<string>;
|
|
84
|
-
/** Converter for Slate ↔ plain text and cursor-offset math. */
|
|
85
|
-
converter: ISlateConverter;
|
|
86
|
-
/**
|
|
87
|
-
* Called when the user selects an item. Wrappers control whether the
|
|
88
|
-
* value is inserted as a tag element, plain text, with re-trigger, etc.
|
|
89
|
-
*/
|
|
90
|
-
inserter: TCompletionInserter;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface IUseLspAutocompleteResult {
|
|
94
|
-
items: ICompletionDropdownItem[];
|
|
95
|
-
groups: ICompletionGroup[];
|
|
96
|
-
isOpen: boolean;
|
|
97
|
-
// True while anchored at a chip (via `openAtChip`); keeps the popover
|
|
98
|
-
// open with a stub even when `items` is empty, unlike normal typing.
|
|
99
|
-
isReplaceMode: boolean;
|
|
100
|
-
isFetching: boolean;
|
|
101
|
-
focusedIndex: number;
|
|
102
|
-
close: () => void;
|
|
103
|
-
onSlateChange: (
|
|
104
|
-
editor: BaseEditor & ReactEditor & HistoryEditor,
|
|
105
|
-
nodes: ISlateElement[]
|
|
106
|
-
) => void;
|
|
107
|
-
onItemSelect: (
|
|
108
|
-
item: ICompletionDropdownItem,
|
|
109
|
-
editor: BaseEditor & ReactEditor & HistoryEditor
|
|
110
|
-
) => void;
|
|
111
|
-
// Open in "replace mode" anchored at an existing tag chip; `chipRect`
|
|
112
|
-
// is the chip's viewport rect, `chipPath` is forwarded to the inserter.
|
|
113
|
-
openAtChip: (
|
|
114
|
-
editor: BaseEditor & ReactEditor & HistoryEditor,
|
|
115
|
-
chipPath: number[],
|
|
116
|
-
chipRect: { left: number; bottom: number }
|
|
117
|
-
) => void;
|
|
118
|
-
// Drops the spurious close Reqore's outside-click detector fires on the
|
|
119
|
-
// same click that opened the popover; without it the chip click would
|
|
120
|
-
// open then immediately close.
|
|
121
|
-
handleExternalClose: (open: boolean) => void;
|
|
122
|
-
// Bumped on every (re)open; used as the ReqorePopover `key` to force a
|
|
123
|
-
// fresh mount so its internal `showing` state stays in sync with ours.
|
|
124
|
-
popoverKey: number;
|
|
125
|
-
position: { top: number; left: number };
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export function useLspAutocomplete(
|
|
129
|
-
opts: IUseLspAutocompleteOptions
|
|
130
|
-
): IUseLspAutocompleteResult {
|
|
131
|
-
const {
|
|
132
|
-
getCompletions,
|
|
133
|
-
isReady,
|
|
134
|
-
triggerCharacters = DEFAULT_TRIGGER_CHARS,
|
|
135
|
-
converter,
|
|
136
|
-
inserter,
|
|
137
|
-
} = opts;
|
|
138
|
-
|
|
139
|
-
const [items, setItems] = useState<ICompletionDropdownItem[]>([]);
|
|
140
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
141
|
-
const [position, setPosition] = useState({ top: 0, left: 0 });
|
|
142
|
-
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
143
|
-
const [isFetching, setIsFetching] = useState(false);
|
|
144
|
-
// Handle for the deferred `setIsFetching(true)`; cleared on resolve or
|
|
145
|
-
// close so the loader never flashes on a fast-resolved request.
|
|
146
|
-
const fetchingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
147
|
-
// Partial token typed since the trigger opened the dropdown; the list
|
|
148
|
-
// narrows to items whose `filterText || label` matches it.
|
|
149
|
-
const [filterPrefix, setFilterPrefix] = useState('');
|
|
150
|
-
const focusedIndexRef = useRef(0);
|
|
151
|
-
const editorRef = useRef<(BaseEditor & ReactEditor & HistoryEditor) | null>(null);
|
|
152
|
-
// "Replace mode": the user clicked a chip and the chosen completion
|
|
153
|
-
// should replace that node. Holds the chip's Slate path, consumed by
|
|
154
|
-
// the inserter via `ctx.replacementPath`.
|
|
155
|
-
const replacingChipPathRef = useRef<number[] | null>(null);
|
|
156
|
-
// Holds a chip-click request made before `isReady`; fired by the effect
|
|
157
|
-
// below once the session connects so the click isn't dropped.
|
|
158
|
-
const pendingChipRequestRef = useRef<{
|
|
159
|
-
plainText: string;
|
|
160
|
-
offset: number;
|
|
161
|
-
} | null>(null);
|
|
162
|
-
// Timestamp of the last `openAtChip`; `handleExternalClose` uses it to
|
|
163
|
-
// suppress the close Reqore fires on the same mousedown that opened it.
|
|
164
|
-
const justOpenedAtChipAtRef = useRef(0);
|
|
165
|
-
const [isReplaceMode, setIsReplaceMode] = useState(false);
|
|
166
|
-
// See `popoverKey` in the result interface — forces a popover re-mount.
|
|
167
|
-
const [popoverKey, setPopoverKey] = useState(0);
|
|
168
|
-
|
|
169
|
-
useEffect(() => {
|
|
170
|
-
focusedIndexRef.current = focusedIndex;
|
|
171
|
-
}, [focusedIndex]);
|
|
172
|
-
|
|
173
|
-
// Server completions omit the sigil from `label`/`filterText` (Qonsole
|
|
174
|
-
// returns `list` not `/list`, DPQL `name` not `@name`), so strip it off
|
|
175
|
-
// both sides before matching or the filter hides everything after the
|
|
176
|
-
// trigger char.
|
|
177
|
-
const filteredItems = useMemo(() => {
|
|
178
|
-
if (!filterPrefix) return items;
|
|
179
|
-
// Strip the leading sigil AND any member-access/namespace prefix up to
|
|
180
|
-
// the last `.`/`:`. The token deliberately includes `.`/`:` (for paths
|
|
181
|
-
// like `$data:state.field`), but filtering wants only the trailing
|
|
182
|
-
// word — else after `arr.` typing `for` yields needle `arr.for`, which
|
|
183
|
-
// matches no `forEach`-style label and hides every suggestion.
|
|
184
|
-
const segment = filterPrefix
|
|
185
|
-
.replace(/^[@$/-]+/, '')
|
|
186
|
-
.replace(/^.*[.:]/, '');
|
|
187
|
-
const needle = segment.toLowerCase();
|
|
188
|
-
if (!needle) return items;
|
|
189
|
-
return items.filter((item) => {
|
|
190
|
-
const haystack = (item.raw.filterText ?? item.label)
|
|
191
|
-
.toLowerCase()
|
|
192
|
-
.replace(/^[@$/-]+/, '');
|
|
193
|
-
return haystack.startsWith(needle) || haystack.includes(needle);
|
|
194
|
-
});
|
|
195
|
-
}, [items, filterPrefix]);
|
|
196
|
-
|
|
197
|
-
useEffect(() => {
|
|
198
|
-
if (focusedIndex >= filteredItems.length) {
|
|
199
|
-
setFocusedIndex(Math.max(0, filteredItems.length - 1));
|
|
200
|
-
}
|
|
201
|
-
}, [filteredItems.length, focusedIndex]);
|
|
202
|
-
|
|
203
|
-
const groups = useMemo((): ICompletionGroup[] => {
|
|
204
|
-
if (filteredItems.length === 0) return [];
|
|
205
|
-
|
|
206
|
-
// When the server populates `sortText` it has already ranked items;
|
|
207
|
-
// use the flat list directly rather than re-ordering across kinds.
|
|
208
|
-
// Qonsole takes this path; DPQL has no sortText and falls through.
|
|
209
|
-
const hasSortText = filteredItems.some((i) => i.raw.sortText);
|
|
210
|
-
if (hasSortText) {
|
|
211
|
-
return [{ label: '', items: filteredItems }];
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
const groupMap = new Map<string, ICompletionDropdownItem[]>();
|
|
215
|
-
for (const item of filteredItems) {
|
|
216
|
-
const kind = item.metadata?.kind;
|
|
217
|
-
const groupLabel = (kind && COMPLETION_KIND_LABELS[kind]) || 'Other';
|
|
218
|
-
if (!groupMap.has(groupLabel)) {
|
|
219
|
-
groupMap.set(groupLabel, []);
|
|
220
|
-
}
|
|
221
|
-
groupMap.get(groupLabel)!.push(item);
|
|
222
|
-
}
|
|
223
|
-
if (groupMap.size <= 1) {
|
|
224
|
-
return [{ label: '', items: filteredItems }];
|
|
225
|
-
}
|
|
226
|
-
return Array.from(groupMap.entries()).map(([label, groupItems]) => ({
|
|
227
|
-
label,
|
|
228
|
-
items: groupItems,
|
|
229
|
-
}));
|
|
230
|
-
}, [filteredItems]);
|
|
231
|
-
|
|
232
|
-
// Fires the LSP request and commits results into state. Separate from
|
|
233
|
-
// the debounced wrapper so imperative callers (`openAtChip`) can bypass
|
|
234
|
-
// the typing debounce.
|
|
235
|
-
const performCompletionRequest = useCallback(
|
|
236
|
-
async (
|
|
237
|
-
plainText: string,
|
|
238
|
-
offset: number,
|
|
239
|
-
opts: { eager?: boolean } = {}
|
|
240
|
-
) => {
|
|
241
|
-
// `eager` (default) opens the popover immediately, for explicit
|
|
242
|
-
// triggers where items are coming. Autosuggest passes `eager: false`
|
|
243
|
-
// so the popover stays closed until items arrive and doesn't flicker
|
|
244
|
-
// in no-suggestion spots (inside a string, a dead-end identifier).
|
|
245
|
-
const { eager = true } = opts;
|
|
246
|
-
if (!isReady) return;
|
|
247
|
-
// Re-measure the caret now that the debounce expired and Slate has
|
|
248
|
-
// committed the char to the DOM. The earlier measure in
|
|
249
|
-
// `onSlateChangeImpl` can fire before the DOM commit, where
|
|
250
|
-
// `toDOMRange` throws or returns a stale range and the popover lands
|
|
251
|
-
// at {top: 0, left: 0}.
|
|
252
|
-
const editor = editorRef.current;
|
|
253
|
-
if (editor && editor.selection) {
|
|
254
|
-
try {
|
|
255
|
-
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
256
|
-
const rect = domRange.getBoundingClientRect();
|
|
257
|
-
// A 0,0,0,0 rect means the DOM still isn't ready — keep the
|
|
258
|
-
// earlier measure rather than slamming back to origin.
|
|
259
|
-
if (rect.width || rect.height || rect.left || rect.top) {
|
|
260
|
-
setPosition({ left: rect.left, top: rect.bottom });
|
|
261
|
-
}
|
|
262
|
-
} catch {
|
|
263
|
-
// Editor unmounted mid-request.
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
if (eager) {
|
|
267
|
-
setIsOpen(true);
|
|
268
|
-
if (fetchingTimerRef.current !== null) {
|
|
269
|
-
clearTimeout(fetchingTimerRef.current);
|
|
270
|
-
}
|
|
271
|
-
fetchingTimerRef.current = setTimeout(() => {
|
|
272
|
-
setIsFetching(true);
|
|
273
|
-
fetchingTimerRef.current = null;
|
|
274
|
-
}, LOADER_DELAY_MS);
|
|
275
|
-
}
|
|
276
|
-
try {
|
|
277
|
-
const lspItems = await getCompletions(plainText, offset);
|
|
278
|
-
if (lspItems.length === 0) {
|
|
279
|
-
setItems([]);
|
|
280
|
-
// Replace mode keeps the popover open to show "No alternatives".
|
|
281
|
-
if (!replacingChipPathRef.current) {
|
|
282
|
-
setIsOpen(false);
|
|
283
|
-
}
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
// Sort by `sortText` when present (Qonsole encodes rank into it);
|
|
287
|
-
// otherwise preserve server order, as DPQL doesn't populate it.
|
|
288
|
-
const sortedLspItems = lspItems.some((i) => i.sortText)
|
|
289
|
-
? [...lspItems].sort((a, b) =>
|
|
290
|
-
(a.sortText ?? a.label).localeCompare(b.sortText ?? b.label)
|
|
291
|
-
)
|
|
292
|
-
: lspItems;
|
|
293
|
-
|
|
294
|
-
const mapped: ICompletionDropdownItem[] = sortedLspItems.map((item) => {
|
|
295
|
-
const insertText = item.insertText || item.label;
|
|
296
|
-
return {
|
|
297
|
-
label: item.label,
|
|
298
|
-
value: insertText,
|
|
299
|
-
icon: mapCompletionKindToIcon(item.kind),
|
|
300
|
-
description: item.detail,
|
|
301
|
-
documentation: item.documentation,
|
|
302
|
-
kindLabel:
|
|
303
|
-
item.kind !== undefined
|
|
304
|
-
? COMPLETION_KIND_CHIPS[item.kind]
|
|
305
|
-
: undefined,
|
|
306
|
-
warning: item.warning,
|
|
307
|
-
raw: item,
|
|
308
|
-
metadata: {
|
|
309
|
-
insertTextFormat: item.insertTextFormat,
|
|
310
|
-
retrigger: insertText.endsWith(':'),
|
|
311
|
-
kind: item.kind,
|
|
312
|
-
},
|
|
313
|
-
};
|
|
314
|
-
});
|
|
315
|
-
setItems(mapped);
|
|
316
|
-
setFocusedIndex(0);
|
|
317
|
-
setIsOpen(true);
|
|
318
|
-
} catch {
|
|
319
|
-
setItems([]);
|
|
320
|
-
setIsOpen(false);
|
|
321
|
-
} finally {
|
|
322
|
-
if (fetchingTimerRef.current !== null) {
|
|
323
|
-
clearTimeout(fetchingTimerRef.current);
|
|
324
|
-
fetchingTimerRef.current = null;
|
|
325
|
-
}
|
|
326
|
-
setIsFetching(false);
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
[getCompletions, isReady]
|
|
330
|
-
);
|
|
331
|
-
|
|
332
|
-
const requestCompletions = useMemo(
|
|
333
|
-
() => debounce(performCompletionRequest, DEBOUNCE_MS),
|
|
334
|
-
[performCompletionRequest]
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
useEffect(() => {
|
|
338
|
-
return () => {
|
|
339
|
-
requestCompletions.cancel();
|
|
340
|
-
};
|
|
341
|
-
}, [requestCompletions]);
|
|
342
|
-
|
|
343
|
-
const close = useCallback(() => {
|
|
344
|
-
setIsOpen(false);
|
|
345
|
-
setItems([]);
|
|
346
|
-
setFocusedIndex(0);
|
|
347
|
-
setFilterPrefix('');
|
|
348
|
-
setIsReplaceMode(false);
|
|
349
|
-
setIsFetching(false);
|
|
350
|
-
if (fetchingTimerRef.current !== null) {
|
|
351
|
-
clearTimeout(fetchingTimerRef.current);
|
|
352
|
-
fetchingTimerRef.current = null;
|
|
353
|
-
}
|
|
354
|
-
replacingChipPathRef.current = null;
|
|
355
|
-
pendingChipRequestRef.current = null;
|
|
356
|
-
requestCompletions.cancel();
|
|
357
|
-
}, [requestCompletions]);
|
|
358
|
-
|
|
359
|
-
const positionTrigger = useCallback(
|
|
360
|
-
(editor: BaseEditor & ReactEditor & HistoryEditor) => {
|
|
361
|
-
if (!editor.selection) return;
|
|
362
|
-
try {
|
|
363
|
-
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
364
|
-
const rect = domRange.getBoundingClientRect();
|
|
365
|
-
// Viewport coordinates (+ `position: fixed` on the wrapper) avoid
|
|
366
|
-
// parent-offset math that broke when the editor sat in a padded
|
|
367
|
-
// panel and Popper overlapped the popover onto the input.
|
|
368
|
-
setPosition({
|
|
369
|
-
left: rect.left,
|
|
370
|
-
top: rect.bottom,
|
|
371
|
-
});
|
|
372
|
-
} catch {
|
|
373
|
-
// Editor may not be focused / mounted.
|
|
374
|
-
}
|
|
375
|
-
},
|
|
376
|
-
[]
|
|
377
|
-
);
|
|
378
|
-
|
|
379
|
-
// Scan back from the cursor to the start offset of the current token
|
|
380
|
-
// (a word sequence optionally prefixed with `@` / `$` / `/`).
|
|
381
|
-
const findTokenStart = useCallback(
|
|
382
|
-
(plainText: string, cursorOffset: number): number => {
|
|
383
|
-
let i = cursorOffset - 1;
|
|
384
|
-
while (i >= 0 && /[\w.:{}-]/.test(plainText[i])) {
|
|
385
|
-
i--;
|
|
386
|
-
}
|
|
387
|
-
if (i >= 0 && /[@$/-]/.test(plainText[i])) {
|
|
388
|
-
i--;
|
|
389
|
-
}
|
|
390
|
-
return i + 1;
|
|
391
|
-
},
|
|
392
|
-
[]
|
|
393
|
-
);
|
|
394
|
-
|
|
395
|
-
// Live ref to the change handler defined below — selectItem's retrigger
|
|
396
|
-
// path runs in a timeout and must see the CURRENT impl, not whatever its
|
|
397
|
-
// own (intentionally narrow) deps closed over. Same workaround as
|
|
398
|
-
// `stableOnTagClick` in SmartEditor.
|
|
399
|
-
const onSlateChangeImplRef = useRef<
|
|
400
|
-
(editor: BaseEditor & ReactEditor & HistoryEditor, nodes: ISlateElement[]) => void
|
|
401
|
-
>(() => undefined);
|
|
402
|
-
|
|
403
|
-
const selectItem = useCallback(
|
|
404
|
-
(item: ICompletionDropdownItem) => {
|
|
405
|
-
const editor = editorRef.current;
|
|
406
|
-
if (!editor) return;
|
|
407
|
-
const replacementPath = replacingChipPathRef.current;
|
|
408
|
-
// The typing path needs a live selection so the inserter knows how
|
|
409
|
-
// much partial token to delete; replace mode works off a path.
|
|
410
|
-
if (!editor.selection && !replacementPath) return;
|
|
411
|
-
|
|
412
|
-
const nodes = editor.children as ISlateElement[];
|
|
413
|
-
const plainText = converter.fromSlateNodes(nodes);
|
|
414
|
-
const cursorOffset = editor.selection
|
|
415
|
-
? converter.selectionToOffset(
|
|
416
|
-
nodes,
|
|
417
|
-
editor.selection.anchor.path as number[],
|
|
418
|
-
editor.selection.anchor.offset
|
|
419
|
-
)
|
|
420
|
-
: converter.selectionToOffset(nodes, replacementPath as number[], 0);
|
|
421
|
-
|
|
422
|
-
inserter(item.raw, editor, {
|
|
423
|
-
plainText,
|
|
424
|
-
cursorOffset,
|
|
425
|
-
replacementPath: replacementPath ?? undefined,
|
|
426
|
-
});
|
|
427
|
-
close();
|
|
428
|
-
// Re-trigger completions for partial items (e.g. `$timestamp:` shows
|
|
429
|
-
// sub-completions for the value).
|
|
430
|
-
if (item.metadata?.retrigger) {
|
|
431
|
-
setTimeout(() => {
|
|
432
|
-
const newNodes = editor.children as ISlateElement[];
|
|
433
|
-
onSlateChangeImplRef.current(editor, newNodes);
|
|
434
|
-
}, 50);
|
|
435
|
-
}
|
|
436
|
-
},
|
|
437
|
-
[close, inserter, converter]
|
|
438
|
-
);
|
|
439
|
-
|
|
440
|
-
useEffect(() => {
|
|
441
|
-
// Keyboard nav operates on the filtered list, not the raw items.
|
|
442
|
-
if (!isOpen || filteredItems.length === 0) return undefined;
|
|
443
|
-
const handleKeyDown = (e: KeyboardEvent) => {
|
|
444
|
-
switch (e.key) {
|
|
445
|
-
case 'ArrowDown':
|
|
446
|
-
e.preventDefault();
|
|
447
|
-
e.stopPropagation();
|
|
448
|
-
setFocusedIndex((prev) => Math.min(prev + 1, filteredItems.length - 1));
|
|
449
|
-
break;
|
|
450
|
-
case 'ArrowUp':
|
|
451
|
-
e.preventDefault();
|
|
452
|
-
e.stopPropagation();
|
|
453
|
-
setFocusedIndex((prev) => Math.max(prev - 1, 0));
|
|
454
|
-
break;
|
|
455
|
-
case 'Enter':
|
|
456
|
-
case 'Tab': {
|
|
457
|
-
e.preventDefault();
|
|
458
|
-
e.stopPropagation();
|
|
459
|
-
const item = filteredItems[focusedIndexRef.current];
|
|
460
|
-
if (item && editorRef.current) {
|
|
461
|
-
selectItem(item);
|
|
462
|
-
}
|
|
463
|
-
break;
|
|
464
|
-
}
|
|
465
|
-
case 'Escape':
|
|
466
|
-
e.preventDefault();
|
|
467
|
-
e.stopPropagation();
|
|
468
|
-
close();
|
|
469
|
-
break;
|
|
470
|
-
default: {
|
|
471
|
-
// `commitCharacters`: typing a commit char accepts the item and
|
|
472
|
-
// inserts the char (VS Code semantics).
|
|
473
|
-
if (e.key.length !== 1) break;
|
|
474
|
-
const focusedItem = filteredItems[focusedIndexRef.current];
|
|
475
|
-
const commits = focusedItem?.raw.commitCharacters;
|
|
476
|
-
if (!commits || !commits.includes(e.key)) break;
|
|
477
|
-
const editor = editorRef.current;
|
|
478
|
-
if (!editor) break;
|
|
479
|
-
e.preventDefault();
|
|
480
|
-
e.stopPropagation();
|
|
481
|
-
// Don't double-insert when the server's edit already ends with
|
|
482
|
-
// the committed char (e.g. `--limit=` for an `=`-committed flag).
|
|
483
|
-
const inserted =
|
|
484
|
-
focusedItem.raw.textEdit?.newText ??
|
|
485
|
-
focusedItem.raw.insertText ??
|
|
486
|
-
focusedItem.raw.label;
|
|
487
|
-
selectItem(focusedItem);
|
|
488
|
-
if (!inserted.endsWith(e.key)) {
|
|
489
|
-
Transforms.insertText(editor, e.key);
|
|
490
|
-
}
|
|
491
|
-
break;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
};
|
|
495
|
-
document.addEventListener('keydown', handleKeyDown, true);
|
|
496
|
-
return () => document.removeEventListener('keydown', handleKeyDown, true);
|
|
497
|
-
}, [isOpen, filteredItems, close, selectItem]);
|
|
498
|
-
|
|
499
|
-
/**
|
|
500
|
-
* Opens, narrows or closes the completions for what the editor holds at its caret, after a content
|
|
501
|
-
* edit: a trigger character just typed, typing inside a sigil token, narrowing an open list, or
|
|
502
|
-
* autosuggest inside a bare identifier.
|
|
503
|
-
*/
|
|
504
|
-
const completeAtCaret = useCallback(
|
|
505
|
-
(editor: BaseEditor & ReactEditor & HistoryEditor, nodes: ISlateElement[]) => {
|
|
506
|
-
if (!editor.selection) {
|
|
507
|
-
close();
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
const { anchor } = editor.selection;
|
|
511
|
-
const plainText = converter.fromSlateNodes(nodes);
|
|
512
|
-
const cursorOffset = converter.selectionToOffset(
|
|
513
|
-
nodes,
|
|
514
|
-
anchor.path as number[],
|
|
515
|
-
anchor.offset
|
|
516
|
-
);
|
|
517
|
-
const charBefore = cursorOffset > 0 ? plainText[cursorOffset - 1] : '';
|
|
518
|
-
|
|
519
|
-
// After accepting a tag completion the cursor sits at offset 0 of a
|
|
520
|
-
// fresh text node right after the tag, which in plain text looks
|
|
521
|
-
// mid-`@field` token and would re-fire completions. Detect it via
|
|
522
|
-
// Slate structure (prev sibling is a `tag` element) and don't reopen.
|
|
523
|
-
const cursorPath = anchor.path as number[];
|
|
524
|
-
if (
|
|
525
|
-
anchor.offset === 0 &&
|
|
526
|
-
cursorPath.length === 2 &&
|
|
527
|
-
cursorPath[1] > 0
|
|
528
|
-
) {
|
|
529
|
-
const paragraph = nodes[cursorPath[0]];
|
|
530
|
-
const prevSibling = paragraph?.children[cursorPath[1] - 1];
|
|
531
|
-
if (
|
|
532
|
-
prevSibling &&
|
|
533
|
-
'type' in prevSibling &&
|
|
534
|
-
(prevSibling as ISlateElement).type === 'tag'
|
|
535
|
-
) {
|
|
536
|
-
if (isOpen) {
|
|
537
|
-
close();
|
|
538
|
-
}
|
|
539
|
-
return;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
if (triggerCharacters.has(charBefore)) {
|
|
544
|
-
setFilterPrefix('');
|
|
545
|
-
positionTrigger(editor);
|
|
546
|
-
requestCompletions(plainText, cursorOffset);
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
// Typing inside a sigil-prefixed token.
|
|
551
|
-
const tokenStart = findTokenStart(plainText, cursorOffset);
|
|
552
|
-
const tokenPrefix = plainText[tokenStart];
|
|
553
|
-
if (tokenPrefix && /[@$/]/.test(tokenPrefix)) {
|
|
554
|
-
setFilterPrefix(plainText.slice(tokenStart, cursorOffset));
|
|
555
|
-
positionTrigger(editor);
|
|
556
|
-
requestCompletions(plainText, cursorOffset);
|
|
557
|
-
return;
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
// Dropdown open and typing alphanumeric — keep narrowing.
|
|
561
|
-
if (isOpen && /\w/.test(charBefore)) {
|
|
562
|
-
setFilterPrefix(plainText.slice(tokenStart, cursorOffset));
|
|
563
|
-
positionTrigger(editor);
|
|
564
|
-
requestCompletions(plainText, cursorOffset);
|
|
565
|
-
return;
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
// Autosuggest inside a bare identifier: quiet request. The DPQL
|
|
569
|
-
// server is position-aware — it returns `[]` inside strings etc., so
|
|
570
|
-
// `eager: false` keeps the dropdown from flickering where there's
|
|
571
|
-
// nothing to suggest.
|
|
572
|
-
if (/\w/.test(charBefore) && tokenPrefix && /\w/.test(tokenPrefix)) {
|
|
573
|
-
setFilterPrefix(plainText.slice(tokenStart, cursorOffset));
|
|
574
|
-
positionTrigger(editor);
|
|
575
|
-
requestCompletions(plainText, cursorOffset, { eager: false });
|
|
576
|
-
return;
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
close();
|
|
580
|
-
},
|
|
581
|
-
[isOpen, close, findTokenStart, positionTrigger, requestCompletions, triggerCharacters, converter]
|
|
582
|
-
);
|
|
583
|
-
|
|
584
|
-
/* An edit made before the session is ready - typing `$` or `@` while the connection is still being
|
|
585
|
-
made, or its context bound - would otherwise be dropped: the list is closed and nothing asks again,
|
|
586
|
-
so the trigger the author typed never opens anything. The editor is kept, and once the session is
|
|
587
|
-
ready the completions are asked for what it holds then, as for a chip click (see
|
|
588
|
-
`pendingChipRequestRef`). */
|
|
589
|
-
const pendingTypingRef = useRef<(BaseEditor & ReactEditor & HistoryEditor) | null>(null);
|
|
590
|
-
|
|
591
|
-
const onSlateChangeImpl = useCallback(
|
|
592
|
-
(
|
|
593
|
-
editor: BaseEditor & ReactEditor & HistoryEditor,
|
|
594
|
-
nodes: ISlateElement[]
|
|
595
|
-
) => {
|
|
596
|
-
editorRef.current = editor;
|
|
597
|
-
if (!editor.selection || !isReady) {
|
|
598
|
-
// Don't tear down replace mode just because the click that
|
|
599
|
-
// opened it momentarily left the selection null — clicking a
|
|
600
|
-
// void inline can do that.
|
|
601
|
-
if (replacingChipPathRef.current) return;
|
|
602
|
-
// a content edit before the session is ready is answered once it is (see `pendingTypingRef`)
|
|
603
|
-
if (editor.selection && editor.operations.some((op) => op.type !== 'set_selection')) {
|
|
604
|
-
pendingTypingRef.current = editor;
|
|
605
|
-
}
|
|
606
|
-
close();
|
|
607
|
-
return;
|
|
608
|
-
}
|
|
609
|
-
pendingTypingRef.current = null;
|
|
610
|
-
// `onChange` fires for content edits AND selection-only changes
|
|
611
|
-
// (cursor moves, click-to-focus). Only OPEN on content edits — else
|
|
612
|
-
// clicking after a trigger char (e.g. the space in `/list services `)
|
|
613
|
-
// pops the dropdown without the user typing. An all-`set_selection`
|
|
614
|
-
// op batch is selection-only.
|
|
615
|
-
const isContentChange = editor.operations.some(
|
|
616
|
-
(op) => op.type !== 'set_selection'
|
|
617
|
-
);
|
|
618
|
-
if (!isContentChange) {
|
|
619
|
-
// Replace mode anchors on a chip; the selection echo from the
|
|
620
|
-
// opening click must not close it (outside-click handler does).
|
|
621
|
-
if (isOpen && !replacingChipPathRef.current) {
|
|
622
|
-
close();
|
|
623
|
-
}
|
|
624
|
-
return;
|
|
625
|
-
}
|
|
626
|
-
// A content edit in replace mode means the user typed instead of
|
|
627
|
-
// picking a replacement — fall back to normal flow.
|
|
628
|
-
if (replacingChipPathRef.current) {
|
|
629
|
-
close();
|
|
630
|
-
return;
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
completeAtCaret(editor, nodes);
|
|
634
|
-
},
|
|
635
|
-
[isReady, isOpen, close, completeAtCaret]
|
|
636
|
-
);
|
|
637
|
-
|
|
638
|
-
// Answer an edit made before the session was ready, for what the editor holds now.
|
|
639
|
-
useEffect(() => {
|
|
640
|
-
const editor = pendingTypingRef.current;
|
|
641
|
-
if (!isReady || !editor) return;
|
|
642
|
-
pendingTypingRef.current = null;
|
|
643
|
-
completeAtCaret(editor, editor.children as ISlateElement[]);
|
|
644
|
-
}, [isReady, completeAtCaret]);
|
|
645
|
-
onSlateChangeImplRef.current = onSlateChangeImpl;
|
|
646
|
-
|
|
647
|
-
const onItemSelect = useCallback(
|
|
648
|
-
(
|
|
649
|
-
item: ICompletionDropdownItem,
|
|
650
|
-
editor: BaseEditor & ReactEditor & HistoryEditor
|
|
651
|
-
) => {
|
|
652
|
-
editorRef.current = editor;
|
|
653
|
-
selectItem(item);
|
|
654
|
-
},
|
|
655
|
-
[selectItem]
|
|
656
|
-
);
|
|
657
|
-
|
|
658
|
-
// Imperative entry for the "replace this chip" flow. Anchors at the
|
|
659
|
-
// chip's viewport rect and fires a request immediately, bypassing the
|
|
660
|
-
// typing debounce.
|
|
661
|
-
const openAtChip = useCallback(
|
|
662
|
-
(
|
|
663
|
-
editor: BaseEditor & ReactEditor & HistoryEditor,
|
|
664
|
-
chipPath: number[],
|
|
665
|
-
chipRect: { left: number; bottom: number }
|
|
666
|
-
) => {
|
|
667
|
-
// Clicking the chip the dropdown is already anchored to closes it;
|
|
668
|
-
// without this the outside-click suppression below re-opens it on
|
|
669
|
-
// every chip click.
|
|
670
|
-
const prevPath = replacingChipPathRef.current;
|
|
671
|
-
if (
|
|
672
|
-
isOpen &&
|
|
673
|
-
prevPath &&
|
|
674
|
-
prevPath.length === chipPath.length &&
|
|
675
|
-
prevPath.every((seg, i) => seg === chipPath[i])
|
|
676
|
-
) {
|
|
677
|
-
close();
|
|
678
|
-
return;
|
|
679
|
-
}
|
|
680
|
-
editorRef.current = editor;
|
|
681
|
-
replacingChipPathRef.current = chipPath;
|
|
682
|
-
justOpenedAtChipAtRef.current = Date.now();
|
|
683
|
-
setFilterPrefix('');
|
|
684
|
-
setPosition({ left: chipRect.left, top: chipRect.bottom });
|
|
685
|
-
// Pre-open for immediate feedback even before the LSP is ready (the
|
|
686
|
-
// popover shows a "Connecting…" stub); items populate on response.
|
|
687
|
-
setItems([]);
|
|
688
|
-
setFocusedIndex(0);
|
|
689
|
-
setIsReplaceMode(true);
|
|
690
|
-
setIsOpen(true);
|
|
691
|
-
setPopoverKey((k) => k + 1);
|
|
692
|
-
const nodes = editor.children as ISlateElement[];
|
|
693
|
-
const plainText = converter.fromSlateNodes(nodes);
|
|
694
|
-
// Request at the END of the chip's span — the natural "what could
|
|
695
|
-
// complete this token" position, so the server returns swappable
|
|
696
|
-
// candidates.
|
|
697
|
-
const chipChildIdx = chipPath[chipPath.length - 1];
|
|
698
|
-
const paragraph = nodes[chipPath[0]];
|
|
699
|
-
const chipNode = paragraph?.children?.[chipChildIdx];
|
|
700
|
-
const chipText =
|
|
701
|
-
chipNode && 'value' in chipNode
|
|
702
|
-
? String((chipNode as ISlateElement).value ?? '')
|
|
703
|
-
: '';
|
|
704
|
-
const chipStart = converter.selectionToOffset(nodes, chipPath, 0);
|
|
705
|
-
const chipEnd = chipStart + chipText.length;
|
|
706
|
-
if (isReady) {
|
|
707
|
-
performCompletionRequest(plainText, chipEnd);
|
|
708
|
-
} else {
|
|
709
|
-
pendingChipRequestRef.current = { plainText, offset: chipEnd };
|
|
710
|
-
}
|
|
711
|
-
},
|
|
712
|
-
[isReady, isOpen, close, converter, performCompletionRequest]
|
|
713
|
-
);
|
|
714
|
-
|
|
715
|
-
const handleExternalClose = useCallback(
|
|
716
|
-
(open: boolean) => {
|
|
717
|
-
if (open) return;
|
|
718
|
-
// Within ~300ms of `openAtChip`, this close is the popover reacting
|
|
719
|
-
// to the same mousedown that opened it — ignore.
|
|
720
|
-
if (Date.now() - justOpenedAtChipAtRef.current < 300) {
|
|
721
|
-
return;
|
|
722
|
-
}
|
|
723
|
-
close();
|
|
724
|
-
},
|
|
725
|
-
[close]
|
|
726
|
-
);
|
|
727
|
-
|
|
728
|
-
// Fire a deferred chip-click request once the session connects — covers
|
|
729
|
-
// a click made during the initialize handshake.
|
|
730
|
-
useEffect(() => {
|
|
731
|
-
if (
|
|
732
|
-
isReady &&
|
|
733
|
-
pendingChipRequestRef.current &&
|
|
734
|
-
replacingChipPathRef.current
|
|
735
|
-
) {
|
|
736
|
-
const { plainText, offset } = pendingChipRequestRef.current;
|
|
737
|
-
pendingChipRequestRef.current = null;
|
|
738
|
-
performCompletionRequest(plainText, offset);
|
|
739
|
-
}
|
|
740
|
-
}, [isReady, performCompletionRequest]);
|
|
741
|
-
|
|
742
|
-
return {
|
|
743
|
-
// Expose the post-filter list as `items`; `groups` is filter-derived too.
|
|
744
|
-
items: filteredItems,
|
|
745
|
-
groups,
|
|
746
|
-
isOpen,
|
|
747
|
-
isReplaceMode,
|
|
748
|
-
isFetching,
|
|
749
|
-
focusedIndex,
|
|
750
|
-
close,
|
|
751
|
-
onSlateChange: onSlateChangeImpl,
|
|
752
|
-
onItemSelect,
|
|
753
|
-
openAtChip,
|
|
754
|
-
handleExternalClose,
|
|
755
|
-
popoverKey,
|
|
756
|
-
position,
|
|
757
|
-
};
|
|
758
|
-
}
|