@uniformdev/mesh-sdk-react 19.37.1 → 19.38.3-alpha.70

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/dist/index.d.mts CHANGED
@@ -1,15 +1,19 @@
1
1
  import * as _emotion_react_types_jsx_namespace from '@emotion/react/types/jsx-namespace';
2
2
  import * as React$1 from 'react';
3
- import React__default, { SVGProps, PropsWithChildren, ComponentType, HTMLAttributes, ReactNode, AnchorHTMLAttributes } from 'react';
3
+ import React__default, { SVGProps, ReactNode, MutableRefObject, ComponentType, PropsWithChildren, HTMLAttributes, AnchorHTMLAttributes } from 'react';
4
4
  import { TDate } from 'timeago.js';
5
5
  import * as _emotion_react from '@emotion/react';
6
+ import { Interpolation, Theme } from '@emotion/react';
6
7
  import * as _uniformdev_mesh_sdk from '@uniformdev/mesh-sdk';
7
- import { DynamicInput, MeshLocation, SetValueOptions, DynamicInputs, DataSourceLocationValue, DataTypeLocationValue } from '@uniformdev/mesh-sdk';
8
+ import { DynamicInput, MeshLocation, SetValueOptions, DynamicInputs, DataSourceLocationValue, DataTypeLocationValue, BindableTypes } from '@uniformdev/mesh-sdk';
8
9
  export * from '@uniformdev/mesh-sdk';
9
10
  import { DataVariableDefinition, DataResourceVariables, DataType } from '@uniformdev/canvas';
10
11
  import { Emitter } from 'mitt';
11
12
  import { BadgeThemeProps, InputSelectProps } from '@uniformdev/design-system';
12
13
  export { AddListButton, AddListButtonProps, Button, ButtonProps, Callout, CalloutProps, DrawerContent, Heading, HeadingProps, Input, InputComboBox, InputComboBoxProps, InputKeywordSearch, InputProps, InputSelect, InputToggle, InputToggleProps, Label, LabelProps, LoadingIndicator, LoadingOverlay, Menu, MenuItem, MenuItemProps, MenuProps, ParameterGroup, ParameterGroupProps, ParameterImage, ParameterImageInner, ParameterImageProps, ParameterInput, ParameterInputInner, ParameterInputProps, ParameterLabel, ParameterLabelProps, ParameterMenuButton, ParameterMenuButtonProps, ParameterSelect, ParameterSelectInner, ParameterSelectProps, ParameterShell, ParameterShellContext, ParameterShellProps, ParameterTextarea, ParameterTextareaInner, ParameterTextareaProps, ParameterToggle, ParameterToggleInner, ParameterToggleProps, ScrollableList, ScrollableListItem, ScrollableListItemProps, ScrollableListProps, Switch, SwitchProps, Textarea, TextareaProps, Theme, ThemeProps, useParameterShell } from '@uniformdev/design-system';
14
+ import * as lexical from 'lexical';
15
+ import { SerializedEditorState, SerializedLexicalNode, Spread, DecoratorNode, NodeKey, LexicalNode, LexicalEditor, EditorState } from 'lexical';
16
+ import { MenuOption } from '@lexical/react/LexicalTypeaheadMenuPlugin';
13
17
 
14
18
  declare const SvgCaution: (props: SVGProps<SVGSVGElement>) => _emotion_react_types_jsx_namespace.EmotionJSX.Element;
15
19
 
@@ -369,16 +373,18 @@ declare const damSelectItemImage: _emotion_react.SerializedStyles;
369
373
 
370
374
  type MinimalDynamicInput = Omit<DynamicInput, 'source'>;
371
375
  type MinimalDynamicInputs = Record<string, MinimalDynamicInput>;
372
- type DataResourceDynamicInputProviderProps = PropsWithChildren<{
376
+ type DataResourceDynamicInputProviderProps = {
373
377
  /** Explicitly provide dynamic input values. If not set, Mesh location will be used */
374
378
  dynamicInputs?: MinimalDynamicInputs;
375
- }>;
379
+ /** Child components of the provider. Variables-using components, such as InputVariables, can be used here. */
380
+ children: ReactNode;
381
+ };
376
382
  /**
377
383
  * Wrapper for data resource locations. Provides read-only access to dynamic inputs as if they were variables,
378
384
  * using variables-aware components (i.e. InputVariables). This simplifies building dynamic-input-aware editors,
379
385
  * where a data resource variable could be a static value or bound to a dynamic input from the route (project map).
380
386
  */
381
- declare function DataResourceDynamicInputProvider({ children, dynamicInputs, }: DataResourceDynamicInputProviderProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
387
+ declare function DataResourceDynamicInputProvider(props: DataResourceDynamicInputProviderProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
382
388
 
383
389
  /**
384
390
  * Provides convenient access to the current Uniform Mesh location via React hook.
@@ -441,6 +447,226 @@ type DispatchResult<TSetValue> = {
441
447
  newValue: TSetValue;
442
448
  };
443
449
 
450
+ /**
451
+ * Updates the Lexical editor state automatically when a controlled value changes, effectively
452
+ * turning the Lexical editor into a controlled component.
453
+ *
454
+ * DO NOT USE THIS when actually editing with Lexical as it will cause performance problems.
455
+ * This is intended to be used:
456
+ * * To simplify a read-only "preview" editor, where the user can't edit the value
457
+ * * To sync an external state with the Lexical editor state under certain conditions (i.e. composer mounted, but editor hidden)
458
+ */
459
+ declare function ControlledValuePlugin({ enabled, value, extraDependencies, }: {
460
+ /** Whether to enable the controlled value plugin. Defaults to false. The value is only controlled when set to true. */
461
+ enabled: boolean;
462
+ value: string | undefined | SerializedEditorState<SerializedLexicalNode>;
463
+ extraDependencies?: unknown[];
464
+ }): JSX.Element | null;
465
+
466
+ type SerializedVariableNode = Spread<{
467
+ reference: string;
468
+ type: 'variable';
469
+ version: 1;
470
+ }, SerializedLexicalNode>;
471
+ type VariableNodeState = {
472
+ /** Display name to show on the variable */
473
+ displayName: string;
474
+ /**
475
+ * Whether the variable reference is currently pointing to a known variable in the variables context
476
+ * Note that this is ignored if `isFresh` is true, which is set for the result of edits or insertions
477
+ * made after the editor has mounted (which we know are good and don't validate to prevent flicker or false errors)
478
+ */
479
+ referenceIsValid: boolean | 'info';
480
+ /**
481
+ * Whether the variable node has been inserted or edited during this editing session
482
+ * Fresh nodes are always considered "valid" because they are the result of a user action
483
+ */
484
+ isFresh: boolean;
485
+ /** Whether clicking the node has an effect (dispatching an edit event) */
486
+ hasClickEvent: boolean | undefined;
487
+ /** Tooltip of the node on hove */
488
+ tooltip: string | undefined;
489
+ };
490
+ /** Renders a variable reference node within a Lexical editor */
491
+ declare class VariableNode extends DecoratorNode<JSX.Element> {
492
+ reference: Readonly<string>;
493
+ private __state;
494
+ static getType(): string;
495
+ static clone(node: VariableNode): VariableNode;
496
+ /** Imports the node from serialized JSON (i.e. the data provided to the editor's initial state) */
497
+ static importJSON(serializedNode: SerializedVariableNode): VariableNode;
498
+ constructor(reference: Readonly<string>, state: VariableNodeState, key?: NodeKey);
499
+ /** Gets the node's current state */
500
+ getState(): VariableNodeState;
501
+ /**
502
+ * Updates the node's variables state so it knows its current validity, display name, etc
503
+ * The plugin updates this whenever the variables prop changes.
504
+ */
505
+ setState(state: VariableNodeState): void;
506
+ /**
507
+ * Serializes the node to JSON for editor initial state
508
+ */
509
+ exportJSON(): {
510
+ reference: string;
511
+ type: string;
512
+ version: number;
513
+ };
514
+ /**
515
+ * Copy variable to clipboard in a format we will read back if pasted
516
+ * (albeit it won't get the fancy chip-node)
517
+ */
518
+ getTextContent(): string;
519
+ /** Creates the DOM wrapper that hosts the node */
520
+ createDOM(): HTMLSpanElement;
521
+ updateDOM(): boolean;
522
+ /**
523
+ * Render the variable node using React.
524
+ * NOTE: this is effectively an island of React, and you may not call hooks,
525
+ * rely on Context, etc in this renderer.
526
+ */
527
+ decorate(): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
528
+ }
529
+ declare function $createVariableNode(variableReference: string, state: VariableNodeState): VariableNode;
530
+ declare function $isVariableNode(node: LexicalNode | null | undefined): node is VariableNode;
531
+
532
+ type MeshDataVariableDefinition = Omit<DataVariableDefinition, 'default'> & {
533
+ /** When used in code, variables may have non-string defaults */
534
+ default: unknown;
535
+ /**
536
+ * If true the variable will not be shown in variables listings and menus, but can still be resolved
537
+ * Useful for variables that are defined by their presence in a value, and disappear when deleted from the value,
538
+ * like bindings.
539
+ */
540
+ ephemeral?: boolean;
541
+ /**
542
+ * Prevents editing the variable if set to true. If the variable context is set to read only,
543
+ * this is ignored and is always effectively true.
544
+ */
545
+ readOnly?: boolean;
546
+ /**
547
+ * Tooltip for the variable when rendered in content UI.
548
+ * If not passed, defaults to helpText.
549
+ */
550
+ tooltip?: string;
551
+ };
552
+ /**
553
+ * Provides information for an undefined variable that might be referenced in data,
554
+ * but is undefined in the variables context due to some sort of error or informational message.
555
+ *
556
+ * If an undefined variable matches one of these, the error or info message will be shown instead of the generic "undefined variable" message.
557
+ */
558
+ type KnownUndefinedVariableInfo = {
559
+ error?: string;
560
+ info?: string;
561
+ };
562
+ type DataVariableDefinitionWithName = {
563
+ name: string;
564
+ } & MeshDataVariableDefinition;
565
+ /**
566
+ * Converts variable definitions stored in a map into a flat list,
567
+ * respecting their `order` property if set, and sorting by display name otherwise.
568
+ */
569
+ declare function variablesToList(variables: Record<string, MeshDataVariableDefinition> | undefined): Array<DataVariableDefinitionWithName>;
570
+
571
+ type SelectVariableMenuProps<TEditorContext = undefined> = {
572
+ /** sets the onClick menu item event. Also called if the menu adds a variable with the newly added variable. */
573
+ onSelectVariable: (selectedVariable: DataVariableDefinitionWithName) => void;
574
+ /** Controls whether one can add variables from the menu */
575
+ showAddVariableMenuOption?: boolean | string;
576
+ /** Emotion styles to apply to the menu trigger icon button */
577
+ buttonCss?: Interpolation<Theme>;
578
+ /** Control HTML attributes of the menu button */
579
+ buttonProps?: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'ref' | 'type'>;
580
+ /** Sets a 'tip' value that shows at the bottom of the menu */
581
+ tip?: string;
582
+ /** Enables a menu option to reset the variables */
583
+ onResetVariables?: () => void;
584
+ /** Computes the editor context when a variable is added or edited from this menu, and when filtering variables */
585
+ getEditorContext?: () => TEditorContext;
586
+ /** Sets the tooltip shown on hover over the insert-variable menu */
587
+ menuTooltip?: string;
588
+ /** Filters available variables in menus and auto-completes */
589
+ filterVariable?: (variableName: string, variableDefinition: MeshDataVariableDefinition, context: TEditorContext | undefined) => boolean;
590
+ };
591
+
592
+ type VariableSourceGroup = {
593
+ name: string | undefined;
594
+ variables: Array<DataVariableDefinitionWithName>;
595
+ };
596
+ /**
597
+ * Groups variable definitions by their `source` property, and sorts the groups using `variablesToList`.
598
+ * Returns a flat list of groups and variables. Groups are sorted alphabetically.
599
+ */
600
+ declare function variablesToGroupedList<TEditorContext = void>(variables: Record<string, MeshDataVariableDefinition> | undefined, filterFn?: (variableName: string, variableDefinition: MeshDataVariableDefinition, context: TEditorContext | undefined) => boolean, context?: TEditorContext): Array<VariableSourceGroup>;
601
+
602
+ type EditVariableCommandArguments = {
603
+ /** Lexical node key that is being edited */
604
+ sourceKey: string | undefined;
605
+ /** The variable reference to edit */
606
+ reference: string;
607
+ };
608
+ type InsertVariableCommandArguments = {
609
+ reference: string;
610
+ /**
611
+ * Optionally pass in display name if you have it
612
+ * avoids a flash of the reference name
613
+ */
614
+ initialDisplayName?: string;
615
+ /**
616
+ * If specified, the lexical node with this key is overwritten by the insert.
617
+ * If unspecified, the current selection is overwritten, or inserted to if a single location.
618
+ */
619
+ targetKey: string | undefined;
620
+ /**
621
+ * If true, the existing value of the editor should be replaced with this variable
622
+ * Used when inserting a variable during an input state transition.
623
+ */
624
+ overwriteExistingValue?: boolean;
625
+ };
626
+ /**
627
+ * Opens the variable editor and when a result is selected, inserts it at the current cursor location
628
+ * NOTE: differs from INSERT_VARIABLE_COMMAND because this opens a variable picker, and that command inserts a known variable reference with no picker.
629
+ */
630
+ declare const OPEN_INSERT_VARIABLE_COMMAND: lexical.LexicalCommand<unknown>;
631
+ /** Opens the variable editor for an existing variable node */
632
+ declare const EDIT_VARIABLE_COMMAND: lexical.LexicalCommand<EditVariableCommandArguments>;
633
+ /** Inserts a new variable node at the current selection, or replacing a specific node key */
634
+ declare const INSERT_VARIABLE_COMMAND: lexical.LexicalCommand<InsertVariableCommandArguments>;
635
+ type VariablesPluginProps<TEditorContext = unknown> = {
636
+ /** Disables adding variable references via autocomplete. Any existing variables will be rendered as variables. */
637
+ disableVariables?: boolean;
638
+ /** Enables 'add variable' option in autocomplete */
639
+ showAddVariableMenuOption?: boolean | string;
640
+ /** Enables clicking a variable reference to edit the variable */
641
+ enableEditingVariables?: boolean;
642
+ /** Computes the editor context when a variable is added or edited from this composer, or when filtering variables */
643
+ getEditorContext?: SelectVariableMenuProps<TEditorContext>['getEditorContext'];
644
+ /** Filters available variables in menus and auto-completes */
645
+ filterVariable?: SelectVariableMenuProps<TEditorContext>['filterVariable'];
646
+ /** If true, the whole value of the editor is replaced when a variable is inserted */
647
+ replaceValueOnVariableInsert: boolean;
648
+ };
649
+ type UseVariablesMenuInput<TEditorContext> = Pick<VariablesPluginProps<TEditorContext>, 'showAddVariableMenuOption' | 'enableEditingVariables' | 'filterVariable' | 'getEditorContext'>;
650
+ type OnVariableSelectInput = {
651
+ value: string;
652
+ queryString?: string;
653
+ nodeToReplace?: LexicalNode;
654
+ editor: LexicalEditor;
655
+ overwriteExistingValue: boolean;
656
+ };
657
+ type UseVariablesMenu = {
658
+ groupedVariables: VariableSourceGroup[];
659
+ menuOptions: MenuOption[];
660
+ onSelect: (input: OnVariableSelectInput) => void;
661
+ };
662
+ /** Hook to use the lexical variables typeahead/dropdown menu */
663
+ declare function useVariablesMenu<TEditorContext>({ showAddVariableMenuOption, enableEditingVariables, filterVariable, getEditorContext, }: UseVariablesMenuInput<TEditorContext>): UseVariablesMenu;
664
+ /**
665
+ * Enables variables auto-complete and reference management to a Lexical editor.
666
+ * Must also activate the VariableNode node to make this work.
667
+ */
668
+ declare function VariablesPlugin<TEditorContext = unknown>({ disableVariables, showAddVariableMenuOption, enableEditingVariables, getEditorContext, replaceValueOnVariableInsert, filterVariable, }: VariablesPluginProps<TEditorContext>): JSX.Element | null;
669
+
444
670
  type PasteTransformerPluginProps = {
445
671
  /**
446
672
  * Transforms pasted contents before inserting them.
@@ -449,23 +675,52 @@ type PasteTransformerPluginProps = {
449
675
  transformPaste?: (pastedText: string) => string | undefined;
450
676
  };
451
677
 
452
- type InputToken = {
453
- name: string;
454
- value: string;
678
+ type UseInputVariablesStateProps<TEditorContext = unknown> = {
679
+ /** Unique ID for the value being edited. */
680
+ id?: string;
681
+ /**
682
+ * Sets the value of the input
683
+ * NOTE: this is NOT reactive after mount
684
+ */
685
+ value: string | undefined;
686
+ /** Callback to receive changes to the value of the variables input */
687
+ onChange: (newValue: string | undefined) => void;
688
+ /**
689
+ * The value to set the field to when it's "reset" from a variables-input to a custom component.
690
+ * Defaults to undefined.
691
+ */
692
+ valueToResetTo?: string | undefined;
693
+ /** Disables using variables in the input */
694
+ disableVariables?: boolean;
695
+ /**
696
+ * Enables adding variables from the menu. If a string is passed,
697
+ * the option is enabled and the string is used as the menu label.
698
+ */
699
+ showAddVariableMenuOption?: boolean | string;
700
+ /**
701
+ * When no variables are referenced in the value, and this prop is provided,
702
+ * the variables-injection input will be replaced with this component.
703
+ *
704
+ * NOTE: When this prop is provided, the and a variable is inserted, any existing value
705
+ * in the input will be replaced with the variable reference. Once in variables-mode, additional
706
+ * insertions are inserted at the current selection (or end) of the variables value.
707
+ */
708
+ inputWhenNoVariables?: JSX.Element;
709
+ /** Computes the editor context when a variable is added or edited from this composer */
710
+ getEditorContext?: () => TEditorContext;
711
+ /** Filters available variables in menus and auto-completes */
712
+ filterVariable?: SelectVariableMenuProps<TEditorContext>['filterVariable'];
713
+ /** Sets the tooltip shown on hover over the insert-variable menu */
714
+ menuTooltip?: string;
455
715
  };
456
- type InputVariablesProps = {
716
+
717
+ type InputVariablesProps<TEditorContext = unknown> = {
457
718
  /** Sets a HTML ID for the variables input and label */
458
719
  id?: string;
459
720
  /** Enables a label for the input */
460
721
  label?: string;
461
722
  /** sets the input aria-label value. */
462
723
  'aria-label'?: string;
463
- /** sets the value of the input */
464
- value: string;
465
- /** sets the passed down function call */
466
- onChange: (newValue: string) => void;
467
- /** Disables using variables in the input */
468
- disableVariables?: boolean;
469
724
  /**
470
725
  * Turns off the 'Reset' menu option that is added when:
471
726
  * - inputWhenNoVariables is passed in
@@ -473,20 +728,18 @@ type InputVariablesProps = {
473
728
  *
474
729
  * The reset button returns the editor to the inputWithNoVariables state
475
730
  *
476
- * @deprecated not usually necessary to set this, it's automatic
731
+ * @deprecated this is ignored if passed, computation is now automatic
477
732
  */
478
733
  disableReset?: boolean;
479
- /** Enables adding variables from the menu */
480
- showAddVariableMenuOption?: boolean;
734
+ /** Enables mutliple lines in the input (\n in the value) */
735
+ multiLine?: boolean;
481
736
  /** Disables the inline variable selection menu when rendering a variables input */
482
737
  disableInlineMenu?: boolean;
483
- /** Enables clicking a variable reference to edit the variable */
484
- enableEditingVariables?: boolean;
485
738
  /**
486
- * When no variables are referenced in the value, and this prop is provided,
487
- * the variables-injection input will be replaced with this component.
739
+ * Enables clicking a variable reference to edit the variable
740
+ * Note: automatically disabled if `disabled` or `disableVariables` is set
488
741
  */
489
- inputWhenNoVariables?: JSX.Element;
742
+ enableEditingVariables?: boolean;
490
743
  /** (optional) sets and shows the the error message value */
491
744
  errorMessage?: string;
492
745
  /** (optional) sets and shows the the warning message value */
@@ -495,37 +748,103 @@ type InputVariablesProps = {
495
748
  infoMessage?: string;
496
749
  /** (optional) sets caption text value */
497
750
  caption?: string;
751
+ /** Disables editing the value of the input, editing variables, and adding variables */
752
+ disabled?: boolean;
498
753
  /** Sets the test ID of the input */
499
- 'data-test-id'?: string;
500
- } & PasteTransformerPluginProps;
501
- declare function InputVariables({ id, 'aria-label': ariaLabel, label, value, disableVariables, disableReset, enableEditingVariables, disableInlineMenu, onChange, transformPaste, showAddVariableMenuOption, inputWhenNoVariables, caption, errorMessage, warningMessage, infoMessage, 'data-test-id': dataTestId, }: InputVariablesProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
754
+ 'data-testid'?: string;
755
+ /** If set the editor will auto-focus on mount */
756
+ autoFocus?: boolean;
757
+ /**
758
+ * Optional ref to get a handle to the variables editor.
759
+ * This can be useful for situations such as:
760
+ * * Once initially set, `value` prop is no longer reactive and the editor owns its state. The ref can be used to set the editor state after load.
761
+ * * Performing other custom mutations to the variables editor, such as inserting text from a button click.
762
+ */
763
+ editorRef?: MutableRefObject<LexicalEditor | null>;
764
+ } & PasteTransformerPluginProps & UseInputVariablesStateProps<TEditorContext>;
765
+ /**
766
+ * An input box that enables insertion of 'variables', provided by VariablesProvider,
767
+ * into its value.
768
+ */
769
+ declare function InputVariables<TEditorContext = unknown>(props: InputVariablesProps<TEditorContext>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
502
770
 
503
- /** Expected prefix for variable expressions */
504
- declare const variablePrefix = "${";
505
- /** Expected suffix for variable expressions */
506
- declare const variableSuffix = "}";
771
+ type ParameterConnectionIndicatorProps = {
772
+ /** Disables the menu, hiding it from view entirely */
773
+ disabled?: boolean;
774
+ /** The value to check for variables */
775
+ value: unknown;
776
+ /** The React component to render next to the parameter connection indicator (the parameter's view) */
777
+ children: ReactNode;
778
+ /** Custom menu options for the connection indicator menu */
779
+ menuOptions: ReactNode;
780
+ /** Sets the tooltip shown on hover over the insert-variable menu */
781
+ menuTooltip?: string;
782
+ };
783
+ /**
784
+ * An input box that enables insertion of 'variables', provided by VariablesProvider,
785
+ * into its value. Designed specifically for use in the Canvas Parameter Editor.
786
+ */
787
+ declare function ParameterConnectionIndicator({ children, value, menuOptions, disabled, menuTooltip, }: ParameterConnectionIndicatorProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
507
788
 
508
- type DataVariableDefinitionWithName = {
509
- name: string;
510
- } & DataVariableDefinition;
789
+ type ParameterOrSingleVariableProps<TEditorContext = unknown> = {
790
+ disabled?: boolean;
791
+ inputWhenNoVariables: JSX.Element;
792
+ enableEditingVariables?: boolean;
793
+ /**
794
+ * Optional ref to get a handle to the variables editor.
795
+ * This can be useful for situations such as performing custom mutations to the variables editor,
796
+ * such as imperatively inserting a new variable using OPEN_INSERT_VARIABLE_COMMAND.
797
+ */
798
+ editorRef?: MutableRefObject<LexicalEditor | null>;
799
+ } & Omit<UseInputVariablesStateProps<TEditorContext>, 'inputWhenNoVariables'>;
511
800
  /**
512
- * Converts variable definitions stored in a map into a flat list,
513
- * respecting their `order` property if set, and sorting by display name otherwise.
801
+ * A parameter which can be one of a custom parameter editor (`inputWhenNoVariables`),
802
+ * or one single variable value (not multiple). Use for parameters which can only have one variable value,
803
+ * possibly because they bind to objects or arrays.
804
+ * Designed visually for use in the Canvas Parameter Editor.
514
805
  */
515
- declare function variablesToList(variables: Record<string, DataVariableDefinition> | undefined): Array<DataVariableDefinitionWithName>;
806
+ declare function ParameterOrSingleVariable<TEditorContext = unknown>(props: ParameterOrSingleVariableProps<TEditorContext>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
516
807
 
517
- type VariableEditorProps = {
808
+ type ParameterVariablesProps<TEditorContext = unknown> = {
809
+ /** sets the input aria-label value. */
810
+ 'aria-label'?: string;
811
+ /** Sets the test ID of the input */
812
+ 'data-testid'?: string;
813
+ /**
814
+ * Enables mutliple lines in the input (\n in the value).
815
+ * If a number is passed, the height of the editor is set to that number of lines and overflow scrolls.
816
+ * If a boolean true is passed, the editor auto-sizes to the content.
817
+ */
818
+ multiLine?: boolean | number;
819
+ /** Disables editing the value of the input, editing variables, and adding variables */
820
+ disabled?: boolean;
821
+ /**
822
+ * Optional ref to get a handle to the variables editor.
823
+ * This can be useful for situations such as:
824
+ * * Once initially set, `value` prop is no longer reactive and the editor owns its state. The ref can be used to set the editor state after load.
825
+ * * Performing other custom mutations to the variables editor, such as inserting text from a button click.
826
+ */
827
+ editorRef?: MutableRefObject<LexicalEditor | null>;
828
+ /** If set the editor will auto-focus on mount */
829
+ autoFocus?: boolean;
830
+ } & UseInputVariablesStateProps<TEditorContext>;
831
+ /**
832
+ * An input box that enables insertion of 'variables', provided by VariablesProvider,
833
+ * into its value. Designed visually for use in the Canvas Parameter Editor.
834
+ */
835
+ declare function ParameterVariables<TEditorContext = unknown>(props: ParameterVariablesProps<TEditorContext>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
836
+
837
+ type VariableEditorProps<TEditorContext = unknown> = {
518
838
  variable: string;
519
839
  onSubmit: (values: DataVariableDefinitionWithName) => void | Promise<void>;
520
840
  /** Disables the tip about Mesh integrations. Intended for use when this is placed on a custom Mesh integration to edit variables. */
521
841
  disableMeshTip?: boolean;
522
842
  onCancel: () => void;
843
+ context: TEditorContext | undefined;
523
844
  };
524
- declare function VariableEditor({ variable, onSubmit, onCancel, disableMeshTip }: VariableEditorProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
525
-
526
- declare function VariablesList(): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
845
+ declare function VariableEditor({ variable, onSubmit, onCancel, disableMeshTip }: VariableEditorProps<any>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
527
846
 
528
- type VariablesProviderProps = React$1.PropsWithChildren<{
847
+ type VariablesProviderProps<TEditVariableContext = unknown> = React$1.PropsWithChildren<{
529
848
  /**
530
849
  * Signals that components in this variables context are not intended to allow mutation
531
850
  * of the variable values (i.e. editing, adding, or deleting variable definitions).
@@ -534,18 +853,27 @@ type VariablesProviderProps = React$1.PropsWithChildren<{
534
853
  */
535
854
  readOnly?: boolean;
536
855
  /** Variable values to load into the context */
537
- value: Record<string, DataVariableDefinition>;
856
+ value: Record<string, MeshDataVariableDefinition>;
857
+ /**
858
+ * Provides information for undefined variables that might be referenced in data,
859
+ * but is undefined in the variables context due to some sort of error or informational message.
860
+ *
861
+ * If an undefined variable matches one of these, the error or info message can be shown instead of the generic "undefined variable" message.
862
+ */
863
+ knownUndefinedValues?: Record<string, KnownUndefinedVariableInfo>;
538
864
  /** Function to handle mutations to the variable values (optional when readOnly is true) */
539
- onChange?: (newValue: Record<string, DataVariableDefinition>) => void;
865
+ onChange?: (newValue: Record<string, MeshDataVariableDefinition>) => void;
540
866
  /**
541
867
  * Provide a component to handle editing a variable definition (e.g. a modal wrapper)
542
868
  * If not passed, the editor will be rendered inline, with potentially strange results.
543
869
  */
544
- editVariableComponent?: React$1.ComponentType<VariableEditorProps>;
870
+ editVariableComponent?: React$1.ComponentType<VariableEditorProps<TEditVariableContext>>;
545
871
  }>;
546
- type VariablesAction = {
872
+ type VariablesAction<TEditVariableContext> = {
547
873
  type: 'edit';
548
874
  variable: string;
875
+ /** Context that will be passed in a prop to the variables context editing component */
876
+ context?: TEditVariableContext;
549
877
  } | {
550
878
  type: 'remove';
551
879
  variable: string;
@@ -553,14 +881,22 @@ type VariablesAction = {
553
881
  type: 'set';
554
882
  variable: DataVariableDefinitionWithName;
555
883
  openEditor?: boolean;
884
+ /** Context that will be passed in a prop to the variables context editing component. Only has an effect when openEditor = true */
885
+ context?: TEditVariableContext;
556
886
  } | {
557
887
  type: 'reorder';
558
888
  result: Record<string, DataVariableDefinitionWithName>;
889
+ } | {
890
+ type: 'cancelEdit';
891
+ };
892
+ type VariablesUpdateEvent = {
893
+ name: string;
894
+ latestValue: Record<string, MeshDataVariableDefinition>;
559
895
  };
560
896
  type VariablesEvents = {
561
- update: string;
897
+ update: VariablesUpdateEvent;
562
898
  };
563
- type VariablesContext = {
899
+ type VariablesContext<TEditVariableContext> = {
564
900
  /**
565
901
  * Signals that components in this variables context are not intended to allow mutation
566
902
  * of the variable values (i.e. editing, adding, or deleting variable definitions).
@@ -569,9 +905,14 @@ type VariablesContext = {
569
905
  */
570
906
  readOnly?: boolean;
571
907
  /** Dispatch update events to the variables */
572
- dispatch: (event: VariablesAction) => void;
908
+ dispatch: (event: VariablesAction<TEditVariableContext>) => void;
573
909
  /** The current variables value */
574
- variables: Readonly<Record<string, DataVariableDefinition>>;
910
+ variables: Readonly<Record<string, MeshDataVariableDefinition>>;
911
+ /**
912
+ * Provides information for undefined variables that might be referenced in data,
913
+ * but is undefined in the variables context due to some sort of error or informational message.
914
+ */
915
+ knownUndefinedValues: Readonly<Record<string, KnownUndefinedVariableInfo>>;
575
916
  /** Whether the context is editing a variable value currently */
576
917
  isEditing: boolean;
577
918
  /** Add event handles (don't forget to unhook) */
@@ -582,10 +923,54 @@ type VariablesContext = {
582
923
  * A flattened version of `variables` that is a plain key-value object.
583
924
  * Used when binding the variables to a value.
584
925
  */
585
- flatVariables: Readonly<Record<string, string>>;
926
+ flatVariables: Readonly<Record<string, unknown>>;
586
927
  };
587
- declare function VariablesProvider({ value, onChange, editVariableComponent, readOnly, children, }: VariablesProviderProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
588
- declare function useVariables(returnEmptyWithoutProvider?: boolean): VariablesContext;
928
+ declare function VariablesProvider<TEditComponentContext = never>({ value, onChange, editVariableComponent, readOnly, children, knownUndefinedValues, }: VariablesProviderProps<TEditComponentContext>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
929
+ declare function useVariables<TEditComponentContext = unknown>(returnEmptyWithoutProvider?: boolean): VariablesContext<TEditComponentContext>;
930
+
931
+ declare function useOnVariableUpdated(fn: (event: VariablesUpdateEvent) => void, disabled?: boolean): void;
932
+
933
+ /** Converts a connected data map entry to a VariablesProvider-format variable */
934
+ declare function convertConnectedDataToVariable(bindExpression: string, value: unknown): MeshDataVariableDefinition;
935
+
936
+ /**
937
+ * Returns true if the string expression has variable references in it
938
+ */
939
+ declare function hasReferencedVariables(value: string): boolean;
940
+
941
+ declare function prettifyBindExpression(bindExpression: string): string;
942
+
943
+ /**
944
+ * Serializes a Lexical variables-editor state (as a Lexical AST) to a Uniform-variable-reference formatted string
945
+ * Note: if no content is in the editor state, undefined will be returned.
946
+ */
947
+ declare function serializeVariablesEditorState(editorState: EditorState): string | undefined;
948
+
949
+ /**
950
+ * Programmatically sets the current value of a variables editor after it has already initialized
951
+ * and become an uncontrolled component. Passing the `editorRef` prop to the component will give
952
+ * a reference to `editor`, or use `ControlledValuePlugin` to manage this automatically.
953
+ *
954
+ * If newValue is undefined, the editor will be set to an empty state.
955
+ * If newValue is a string, it will be treated as a variable-reference-containing string, and parsed to a Lexical AST
956
+ * If newValue is a serialized Lexical AST, it will be used as-is. If the AST is invalid, the editor will be set to an empty state.
957
+ */
958
+ declare function setVariablesEditorValue(editor: LexicalEditor, newValue: string | undefined | SerializedEditorState<SerializedLexicalNode>): void;
959
+
960
+ declare function variableDefaultTextValue(defaultValue: unknown): string;
961
+
962
+ /**
963
+ * Expected prefix for variable expressions
964
+ * @deprecated
965
+ */
966
+ declare const variablePrefix = "${";
967
+ /**
968
+ * Expected suffix for variable expressions
969
+ * @deprecated
970
+ */
971
+ declare const variableSuffix = "}";
972
+
973
+ declare function VariablesList(): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
589
974
 
590
975
  type DataResourceVariablesListProps = {
591
976
  /**
@@ -1025,6 +1410,25 @@ type QueryFilterProps<TSelectOptions extends QuertFilterSelectionOptionProps = Q
1025
1410
  */
1026
1411
  declare const QueryFilter: ({ requireContentType, queryFilterTitle, contentTypeLabel, typeSelectorAllTypesOptionText, contentTypeOptions, searchInputName, searchInputPlaceholderText, searchInputLabel, countLabel, countValue, sortLabel, sortOptions, sortOrderLabel, sortOrderOptions, children, }: QueryFilterProps) => _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1027
1412
 
1413
+ type ParamTypeDynamicDataProviderProps = {
1414
+ /** Child components of the provider. Variables-using components, such as ParameterVariables, can be used here. */
1415
+ children: ReactNode;
1416
+ };
1417
+ /** Context to tell the binding UI what types are allowed for the current binding expression */
1418
+ type ParameterConnectOptions = {
1419
+ /**
1420
+ * Which JSON primitive types can be connected to this parameter.
1421
+ * Note that if the only value of the parameter is a complex dynamic token connection (object or array), then the connected data will be the literal value, not a string.
1422
+ */
1423
+ connectsTo: BindableTypes[];
1424
+ };
1425
+ /**
1426
+ * Wrapper for data resource locations. Provides read-only access to dynamic inputs as if they were variables,
1427
+ * using variables-aware components (i.e. InputVariables). This simplifies building dynamic-input-aware editors,
1428
+ * where a data resource variable could be a static value or bound to a dynamic input from the route (project map).
1429
+ */
1430
+ declare function ParamTypeDynamicDataProvider(props: ParamTypeDynamicDataProviderProps): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1431
+
1028
1432
  /** Editor component to let you write a request body for POST requests */
1029
1433
  declare function RequestBody(): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1030
1434
 
@@ -1116,10 +1520,10 @@ declare function RequestUrl(): _emotion_react_types_jsx_namespace.EmotionJSX.Ele
1116
1520
  * Editor to modify the current URL of the request
1117
1521
  * Note: entering query string parameters automatically converts them and syncs the request state with them
1118
1522
  */
1119
- declare function RequestUrlInput(props: Omit<InputVariablesProps, 'value' | 'onChange'>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1523
+ declare function RequestUrlInput(props: Omit<InputVariablesProps, 'value' | 'onChange'> & Pick<InputVariablesProps, 'showAddVariableMenuOption' | 'enableEditingVariables'>): _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1120
1524
 
1121
- declare function urlEncodeRequestUrl(url: string, varValues?: Record<string, DataVariableDefinition>): string;
1122
- declare function urlEncodeRequestParameter(parameter: RequestParameter, varValues?: Record<string, DataVariableDefinition>): RequestParameter;
1525
+ declare function urlEncodeRequestUrl(url: string, varValues?: Record<string, MeshDataVariableDefinition>): string;
1526
+ declare function urlEncodeRequestParameter(parameter: RequestParameter, varValues?: Record<string, MeshDataVariableDefinition>): RequestParameter;
1123
1527
 
1124
1528
  /**
1125
1529
  * Hook to make it simple to read and write a specific request header by name,
@@ -1145,6 +1549,12 @@ declare function useRequestParameter(paramName: string): {
1145
1549
  update: (value: string) => void;
1146
1550
  };
1147
1551
 
1552
+ /** Converts connected data map into VariablesProvider-format variables */
1553
+ declare function useConnectedDataAsVariables(connectedData: Record<string, unknown> | undefined): Record<string, MeshDataVariableDefinition>;
1554
+
1555
+ /** Converts dynamic inputs into VariablesProvider-format variables */
1556
+ declare function useDynamicInputsAsVariables(dynamicInputs: MinimalDynamicInputs): Record<string, MeshDataVariableDefinition>;
1557
+
1148
1558
  /**
1149
1559
  * Provides convenient access to the current Uniform Mesh SDK instance via React hook.
1150
1560
  * Intended to be used within <MeshApp />.
@@ -1160,4 +1570,4 @@ declare function useUniformMeshSdk(): _uniformdev_mesh_sdk.UniformMeshSDK;
1160
1570
  */
1161
1571
  declare function createLocationValidator<TSetValue>(setValue: SetLocationValueDispatch<TSetValue>, validate: (newValue: TSetValue, currentResult: SetValueOptions | undefined) => SetValueOptions): SetLocationValueDispatch<TSetValue>;
1162
1572
 
1163
- export { BaseRequestData, Brand, DamItem, DamSelectedItem, DamSelectedItemProps, DataRefreshButton, DataRefreshButtonProps, DataResourceDynamicInputProvider, DataResourceDynamicInputProviderProps, DataResourceVariableRendererProps, DataResourceVariablesList, DataResourceVariablesListExplicit, DataResourceVariablesListProps, DataSourceEditor, DataSourceEditorProps, DataTypeEditor, DataTypeEditorProps, DataVariableDefinitionWithName, DefaultSearchRow, DefaultSelectedItem, DispatchResult, EntrySearch, EntrySearchContentType, EntrySearchProps, EntrySearchQueryOptions, EntrySearchResult, EntrySearchRowProps, EntrySearchSelectedItemProps, GetProductOptions, GetProductsOptions, index as Icons, InputToken, InputVariables, InputVariablesProps, ItemListProps, LinkButton, MeshApp, MeshAppProps, MinimalDynamicInput, MinimalDynamicInputs, NoResultsProps, ObjectSearchContainer, ObjectSearchContainerProps, ObjectSearchContextProps, ObjectSearchFilter, ObjectSearchFilterContainer, ObjectSearchFilterContainerProps, ObjectSearchFilterProps, ObjectSearchListItem, ObjectSearchListItemLoadingSkeleton, ObjectSearchListItemProps, ObjectSearchProvider, ObjectSearchProviderProps, ObjectSearchResultItem, ObjectSearchResultItemButton, ObjectSearchResultItemButtonProps, ObjectSearchResultItemProps, ObjectSearchResultList, ObjectSearchResultListProps, ProductCategory, ProductDynamicSelectorValue, ProductPreviewList, ProductQuery, ProductQueryCategory, ProductQueryContext, ProductQueryContextValue, ProductQueryProps, ProductSearch, ProductSearchContext, ProductSearchContextValue, ProductSearchProps, ProductSearchResult, ProductSearchResults, ProductSearchRow, ProductSelectedItem, QueryFilter, QueryFilterProps, QueryFilterSearchProps, RequestAction, RequestBody, RequestContext, RequestData, RequestHeaders, RequestMethodSelect, RequestParameter, RequestParameters, RequestParametersProps, RequestProvider, RequestProviderProps, RequestTypeContainer, RequestTypeContainerProps, RequestUrl, RequestUrlInput, ResolvableLoadingValue, SearchQueryProps, SelectedItemProps, SelectionField, SelectionFieldValue, SetLocationValueDispatch, SetLocationValueFunction, TextVariableRenderer, VariableEditor, VariableEditorProps, VariablesAction, VariablesContext, VariablesEvents, VariablesList, VariablesProvider, VariablesProviderProps, badgeIcon, createLocationValidator, damSelectItemImage, damSelectedItemContainer, damSelectedItemCopy, damSelectedItemDetails, damSelectedItemIcon, damSelectedItemInfoBtn, damSelectedItemInner, damSelectedItemLinkBtn, damSelectedItemLinkContainer, damSelectedItemMediaContainer, damSelectedItemPopover, damSelectedItemPopoverLabel, damSelectedItemSmallText, damSelectedItemTitle, draggableContainer, draggableIcon, draggableIconOffset, draggableIconWrapper, entrySearchBtn, entrySearchConfig, entrySearchConfigHidden, entrySearchLoadMoreBtn, entrySearchResultList, entrySearchSelectIcon, entrySearchSelectImg, entrySearchSelectInput, entrySearchSelectOption, entrySearchWrapper, productSearchRowActiveIcon, productSearchRowCategory, productSearchRowContainer, productSearchRowContent, productSearchRowContentActive, productSearchRowDetails, productSearchRowTitle, productSelectedItemContainer, productSelectedItemContent, productSelectedItemDetails, productSelectedItemIcon, productSelectedItemImage, productSelectedItemLinkContainer, productedSelectedItemLinkBtn, productedSelectedItemSmallText, searchRowBtn, searchRowContainer, searchRowContainerActive, searchRowContainerWithPopover, searchRowPopover, searchRowText, searchRowTextSmall, selectItemLinkBtn, selectItemLinkContainer, selectItemPopover, selectItemPopoverLabel, selectItemSmallText, selectedItemContainer, selectedItemCopy, selectedItemDetails, selectedItemIcon, selectedItemInner, selectedItemTitle, urlEncodeRequestParameter, urlEncodeRequestUrl, useMeshLocation, useObjectSearchContext, useProductQueryContext, useProductSearchContext, useRequest, useRequestHeader, useRequestParameter, useUniformMeshSdk, useVariables, variablePrefix, variableSuffix, variablesToList };
1573
+ export { $createVariableNode, $isVariableNode, BaseRequestData, Brand, ControlledValuePlugin, DamItem, DamSelectedItem, DamSelectedItemProps, DataRefreshButton, DataRefreshButtonProps, DataResourceDynamicInputProvider, DataResourceDynamicInputProviderProps, DataResourceVariableRendererProps, DataResourceVariablesList, DataResourceVariablesListExplicit, DataResourceVariablesListProps, DataSourceEditor, DataSourceEditorProps, DataTypeEditor, DataTypeEditorProps, DataVariableDefinitionWithName, DefaultSearchRow, DefaultSelectedItem, DispatchResult, EDIT_VARIABLE_COMMAND, EditVariableCommandArguments, EntrySearch, EntrySearchContentType, EntrySearchProps, EntrySearchQueryOptions, EntrySearchResult, EntrySearchRowProps, EntrySearchSelectedItemProps, GetProductOptions, GetProductsOptions, INSERT_VARIABLE_COMMAND, index as Icons, InputVariables, InputVariablesProps, InsertVariableCommandArguments, ItemListProps, KnownUndefinedVariableInfo, LinkButton, MeshApp, MeshAppProps, MeshDataVariableDefinition, MinimalDynamicInput, MinimalDynamicInputs, NoResultsProps, OPEN_INSERT_VARIABLE_COMMAND, ObjectSearchContainer, ObjectSearchContainerProps, ObjectSearchContextProps, ObjectSearchFilter, ObjectSearchFilterContainer, ObjectSearchFilterContainerProps, ObjectSearchFilterProps, ObjectSearchListItem, ObjectSearchListItemLoadingSkeleton, ObjectSearchListItemProps, ObjectSearchProvider, ObjectSearchProviderProps, ObjectSearchResultItem, ObjectSearchResultItemButton, ObjectSearchResultItemButtonProps, ObjectSearchResultItemProps, ObjectSearchResultList, ObjectSearchResultListProps, ParamTypeDynamicDataProvider, ParamTypeDynamicDataProviderProps, ParameterConnectOptions, ParameterConnectionIndicator, ParameterConnectionIndicatorProps, ParameterOrSingleVariable, ParameterOrSingleVariableProps, ParameterVariables, ParameterVariablesProps, ProductCategory, ProductDynamicSelectorValue, ProductPreviewList, ProductQuery, ProductQueryCategory, ProductQueryContext, ProductQueryContextValue, ProductQueryProps, ProductSearch, ProductSearchContext, ProductSearchContextValue, ProductSearchProps, ProductSearchResult, ProductSearchResults, ProductSearchRow, ProductSelectedItem, QueryFilter, QueryFilterProps, QueryFilterSearchProps, RequestAction, RequestBody, RequestContext, RequestData, RequestHeaders, RequestMethodSelect, RequestParameter, RequestParameters, RequestParametersProps, RequestProvider, RequestProviderProps, RequestTypeContainer, RequestTypeContainerProps, RequestUrl, RequestUrlInput, ResolvableLoadingValue, SearchQueryProps, SelectedItemProps, SelectionField, SelectionFieldValue, SerializedVariableNode, SetLocationValueDispatch, SetLocationValueFunction, TextVariableRenderer, UseVariablesMenu, UseVariablesMenuInput, VariableEditor, VariableEditorProps, VariableNode, VariableNodeState, VariableSourceGroup, VariablesAction, VariablesContext, VariablesEvents, VariablesList, VariablesPlugin, VariablesPluginProps, VariablesProvider, VariablesProviderProps, VariablesUpdateEvent, badgeIcon, convertConnectedDataToVariable, createLocationValidator, damSelectItemImage, damSelectedItemContainer, damSelectedItemCopy, damSelectedItemDetails, damSelectedItemIcon, damSelectedItemInfoBtn, damSelectedItemInner, damSelectedItemLinkBtn, damSelectedItemLinkContainer, damSelectedItemMediaContainer, damSelectedItemPopover, damSelectedItemPopoverLabel, damSelectedItemSmallText, damSelectedItemTitle, draggableContainer, draggableIcon, draggableIconOffset, draggableIconWrapper, entrySearchBtn, entrySearchConfig, entrySearchConfigHidden, entrySearchLoadMoreBtn, entrySearchResultList, entrySearchSelectIcon, entrySearchSelectImg, entrySearchSelectInput, entrySearchSelectOption, entrySearchWrapper, hasReferencedVariables, prettifyBindExpression, productSearchRowActiveIcon, productSearchRowCategory, productSearchRowContainer, productSearchRowContent, productSearchRowContentActive, productSearchRowDetails, productSearchRowTitle, productSelectedItemContainer, productSelectedItemContent, productSelectedItemDetails, productSelectedItemIcon, productSelectedItemImage, productSelectedItemLinkContainer, productedSelectedItemLinkBtn, productedSelectedItemSmallText, searchRowBtn, searchRowContainer, searchRowContainerActive, searchRowContainerWithPopover, searchRowPopover, searchRowText, searchRowTextSmall, selectItemLinkBtn, selectItemLinkContainer, selectItemPopover, selectItemPopoverLabel, selectItemSmallText, selectedItemContainer, selectedItemCopy, selectedItemDetails, selectedItemIcon, selectedItemInner, selectedItemTitle, serializeVariablesEditorState, setVariablesEditorValue, urlEncodeRequestParameter, urlEncodeRequestUrl, useConnectedDataAsVariables, useDynamicInputsAsVariables, useMeshLocation, useObjectSearchContext, useOnVariableUpdated, useProductQueryContext, useProductSearchContext, useRequest, useRequestHeader, useRequestParameter, useUniformMeshSdk, useVariables, useVariablesMenu, variableDefaultTextValue, variablePrefix, variableSuffix, variablesToGroupedList, variablesToList };