flowquery 1.0.46 → 1.0.47

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 (413) hide show
  1. package/dist/index.d.ts +0 -7
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -4
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -1
  6. package/.editorconfig +0 -21
  7. package/.gitattributes +0 -3
  8. package/.github/workflows/npm-publish.yml +0 -32
  9. package/.github/workflows/python-publish.yml +0 -143
  10. package/.github/workflows/release.yml +0 -107
  11. package/.husky/pre-commit +0 -28
  12. package/.prettierrc +0 -22
  13. package/CODE_OF_CONDUCT.md +0 -10
  14. package/FlowQueryLogoIcon.png +0 -0
  15. package/SECURITY.md +0 -14
  16. package/SUPPORT.md +0 -13
  17. package/docs/flowquery.min.js +0 -1
  18. package/docs/index.html +0 -105
  19. package/flowquery-py/CONTRIBUTING.md +0 -127
  20. package/flowquery-py/README.md +0 -67
  21. package/flowquery-py/misc/data/test.json +0 -10
  22. package/flowquery-py/misc/data/users.json +0 -242
  23. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  24. package/flowquery-py/pyproject.toml +0 -121
  25. package/flowquery-py/setup_env.ps1 +0 -92
  26. package/flowquery-py/setup_env.sh +0 -87
  27. package/flowquery-py/src/__init__.py +0 -38
  28. package/flowquery-py/src/__main__.py +0 -10
  29. package/flowquery-py/src/compute/__init__.py +0 -6
  30. package/flowquery-py/src/compute/flowquery.py +0 -68
  31. package/flowquery-py/src/compute/runner.py +0 -64
  32. package/flowquery-py/src/extensibility.py +0 -52
  33. package/flowquery-py/src/graph/__init__.py +0 -31
  34. package/flowquery-py/src/graph/data.py +0 -136
  35. package/flowquery-py/src/graph/database.py +0 -141
  36. package/flowquery-py/src/graph/hops.py +0 -43
  37. package/flowquery-py/src/graph/node.py +0 -143
  38. package/flowquery-py/src/graph/node_data.py +0 -26
  39. package/flowquery-py/src/graph/node_reference.py +0 -50
  40. package/flowquery-py/src/graph/pattern.py +0 -115
  41. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  42. package/flowquery-py/src/graph/patterns.py +0 -42
  43. package/flowquery-py/src/graph/physical_node.py +0 -41
  44. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  45. package/flowquery-py/src/graph/relationship.py +0 -193
  46. package/flowquery-py/src/graph/relationship_data.py +0 -36
  47. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  48. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  49. package/flowquery-py/src/io/__init__.py +0 -5
  50. package/flowquery-py/src/io/command_line.py +0 -108
  51. package/flowquery-py/src/parsing/__init__.py +0 -17
  52. package/flowquery-py/src/parsing/alias.py +0 -20
  53. package/flowquery-py/src/parsing/alias_option.py +0 -11
  54. package/flowquery-py/src/parsing/ast_node.py +0 -147
  55. package/flowquery-py/src/parsing/base_parser.py +0 -84
  56. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  57. package/flowquery-py/src/parsing/components/csv.py +0 -8
  58. package/flowquery-py/src/parsing/components/from_.py +0 -12
  59. package/flowquery-py/src/parsing/components/headers.py +0 -12
  60. package/flowquery-py/src/parsing/components/json.py +0 -8
  61. package/flowquery-py/src/parsing/components/null.py +0 -10
  62. package/flowquery-py/src/parsing/components/post.py +0 -8
  63. package/flowquery-py/src/parsing/components/text.py +0 -8
  64. package/flowquery-py/src/parsing/context.py +0 -50
  65. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  66. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  67. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  68. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  69. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  70. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  71. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  72. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  73. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  74. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  75. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  76. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  77. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  78. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  79. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  80. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  81. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  82. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  83. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  84. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  85. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  86. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  87. package/flowquery-py/src/parsing/functions/count.py +0 -79
  88. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  89. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  90. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  91. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  92. package/flowquery-py/src/parsing/functions/function.py +0 -68
  93. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  94. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  95. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  96. package/flowquery-py/src/parsing/functions/head.py +0 -39
  97. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  98. package/flowquery-py/src/parsing/functions/join.py +0 -49
  99. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  100. package/flowquery-py/src/parsing/functions/last.py +0 -39
  101. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  102. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  103. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  104. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  105. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  106. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  107. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  108. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  109. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  110. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  111. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  112. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  113. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  114. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  115. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  116. package/flowquery-py/src/parsing/functions/size.py +0 -34
  117. package/flowquery-py/src/parsing/functions/split.py +0 -54
  118. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  119. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  120. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  121. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  122. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  123. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  124. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  125. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  126. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  127. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  128. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  129. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  130. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  131. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  132. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  133. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  134. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  135. package/flowquery-py/src/parsing/logic/case.py +0 -28
  136. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  137. package/flowquery-py/src/parsing/logic/end.py +0 -8
  138. package/flowquery-py/src/parsing/logic/then.py +0 -12
  139. package/flowquery-py/src/parsing/logic/when.py +0 -12
  140. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  141. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  142. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  143. package/flowquery-py/src/parsing/operations/call.py +0 -73
  144. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  145. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  146. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  147. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  148. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  149. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  150. package/flowquery-py/src/parsing/operations/load.py +0 -148
  151. package/flowquery-py/src/parsing/operations/match.py +0 -52
  152. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  153. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  154. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  155. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  156. package/flowquery-py/src/parsing/operations/union.py +0 -115
  157. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  158. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  159. package/flowquery-py/src/parsing/operations/where.py +0 -43
  160. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  161. package/flowquery-py/src/parsing/parser.py +0 -1384
  162. package/flowquery-py/src/parsing/parser_state.py +0 -26
  163. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  164. package/flowquery-py/src/tokenization/__init__.py +0 -23
  165. package/flowquery-py/src/tokenization/keyword.py +0 -54
  166. package/flowquery-py/src/tokenization/operator.py +0 -29
  167. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  168. package/flowquery-py/src/tokenization/symbol.py +0 -19
  169. package/flowquery-py/src/tokenization/token.py +0 -693
  170. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  171. package/flowquery-py/src/tokenization/token_type.py +0 -21
  172. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  173. package/flowquery-py/src/tokenization/trie.py +0 -125
  174. package/flowquery-py/src/utils/__init__.py +0 -6
  175. package/flowquery-py/src/utils/object_utils.py +0 -20
  176. package/flowquery-py/src/utils/string_utils.py +0 -113
  177. package/flowquery-py/tests/__init__.py +0 -1
  178. package/flowquery-py/tests/compute/__init__.py +0 -1
  179. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  180. package/flowquery-py/tests/graph/__init__.py +0 -1
  181. package/flowquery-py/tests/graph/test_create.py +0 -56
  182. package/flowquery-py/tests/graph/test_data.py +0 -73
  183. package/flowquery-py/tests/graph/test_match.py +0 -40
  184. package/flowquery-py/tests/parsing/__init__.py +0 -1
  185. package/flowquery-py/tests/parsing/test_context.py +0 -34
  186. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  187. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  188. package/flowquery-py/tests/test_extensibility.py +0 -611
  189. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  190. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  191. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  192. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  193. package/flowquery-vscode/.vscode-test.mjs +0 -5
  194. package/flowquery-vscode/.vscodeignore +0 -13
  195. package/flowquery-vscode/LICENSE +0 -21
  196. package/flowquery-vscode/README.md +0 -11
  197. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  198. package/flowquery-vscode/eslint.config.mjs +0 -25
  199. package/flowquery-vscode/extension.js +0 -508
  200. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  201. package/flowquery-vscode/flowquery-worker.js +0 -66
  202. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  203. package/flowquery-vscode/jsconfig.json +0 -13
  204. package/flowquery-vscode/libs/page.css +0 -53
  205. package/flowquery-vscode/libs/table.css +0 -13
  206. package/flowquery-vscode/libs/tabs.css +0 -66
  207. package/flowquery-vscode/package-lock.json +0 -2917
  208. package/flowquery-vscode/package.json +0 -51
  209. package/flowquery-vscode/test/extension.test.js +0 -196
  210. package/flowquery-vscode/test/worker.test.js +0 -25
  211. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  212. package/jest.config.js +0 -14
  213. package/misc/apps/RAG/README.md +0 -29
  214. package/misc/apps/RAG/data/chats.json +0 -302
  215. package/misc/apps/RAG/data/emails.json +0 -182
  216. package/misc/apps/RAG/data/events.json +0 -226
  217. package/misc/apps/RAG/data/files.json +0 -172
  218. package/misc/apps/RAG/data/users.json +0 -158
  219. package/misc/apps/RAG/jest.config.js +0 -21
  220. package/misc/apps/RAG/package.json +0 -48
  221. package/misc/apps/RAG/public/index.html +0 -18
  222. package/misc/apps/RAG/src/App.css +0 -42
  223. package/misc/apps/RAG/src/App.tsx +0 -50
  224. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  225. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  226. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  227. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  228. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  229. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  230. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  231. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  232. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  233. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  234. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  235. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  236. package/misc/apps/RAG/src/components/index.ts +0 -28
  237. package/misc/apps/RAG/src/graph/index.ts +0 -19
  238. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  239. package/misc/apps/RAG/src/index.tsx +0 -29
  240. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  241. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  242. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  243. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  244. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  245. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  246. package/misc/apps/RAG/src/utils/index.ts +0 -12
  247. package/misc/apps/RAG/tsconfig.json +0 -22
  248. package/misc/apps/RAG/webpack.config.js +0 -43
  249. package/misc/apps/README.md +0 -1
  250. package/misc/queries/analyze_catfacts.cql +0 -75
  251. package/misc/queries/azure_openai_completions.cql +0 -13
  252. package/misc/queries/azure_openai_models.cql +0 -9
  253. package/misc/queries/mock_pipeline.cql +0 -84
  254. package/misc/queries/openai_completions.cql +0 -15
  255. package/misc/queries/openai_models.cql +0 -13
  256. package/misc/queries/test.cql +0 -6
  257. package/misc/queries/tool_inference.cql +0 -24
  258. package/misc/queries/wisdom.cql +0 -6
  259. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  260. package/src/compute/flowquery.ts +0 -46
  261. package/src/compute/runner.ts +0 -66
  262. package/src/extensibility.ts +0 -45
  263. package/src/graph/data.ts +0 -130
  264. package/src/graph/database.ts +0 -143
  265. package/src/graph/hops.ts +0 -22
  266. package/src/graph/node.ts +0 -122
  267. package/src/graph/node_data.ts +0 -18
  268. package/src/graph/node_reference.ts +0 -38
  269. package/src/graph/pattern.ts +0 -110
  270. package/src/graph/pattern_expression.ts +0 -48
  271. package/src/graph/patterns.ts +0 -36
  272. package/src/graph/physical_node.ts +0 -23
  273. package/src/graph/physical_relationship.ts +0 -23
  274. package/src/graph/relationship.ts +0 -167
  275. package/src/graph/relationship_data.ts +0 -31
  276. package/src/graph/relationship_match_collector.ts +0 -64
  277. package/src/graph/relationship_reference.ts +0 -25
  278. package/src/index.browser.ts +0 -46
  279. package/src/index.node.ts +0 -55
  280. package/src/index.ts +0 -12
  281. package/src/io/command_line.ts +0 -74
  282. package/src/parsing/alias.ts +0 -23
  283. package/src/parsing/alias_option.ts +0 -5
  284. package/src/parsing/ast_node.ts +0 -153
  285. package/src/parsing/base_parser.ts +0 -98
  286. package/src/parsing/components/csv.ts +0 -9
  287. package/src/parsing/components/from.ts +0 -12
  288. package/src/parsing/components/headers.ts +0 -12
  289. package/src/parsing/components/json.ts +0 -9
  290. package/src/parsing/components/null.ts +0 -9
  291. package/src/parsing/components/post.ts +0 -9
  292. package/src/parsing/components/text.ts +0 -9
  293. package/src/parsing/context.ts +0 -54
  294. package/src/parsing/data_structures/associative_array.ts +0 -43
  295. package/src/parsing/data_structures/json_array.ts +0 -31
  296. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  297. package/src/parsing/data_structures/lookup.ts +0 -44
  298. package/src/parsing/data_structures/range_lookup.ts +0 -36
  299. package/src/parsing/expressions/boolean.ts +0 -21
  300. package/src/parsing/expressions/expression.ts +0 -150
  301. package/src/parsing/expressions/expression_map.ts +0 -22
  302. package/src/parsing/expressions/f_string.ts +0 -26
  303. package/src/parsing/expressions/identifier.ts +0 -22
  304. package/src/parsing/expressions/number.ts +0 -40
  305. package/src/parsing/expressions/operator.ts +0 -354
  306. package/src/parsing/expressions/reference.ts +0 -45
  307. package/src/parsing/expressions/string.ts +0 -34
  308. package/src/parsing/functions/aggregate_function.ts +0 -58
  309. package/src/parsing/functions/async_function.ts +0 -64
  310. package/src/parsing/functions/avg.ts +0 -47
  311. package/src/parsing/functions/coalesce.ts +0 -49
  312. package/src/parsing/functions/collect.ts +0 -54
  313. package/src/parsing/functions/count.ts +0 -54
  314. package/src/parsing/functions/date.ts +0 -63
  315. package/src/parsing/functions/datetime.ts +0 -63
  316. package/src/parsing/functions/duration.ts +0 -143
  317. package/src/parsing/functions/element_id.ts +0 -51
  318. package/src/parsing/functions/function.ts +0 -60
  319. package/src/parsing/functions/function_factory.ts +0 -195
  320. package/src/parsing/functions/function_metadata.ts +0 -217
  321. package/src/parsing/functions/functions.ts +0 -70
  322. package/src/parsing/functions/head.ts +0 -42
  323. package/src/parsing/functions/id.ts +0 -51
  324. package/src/parsing/functions/join.ts +0 -40
  325. package/src/parsing/functions/keys.ts +0 -29
  326. package/src/parsing/functions/last.ts +0 -42
  327. package/src/parsing/functions/localdatetime.ts +0 -63
  328. package/src/parsing/functions/localtime.ts +0 -58
  329. package/src/parsing/functions/max.ts +0 -37
  330. package/src/parsing/functions/min.ts +0 -37
  331. package/src/parsing/functions/nodes.ts +0 -54
  332. package/src/parsing/functions/predicate_function.ts +0 -48
  333. package/src/parsing/functions/predicate_sum.ts +0 -47
  334. package/src/parsing/functions/properties.ts +0 -56
  335. package/src/parsing/functions/rand.ts +0 -21
  336. package/src/parsing/functions/range.ts +0 -37
  337. package/src/parsing/functions/reducer_element.ts +0 -10
  338. package/src/parsing/functions/relationships.ts +0 -52
  339. package/src/parsing/functions/replace.ts +0 -38
  340. package/src/parsing/functions/round.ts +0 -28
  341. package/src/parsing/functions/schema.ts +0 -39
  342. package/src/parsing/functions/size.ts +0 -28
  343. package/src/parsing/functions/split.ts +0 -45
  344. package/src/parsing/functions/string_distance.ts +0 -83
  345. package/src/parsing/functions/stringify.ts +0 -37
  346. package/src/parsing/functions/substring.ts +0 -68
  347. package/src/parsing/functions/sum.ts +0 -41
  348. package/src/parsing/functions/tail.ts +0 -39
  349. package/src/parsing/functions/temporal_utils.ts +0 -180
  350. package/src/parsing/functions/time.ts +0 -58
  351. package/src/parsing/functions/timestamp.ts +0 -37
  352. package/src/parsing/functions/to_float.ts +0 -50
  353. package/src/parsing/functions/to_integer.ts +0 -50
  354. package/src/parsing/functions/to_json.ts +0 -28
  355. package/src/parsing/functions/to_lower.ts +0 -28
  356. package/src/parsing/functions/to_string.ts +0 -32
  357. package/src/parsing/functions/trim.ts +0 -28
  358. package/src/parsing/functions/type.ts +0 -39
  359. package/src/parsing/functions/value_holder.ts +0 -13
  360. package/src/parsing/logic/case.ts +0 -26
  361. package/src/parsing/logic/else.ts +0 -12
  362. package/src/parsing/logic/end.ts +0 -9
  363. package/src/parsing/logic/then.ts +0 -12
  364. package/src/parsing/logic/when.ts +0 -12
  365. package/src/parsing/operations/aggregated_return.ts +0 -22
  366. package/src/parsing/operations/aggregated_with.ts +0 -18
  367. package/src/parsing/operations/call.ts +0 -69
  368. package/src/parsing/operations/create_node.ts +0 -39
  369. package/src/parsing/operations/create_relationship.ts +0 -38
  370. package/src/parsing/operations/delete_node.ts +0 -33
  371. package/src/parsing/operations/delete_relationship.ts +0 -32
  372. package/src/parsing/operations/group_by.ts +0 -137
  373. package/src/parsing/operations/limit.ts +0 -31
  374. package/src/parsing/operations/load.ts +0 -146
  375. package/src/parsing/operations/match.ts +0 -54
  376. package/src/parsing/operations/operation.ts +0 -69
  377. package/src/parsing/operations/order_by.ts +0 -126
  378. package/src/parsing/operations/projection.ts +0 -18
  379. package/src/parsing/operations/return.ts +0 -76
  380. package/src/parsing/operations/union.ts +0 -114
  381. package/src/parsing/operations/union_all.ts +0 -16
  382. package/src/parsing/operations/unwind.ts +0 -36
  383. package/src/parsing/operations/where.ts +0 -42
  384. package/src/parsing/operations/with.ts +0 -20
  385. package/src/parsing/parser.ts +0 -1641
  386. package/src/parsing/parser_state.ts +0 -25
  387. package/src/parsing/token_to_node.ts +0 -114
  388. package/src/tokenization/keyword.ts +0 -50
  389. package/src/tokenization/operator.ts +0 -25
  390. package/src/tokenization/string_walker.ts +0 -197
  391. package/src/tokenization/symbol.ts +0 -15
  392. package/src/tokenization/token.ts +0 -764
  393. package/src/tokenization/token_mapper.ts +0 -53
  394. package/src/tokenization/token_type.ts +0 -16
  395. package/src/tokenization/tokenizer.ts +0 -250
  396. package/src/tokenization/trie.ts +0 -117
  397. package/src/utils/object_utils.ts +0 -17
  398. package/src/utils/string_utils.ts +0 -114
  399. package/tests/compute/runner.test.ts +0 -4559
  400. package/tests/extensibility.test.ts +0 -643
  401. package/tests/graph/create.test.ts +0 -36
  402. package/tests/graph/data.test.ts +0 -58
  403. package/tests/graph/match.test.ts +0 -29
  404. package/tests/parsing/context.test.ts +0 -27
  405. package/tests/parsing/expression.test.ts +0 -303
  406. package/tests/parsing/parser.test.ts +0 -1327
  407. package/tests/tokenization/token_mapper.test.ts +0 -47
  408. package/tests/tokenization/tokenizer.test.ts +0 -191
  409. package/tests/tokenization/trie.test.ts +0 -20
  410. package/tsconfig.json +0 -19
  411. package/typedoc.json +0 -16
  412. package/vscode-settings.json.recommended +0 -16
  413. package/webpack.config.js +0 -26
@@ -1,380 +0,0 @@
1
- import React from 'react';
2
- import * as AdaptiveCards from 'adaptivecards';
3
- import * as ACData from 'adaptivecards-templating';
4
- import './AdaptiveCardRenderer.css';
5
-
6
- /**
7
- * Data passed when an Action.Submit is triggered
8
- */
9
- export interface SubmitActionData {
10
- /**
11
- * The data property from the Action.Submit (if any)
12
- */
13
- actionData: unknown;
14
-
15
- /**
16
- * All input values collected from the card
17
- */
18
- inputValues: Record<string, string>;
19
-
20
- /**
21
- * The original action object
22
- */
23
- action: AdaptiveCards.SubmitAction;
24
- }
25
-
26
- export interface AdaptiveCardRendererProps {
27
- /**
28
- * The Adaptive Card payload (JSON object conforming to Adaptive Cards schema).
29
- * Can be a template with ${expression} bindings if `data` prop is provided.
30
- */
31
- card: Record<string, unknown>;
32
-
33
- /**
34
- * Optional data context for template binding.
35
- * When provided, the card is treated as a template and expressions like
36
- * ${property} or ${$root.property} will be evaluated against this data.
37
- */
38
- data?: Record<string, unknown>;
39
-
40
- /**
41
- * Optional host config for styling the card
42
- */
43
- hostConfig?: Record<string, unknown>;
44
-
45
- /**
46
- * Callback when an Action.Submit is executed.
47
- * Receives the action data and all input values from the card.
48
- */
49
- onSubmit?: (submitData: SubmitActionData) => void;
50
-
51
- /**
52
- * Callback when any action is executed (e.g., Action.Submit, Action.OpenUrl).
53
- * For Action.Submit, prefer using onSubmit which provides collected input values.
54
- */
55
- onExecuteAction?: (action: AdaptiveCards.Action) => void;
56
-
57
- /**
58
- * Optional CSS class name for the container
59
- */
60
- className?: string;
61
- }
62
-
63
- /**
64
- * Default host config styled to match Fluent UI aesthetics
65
- */
66
- const defaultHostConfig: AdaptiveCards.HostConfig = new AdaptiveCards.HostConfig({
67
- fontFamily: "'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif",
68
- containerStyles: {
69
- default: {
70
- backgroundColor: "#ffffff",
71
- foregroundColors: {
72
- default: {
73
- default: "#242424",
74
- subtle: "#616161"
75
- },
76
- accent: {
77
- default: "#0078D4",
78
- subtle: "#0063B1"
79
- },
80
- good: {
81
- default: "#107C10",
82
- subtle: "#0B5C0B"
83
- },
84
- warning: {
85
- default: "#D83B01",
86
- subtle: "#C43501"
87
- },
88
- attention: {
89
- default: "#A80000",
90
- subtle: "#8B0000"
91
- }
92
- }
93
- },
94
- emphasis: {
95
- backgroundColor: "#F5F5F5",
96
- foregroundColors: {
97
- default: {
98
- default: "#242424",
99
- subtle: "#616161"
100
- }
101
- }
102
- },
103
- accent: {
104
- backgroundColor: "#E6F2FB",
105
- foregroundColors: {
106
- default: {
107
- default: "#242424",
108
- subtle: "#616161"
109
- }
110
- }
111
- }
112
- },
113
- spacing: {
114
- small: 4,
115
- default: 8,
116
- medium: 12,
117
- large: 16,
118
- extraLarge: 24,
119
- padding: 12
120
- },
121
- separator: {
122
- lineThickness: 1,
123
- lineColor: "#E0E0E0"
124
- },
125
- actions: {
126
- maxActions: 5,
127
- spacing: AdaptiveCards.Spacing.Default,
128
- buttonSpacing: 8,
129
- showCard: {
130
- actionMode: AdaptiveCards.ShowCardActionMode.Inline,
131
- inlineTopMargin: 8
132
- },
133
- actionsOrientation: AdaptiveCards.Orientation.Horizontal,
134
- actionAlignment: AdaptiveCards.ActionAlignment.Left
135
- },
136
- adaptiveCard: {
137
- allowCustomStyle: true
138
- },
139
- textBlock: {
140
- headingLevel: 2
141
- },
142
- factSet: {
143
- title: {
144
- color: AdaptiveCards.TextColor.Default,
145
- size: AdaptiveCards.TextSize.Default,
146
- isSubtle: false,
147
- weight: AdaptiveCards.TextWeight.Bolder,
148
- wrap: true
149
- },
150
- value: {
151
- color: AdaptiveCards.TextColor.Default,
152
- size: AdaptiveCards.TextSize.Default,
153
- isSubtle: false,
154
- weight: AdaptiveCards.TextWeight.Default,
155
- wrap: true
156
- },
157
- spacing: 8
158
- }
159
- });
160
-
161
- /**
162
- * Renders an Adaptive Card using the adaptivecards library.
163
- * Adaptive Cards are platform-agnostic UI snippets authored in JSON.
164
- */
165
- export class AdaptiveCardRenderer extends React.Component<AdaptiveCardRendererProps> {
166
- private containerRef = React.createRef<HTMLDivElement>();
167
- private adaptiveCard: AdaptiveCards.AdaptiveCard | null = null;
168
-
169
- componentDidMount(): void {
170
- this.createAdaptiveCard();
171
- this.renderCard();
172
- }
173
-
174
- componentDidUpdate(prevProps: AdaptiveCardRendererProps): void {
175
- // Recreate adaptive card instance if host config changes
176
- if (prevProps.hostConfig !== this.props.hostConfig) {
177
- this.createAdaptiveCard();
178
- }
179
-
180
- // Re-render if card, data, hostConfig, or action handler changes
181
- if (
182
- prevProps.card !== this.props.card ||
183
- prevProps.data !== this.props.data ||
184
- prevProps.hostConfig !== this.props.hostConfig ||
185
- prevProps.onExecuteAction !== this.props.onExecuteAction ||
186
- prevProps.onSubmit !== this.props.onSubmit
187
- ) {
188
- this.renderCard();
189
- }
190
- }
191
-
192
- /**
193
- * Collects all input values from the rendered card
194
- */
195
- private collectInputValues(): Record<string, string> {
196
- const inputs: Record<string, string> = {};
197
-
198
- if (!this.adaptiveCard) {
199
- return inputs;
200
- }
201
-
202
- // Get all input elements from the card
203
- const allInputs = this.adaptiveCard.getAllInputs();
204
-
205
- for (const input of allInputs) {
206
- if (input.id) {
207
- inputs[input.id] = input.value ?? '';
208
- }
209
- }
210
-
211
- return inputs;
212
- }
213
-
214
- private createAdaptiveCard(): void {
215
- const { hostConfig } = this.props;
216
-
217
- this.adaptiveCard = new AdaptiveCards.AdaptiveCard();
218
-
219
- // Apply host config
220
- if (hostConfig) {
221
- this.adaptiveCard.hostConfig = new AdaptiveCards.HostConfig(hostConfig);
222
- } else {
223
- this.adaptiveCard.hostConfig = defaultHostConfig;
224
- }
225
- }
226
-
227
- private renderCard(): void {
228
- const { card, data, onExecuteAction, onSubmit } = this.props;
229
-
230
- if (!this.containerRef.current || !card || !this.adaptiveCard) {
231
- return;
232
- }
233
-
234
- // Clear previous content
235
- this.containerRef.current.innerHTML = '';
236
-
237
- try {
238
- // Normalize the card to standard Adaptive Card format
239
- let cardPayload = normalizeAdaptiveCard(card);
240
-
241
- if (!cardPayload) {
242
- throw new Error('Invalid Adaptive Card format');
243
- }
244
-
245
- // Apply data binding if data is provided
246
- if (data) {
247
- const template = new ACData.Template(cardPayload);
248
- cardPayload = template.expand({
249
- $root: data
250
- });
251
- }
252
-
253
- // Set up action handler
254
- this.adaptiveCard.onExecuteAction = (action: AdaptiveCards.Action) => {
255
- // Handle Action.Submit specially to collect input values
256
- if (action instanceof AdaptiveCards.SubmitAction) {
257
- const inputValues = this.collectInputValues();
258
-
259
- if (onSubmit) {
260
- onSubmit({
261
- actionData: action.data,
262
- inputValues,
263
- action
264
- });
265
- }
266
- }
267
-
268
- // Call general action handler if provided
269
- if (onExecuteAction) {
270
- onExecuteAction(action);
271
- } else if (action instanceof AdaptiveCards.OpenUrlAction && action.url) {
272
- // Default: open URLs in new tab
273
- window.open(action.url, '_blank', 'noopener,noreferrer');
274
- }
275
- };
276
-
277
- // Parse and render the card
278
- this.adaptiveCard.parse(cardPayload);
279
- const renderedCard = this.adaptiveCard.render();
280
-
281
- if (renderedCard) {
282
- this.containerRef.current.appendChild(renderedCard);
283
- }
284
- } catch (error) {
285
- console.error('Failed to render Adaptive Card:', error);
286
-
287
- // Show error message in the container
288
- const errorDiv = document.createElement('div');
289
- errorDiv.className = 'adaptive-card-error';
290
- errorDiv.textContent = `Failed to render card: ${error instanceof Error ? error.message : 'Unknown error'}`;
291
- this.containerRef.current.appendChild(errorDiv);
292
- }
293
- }
294
-
295
- render(): React.ReactNode {
296
- const { className } = this.props;
297
-
298
- return (
299
- <div
300
- ref={this.containerRef}
301
- className={`adaptive-card-container ${className || ''}`}
302
- />
303
- );
304
- }
305
- }
306
-
307
- /**
308
- * Helper function to check if an object looks like an Adaptive Card.
309
- * Supports both standard format (type: 'AdaptiveCard') and alternative format (cardType: 'AdaptiveCard').
310
- */
311
- export function isAdaptiveCard(obj: unknown): obj is Record<string, unknown> {
312
- if (typeof obj !== 'object' || obj === null) {
313
- return false;
314
- }
315
-
316
- const card = obj as Record<string, unknown>;
317
-
318
- // Standard Adaptive Card format
319
- if (card.type === 'AdaptiveCard') {
320
- return true;
321
- }
322
-
323
- // Alternative format with cardType/cardBody
324
- if (card.cardType === 'AdaptiveCard') {
325
- return true;
326
- }
327
-
328
- // Check if it's an array containing Adaptive Cards
329
- if (Array.isArray(obj) && obj.length > 0) {
330
- return obj.some(item => isAdaptiveCard(item));
331
- }
332
-
333
- return false;
334
- }
335
-
336
- /**
337
- * Normalizes a card payload to the standard Adaptive Card format.
338
- * Handles:
339
- * - Arrays of cards (returns the first card)
340
- * - Alternative format with cardType/cardBody properties
341
- * - Standard format (passed through unchanged)
342
- */
343
- export function normalizeAdaptiveCard(obj: unknown): Record<string, unknown> | null {
344
- if (typeof obj !== 'object' || obj === null) {
345
- return null;
346
- }
347
-
348
- // Handle arrays - extract the first valid card
349
- if (Array.isArray(obj)) {
350
- for (const item of obj) {
351
- const normalized = normalizeAdaptiveCard(item);
352
- if (normalized) {
353
- return normalized;
354
- }
355
- }
356
- return null;
357
- }
358
-
359
- const card = obj as Record<string, unknown>;
360
-
361
- // Standard format - return as-is
362
- if (card.type === 'AdaptiveCard') {
363
- return card;
364
- }
365
-
366
- // Alternative format - convert to standard format
367
- if (card.cardType === 'AdaptiveCard') {
368
- return {
369
- type: 'AdaptiveCard',
370
- $schema: 'http://adaptivecards.io/schemas/adaptive-card.json',
371
- version: (card.version as string) || '1.5',
372
- body: card.cardBody || card.body || [],
373
- actions: card.actions || []
374
- };
375
- }
376
-
377
- return null;
378
- }
379
-
380
- export default AdaptiveCardRenderer;
@@ -1,245 +0,0 @@
1
- /**
2
- * API Key Settings Component
3
- *
4
- * Allows users to input and store their OpenAI API key in localStorage.
5
- * The key is never sent to any server - it's only used client-side.
6
- */
7
-
8
- import React, { Component } from 'react';
9
- import {
10
- Dialog,
11
- DialogTrigger,
12
- DialogSurface,
13
- DialogTitle,
14
- DialogBody,
15
- DialogActions,
16
- DialogContent,
17
- Button,
18
- Input,
19
- Label,
20
- Field,
21
- MessageBar,
22
- MessageBarBody,
23
- tokens,
24
- } from '@fluentui/react-components';
25
- import { Settings24Regular, Key24Regular, Checkmark24Regular } from '@fluentui/react-icons';
26
-
27
- const STORAGE_KEY = 'flowquery_openai_api_key';
28
- const ORG_STORAGE_KEY = 'flowquery_openai_org_id';
29
- const MODEL_STORAGE_KEY = 'flowquery_openai_model';
30
-
31
- export interface ApiKeyConfig {
32
- apiKey: string;
33
- organizationId?: string;
34
- model?: string;
35
- }
36
-
37
- /**
38
- * Get the stored API configuration from localStorage.
39
- */
40
- export function getStoredApiConfig(): ApiKeyConfig | null {
41
- const apiKey = localStorage.getItem(STORAGE_KEY);
42
- if (!apiKey) return null;
43
-
44
- return {
45
- apiKey,
46
- organizationId: localStorage.getItem(ORG_STORAGE_KEY) || undefined,
47
- model: localStorage.getItem(MODEL_STORAGE_KEY) || undefined,
48
- };
49
- }
50
-
51
- /**
52
- * Check if an API key is configured in localStorage.
53
- */
54
- export function hasApiKey(): boolean {
55
- return !!localStorage.getItem(STORAGE_KEY);
56
- }
57
-
58
- /**
59
- * Get just the API key from storage.
60
- */
61
- export function getApiKey(): string | null {
62
- return localStorage.getItem(STORAGE_KEY);
63
- }
64
-
65
- interface ApiKeySettingsProps {
66
- onSave?: (config: ApiKeyConfig) => void;
67
- }
68
-
69
- interface ApiKeySettingsState {
70
- open: boolean;
71
- apiKey: string;
72
- organizationId: string;
73
- model: string;
74
- saved: boolean;
75
- }
76
-
77
- export class ApiKeySettings extends Component<ApiKeySettingsProps, ApiKeySettingsState> {
78
- constructor(props: ApiKeySettingsProps) {
79
- super(props);
80
- this.state = {
81
- open: false,
82
- apiKey: '',
83
- organizationId: '',
84
- model: '',
85
- saved: false,
86
- };
87
- }
88
-
89
- componentDidUpdate(_prevProps: ApiKeySettingsProps, prevState: ApiKeySettingsState): void {
90
- // Load existing values when dialog opens
91
- if (this.state.open && !prevState.open) {
92
- const config = getStoredApiConfig();
93
- this.setState({
94
- apiKey: config?.apiKey || '',
95
- organizationId: config?.organizationId || '',
96
- model: config?.model || '',
97
- saved: false,
98
- });
99
- }
100
- }
101
-
102
- handleOpenChange = (_: unknown, data: { open: boolean }): void => {
103
- this.setState({ open: data.open });
104
- };
105
-
106
- handleSave = (): void => {
107
- const { apiKey, organizationId, model } = this.state;
108
- const { onSave } = this.props;
109
-
110
- // Save to localStorage
111
- if (apiKey) {
112
- localStorage.setItem(STORAGE_KEY, apiKey);
113
- } else {
114
- localStorage.removeItem(STORAGE_KEY);
115
- }
116
-
117
- if (organizationId) {
118
- localStorage.setItem(ORG_STORAGE_KEY, organizationId);
119
- } else {
120
- localStorage.removeItem(ORG_STORAGE_KEY);
121
- }
122
-
123
- if (model) {
124
- localStorage.setItem(MODEL_STORAGE_KEY, model);
125
- } else {
126
- localStorage.removeItem(MODEL_STORAGE_KEY);
127
- }
128
-
129
- const config: ApiKeyConfig = {
130
- apiKey,
131
- organizationId: organizationId || undefined,
132
- model: model || undefined,
133
- };
134
-
135
- this.setState({ saved: true });
136
- onSave?.(config);
137
-
138
- // Close dialog after a brief delay to show success
139
- setTimeout(() => this.setState({ open: false }), 500);
140
- };
141
-
142
- handleClear = (): void => {
143
- localStorage.removeItem(STORAGE_KEY);
144
- localStorage.removeItem(ORG_STORAGE_KEY);
145
- localStorage.removeItem(MODEL_STORAGE_KEY);
146
- this.setState({
147
- apiKey: '',
148
- organizationId: '',
149
- model: '',
150
- saved: false,
151
- });
152
- };
153
-
154
- handleCancel = (): void => {
155
- this.setState({ open: false });
156
- };
157
-
158
- handleApiKeyChange = (_: unknown, data: { value: string }): void => {
159
- this.setState({ apiKey: data.value });
160
- };
161
-
162
- handleOrganizationIdChange = (_: unknown, data: { value: string }): void => {
163
- this.setState({ organizationId: data.value });
164
- };
165
-
166
- handleModelChange = (_: unknown, data: { value: string }): void => {
167
- this.setState({ model: data.value });
168
- };
169
-
170
- render(): React.ReactNode {
171
- const { open, apiKey, organizationId, model, saved } = this.state;
172
- const isConfigured = hasApiKey();
173
-
174
- return (
175
- <Dialog open={open} onOpenChange={this.handleOpenChange}>
176
- <DialogTrigger disableButtonEnhancement>
177
- <Button
178
- appearance={isConfigured ? 'subtle' : 'primary'}
179
- icon={isConfigured ? <Checkmark24Regular /> : <Settings24Regular />}
180
- title="API Settings"
181
- >
182
- {isConfigured ? 'API Configured' : 'Configure API Key'}
183
- </Button>
184
- </DialogTrigger>
185
- <DialogSurface>
186
- <DialogBody>
187
- <DialogTitle>OpenAI API Settings</DialogTitle>
188
- <DialogContent style={{ display: 'flex', flexDirection: 'column', gap: '16px', paddingTop: '16px' }}>
189
- <MessageBar intent="info">
190
- <MessageBarBody>
191
- Your API key is stored locally in your browser and never sent to any server.
192
- </MessageBarBody>
193
- </MessageBar>
194
-
195
- <Field label="API Key" required>
196
- <Input
197
- type="password"
198
- value={apiKey}
199
- onChange={this.handleApiKeyChange}
200
- placeholder="sk-..."
201
- contentBefore={<Key24Regular />}
202
- />
203
- </Field>
204
-
205
- <Field label="Organization ID" hint="Optional - only needed for organization accounts">
206
- <Input
207
- value={organizationId}
208
- onChange={this.handleOrganizationIdChange}
209
- placeholder="org-..."
210
- />
211
- </Field>
212
-
213
- <Field label="Default Model" hint="Optional - defaults to gpt-4o-mini">
214
- <Input
215
- value={model}
216
- onChange={this.handleModelChange}
217
- placeholder="gpt-4o-mini"
218
- />
219
- </Field>
220
-
221
- {saved && (
222
- <MessageBar intent="success">
223
- <MessageBarBody>Settings saved successfully!</MessageBarBody>
224
- </MessageBar>
225
- )}
226
- </DialogContent>
227
- <DialogActions>
228
- <Button appearance="secondary" onClick={this.handleClear}>
229
- Clear
230
- </Button>
231
- <Button appearance="secondary" onClick={this.handleCancel}>
232
- Cancel
233
- </Button>
234
- <Button appearance="primary" onClick={this.handleSave} disabled={!apiKey}>
235
- Save
236
- </Button>
237
- </DialogActions>
238
- </DialogBody>
239
- </DialogSurface>
240
- </Dialog>
241
- );
242
- }
243
- }
244
-
245
- export default ApiKeySettings;
@@ -1,67 +0,0 @@
1
- .chat-container {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
- background-color: #ffffff;
6
- border-radius: 8px;
7
- overflow: hidden;
8
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
9
- }
10
-
11
- .chat-messages {
12
- flex: 1;
13
- overflow-y: auto;
14
- padding: 16px;
15
- background-color: #fafafa;
16
- }
17
-
18
- .chat-empty-state {
19
- display: flex;
20
- align-items: center;
21
- justify-content: center;
22
- height: 100%;
23
- color: #666;
24
- text-align: center;
25
- padding: 24px;
26
- }
27
-
28
- .chat-empty-state p {
29
- margin: 0;
30
- font-size: 16px;
31
- }
32
-
33
- .chat-loading {
34
- display: flex;
35
- justify-content: center;
36
- padding: 16px;
37
- }
38
-
39
- .chat-error {
40
- padding: 12px 16px;
41
- background-color: #fde7e9;
42
- color: #c50f1f;
43
- border-top: 1px solid #c50f1f;
44
- font-size: 14px;
45
- }
46
-
47
- .chat-clear-button {
48
- padding: 8px 16px;
49
- margin: 8px 16px 16px;
50
- background-color: transparent;
51
- border: 1px solid #d1d1d1;
52
- border-radius: 4px;
53
- color: #666;
54
- cursor: pointer;
55
- font-size: 14px;
56
- transition: all 0.2s ease;
57
- }
58
-
59
- .chat-clear-button:hover:not(:disabled) {
60
- background-color: #f5f5f5;
61
- border-color: #b3b3b3;
62
- }
63
-
64
- .chat-clear-button:disabled {
65
- opacity: 0.5;
66
- cursor: not-allowed;
67
- }