@qoretechnologies/reqraft 0.10.55-pr.124.g77dd26c → 0.10.55
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/.claude/CLAUDE.md +25 -0
- package/.tasks/INDEX.md +1 -0
- package/.tasks/STORY_NETWORK_ISOLATION.md +98 -0
- package/README.md +1 -1
- package/design/FORM_ENGINE_COMPACT.md +34 -0
- package/design/FORM_ENGINE_EXPRESSIONS.md +110 -0
- package/design/FORM_ENGINE_FIELD_MIGRATION.md +155 -1
- package/design/IDE_INTEGRATION.md +13 -0
- package/design/RENDER_EXPRESSION_TRANSPORT.md +76 -10
- package/design/SELECT_DIALOG_FLOOR.md +86 -0
- package/design/SMART_EDITOR_UX.md +21 -0
- package/design/UNAVAILABLE_ALLOWED_VALUES.md +226 -0
- package/dist/components/composer/Composer.d.ts +8 -3
- package/dist/components/composer/Composer.d.ts.map +1 -1
- 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 +3 -3
- package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts +6 -0
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlHelpers.js +21 -2
- package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlProbe.d.ts +37 -0
- package/dist/components/dpqlEditor/dpqlProbe.d.ts.map +1 -0
- package/dist/components/dpqlEditor/dpqlProbe.js +203 -0
- package/dist/components/dpqlEditor/dpqlProbe.js.map +1 -0
- package/dist/components/dpqlEditor/dpqlTags.d.ts +8 -0
- package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlTags.js +5 -1
- package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
- package/dist/components/dpqlEditor/index.d.ts +4 -0
- package/dist/components/dpqlEditor/index.d.ts.map +1 -1
- package/dist/components/dpqlEditor/index.js +5 -1
- package/dist/components/dpqlEditor/index.js.map +1 -1
- package/dist/components/dpqlEditor/types.d.ts +42 -2
- package/dist/components/dpqlEditor/types.d.ts.map +1 -1
- package/dist/components/dpqlEditor/types.js +0 -4
- package/dist/components/dpqlEditor/types.js.map +1 -1
- package/dist/components/dpqlEditor/useDpqlProbe.d.ts +4 -0
- package/dist/components/dpqlEditor/useDpqlProbe.d.ts.map +1 -0
- package/dist/components/dpqlEditor/useDpqlProbe.js +29 -0
- package/dist/components/dpqlEditor/useDpqlProbe.js.map +1 -0
- package/dist/components/dpqlEditor/useDpqlSession.d.ts +5 -2
- package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
- package/dist/components/dpqlEditor/useDpqlSession.js +8 -2
- 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 +414 -128
- 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 +5 -2
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +273 -22
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +669 -192
- package/dist/components/form/engine/FormEngine.js.map +1 -1
- package/dist/components/form/engine/FormFieldsSkeleton.d.ts +48 -0
- package/dist/components/form/engine/FormFieldsSkeleton.d.ts.map +1 -0
- package/dist/components/form/engine/FormFieldsSkeleton.js +41 -0
- package/dist/components/form/engine/FormFieldsSkeleton.js.map +1 -0
- package/dist/components/form/engine/OptionFieldMessages.d.ts +108 -2
- package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
- package/dist/components/form/engine/OptionFieldMessages.js +203 -13
- package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
- package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
- package/dist/components/form/engine/_structuredData/SchemaDataView.js +68 -5
- package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +15 -1
- 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.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +55 -29
- package/dist/components/form/engine/compactRowStyles.js.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.d.ts +1 -0
- package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
- package/dist/components/form/engine/optionActions.d.ts +37 -1
- package/dist/components/form/engine/optionActions.d.ts.map +1 -1
- package/dist/components/form/engine/optionActions.js +71 -1
- package/dist/components/form/engine/optionActions.js.map +1 -1
- package/dist/components/form/engine/optionsContext.d.ts +22 -0
- package/dist/components/form/engine/optionsContext.d.ts.map +1 -0
- package/dist/components/form/engine/optionsContext.js +20 -0
- package/dist/components/form/engine/optionsContext.js.map +1 -0
- package/dist/components/form/engine/readFirst.d.ts +42 -1
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +76 -8
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/engine/rendererTypes.d.ts +42 -3
- package/dist/components/form/engine/rendererTypes.d.ts.map +1 -1
- package/dist/components/form/engine/rendererTypes.js +3 -1
- package/dist/components/form/engine/rendererTypes.js.map +1 -1
- package/dist/components/form/engine/rowFocus.d.ts +30 -0
- package/dist/components/form/engine/rowFocus.d.ts.map +1 -0
- package/dist/components/form/engine/rowFocus.js +93 -0
- package/dist/components/form/engine/rowFocus.js.map +1 -0
- package/dist/components/form/engine/rowMenuContext.d.ts +78 -0
- package/dist/components/form/engine/rowMenuContext.d.ts.map +1 -0
- package/dist/components/form/engine/rowMenuContext.js +103 -0
- package/dist/components/form/engine/rowMenuContext.js.map +1 -0
- package/dist/components/form/engine/rowOpenPicker.d.ts +27 -0
- package/dist/components/form/engine/rowOpenPicker.d.ts.map +1 -0
- package/dist/components/form/engine/rowOpenPicker.js +30 -0
- package/dist/components/form/engine/rowOpenPicker.js.map +1 -0
- package/dist/components/form/engine/typeChoices.d.ts +42 -0
- package/dist/components/form/engine/typeChoices.d.ts.map +1 -0
- package/dist/components/form/engine/typeChoices.js +33 -0
- package/dist/components/form/engine/typeChoices.js.map +1 -0
- package/dist/components/form/expressions/DpqlRendering.d.ts +26 -0
- package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -0
- package/dist/components/form/expressions/DpqlRendering.js +53 -0
- package/dist/components/form/expressions/DpqlRendering.js.map +1 -0
- package/dist/components/form/expressions/ExpressionField.d.ts +7 -1
- package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
- package/dist/components/form/expressions/ExpressionField.js +203 -45
- package/dist/components/form/expressions/ExpressionField.js.map +1 -1
- package/dist/components/form/expressions/argumentPresence.d.ts +84 -0
- package/dist/components/form/expressions/argumentPresence.d.ts.map +1 -0
- package/dist/components/form/expressions/argumentPresence.js +217 -0
- package/dist/components/form/expressions/argumentPresence.js.map +1 -0
- package/dist/components/form/expressions/builder/argumentLabel.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/argumentLabel.js +9 -4
- package/dist/components/form/expressions/builder/argumentLabel.js.map +1 -1
- package/dist/components/form/expressions/builder/index.d.ts +15 -2
- package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/index.js +21 -65
- package/dist/components/form/expressions/builder/index.js.map +1 -1
- package/dist/components/form/expressions/builder/renderTemplate.d.ts +4 -1
- package/dist/components/form/expressions/builder/renderTemplate.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/renderTemplate.js +10 -67
- package/dist/components/form/expressions/builder/renderTemplate.js.map +1 -1
- package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
- package/dist/components/form/expressions/mockExpressions.js +8 -4
- package/dist/components/form/expressions/mockExpressions.js.map +1 -1
- package/dist/components/form/expressions/renderExpressionToText.d.ts +1 -1
- package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
- package/dist/components/form/expressions/renderExpressionToText.js +95 -19
- package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
- package/dist/components/form/expressions/types.d.ts +17 -2
- package/dist/components/form/expressions/types.d.ts.map +1 -1
- package/dist/components/form/expressions/useExpressions.d.ts.map +1 -1
- package/dist/components/form/expressions/useExpressions.js +5 -2
- package/dist/components/form/expressions/useExpressions.js.map +1 -1
- package/dist/components/form/expressions/useRenderExpression.d.ts +7 -16
- package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
- package/dist/components/form/expressions/useRenderExpression.js +50 -126
- package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
- package/dist/components/form/fields/Field.d.ts +21 -0
- package/dist/components/form/fields/Field.d.ts.map +1 -1
- package/dist/components/form/fields/Field.js +54 -8
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +11 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +52 -8
- package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts +7 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.js +91 -28
- package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
- package/dist/components/form/fields/date/Date.d.ts +1 -1
- package/dist/components/form/fields/date/Date.d.ts.map +1 -1
- package/dist/components/form/fields/date/Date.js +16 -2
- package/dist/components/form/fields/date/Date.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 +14 -2
- package/dist/components/form/fields/long-string/LongString.js.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js +50 -4
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/number/Number.d.ts +12 -1
- package/dist/components/form/fields/number/Number.d.ts.map +1 -1
- package/dist/components/form/fields/number/Number.js +6 -3
- package/dist/components/form/fields/number/Number.js.map +1 -1
- package/dist/components/form/fields/rich-text/RichText.d.ts +47 -2
- package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
- package/dist/components/form/fields/rich-text/RichText.js +153 -12
- package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
- package/dist/components/form/fields/select/Select.d.ts.map +1 -1
- package/dist/components/form/fields/select/Select.js +120 -20
- package/dist/components/form/fields/select/Select.js.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.d.ts +166 -9
- package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.js +200 -7
- package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts +2 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +3 -2
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
- package/dist/components/form/fields/template/TemplateField.d.ts +34 -2
- package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
- package/dist/components/form/fields/template/TemplateField.js +606 -58
- package/dist/components/form/fields/template/TemplateField.js.map +1 -1
- package/dist/components/form/fields/template/TemplateText.d.ts +36 -0
- package/dist/components/form/fields/template/TemplateText.d.ts.map +1 -0
- package/dist/components/form/fields/template/TemplateText.js +80 -0
- package/dist/components/form/fields/template/TemplateText.js.map +1 -0
- package/dist/components/form/index.d.ts +2 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +4 -0
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/smartEditor/SmartEditor.d.ts.map +1 -1
- package/dist/components/smartEditor/SmartEditor.js +29 -8
- package/dist/components/smartEditor/SmartEditor.js.map +1 -1
- package/dist/components/smartEditor/useLspSession.d.ts +5 -1
- package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspSession.js +16 -2
- package/dist/components/smartEditor/useLspSession.js.map +1 -1
- package/dist/components/supportTicket/TicketReplyBox.d.ts +8 -4
- package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -1
- package/dist/components/supportTicket/TicketReplyBox.js.map +1 -1
- package/dist/helpers/common.d.ts.map +1 -1
- package/dist/helpers/common.js +7 -3
- package/dist/helpers/common.js.map +1 -1
- package/dist/helpers/dpqlDetection.d.ts +58 -0
- package/dist/helpers/dpqlDetection.d.ts.map +1 -0
- package/dist/helpers/dpqlDetection.js +164 -0
- package/dist/helpers/dpqlDetection.js.map +1 -0
- package/dist/helpers/optionUiTypes.d.ts +31 -3
- package/dist/helpers/optionUiTypes.d.ts.map +1 -1
- package/dist/helpers/optionUiTypes.js +36 -1
- package/dist/helpers/optionUiTypes.js.map +1 -1
- package/dist/helpers/options.d.ts +57 -0
- package/dist/helpers/options.d.ts.map +1 -1
- package/dist/helpers/options.js +97 -1
- package/dist/helpers/options.js.map +1 -1
- package/dist/helpers/templateItems.d.ts +47 -0
- package/dist/helpers/templateItems.d.ts.map +1 -0
- package/dist/helpers/templateItems.js +88 -0
- package/dist/helpers/templateItems.js.map +1 -0
- package/dist/helpers/templateText.d.ts +80 -0
- package/dist/helpers/templateText.d.ts.map +1 -0
- package/dist/helpers/templateText.js +291 -0
- package/dist/helpers/templateText.js.map +1 -0
- package/dist/helpers/templates.d.ts +30 -12
- package/dist/helpers/templates.d.ts.map +1 -1
- package/dist/helpers/templates.js +91 -33
- package/dist/helpers/templates.js.map +1 -1
- package/dist/helpers/validations.d.ts +35 -8
- package/dist/helpers/validations.d.ts.map +1 -1
- package/dist/helpers/validations.js +162 -25
- package/dist/helpers/validations.js.map +1 -1
- package/dist/hooks/useArgSchema.d.ts +2 -1
- package/dist/hooks/useArgSchema.d.ts.map +1 -1
- package/dist/hooks/useFetch/useFetch.d.ts +3 -1
- package/dist/hooks/useFetch/useFetch.d.ts.map +1 -1
- package/dist/hooks/useFetch/useFetch.js +47 -9
- package/dist/hooks/useFetch/useFetch.js.map +1 -1
- package/dist/hooks/useTemplates.d.ts +20 -0
- package/dist/hooks/useTemplates.d.ts.map +1 -1
- package/dist/hooks/useTemplates.js +34 -2
- package/dist/hooks/useTemplates.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/fetch.d.ts +151 -1
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +256 -44
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/lspClient.d.ts +6 -0
- package/dist/utils/lspClient.d.ts.map +1 -1
- package/dist/utils/lspClient.js +62 -11
- package/dist/utils/lspClient.js.map +1 -1
- package/dist/utils/websocket.d.ts +6 -0
- package/dist/utils/websocket.d.ts.map +1 -1
- package/dist/utils/websocket.js +15 -7
- package/dist/utils/websocket.js.map +1 -1
- package/package.json +10 -6
- package/src/components/composer/Composer.tsx +7 -2
- package/src/components/dpqlEditor/DpqlEditor.stories.tsx +3 -119
- package/src/components/dpqlEditor/DpqlEditor.tsx +5 -2
- package/src/components/dpqlEditor/dpqlHelpers.ts +20 -1
- package/src/components/dpqlEditor/dpqlProbe.ts +165 -0
- package/src/components/dpqlEditor/dpqlTags.ts +13 -0
- package/src/components/dpqlEditor/index.ts +4 -0
- package/src/components/dpqlEditor/types.ts +38 -2
- package/src/components/dpqlEditor/useDpqlProbe.ts +33 -0
- package/src/components/dpqlEditor/useDpqlSession.ts +20 -4
- package/src/components/form/engine/CompactRow.tsx +487 -160
- package/src/components/form/engine/CompactToolbar.tsx +10 -3
- package/src/components/form/engine/FormEngine.stories.tsx +1269 -211
- package/src/components/form/engine/FormEngine.tsx +922 -270
- package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +331 -0
- package/src/components/form/engine/FormFieldsSkeleton.tsx +77 -0
- package/src/components/form/engine/OptionFieldMessages.tsx +300 -14
- package/src/components/form/engine/_structuredData/SchemaDataView.tsx +94 -3
- package/src/components/form/engine/compactRowContext.ts +15 -6
- package/src/components/form/engine/compactRowStyles.ts +56 -2
- package/src/components/form/engine/compactToolbarContext.ts +1 -1
- package/src/components/form/engine/optionActions.ts +89 -1
- package/src/components/form/engine/optionsContext.ts +24 -0
- package/src/components/form/engine/readFirst.ts +88 -8
- package/src/components/form/engine/rendererTypes.ts +48 -4
- package/src/components/form/engine/rowFocus.ts +101 -0
- package/src/components/form/engine/rowMenuContext.ts +159 -0
- package/src/components/form/engine/rowOpenPicker.ts +27 -0
- package/src/components/form/engine/typeChoices.ts +63 -0
- package/src/components/form/expressions/DpqlRendering.tsx +85 -0
- package/src/components/form/expressions/ExpressionField.stories.tsx +826 -48
- package/src/components/form/expressions/ExpressionField.tsx +269 -55
- package/src/components/form/expressions/argumentPresence.ts +213 -0
- package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +38 -21
- package/src/components/form/expressions/builder/argumentLabel.tsx +10 -4
- package/src/components/form/expressions/builder/index.tsx +39 -81
- package/src/components/form/expressions/builder/renderTemplate.tsx +23 -56
- package/src/components/form/expressions/dpqlMockLanguage.ts +565 -0
- package/src/components/form/expressions/dpqlMockLsp.ts +109 -83
- package/src/components/form/expressions/mockExpressions.ts +8 -4
- package/src/components/form/expressions/renderExpressionToText.ts +112 -22
- package/src/components/form/expressions/types.ts +17 -2
- package/src/components/form/expressions/useExpressions.ts +5 -1
- package/src/components/form/expressions/useRenderExpression.ts +43 -127
- package/src/components/form/fields/Field.tsx +102 -20
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +106 -44
- package/src/components/form/fields/auto/AutoFormField.stories.tsx +85 -18
- package/src/components/form/fields/auto/AutoFormField.tsx +97 -21
- package/src/components/form/fields/date/Date.tsx +17 -1
- package/src/components/form/fields/long-string/LongString.tsx +15 -3
- package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +65 -6
- package/src/components/form/fields/number/Number.tsx +25 -0
- package/src/components/form/fields/rich-text/RichText.tsx +248 -30
- package/src/components/form/fields/select/Select.stories.tsx +392 -0
- package/src/components/form/fields/select/Select.tsx +164 -27
- package/src/components/form/fields/select/SelectCollection.tsx +350 -6
- package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +4 -2
- package/src/components/form/fields/template/TemplateField.stories.tsx +93 -14
- package/src/components/form/fields/template/TemplateField.tsx +825 -131
- package/src/components/form/fields/template/TemplateText.tsx +115 -0
- package/src/components/form/index.tsx +4 -0
- package/src/components/log/Log.stories.tsx +2 -1
- package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +3 -3
- package/src/components/smartEditor/SmartEditor.tsx +41 -9
- package/src/components/smartEditor/__fixtures__/mockLspServer.ts +52 -3
- package/src/components/smartEditor/useLspSession.ts +21 -3
- package/src/components/supportTicket/TicketReplyBox.tsx +8 -4
- package/src/components/ticketThread/TicketThread.stories.tsx +1 -0
- package/src/helpers/common.ts +7 -3
- package/src/helpers/dpqlDetection.ts +209 -0
- package/src/helpers/optionUiTypes.ts +38 -0
- package/src/helpers/options.ts +96 -0
- package/src/helpers/templateItems.ts +81 -0
- package/src/helpers/templateText.ts +350 -0
- package/src/helpers/templates.ts +94 -41
- package/src/helpers/validations.ts +203 -51
- package/src/hooks/useFetch/useFetch.stories.tsx +6 -5
- package/src/hooks/useFetch/useFetch.tsx +53 -7
- package/src/hooks/useStorage/useStorage.stories.tsx +2 -1
- package/src/hooks/useTemplates.ts +41 -0
- package/src/hooks/useWebSocket/useWebsocket.stories.tsx +2 -1
- package/src/index.tsx +14 -1
- package/src/stores/currentUser/currentUser.stories.tsx +2 -1
- package/src/stories/storyNetwork.ts +92 -0
- package/src/utils/fetch.ts +311 -21
- package/src/utils/lspClient.ts +68 -11
- package/src/utils/websocket.ts +20 -9
- package/dist/components/form/engine/__fixtures__/basicFormOptions.d.ts +0 -73
- package/dist/components/form/engine/__fixtures__/basicFormOptions.d.ts.map +0 -1
- package/dist/components/form/engine/__fixtures__/basicFormOptions.js +0 -317
- package/dist/components/form/engine/__fixtures__/basicFormOptions.js.map +0 -1
- package/dist/components/form/engine/__fixtures__/fieldChromeOptions.d.ts +0 -41
- package/dist/components/form/engine/__fixtures__/fieldChromeOptions.d.ts.map +0 -1
- package/dist/components/form/engine/__fixtures__/fieldChromeOptions.js +0 -45
- package/dist/components/form/engine/__fixtures__/fieldChromeOptions.js.map +0 -1
- package/dist/components/form/expressions/dpqlMockLsp.d.ts +0 -3
- package/dist/components/form/expressions/dpqlMockLsp.d.ts.map +0 -1
- package/dist/components/form/expressions/dpqlMockLsp.js +0 -91
- package/dist/components/form/expressions/dpqlMockLsp.js.map +0 -1
- package/dist/components/form/fields/template/__fixtures__/longExampleValue.d.ts +0 -2
- package/dist/components/form/fields/template/__fixtures__/longExampleValue.d.ts.map +0 -1
- package/dist/components/form/fields/template/__fixtures__/longExampleValue.js +0 -9
- package/dist/components/form/fields/template/__fixtures__/longExampleValue.js.map +0 -1
- package/dist/components/smartEditor/__fixtures__/mockLspServer.d.ts +0 -55
- package/dist/components/smartEditor/__fixtures__/mockLspServer.d.ts.map +0 -1
- package/dist/components/smartEditor/__fixtures__/mockLspServer.js +0 -126
- package/dist/components/smartEditor/__fixtures__/mockLspServer.js.map +0 -1
- package/dist/stories/Data/fileFieldArgSchema.json +0 -86
|
@@ -4,31 +4,141 @@ import {
|
|
|
4
4
|
} from '@qoretechnologies/reqore/dist/components/RichTextEditor';
|
|
5
5
|
import { IReqoreFormTemplates } from '@qoretechnologies/reqore/dist/components/Textarea';
|
|
6
6
|
import { IReqoreTagProps } from '@qoretechnologies/reqore/dist/components/Tag';
|
|
7
|
+
import { IReqoreTooltip } from '@qoretechnologies/reqore/dist/types/global';
|
|
7
8
|
import { isEqual, size } from 'lodash';
|
|
8
|
-
import { memo, useCallback, useEffect, useMemo, useState } from 'react';
|
|
9
|
+
import { KeyboardEvent, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
10
|
import { useDebounce } from 'react-use';
|
|
10
|
-
import {
|
|
11
|
+
import { flattenToSingleLine, hasLineBreak } from '../../../../helpers/singleLineString';
|
|
12
|
+
import {
|
|
13
|
+
renderTemplateItemDescriptions,
|
|
14
|
+
templateItemsToShow,
|
|
15
|
+
} from '../../../../helpers/templateItems';
|
|
16
|
+
import {
|
|
17
|
+
templateChipLabel,
|
|
18
|
+
templateNodesToText,
|
|
19
|
+
templateTextToNodes,
|
|
20
|
+
} from '../../../../helpers/templateText';
|
|
21
|
+
import {
|
|
22
|
+
describeTemplateReference,
|
|
23
|
+
getTemplateTagStyle,
|
|
24
|
+
templateTooltip,
|
|
25
|
+
TTemplateMeta,
|
|
26
|
+
} from '../../../../helpers/templates';
|
|
27
|
+
import { useMarkdownRenderer } from '../../../Description/markdownRendererContext';
|
|
11
28
|
|
|
12
29
|
export interface IRichTextFormFieldProps extends Omit<
|
|
13
30
|
IReqoreRichTextEditorProps,
|
|
14
|
-
'onChange' | 'value'
|
|
31
|
+
'onChange' | 'value' | 'tags' | 'actions'
|
|
15
32
|
> {
|
|
33
|
+
/**
|
|
34
|
+
* A form field's OWN chips — not the editor's template catalogue, which this
|
|
35
|
+
* component computes from `templates`.
|
|
36
|
+
*
|
|
37
|
+
* The two are different things wearing one name: the editor's `tags` is a
|
|
38
|
+
* record of offered template values, a field's is a list of chips to show. A
|
|
39
|
+
* field spreading its props here used to hand the first where the second was
|
|
40
|
+
* expected, so the template list vanished — call sites patched it one by one
|
|
41
|
+
* with `omit(rest, 'tags')`. It is accepted here and deliberately not
|
|
42
|
+
* forwarded, so a field can spread its props without either patch or type
|
|
43
|
+
* error.
|
|
44
|
+
*/
|
|
45
|
+
tags?: unknown;
|
|
16
46
|
value?: string | IReqoreRichTextEditorProps['value'];
|
|
17
47
|
onChange?: (value: string | IReqoreRichTextEditorProps['value']) => void;
|
|
18
48
|
allowTemplates?: boolean;
|
|
19
49
|
templates?: IReqoreFormTemplates;
|
|
50
|
+
/**
|
|
51
|
+
* What the value is. `richtext` (the default) stores the editor's document.
|
|
52
|
+
* `text` stores a plain string: each template reference in it is drawn as a
|
|
53
|
+
* chip named from `templates`, and what is emitted is the string again — for
|
|
54
|
+
* a string field whose value may hold references (`Dear $local:name`).
|
|
55
|
+
*/
|
|
56
|
+
valueFormat?: 'richtext' | 'text';
|
|
57
|
+
/** With `valueFormat: 'text'`: the value holds one line, so Enter adds none. */
|
|
58
|
+
singleLine?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* With `valueFormat: 'text'`: the token grammar the value's references are
|
|
61
|
+
* WRITTEN in, when the host speaks one of its own.
|
|
62
|
+
*
|
|
63
|
+
* The field schema's `templateToken` (`TFieldWithOwnTemplates`), which the
|
|
64
|
+
* read-only renderings already take. Without it this editor knew only
|
|
65
|
+
* reqraft's built-in `$key:{path}`, so a host's own spelling — a Qorus test's
|
|
66
|
+
* `$._case.mode` — was a named chip on the collapsed row and raw text in the
|
|
67
|
+
* editor that row opens. Declared here, and deliberately NOT forwarded to
|
|
68
|
+
* Reqore's editor, which has no such prop.
|
|
69
|
+
*/
|
|
70
|
+
templateToken?: RegExp | string;
|
|
20
71
|
}
|
|
21
72
|
|
|
73
|
+
/**
|
|
74
|
+
* What each offered template value is FOR, keyed by the value itself.
|
|
75
|
+
*
|
|
76
|
+
* Built from the templates a field was already given rather than from the
|
|
77
|
+
* chip's metadata, which carries only `image` / `displayName` / style flags —
|
|
78
|
+
* putting a description there would mean threading one through every producer
|
|
79
|
+
* of a template list.
|
|
80
|
+
*
|
|
81
|
+
* Exported so the mapping is assertable without rendering a Slate editor.
|
|
82
|
+
*/
|
|
83
|
+
export const getChipTooltipDescriptions = (
|
|
84
|
+
templates?: IReqoreFormTemplates
|
|
85
|
+
): Record<string, string> => {
|
|
86
|
+
const out: Record<string, string> = {};
|
|
87
|
+
|
|
88
|
+
/* BOTH shapes, because this list arrives in either one. A picker's items are
|
|
89
|
+
normally grouped by category, but a LONE category is opened onto its values
|
|
90
|
+
where the templates are resolved (`templateItemsToShow`), so a field with
|
|
91
|
+
one category hands down a FLAT list of leaves. Walking only groups made
|
|
92
|
+
that the common case and silently lost every tooltip on it — one category
|
|
93
|
+
is the ordinary shape for a field, not the exception.
|
|
94
|
+
|
|
95
|
+
Recursive rather than two-level: a leaf is recognised by carrying a value
|
|
96
|
+
rather than by its depth, so a deeper catalogue works too. */
|
|
97
|
+
const collect = (items: any[] | undefined): void => {
|
|
98
|
+
items?.forEach((item: any) => {
|
|
99
|
+
const value = typeof item?.value === 'object' ? item?.value?.value : item?.value;
|
|
100
|
+
const description = item?.description ?? item?.short_desc;
|
|
101
|
+
if (typeof value === 'string' && typeof description === 'string' && description) {
|
|
102
|
+
out[value] = description;
|
|
103
|
+
}
|
|
104
|
+
collect(item?.items);
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
collect((templates as any)?.items);
|
|
109
|
+
|
|
110
|
+
return out;
|
|
111
|
+
};
|
|
112
|
+
|
|
22
113
|
export const RichTextFormField = memo(({
|
|
23
114
|
value,
|
|
24
115
|
onChange,
|
|
25
116
|
allowTemplates,
|
|
26
117
|
templates,
|
|
118
|
+
valueFormat = 'richtext',
|
|
119
|
+
singleLine,
|
|
120
|
+
templateToken,
|
|
27
121
|
...rest
|
|
28
122
|
}: IRichTextFormFieldProps) => {
|
|
29
|
-
const
|
|
123
|
+
const isText = valueFormat === 'text';
|
|
124
|
+
const [localValue, setLocalValue] = useState<any>(() =>
|
|
125
|
+
isText ? templateTextToNodes(String(value ?? ''), templates, templateToken) : value
|
|
126
|
+
);
|
|
127
|
+
/* In text mode, the string the editor's document stands for. The value that
|
|
128
|
+
comes back from the parent is usually that same string, and rebuilding the
|
|
129
|
+
document from it would hand the editor a new tree on every keystroke —
|
|
130
|
+
which it answers by replacing its content and moving the cursor to the end. */
|
|
131
|
+
const lastTextRef = useRef(isText ? String(value ?? '') : '');
|
|
30
132
|
|
|
31
133
|
useEffect(() => {
|
|
134
|
+
if (isText) {
|
|
135
|
+
const text = String(value ?? '');
|
|
136
|
+
if (text !== lastTextRef.current) {
|
|
137
|
+
lastTextRef.current = text;
|
|
138
|
+
setLocalValue(templateTextToNodes(text, templates, templateToken));
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
32
142
|
if (JSON.stringify(value) !== JSON.stringify(localValue)) {
|
|
33
143
|
setLocalValue(value);
|
|
34
144
|
}
|
|
@@ -36,6 +146,12 @@ export const RichTextFormField = memo(({
|
|
|
36
146
|
|
|
37
147
|
useDebounce(
|
|
38
148
|
() => {
|
|
149
|
+
if (isText) {
|
|
150
|
+
if (lastTextRef.current !== String(value ?? '')) {
|
|
151
|
+
onChange?.(lastTextRef.current);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
39
155
|
if (!isEqual(localValue, value)) {
|
|
40
156
|
onChange?.(localValue);
|
|
41
157
|
}
|
|
@@ -50,6 +166,19 @@ export const RichTextFormField = memo(({
|
|
|
50
166
|
);
|
|
51
167
|
|
|
52
168
|
const handleChange = (val: any): void => {
|
|
169
|
+
if (isText) {
|
|
170
|
+
const text = templateNodesToText(val);
|
|
171
|
+
// A line break also arrives by paste and by drag-and-drop; Enter alone is
|
|
172
|
+
// stopped below. Flattened text is shown as the one line it now is.
|
|
173
|
+
if (singleLine && hasLineBreak(text)) {
|
|
174
|
+
lastTextRef.current = flattenToSingleLine(text);
|
|
175
|
+
setLocalValue(templateTextToNodes(lastTextRef.current, templates, templateToken));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
lastTextRef.current = text;
|
|
179
|
+
setLocalValue(val);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
53
182
|
if (JSON.stringify(val) === '[{"type":"paragraph","children":[{"text":""}]}]') {
|
|
54
183
|
setLocalValue(undefined);
|
|
55
184
|
return;
|
|
@@ -57,26 +186,91 @@ export const RichTextFormField = memo(({
|
|
|
57
186
|
setLocalValue(val);
|
|
58
187
|
};
|
|
59
188
|
|
|
60
|
-
|
|
61
|
-
|
|
189
|
+
// One renderer for both surfaces below — the chip's hover and the picker rows
|
|
190
|
+
// show the same strings, so they must be drawn the same way.
|
|
191
|
+
const renderMarkdown = useMarkdownRenderer();
|
|
62
192
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
193
|
+
const descriptionByValue = useMemo(() => getChipTooltipDescriptions(templates), [
|
|
194
|
+
JSON.stringify(templates),
|
|
195
|
+
]);
|
|
66
196
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
...getTemplateTagStyle(tag.metadata),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
197
|
+
const handleGetTagProps = useCallback(
|
|
198
|
+
(tag: any): IReqoreTagProps => {
|
|
199
|
+
const tagValue = tag.value?.toString();
|
|
200
|
+
|
|
201
|
+
if (!tagValue) {
|
|
202
|
+
return {};
|
|
203
|
+
}
|
|
77
204
|
|
|
78
|
-
|
|
79
|
-
|
|
205
|
+
/* A reference in a string is drawn exactly as the collapsed row draws the
|
|
206
|
+
same value (`ReadOnlyTemplateTag`): named from the catalogue, its
|
|
207
|
+
description on hover. Read at render, so a catalogue that arrives
|
|
208
|
+
after the value still names it. */
|
|
209
|
+
if (isText && tagValue.startsWith('$')) {
|
|
210
|
+
const { item } = describeTemplateReference(templates, tagValue);
|
|
211
|
+
const metadata = item?.metadata as TTemplateMeta | undefined;
|
|
212
|
+
return {
|
|
213
|
+
icon: 'ExchangeDollarLine',
|
|
214
|
+
leftIconProps: { image: metadata?.image },
|
|
215
|
+
label: templateChipLabel(templates, tagValue),
|
|
216
|
+
tooltip: templateTooltip(templates, tagValue),
|
|
217
|
+
...getTemplateTagStyle(metadata),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (tagValue.startsWith('$')) {
|
|
222
|
+
return {
|
|
223
|
+
icon: 'ExchangeDollarLine',
|
|
224
|
+
leftIconProps: {
|
|
225
|
+
image: tag.metadata?.image,
|
|
226
|
+
},
|
|
227
|
+
labelKey: tag.metadata?.displayName,
|
|
228
|
+
/* Hovering a chip says what the value IS, not how it is spelled.
|
|
229
|
+
Reqore otherwise falls back to the tag's own value, so a chip
|
|
230
|
+
reading "result" reported `$.result` on hover — the reference the
|
|
231
|
+
author already chose, restating the label in engine syntax instead
|
|
232
|
+
of telling them anything. The path stays discoverable in the
|
|
233
|
+
field's help and in the picker row for an unlabelled value. */
|
|
234
|
+
/* Drawn, for the same reason the picker row is: this description is
|
|
235
|
+
the SAME string the row shows, so leaving it raw here would print
|
|
236
|
+
the punctuation the row no longer prints. A tooltip's `content`
|
|
237
|
+
takes a node, and without a host renderer it stays the plain
|
|
238
|
+
string it always was. */
|
|
239
|
+
/* Drawn, for the same reason the picker row is: this is the SAME
|
|
240
|
+
string the row shows, so leaving it raw here would print the
|
|
241
|
+
punctuation the row no longer prints. A drawn description travels
|
|
242
|
+
as the tooltip's `content` — the prop itself is `string |
|
|
243
|
+
IReqoreTooltip`, and only the object form takes a node. Without a
|
|
244
|
+
host renderer it stays the plain string it always was. */
|
|
245
|
+
tooltip:
|
|
246
|
+
descriptionByValue[tagValue] ?
|
|
247
|
+
renderMarkdown ?
|
|
248
|
+
{
|
|
249
|
+
content: renderMarkdown({
|
|
250
|
+
value: descriptionByValue[tagValue],
|
|
251
|
+
compact: true,
|
|
252
|
+
}) as IReqoreTooltip['content'],
|
|
253
|
+
}
|
|
254
|
+
: descriptionByValue[tagValue]
|
|
255
|
+
: undefined,
|
|
256
|
+
...getTemplateTagStyle(tag.metadata),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return {};
|
|
261
|
+
},
|
|
262
|
+
[descriptionByValue, renderMarkdown, isText, templates]
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
const handleKeyDown = useCallback(
|
|
266
|
+
(event: KeyboardEvent<HTMLTextAreaElement>): void => {
|
|
267
|
+
if (isText && singleLine && event.key === 'Enter') {
|
|
268
|
+
event.preventDefault();
|
|
269
|
+
}
|
|
270
|
+
(rest as { onKeyDown?: (event: KeyboardEvent<HTMLTextAreaElement>) => void }).onKeyDown?.(event);
|
|
271
|
+
},
|
|
272
|
+
[isText, singleLine, (rest as { onKeyDown?: unknown }).onKeyDown]
|
|
273
|
+
);
|
|
80
274
|
|
|
81
275
|
const tags = useMemo<IReqoreRichTextEditorProps['tags']>((): IReqoreRichTextEditorProps['tags'] => {
|
|
82
276
|
const _tags: IReqoreRichTextEditorProps['tags'] = {};
|
|
@@ -87,12 +281,20 @@ export const RichTextFormField = memo(({
|
|
|
87
281
|
label: 'Templates',
|
|
88
282
|
flat: false,
|
|
89
283
|
description: 'Universal values that can be used in multiple places',
|
|
90
|
-
|
|
284
|
+
/* The in-editor list already nests everything under "Templates", so a
|
|
285
|
+
lone category makes the author drill through TWO headers to reach
|
|
286
|
+
the only values on offer. Hoist it. */
|
|
287
|
+
/* Drawn here, at the hand-off to Reqore. A description is prose written
|
|
288
|
+
in the same markdown as every other description this package shows,
|
|
289
|
+
and printing its punctuation at the reader was the last surface still
|
|
290
|
+
doing that. Never made further up: the list is a `JSON.stringify`
|
|
291
|
+
memo key in `TemplateField`. */
|
|
292
|
+
items: renderTemplateItemDescriptions(templateItemsToShow(templates?.items), renderMarkdown),
|
|
91
293
|
};
|
|
92
294
|
}
|
|
93
295
|
|
|
94
296
|
return _tags;
|
|
95
|
-
}, [allowTemplates, templates]);
|
|
297
|
+
}, [allowTemplates, templates, renderMarkdown]);
|
|
96
298
|
|
|
97
299
|
const formattedValue: IReqoreRichTextEditorProps['value'] =
|
|
98
300
|
typeof localValue !== 'object' ? [{ type: 'paragraph', children: [{ text: String(localValue ?? '') }] }]
|
|
@@ -103,17 +305,32 @@ export const RichTextFormField = memo(({
|
|
|
103
305
|
// disables tag click/remove) when `readOnly` is set. Honour the field-level
|
|
104
306
|
// flags — the IDE Options model passes `readonly`, the compact form passes
|
|
105
307
|
// `readOnly` + `disabled` — so a read-only form renders the formatted content
|
|
106
|
-
// rather than an editable box
|
|
308
|
+
// rather than an editable box.
|
|
107
309
|
const readOnly = !!(
|
|
108
310
|
(rest as { readOnly?: boolean }).readOnly ||
|
|
109
311
|
(rest as { readonly?: boolean }).readonly ||
|
|
110
312
|
(rest as { disabled?: boolean }).disabled
|
|
111
313
|
);
|
|
112
314
|
|
|
315
|
+
/* Everything the caller passed, minus its own `tags` — see the prop's doc
|
|
316
|
+
above: on a form field that name means the chips to show, while the
|
|
317
|
+
editor's `tags` is the template catalogue this component computes. */
|
|
318
|
+
const editorProps = { ...rest };
|
|
319
|
+
delete (editorProps as { tags?: unknown }).tags;
|
|
320
|
+
|
|
113
321
|
return (
|
|
114
322
|
<ReqoreRichTextEditor
|
|
115
323
|
value={formattedValue}
|
|
116
324
|
onChange={handleChange}
|
|
325
|
+
/* `rest` is spread BEFORE everything this component computes. It used to
|
|
326
|
+
come after, so a caller's prop of the same name silently replaced the
|
|
327
|
+
computed one — and `tags` is exactly such a name twice over: on a form
|
|
328
|
+
field it means the field's own chips, while the editor's `tags` are its
|
|
329
|
+
template catalogue. A field passing chips therefore erased the template
|
|
330
|
+
list, which two call sites had each patched with `omit(rest, 'tags')`.
|
|
331
|
+
The three props below already fold in whatever `rest` carried for
|
|
332
|
+
them. */
|
|
333
|
+
{...editorProps}
|
|
117
334
|
tagsListProps={{
|
|
118
335
|
useTargetWidth: true,
|
|
119
336
|
minWidth: '300px',
|
|
@@ -126,13 +343,14 @@ export const RichTextFormField = memo(({
|
|
|
126
343
|
getTagProps={handleGetTagProps}
|
|
127
344
|
tags={tags}
|
|
128
345
|
panelProps={{ fluid: true, style: { minWidth: '150px', ...rest.panelProps?.style } }}
|
|
129
|
-
{...rest}
|
|
130
346
|
readOnly={readOnly}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
347
|
+
onKeyDown={handleKeyDown}
|
|
348
|
+
/* A form field carries no document toolbar. Styling was already off, so
|
|
349
|
+
the bar held only undo and redo — drawn by Reqore as a panel as wide as
|
|
350
|
+
the tag list, which under a field reads as an empty 600px menu with two
|
|
351
|
+
greyed icons in it (they are disabled until there is history to walk).
|
|
352
|
+
Both still work from the keyboard, where every other text field's do. */
|
|
353
|
+
actions={{ undo: false, redo: false, styling: false }}
|
|
136
354
|
/>
|
|
137
355
|
);
|
|
138
356
|
});
|