@qoretechnologies/reqraft 0.10.65 → 0.10.66-pr.137.ga1983bf
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 +413 -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 +322 -124
- package/dist/components/form/engine/CompactRow.js.map +1 -1
- package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
- package/dist/components/form/engine/CompactToolbar.js +29 -3
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +66 -11
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +570 -176
- package/dist/components/form/engine/FormEngine.js.map +1 -1
- package/dist/components/form/engine/HiddenFieldsNote.d.ts +28 -0
- package/dist/components/form/engine/HiddenFieldsNote.d.ts.map +1 -0
- package/dist/components/form/engine/HiddenFieldsNote.js +32 -0
- package/dist/components/form/engine/HiddenFieldsNote.js.map +1 -0
- package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
- package/dist/components/form/engine/OptionFieldMessages.js +25 -3
- 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 +12 -6
- package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +30 -1
- package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowContext.js.map +1 -1
- package/dist/components/form/engine/compactRowStyles.d.ts +59 -22
- package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +102 -55
- 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/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 +24 -8
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +77 -109
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/engine/readFirstColors.d.ts +30 -0
- package/dist/components/form/engine/readFirstColors.d.ts.map +1 -0
- package/dist/components/form/engine/readFirstColors.js +51 -0
- package/dist/components/form/engine/readFirstColors.js.map +1 -0
- package/dist/components/form/engine/rowFocus.d.ts +2 -0
- package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
- package/dist/components/form/engine/rowFocus.js +26 -3
- package/dist/components/form/engine/rowFocus.js.map +1 -1
- package/dist/components/form/engine/typeChoices.d.ts +1 -1
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantCalmTable.js +2 -1
- package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -1
- package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantCards.js +2 -1
- package/dist/components/form/engine/variants/VariantCards.js.map +1 -1
- package/dist/components/form/engine/variants/VariantFocus.js +1 -1
- package/dist/components/form/engine/variants/VariantFocus.js.map +1 -1
- package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -1
- package/dist/components/form/engine/variants/VariantMinimal.js +2 -1
- package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -1
- package/dist/components/form/engine/variants/variantParts.d.ts +1 -1
- package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -1
- package/dist/components/form/engine/variants/variantParts.js +25 -17
- package/dist/components/form/engine/variants/variantParts.js.map +1 -1
- package/dist/components/form/expressions/DpqlRendering.d.ts +1 -1
- package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -1
- package/dist/components/form/expressions/DpqlRendering.js +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 +43 -10
- 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 +43 -20
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +39 -6
- 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 +119 -62
- 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.map +1 -1
- package/dist/components/form/fields/long-string/LongString.js +29 -8
- 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 +13 -9
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/number/Number.d.ts +6 -0
- package/dist/components/form/fields/number/Number.d.ts.map +1 -1
- package/dist/components/form/fields/number/Number.js +41 -6
- package/dist/components/form/fields/number/Number.js.map +1 -1
- package/dist/components/form/fields/object/Object.d.ts +1 -1
- package/dist/components/form/fields/object/Object.d.ts.map +1 -1
- package/dist/components/form/fields/object/Object.js +4 -2
- package/dist/components/form/fields/object/Object.js.map +1 -1
- package/dist/components/form/fields/pendingEdit.d.ts +52 -0
- package/dist/components/form/fields/pendingEdit.d.ts.map +1 -0
- package/dist/components/form/fields/pendingEdit.js +79 -0
- package/dist/components/form/fields/pendingEdit.js.map +1 -0
- package/dist/components/form/fields/radio-group/RadioGroup.d.ts.map +1 -1
- package/dist/components/form/fields/radio-group/RadioGroup.js +4 -3
- 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 +382 -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 +678 -107
- 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 +451 -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 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +25 -1
- 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 -7
- package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
- package/dist/components/log/Log.d.ts.map +1 -1
- package/dist/components/log/Log.js +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 +584 -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 +336 -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 +562 -151
- 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/ReferencePicker.d.ts +9 -2
- package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
- package/dist/components/supportTicket/ReferencePicker.js +27 -6
- package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
- package/dist/components/supportTicket/TicketHeader.d.ts +3 -4
- package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
- package/dist/components/supportTicket/TicketHeader.js +20 -2
- package/dist/components/supportTicket/TicketHeader.js.map +1 -1
- package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
- package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
- package/dist/components/ticketReferences/TicketReferences.js +9 -4
- package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
- package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
- package/dist/components/ticketThread/TicketThread.js +38 -13
- package/dist/components/ticketThread/TicketThread.js.map +1 -1
- package/dist/helpers/allowedValues.d.ts +21 -0
- package/dist/helpers/allowedValues.d.ts.map +1 -1
- package/dist/helpers/allowedValues.js +40 -1
- 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/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/src/components/Description/index.tsx +0 -254
- package/src/components/Description/markdownRendererContext.tsx +0 -29
- package/src/components/FocusedEditing/index.tsx +0 -50
- package/src/components/codeSize/index.tsx +0 -79
- package/src/components/composer/Composer.stories.tsx +0 -238
- package/src/components/composer/Composer.tsx +0 -554
- package/src/components/composer/helpers.ts +0 -74
- package/src/components/composer/index.ts +0 -2
- package/src/components/dpqlEditor/DpqlEditor.stories.tsx +0 -1183
- package/src/components/dpqlEditor/DpqlEditor.tsx +0 -219
- package/src/components/dpqlEditor/dpqlHelpers.ts +0 -287
- package/src/components/dpqlEditor/dpqlInserter.ts +0 -121
- package/src/components/dpqlEditor/dpqlProbe.ts +0 -165
- package/src/components/dpqlEditor/dpqlTags.ts +0 -114
- package/src/components/dpqlEditor/index.ts +0 -41
- package/src/components/dpqlEditor/types.ts +0 -203
- package/src/components/dpqlEditor/useDpqlProbe.ts +0 -33
- package/src/components/dpqlEditor/useDpqlSession.ts +0 -411
- package/src/components/form/engine/CompactRow.tsx +0 -2620
- package/src/components/form/engine/CompactToolbar.tsx +0 -330
- package/src/components/form/engine/FormEngine.stories.tsx +0 -9920
- package/src/components/form/engine/FormEngine.tsx +0 -4569
- package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
- package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -331
- package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
- package/src/components/form/engine/OptionFieldMessages.tsx +0 -477
- package/src/components/form/engine/OptionsHelpDialog.tsx +0 -29
- package/src/components/form/engine/__fixtures__/basicFormOptions.ts +0 -309
- package/src/components/form/engine/__fixtures__/fieldChromeOptions.ts +0 -45
- package/src/components/form/engine/_structuredData/SchemaDataView.stories.tsx +0 -233
- package/src/components/form/engine/_structuredData/SchemaDataView.tsx +0 -742
- package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +0 -85
- package/src/components/form/engine/_structuredData/StructuredDataView.tsx +0 -75
- package/src/components/form/engine/_structuredData/structuredData.ts +0 -145
- package/src/components/form/engine/compactRowContext.ts +0 -148
- package/src/components/form/engine/compactRowStyles.ts +0 -898
- package/src/components/form/engine/compactToolbarContext.ts +0 -69
- package/src/components/form/engine/optionActions.ts +0 -128
- package/src/components/form/engine/optionsContext.ts +0 -24
- package/src/components/form/engine/readFirst.ts +0 -1077
- package/src/components/form/engine/rendererTypes.ts +0 -107
- package/src/components/form/engine/revealRow.ts +0 -123
- package/src/components/form/engine/rowFocus.ts +0 -101
- package/src/components/form/engine/rowMenuContext.ts +0 -159
- package/src/components/form/engine/rowOpenPicker.ts +0 -27
- package/src/components/form/engine/typeChoices.ts +0 -63
- package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +0 -159
- package/src/components/form/engine/variants/VariantCalmTable.tsx +0 -244
- package/src/components/form/engine/variants/VariantCards.tsx +0 -212
- package/src/components/form/engine/variants/VariantFocus.tsx +0 -382
- package/src/components/form/engine/variants/VariantMinimal.tsx +0 -170
- package/src/components/form/engine/variants/focusDemo.ts +0 -145
- package/src/components/form/engine/variants/variantModel.ts +0 -223
- package/src/components/form/engine/variants/variantParts.tsx +0 -313
- package/src/components/form/expressions/DpqlRendering.tsx +0 -85
- package/src/components/form/expressions/ExpressionField.stories.tsx +0 -1395
- package/src/components/form/expressions/ExpressionField.tsx +0 -503
- package/src/components/form/expressions/argumentPresence.ts +0 -213
- package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +0 -1683
- package/src/components/form/expressions/builder/argumentDetail.tsx +0 -17
- package/src/components/form/expressions/builder/argumentLabel.tsx +0 -146
- package/src/components/form/expressions/builder/argumentSlot.tsx +0 -101
- package/src/components/form/expressions/builder/argumentWrapper.tsx +0 -243
- package/src/components/form/expressions/builder/confirmMismatchedTypesModal.tsx +0 -120
- package/src/components/form/expressions/builder/confirmUnsupportedTypeModal.tsx +0 -69
- package/src/components/form/expressions/builder/index.tsx +0 -1545
- package/src/components/form/expressions/builder/item.tsx +0 -89
- package/src/components/form/expressions/builder/moveToPositionStrip.tsx +0 -156
- package/src/components/form/expressions/builder/renderTemplate.tsx +0 -42
- package/src/components/form/expressions/dpqlMockLanguage.ts +0 -566
- package/src/components/form/expressions/dpqlMockLsp.ts +0 -126
- package/src/components/form/expressions/mockExpressions.ts +0 -317
- package/src/components/form/expressions/renderExpressionToText.ts +0 -137
- package/src/components/form/expressions/types.ts +0 -110
- package/src/components/form/expressions/useExpressions.ts +0 -101
- package/src/components/form/expressions/useRenderExpression.ts +0 -165
- package/src/components/form/fields/Field.stories.tsx +0 -143
- package/src/components/form/fields/Field.tsx +0 -732
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -297
- package/src/components/form/fields/array/ArrayAuto.tsx +0 -237
- package/src/components/form/fields/array/ArrayAutoField.stories.tsx +0 -475
- package/src/components/form/fields/array/ArrayAutoField.tsx +0 -367
- package/src/components/form/fields/auto/AutoFormField.stories.tsx +0 -825
- package/src/components/form/fields/auto/AutoFormField.tsx +0 -1164
- package/src/components/form/fields/binary/Binary.stories.tsx +0 -122
- package/src/components/form/fields/binary/Binary.tsx +0 -91
- package/src/components/form/fields/boolean/Boolean.stories.tsx +0 -125
- package/src/components/form/fields/boolean/Boolean.tsx +0 -34
- package/src/components/form/fields/byte-size/ByteSize.stories.tsx +0 -87
- package/src/components/form/fields/byte-size/ByteSize.tsx +0 -58
- package/src/components/form/fields/color/Color.stories.tsx +0 -99
- package/src/components/form/fields/color/Color.tsx +0 -46
- package/src/components/form/fields/cron/Cron.stories.tsx +0 -68
- package/src/components/form/fields/cron/Cron.tsx +0 -80
- package/src/components/form/fields/date/Date.stories.tsx +0 -77
- package/src/components/form/fields/date/Date.tsx +0 -55
- package/src/components/form/fields/emittedValues.ts +0 -70
- package/src/components/form/fields/file/File.stories.tsx +0 -161
- package/src/components/form/fields/file/File.tsx +0 -227
- package/src/components/form/fields/long-string/LongString.stories.tsx +0 -120
- package/src/components/form/fields/long-string/LongString.tsx +0 -130
- package/src/components/form/fields/markdown/Markdown.stories.tsx +0 -76
- package/src/components/form/fields/markdown/Markdown.tsx +0 -81
- package/src/components/form/fields/markdown/MarkdownView.tsx +0 -222
- package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +0 -139
- package/src/components/form/fields/number/Number.stories.tsx +0 -159
- package/src/components/form/fields/number/Number.tsx +0 -160
- package/src/components/form/fields/object/Object.stories.tsx +0 -398
- package/src/components/form/fields/object/Object.tsx +0 -255
- package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +0 -95
- package/src/components/form/fields/radio-group/RadioGroup.tsx +0 -46
- package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
- package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
- package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
- package/src/components/form/fields/rich-text/RichText.stories.tsx +0 -260
- package/src/components/form/fields/rich-text/RichText.tsx +0 -537
- package/src/components/form/fields/schema-definition/CatalogLeafForm.tsx +0 -242
- package/src/components/form/fields/schema-definition/CatalogNodeEditor.tsx +0 -758
- package/src/components/form/fields/schema-definition/Hint.tsx +0 -22
- package/src/components/form/fields/schema-definition/InlineValidationBanner.tsx +0 -138
- package/src/components/form/fields/schema-definition/Loader.tsx +0 -20
- package/src/components/form/fields/schema-definition/MigrationsTab.tsx +0 -187
- package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +0 -286
- package/src/components/form/fields/schema-definition/TableEditor.tsx +0 -155
- package/src/components/form/fields/schema-definition/TablesTab.tsx +0 -138
- package/src/components/form/fields/schema-definition/catalog.ts +0 -237
- package/src/components/form/fields/schema-definition/helpers.ts +0 -90
- package/src/components/form/fields/schema-definition/index.tsx +0 -418
- package/src/components/form/fields/schema-definition/mockCatalog.ts +0 -325
- package/src/components/form/fields/schema-definition/mockDefinition.ts +0 -111
- package/src/components/form/fields/schema-definition/referenceSuggestions.tsx +0 -152
- package/src/components/form/fields/schema-definition/starterTemplate.ts +0 -68
- package/src/components/form/fields/schema-definition/types.ts +0 -185
- package/src/components/form/fields/schema-definition/useSchemaOptionCatalog.ts +0 -49
- package/src/components/form/fields/select/Select.stories.tsx +0 -872
- package/src/components/form/fields/select/Select.tsx +0 -624
- package/src/components/form/fields/select/SelectCollection.tsx +0 -594
- package/src/components/form/fields/string/String.stories.tsx +0 -86
- package/src/components/form/fields/string/String.tsx +0 -43
- package/src/components/form/fields/template/ExampleValueModal.stories.tsx +0 -114
- package/src/components/form/fields/template/ExampleValueModal.tsx +0 -99
- package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +0 -47
- package/src/components/form/fields/template/TemplateField.stories.tsx +0 -1121
- package/src/components/form/fields/template/TemplateField.tsx +0 -1717
- package/src/components/form/fields/template/TemplateText.tsx +0 -115
- package/src/components/form/fields/template/__fixtures__/longExampleValue.ts +0 -7
- package/src/components/form/fields/template/__fixtures__/multiLevelTemplates.json +0 -147
- package/src/components/form/fields/template/__fixtures__/templates.json +0 -83
- package/src/components/form/fields/timeout/Timeout.stories.tsx +0 -228
- package/src/components/form/fields/timeout/Timeout.tsx +0 -87
- package/src/components/form/fields/url/Url.stories.tsx +0 -94
- package/src/components/form/fields/url/Url.tsx +0 -85
- package/src/components/form/index.tsx +0 -47
- package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
- package/src/components/imageLightbox/ImageLightbox.tsx +0 -236
- package/src/components/imageLightbox/index.ts +0 -1
- package/src/components/log/Log.stories.tsx +0 -333
- package/src/components/log/Log.tsx +0 -285
- package/src/components/menu/Menu.stories.tsx +0 -155
- package/src/components/menu/Menu.tsx +0 -312
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +0 -797
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.tsx +0 -105
- package/src/components/qonsoleSmartInput/index.ts +0 -16
- package/src/components/qonsoleSmartInput/qonsoleInserter.ts +0 -77
- package/src/components/qonsoleSmartInput/types.ts +0 -133
- package/src/components/qonsoleSmartInput/useQonsoleSession.ts +0 -124
- package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +0 -62
- package/src/components/searchFilterBar/SearchFilterBar.tsx +0 -144
- package/src/components/searchFilterBar/index.ts +0 -1
- package/src/components/smartEditor/MarkdownDoc.tsx +0 -190
- package/src/components/smartEditor/SmartEditor.stories.tsx +0 -475
- package/src/components/smartEditor/SmartEditor.tsx +0 -808
- package/src/components/smartEditor/__fixtures__/mockLspServer.ts +0 -205
- package/src/components/smartEditor/helpers.ts +0 -217
- package/src/components/smartEditor/index.ts +0 -35
- package/src/components/smartEditor/styling.ts +0 -45
- package/src/components/smartEditor/types.ts +0 -211
- package/src/components/smartEditor/useLspAutocomplete.ts +0 -758
- package/src/components/smartEditor/useLspDiagnosticDecorations.ts +0 -125
- package/src/components/smartEditor/useLspHover.ts +0 -230
- package/src/components/smartEditor/useLspSemanticTokens.ts +0 -298
- package/src/components/smartEditor/useLspSession.ts +0 -231
- package/src/components/smartEditor/useLspSignatureHelp.ts +0 -198
- package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -171
- package/src/components/supportTicket/AttachmentChips.tsx +0 -147
- package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -257
- package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -129
- package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -584
- package/src/components/supportTicket/ReferencePicker.tsx +0 -563
- package/src/components/supportTicket/TicketConversation.stories.tsx +0 -121
- package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
- package/src/components/supportTicket/TicketHeader.tsx +0 -247
- package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
- package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
- package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -354
- package/src/components/supportTicket/TicketReplyBox.tsx +0 -150
- package/src/components/supportTicket/__fixtures__/kindMarks.ts +0 -28
- package/src/components/supportTicket/attachmentAccess.ts +0 -97
- package/src/components/supportTicket/fileToAttachment.ts +0 -24
- package/src/components/supportTicket/index.ts +0 -10
- package/src/components/supportTicket/meta.ts +0 -206
- package/src/components/supportTicket/ticketModel.ts +0 -131
- package/src/components/supportTicket/useLoadedImages.ts +0 -73
- package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -315
- package/src/components/ticketReferences/TicketReferences.tsx +0 -906
- package/src/components/ticketReferences/index.ts +0 -2
- package/src/components/ticketThread/TicketThread.stories.tsx +0 -829
- package/src/components/ticketThread/TicketThread.tsx +0 -719
- package/src/components/ticketThread/index.ts +0 -6
- package/src/contexts/FetchContext.tsx +0 -25
- package/src/contexts/ReqraftContext.tsx +0 -9
- package/src/contexts/StorageContext.tsx +0 -33
- package/src/global.d.ts +0 -4
- package/src/helpers/allowedValues.ts +0 -249
- package/src/helpers/choiceChip.ts +0 -227
- package/src/helpers/common.ts +0 -326
- package/src/helpers/dpqlDetection.ts +0 -209
- package/src/helpers/expressions.ts +0 -140
- package/src/helpers/optionUiTypes.ts +0 -199
- package/src/helpers/options.ts +0 -150
- package/src/helpers/providerValue.ts +0 -125
- package/src/helpers/scrollbar.ts +0 -32
- package/src/helpers/singleLineString.ts +0 -61
- package/src/helpers/templateItems.ts +0 -81
- package/src/helpers/templateText.ts +0 -350
- package/src/helpers/templates.ts +0 -602
- package/src/helpers/validations.ts +0 -2085
- package/src/hooks/useArgSchema.ts +0 -37
- package/src/hooks/useCoarsePointer.ts +0 -30
- package/src/hooks/useFetch/useFetch.stories.tsx +0 -379
- package/src/hooks/useFetch/useFetch.tsx +0 -154
- package/src/hooks/usePhoneViewport.ts +0 -34
- package/src/hooks/useQorusTypes.ts +0 -233
- package/src/hooks/useReqraftProperty.ts +0 -16
- package/src/hooks/useStorage/useStorage.stories.tsx +0 -168
- package/src/hooks/useStorage/useStorage.ts +0 -35
- package/src/hooks/useTemplates.ts +0 -123
- package/src/hooks/useValidation.ts +0 -9
- package/src/hooks/useWebSocket/useWebSocket.ts +0 -224
- package/src/hooks/useWebSocket/useWebsocket.stories.tsx +0 -640
- package/src/hooks/useWhyDidYouUpdate.ts +0 -38
- package/src/index.tsx +0 -86
- package/src/providers/FetchProvider.tsx +0 -40
- package/src/providers/ReqraftProvider.tsx +0 -52
- package/src/providers/StorageProvider.tsx +0 -131
- package/src/stores/currentUser/currentUser.stories.tsx +0 -100
- package/src/stores/currentUser/currentUser.tsx +0 -94
- package/src/stories/Data/fileFieldArgSchema.json +0 -86
- package/src/stories/Tests/utils.ts +0 -320
- package/src/stories/storyNetwork.ts +0 -92
- package/src/stories/tracking.tsx +0 -206
- package/src/tracking/browser/attach.ts +0 -186
- package/src/tracking/browser/env.ts +0 -78
- package/src/tracking/core/consent.ts +0 -37
- package/src/tracking/core/engagement.ts +0 -47
- package/src/tracking/core/experiments.ts +0 -258
- package/src/tracking/core/hash.ts +0 -26
- package/src/tracking/core/ids.ts +0 -25
- package/src/tracking/core/observable.ts +0 -23
- package/src/tracking/core/queue.ts +0 -131
- package/src/tracking/core/sections.ts +0 -166
- package/src/tracking/core/storage.ts +0 -69
- package/src/tracking/core/tracker.ts +0 -417
- package/src/tracking/core/types.ts +0 -162
- package/src/tracking/core/utm.ts +0 -23
- package/src/tracking/index.ts +0 -72
- package/src/tracking/markup.ts +0 -17
- package/src/tracking/react/Experiment.tsx +0 -44
- package/src/tracking/react/TrackingProvider.tsx +0 -56
- package/src/tracking/react/hooks.ts +0 -106
- package/src/tracking/react/index.ts +0 -13
- package/src/tracking/testing.ts +0 -108
- package/src/tracking/ui/ExperimentCard.stories.tsx +0 -296
- package/src/tracking/ui/ExperimentCard.tsx +0 -667
- package/src/tracking/ui/ExperimentsOverlay.stories.tsx +0 -155
- package/src/tracking/ui/ExperimentsOverlay.tsx +0 -437
- package/src/tracking/ui/anchor.ts +0 -180
- package/src/tracking/ui/card.ts +0 -464
- package/src/tracking/ui/client.ts +0 -117
- package/src/tracking/ui/index.ts +0 -77
- package/src/tracking/ui/types.ts +0 -110
- package/src/tracking/ui/useExperimentsAdmin.ts +0 -103
- package/src/types/Form.ts +0 -29
- package/src/types.ts +0 -14
- package/src/utils/datetime.ts +0 -10
- package/src/utils/fetch.ts +0 -457
- package/src/utils/lspClient.ts +0 -711
- package/src/utils/lspClient.types.ts +0 -211
- package/src/utils/queryUnlessCancelled.ts +0 -28
- package/src/utils/websocket.ts +0 -293
- package/vite.config.ts +0 -58
- package/vitest.config.ts +0 -69
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The plain logic behind the A/B test overlay: where the handle and the card go (anchored to the
|
|
3
|
-
* tested element, flipped above or below to stay in view), and which card is open (hover,
|
|
4
|
-
* keyboard focus, a click; closed by ✕, Esc or a click outside). No React, no DOM
|
|
5
|
-
* (unit-tested in `__tests__/tracking/anchor.test.ts`).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
// ── anchoring ────────────────────────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
export interface IBox {
|
|
11
|
-
top: number;
|
|
12
|
-
left: number;
|
|
13
|
-
width: number;
|
|
14
|
-
height: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface IPlaceInput {
|
|
18
|
-
/** The tested element's box, in viewport coordinates. */
|
|
19
|
-
box: IBox;
|
|
20
|
-
viewport: { width: number; height: number };
|
|
21
|
-
/** The page's scroll offset: the result is in document coordinates. */
|
|
22
|
-
scroll: { x: number; y: number };
|
|
23
|
-
/** The handle's measured size. */
|
|
24
|
-
handle: { width: number; height: number };
|
|
25
|
-
/** The card's measured size, when it is open (its natural height, before any cap). */
|
|
26
|
-
card?: { height: number } | null;
|
|
27
|
-
/** The part of the viewport the app's sticky header covers (the handle and the card stay below it). */
|
|
28
|
-
topInset: number;
|
|
29
|
-
/** The smallest distance to a viewport edge. */
|
|
30
|
-
edge?: number;
|
|
31
|
-
/** Between the handle and the card. */
|
|
32
|
-
gap?: number;
|
|
33
|
-
/** The card's widest. */
|
|
34
|
-
maxWidth?: number;
|
|
35
|
-
/** The side the card is on now: it stays there while it still fits, so it does not jump while scrolling. */
|
|
36
|
-
side?: 'below' | 'above';
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface IPlacement {
|
|
40
|
-
/** False when no part of the element is on screen: nothing is drawn. */
|
|
41
|
-
visible: boolean;
|
|
42
|
-
/** Document coordinates. */
|
|
43
|
-
outline: IBox;
|
|
44
|
-
handle: { top: number; left: number };
|
|
45
|
-
card: {
|
|
46
|
-
top: number;
|
|
47
|
-
left: number;
|
|
48
|
-
width: number;
|
|
49
|
-
maxHeight: number;
|
|
50
|
-
side: 'below' | 'above';
|
|
51
|
-
} | null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export const CARD_MAX_WIDTH = 440;
|
|
55
|
-
/** The card never gets shorter than this; a smaller window scrolls inside it. */
|
|
56
|
-
export const CARD_MIN_HEIGHT = 180;
|
|
57
|
-
|
|
58
|
-
const clamp = (n: number, lo: number, hi: number) => Math.min(Math.max(n, lo), Math.max(lo, hi));
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Where the outline, the handle and the card go. The handle sits at the element's top-left
|
|
62
|
-
* corner and, while the element is partly scrolled away, slides down to stay on its visible
|
|
63
|
-
* part. The card hangs under the handle, or above it when there is more room there than
|
|
64
|
-
* below and it does not fit below; its height is capped to that room (it scrolls inside).
|
|
65
|
-
*/
|
|
66
|
-
export const placeCard = ({
|
|
67
|
-
box,
|
|
68
|
-
viewport,
|
|
69
|
-
scroll,
|
|
70
|
-
handle,
|
|
71
|
-
card,
|
|
72
|
-
topInset,
|
|
73
|
-
edge = 12,
|
|
74
|
-
gap = 8,
|
|
75
|
-
maxWidth = CARD_MAX_WIDTH,
|
|
76
|
-
side: current,
|
|
77
|
-
}: IPlaceInput): IPlacement => {
|
|
78
|
-
const bottom = box.top + box.height;
|
|
79
|
-
const right = box.left + box.width;
|
|
80
|
-
const outline = {
|
|
81
|
-
top: box.top + scroll.y,
|
|
82
|
-
left: box.left + scroll.x,
|
|
83
|
-
width: box.width,
|
|
84
|
-
height: box.height,
|
|
85
|
-
};
|
|
86
|
-
const visible =
|
|
87
|
-
bottom > topInset && box.top < viewport.height && right > 0 && box.left < viewport.width;
|
|
88
|
-
|
|
89
|
-
// The handle: inside the element, below the header, above the element's bottom edge.
|
|
90
|
-
const hTop = Math.min(Math.max(box.top + edge, topInset + edge), bottom - handle.height - edge);
|
|
91
|
-
const hLeft = clamp(box.left + edge, edge, viewport.width - handle.width - edge);
|
|
92
|
-
const handlePos = { top: Math.max(hTop, box.top) + scroll.y, left: hLeft + scroll.x };
|
|
93
|
-
|
|
94
|
-
if (!card) return { visible, outline, handle: handlePos, card: null };
|
|
95
|
-
|
|
96
|
-
const width = Math.min(maxWidth, viewport.width - 2 * edge);
|
|
97
|
-
const left = clamp(hLeft, edge, viewport.width - width - edge);
|
|
98
|
-
const handleTop = handlePos.top - scroll.y;
|
|
99
|
-
const handleBottom = handleTop + handle.height;
|
|
100
|
-
const below = viewport.height - edge - (handleBottom + gap);
|
|
101
|
-
const above = handleTop - gap - (topInset + edge);
|
|
102
|
-
const fits = { below: card.height <= below, above: card.height <= above };
|
|
103
|
-
const side: 'below' | 'above' =
|
|
104
|
-
current && fits[current] ? current
|
|
105
|
-
: fits.below || below >= above ? 'below'
|
|
106
|
-
: 'above';
|
|
107
|
-
const room = Math.max(side === 'below' ? below : above, CARD_MIN_HEIGHT);
|
|
108
|
-
const height = Math.min(card.height, room);
|
|
109
|
-
const top = side === 'below' ? handleBottom + gap : handleTop - gap - height;
|
|
110
|
-
return {
|
|
111
|
-
visible,
|
|
112
|
-
outline,
|
|
113
|
-
handle: handlePos,
|
|
114
|
-
card: { top: top + scroll.y, left: left + scroll.x, width, maxHeight: room, side },
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// ── which card is open ────────────────────────────────────────────────────────────
|
|
119
|
-
|
|
120
|
-
export interface ICardState {
|
|
121
|
-
/** The test whose element (or card) the pointer is over. */
|
|
122
|
-
hovered: string | null;
|
|
123
|
-
/** The test whose handle or card holds the keyboard focus. */
|
|
124
|
-
focused: string | null;
|
|
125
|
-
/** The test opened with a click or a tap: stays open until closed. */
|
|
126
|
-
pinned: string | null;
|
|
127
|
-
/** Closed while the pointer was still over it: hovering it opens it again only after leaving it. */
|
|
128
|
-
dismissed: string | null;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export type TCardEvent =
|
|
132
|
-
| { type: 'hover'; key: string | null }
|
|
133
|
-
| { type: 'focus'; key: string }
|
|
134
|
-
| { type: 'blur'; key: string }
|
|
135
|
-
| { type: 'toggle'; key: string }
|
|
136
|
-
/** ✕, Esc, a click outside, an action that re-renders the element. */
|
|
137
|
-
| { type: 'close' };
|
|
138
|
-
|
|
139
|
-
export const CLOSED: ICardState = { hovered: null, focused: null, pinned: null, dismissed: null };
|
|
140
|
-
|
|
141
|
-
/** The one open card: a click wins, then the keyboard, then the pointer. */
|
|
142
|
-
export const openCard = (s: ICardState): string | null =>
|
|
143
|
-
s.pinned ?? s.focused ?? (s.hovered !== s.dismissed ? s.hovered : null);
|
|
144
|
-
|
|
145
|
-
export const cardReducer = (s: ICardState, e: TCardEvent): ICardState => {
|
|
146
|
-
switch (e.type) {
|
|
147
|
-
case 'hover':
|
|
148
|
-
if (e.key === s.hovered) return s;
|
|
149
|
-
// Leaving the element a card was closed on lets hovering open it again.
|
|
150
|
-
return {
|
|
151
|
-
...s,
|
|
152
|
-
hovered: e.key,
|
|
153
|
-
dismissed: s.dismissed && s.dismissed !== e.key ? null : s.dismissed,
|
|
154
|
-
};
|
|
155
|
-
case 'focus':
|
|
156
|
-
return s.focused === e.key && s.dismissed !== e.key ?
|
|
157
|
-
s
|
|
158
|
-
: { ...s, focused: e.key, dismissed: s.dismissed === e.key ? null : s.dismissed };
|
|
159
|
-
case 'blur':
|
|
160
|
-
return s.focused === e.key ? { ...s, focused: null } : s;
|
|
161
|
-
case 'toggle':
|
|
162
|
-
// A click on the handle of an open card pins it (hover or focus opened it); a second click closes it.
|
|
163
|
-
return s.pinned === e.key ?
|
|
164
|
-
cardReducer(s, { type: 'close' })
|
|
165
|
-
: { ...s, pinned: e.key, dismissed: null };
|
|
166
|
-
case 'close': {
|
|
167
|
-
const open = openCard(s);
|
|
168
|
-
if (!open) return s;
|
|
169
|
-
return { hovered: s.hovered, focused: null, pinned: null, dismissed: s.hovered ?? open };
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
/** Enter or Space on a version's row itself (not on its Accept / Remove buttons) shows that version. */
|
|
175
|
-
export const activatesRow = (key: string, onRowItself: boolean) =>
|
|
176
|
-
onRowItself && (key === 'Enter' || key === ' ');
|
|
177
|
-
|
|
178
|
-
/** Whether a click lands outside the overlay's cards (and outside Reqore's dialogs and menus they open). */
|
|
179
|
-
export const OUTSIDE_IGNORE =
|
|
180
|
-
'[data-experiment-float], .reqore-modal, .reqore-popover-content, .reqore-drawer, .reqore-notification, [role="dialog"]';
|
package/src/tracking/ui/card.ts
DELETED
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the A/B test card shows, as plain functions of the qorus-api objects: the version rows,
|
|
3
|
-
* the verdict, the numbers line, the bars, the status tag, which actions a status allows, and
|
|
4
|
-
* the words of the confirm step and of the outcome. No React, no DOM (unit-tested in
|
|
5
|
-
* `__tests__/tracking/card.test.ts`).
|
|
6
|
-
*/
|
|
7
|
-
import type {
|
|
8
|
-
IAdminVariant,
|
|
9
|
-
IExperimentEntry,
|
|
10
|
-
IExperimentResults,
|
|
11
|
-
TExperimentActionResult,
|
|
12
|
-
TExperimentStatus,
|
|
13
|
-
TLifecycleAction,
|
|
14
|
-
TVersionAction,
|
|
15
|
-
} from './types';
|
|
16
|
-
|
|
17
|
-
export const canAccept = (status: TExperimentStatus) =>
|
|
18
|
-
status === 'running' || status === 'paused' || status === 'stopped';
|
|
19
|
-
/** Start a draft, or resume a paused test. */
|
|
20
|
-
export const canStart = (status: TExperimentStatus) => status === 'draft' || status === 'paused';
|
|
21
|
-
export const canPause = (status: TExperimentStatus) => status === 'running';
|
|
22
|
-
export const canStop = (status: TExperimentStatus) => status === 'running' || status === 'paused';
|
|
23
|
-
export const canRemove = (status: TExperimentStatus, versions: number) =>
|
|
24
|
-
(status === 'draft' || status === 'running' || status === 'paused') && versions > 1;
|
|
25
|
-
|
|
26
|
-
export interface IVersionRow {
|
|
27
|
-
key: string;
|
|
28
|
-
name: string;
|
|
29
|
-
control: boolean;
|
|
30
|
-
/** Visitors exposed in the current phase (null: no numbers yet). */
|
|
31
|
-
visitors: number | null;
|
|
32
|
-
/** Conversion on the primary metric, 0..1. */
|
|
33
|
-
conversion: number | null;
|
|
34
|
-
/** Chance to beat the original on the primary metric, 0..1 (null for the original). */
|
|
35
|
-
chance: number | null;
|
|
36
|
-
/** The page's code renders it (false: the server has a version the code does not, so it cannot be shown). */
|
|
37
|
-
inCode: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const primaryMetric = (results: IExperimentResults | null | undefined) =>
|
|
41
|
-
results?.metrics?.find((m) => m.role === 'primary') ?? null;
|
|
42
|
-
|
|
43
|
-
export const versionName = (key: string) => `Version ${key.toUpperCase()}`;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* One row per version. Keys come from the server's experiment when there is one, otherwise from
|
|
47
|
-
* the page's code (`codeVariants`, the `data-variants` of `<Experiment>`): a test that exists
|
|
48
|
-
* only in code can still be switched.
|
|
49
|
-
*/
|
|
50
|
-
export const versionRows = (
|
|
51
|
-
entry: IExperimentEntry | undefined,
|
|
52
|
-
codeVariants: string[] = []
|
|
53
|
-
): IVersionRow[] => {
|
|
54
|
-
const metric = primaryMetric(entry?.results);
|
|
55
|
-
const variants: IAdminVariant[] =
|
|
56
|
-
entry?.experiment.variants?.length ?
|
|
57
|
-
entry.experiment.variants
|
|
58
|
-
: codeVariants.map((key, i) => ({ key, weight: 1, control: i === 0 }));
|
|
59
|
-
return variants.map((v) => {
|
|
60
|
-
const r = metric?.variants.find((x) => x.variant === v.key);
|
|
61
|
-
return {
|
|
62
|
-
key: v.key,
|
|
63
|
-
name: v.name || versionName(v.key),
|
|
64
|
-
control: !!v.control,
|
|
65
|
-
visitors: r ? r.exposed : null,
|
|
66
|
-
conversion: r?.rate ?? null,
|
|
67
|
-
chance: v.control ? null : (r?.chance_to_beat ?? null),
|
|
68
|
-
inCode: codeVariants.length === 0 || codeVariants.includes(v.key),
|
|
69
|
-
};
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const nameOf = (entry: IExperimentEntry, key: string | null | undefined) =>
|
|
74
|
-
entry.experiment.variants.find((v) => v.key === key)?.name ||
|
|
75
|
-
(key ? versionName(key) : 'a version');
|
|
76
|
-
|
|
77
|
-
/** The verdict in plain words: the server's sentence when it sends one. */
|
|
78
|
-
/** The test is in the page's code, but the analytics service does not know it (or cannot be reached). */
|
|
79
|
-
export const NOT_SET_UP_TEXT =
|
|
80
|
-
"This test is in the page's code but isn't set up yet: ask the Designer to set it up. Until then you can switch versions here, but nothing is counted.";
|
|
81
|
-
export const UNREACHABLE_TEXT =
|
|
82
|
-
"Can't reach the analytics service right now, so there are no numbers and no test controls. You can still switch versions here; try again in a minute.";
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* The verdict in plain words: the server's sentence when it sends one. Without a server entry:
|
|
86
|
-
* `unreachable` (the list could not be loaded) or not set up yet (`notSetUpText`).
|
|
87
|
-
*/
|
|
88
|
-
export const verdictLine = (
|
|
89
|
-
entry: IExperimentEntry | undefined,
|
|
90
|
-
{
|
|
91
|
-
unreachable = false,
|
|
92
|
-
notSetUpText = NOT_SET_UP_TEXT,
|
|
93
|
-
}: { unreachable?: boolean; notSetUpText?: string } = {}
|
|
94
|
-
): string => {
|
|
95
|
-
if (!entry) return unreachable ? UNREACHABLE_TEXT : notSetUpText;
|
|
96
|
-
const { experiment: e, results } = entry;
|
|
97
|
-
if (results?.verdict_text) return results.verdict_text;
|
|
98
|
-
if (e.status === 'concluded')
|
|
99
|
-
return `Finished: ${nameOf(entry, e.winner)} won, and every visitor now sees it.`;
|
|
100
|
-
if (e.status === 'draft')
|
|
101
|
-
return 'Not started yet: press Start test to split visitors between the versions.';
|
|
102
|
-
if (!results) return 'No numbers yet.';
|
|
103
|
-
const control = e.variants.find((v) => v.control)?.key;
|
|
104
|
-
switch (results.verdict) {
|
|
105
|
-
case 'likely-winner':
|
|
106
|
-
return `${nameOf(entry, results.winner_variant)} is likely better than ${nameOf(entry, control)}.`;
|
|
107
|
-
case 'likely-loser':
|
|
108
|
-
return `The new versions are likely worse than ${nameOf(entry, control)}.`;
|
|
109
|
-
case 'no-clear-difference':
|
|
110
|
-
return 'No clear difference between the versions yet.';
|
|
111
|
-
default:
|
|
112
|
-
return 'Too early to tell.';
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export const percent = (n: number | null | undefined, digits = 1) =>
|
|
117
|
-
n == null || !Number.isFinite(n) ? '–' : `${(n * 100).toFixed(digits).replace(/\.0$/, '')}%`;
|
|
118
|
-
|
|
119
|
-
export const count = (n: number | null | undefined) =>
|
|
120
|
-
n == null ? '–' : n.toLocaleString('en-US');
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* One line of numbers under a version: visitors, conversion, chance to beat the original. In
|
|
124
|
-
* words when there is nothing to count yet, never a row of dashes.
|
|
125
|
-
*/
|
|
126
|
-
export const numbersLine = (row: IVersionRow, metricName?: string, status?: TExperimentStatus) => {
|
|
127
|
-
if (!row.visitors) {
|
|
128
|
-
if (status === 'draft') return 'Not started: no visitors yet';
|
|
129
|
-
return row.visitors === 0 ? 'No visitors yet' : 'No numbers yet';
|
|
130
|
-
}
|
|
131
|
-
const parts = [
|
|
132
|
-
`${count(row.visitors)} visitors`,
|
|
133
|
-
`${percent(row.conversion)} ${metricName ? `“${metricName}”` : 'conversion'}`,
|
|
134
|
-
];
|
|
135
|
-
if (!row.control && row.chance != null)
|
|
136
|
-
parts.push(`${percent(row.chance, 0)} chance to beat the original`);
|
|
137
|
-
return parts.join(' · ');
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
/** Each version's bar: its conversion as a share of the best one (0..100; 0 with no numbers). */
|
|
141
|
-
export const barValues = (rows: IVersionRow[]): number[] => {
|
|
142
|
-
const best = Math.max(0, ...rows.map((r) => r.conversion ?? 0));
|
|
143
|
-
return rows.map((r) => (best > 0 && r.conversion ? Math.round((r.conversion / best) * 100) : 0));
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
/** The verdict's colour: green for a likely winner, amber for likely losers, neutral otherwise. */
|
|
147
|
-
export const verdictIntent = (
|
|
148
|
-
entry: IExperimentEntry | undefined
|
|
149
|
-
): 'success' | 'warning' | 'info' | 'muted' => {
|
|
150
|
-
if (!entry) return 'muted';
|
|
151
|
-
if (entry.experiment.status === 'concluded') return 'success';
|
|
152
|
-
const v = entry.results?.verdict;
|
|
153
|
-
return (
|
|
154
|
-
v === 'likely-winner' ? 'success'
|
|
155
|
-
: v === 'likely-loser' ? 'warning'
|
|
156
|
-
: 'info'
|
|
157
|
-
);
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
export const STATUS_LABEL: Record<TExperimentStatus, string> = {
|
|
161
|
-
draft: 'Draft',
|
|
162
|
-
running: 'Running',
|
|
163
|
-
paused: 'Paused',
|
|
164
|
-
stopped: 'Stopped',
|
|
165
|
-
concluded: 'Ended',
|
|
166
|
-
archived: 'Archived',
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
export type TStatusIntent = 'success' | 'warning' | 'danger' | 'muted';
|
|
170
|
-
|
|
171
|
-
/** The status tag: its words (with the phase after a removal), its icon and its colour. */
|
|
172
|
-
export const statusTag = (
|
|
173
|
-
entry: IExperimentEntry | undefined,
|
|
174
|
-
unreachable = false
|
|
175
|
-
): { label: string; icon: string; intent: TStatusIntent } => {
|
|
176
|
-
if (!entry) {
|
|
177
|
-
return unreachable ?
|
|
178
|
-
{ label: 'No connection', icon: 'WifiOffLine', intent: 'warning' }
|
|
179
|
-
: { label: 'Not set up', icon: 'QuestionLine', intent: 'muted' };
|
|
180
|
-
}
|
|
181
|
-
const { status, phase } = entry.experiment;
|
|
182
|
-
const label = `${STATUS_LABEL[status] ?? status}${phase && phase > 1 ? ` · phase ${phase}` : ''}`;
|
|
183
|
-
switch (status) {
|
|
184
|
-
case 'running':
|
|
185
|
-
return { label, icon: 'PlayCircleLine', intent: 'success' };
|
|
186
|
-
case 'paused':
|
|
187
|
-
return { label, icon: 'PauseCircleLine', intent: 'warning' };
|
|
188
|
-
case 'draft':
|
|
189
|
-
return { label, icon: 'PencilRulerLine', intent: 'muted' };
|
|
190
|
-
case 'stopped':
|
|
191
|
-
return { label, icon: 'StopCircleLine', intent: 'danger' };
|
|
192
|
-
default:
|
|
193
|
-
return { label, icon: 'TrophyLine', intent: 'success' };
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
export interface IConfirmCopy {
|
|
198
|
-
title: string;
|
|
199
|
-
description: string;
|
|
200
|
-
confirmLabel: string;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/** What the confirm step says before Accept / Remove. */
|
|
204
|
-
export const confirmCopy = (
|
|
205
|
-
action: TVersionAction,
|
|
206
|
-
entry: IExperimentEntry,
|
|
207
|
-
variant: string
|
|
208
|
-
): IConfirmCopy => {
|
|
209
|
-
const name = nameOf(entry, variant);
|
|
210
|
-
if (action === 'accept') {
|
|
211
|
-
return {
|
|
212
|
-
title: `Make “${name}” the winner?`,
|
|
213
|
-
description: `This ends the test. From then on every visitor sees “${name}”. A developer removes the other versions' code later.`,
|
|
214
|
-
confirmLabel: `Accept ${name}`,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
const rest = entry.experiment.variants.filter((v) => v.key !== variant);
|
|
218
|
-
// The server concludes the test with the last version, a draft included.
|
|
219
|
-
if (rest.length === 1) {
|
|
220
|
-
const last = nameOf(entry, rest[0].key);
|
|
221
|
-
return {
|
|
222
|
-
title: `Remove “${name}”?`,
|
|
223
|
-
description: `Only “${last}” would be left, so it becomes the winner and the test ends. Every visitor then sees “${last}”.`,
|
|
224
|
-
confirmLabel: `Remove and accept ${last}`,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
return {
|
|
228
|
-
title: `Remove “${name}” from the test?`,
|
|
229
|
-
description:
|
|
230
|
-
entry.experiment.status === 'draft' ?
|
|
231
|
-
`The test will start without “${name}”.`
|
|
232
|
-
: `Nobody sees “${name}” any more. The test starts counting again with the remaining versions, so the numbers start from zero.`,
|
|
233
|
-
confirmLabel: `Remove ${name}`,
|
|
234
|
-
};
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
/** What the confirm step says before Start / Pause / Stop. */
|
|
238
|
-
export const lifecycleCopy = (action: TLifecycleAction, entry: IExperimentEntry): IConfirmCopy => {
|
|
239
|
-
const e = entry.experiment;
|
|
240
|
-
const name = e.name || e.key;
|
|
241
|
-
const versions = e.variants.map((v) => `“${v.name || v.key}”`).join(' and ');
|
|
242
|
-
switch (action) {
|
|
243
|
-
case 'start':
|
|
244
|
-
return e.status === 'paused' ?
|
|
245
|
-
{
|
|
246
|
-
title: `Resume “${name}”?`,
|
|
247
|
-
description: `Visitors are split between ${versions} again and counted.`,
|
|
248
|
-
confirmLabel: 'Resume the test',
|
|
249
|
-
}
|
|
250
|
-
: {
|
|
251
|
-
title: `Start “${name}”?`,
|
|
252
|
-
description: `From now on, visitors who allow analytics are split between ${versions}, and each version's numbers are counted. You can pause or stop it at any time.`,
|
|
253
|
-
confirmLabel: 'Start the test',
|
|
254
|
-
};
|
|
255
|
-
case 'pause':
|
|
256
|
-
return {
|
|
257
|
-
title: `Pause “${name}”?`,
|
|
258
|
-
description: `Everybody sees the original, “${nameOf(entry, e.variants.find((v) => v.control)?.key)}”, and nothing is counted until you resume it.`,
|
|
259
|
-
confirmLabel: 'Pause the test',
|
|
260
|
-
};
|
|
261
|
-
case 'stop':
|
|
262
|
-
default:
|
|
263
|
-
return {
|
|
264
|
-
title: `Stop “${name}”?`,
|
|
265
|
-
description:
|
|
266
|
-
'The test ends without a winner and cannot be started again; everybody sees the original. To end it with a winner, use Accept instead.',
|
|
267
|
-
confirmLabel: 'Stop the test',
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
/** The notification after Accept / Remove. */
|
|
273
|
-
export const actionOutcome = (
|
|
274
|
-
action: TVersionAction,
|
|
275
|
-
result: TExperimentActionResult | null | undefined,
|
|
276
|
-
variant: string
|
|
277
|
-
): string => {
|
|
278
|
-
const winner =
|
|
279
|
-
result?.variants?.find((v) => v.key === result.winner)?.name || result?.winner || variant;
|
|
280
|
-
if (action === 'accept' || result?.auto_accepted)
|
|
281
|
-
return `The test has ended: every visitor now sees “${winner}”.`;
|
|
282
|
-
return 'The version is removed; the test goes on with the others.';
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Why the numbers restarted: the current phase began when a version was removed. Null in the
|
|
287
|
-
* first phase. `actorLabels` names who removed it (`{ 'landing-editor': 'in the editor' }`).
|
|
288
|
-
*/
|
|
289
|
-
export const phaseNote = (
|
|
290
|
-
entry: IExperimentEntry | undefined,
|
|
291
|
-
actorLabels: Record<string, string> = {}
|
|
292
|
-
): string | null => {
|
|
293
|
-
const e = entry?.experiment;
|
|
294
|
-
if (!e || !e.phase || e.phase < 2) return null;
|
|
295
|
-
const current = e.phases?.find((p) => p.phase === e.phase);
|
|
296
|
-
const removed = [...(e.history ?? [])].reverse().find((h) => h.action === 'remove-variant');
|
|
297
|
-
const who = removed?.actor && actorLabels[removed.actor] ? ` ${actorLabels[removed.actor]}` : '';
|
|
298
|
-
const since =
|
|
299
|
-
current?.started_at ?
|
|
300
|
-
new Date(current.started_at).toLocaleDateString('en-GB', {
|
|
301
|
-
day: 'numeric',
|
|
302
|
-
month: 'short',
|
|
303
|
-
timeZone: 'UTC',
|
|
304
|
-
})
|
|
305
|
-
: null;
|
|
306
|
-
const name =
|
|
307
|
-
removed?.variant ?
|
|
308
|
-
e.phases?.flatMap((p) => p.variants).find((v) => v.key === removed.variant)?.name
|
|
309
|
-
: undefined;
|
|
310
|
-
return `Counting since ${since ?? 'the last change'} (phase ${e.phase}): ${name ? `“${name}”` : 'a version'} was removed${who}.`;
|
|
311
|
-
};
|
|
312
|
-
|
|
313
|
-
/** The note on an element whose test has ended. */
|
|
314
|
-
export const winnerNote = (entry: IExperimentEntry | undefined, shown: string) =>
|
|
315
|
-
`Winner live: ${entry ? nameOf(entry, entry.experiment.winner ?? shown) : versionName(shown)} · code clean-up pending`;
|
|
316
|
-
|
|
317
|
-
// ── how many versions fit ───────────────────────────────────────────────────────
|
|
318
|
-
|
|
319
|
-
/** Versions visible before the list scrolls: three and a half, so the half row says "there is more". */
|
|
320
|
-
export const VISIBLE_VERSIONS = 3.5;
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* The versions list's height cap (px): 3.5 rows, or less when the card has less room
|
|
324
|
-
* (`available`, what is left after the header, verdict and footer), never under one row.
|
|
325
|
-
* Null when every row fits (no cap, no scrolling).
|
|
326
|
-
*/
|
|
327
|
-
export const versionsMaxHeight = ({
|
|
328
|
-
rows,
|
|
329
|
-
rowHeight,
|
|
330
|
-
gap,
|
|
331
|
-
available = Infinity,
|
|
332
|
-
}: {
|
|
333
|
-
rows: number;
|
|
334
|
-
rowHeight: number;
|
|
335
|
-
gap: number;
|
|
336
|
-
available?: number;
|
|
337
|
-
}): number | null => {
|
|
338
|
-
if (rows <= 0 || rowHeight <= 0) return null;
|
|
339
|
-
const all = rows * rowHeight + (rows - 1) * gap;
|
|
340
|
-
const threeAndHalf = VISIBLE_VERSIONS * rowHeight + Math.floor(VISIBLE_VERSIONS) * gap;
|
|
341
|
-
const cap = Math.max(rowHeight, Math.min(threeAndHalf, available));
|
|
342
|
-
return all <= cap ? null : Math.round(cap);
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
// ── order and the leader ─────────────────────────────────────────────────────────
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* Best first: conversion on the primary metric, then visitors; versions without numbers keep
|
|
349
|
-
* their order at the end. Stable: equal versions keep the server's order.
|
|
350
|
-
*/
|
|
351
|
-
export const sortVersionRows = (rows: IVersionRow[]): IVersionRow[] =>
|
|
352
|
-
rows
|
|
353
|
-
.map((row, index) => ({ row, index }))
|
|
354
|
-
.sort((a, b) => {
|
|
355
|
-
const ca = a.row.visitors ? (a.row.conversion ?? -1) : -1;
|
|
356
|
-
const cb = b.row.visitors ? (b.row.conversion ?? -1) : -1;
|
|
357
|
-
if (cb !== ca) return cb - ca;
|
|
358
|
-
const va = a.row.visitors ?? -1;
|
|
359
|
-
const vb = b.row.visitors ?? -1;
|
|
360
|
-
if (vb !== va) return vb - va;
|
|
361
|
-
return a.index - b.index;
|
|
362
|
-
})
|
|
363
|
-
.map(({ row }) => row);
|
|
364
|
-
|
|
365
|
-
/**
|
|
366
|
-
* The version to highlight: the winner when the test ended with one or the verdict is a likely
|
|
367
|
-
* winner, otherwise the one converting best so far ("Leading"). Null while nothing is counted,
|
|
368
|
-
* or when the best conversion is shared.
|
|
369
|
-
*/
|
|
370
|
-
export const leadingVersion = (
|
|
371
|
-
entry: IExperimentEntry | undefined,
|
|
372
|
-
rows: IVersionRow[]
|
|
373
|
-
): { key: string; kind: 'winner' | 'leading' } | null => {
|
|
374
|
-
const e = entry?.experiment;
|
|
375
|
-
if (e?.status === 'concluded' && e.winner) return { key: e.winner, kind: 'winner' };
|
|
376
|
-
if (entry?.results?.verdict === 'likely-winner' && entry.results.winner_variant) {
|
|
377
|
-
return { key: entry.results.winner_variant, kind: 'winner' };
|
|
378
|
-
}
|
|
379
|
-
const counted = rows.filter((r) => r.visitors && r.conversion != null && r.conversion > 0);
|
|
380
|
-
if (!counted.length) return null;
|
|
381
|
-
const best = Math.max(...counted.map((r) => r.conversion as number));
|
|
382
|
-
const top = counted.filter((r) => r.conversion === best);
|
|
383
|
-
return top.length === 1 ? { key: top[0].key, kind: 'leading' } : null;
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
// ── the help ─────────────────────────────────────────────────────────────────────
|
|
387
|
-
|
|
388
|
-
export const DEFAULT_MIN_SAMPLE = { per_variant: 200, days: 7 };
|
|
389
|
-
|
|
390
|
-
export interface IHelpSection {
|
|
391
|
-
title: string;
|
|
392
|
-
paragraphs: string[];
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/** What the card's "?" explains, in plain words for a marketer. */
|
|
396
|
-
export const helpSections = (
|
|
397
|
-
entry: IExperimentEntry | undefined,
|
|
398
|
-
analyticsLabel = 'the admin portal'
|
|
399
|
-
): IHelpSection[] => {
|
|
400
|
-
const min = entry?.experiment.min_sample ?? DEFAULT_MIN_SAMPLE;
|
|
401
|
-
const traffic = entry?.experiment.traffic;
|
|
402
|
-
const share =
|
|
403
|
-
traffic != null && traffic < 1 ?
|
|
404
|
-
`${Math.round(traffic * 100)}% of the visitors who allow analytics`
|
|
405
|
-
: 'every visitor who allows analytics';
|
|
406
|
-
return [
|
|
407
|
-
{
|
|
408
|
-
title: 'What this is',
|
|
409
|
-
paragraphs: [
|
|
410
|
-
'An A/B test shows different versions of this part of the page to different visitors and counts which version gets more of them to do what you want (the goal, for example starting a sign-up).',
|
|
411
|
-
'The "Original" is what the page showed before the test. The others are the new versions being tried.',
|
|
412
|
-
],
|
|
413
|
-
},
|
|
414
|
-
{
|
|
415
|
-
title: 'The buttons',
|
|
416
|
-
paragraphs: [
|
|
417
|
-
'Click a version (or press Enter on it) to see it on this page. Only you see it, only in this browser, and it is never counted.',
|
|
418
|
-
"Show analytics (the chart icon) opens that version's numbers in " +
|
|
419
|
-
analyticsLabel +
|
|
420
|
-
'; the link in the footer opens the whole test.',
|
|
421
|
-
"Accept ends the test with that version as the winner: from then on every visitor sees it, and a developer removes the other versions' code later.",
|
|
422
|
-
'Remove (the bin icon) drops a version from the test. The counting starts again with the remaining versions, so their numbers restart from zero. When only one version would be left, it becomes the winner.',
|
|
423
|
-
'Start test begins splitting visitors and counting. Pause shows everyone the original and stops counting until you Resume. Stop ends the test without a winner, for good.',
|
|
424
|
-
'Every one of these asks you to confirm first.',
|
|
425
|
-
],
|
|
426
|
-
},
|
|
427
|
-
{
|
|
428
|
-
title: 'How visitors are split and counted',
|
|
429
|
-
paragraphs: [
|
|
430
|
-
`While the test runs, ${share} is put into one version at random and keeps seeing that same version on every visit. Visitors who decline analytics always see the original and are not counted.`,
|
|
431
|
-
'A visitor is counted for a version once they have actually seen this part of the page. A conversion is counted when that visitor later reaches the goal.',
|
|
432
|
-
],
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
title: 'Reading the numbers',
|
|
436
|
-
paragraphs: [
|
|
437
|
-
'Each version shows its visitors, its conversion (the share of its visitors who reached the goal) and a bar comparing it with the best version. The versions are sorted best first; "Leading" marks the one converting best so far.',
|
|
438
|
-
'"Chance to beat the original" is how likely that version really converts better than the original, given the numbers so far. 50% means we cannot tell them apart; 95% or more is a likely winner, marked "Winner"; 5% or less means it is likely worse.',
|
|
439
|
-
'The line at the top is the verdict in plain words: too early, a likely winner, likely worse, or no clear difference.',
|
|
440
|
-
],
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
title: 'When you can trust the result',
|
|
444
|
-
paragraphs: [
|
|
445
|
-
`Early numbers jump around. The verdict stays "too early" until every version has at least ${min.per_variant} visitors and ${min.days} days have passed since the test started; only then is a winner named.`,
|
|
446
|
-
'If visitors are not split between the versions as set up, the verdict says the numbers cannot be trusted: that points to a tracking problem, not to a better version.',
|
|
447
|
-
'Removing a version starts a new count (a new phase), so only the numbers since then are shown.',
|
|
448
|
-
],
|
|
449
|
-
},
|
|
450
|
-
{
|
|
451
|
-
title: 'Not set up yet?',
|
|
452
|
-
paragraphs: [
|
|
453
|
-
"A test can exist in the page's code before anyone registers it in the analytics service. Until it is set up (ask the Designer), you can switch its versions here, but nothing is counted and there are no numbers or controls.",
|
|
454
|
-
'When the analytics service cannot be reached, the card says so; the page itself works as usual and every visitor sees the original.',
|
|
455
|
-
],
|
|
456
|
-
},
|
|
457
|
-
{
|
|
458
|
-
title: 'The full analytics',
|
|
459
|
-
paragraphs: [
|
|
460
|
-
`Every test and every version has its own page in ${analyticsLabel}: the numbers over time, the other goals, and how the test changed.`,
|
|
461
|
-
],
|
|
462
|
-
},
|
|
463
|
-
];
|
|
464
|
-
};
|