@tari-project/tari-extension-query-builder 0.0.4

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 (175) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +1 -0
  3. package/components.json +21 -0
  4. package/dist/App.d.ts +3 -0
  5. package/dist/App.d.ts.map +1 -0
  6. package/dist/codegen/BuilderCodegen.d.ts +20 -0
  7. package/dist/codegen/BuilderCodegen.d.ts.map +1 -0
  8. package/dist/codegen/sample.d.ts +3 -0
  9. package/dist/codegen/sample.d.ts.map +1 -0
  10. package/dist/components/query-builder/edges/button-edge.d.ts +3 -0
  11. package/dist/components/query-builder/edges/button-edge.d.ts.map +1 -0
  12. package/dist/components/query-builder/input/call-input-checkbox.d.ts +11 -0
  13. package/dist/components/query-builder/input/call-input-checkbox.d.ts.map +1 -0
  14. package/dist/components/query-builder/input/call-input-select.d.ts +14 -0
  15. package/dist/components/query-builder/input/call-input-select.d.ts.map +1 -0
  16. package/dist/components/query-builder/input/call-input-text.d.ts +18 -0
  17. package/dist/components/query-builder/input/call-input-text.d.ts.map +1 -0
  18. package/dist/components/query-builder/input/call-input.d.ts +13 -0
  19. package/dist/components/query-builder/input/call-input.d.ts.map +1 -0
  20. package/dist/components/query-builder/nodes/call-node.types.d.ts +4 -0
  21. package/dist/components/query-builder/nodes/call-node.types.d.ts.map +1 -0
  22. package/dist/components/query-builder/nodes/constants.d.ts +5 -0
  23. package/dist/components/query-builder/nodes/constants.d.ts.map +1 -0
  24. package/dist/components/query-builder/nodes/enter-connection.d.ts +3 -0
  25. package/dist/components/query-builder/nodes/enter-connection.d.ts.map +1 -0
  26. package/dist/components/query-builder/nodes/exit-connection.d.ts +3 -0
  27. package/dist/components/query-builder/nodes/exit-connection.d.ts.map +1 -0
  28. package/dist/components/query-builder/nodes/generic/generic-node.d.ts +5 -0
  29. package/dist/components/query-builder/nodes/generic/generic-node.d.ts.map +1 -0
  30. package/dist/components/query-builder/nodes/generic/node-icon.d.ts +8 -0
  31. package/dist/components/query-builder/nodes/generic/node-icon.d.ts.map +1 -0
  32. package/dist/components/query-builder/nodes/generic-node.types.d.ts +6 -0
  33. package/dist/components/query-builder/nodes/generic-node.types.d.ts.map +1 -0
  34. package/dist/components/query-builder/nodes/input/constants.d.ts +2 -0
  35. package/dist/components/query-builder/nodes/input/constants.d.ts.map +1 -0
  36. package/dist/components/query-builder/nodes/input/editable-label.d.ts +9 -0
  37. package/dist/components/query-builder/nodes/input/editable-label.d.ts.map +1 -0
  38. package/dist/components/query-builder/nodes/input/input-params-node.d.ts +5 -0
  39. package/dist/components/query-builder/nodes/input/input-params-node.d.ts.map +1 -0
  40. package/dist/components/query-builder/query-builder.d.ts +13 -0
  41. package/dist/components/query-builder/query-builder.d.ts.map +1 -0
  42. package/dist/components/ui/alert-dialog.d.ts +15 -0
  43. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  44. package/dist/components/ui/badge.d.ts +10 -0
  45. package/dist/components/ui/badge.d.ts.map +1 -0
  46. package/dist/components/ui/button.d.ts +11 -0
  47. package/dist/components/ui/button.d.ts.map +1 -0
  48. package/dist/components/ui/checkbox.d.ts +5 -0
  49. package/dist/components/ui/checkbox.d.ts.map +1 -0
  50. package/dist/components/ui/dropdown-menu.d.ts +26 -0
  51. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  52. package/dist/components/ui/input.d.ts +4 -0
  53. package/dist/components/ui/input.d.ts.map +1 -0
  54. package/dist/components/ui/label.d.ts +5 -0
  55. package/dist/components/ui/label.d.ts.map +1 -0
  56. package/dist/components/ui/loading-spinner.d.ts +7 -0
  57. package/dist/components/ui/loading-spinner.d.ts.map +1 -0
  58. package/dist/components/ui/popover.d.ts +8 -0
  59. package/dist/components/ui/popover.d.ts.map +1 -0
  60. package/dist/components/ui/select.d.ts +16 -0
  61. package/dist/components/ui/select.d.ts.map +1 -0
  62. package/dist/components/ui/separator.d.ts +5 -0
  63. package/dist/components/ui/separator.d.ts.map +1 -0
  64. package/dist/components/ui/sonner.d.ts +4 -0
  65. package/dist/components/ui/sonner.d.ts.map +1 -0
  66. package/dist/components/ui/textarea.d.ts +4 -0
  67. package/dist/components/ui/textarea.d.ts.map +1 -0
  68. package/dist/components/ui/tooltip.d.ts +8 -0
  69. package/dist/components/ui/tooltip.d.ts.map +1 -0
  70. package/dist/execute/AmbiguousOrderError.d.ts +6 -0
  71. package/dist/execute/AmbiguousOrderError.d.ts.map +1 -0
  72. package/dist/execute/CycleDetectedError.d.ts +4 -0
  73. package/dist/execute/CycleDetectedError.d.ts.map +1 -0
  74. package/dist/execute/ExecutionPlanner.d.ts +30 -0
  75. package/dist/execute/ExecutionPlanner.d.ts.map +1 -0
  76. package/dist/execute/ExecutionPlanner.spec.d.ts +2 -0
  77. package/dist/execute/ExecutionPlanner.spec.d.ts.map +1 -0
  78. package/dist/execute/MissingDataError.d.ts +5 -0
  79. package/dist/execute/MissingDataError.d.ts.map +1 -0
  80. package/dist/execute/types.d.ts +65 -0
  81. package/dist/execute/types.d.ts.map +1 -0
  82. package/dist/index.d.ts +6 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/lib/get-next-available.d.ts +2 -0
  85. package/dist/lib/get-next-available.d.ts.map +1 -0
  86. package/dist/lib/utils.d.ts +3 -0
  87. package/dist/lib/utils.d.ts.map +1 -0
  88. package/dist/main.d.ts +2 -0
  89. package/dist/main.d.ts.map +1 -0
  90. package/dist/query-builder/tari-type.d.ts +29 -0
  91. package/dist/query-builder/tari-type.d.ts.map +1 -0
  92. package/dist/query-builder/template-reader.d.ts +13 -0
  93. package/dist/query-builder/template-reader.d.ts.map +1 -0
  94. package/dist/store/persistence/handlers.d.ts +12 -0
  95. package/dist/store/persistence/handlers.d.ts.map +1 -0
  96. package/dist/store/persistence/types.d.ts +18 -0
  97. package/dist/store/persistence/types.d.ts.map +1 -0
  98. package/dist/store/persistence/v1_0.d.ts +5 -0
  99. package/dist/store/persistence/v1_0.d.ts.map +1 -0
  100. package/dist/store/store.d.ts +4 -0
  101. package/dist/store/store.d.ts.map +1 -0
  102. package/dist/store/types.d.ts +97 -0
  103. package/dist/store/types.d.ts.map +1 -0
  104. package/dist/tari-extension-query-builder.css +1 -0
  105. package/dist/tari-extension-query-builder.es.js +183368 -0
  106. package/dist/tari-extension-query-builder.umd.js +620 -0
  107. package/dist/types.d.ts +7 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/eslint.config.js +34 -0
  110. package/index.html +12 -0
  111. package/moon.yml +43 -0
  112. package/package.json +84 -0
  113. package/src/App.tsx +114 -0
  114. package/src/assets/react.svg +1 -0
  115. package/src/codegen/BuilderCodegen.ts +516 -0
  116. package/src/codegen/sample.ts +58 -0
  117. package/src/components/query-builder/edges/button-edge.tsx +50 -0
  118. package/src/components/query-builder/input/call-input-checkbox.tsx +54 -0
  119. package/src/components/query-builder/input/call-input-select.tsx +87 -0
  120. package/src/components/query-builder/input/call-input-text.tsx +98 -0
  121. package/src/components/query-builder/input/call-input.tsx +51 -0
  122. package/src/components/query-builder/nodes/call-node.types.ts +3 -0
  123. package/src/components/query-builder/nodes/constants.ts +4 -0
  124. package/src/components/query-builder/nodes/enter-connection.tsx +16 -0
  125. package/src/components/query-builder/nodes/exit-connection.tsx +16 -0
  126. package/src/components/query-builder/nodes/generic/generic-node.tsx +252 -0
  127. package/src/components/query-builder/nodes/generic/node-icon.tsx +37 -0
  128. package/src/components/query-builder/nodes/generic-node.types.ts +5 -0
  129. package/src/components/query-builder/nodes/input/constants.ts +1 -0
  130. package/src/components/query-builder/nodes/input/editable-label.tsx +142 -0
  131. package/src/components/query-builder/nodes/input/input-params-node.tsx +190 -0
  132. package/src/components/query-builder/query-builder.tsx +577 -0
  133. package/src/components/ui/alert-dialog.tsx +111 -0
  134. package/src/components/ui/badge.tsx +37 -0
  135. package/src/components/ui/button.tsx +50 -0
  136. package/src/components/ui/checkbox.tsx +27 -0
  137. package/src/components/ui/dropdown-menu.tsx +217 -0
  138. package/src/components/ui/input.tsx +21 -0
  139. package/src/components/ui/label.tsx +19 -0
  140. package/src/components/ui/loading-spinner.tsx +46 -0
  141. package/src/components/ui/popover.tsx +40 -0
  142. package/src/components/ui/select.tsx +158 -0
  143. package/src/components/ui/separator.tsx +26 -0
  144. package/src/components/ui/sonner.tsx +23 -0
  145. package/src/components/ui/textarea.tsx +18 -0
  146. package/src/components/ui/tooltip.tsx +46 -0
  147. package/src/execute/AmbiguousOrderError.ts +13 -0
  148. package/src/execute/CycleDetectedError.ts +7 -0
  149. package/src/execute/ExecutionPlanner.spec.ts +174 -0
  150. package/src/execute/ExecutionPlanner.ts +445 -0
  151. package/src/execute/MissingDataError.ts +10 -0
  152. package/src/execute/types.ts +87 -0
  153. package/src/index.css +124 -0
  154. package/src/index.ts +5 -0
  155. package/src/lib/get-next-available.ts +12 -0
  156. package/src/lib/utils.ts +6 -0
  157. package/src/main.tsx +13 -0
  158. package/src/query-builder/tari-type.ts +185 -0
  159. package/src/query-builder/template-reader.ts +69 -0
  160. package/src/root.css +4 -0
  161. package/src/store/persistence/handlers.ts +16 -0
  162. package/src/store/persistence/types.ts +14 -0
  163. package/src/store/persistence/v1_0.ts +35 -0
  164. package/src/store/store.ts +396 -0
  165. package/src/store/types.ts +115 -0
  166. package/src/stories/data/tari-swap-pool.json +317 -0
  167. package/src/stories/data/wallet-functions.json +580 -0
  168. package/src/types.ts +7 -0
  169. package/src/vite-env.d.ts +1 -0
  170. package/src/xy-theme.css +144 -0
  171. package/tsconfig.app.json +31 -0
  172. package/tsconfig.json +15 -0
  173. package/tsconfig.lib.json +13 -0
  174. package/tsconfig.node.json +24 -0
  175. package/vite.config.ts +35 -0
@@ -0,0 +1,30 @@
1
+ import { CustomNode } from '../store/types';
2
+ import { Edge } from '@xyflow/react';
3
+ import { Amount, Transaction } from '@tari-project/tarijs-all';
4
+ import { TransactionDetails } from './types';
5
+ type NodeId = string;
6
+ export declare class ExecutionPlanner {
7
+ private customNodes;
8
+ private edges;
9
+ private genericNodes;
10
+ private nodes;
11
+ private nodeMap;
12
+ private incomingConnectionCount;
13
+ private outgoingConnections;
14
+ private outputToInputDependencies;
15
+ constructor(customNodes: CustomNode[], edges: Edge[]);
16
+ private adjustIncomingConnectionCount;
17
+ private addOutgoingConnection;
18
+ private mapGenericNode;
19
+ private processEdges;
20
+ private buildOutputToInputDependencies;
21
+ private init;
22
+ private outputDependsOnInput;
23
+ private explicityFollows;
24
+ getExecutionOrder(): NodeId[];
25
+ private validateConnections;
26
+ buildTransactionDescription(executionOrder: NodeId[], accountAddress: string, fee: Amount): TransactionDetails;
27
+ buildTransaction(details: TransactionDetails): Transaction;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=ExecutionPlanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionPlanner.d.ts","sourceRoot":"","sources":["../../src/execute/ExecutionPlanner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2D,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,OAAO,EAAE,MAAM,EAAiB,WAAW,EAAsB,MAAM,0BAA0B,CAAC;AAElG,OAAO,EAKL,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAIjB,KAAK,MAAM,GAAG,MAAM,CAAC;AASrB,qBAAa,gBAAgB;IASzB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IATf,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,yBAAyB,CAA+B;gBAGtD,WAAW,EAAE,UAAU,EAAE,EACzB,KAAK,EAAE,IAAI,EAAE;IAKvB,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,gBAAgB;IAIjB,iBAAiB,IAAI,MAAM,EAAE;IAqDpC,OAAO,CAAC,mBAAmB;IAwBpB,2BAA2B,CAChC,cAAc,EAAE,MAAM,EAAE,EACxB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GACV,kBAAkB;IA0Kd,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;CA4ClE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExecutionPlanner.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionPlanner.spec.d.ts","sourceRoot":"","sources":["../../src/execute/ExecutionPlanner.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare class MissingDataError extends Error {
2
+ nodes: string[];
3
+ constructor(nodes: string[], message?: string);
4
+ }
5
+ //# sourceMappingURL=MissingDataError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MissingDataError.d.ts","sourceRoot":"","sources":["../../src/execute/MissingDataError.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;IAEhC,KAAK,EAAE,MAAM,EAAE;gBAAf,KAAK,EAAE,MAAM,EAAE,EACtB,OAAO,CAAC,EAAE,MAAM;CAMnB"}
@@ -0,0 +1,65 @@
1
+ import { InputParameterType } from '../store/types';
2
+ import { TransactionBuilder } from '@tari-project/tarijs-all';
3
+ export interface FeeTransactionPayFromComponentDescription {
4
+ type: "feeTransactionPayFromComponent";
5
+ args: Parameters<TransactionBuilder["feeTransactionPayFromComponent"]>;
6
+ }
7
+ export interface InputParamsReference {
8
+ name: string;
9
+ inputParam: InputParameterType;
10
+ }
11
+ export interface ArgValueFromInputParam {
12
+ type: "input";
13
+ value: unknown;
14
+ reference: InputParamsReference;
15
+ }
16
+ export interface ArgValueFromWorkspace {
17
+ type: "workspace";
18
+ value: string;
19
+ }
20
+ export interface ArgValueOther {
21
+ type: "other";
22
+ value: unknown;
23
+ }
24
+ export type ArgValue = ArgValueFromInputParam | ArgValueFromWorkspace | ArgValueOther;
25
+ export interface CallMethodDescription {
26
+ type: "callMethod";
27
+ componentAddress: ArgValue;
28
+ methodName: string;
29
+ args: ArgValue[];
30
+ }
31
+ export interface CallFunctionDescription {
32
+ type: "callFunction";
33
+ function: Parameters<TransactionBuilder["callFunction"]>[0];
34
+ args: ArgValue[];
35
+ }
36
+ export interface AddInstructionDescription {
37
+ type: "addInstruction";
38
+ name: string;
39
+ args: ArgValue[];
40
+ }
41
+ export interface AllocateComponentAddress {
42
+ type: "allocateComponentAddress";
43
+ workspaceId: string;
44
+ }
45
+ export interface AllocateResourceAddress {
46
+ type: "allocateResourceAddress";
47
+ workspaceId: string;
48
+ }
49
+ export interface SaveVarDescription {
50
+ type: "saveVar";
51
+ key: string;
52
+ }
53
+ export type TransactionDescription = FeeTransactionPayFromComponentDescription | CallMethodDescription | CallFunctionDescription | AddInstructionDescription | AllocateComponentAddress | AllocateResourceAddress | SaveVarDescription;
54
+ export interface InputParameter {
55
+ type: InputParameterType;
56
+ value: unknown;
57
+ }
58
+ export interface TransactionContext {
59
+ inputParams: Record<string, InputParameter[]>;
60
+ }
61
+ export interface TransactionDetails {
62
+ context: TransactionContext;
63
+ descriptions: TransactionDescription[];
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execute/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,yCAAyC;IACxD,IAAI,EAAE,gCAAgC,CAAC;IACvC,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,aAAa,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,0BAA0B,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,sBAAsB,GAC9B,yCAAyC,GACzC,qBAAqB,GACrB,uBAAuB,GACvB,yBAAyB,GACzB,wBAAwB,GACxB,uBAAuB,GACvB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,EAAE,sBAAsB,EAAE,CAAC;CACxC"}
@@ -0,0 +1,6 @@
1
+ export { default as QueryBuilder } from './components/query-builder/query-builder';
2
+ export { default as useStore } from './store/store';
3
+ export * from './store/types';
4
+ export * from './query-builder/template-reader';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getNextAvailable(name: string, isValid: (name: string) => boolean): string;
2
+ //# sourceMappingURL=get-next-available.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-next-available.d.ts","sourceRoot":"","sources":["../../src/lib/get-next-available.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAWzF"}
@@ -0,0 +1,3 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { Type } from '@tari-project/typescript-bindings';
2
+ import { HTMLInputTypeAttribute } from 'react';
3
+ import { SafeParseReturnType, ZodFirstPartySchemaTypes } from 'zod';
4
+ export declare enum InputControlType {
5
+ TextBoxInput = "TextBoxInput",
6
+ CheckBoxInput = "CheckBoxInput"
7
+ }
8
+ export declare class TariType {
9
+ type: Type;
10
+ props: TypeProps;
11
+ constructor(type: Type);
12
+ getInputControlType(): InputControlType;
13
+ get prompt(): string;
14
+ get inputType(): HTMLInputTypeAttribute;
15
+ get min(): bigint | undefined;
16
+ get max(): bigint | undefined;
17
+ validate(data: string): SafeParseReturnType<unknown, unknown>;
18
+ isVoid(): boolean;
19
+ isTuple(): boolean;
20
+ getTupleDetails(): [TariType?, TariType?];
21
+ }
22
+ interface TypeProps {
23
+ htmlType: HTMLInputTypeAttribute;
24
+ minValue?: bigint;
25
+ maxValue?: bigint;
26
+ validator: ZodFirstPartySchemaTypes;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=tari-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tari-type.d.ts","sourceRoot":"","sources":["../../src/query-builder/tari-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAK,wBAAwB,EAAE,MAAM,KAAK,CAAC;AAEvE,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAChC;AAED,qBAAa,QAAQ;IAGA,IAAI,EAAE,IAAI;IAFtB,KAAK,EAAE,SAAS,CAAC;gBAEL,IAAI,EAAE,IAAI;IAItB,mBAAmB,IAAI,gBAAgB;IAI9C,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,SAAS,IAAI,sBAAsB,CAE7C;IAED,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEM,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAI7D,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;CAMjD;AA+BD,UAAU,SAAS;IACjB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,wBAAwB,CAAC;CACrC"}
@@ -0,0 +1,13 @@
1
+ import { QueryBuilderState } from '../store/types';
2
+ import { TemplateDef } from '@tari-project/typescript-bindings';
3
+ export declare const COMPONENT_ADDRESS_NAME = "__component_address___";
4
+ type GenericNodeDescription = Parameters<QueryBuilderState["addNodeAt"]>[0];
5
+ export declare class TemplateReader {
6
+ templateDef: TemplateDef;
7
+ templateAddress: string;
8
+ constructor(templateDef: TemplateDef, templateAddress: string);
9
+ get templateName(): string;
10
+ getGenericNode(functionName: string): GenericNodeDescription | null;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=template-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-reader.d.ts","sourceRoot":"","sources":["../../src/query-builder/template-reader.ts"],"names":[],"mappings":"AACA,OAAO,EAAkD,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,KAAK,sBAAsB,GAAG,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,qBAAa,cAAc;IAEhB,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,MAAM;gBADvB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,MAAM;IAGhC,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;CAkD3E"}
@@ -0,0 +1,12 @@
1
+ import { QueryBuilderState } from '../types';
2
+ import { AnyPersistedState, ValidationResult } from './types';
3
+ interface VersionHandler<T extends AnyPersistedState> {
4
+ version: T["version"];
5
+ save: (state: QueryBuilderState) => T;
6
+ load: (storedState: unknown) => ValidationResult<T>;
7
+ }
8
+ export declare const versionHandlers: Record<string, VersionHandler<AnyPersistedState>>;
9
+ export declare const latestVersion = "1.0";
10
+ export declare const latestVersionHandler: VersionHandler<import('./types').PersistedStateV1>;
11
+ export {};
12
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/store/persistence/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG9D,UAAU,cAAc,CAAC,CAAC,SAAS,iBAAiB;IAClD,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAE7E,CAAC;AAEF,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,oBAAoB,oDAAiC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import { Edge } from '@xyflow/react';
3
+ import { CustomNode } from '../types';
4
+ export interface PersistedStateV1 {
5
+ version: "1.0";
6
+ nodes: CustomNode[];
7
+ edges: Edge[];
8
+ }
9
+ export type LatestPersistedState = PersistedStateV1;
10
+ export type AnyPersistedState = PersistedStateV1;
11
+ export type ValidationResult<T> = {
12
+ success: true;
13
+ data: T;
14
+ } | {
15
+ success: false;
16
+ error: z.ZodError;
17
+ };
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/store/persistence/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAEjD,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { QueryBuilderState } from '../types';
2
+ import { PersistedStateV1, ValidationResult } from './types';
3
+ export declare const saveStateV1: (state: QueryBuilderState) => PersistedStateV1;
4
+ export declare const loadStateV1: (storedState: unknown) => ValidationResult<PersistedStateV1>;
5
+ //# sourceMappingURL=v1_0.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1_0.d.ts","sourceRoot":"","sources":["../../../src/store/persistence/v1_0.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAS7D,eAAO,MAAM,WAAW,UAAW,iBAAiB,KAAG,gBAIrD,CAAC;AAEH,eAAO,MAAM,WAAW,gBAAiB,OAAO,KAAG,gBAAgB,CAAC,gBAAgB,CAiBnF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QueryBuilderState } from './types';
2
+ declare const useStore: import('zustand').UseBoundStore<import('zustand').StoreApi<QueryBuilderState>>;
3
+ export default useStore;
4
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6C,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAe5F,QAAA,MAAM,QAAQ,gFAuXX,CAAC;AAEJ,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { FunctionDef, Type } from '@tari-project/typescript-bindings';
2
+ import { Edge, Node, OnNodesChange, OnEdgesChange, OnConnect, IsValidConnection, XYPosition } from '@xyflow/react';
3
+ import { SafeParseReturnType } from 'zod';
4
+ export declare enum NodeType {
5
+ GenericNode = "genericNode",
6
+ InputParamsNode = "inputParamsNode"
7
+ }
8
+ export declare enum GenericNodeType {
9
+ CallNode = "callNode",
10
+ StartNode = "startNode",
11
+ EmitLogNode = "emitLogNode",
12
+ AssertBucketContains = "assertBucketContains",
13
+ AllocateComponentAddress = "allocateComponentAddress",
14
+ AllocateResourceAddress = "allocateResourceAddress"
15
+ }
16
+ export interface CallNodeMetadata {
17
+ type: GenericNodeType.CallNode;
18
+ isMethod: boolean;
19
+ templateName: string;
20
+ templateAddress: string;
21
+ fn: FunctionDef;
22
+ }
23
+ export type GenericNodeMetadata = CallNodeMetadata;
24
+ export type GenericNodeIcon = "enter" | "rocket" | "home" | "cube" | "check-circled" | "archive" | "component";
25
+ export declare enum InputConnectionType {
26
+ None = 0,
27
+ Parameter = 1,
28
+ ComponentAddress = 2
29
+ }
30
+ export interface GenericNodeInputType {
31
+ inputConnectionType: InputConnectionType;
32
+ type: Type;
33
+ name: string;
34
+ label?: string;
35
+ validValues?: string[];
36
+ }
37
+ export interface GenericNodeOutputType {
38
+ type: Type;
39
+ name: string;
40
+ label?: string;
41
+ }
42
+ export type GenericNodeData = {
43
+ type: GenericNodeType;
44
+ values?: Record<string, SafeParseReturnType<unknown, unknown>>;
45
+ metadata?: GenericNodeMetadata;
46
+ hasEnterConnection?: boolean;
47
+ hasExitConnection?: boolean;
48
+ icon?: GenericNodeIcon;
49
+ badge?: string;
50
+ title?: string;
51
+ largeCaption?: string;
52
+ inputs?: GenericNodeInputType[];
53
+ output?: GenericNodeOutputType;
54
+ };
55
+ export type GenericNode = Node<GenericNodeData, NodeType.GenericNode>;
56
+ export interface InputParameterType {
57
+ id: string;
58
+ type: Type;
59
+ name: string;
60
+ }
61
+ export type InputParamsNodeData = {
62
+ title: string;
63
+ values: Record<string, SafeParseReturnType<unknown, unknown>>;
64
+ inputs: InputParameterType[];
65
+ };
66
+ export type InputParamsNode = Node<InputParamsNodeData, NodeType.InputParamsNode>;
67
+ export type CustomNode = GenericNode | InputParamsNode;
68
+ export interface QueryBuilderState {
69
+ readOnly: boolean;
70
+ nodes: CustomNode[];
71
+ edges: Edge[];
72
+ centerX: number;
73
+ centerY: number;
74
+ changeCounter: number;
75
+ updateCenter: (centerX: number, centerY: number) => void;
76
+ setReadOnly: (value: boolean) => void;
77
+ onNodesChange: OnNodesChange<CustomNode>;
78
+ onEdgesChange: OnEdgesChange;
79
+ onConnect: OnConnect;
80
+ setNodes: (nodes: CustomNode[]) => void;
81
+ setEdges: (edges: Edge[]) => void;
82
+ addNode: (node: CustomNode) => void;
83
+ addNodeAt: (node: Omit<CustomNode, "id" | "position">, position?: XYPosition) => void;
84
+ updateNodeArgValue: (nodeId: string, argName: string, value: SafeParseReturnType<unknown, unknown>) => void;
85
+ getNodeById: (nodeId: string) => CustomNode | undefined;
86
+ isValidConnection: IsValidConnection;
87
+ removeNode: (nodeId: string) => void;
88
+ saveStateToString: () => string;
89
+ loadStateFromString: (state: string) => void;
90
+ isValidInputParamsTitle: (nodeId: string, title: string) => boolean;
91
+ updateInputParamsTitle: (nodeId: string, title: string) => void;
92
+ updateInputParamsNode: (nodeId: string, paramId: string, value: SafeParseReturnType<unknown, unknown>) => void;
93
+ removeInputParam: (nodeId: string, paramId: string) => void;
94
+ isValidInputParamsName: (nodeId: string, paramId: string, name: string) => boolean;
95
+ updateInputParamsName: (nodeId: string, paramId: string, newName: string) => void;
96
+ }
97
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,KAAK,CAAC;AAE1C,oBAAY,QAAQ;IAClB,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;CACpC;AAED,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,oBAAoB,yBAAyB;IAC7C,wBAAwB,6BAA6B;IACrD,uBAAuB,4BAA4B;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE,WAAW,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAC/G,oBAAY,mBAAmB;IAC7B,IAAI,IAAI;IACR,SAAS,IAAA;IACT,gBAAgB,IAAA;CACjB;AACD,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AAElF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACtF,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5G,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACxD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACpE,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/G,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnF,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnF"}
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.0.12 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(.637 .237 25.331);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-widest:.1em;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:color-mix(in oklab,var(--ring)50%,transparent)}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-3{top:calc(var(--spacing)*3)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing)*2)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.my-1{margin-block:calc(var(--spacing)*1)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-1{margin-top:calc(var(--spacing)*1)}.mr-1{margin-right:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.field-sizing-content{field-sizing:content}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.min-h-16{min-height:calc(var(--spacing)*16)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-56{width:calc(var(--spacing)*56)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[64ch\]{width:64ch}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-160{min-width:calc(var(--spacing)*160)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--foreground\)\]{border-color:var(--foreground)}.border-gray-400{border-color:var(--color-gray-400)}.border-input{border-color:var(--input)}.border-red-500{border-color:var(--color-red-500)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-border{background-color:var(--border)}.bg-destructive{background-color:var(--destructive)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-primary{fill:var(--primary)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.pt-1{padding-top:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-\[color\:var\(--primary\)\]{color:var(--primary)}.text-current{color:currentColor}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.italic{font-style:italic}.font-stretch-expanded{font-stretch:125%}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\!ring-red-500{--tw-ring-color:var(--color-red-500)!important}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.duration-200{animation-duration:.2s}.fade-in-0{--tw-enter-opacity:0}.zoom-in-95{--tw-enter-scale:.95}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-primary:focus{border-color:var(--primary)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}@media (width>=40rem){.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media (width>=48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-gray-700:is(.dark *){border-color:var(--color-gray-700)}.dark\:bg-gray-600:is(.dark *){background-color:var(--color-gray-600)}.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}@media (hover:hover){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible,.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}:root{--background:oklch(1 0 0);--foreground:oklch(.145 0 0);--card:oklch(1 0 0);--card-foreground:oklch(.145 0 0);--popover:oklch(1 0 0);--popover-foreground:oklch(.145 0 0);--primary:oklch(.205 0 0);--primary-foreground:oklch(.985 0 0);--secondary:oklch(.97 0 0);--secondary-foreground:oklch(.205 0 0);--muted:oklch(.97 0 0);--muted-foreground:oklch(.556 0 0);--accent:oklch(.97 0 0);--accent-foreground:oklch(.205 0 0);--destructive:oklch(.577 .245 27.325);--destructive-foreground:oklch(.577 .245 27.325);--border:oklch(.922 0 0);--input:oklch(.922 0 0);--ring:oklch(.708 0 0);--chart-1:oklch(.646 .222 41.116);--chart-2:oklch(.6 .118 184.704);--chart-3:oklch(.398 .07 227.392);--chart-4:oklch(.828 .189 84.429);--chart-5:oklch(.769 .188 70.08);--radius:.625rem;--sidebar:oklch(.985 0 0);--sidebar-foreground:oklch(.145 0 0);--sidebar-primary:oklch(.205 0 0);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.97 0 0);--sidebar-accent-foreground:oklch(.205 0 0);--sidebar-border:oklch(.922 0 0);--sidebar-ring:oklch(.708 0 0)}.dark{--background:oklch(.145 0 0);--foreground:oklch(.985 0 0);--card:oklch(.145 0 0);--card-foreground:oklch(.985 0 0);--popover:oklch(.145 0 0);--popover-foreground:oklch(.985 0 0);--primary:oklch(.985 0 0);--primary-foreground:oklch(.205 0 0);--secondary:oklch(.269 0 0);--secondary-foreground:oklch(.985 0 0);--muted:oklch(.269 0 0);--muted-foreground:oklch(.708 0 0);--accent:oklch(.269 0 0);--accent-foreground:oklch(.985 0 0);--destructive:oklch(.396 .141 25.723);--destructive-foreground:oklch(.637 .237 25.331);--border:oklch(.269 0 0);--input:oklch(.269 0 0);--ring:oklch(.439 0 0);--chart-1:oklch(.488 .243 264.376);--chart-2:oklch(.696 .17 162.48);--chart-3:oklch(.769 .188 70.08);--chart-4:oklch(.627 .265 303.9);--chart-5:oklch(.645 .246 16.439);--sidebar:oklch(.205 0 0);--sidebar-foreground:oklch(.985 0 0);--sidebar-primary:oklch(.488 .243 264.376);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.269 0 0);--sidebar-accent-foreground:oklch(.985 0 0);--sidebar-border:oklch(.269 0 0);--sidebar-ring:oklch(.439 0 0)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgb(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgb(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.react-flow{--xy-theme-edge-hover: black;--xy-theme-color-focus: #e8e8e8;--xy-node-border-default: 1px solid #ededed;--xy-node-boxshadow-default: 0px 3.54px 4.55px 0px #00000005, 0px 3.54px 4.55px 0px #0000000d, 0px .51px 1.01px 0px #0000001a;--xy-node-border-radius-default: 8px}.react-flow.dark{--xy-node-boxshadow-default: 0px 3.54px 4.55px 0px rgba(255, 255, 255, .05), 0px 3.54px 4.55px 0px rgba(255, 255, 255, .13), 0px .51px 1.01px 0px rgba(255, 255, 255, .2);--xy-theme-edge-hover: white;--xy-theme-color-focus: #535353}.react-flow__node{box-shadow:var(--xy-node-boxshadow-default);border-radius:var(--xy-node-border-radius-default);background-color:var(--xy-node-background-color-default);display:flex;justify-content:center;align-items:center;text-align:center;padding:10px;font-size:12px;flex-direction:column;border:var(--xy-node-border-default);color:var(--xy-node-color, var(--xy-node-color-default))}.react-flow__node.selectable:focus{box-shadow:0 0 0 4px var(--xy-theme-color-focus);border-color:#d9d9d9}.react-flow__node.selectable:focus:active{box-shadow:var(--xy-node-boxshadow-default)}.react-flow__node.selectable:hover,.react-flow__node.draggable:hover{border-color:var(--xy-theme-hover)}.react-flow__node.selectable.selected{border-color:var(--xy-theme-selected);box-shadow:var(--xy-node-boxshadow-default)}.react-flow__node-group{background-color:#cfb6ff66;border-color:#9e86ed}.react-flow__edge.selectable:hover .react-flow__edge-path,.react-flow__edge.selectable.selected .react-flow__edge-path{stroke:var(--xy-theme-edge-hover)}.enter-connection.react-flow__handle,.exit-connection.react-flow__handle{background-color:var(--xy-handle-background-color-default);width:17px;height:17px;border-radius:0;clip-path:polygon(0% 0%,100% 50%,0% 100%)}.react-flow__handle{background-color:var(--xy-handle-background-color-default);width:16px;height:16px;border-radius:50%}.react-flow__handle.connectionindicator:hover{pointer-events:all;border-color:var(--xy-theme-edge-hover);background-color:#fff}.react-flow__handle.connectionindicator:focus,.react-flow__handle.connectingfrom,.react-flow__handle.connectingto{border-color:var(--xy-theme-edge-hover)}.react-flow__handle.connectingto{background:#ff6060}.react-flow__handle.valid{background:#5d9}.react-flow__node-resizer{border-radius:0;border:none}.react-flow__resize-control.handle{background-color:#fff;border-color:#9e86ed;border-radius:0;width:5px;height:5px}path.react-flow__edge-path{stroke-width:4}path.react-flow__edge-path:hover{stroke-width:10}