@qoretechnologies/reqraft 0.10.66-pr.145.gcb1e59d → 0.10.66
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 +53 -1
- package/dist/components/Description/AllowedValuesHelp.d.ts +20 -0
- package/dist/components/Description/AllowedValuesHelp.d.ts.map +1 -0
- package/dist/components/Description/AllowedValuesHelp.js +86 -0
- package/dist/components/Description/AllowedValuesHelp.js.map +1 -0
- package/dist/components/Description/describedControl.d.ts +54 -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 +156 -10
- package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlCompletions.d.ts +39 -0
- package/dist/components/dpqlEditor/dpqlCompletions.d.ts.map +1 -0
- package/dist/components/dpqlEditor/dpqlCompletions.js +294 -0
- package/dist/components/dpqlEditor/dpqlCompletions.js.map +1 -0
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts +54 -5
- package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlHelpers.js +420 -63
- package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlInserter.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlInserter.js +67 -29
- package/dist/components/dpqlEditor/dpqlInserter.js.map +1 -1
- package/dist/components/dpqlEditor/dpqlTags.d.ts +17 -7
- package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
- package/dist/components/dpqlEditor/dpqlTags.js +44 -17
- package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
- package/dist/components/dpqlEditor/types.d.ts +94 -8
- package/dist/components/dpqlEditor/types.d.ts.map +1 -1
- package/dist/components/dpqlEditor/useDpqlSession.d.ts +7 -2
- package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
- package/dist/components/dpqlEditor/useDpqlSession.js +49 -17
- 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 +336 -243
- 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 +20 -57
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +67 -59
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +606 -409
- 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 +2 -18
- package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
- package/dist/components/form/engine/OptionFieldMessages.js +28 -25
- package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
- package/dist/components/form/engine/OptionsHelpDialog.d.ts.map +1 -1
- package/dist/components/form/engine/OptionsHelpDialog.js +19 -2
- package/dist/components/form/engine/OptionsHelpDialog.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 +11 -31
- package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +30 -6
- 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 +56 -31
- package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +121 -110
- 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/compactToolbarContext.d.ts +0 -3
- package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
- package/dist/components/form/engine/inheritProps.d.ts +29 -0
- package/dist/components/form/engine/inheritProps.d.ts.map +1 -0
- package/dist/components/form/engine/inheritProps.js +43 -0
- package/dist/components/form/engine/inheritProps.js.map +1 -0
- package/dist/components/form/engine/operatorSummary.d.ts +26 -0
- package/dist/components/form/engine/operatorSummary.d.ts.map +1 -0
- package/dist/components/form/engine/operatorSummary.js +35 -0
- package/dist/components/form/engine/operatorSummary.js.map +1 -0
- package/dist/components/form/engine/readFirst.d.ts +26 -22
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +79 -115
- 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 +3 -9
- package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
- package/dist/components/form/engine/rowFocus.js +30 -19
- 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 +7 -6
- package/dist/components/form/expressions/DpqlRendering.js.map +1 -1
- package/dist/components/form/expressions/ExpressionField.d.ts +67 -3
- package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
- package/dist/components/form/expressions/ExpressionField.js +536 -114
- package/dist/components/form/expressions/ExpressionField.js.map +1 -1
- package/dist/components/form/expressions/argumentPresence.d.ts +14 -0
- package/dist/components/form/expressions/argumentPresence.d.ts.map +1 -1
- package/dist/components/form/expressions/argumentPresence.js +16 -1
- package/dist/components/form/expressions/argumentPresence.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 +30 -11
- 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 +3 -1
- package/dist/components/form/expressions/builder/argumentWrapper.js.map +1 -1
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts +9 -0
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js +30 -27
- 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 +7 -5
- package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js.map +1 -1
- package/dist/components/form/expressions/builder/index.d.ts +34 -2
- package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/index.js +170 -80
- 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/dpqlMockRecordPath.d.ts +11 -0
- package/dist/components/form/expressions/dpqlMockRecordPath.d.ts.map +1 -0
- package/dist/components/form/expressions/dpqlMockRecordPath.js +254 -0
- package/dist/components/form/expressions/dpqlMockRecordPath.js.map +1 -0
- 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/fieldPath.d.ts +24 -0
- package/dist/components/form/expressions/fieldPath.d.ts.map +1 -0
- package/dist/components/form/expressions/fieldPath.js +152 -0
- package/dist/components/form/expressions/fieldPath.js.map +1 -0
- package/dist/components/form/expressions/loneValue.d.ts +17 -0
- package/dist/components/form/expressions/loneValue.d.ts.map +1 -0
- package/dist/components/form/expressions/loneValue.js +33 -0
- package/dist/components/form/expressions/loneValue.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 +37 -25
- 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 +49 -0
- package/dist/components/form/expressions/textOfExpression.js.map +1 -0
- package/dist/components/form/expressions/types.d.ts +12 -0
- package/dist/components/form/expressions/types.d.ts.map +1 -1
- package/dist/components/form/expressions/types.js +6 -1
- package/dist/components/form/expressions/types.js.map +1 -1
- 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 +13 -9
- package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
- package/dist/components/form/expressions/wildcardExpressions.d.ts +27 -0
- package/dist/components/form/expressions/wildcardExpressions.d.ts.map +1 -0
- package/dist/components/form/expressions/wildcardExpressions.js +101 -0
- package/dist/components/form/expressions/wildcardExpressions.js.map +1 -0
- package/dist/components/form/fields/Field.d.ts.map +1 -1
- package/dist/components/form/fields/Field.js +39 -18
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +0 -7
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +46 -35
- package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
- package/dist/components/form/fields/allowed-values/choicePicture.d.ts +37 -0
- package/dist/components/form/fields/allowed-values/choicePicture.d.ts.map +1 -0
- package/dist/components/form/fields/allowed-values/choicePicture.js +64 -0
- package/dist/components/form/fields/allowed-values/choicePicture.js.map +1 -0
- 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 +30 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.js +123 -79
- 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 +616 -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 +1 -7
- package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
- package/dist/components/form/fields/long-string/LongString.js +30 -13
- 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 +10 -7
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/number/Number.d.ts +7 -4
- package/dist/components/form/fields/number/Number.d.ts.map +1 -1
- package/dist/components/form/fields/number/Number.js +45 -18
- 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/radio-group/RadioGroup.d.ts.map +1 -1
- package/dist/components/form/fields/radio-group/RadioGroup.js +8 -13
- package/dist/components/form/fields/radio-group/RadioGroup.js.map +1 -1
- package/dist/components/form/fields/rich-text/RichText.d.ts +20 -1
- package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
- package/dist/components/form/fields/rich-text/RichText.js +426 -91
- 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 +80 -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 +10 -1
- package/dist/components/form/fields/select/Select.d.ts.map +1 -1
- package/dist/components/form/fields/select/Select.js +28 -14
- package/dist/components/form/fields/select/Select.js.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.d.ts +5 -0
- package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.js +25 -12
- 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 +11 -5
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +21 -5
- package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
- package/dist/components/form/fields/template/TemplateBrowser.d.ts +16 -0
- package/dist/components/form/fields/template/TemplateBrowser.d.ts.map +1 -0
- package/dist/components/form/fields/template/TemplateBrowser.js +89 -0
- package/dist/components/form/fields/template/TemplateBrowser.js.map +1 -0
- package/dist/components/form/fields/template/TemplateField.d.ts +105 -1
- package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
- package/dist/components/form/fields/template/TemplateField.js +706 -168
- package/dist/components/form/fields/template/TemplateField.js.map +1 -1
- package/dist/components/form/fields/template/TemplatePicker.d.ts +54 -0
- package/dist/components/form/fields/template/TemplatePicker.d.ts.map +1 -0
- package/dist/components/form/fields/template/TemplatePicker.js +459 -0
- package/dist/components/form/fields/template/TemplatePicker.js.map +1 -0
- 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 +22 -16
- package/dist/components/form/fields/template/TemplateText.js.map +1 -1
- package/dist/components/form/fields/template/referenceNames.d.ts +63 -0
- package/dist/components/form/fields/template/referenceNames.d.ts.map +1 -0
- package/dist/components/form/fields/template/referenceNames.js +69 -0
- package/dist/components/form/fields/template/referenceNames.js.map +1 -0
- package/dist/components/form/fields/template/writtenAsText.d.ts +61 -0
- package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
- package/dist/components/form/fields/template/writtenAsText.js +204 -0
- package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
- package/dist/components/form/index.d.ts +12 -2
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +25 -3
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/form/typeSentenceForm.d.ts +17 -0
- package/dist/components/form/typeSentenceForm.d.ts.map +1 -0
- package/dist/components/form/typeSentenceForm.js +54 -0
- package/dist/components/form/typeSentenceForm.js.map +1 -0
- package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
- package/dist/components/imageLightbox/ImageLightbox.js +19 -9
- 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 +20 -8
- 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 +53 -0
- package/dist/components/smartEditor/CompletionMenu.d.ts.map +1 -0
- package/dist/components/smartEditor/CompletionMenu.js +302 -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 +3 -3
- 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 +616 -190
- package/dist/components/smartEditor/SmartEditor.js.map +1 -1
- package/dist/components/smartEditor/completionStyle.d.ts +28 -0
- package/dist/components/smartEditor/completionStyle.d.ts.map +1 -0
- package/dist/components/smartEditor/completionStyle.js +79 -0
- package/dist/components/smartEditor/completionStyle.js.map +1 -0
- package/dist/components/smartEditor/contextTitle.d.ts +10 -0
- package/dist/components/smartEditor/contextTitle.d.ts.map +1 -0
- package/dist/components/smartEditor/contextTitle.js +21 -0
- package/dist/components/smartEditor/contextTitle.js.map +1 -0
- package/dist/components/smartEditor/editingAids.d.ts +64 -0
- package/dist/components/smartEditor/editingAids.d.ts.map +1 -0
- package/dist/components/smartEditor/editingAids.js +213 -0
- package/dist/components/smartEditor/editingAids.js.map +1 -0
- package/dist/components/smartEditor/index.d.ts +6 -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 +98 -0
- package/dist/components/smartEditor/templateCompletions.d.ts.map +1 -0
- package/dist/components/smartEditor/templateCompletions.js +380 -0
- package/dist/components/smartEditor/templateCompletions.js.map +1 -0
- package/dist/components/smartEditor/typedReferences.d.ts +34 -0
- package/dist/components/smartEditor/typedReferences.d.ts.map +1 -0
- package/dist/components/smartEditor/typedReferences.js +179 -0
- package/dist/components/smartEditor/typedReferences.js.map +1 -0
- package/dist/components/smartEditor/types.d.ts +116 -2
- package/dist/components/smartEditor/types.d.ts.map +1 -1
- package/dist/components/smartEditor/useEditingAids.d.ts +38 -0
- package/dist/components/smartEditor/useEditingAids.d.ts.map +1 -0
- package/dist/components/smartEditor/useEditingAids.js +392 -0
- package/dist/components/smartEditor/useEditingAids.js.map +1 -0
- package/dist/components/smartEditor/useLspAutocomplete.d.ts +106 -3
- package/dist/components/smartEditor/useLspAutocomplete.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspAutocomplete.js +592 -149
- package/dist/components/smartEditor/useLspAutocomplete.js.map +1 -1
- package/dist/components/smartEditor/useLspHover.d.ts +33 -7
- package/dist/components/smartEditor/useLspHover.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspHover.js +364 -35
- 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/smartEditor/useLspSignatureHelp.d.ts.map +1 -1
- package/dist/components/smartEditor/useLspSignatureHelp.js +6 -11
- package/dist/components/smartEditor/useLspSignatureHelp.js.map +1 -1
- package/dist/components/smartEditor/useTabCameIn.d.ts +10 -0
- package/dist/components/smartEditor/useTabCameIn.d.ts.map +1 -0
- package/dist/components/smartEditor/useTabCameIn.js +42 -0
- package/dist/components/smartEditor/useTabCameIn.js.map +1 -0
- 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/InterfaceReferenceTags.d.ts +2 -3
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -1
- package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -1
- package/dist/components/supportTicket/ReferencePicker.d.ts +9 -3
- package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
- package/dist/components/supportTicket/ReferencePicker.js +38 -23
- 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 +21 -6
- package/dist/components/supportTicket/TicketHeader.js.map +1 -1
- package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
- package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -1
- package/dist/components/supportTicket/TicketReplyBox.js +10 -29
- package/dist/components/supportTicket/TicketReplyBox.js.map +1 -1
- package/dist/components/supportTicket/useLoadedImages.d.ts +0 -10
- package/dist/components/supportTicket/useLoadedImages.d.ts.map +1 -1
- package/dist/components/supportTicket/useLoadedImages.js +1 -63
- package/dist/components/supportTicket/useLoadedImages.js.map +1 -1
- package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
- package/dist/components/ticketReferences/TicketReferences.js +10 -9
- 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 +52 -21
- package/dist/components/ticketThread/TicketThread.js.map +1 -1
- package/dist/helpers/allowedValues.d.ts +21 -12
- package/dist/helpers/allowedValues.d.ts.map +1 -1
- package/dist/helpers/allowedValues.js +40 -20
- package/dist/helpers/allowedValues.js.map +1 -1
- package/dist/helpers/descriptionTooltip.d.ts +46 -0
- package/dist/helpers/descriptionTooltip.d.ts.map +1 -0
- package/dist/helpers/descriptionTooltip.js +76 -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 +115 -4
- package/dist/helpers/expressions.d.ts.map +1 -1
- package/dist/helpers/expressions.js +247 -29
- 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/noDescription.d.ts +9 -0
- package/dist/helpers/noDescription.d.ts.map +1 -0
- package/dist/helpers/noDescription.js +13 -0
- package/dist/helpers/noDescription.js.map +1 -0
- package/dist/helpers/optionUiTypes.d.ts +2 -2
- package/dist/helpers/qorusTypeCatalogue.d.ts +147 -0
- package/dist/helpers/qorusTypeCatalogue.d.ts.map +1 -0
- package/dist/helpers/qorusTypeCatalogue.js +505 -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/recordFieldReference.d.ts +15 -0
- package/dist/helpers/recordFieldReference.d.ts.map +1 -0
- package/dist/helpers/recordFieldReference.js +89 -0
- package/dist/helpers/recordFieldReference.js.map +1 -0
- package/dist/helpers/singleLineString.d.ts.map +1 -1
- package/dist/helpers/singleLineString.js +0 -1
- package/dist/helpers/singleLineString.js.map +1 -1
- package/dist/helpers/templateCatalogue.d.ts +104 -0
- package/dist/helpers/templateCatalogue.d.ts.map +1 -0
- package/dist/helpers/templateCatalogue.js +116 -0
- package/dist/helpers/templateCatalogue.js.map +1 -0
- package/dist/helpers/templateCatalogueContext.d.ts +19 -0
- package/dist/helpers/templateCatalogueContext.d.ts.map +1 -0
- package/dist/helpers/templateCatalogueContext.js +31 -0
- package/dist/helpers/templateCatalogueContext.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/templateText.d.ts +1 -0
- package/dist/helpers/templateText.d.ts.map +1 -1
- package/dist/helpers/templateText.js +7 -3
- package/dist/helpers/templateText.js.map +1 -1
- package/dist/helpers/templateTree.d.ts +248 -0
- package/dist/helpers/templateTree.d.ts.map +1 -0
- package/dist/helpers/templateTree.js +892 -0
- package/dist/helpers/templateTree.js.map +1 -0
- package/dist/helpers/templateType.d.ts +28 -0
- package/dist/helpers/templateType.d.ts.map +1 -0
- package/dist/helpers/templateType.js +30 -0
- package/dist/helpers/templateType.js.map +1 -0
- package/dist/helpers/templates.d.ts +86 -16
- package/dist/helpers/templates.d.ts.map +1 -1
- package/dist/helpers/templates.js +305 -45
- package/dist/helpers/templates.js.map +1 -1
- package/dist/helpers/validations.d.ts +27 -0
- package/dist/helpers/validations.d.ts.map +1 -1
- package/dist/helpers/validations.js +169 -39
- package/dist/helpers/validations.js.map +1 -1
- package/dist/helpers/webLink.d.ts +8 -0
- package/dist/helpers/webLink.d.ts.map +1 -0
- package/dist/helpers/webLink.js +29 -0
- package/dist/helpers/webLink.js.map +1 -0
- package/dist/hooks/useQorusTypes.d.ts +12 -17
- package/dist/hooks/useQorusTypes.d.ts.map +1 -1
- package/dist/hooks/useQorusTypes.js +44 -172
- 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 +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -1
- 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/dist/utils/fetch.d.ts +9 -2
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +6 -5
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/lspClient.types.d.ts +2 -0
- package/dist/utils/lspClient.types.d.ts.map +1 -1
- package/dist/utils/websocket.d.ts +65 -2
- package/dist/utils/websocket.d.ts.map +1 -1
- package/dist/utils/websocket.js +276 -44
- package/dist/utils/websocket.js.map +1 -1
- package/package.json +14 -6
- 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/dist/components/form/engine/formAppearance.d.ts +0 -49
- package/dist/components/form/engine/formAppearance.d.ts.map +0 -1
- package/dist/components/form/engine/formAppearance.js +0 -50
- package/dist/components/form/engine/formAppearance.js.map +0 -1
- package/dist/components/form/fields/ChoiceGroupHeading.d.ts +0 -21
- package/dist/components/form/fields/ChoiceGroupHeading.d.ts.map +0 -1
- package/dist/components/form/fields/ChoiceGroupHeading.js +0 -33
- package/dist/components/form/fields/ChoiceGroupHeading.js.map +0 -1
- package/dist/components/form/fields/allowed-values/savedValues.d.ts +0 -30
- package/dist/components/form/fields/allowed-values/savedValues.d.ts.map +0 -1
- package/dist/components/form/fields/allowed-values/savedValues.js +0 -39
- package/dist/components/form/fields/allowed-values/savedValues.js.map +0 -1
- package/dist/helpers/fieldDescription.d.ts +0 -16
- package/dist/helpers/fieldDescription.d.ts.map +0 -1
- package/dist/helpers/fieldDescription.js +0 -40
- package/dist/helpers/fieldDescription.js.map +0 -1
- 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 -2740
- package/src/components/form/engine/CompactToolbar.tsx +0 -399
- package/src/components/form/engine/FormEngine.stories.tsx +0 -9934
- package/src/components/form/engine/FormEngine.tsx +0 -4891
- package/src/components/form/engine/FormEngineAppearance.stories.tsx +0 -609
- package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
- package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -335
- package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
- package/src/components/form/engine/OptionFieldMessages.tsx +0 -548
- 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 -755
- 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 -153
- package/src/components/form/engine/compactRowStyles.ts +0 -1087
- package/src/components/form/engine/compactToolbarContext.ts +0 -72
- package/src/components/form/engine/formAppearance.ts +0 -79
- 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 -1090
- 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 -112
- 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 -152
- 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/ChoiceGroupHeading.tsx +0 -38
- package/src/components/form/fields/Field.stories.tsx +0 -143
- package/src/components/form/fields/Field.tsx +0 -734
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -321
- package/src/components/form/fields/allowed-values/savedValues.ts +0 -64
- 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 -1183
- 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 -147
- package/src/components/form/fields/long-string/LongString.tsx +0 -141
- 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 -140
- package/src/components/form/fields/number/Number.stories.tsx +0 -159
- package/src/components/form/fields/number/Number.tsx +0 -175
- 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 -52
- 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 -1749
- 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 -49
- package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
- package/src/components/imageLightbox/ImageLightbox.tsx +0 -238
- 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 -130
- package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -580
- package/src/components/supportTicket/ReferencePicker.tsx +0 -573
- package/src/components/supportTicket/TicketConversation.stories.tsx +0 -120
- package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
- package/src/components/supportTicket/TicketHeader.tsx +0 -248
- 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 -357
- package/src/components/supportTicket/TicketReplyBox.tsx +0 -172
- 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 -93
- package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -341
- package/src/components/ticketReferences/TicketReferences.tsx +0 -914
- package/src/components/ticketReferences/index.ts +0 -2
- package/src/components/ticketThread/TicketThread.stories.tsx +0 -898
- package/src/components/ticketThread/TicketThread.tsx +0 -706
- 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 -268
- 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/fieldDescription.ts +0 -39
- 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 -62
- 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,914 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ReqoreButton,
|
|
3
|
-
ReqoreColumns,
|
|
4
|
-
ReqoreControlGroup,
|
|
5
|
-
ReqoreDropdown,
|
|
6
|
-
ReqoreEmptyState,
|
|
7
|
-
ReqoreEntityRow,
|
|
8
|
-
ReqorePanel,
|
|
9
|
-
ReqoreSpan,
|
|
10
|
-
ReqoreSpinner,
|
|
11
|
-
ReqoreTextEffect,
|
|
12
|
-
} from '@qoretechnologies/reqore';
|
|
13
|
-
import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
|
|
14
|
-
import { TReqoreEffectColor } from '@qoretechnologies/reqore/dist/components/Effect';
|
|
15
|
-
import type { IReqoreEntityRowAction } from '@qoretechnologies/reqore/dist/components/EntityRow';
|
|
16
|
-
import type { IReqorePanelSubAction } from '@qoretechnologies/reqore/dist/components/Panel';
|
|
17
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
18
|
-
import timeago from 'epoch-timeago';
|
|
19
|
-
import { SearchFilterBar } from '../searchFilterBar';
|
|
20
|
-
import styled from 'styled-components';
|
|
21
|
-
import { formatBytes, isImage } from '../../helpers/common';
|
|
22
|
-
import { ImageLightbox } from '../imageLightbox';
|
|
23
|
-
import {
|
|
24
|
-
defaultInterfaceIcon,
|
|
25
|
-
IInterfaceReference,
|
|
26
|
-
toInterfaceKindMark,
|
|
27
|
-
TResolveInterfaceIcon,
|
|
28
|
-
TTicketViewerRole,
|
|
29
|
-
} from '../supportTicket/meta';
|
|
30
|
-
import { loadedImageUrl, useLoadedImages } from '../supportTicket/useLoadedImages';
|
|
31
|
-
import type { ITicketThreadAttachment, ITicketThreadMessage } from '../ticketThread/TicketThread';
|
|
32
|
-
|
|
33
|
-
/*
|
|
34
|
-
* TicketReferences — the consolidated "everything attached to or linked from a
|
|
35
|
-
* ticket" surface. It gathers, across the ticket description and every reply:
|
|
36
|
-
* • Screenshots — image attachments as a thumbnail grid → a zoom/paging lightbox.
|
|
37
|
-
* First: the visual evidence is what a reader scans for.
|
|
38
|
-
* • Linked interfaces — the {kind, name} snapshots as rows (kind as metadata),
|
|
39
|
-
* sorted by kind then name, matching the file rows below.
|
|
40
|
-
* • Files — every other attachment as a type-iconed row with provenance + download.
|
|
41
|
-
* None of the mainstream desks (Zendesk/Front/Intercom/…) ship this consolidated
|
|
42
|
-
* view, so it's the drawer's differentiator. Rendered as a tab in the staff drawer
|
|
43
|
-
* and a panel in the customer modal; only the data + handlers differ by viewer.
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
/** Attachment metadata as returned by the list endpoint — carries the provenance
|
|
47
|
-
* (uploader + timestamp + source message) the message-embedded metadata omits. */
|
|
48
|
-
export interface ITicketReferenceAttachment extends ITicketThreadAttachment {
|
|
49
|
-
/** the reply this file was attached to; null/absent = ticket-level */
|
|
50
|
-
message_id?: string | null;
|
|
51
|
-
/** the uploader, resolved + masked like the thread's message author (a staff
|
|
52
|
-
* uploader reads as "Qorus Support" on the customer plane, never the raw identity) */
|
|
53
|
-
uploaded_by?: string;
|
|
54
|
-
/** the kind of party that uploaded the file — lets the viewer label it */
|
|
55
|
-
uploader_type?: 'customer' | 'staff';
|
|
56
|
-
/** ISO timestamp the file was attached */
|
|
57
|
-
created?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface ITicketReferencesProps {
|
|
61
|
-
/** ticket-level interface references (from `ticket.referenced_interfaces`) */
|
|
62
|
-
references?: IInterfaceReference[];
|
|
63
|
-
/** the thread — source of message-level references and, as a fallback, attachments */
|
|
64
|
-
messages?: ITicketThreadMessage[];
|
|
65
|
-
/** the ticket's attachments from the list endpoint; preferred over the message-embedded
|
|
66
|
-
* ones because it carries provenance and any ticket-level files. Falls back to `messages`. */
|
|
67
|
-
attachments?: ITicketReferenceAttachment[];
|
|
68
|
-
viewerRole?: TTicketViewerRole;
|
|
69
|
-
/** fetch an attachment's bytes as an object URL, for inline image preview + the lightbox.
|
|
70
|
-
* Omitted ⇒ screenshots show as download tiles instead of thumbnails. */
|
|
71
|
-
fetchAttachmentUrl?: (attachmentId: string) => Promise<string>;
|
|
72
|
-
/** trigger a browser download of an attachment */
|
|
73
|
-
onDownloadAttachment?: (attachmentId: string, filename: string) => void;
|
|
74
|
-
/** open a referenced interface; reference chips are static (informational) when omitted */
|
|
75
|
-
onInterfaceClick?: (reference: IInterfaceReference) => void;
|
|
76
|
-
/** Reveal the message a reference or file came from, in the conversation.
|
|
77
|
-
* Omitted ⇒ the action is not offered. It is also omitted per-row for anything filed
|
|
78
|
-
* against the ticket itself rather than a reply, which has no message to reveal. */
|
|
79
|
-
onShowInChat?: (messageId: string) => void;
|
|
80
|
-
/** resolve a per-kind icon for a referenced interface (the IDE passes its own
|
|
81
|
-
* vocabulary): a font icon, or a mark `{ icon, image }` whose image is drawn once
|
|
82
|
-
* it loads, with the font icon before that and instead of it if it fails */
|
|
83
|
-
resolveInterfaceIcon?: TResolveInterfaceIcon;
|
|
84
|
-
/** Draw the kind's image ahead of a reference's own logo; see `preferKindImage` on
|
|
85
|
-
* `InterfaceReferenceTags`. Off by default. */
|
|
86
|
-
preferKindImage?: boolean;
|
|
87
|
-
loading?: boolean;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// ---------------------------------------------------------------------------
|
|
91
|
-
// helpers
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
// `epoch-timeago` — the same library reqore's `ReqoreTimeAgo` and the IDE's ticket
|
|
94
|
-
// list use. This is a string context (a metadata run), so a helper rather than the
|
|
95
|
-
// component; it stays consistent with them instead of a bespoke Intl reimplementation.
|
|
96
|
-
const timeAgo = (iso?: string): string => {
|
|
97
|
-
if (!iso) {
|
|
98
|
-
return '';
|
|
99
|
-
}
|
|
100
|
-
const ms = Date.parse(iso);
|
|
101
|
-
return Number.isNaN(ms) ? '' : timeago(ms);
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
interface IFileType {
|
|
105
|
-
icon: IReqoreIconName;
|
|
106
|
-
color: TReqoreEffectColor;
|
|
107
|
-
label: string;
|
|
108
|
-
}
|
|
109
|
-
// MIME → a type icon (glyph) + a category tint, Fluent-style: colour distinguishes
|
|
110
|
-
// the file family, the glyph its shape. Tints stay moderate for a dark surface.
|
|
111
|
-
const fileType = (contentType: string): IFileType => {
|
|
112
|
-
const ct = contentType.toLowerCase();
|
|
113
|
-
if (ct === 'application/pdf') {
|
|
114
|
-
return { icon: 'FilePdf2Line', color: '#f56059', label: 'PDF' };
|
|
115
|
-
}
|
|
116
|
-
if (ct.includes('zip') || ct.includes('gzip')) {
|
|
117
|
-
return { icon: 'FileZipLine', color: '#f2a63c', label: 'Archive' };
|
|
118
|
-
}
|
|
119
|
-
if (ct === 'text/csv') {
|
|
120
|
-
return { icon: 'FileExcel2Line', color: '#46c96f', label: 'CSV' };
|
|
121
|
-
}
|
|
122
|
-
if (ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
|
|
123
|
-
return { icon: 'CodeSLine', color: '#55a0ff', label: 'Data' };
|
|
124
|
-
}
|
|
125
|
-
if (ct.includes('markdown')) {
|
|
126
|
-
return { icon: 'MarkdownLine', color: '#55a0ff', label: 'Markdown' };
|
|
127
|
-
}
|
|
128
|
-
if (ct === 'text/x-log') {
|
|
129
|
-
return { icon: 'FileList2Line', color: '#8b8a97', label: 'Log' };
|
|
130
|
-
}
|
|
131
|
-
if (ct.startsWith('text/')) {
|
|
132
|
-
return { icon: 'FileTextLine', color: '#8b8a97', label: 'Text' };
|
|
133
|
-
}
|
|
134
|
-
return { icon: 'FileLine', color: '#8b8a97', label: 'File' };
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
// A coarse file family for the type filter. Images are their own section, so this
|
|
138
|
-
// only buckets the non-image "Files"; it mirrors fileType's grouping.
|
|
139
|
-
type TFileCategory = 'documents' | 'data' | 'logs' | 'archives';
|
|
140
|
-
const fileCategory = (contentType: string): TFileCategory => {
|
|
141
|
-
const ct = contentType.toLowerCase();
|
|
142
|
-
if (ct.includes('zip') || ct.includes('gzip')) {
|
|
143
|
-
return 'archives';
|
|
144
|
-
}
|
|
145
|
-
if (ct === 'text/x-log') {
|
|
146
|
-
return 'logs';
|
|
147
|
-
}
|
|
148
|
-
if (ct === 'text/csv' || ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
|
|
149
|
-
return 'data';
|
|
150
|
-
}
|
|
151
|
-
return 'documents';
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
// The type filter: 'all' plus one option per section / file-family. Empty families
|
|
155
|
-
// are hidden from the menu (a ticket with no archives never offers "Archives").
|
|
156
|
-
type TRefFilter = 'all' | 'links' | 'screenshots' | TFileCategory;
|
|
157
|
-
type TRefSort = 'newest' | 'oldest' | 'name' | 'size';
|
|
158
|
-
|
|
159
|
-
const FILTER_META: Record<TRefFilter, { label: string; icon: IReqoreIconName }> = {
|
|
160
|
-
all: { label: 'All types', icon: 'Apps2Line' },
|
|
161
|
-
links: { label: 'Linked interfaces', icon: 'LinksLine' },
|
|
162
|
-
screenshots: { label: 'Screenshots', icon: 'ImageLine' },
|
|
163
|
-
documents: { label: 'Documents', icon: 'FileTextLine' },
|
|
164
|
-
data: { label: 'Data', icon: 'CodeSLine' },
|
|
165
|
-
logs: { label: 'Logs', icon: 'FileList2Line' },
|
|
166
|
-
archives: { label: 'Archives', icon: 'FileZipLine' },
|
|
167
|
-
};
|
|
168
|
-
// the four filter keys that live inside the "Files" section
|
|
169
|
-
const FILE_FILTERS: TFileCategory[] = ['documents', 'data', 'logs', 'archives'];
|
|
170
|
-
// menu order mirrors the section order on screen: screenshots, links, then files
|
|
171
|
-
const FILTER_ORDER: TRefFilter[] = ['all', 'screenshots', 'links', ...FILE_FILTERS];
|
|
172
|
-
|
|
173
|
-
const SORT_META: Record<TRefSort, { label: string; icon: IReqoreIconName }> = {
|
|
174
|
-
newest: { label: 'Newest first', icon: 'SortDesc' },
|
|
175
|
-
oldest: { label: 'Oldest first', icon: 'SortAsc' },
|
|
176
|
-
name: { label: 'Name (A–Z)', icon: 'SortAlphabetAsc' },
|
|
177
|
-
size: { label: 'Largest first', icon: 'ScalesLine' },
|
|
178
|
-
};
|
|
179
|
-
const SORT_ORDER: TRefSort[] = ['newest', 'oldest', 'name', 'size'];
|
|
180
|
-
|
|
181
|
-
const createdMs = (a: ITicketReferenceAttachment): number =>
|
|
182
|
-
a.created ? new Date(a.created).getTime() || 0 : 0;
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* A reference plus where it was cited.
|
|
186
|
-
*
|
|
187
|
-
* `message_id` is absent for a ticket-level reference — those are filed against the
|
|
188
|
-
* ticket itself (`message_id IS NULL` server-side), so there is no message to reveal
|
|
189
|
-
* and "show in chat" must not be offered for them.
|
|
190
|
-
*/
|
|
191
|
-
export interface IResolvedInterfaceReference extends IInterfaceReference {
|
|
192
|
-
message_id?: string;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// dedupe a mixed run of references (ticket + every message) by identity — the same
|
|
196
|
-
// interface referenced ticket-level and in a reply is one entry, not two.
|
|
197
|
-
const dedupeRefs = (refs: IResolvedInterfaceReference[]): IResolvedInterfaceReference[] => {
|
|
198
|
-
const byKey = new Map<string, IResolvedInterfaceReference>();
|
|
199
|
-
for (const r of refs) {
|
|
200
|
-
const key = `${r.interface_kind}:${r.interface_name}`;
|
|
201
|
-
const kept = byKey.get(key);
|
|
202
|
-
if (!kept) {
|
|
203
|
-
byKey.set(key, r);
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
// The ticket-level copy is merged first and carries no message. When the same
|
|
207
|
-
// interface also appears in a reply, adopt that linkage instead of discarding it —
|
|
208
|
-
// otherwise an interface that demonstrably IS in the thread offers no way to jump
|
|
209
|
-
// to it, purely because it happened to be cited on the ticket as well.
|
|
210
|
-
if (!kept.message_id && r.message_id) {
|
|
211
|
-
byKey.set(key, { ...kept, message_id: r.message_id });
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return Array.from(byKey.values());
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
const META_EFFECT = { textSize: 'small', opacity: 0.55 } as const;
|
|
218
|
-
|
|
219
|
-
// ---------------------------------------------------------------------------
|
|
220
|
-
// image URLs — fetch every screenshot's bytes once as an object URL, cached, and
|
|
221
|
-
// revoked on unmount / when the set changes. Shared by the grid and the lightbox.
|
|
222
|
-
// ---------------------------------------------------------------------------
|
|
223
|
-
const useImageUrls = (
|
|
224
|
-
ids: string[],
|
|
225
|
-
fetchAttachmentUrl?: (attachmentId: string) => Promise<string>
|
|
226
|
-
): Record<string, string | null> => {
|
|
227
|
-
const [urls, setUrls] = useState<Record<string, string | null>>({});
|
|
228
|
-
const key = ids.join(',');
|
|
229
|
-
|
|
230
|
-
useEffect(() => {
|
|
231
|
-
if (!ids.length) {
|
|
232
|
-
return undefined;
|
|
233
|
-
}
|
|
234
|
-
// No fetcher wired means there is no preview to wait for — resolve every id
|
|
235
|
-
// straight to the "no preview" state (null) so tiles fall through to the
|
|
236
|
-
// filename / download fallback instead of a forever-pending "…" (undefined
|
|
237
|
-
// is reserved for a wired fetcher's genuinely in-flight requests).
|
|
238
|
-
if (!fetchAttachmentUrl) {
|
|
239
|
-
setUrls(Object.fromEntries(ids.map((id) => [id, null])));
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
242
|
-
let active = true;
|
|
243
|
-
const created: string[] = [];
|
|
244
|
-
Promise.allSettled(
|
|
245
|
-
ids.map((id) =>
|
|
246
|
-
fetchAttachmentUrl(id)
|
|
247
|
-
.then(loadedImageUrl)
|
|
248
|
-
.then((url) => ({ id, url }))
|
|
249
|
-
)
|
|
250
|
-
).then(
|
|
251
|
-
(results) => {
|
|
252
|
-
if (!active) {
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
const next: Record<string, string | null> = {};
|
|
256
|
-
results.forEach((r, i) => {
|
|
257
|
-
if (r.status === 'fulfilled') {
|
|
258
|
-
next[r.value.id] = r.value.url;
|
|
259
|
-
created.push(r.value.url);
|
|
260
|
-
} else {
|
|
261
|
-
next[ids[i]] = null;
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
setUrls(next);
|
|
265
|
-
}
|
|
266
|
-
);
|
|
267
|
-
return () => {
|
|
268
|
-
active = false;
|
|
269
|
-
created.forEach((url) => URL.revokeObjectURL(url));
|
|
270
|
-
};
|
|
271
|
-
// `key` is the stable signature of `ids`; re-run when the image set changes.
|
|
272
|
-
}, [key, fetchAttachmentUrl]);
|
|
273
|
-
|
|
274
|
-
return urls;
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
// ---------------------------------------------------------------------------
|
|
278
|
-
// styled bits (reqore covers the rest)
|
|
279
|
-
// ---------------------------------------------------------------------------
|
|
280
|
-
/*
|
|
281
|
-
* The search/filter/sort strip reads as part of the list it filters, not as a stray
|
|
282
|
-
* row above it: it gets its own tinted, bordered surface and sticks to the top of the
|
|
283
|
-
* scroll container. Free-floating, it was easy to lose track of — and scrolling the
|
|
284
|
-
* sections took the search box away with them, which is exactly when you want it.
|
|
285
|
-
*/
|
|
286
|
-
/*
|
|
287
|
-
* A screenshot tile: the image is the button, and the overflow menu is a sibling
|
|
288
|
-
* layered over it — a <button> cannot legally contain another button, so the menu
|
|
289
|
-
* cannot live inside Thumb. It stays hidden until the tile is hovered or something
|
|
290
|
-
* inside it takes focus, so a wall of screenshots still reads as images rather than
|
|
291
|
-
* a grid of controls. Hidden by opacity rather than display, so it remains reachable
|
|
292
|
-
* by keyboard.
|
|
293
|
-
*/
|
|
294
|
-
const ThumbTile = styled.div`
|
|
295
|
-
position: relative;
|
|
296
|
-
/*
|
|
297
|
-
* A single-cell grid, not flex: a grid child stretches to fill by default, so the
|
|
298
|
-
* thumbnail spans the whole tile and the overlay's top-right corner IS the image's
|
|
299
|
-
* top-right corner. Under flex the button sized itself from its aspect-ratio, left a
|
|
300
|
-
* strip of empty tile beside it, and the menu — anchored to the tile — landed in that
|
|
301
|
-
* strip instead of over the image.
|
|
302
|
-
*/
|
|
303
|
-
display: grid;
|
|
304
|
-
|
|
305
|
-
> .screenshot-menu {
|
|
306
|
-
position: absolute;
|
|
307
|
-
top: 5px;
|
|
308
|
-
right: 5px;
|
|
309
|
-
opacity: 0;
|
|
310
|
-
transition: opacity 0.12s ease-out;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
&:hover > .screenshot-menu,
|
|
314
|
-
&:focus-within > .screenshot-menu {
|
|
315
|
-
opacity: 1;
|
|
316
|
-
}
|
|
317
|
-
`;
|
|
318
|
-
|
|
319
|
-
const Thumb = styled.button`
|
|
320
|
-
appearance: none;
|
|
321
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
322
|
-
border-radius: 8px;
|
|
323
|
-
overflow: hidden;
|
|
324
|
-
padding: 0;
|
|
325
|
-
cursor: pointer;
|
|
326
|
-
aspect-ratio: 1 / 1;
|
|
327
|
-
background: rgba(255, 255, 255, 0.03);
|
|
328
|
-
display: flex;
|
|
329
|
-
align-items: center;
|
|
330
|
-
justify-content: center;
|
|
331
|
-
position: relative;
|
|
332
|
-
transition: border-color 0.15s;
|
|
333
|
-
/* A screenshot is something to read, not a hand-off to Qonsole, so its hover and focus
|
|
334
|
-
brighten the tile's own edge instead of wearing the product's purple (decision 002). */
|
|
335
|
-
&:hover {
|
|
336
|
-
border-color: rgba(255, 255, 255, 0.35);
|
|
337
|
-
}
|
|
338
|
-
&:focus-visible {
|
|
339
|
-
outline: 2px solid rgba(255, 255, 255, 0.6);
|
|
340
|
-
outline-offset: 2px;
|
|
341
|
-
}
|
|
342
|
-
img {
|
|
343
|
-
width: 100%;
|
|
344
|
-
height: 100%;
|
|
345
|
-
object-fit: cover;
|
|
346
|
-
display: block;
|
|
347
|
-
}
|
|
348
|
-
`;
|
|
349
|
-
const ThumbCaption = styled.span`
|
|
350
|
-
position: absolute;
|
|
351
|
-
left: 0;
|
|
352
|
-
right: 0;
|
|
353
|
-
bottom: 0;
|
|
354
|
-
padding: 4px 6px;
|
|
355
|
-
font-size: 10px;
|
|
356
|
-
color: #fff;
|
|
357
|
-
background: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);
|
|
358
|
-
white-space: nowrap;
|
|
359
|
-
overflow: hidden;
|
|
360
|
-
text-overflow: ellipsis;
|
|
361
|
-
text-align: left;
|
|
362
|
-
`;
|
|
363
|
-
// ---------------------------------------------------------------------------
|
|
364
|
-
// screenshot thumbnail
|
|
365
|
-
// ---------------------------------------------------------------------------
|
|
366
|
-
const Screenshot = ({
|
|
367
|
-
att,
|
|
368
|
-
url,
|
|
369
|
-
onOpen,
|
|
370
|
-
menu,
|
|
371
|
-
}: {
|
|
372
|
-
att: ITicketReferenceAttachment;
|
|
373
|
-
url: string | null | undefined;
|
|
374
|
-
onOpen: () => void;
|
|
375
|
-
menu?: IReqorePanelSubAction[];
|
|
376
|
-
}) => (
|
|
377
|
-
<ThumbTile>
|
|
378
|
-
<Thumb type='button' title={att.filename} onClick={onOpen}>
|
|
379
|
-
{url ?
|
|
380
|
-
<img src={url} alt={att.filename} />
|
|
381
|
-
: <ReqoreSpan effect={{ opacity: 0.5, textSize: 'small' }}>
|
|
382
|
-
{url === null ? att.filename : '…'}
|
|
383
|
-
</ReqoreSpan>
|
|
384
|
-
}
|
|
385
|
-
<ThumbCaption>{att.filename}</ThumbCaption>
|
|
386
|
-
</Thumb>
|
|
387
|
-
{/* One action doesn't earn a menu. With a single entry the overlay IS that
|
|
388
|
-
action, so a tile and a file row offer the same thing the same way instead of
|
|
389
|
-
hiding a download behind a caret on one surface and not the other. */}
|
|
390
|
-
{menu?.length === 1 ?
|
|
391
|
-
<ReqoreButton
|
|
392
|
-
className='screenshot-menu'
|
|
393
|
-
icon={menu[0].icon}
|
|
394
|
-
tooltip={menu[0].label as string}
|
|
395
|
-
size='small'
|
|
396
|
-
flat
|
|
397
|
-
minimal
|
|
398
|
-
fixed
|
|
399
|
-
onClick={(event: React.MouseEvent<HTMLElement>) => {
|
|
400
|
-
event.stopPropagation();
|
|
401
|
-
menu[0].onClick?.(menu[0]);
|
|
402
|
-
}}
|
|
403
|
-
/>
|
|
404
|
-
: menu?.length ?
|
|
405
|
-
<ReqoreDropdown
|
|
406
|
-
className='screenshot-menu'
|
|
407
|
-
icon='More2Line'
|
|
408
|
-
tooltip='More actions'
|
|
409
|
-
size='small'
|
|
410
|
-
flat
|
|
411
|
-
minimal
|
|
412
|
-
fixed
|
|
413
|
-
useTargetWidth={false}
|
|
414
|
-
items={menu}
|
|
415
|
-
onClick={(event: React.MouseEvent<HTMLElement>) => event.stopPropagation()}
|
|
416
|
-
/>
|
|
417
|
-
: null}
|
|
418
|
-
</ThumbTile>
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
// ---------------------------------------------------------------------------
|
|
422
|
-
// main
|
|
423
|
-
// ---------------------------------------------------------------------------
|
|
424
|
-
export const TicketReferences = ({
|
|
425
|
-
references = [],
|
|
426
|
-
messages = [],
|
|
427
|
-
attachments,
|
|
428
|
-
viewerRole,
|
|
429
|
-
fetchAttachmentUrl,
|
|
430
|
-
onDownloadAttachment,
|
|
431
|
-
onInterfaceClick,
|
|
432
|
-
onShowInChat,
|
|
433
|
-
resolveInterfaceIcon,
|
|
434
|
-
preferKindImage = false,
|
|
435
|
-
loading,
|
|
436
|
-
}: ITicketReferencesProps) => {
|
|
437
|
-
// references: ticket-level + every message's, deduped. Rendered as rows carrying
|
|
438
|
-
// their kind as metadata — the same treatment as the files below — so the tab
|
|
439
|
-
// reads as one consistent list rather than chips above rows.
|
|
440
|
-
const allRefs = useMemo(
|
|
441
|
-
() =>
|
|
442
|
-
dedupeRefs([
|
|
443
|
-
// ticket-level first (no message), then each message's own citations tagged
|
|
444
|
-
// with the message they came from
|
|
445
|
-
...references,
|
|
446
|
-
...messages.flatMap((m) =>
|
|
447
|
-
(m.referenced_interfaces ?? []).map((r) => ({ ...r, message_id: m.message_id }))
|
|
448
|
-
),
|
|
449
|
-
]),
|
|
450
|
-
[references, messages]
|
|
451
|
-
);
|
|
452
|
-
const resolveIcon = resolveInterfaceIcon ?? defaultInterfaceIcon;
|
|
453
|
-
/* Each reference's icon: the kind's font icon, and the image chosen by the same
|
|
454
|
-
precedence as the chips (`preferKindImage`), drawn once it has loaded. */
|
|
455
|
-
const markOf = (reference: IInterfaceReference) => {
|
|
456
|
-
const mark = toInterfaceKindMark(resolveIcon(reference.interface_kind));
|
|
457
|
-
const own = reference.logo;
|
|
458
|
-
return {
|
|
459
|
-
icon: mark.icon,
|
|
460
|
-
image: preferKindImage ? (mark.image ?? own) : (own ?? mark.image),
|
|
461
|
-
};
|
|
462
|
-
};
|
|
463
|
-
const isImageLoaded = useLoadedImages(allRefs.map((reference) => markOf(reference).image));
|
|
464
|
-
|
|
465
|
-
/**
|
|
466
|
-
* The trailing controls for a row: its primary action, plus a "three dots" menu when
|
|
467
|
-
* there is anything else to offer. Built in one place so the interface rows and the
|
|
468
|
-
* file rows can't drift into different affordances.
|
|
469
|
-
*
|
|
470
|
-
* The menu is omitted entirely when it would be empty — a row filed against the
|
|
471
|
-
* ticket rather than a reply has no message to reveal, and an always-present menu
|
|
472
|
-
* that is sometimes empty is worse than no menu.
|
|
473
|
-
*/
|
|
474
|
-
/**
|
|
475
|
-
* The reveal action. One definition, used by the reference rows, the file rows and
|
|
476
|
-
* the screenshot tiles.
|
|
477
|
-
*
|
|
478
|
-
* Present on every row, but DISABLED for anything filed against the ticket itself
|
|
479
|
-
* rather than a reply — those have no message to jump to. Showing the menu on some
|
|
480
|
-
* rows and not others read as breakage rather than as a distinction, and the
|
|
481
|
-
* disabled entry says why instead of leaving the reader to infer it.
|
|
482
|
-
*/
|
|
483
|
-
const showInChatItem = (messageId?: string | null): IReqorePanelSubAction[] => {
|
|
484
|
-
if (!onShowInChat) {
|
|
485
|
-
return [];
|
|
486
|
-
}
|
|
487
|
-
return messageId ?
|
|
488
|
-
[{ label: 'Show in chat', icon: 'Chat1Line', onClick: () => onShowInChat(messageId) }]
|
|
489
|
-
: [
|
|
490
|
-
{
|
|
491
|
-
label: 'Show in chat',
|
|
492
|
-
icon: 'Chat1Line',
|
|
493
|
-
disabled: true,
|
|
494
|
-
description: 'Filed on the ticket, not in a reply',
|
|
495
|
-
},
|
|
496
|
-
];
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
const rowActions = (
|
|
500
|
-
primary: IReqoreEntityRowAction | undefined,
|
|
501
|
-
messageId?: string | null
|
|
502
|
-
): IReqoreEntityRowAction[] => {
|
|
503
|
-
const menu = showInChatItem(messageId);
|
|
504
|
-
|
|
505
|
-
return [
|
|
506
|
-
...(primary ? [primary] : []),
|
|
507
|
-
...(menu.length ?
|
|
508
|
-
[
|
|
509
|
-
{
|
|
510
|
-
icon: 'More2Line' as IReqoreIconName,
|
|
511
|
-
tooltip: 'More actions',
|
|
512
|
-
flat: true,
|
|
513
|
-
minimal: true,
|
|
514
|
-
actions: menu,
|
|
515
|
-
},
|
|
516
|
-
]
|
|
517
|
-
: []),
|
|
518
|
-
];
|
|
519
|
-
};
|
|
520
|
-
|
|
521
|
-
// attachments: the list-endpoint set (with provenance) or, failing that, the
|
|
522
|
-
// ones embedded per message (deriving provenance from the carrying message)
|
|
523
|
-
const allAttachments = useMemo<ITicketReferenceAttachment[]>(() => {
|
|
524
|
-
const source: ITicketReferenceAttachment[] =
|
|
525
|
-
attachments ??
|
|
526
|
-
messages.flatMap((m) =>
|
|
527
|
-
(m.attachments ?? []).map((a) => ({
|
|
528
|
-
...a,
|
|
529
|
-
message_id: m.message_id,
|
|
530
|
-
uploaded_by: m.author_id,
|
|
531
|
-
created: m.created,
|
|
532
|
-
}))
|
|
533
|
-
);
|
|
534
|
-
const seen = new Set<string>();
|
|
535
|
-
return source.filter((a) => {
|
|
536
|
-
if (seen.has(a.attachment_id)) {
|
|
537
|
-
return false;
|
|
538
|
-
}
|
|
539
|
-
seen.add(a.attachment_id);
|
|
540
|
-
return true;
|
|
541
|
-
});
|
|
542
|
-
}, [attachments, messages]);
|
|
543
|
-
|
|
544
|
-
const images = useMemo(
|
|
545
|
-
() => allAttachments.filter((a) => isImage(a.content_type)),
|
|
546
|
-
[allAttachments]
|
|
547
|
-
);
|
|
548
|
-
const files = useMemo(
|
|
549
|
-
() => allAttachments.filter((a) => !isImage(a.content_type)),
|
|
550
|
-
[allAttachments]
|
|
551
|
-
);
|
|
552
|
-
|
|
553
|
-
const imageIds = useMemo(() => images.map((a) => a.attachment_id), [images]);
|
|
554
|
-
const urls = useImageUrls(imageIds, fetchAttachmentUrl);
|
|
555
|
-
|
|
556
|
-
const [lightbox, setLightbox] = useState<number | null>(null);
|
|
557
|
-
|
|
558
|
-
// --- search / filter / sort ------------------------------------------------
|
|
559
|
-
const [search, setSearch] = useState('');
|
|
560
|
-
const [filter, setFilter] = useState<TRefFilter>('all');
|
|
561
|
-
const [sort, setSort] = useState<TRefSort>('newest');
|
|
562
|
-
|
|
563
|
-
const query = search.trim().toLowerCase();
|
|
564
|
-
const matchesText = useCallback(
|
|
565
|
-
(...fields: (string | undefined)[]) =>
|
|
566
|
-
!query || fields.some((f) => f?.toLowerCase().includes(query)),
|
|
567
|
-
[query]
|
|
568
|
-
);
|
|
569
|
-
|
|
570
|
-
const sortAttachments = useCallback(
|
|
571
|
-
(arr: ITicketReferenceAttachment[]): ITicketReferenceAttachment[] => {
|
|
572
|
-
const next = [...arr];
|
|
573
|
-
switch (sort) {
|
|
574
|
-
case 'oldest':
|
|
575
|
-
return next.sort((a, b) => createdMs(a) - createdMs(b));
|
|
576
|
-
case 'name':
|
|
577
|
-
return next.sort((a, b) => a.filename.localeCompare(b.filename));
|
|
578
|
-
case 'size':
|
|
579
|
-
return next.sort((a, b) => (b.size_bytes ?? 0) - (a.size_bytes ?? 0));
|
|
580
|
-
case 'newest':
|
|
581
|
-
default:
|
|
582
|
-
return next.sort((a, b) => createdMs(b) - createdMs(a));
|
|
583
|
-
}
|
|
584
|
-
},
|
|
585
|
-
[sort]
|
|
586
|
-
);
|
|
587
|
-
|
|
588
|
-
// per-family counts feed the filter menu: empty families are dropped, and the
|
|
589
|
-
// surviving ones carry a count badge in their label.
|
|
590
|
-
const counts = useMemo(() => {
|
|
591
|
-
const byCategory: Record<TFileCategory, number> = {
|
|
592
|
-
documents: 0,
|
|
593
|
-
data: 0,
|
|
594
|
-
logs: 0,
|
|
595
|
-
archives: 0,
|
|
596
|
-
};
|
|
597
|
-
for (const f of files) {
|
|
598
|
-
byCategory[fileCategory(f.content_type)] += 1;
|
|
599
|
-
}
|
|
600
|
-
return {
|
|
601
|
-
all: allRefs.length + allAttachments.length,
|
|
602
|
-
links: allRefs.length,
|
|
603
|
-
screenshots: images.length,
|
|
604
|
-
...byCategory,
|
|
605
|
-
} as Record<TRefFilter, number>;
|
|
606
|
-
}, [files, images.length, allRefs.length, allAttachments.length]);
|
|
607
|
-
|
|
608
|
-
// the three sections after search + type filter are applied. References sort by
|
|
609
|
-
// kind then name so like sits with like; "Name" sorts them purely by name.
|
|
610
|
-
const visibleRefs = useMemo(() => {
|
|
611
|
-
if (filter !== 'all' && filter !== 'links') {
|
|
612
|
-
return [] as IResolvedInterfaceReference[];
|
|
613
|
-
}
|
|
614
|
-
return allRefs
|
|
615
|
-
.filter((r) => matchesText(r.interface_name, r.interface_kind))
|
|
616
|
-
.sort((a, b) =>
|
|
617
|
-
sort === 'name' ?
|
|
618
|
-
a.interface_name.localeCompare(b.interface_name)
|
|
619
|
-
: a.interface_kind.localeCompare(b.interface_kind) ||
|
|
620
|
-
a.interface_name.localeCompare(b.interface_name)
|
|
621
|
-
);
|
|
622
|
-
}, [allRefs, filter, matchesText, sort]);
|
|
623
|
-
|
|
624
|
-
const visibleImages = useMemo(() => {
|
|
625
|
-
if (filter !== 'all' && filter !== 'screenshots') {
|
|
626
|
-
return [] as ITicketReferenceAttachment[];
|
|
627
|
-
}
|
|
628
|
-
return sortAttachments(images.filter((a) => matchesText(a.filename)));
|
|
629
|
-
}, [images, filter, matchesText, sortAttachments]);
|
|
630
|
-
|
|
631
|
-
const visibleFiles = useMemo(() => {
|
|
632
|
-
const fileFilter = FILE_FILTERS.includes(filter as TFileCategory);
|
|
633
|
-
if (filter !== 'all' && !fileFilter) {
|
|
634
|
-
return [] as ITicketReferenceAttachment[];
|
|
635
|
-
}
|
|
636
|
-
let list = files.filter((a) => matchesText(a.filename));
|
|
637
|
-
if (fileFilter) {
|
|
638
|
-
list = list.filter((a) => fileCategory(a.content_type) === filter);
|
|
639
|
-
}
|
|
640
|
-
return sortAttachments(list);
|
|
641
|
-
}, [files, filter, matchesText, sortAttachments]);
|
|
642
|
-
|
|
643
|
-
// a filtered-out lightbox target would dangle — close it if its index falls away
|
|
644
|
-
useEffect(() => {
|
|
645
|
-
if (lightbox !== null && lightbox >= visibleImages.length) {
|
|
646
|
-
setLightbox(null);
|
|
647
|
-
}
|
|
648
|
-
}, [visibleImages.length, lightbox]);
|
|
649
|
-
|
|
650
|
-
if (loading) {
|
|
651
|
-
return (
|
|
652
|
-
<ReqoreControlGroup fluid horizontalAlign='center' style={{ padding: '32px 0' }}>
|
|
653
|
-
<ReqoreSpinner iconColor='info' size='big'>
|
|
654
|
-
Loading references…
|
|
655
|
-
</ReqoreSpinner>
|
|
656
|
-
</ReqoreControlGroup>
|
|
657
|
-
);
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
if (!allRefs.length && !allAttachments.length) {
|
|
661
|
-
return (
|
|
662
|
-
<ReqoreEmptyState
|
|
663
|
-
icon='FolderInfoLine'
|
|
664
|
-
title='No references or files yet'
|
|
665
|
-
description='Interface references and any screenshots, documents, or files attached to this ticket will appear here.'
|
|
666
|
-
flat
|
|
667
|
-
transparent
|
|
668
|
-
/>
|
|
669
|
-
);
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
// A search + type-filter + sort strip, shown once a ticket carries enough to be
|
|
673
|
-
// worth narrowing (any files, or 3+ linked interfaces). Empty type-families are
|
|
674
|
-
// dropped from the filter menu so it only ever offers what's actually present.
|
|
675
|
-
const showControls = allAttachments.length > 0 || allRefs.length > 2;
|
|
676
|
-
const filterOptions = FILTER_ORDER.filter((key) => key === 'all' || counts[key] > 0);
|
|
677
|
-
const nothingVisible = !visibleRefs.length && !visibleImages.length && !visibleFiles.length;
|
|
678
|
-
|
|
679
|
-
const controlBar =
|
|
680
|
-
showControls ?
|
|
681
|
-
<SearchFilterBar
|
|
682
|
-
sticky
|
|
683
|
-
value={search}
|
|
684
|
-
onChange={setSearch}
|
|
685
|
-
placeholder='Search files and references…'
|
|
686
|
-
filters={[
|
|
687
|
-
{
|
|
688
|
-
icon: FILTER_META[filter].icon,
|
|
689
|
-
label: FILTER_META[filter].label,
|
|
690
|
-
items: filterOptions.map((key) => ({
|
|
691
|
-
selected: filter === key,
|
|
692
|
-
icon: FILTER_META[key].icon,
|
|
693
|
-
label:
|
|
694
|
-
key === 'all' ?
|
|
695
|
-
FILTER_META.all.label
|
|
696
|
-
: `${FILTER_META[key].label} (${counts[key]})`,
|
|
697
|
-
onClick: () => setFilter(key),
|
|
698
|
-
})),
|
|
699
|
-
},
|
|
700
|
-
{
|
|
701
|
-
icon: 'ArrowUpDownLine',
|
|
702
|
-
label: SORT_META[sort].label,
|
|
703
|
-
items: SORT_ORDER.map((key) => ({
|
|
704
|
-
selected: sort === key,
|
|
705
|
-
icon: SORT_META[key].icon,
|
|
706
|
-
label: SORT_META[key].label,
|
|
707
|
-
onClick: () => setSort(key),
|
|
708
|
-
})),
|
|
709
|
-
},
|
|
710
|
-
]}
|
|
711
|
-
/>
|
|
712
|
-
: null;
|
|
713
|
-
|
|
714
|
-
return (
|
|
715
|
-
<ReqoreControlGroup vertical fluid gapSize='big'>
|
|
716
|
-
{controlBar}
|
|
717
|
-
|
|
718
|
-
{nothingVisible ?
|
|
719
|
-
<ReqoreEmptyState
|
|
720
|
-
icon='Search2Line'
|
|
721
|
-
title='No matching references or files'
|
|
722
|
-
description={
|
|
723
|
-
query ?
|
|
724
|
-
`Nothing here matches “${search.trim()}”.`
|
|
725
|
-
: 'Nothing matches the current filter.'
|
|
726
|
-
}
|
|
727
|
-
flat
|
|
728
|
-
transparent
|
|
729
|
-
actions={
|
|
730
|
-
<ReqoreButton
|
|
731
|
-
icon='CloseLine'
|
|
732
|
-
minimal
|
|
733
|
-
onClick={() => {
|
|
734
|
-
setSearch('');
|
|
735
|
-
setFilter('all');
|
|
736
|
-
}}
|
|
737
|
-
>
|
|
738
|
-
Clear filters
|
|
739
|
-
</ReqoreButton>
|
|
740
|
-
}
|
|
741
|
-
/>
|
|
742
|
-
: null}
|
|
743
|
-
|
|
744
|
-
{visibleImages.length ?
|
|
745
|
-
<ReqorePanel
|
|
746
|
-
label='Screenshots'
|
|
747
|
-
icon='ImageLine'
|
|
748
|
-
badge={visibleImages.length}
|
|
749
|
-
flat
|
|
750
|
-
transparent
|
|
751
|
-
size='small'
|
|
752
|
-
labelSize={4}
|
|
753
|
-
collapsible
|
|
754
|
-
>
|
|
755
|
-
<ReqoreColumns columns='auto-fill' minColumnWidth='140px' columnsGap='10px'>
|
|
756
|
-
{visibleImages.map((att, i) => (
|
|
757
|
-
<Screenshot
|
|
758
|
-
key={att.attachment_id}
|
|
759
|
-
att={att}
|
|
760
|
-
url={urls[att.attachment_id]}
|
|
761
|
-
onOpen={() =>
|
|
762
|
-
urls[att.attachment_id] ?
|
|
763
|
-
setLightbox(i)
|
|
764
|
-
: onDownloadAttachment?.(att.attachment_id, att.filename)
|
|
765
|
-
}
|
|
766
|
-
menu={[
|
|
767
|
-
...(onDownloadAttachment ?
|
|
768
|
-
[
|
|
769
|
-
{
|
|
770
|
-
label: 'Download',
|
|
771
|
-
icon: 'DownloadLine' as IReqoreIconName,
|
|
772
|
-
onClick: () => onDownloadAttachment(att.attachment_id, att.filename),
|
|
773
|
-
},
|
|
774
|
-
]
|
|
775
|
-
: []),
|
|
776
|
-
...showInChatItem(att.message_id),
|
|
777
|
-
]}
|
|
778
|
-
/>
|
|
779
|
-
))}
|
|
780
|
-
</ReqoreColumns>
|
|
781
|
-
</ReqorePanel>
|
|
782
|
-
: null}
|
|
783
|
-
|
|
784
|
-
{visibleRefs.length ?
|
|
785
|
-
<ReqorePanel
|
|
786
|
-
label='Linked interfaces'
|
|
787
|
-
icon='LinksLine'
|
|
788
|
-
badge={visibleRefs.length}
|
|
789
|
-
flat
|
|
790
|
-
transparent
|
|
791
|
-
size='small'
|
|
792
|
-
labelSize={4}
|
|
793
|
-
collapsible
|
|
794
|
-
>
|
|
795
|
-
{/* small rows: a reference list is scanned, so density beats presence —
|
|
796
|
-
the group's size reaches every row (ControlGroup/index.tsx:436) */}
|
|
797
|
-
<ReqoreControlGroup vertical fluid gapSize='small' size='small'>
|
|
798
|
-
{visibleRefs.map((reference) => {
|
|
799
|
-
// the same vocabulary and precedence as the reference chips: the kind's
|
|
800
|
-
// font icon, and the chosen image once it has loaded
|
|
801
|
-
const { icon, image } = markOf(reference);
|
|
802
|
-
return (
|
|
803
|
-
<ReqoreEntityRow
|
|
804
|
-
key={
|
|
805
|
-
reference.reference_id ??
|
|
806
|
-
`${reference.interface_kind}:${reference.interface_name}`
|
|
807
|
-
}
|
|
808
|
-
icon={icon}
|
|
809
|
-
iconImage={isImageLoaded(image) ? image : undefined}
|
|
810
|
-
label={reference.interface_name}
|
|
811
|
-
metadata={
|
|
812
|
-
<ReqoreTextEffect effect={META_EFFECT}>
|
|
813
|
-
{reference.interface_kind}
|
|
814
|
-
</ReqoreTextEffect>
|
|
815
|
-
}
|
|
816
|
-
flat
|
|
817
|
-
tooltip={
|
|
818
|
-
onInterfaceClick ?
|
|
819
|
-
`Open ${reference.interface_kind} ${reference.interface_name}`
|
|
820
|
-
: undefined
|
|
821
|
-
}
|
|
822
|
-
actions={rowActions(
|
|
823
|
-
onInterfaceClick ?
|
|
824
|
-
{
|
|
825
|
-
icon: 'ArrowRightUpLine',
|
|
826
|
-
tooltip: 'Open',
|
|
827
|
-
onClick: () => onInterfaceClick(reference),
|
|
828
|
-
}
|
|
829
|
-
: undefined,
|
|
830
|
-
reference.message_id
|
|
831
|
-
)}
|
|
832
|
-
/>
|
|
833
|
-
);
|
|
834
|
-
})}
|
|
835
|
-
</ReqoreControlGroup>
|
|
836
|
-
</ReqorePanel>
|
|
837
|
-
: null}
|
|
838
|
-
|
|
839
|
-
{visibleFiles.length ?
|
|
840
|
-
<ReqorePanel
|
|
841
|
-
label='Files'
|
|
842
|
-
icon='FileList3Line'
|
|
843
|
-
badge={visibleFiles.length}
|
|
844
|
-
flat
|
|
845
|
-
transparent
|
|
846
|
-
size='small'
|
|
847
|
-
labelSize={4}
|
|
848
|
-
collapsible
|
|
849
|
-
actions={
|
|
850
|
-
visibleFiles.length > 1 && onDownloadAttachment ?
|
|
851
|
-
[
|
|
852
|
-
{
|
|
853
|
-
icon: 'DownloadCloud2Line',
|
|
854
|
-
label: 'Download all',
|
|
855
|
-
onClick: () =>
|
|
856
|
-
visibleFiles.forEach((f) => onDownloadAttachment(f.attachment_id, f.filename)),
|
|
857
|
-
},
|
|
858
|
-
]
|
|
859
|
-
: []
|
|
860
|
-
}
|
|
861
|
-
>
|
|
862
|
-
{/* matches the interface rows above — the two lists read as one surface */}
|
|
863
|
-
<ReqoreControlGroup vertical fluid gapSize='small' size='small'>
|
|
864
|
-
{visibleFiles.map((f) => {
|
|
865
|
-
const type = fileType(f.content_type);
|
|
866
|
-
// a customer's own upload reads "you"; everything else shows the
|
|
867
|
-
// (already server-masked) uploader — "Qorus Support" for staff replies.
|
|
868
|
-
const uploader =
|
|
869
|
-
viewerRole === 'customer' && f.uploader_type === 'customer' ? 'you' : f.uploaded_by;
|
|
870
|
-
const provenance = [
|
|
871
|
-
formatBytes(f.size_bytes),
|
|
872
|
-
uploader ? `added by ${uploader}` : undefined,
|
|
873
|
-
timeAgo(f.created) || undefined,
|
|
874
|
-
]
|
|
875
|
-
.filter(Boolean)
|
|
876
|
-
.join(' · ');
|
|
877
|
-
return (
|
|
878
|
-
<ReqoreEntityRow
|
|
879
|
-
key={f.attachment_id}
|
|
880
|
-
icon={type.icon}
|
|
881
|
-
iconColor={type.color}
|
|
882
|
-
label={f.filename}
|
|
883
|
-
metadata={<ReqoreTextEffect effect={META_EFFECT}>{provenance}</ReqoreTextEffect>}
|
|
884
|
-
flat
|
|
885
|
-
actions={rowActions(
|
|
886
|
-
onDownloadAttachment ?
|
|
887
|
-
{
|
|
888
|
-
icon: 'DownloadLine',
|
|
889
|
-
tooltip: 'Download',
|
|
890
|
-
onClick: () => onDownloadAttachment(f.attachment_id, f.filename),
|
|
891
|
-
}
|
|
892
|
-
: undefined,
|
|
893
|
-
f.message_id
|
|
894
|
-
)}
|
|
895
|
-
/>
|
|
896
|
-
);
|
|
897
|
-
})}
|
|
898
|
-
</ReqoreControlGroup>
|
|
899
|
-
</ReqorePanel>
|
|
900
|
-
: null}
|
|
901
|
-
|
|
902
|
-
{lightbox !== null && fetchAttachmentUrl ?
|
|
903
|
-
<ImageLightbox
|
|
904
|
-
images={visibleImages}
|
|
905
|
-
index={lightbox}
|
|
906
|
-
onIndex={setLightbox}
|
|
907
|
-
onClose={() => setLightbox(null)}
|
|
908
|
-
fetchAttachmentUrl={fetchAttachmentUrl}
|
|
909
|
-
onDownload={onDownloadAttachment}
|
|
910
|
-
/>
|
|
911
|
-
: null}
|
|
912
|
-
</ReqoreControlGroup>
|
|
913
|
-
);
|
|
914
|
-
};
|