@arcgis/coding-components 4.34.0-next.3 → 4.34.0-next.30

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.
Files changed (88) hide show
  1. package/dist/addons/arcade-coding-assistant/chat-helper.d.ts +25 -7
  2. package/dist/addons/arcade-coding-assistant/temporary-strings.d.ts +47 -0
  3. package/dist/addons/arcade-coding-assistant/useArcadeAssistant.d.ts +15 -7
  4. package/dist/addons.js +32 -23
  5. package/dist/cdn/{TUHPJEG5.js → 243HZ7UI.js} +2 -2
  6. package/dist/cdn/{J3HINC5N.js → 275GUA3M.js} +2 -2
  7. package/dist/cdn/{HAL3EXK4.js → 3J5TNLID.js} +2 -2
  8. package/dist/cdn/{Q4NJDLN3.js → 4DTIYTO6.js} +2 -2
  9. package/dist/cdn/{XNMOJ2SC.js → 4YQMMXJW.js} +2 -2
  10. package/dist/cdn/{D2Q4JNSY.js → 63FQPWTO.js} +2 -2
  11. package/dist/cdn/{CCQCZKCC.js → 6FY2AO4H.js} +2 -2
  12. package/dist/cdn/{Z3HBU3YI.js → 6TAOJNTW.js} +2 -2
  13. package/dist/cdn/73X3KSHQ.js +4 -0
  14. package/dist/cdn/{E4PTTXH5.js → 7ZZRCI6T.js} +2 -2
  15. package/dist/cdn/{FKQ7SSE6.js → ACFFT2B3.js} +2 -2
  16. package/dist/cdn/AQUP2HXZ.js +4 -0
  17. package/dist/cdn/AUUFEK2C.js +4 -0
  18. package/dist/cdn/{D4OPUHHF.js → C6IJOPEB.js} +2 -2
  19. package/dist/cdn/{ZBGL3SYO.js → CG3PBJU2.js} +1 -1
  20. package/dist/cdn/{RKCAAVN6.js → CSS7NGXW.js} +2 -2
  21. package/dist/cdn/{PULCYE7H.js → D3YK5GGC.js} +2 -2
  22. package/dist/cdn/{RFV2R57W.js → DQ3CWBLF.js} +2 -2
  23. package/dist/cdn/DU4OWFNM.js +6 -0
  24. package/dist/cdn/{YHNSFDD7.js → DU5TBBFS.js} +6 -5
  25. package/dist/cdn/{CPQVVDWR.js → E6HEGXX7.js} +2 -2
  26. package/dist/cdn/{HD2PUJ4M.js → EYUSBYIW.js} +2 -2
  27. package/dist/cdn/{NRWICP4W.js → G2IB3XMP.js} +1 -1
  28. package/dist/cdn/{PN27PZAJ.js → HJJWMOF6.js} +1 -1
  29. package/dist/cdn/IOZSQPXO.js +4 -0
  30. package/dist/cdn/{5PZD27HR.js → KBZEMXOZ.js} +2 -2
  31. package/dist/cdn/{JWPIQMYD.js → KT6QWFGE.js} +2 -2
  32. package/dist/cdn/{K7OR2NZQ.js → KYTS4Y5Z.js} +2 -2
  33. package/dist/cdn/{6QMJS7YE.js → L7QUBKS2.js} +2 -2
  34. package/dist/cdn/{X52LNMUC.js → LCWDBLK5.js} +2 -2
  35. package/dist/cdn/{NUXDGLLB.js → MWJDLSR7.js} +2 -2
  36. package/dist/cdn/{QD7WBTTH.js → MXYCSRPO.js} +2 -2
  37. package/dist/cdn/{PGN77MRP.js → N72EMFRZ.js} +2 -2
  38. package/dist/cdn/{GOQNPC4I.js → OBNBH4MW.js} +2 -2
  39. package/dist/cdn/{4UJSQGRR.js → OR4EO6XC.js} +3 -3
  40. package/dist/cdn/{IB5UEIFQ.js → PUWOUCEX.js} +3 -3
  41. package/dist/cdn/{IYAABMEA.js → S33IAILZ.js} +2 -2
  42. package/dist/cdn/{SPSZUVWZ.js → SDJ67XRE.js} +2 -2
  43. package/dist/cdn/{3OPZD6HG.js → VNQVJXEK.js} +2 -2
  44. package/dist/cdn/{VPRYSGQQ.js → WG2TPIR6.js} +2 -2
  45. package/dist/cdn/{F2YRSIVP.js → X5FPHYTE.js} +2 -2
  46. package/dist/cdn/assets/code-editor/sql-expr.worker.js +66327 -65375
  47. package/dist/cdn/index.js +2 -2
  48. package/dist/chunks/arcade-defaults.js +2 -2
  49. package/dist/chunks/arcade-executor.js +42 -41
  50. package/dist/chunks/arcade-mode.js +1 -1
  51. package/dist/chunks/arcade-service-accessors.js +1 -1
  52. package/dist/chunks/editor.js +1 -1
  53. package/dist/chunks/fields.js +1 -1
  54. package/dist/chunks/language-defaults-base.js +4 -3
  55. package/dist/chunks/markdown.js +1 -1
  56. package/dist/chunks/monaco-importer.js +64 -44
  57. package/dist/chunks/runtime.js +1 -1
  58. package/dist/chunks/setup-monaco.js +1 -1
  59. package/dist/chunks/sql-expr-contribution.js +1 -1
  60. package/dist/chunks/sql-expr-defaults.js +1 -1
  61. package/dist/chunks/sql-expr-mode.js +1 -1
  62. package/dist/chunks/useT9n.js +1 -1
  63. package/dist/components/arcgis-arcade-coding-assistant/customElement.d.ts +6 -7
  64. package/dist/components/arcgis-arcade-coding-assistant/customElement.js +395 -176
  65. package/dist/components/arcgis-arcade-coding-assistant/functional.d.ts +69 -13
  66. package/dist/components/arcgis-arcade-coding-assistant/index.d.ts +12 -6
  67. package/dist/components/arcgis-arcade-coding-assistant/index.js +12 -6
  68. package/dist/components/arcgis-arcade-coding-assistant/types.d.ts +45 -0
  69. package/dist/components/arcgis-arcade-editor/customElement.js +1 -1
  70. package/dist/components/arcgis-arcade-results/customElement.js +1 -1
  71. package/dist/components/arcgis-arcade-suggestions/customElement.js +1 -1
  72. package/dist/components/arcgis-code-editor/customElement.js +2 -2
  73. package/dist/components/arcgis-editor-variables/customElement.js +1 -1
  74. package/dist/components/arcgis-language-api-panel/customElement.js +1 -1
  75. package/dist/components/arcgis-sql-expression-editor/customElement.js +1 -1
  76. package/dist/components/arcgis-sql-expression-fields/customElement.js +1 -1
  77. package/dist/docs/api.json +5 -5
  78. package/dist/docs/docs.json +5 -5
  79. package/dist/docs/web-types.json +1 -1
  80. package/dist/index.js +1 -1
  81. package/dist/loader.js +2 -2
  82. package/dist/utils/arcade-executor.d.ts +4 -0
  83. package/dist/utils/utilities.d.ts +1 -1
  84. package/package.json +6 -6
  85. package/dist/cdn/K3KP6FDP.js +0 -4
  86. package/dist/cdn/MX7D2TXJ.js +0 -5
  87. package/dist/cdn/SLKYJBMF.js +0 -4
  88. package/dist/cdn/Z75HQNTN.js +0 -4
@@ -1,5 +1,7 @@
1
1
  import { JsxNode } from '@arcgis/lumina';
2
+ import { temporaryStrings as TempStrings } from '../../addons/arcade-coding-assistant/temporary-strings';
2
3
  import { Ref } from 'lit/directives/ref.js';
4
+ import { Context, FeedbackState } from './types';
3
5
  declare const strings: (value: {
4
6
  arcadeassistant: string;
5
7
  beta: string;
@@ -90,18 +92,23 @@ declare const strings: (value: {
90
92
  export declare function AboutDisplay({ messages }: {
91
93
  messages: Partial<ReturnType<typeof strings>>;
92
94
  }): JsxNode;
93
- export declare function DisclaimerDisplay({ messages }: {
94
- messages: Partial<ReturnType<typeof strings>>;
95
+ export declare function DisclaimerDisplay({ popoverContent }: {
96
+ popoverContent: JsxNode;
95
97
  }): JsxNode;
96
- export declare function ErrorDisplay({ errorMessage }: {
97
- errorMessage?: string;
98
+ export declare function ErrorDisplay({ errorMessage, slot }: {
99
+ errorMessage: JsxNode | string;
100
+ slot?: string;
98
101
  }): JsxNode;
99
102
  export declare function ConfirmationDisplay({ active, setActive, messages, }: {
100
103
  active: boolean;
101
104
  setActive: (e: boolean) => void;
102
105
  messages: Partial<ReturnType<typeof strings>>;
103
106
  }): JsxNode;
104
- export declare function SubmissionDisplay({ isDisabled, isReadOnly, setQuestion, setIsViewingResult, textAreaRef, question, errorMessage, setErrorMessage, submitQuestion, messages, }: {
107
+ export declare function ContextDisplay({ context, messages, }: {
108
+ context?: Context;
109
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
110
+ }): JsxNode;
111
+ export declare function SubmissionDisplay({ isDisabled, isReadOnly, setQuestion, setIsViewingResult, textAreaRef, question, errorMessage, setErrorMessage, submitQuestion, messages, mode, context, }: {
105
112
  isDisabled: boolean;
106
113
  isReadOnly: boolean;
107
114
  setQuestion: (e: string) => void;
@@ -111,16 +118,65 @@ export declare function SubmissionDisplay({ isDisabled, isReadOnly, setQuestion,
111
118
  errorMessage?: string;
112
119
  setErrorMessage: (e: string) => void;
113
120
  submitQuestion: () => Promise<void>;
114
- messages: Partial<ReturnType<typeof strings>>;
121
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
122
+ mode: "prompt" | "refine";
123
+ context?: Context;
115
124
  }): JsxNode;
116
- export declare function FeedbackSheetDisplay({ open, setOpen, messages, feedbackValue, setFeedbackValue, feedbackText, setFeedbackText, onSubmit, }: {
117
- open: boolean;
125
+ export declare function FeedbackSheetDisplay({ setOpen, messages, feedback, setFeedback, onSubmit, }: {
118
126
  setOpen: (open: boolean) => void;
119
- messages: Partial<ReturnType<typeof strings>>;
120
- feedbackValue: "bad" | "good";
121
- setFeedbackValue: (val: "bad" | "good") => void;
122
- feedbackText: string;
123
- setFeedbackText: (val: string) => void;
127
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
128
+ feedback: FeedbackState;
129
+ setFeedback: (feedback: FeedbackState) => void;
124
130
  onSubmit: () => void;
125
131
  }): JsxNode;
132
+ export declare function InfoDisplay({ assistantsEnabled, messages, slot, assistantHelpUrl, helpTopicUrl, }: {
133
+ assistantsEnabled: boolean;
134
+ assistantHelpUrl: string;
135
+ helpTopicUrl: string;
136
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
137
+ slot?: HTMLCalciteBlockElement["slot"];
138
+ }): JsxNode;
139
+ export declare function SplashDisplay({ messages, onProceed, onExit, helpTopicUrl, }: {
140
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
141
+ onProceed: () => void;
142
+ onExit: (e: Event) => void;
143
+ helpTopicUrl: string;
144
+ }): JsxNode;
145
+ export declare function PromptSuggestionsDisplay({ messages, suggestions, onSuggestionClick, }: {
146
+ suggestions: string[];
147
+ onSuggestionClick: (value: string) => void;
148
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
149
+ }): JsxNode;
150
+ export interface ResponseDisplayCardChip {
151
+ label: string;
152
+ icon?: string;
153
+ tooltip?: string;
154
+ scale?: "l" | "m" | "s";
155
+ appearance?: "outline-fill" | "outline" | "solid";
156
+ /** need a unique id for each convo for tooltip reference-ids */
157
+ conversationId: string;
158
+ }
159
+ export interface ResponseDisplayCard {
160
+ priorPrompt: string;
161
+ code: string;
162
+ message?: string;
163
+ chips?: ResponseDisplayCardChip[];
164
+ onAddToEditor: (insertMode: "add" | "replace") => void;
165
+ onThumbsUp: () => void;
166
+ onThumbsDown: () => void;
167
+ conversationId: string;
168
+ }
169
+ export declare function ResponseDisplay({ hidden, expanded, messages, cards, heading, collapsible, showEffectsIcon, onCopyCode, standalone, }: {
170
+ hidden?: boolean;
171
+ expanded?: boolean;
172
+ heading?: string;
173
+ messages: Partial<ReturnType<typeof strings>> & typeof TempStrings;
174
+ cards: ResponseDisplayCard[];
175
+ showEffectsIcon?: boolean;
176
+ collapsible?: boolean;
177
+ editorInsertMode?: "add" | "replace";
178
+ setEditorInsertMode?: (mode: "add" | "replace") => void;
179
+ onCopyCode: (code: string) => Promise<void>;
180
+ standalone?: boolean;
181
+ }): JsxNode;
126
182
  export {};
@@ -1,20 +1,26 @@
1
1
  import "@esri/calcite-components/components/calcite-chip";
2
2
  import "@esri/calcite-components/components/calcite-action";
3
- import "@esri/calcite-components/components/calcite-tooltip";
3
+ import "@esri/calcite-components/components/calcite-popover";
4
4
  import "@esri/calcite-components/components/calcite-input-message";
5
5
  import "@esri/calcite-components/components/calcite-alert";
6
- import "@esri/calcite-components/components/calcite-text-area";
7
6
  import "@esri/calcite-components/components/calcite-button";
7
+ import "@esri/calcite-components/components/calcite-text-area";
8
8
  import "@esri/calcite-components/components/calcite-sheet";
9
9
  import "@esri/calcite-components/components/calcite-panel";
10
10
  import "@esri/calcite-components/components/calcite-label";
11
11
  import "@esri/calcite-components/components/calcite-segmented-control";
12
12
  import "@esri/calcite-components/components/calcite-segmented-control-item";
13
+ import "@esri/calcite-components/components/calcite-checkbox";
14
+ import "@esri/calcite-components/components/calcite-block";
15
+ import "@esri/calcite-components/components/calcite-link";
16
+ import "@esri/calcite-components/components/calcite-dialog";
17
+ import "@esri/calcite-components/components/calcite-chip-group";
18
+ import "@esri/calcite-components/components/calcite-card-group";
19
+ import "@esri/calcite-components/components/calcite-card";
20
+ import "@esri/calcite-components/components/calcite-tooltip";
13
21
  import "@esri/calcite-components/components/calcite-flow";
14
22
  import "@esri/calcite-components/components/calcite-flow-item";
15
- import "@esri/calcite-components/components/calcite-block";
16
- import "@esri/calcite-components/components/calcite-list";
17
- import "@esri/calcite-components/components/calcite-list-item";
18
- import "@esri/calcite-components/components/calcite-icon";
23
+ import "@esri/calcite-components/components/calcite-scrim";
19
24
  import "@esri/calcite-components/components/calcite-shell";
25
+ import "@esri/calcite-components/components/calcite-block-group";
20
26
  export * from "./customElement.js";
@@ -1,20 +1,26 @@
1
1
  import "@esri/calcite-components/components/calcite-chip";
2
2
  import "@esri/calcite-components/components/calcite-action";
3
- import "@esri/calcite-components/components/calcite-tooltip";
3
+ import "@esri/calcite-components/components/calcite-popover";
4
4
  import "@esri/calcite-components/components/calcite-input-message";
5
5
  import "@esri/calcite-components/components/calcite-alert";
6
- import "@esri/calcite-components/components/calcite-text-area";
7
6
  import "@esri/calcite-components/components/calcite-button";
7
+ import "@esri/calcite-components/components/calcite-text-area";
8
8
  import "@esri/calcite-components/components/calcite-sheet";
9
9
  import "@esri/calcite-components/components/calcite-panel";
10
10
  import "@esri/calcite-components/components/calcite-label";
11
11
  import "@esri/calcite-components/components/calcite-segmented-control";
12
12
  import "@esri/calcite-components/components/calcite-segmented-control-item";
13
+ import "@esri/calcite-components/components/calcite-checkbox";
14
+ import "@esri/calcite-components/components/calcite-block";
15
+ import "@esri/calcite-components/components/calcite-link";
16
+ import "@esri/calcite-components/components/calcite-dialog";
17
+ import "@esri/calcite-components/components/calcite-chip-group";
18
+ import "@esri/calcite-components/components/calcite-card-group";
19
+ import "@esri/calcite-components/components/calcite-card";
20
+ import "@esri/calcite-components/components/calcite-tooltip";
13
21
  import "@esri/calcite-components/components/calcite-flow";
14
22
  import "@esri/calcite-components/components/calcite-flow-item";
15
- import "@esri/calcite-components/components/calcite-block";
16
- import "@esri/calcite-components/components/calcite-list";
17
- import "@esri/calcite-components/components/calcite-list-item";
18
- import "@esri/calcite-components/components/calcite-icon";
23
+ import "@esri/calcite-components/components/calcite-scrim";
19
24
  import "@esri/calcite-components/components/calcite-shell";
25
+ import "@esri/calcite-components/components/calcite-block-group";
20
26
  export * from "./customElement.js";
@@ -0,0 +1,45 @@
1
+ /// <reference types="@arcgis/core/interfaces.d.ts" />
2
+ export type Feedback = {
3
+ user_evaluation?: "bad" | "good";
4
+ your_comments?: string;
5
+ question: string;
6
+ answer: string;
7
+ useragent: string;
8
+ _source: string;
9
+ version: string;
10
+ context: string;
11
+ extras: string;
12
+ conversation_id: string;
13
+ privacy_statement: "" | "I_agree";
14
+ };
15
+ export type FeedbackState = {
16
+ /** Whether the feedback form is active */
17
+ active: boolean;
18
+ /** the selected feedback value */
19
+ value?: "bad" | "good";
20
+ /** The feedback description provided by the user */
21
+ text: string;
22
+ /** The history item associated with the feedback */
23
+ item?: HistoryItem;
24
+ /** Whether the user has accepted the privacy terms */
25
+ termsAccepted: boolean;
26
+ /** Whether the feedback is submitting */
27
+ submitting: boolean;
28
+ };
29
+ export type HistoryItem = {
30
+ script?: string;
31
+ error?: string;
32
+ question: string;
33
+ profile?: string;
34
+ conversationId?: string;
35
+ formattedScript?: string;
36
+ layerName?: string;
37
+ message?: string;
38
+ };
39
+ export type Context = {
40
+ /** profileName and metadata are passed to backend */
41
+ profileName: string;
42
+ metadata: Partial<__esri.Field>[];
43
+ /** used for the context display buttons / chips */
44
+ layerName?: nullish | string;
45
+ };
@@ -16,7 +16,7 @@ import { css as w } from "@lit/reactive-element/css-tag.js";
16
16
  import { s as y } from "../../chunks/editor.js";
17
17
  /*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
18
18
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
19
- v4.34.0-next.3 */
19
+ v4.34.0-next.30 */
20
20
  const D = w`@layer{arcgis-arcade-editor{display:flex;flex-direction:column;position:relative;overflow:hidden;border:var(--arcgis-coding-components-border)!important;box-sizing:border-box;background-color:var(--arcgis-coding-components-background-color);height:100%;.sticky{position:sticky;top:0;z-index:10}.notice-container{margin:var(--calcite-spacing-xxs);padding:var(--calcite-spacing-sm);background-color:var(--calcite-color-foreground-1);text-align:center}.main-action-bar{border-bottom:var(--arcgis-coding-components-border)!important;flex:0 0 auto;calcite-action-group{padding-inline-end:var(--calcite-spacing-sm);calcite-action{padding-inline-end:var(--calcite-spacing-sm)}calcite-action:not(:first-child){padding-inline-start:var(--calcite-spacing-sm)}}calcite-action-group:last-child{border-inline-end-width:0px}calcite-action-group:not(:first-child){padding-inline-start:var(--calcite-spacing-sm)}}arcgis-arcade-results{border-top:var(--arcgis-coding-components-border)!important;box-sizing:border-box;max-height:50%;min-height:50%;margin-bottom:-1px}calcite-flow{[slot=footer]{word-break:break-word}}.hidden{display:none}}}`;
21
21
  class C extends m {
22
22
  constructor() {
@@ -8,7 +8,7 @@ import { css as L } from "@lit/reactive-element/css-tag.js";
8
8
  import { s as O } from "../../chunks/fields.js";
9
9
  /*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
10
10
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
11
- v4.34.0-next.3 */
11
+ v4.34.0-next.30 */
12
12
  const D = L`:host{display:flex;flex-direction:column;width:100%;background-color:var(--calcite-color-foreground-1);color:var(--calcite-color-text-2);.flex-adjustable{flex:1 1 auto;overflow:hidden}.flex-row{display:flex;flex-direction:row;overflow:hidden}.flex-column{display:flex;flex-direction:column;overflow:hidden}.y-scrollable-container{overflow-y:auto;block-size:100%;background-color:var(--calcite-color-foreground-1)}header{border-bottom:1px solid var(--calcite-color-border-3);flex:0 0 auto}.ltr-container{direction:ltr}calcite-action-bar{calcite-action-group{padding-inline-end:var(--calcite-spacing-sm);calcite-action{padding-inline-end:var(--calcite-spacing-sm)}calcite-action:not(:first-child){padding-inline-start:var(--calcite-spacing-sm)}}calcite-action-group:last-child{border-inline-end-width:0px}calcite-action-group:not(:first-child){padding-inline-start:var(--calcite-spacing-sm)}}.notice-container{margin:var(--calcite-spacing-xxs);padding:var(--calcite-spacing-sm);background-color:var(--calcite-color-foreground-1)}.color-info{color:var(--calcite-color-status-info)}.color-error{color:var(--calcite-color-status-danger)}.color-success{color:var(--calcite-color-status-success)}[class*=result-value-]{font-size:var(--calcite-font-size--2);line-height:1.25rem;background-color:var(--calcite-color-foreground-1);margin:var(--calcite-spacing-md)}.console-logs-container{background-color:var(--calcite-color-foreground-1);padding:0 var(--calcite-spacing-md);font-family:var(--calcite-code-family);font-size:var(--calcite-font-size--2);font-weight:var(--calcite-font-weight-normal)}.result-value-table{table{display:block;max-width:fit-content;overflow-x:auto;border-spacing:0;border-collapse:collapse;text-align:start;white-space:nowrap;thead{background-color:var(--calcite-color-foreground-2)}tr{border-top:1px solid var(--calcite-color-border-3);border-bottom:1px solid var(--calcite-color-border-3)}th,td{border-inline-start:1px solid var(--calcite-color-border-3);border-inline-end:1px solid var(--calcite-color-border-3);text-align:start;padding:var(--calcite-spacing-xxs);.string-value{white-space:pre}}th{font-weight:var(--calcite-font-weight-medium)}}}.tree-item-label,.number-value,.string-value,.boolean-value{font-family:var(--calcite-code-family)}.tree-item-label,.value-type{color:var(--calcite-color-text-2);font-weight:var(--calcite-font-weight-normal)}.dictionary-property{color:var(--arcgis-editor-identifier)}.number-value{color:var(--arcgis-editor-number)}.string-value{color:var(--arcgis-editor-string);white-space:pre-wrap}.constant-value{color:var(--arcgis-editor-constant)}.date-value{color:var(--arcgis-editor-date)}}`, l = {
13
13
  lines: !0,
14
14
  selectionMode: "none",
@@ -9,7 +9,7 @@ import { u as b } from "../../chunks/useT9n.js";
9
9
  import { css as _ } from "@lit/reactive-element/css-tag.js";
10
10
  /*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
11
11
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
12
- v4.34.0-next.3 */
12
+ v4.34.0-next.30 */
13
13
  function v(o) {
14
14
  return !Array.isArray(o) || !o.length ? !1 : Array.isArray(o[0].suggestions);
15
15
  }