Flowfile 0.3.0__py3-none-any.whl → 0.3.0.1__py3-none-any.whl

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.

Potentially problematic release.


This version of Flowfile might be problematic. Click here for more details.

Files changed (147) hide show
  1. flowfile/__init__.py +13 -6
  2. flowfile/__main__.py +51 -15
  3. flowfile/api.py +379 -0
  4. flowfile/web/__init__.py +155 -0
  5. flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
  6. flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
  7. flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
  8. flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
  9. flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
  10. flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
  11. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
  12. flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
  13. flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
  14. flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
  15. flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
  16. flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
  17. flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
  18. flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
  19. flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
  20. flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
  21. flowfile/web/static/assets/Filter-90856b4f.js +238 -0
  22. flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
  23. flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
  24. flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
  25. flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
  26. flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
  27. flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
  28. flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
  29. flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
  30. flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
  31. flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
  32. flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
  33. flowfile/web/static/assets/Join-41c0f331.css +109 -0
  34. flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
  35. flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
  36. flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
  37. flowfile/web/static/assets/Output-48f81019.css +2642 -0
  38. flowfile/web/static/assets/Output-5b35eee8.js +536 -0
  39. flowfile/web/static/assets/Pivot-7164087c.js +408 -0
  40. flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
  41. flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
  42. flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
  43. flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
  44. flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
  45. flowfile/web/static/assets/Read-65966a3e.js +701 -0
  46. flowfile/web/static/assets/Read-80dc1675.css +197 -0
  47. flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
  48. flowfile/web/static/assets/RecordId-826dc095.js +339 -0
  49. flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
  50. flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
  51. flowfile/web/static/assets/Select-085f05cc.js +231 -0
  52. flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
  53. flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
  54. flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
  55. flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
  56. flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
  57. flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
  58. flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
  59. flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
  60. flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
  61. flowfile/web/static/assets/Union-fca91665.js +145 -0
  62. flowfile/web/static/assets/Unique-a59f830e.js +273 -0
  63. flowfile/web/static/assets/Unique-b5615727.css +51 -0
  64. flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
  65. flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
  66. flowfile/web/static/assets/airbyte-292aa232.png +0 -0
  67. flowfile/web/static/assets/api-22b338bd.js +60 -0
  68. flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
  69. flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
  70. flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
  71. flowfile/web/static/assets/designer-2394122a.css +10697 -0
  72. flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
  73. flowfile/web/static/assets/documentation-08045cf2.js +33 -0
  74. flowfile/web/static/assets/documentation-12216a74.css +50 -0
  75. flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
  76. flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
  77. flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
  78. flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
  79. flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
  80. flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
  81. flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
  82. flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
  83. flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
  84. flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
  85. flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
  86. flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
  87. flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
  88. flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
  89. flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
  90. flowfile/web/static/assets/filter-d7708bda.png +0 -0
  91. flowfile/web/static/assets/formula-eeeb1611.png +0 -0
  92. flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
  93. flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
  94. flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
  95. flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
  96. flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
  97. flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
  98. flowfile/web/static/assets/group_by-80561fc3.png +0 -0
  99. flowfile/web/static/assets/index-552863fd.js +58652 -0
  100. flowfile/web/static/assets/index-681a3ed0.css +8843 -0
  101. flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
  102. flowfile/web/static/assets/join-349043ae.png +0 -0
  103. flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
  104. flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
  105. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
  106. flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
  107. flowfile/web/static/assets/output-06ec0371.png +0 -0
  108. flowfile/web/static/assets/pivot-9660df51.png +0 -0
  109. flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
  110. flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
  111. flowfile/web/static/assets/record_id-0b15856b.png +0 -0
  112. flowfile/web/static/assets/sample-693a88b5.png +0 -0
  113. flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
  114. flowfile/web/static/assets/select-b0d0437a.png +0 -0
  115. flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
  116. flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
  117. flowfile/web/static/assets/sort-2aa579f0.png +0 -0
  118. flowfile/web/static/assets/summarize-2a099231.png +0 -0
  119. flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
  120. flowfile/web/static/assets/union-2d8609f4.png +0 -0
  121. flowfile/web/static/assets/unique-1958b98a.png +0 -0
  122. flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
  123. flowfile/web/static/assets/view-7a0f0be1.png +0 -0
  124. flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
  125. flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
  126. flowfile/web/static/flowfile.svg +47 -0
  127. flowfile/web/static/icons/flowfile.png +0 -0
  128. flowfile/web/static/images/airbyte.png +0 -0
  129. flowfile/web/static/images/flowfile.svg +47 -0
  130. flowfile/web/static/images/google.svg +1 -0
  131. flowfile/web/static/images/sheets.png +0 -0
  132. flowfile/web/static/index.html +22 -0
  133. flowfile/web/static/vite.svg +1 -0
  134. flowfile/web/static/vue.svg +1 -0
  135. {flowfile-0.3.0.dist-info → flowfile-0.3.0.1.dist-info}/METADATA +1 -1
  136. {flowfile-0.3.0.dist-info → flowfile-0.3.0.1.dist-info}/RECORD +146 -15
  137. {flowfile-0.3.0.dist-info → flowfile-0.3.0.1.dist-info}/entry_points.txt +1 -1
  138. flowfile_core/configs/settings.py +7 -32
  139. flowfile_core/flowfile/FlowfileFlow.py +4 -2
  140. flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
  141. flowfile_core/main.py +4 -1
  142. flowfile_core/schemas/input_schema.py +1 -8
  143. flowfile_frame/__init__.py +0 -1
  144. flowfile_frame/utils.py +0 -139
  145. flowfile_frame/__main__.py +0 -12
  146. {flowfile-0.3.0.dist-info → flowfile-0.3.0.1.dist-info}/LICENSE +0 -0
  147. {flowfile-0.3.0.dist-info → flowfile-0.3.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,197 @@
1
+ import { C as CodeLoader } from "./vue-content-loader.es-6b36f05e.js";
2
+ import { u as useNodeStore } from "./PopOver-b37ff9be.js";
3
+ import mainEditorRef from "./fullEditor-705c6ccb.js";
4
+ import { D as DropDownGeneric } from "./dropDownGeneric-50a91b99.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-65587f20.js";
6
+ import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, u as unref, i as createCommentVNode, h as createBlock, _ as _export_sfc, n as onMounted, R as nextTick, a6 as Teleport } from "./index-552863fd.js";
7
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cf9bae3c.js";
8
+ import "./vue-codemirror.esm-dd17b478.js";
9
+ import "./dropDown-5e7e9a5a.js";
10
+ import "./designer-e5bbe26f.js";
11
+ const createFormulaInput = (field_name = "", data_type = "String", function_def = "") => {
12
+ const fieldInput = {
13
+ name: field_name,
14
+ data_type
15
+ };
16
+ const functionInput = {
17
+ field: fieldInput,
18
+ function: function_def
19
+ };
20
+ return functionInput;
21
+ };
22
+ const createFormulaNode = (flowId = -1, nodeId = -1, pos_x = 0, pos_y = 0, field_name = "output_field", data_type = "String", function_def = "") => {
23
+ const func_info = createFormulaInput(field_name, data_type, function_def);
24
+ const nodeFunction = {
25
+ flow_id: flowId,
26
+ node_id: nodeId,
27
+ pos_x,
28
+ pos_y,
29
+ function: func_info,
30
+ cache_results: false
31
+ };
32
+ return nodeFunction;
33
+ };
34
+ const _hoisted_1$1 = {
35
+ key: 0,
36
+ class: "listbox-wrapper"
37
+ };
38
+ const _hoisted_2 = { key: 0 };
39
+ const _hoisted_3 = {
40
+ key: 0,
41
+ class: "selector-container"
42
+ };
43
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
44
+ __name: "formula",
45
+ setup(__props, { expose: __expose }) {
46
+ const showEditor = ref(false);
47
+ const nodeStore = useNodeStore();
48
+ const dataLoaded = ref(false);
49
+ const outputColumnSelector = ref({
50
+ selectedValue: ""
51
+ });
52
+ const editorChild = ref(null);
53
+ const nodeFormula = ref(null);
54
+ const formulaInput = ref(null);
55
+ const dataTypes = nodeStore.getDataTypes();
56
+ const nodeData = ref(null);
57
+ const loadNodeData = async (nodeId) => {
58
+ var _a, _b;
59
+ nodeData.value = await nodeStore.getNodeData(nodeId, false);
60
+ if (nodeData.value && nodeData.value.setting_input && nodeData.value.setting_input.is_setup) {
61
+ nodeFormula.value = nodeData.value.setting_input;
62
+ if (nodeFormula.value && nodeFormula.value.function) {
63
+ formulaInput.value = nodeFormula.value.function;
64
+ outputColumnSelector.value.selectedValue = formulaInput.value.field.name;
65
+ }
66
+ } else {
67
+ nodeFormula.value = createFormulaNode(nodeStore.flow_id, nodeStore.node_id);
68
+ nodeFormula.value.depending_on_id = (_b = (_a = nodeData.value) == null ? void 0 : _a.main_input) == null ? void 0 : _b.node_id;
69
+ formulaInput.value = nodeFormula.value.function;
70
+ }
71
+ showEditor.value = true;
72
+ dataLoaded.value = true;
73
+ };
74
+ const pushNodeData = async () => {
75
+ if (!nodeFormula.value || !formulaInput.value) {
76
+ return;
77
+ }
78
+ nodeFormula.value.is_setup = true;
79
+ nodeFormula.value.function.function = nodeStore.inputCode;
80
+ nodeStore.updateSettings(nodeFormula);
81
+ showEditor.value = false;
82
+ dataLoaded.value = false;
83
+ };
84
+ __expose({ loadNodeData, pushNodeData });
85
+ return (_ctx, _cache) => {
86
+ return dataLoaded.value && nodeFormula.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
87
+ createVNode(GenericNodeSettings, {
88
+ modelValue: nodeFormula.value,
89
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => nodeFormula.value = $event)
90
+ }, {
91
+ default: withCtx(() => {
92
+ var _a, _b;
93
+ return [
94
+ unref(nodeStore).is_loaded ? (openBlock(), createElementBlock("div", _hoisted_2, [
95
+ formulaInput.value && nodeFormula.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
96
+ createVNode(DropDownGeneric, {
97
+ modelValue: formulaInput.value.field.name,
98
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formulaInput.value.field.name = $event),
99
+ title: "Output field",
100
+ "allow-other": true,
101
+ "option-list": ((_b = (_a = nodeData.value) == null ? void 0 : _a.main_input) == null ? void 0 : _b.columns) ?? [],
102
+ placeholder: "Select or create field"
103
+ }, null, 8, ["modelValue", "option-list"]),
104
+ createVNode(DropDownGeneric, {
105
+ modelValue: formulaInput.value.field.data_type,
106
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formulaInput.value.field.data_type = $event),
107
+ "option-list": unref(dataTypes),
108
+ title: "Data type",
109
+ "allow-other": false
110
+ }, null, 8, ["modelValue", "option-list"])
111
+ ])) : createCommentVNode("", true),
112
+ showEditor.value && formulaInput.value ? (openBlock(), createBlock(mainEditorRef, {
113
+ key: 1,
114
+ ref_key: "editorChild",
115
+ ref: editorChild,
116
+ "editor-string": formulaInput.value.function
117
+ }, null, 8, ["editor-string"])) : createCommentVNode("", true)
118
+ ])) : createCommentVNode("", true)
119
+ ];
120
+ }),
121
+ _: 1
122
+ }, 8, ["modelValue"])
123
+ ])) : (openBlock(), createBlock(unref(CodeLoader), { key: 1 }));
124
+ };
125
+ }
126
+ });
127
+ const formula_vue_vue_type_style_index_0_scoped_fc8f2584_lang = "";
128
+ const editorInput = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-fc8f2584"]]);
129
+ const _hoisted_1 = { ref: "el" };
130
+ const _sfc_main = /* @__PURE__ */ defineComponent({
131
+ __name: "Formula",
132
+ props: {
133
+ nodeId: {
134
+ type: Number,
135
+ required: true
136
+ }
137
+ },
138
+ setup(__props) {
139
+ const nodeStore = useNodeStore();
140
+ const childComp = ref(null);
141
+ const drawer = ref(false);
142
+ const props = __props;
143
+ const closeOnDrawer = () => {
144
+ var _a;
145
+ (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
146
+ drawer.value = false;
147
+ nodeStore.isDrawerOpen = false;
148
+ };
149
+ const openDrawer = async () => {
150
+ if (nodeStore.node_id === props.nodeId) {
151
+ return;
152
+ }
153
+ nodeStore.closeDrawer();
154
+ drawer.value = true;
155
+ const drawerOpen = nodeStore.isDrawerOpen;
156
+ nodeStore.isDrawerOpen = true;
157
+ await nextTick();
158
+ if (nodeStore.node_id === props.nodeId && drawerOpen) {
159
+ return;
160
+ }
161
+ if (childComp.value) {
162
+ childComp.value.loadNodeData(props.nodeId);
163
+ nodeStore.openDrawer(closeOnDrawer);
164
+ }
165
+ };
166
+ onMounted(async () => {
167
+ await nextTick();
168
+ });
169
+ return (_ctx, _cache) => {
170
+ return openBlock(), createElementBlock("div", _hoisted_1, [
171
+ createVNode(NodeButton, {
172
+ ref: "nodeButton",
173
+ "node-id": __props.nodeId,
174
+ "image-src": "formula.png",
175
+ title: `${__props.nodeId}: Formula`,
176
+ onClick: openDrawer
177
+ }, null, 8, ["node-id", "title"]),
178
+ drawer.value ? (openBlock(), createBlock(Teleport, {
179
+ key: 0,
180
+ to: "#nodesettings"
181
+ }, [
182
+ createVNode(NodeTitle, {
183
+ title: "Formula",
184
+ intro: "Create a new column with a formula"
185
+ }),
186
+ createVNode(editorInput, {
187
+ ref_key: "childComp",
188
+ ref: childComp
189
+ }, null, 512)
190
+ ])) : createCommentVNode("", true)
191
+ ], 512);
192
+ };
193
+ }
194
+ });
195
+ export {
196
+ _sfc_main as default
197
+ };
@@ -0,0 +1,17 @@
1
+ .x-flip[data-v-fc8f2584] {
2
+ transform: scaleX(-1);
3
+ }
4
+ .va-navbar__item[data-v-fc8f2584] {
5
+ cursor: pointer;
6
+ margin-bottom: 20px; /* Added margin for spacing */
7
+ }
8
+ .data-type-select[data-v-fc8f2584] {
9
+ margin-top: 10px;
10
+ margin-bottom: 20px;
11
+ }
12
+ .selector-container[data-v-fc8f2584] {
13
+ display: flex; /* Make children align horizontally */
14
+ align-items: center; /* Center items vertically */
15
+ gap: 10px; /* Add space between items */
16
+ margin-bottom: 12px; /* Added padding between selector and editor */
17
+ }
@@ -0,0 +1,254 @@
1
+
2
+ /* Modern styling for an AI app */
3
+ .fuzzy-join-container[data-v-99f9b22f] {
4
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
5
+ color: #1a202c;
6
+ max-width: 100%;
7
+ }
8
+
9
+ /* Tabs Navigation */
10
+ .tabs-navigation[data-v-99f9b22f] {
11
+ display: flex;
12
+ border-bottom: 1px solid #e2e8f0;
13
+ margin-bottom: 1.25rem;
14
+ background-color: #f8fafc;
15
+ border-radius: 8px 8px 0 0;
16
+ overflow: hidden;
17
+ }
18
+ .tab-button[data-v-99f9b22f] {
19
+ background: none;
20
+ border: none;
21
+ padding: 0.75rem 1.25rem;
22
+ font-size: 0.9rem;
23
+ font-weight: 500;
24
+ color: #718096;
25
+ cursor: pointer;
26
+ transition: all 0.2s ease;
27
+ border-bottom: 2px solid transparent;
28
+ outline: none;
29
+ flex: 1;
30
+ text-align: center;
31
+ }
32
+ .tab-button[data-v-99f9b22f]:hover {
33
+ color: #4a5568;
34
+ background-color: #edf2f7;
35
+ }
36
+ .tab-button.active[data-v-99f9b22f] {
37
+ border-bottom-color: #3182ce;
38
+ color: #3182ce;
39
+ background-color: #ebf8ff;
40
+ }
41
+ .tab-content[data-v-99f9b22f] {
42
+ min-height: 300px;
43
+ }
44
+
45
+ /* Card styling */
46
+ .settings-card[data-v-99f9b22f] {
47
+ background-color: #ffffff;
48
+ border-radius: 8px;
49
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
50
+ margin-bottom: 1.5rem;
51
+ border: 1px solid #edf2f7;
52
+ overflow: hidden;
53
+ }
54
+ .card-header[data-v-99f9b22f] {
55
+ padding: 1rem 1.25rem;
56
+ border-bottom: 1px solid #edf2f7;
57
+ background-color: #fafafa;
58
+ }
59
+ .section-title[data-v-99f9b22f] {
60
+ margin: 0;
61
+ font-size: 1rem;
62
+ font-weight: 600;
63
+ color: #2d3748;
64
+ }
65
+ .card-content[data-v-99f9b22f] {
66
+ padding: 1rem 1.25rem;
67
+ }
68
+
69
+ /* Join Settings */
70
+ .join-settings[data-v-99f9b22f] {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: 1.25rem;
74
+ }
75
+ .setting-panel[data-v-99f9b22f] {
76
+ background-color: #f8fafc;
77
+ border-radius: 6px;
78
+ padding: 1rem;
79
+ border: 1px solid #edf2f7;
80
+ transition: all 0.2s ease;
81
+ }
82
+ .setting-panel[data-v-99f9b22f]:hover {
83
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
84
+ border-color: #e2e8f0;
85
+ }
86
+ .setting-header[data-v-99f9b22f] {
87
+ display: flex;
88
+ justify-content: space-between;
89
+ align-items: center;
90
+ margin-bottom: 1rem;
91
+ }
92
+ .setting-title[data-v-99f9b22f] {
93
+ font-size: 0.95rem;
94
+ font-weight: 600;
95
+ color: #4a5568;
96
+ margin: 0;
97
+ display: flex;
98
+ align-items: center;
99
+ }
100
+ .unavailable-field[data-v-99f9b22f] {
101
+ margin-right: 0.5rem;
102
+ }
103
+
104
+ /* Column Selection Grid */
105
+ .columns-grid[data-v-99f9b22f] {
106
+ display: grid;
107
+ grid-template-columns: 1fr 1fr;
108
+ gap: 1rem;
109
+ margin-bottom: 1rem;
110
+ }
111
+ .column-field[data-v-99f9b22f] {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: 0.5rem;
115
+ }
116
+ .column-field label[data-v-99f9b22f] {
117
+ font-size: 0.875rem;
118
+ font-weight: 500;
119
+ color: #4a5568;
120
+ }
121
+
122
+ /* Settings Grid */
123
+ .settings-grid[data-v-99f9b22f] {
124
+ display: grid;
125
+ grid-template-columns: 1fr 1fr;
126
+ gap: 1rem;
127
+ }
128
+ .threshold-field[data-v-99f9b22f],
129
+ .select-field[data-v-99f9b22f] {
130
+ display: flex;
131
+ flex-direction: column;
132
+ gap: 0.5rem;
133
+ }
134
+ .threshold-field label[data-v-99f9b22f],
135
+ .select-field label[data-v-99f9b22f] {
136
+ font-size: 0.875rem;
137
+ font-weight: 500;
138
+ color: #4a5568;
139
+ }
140
+
141
+ /* Range Input */
142
+ .range-container[data-v-99f9b22f] {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 1rem;
146
+ }
147
+ .range-slider[data-v-99f9b22f] {
148
+ flex: 1;
149
+ -webkit-appearance: none;
150
+ width: 100%;
151
+ height: 6px;
152
+ border-radius: 3px;
153
+ background: #e2e8f0;
154
+ outline: none;
155
+ }
156
+ .range-slider[data-v-99f9b22f]::-webkit-slider-thumb {
157
+ -webkit-appearance: none;
158
+ appearance: none;
159
+ width: 16px;
160
+ height: 16px;
161
+ border-radius: 50%;
162
+ background: #3182ce;
163
+ cursor: pointer;
164
+ border: 2px solid white;
165
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
166
+ }
167
+ .range-slider[data-v-99f9b22f]::-moz-range-thumb {
168
+ width: 16px;
169
+ height: 16px;
170
+ border-radius: 50%;
171
+ background: #3182ce;
172
+ cursor: pointer;
173
+ border: 2px solid white;
174
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
175
+ }
176
+ .range-value[data-v-99f9b22f] {
177
+ min-width: 3rem;
178
+ text-align: right;
179
+ font-size: 0.875rem;
180
+ font-weight: 500;
181
+ color: #4a5568;
182
+ }
183
+
184
+ /* Select Input */
185
+ .select-wrapper[data-v-99f9b22f] {
186
+ position: relative;
187
+ }
188
+ .select-input[data-v-99f9b22f] {
189
+ width: 100%;
190
+ padding: 0.5rem 0.75rem;
191
+ font-size: 0.875rem;
192
+ border: 1px solid #e2e8f0;
193
+ border-radius: 6px;
194
+ background-color: #fff;
195
+ color: #4a5568;
196
+ appearance: none;
197
+ outline: none;
198
+ transition: all 0.2s ease;
199
+ }
200
+ .select-input[data-v-99f9b22f]:focus {
201
+ border-color: #3182ce;
202
+ box-shadow: 0 0 0 2px rgba(49, 130, 206, 0.15);
203
+ }
204
+
205
+ /* Buttons */
206
+ .add-button[data-v-99f9b22f],
207
+ .remove-button[data-v-99f9b22f] {
208
+ padding: 0.5rem 0.75rem;
209
+ border: 1px solid #e2e8f0;
210
+ border-radius: 6px;
211
+ background-color: #f7fafc;
212
+ color: #4a5568;
213
+ font-size: 0.875rem;
214
+ font-weight: 500;
215
+ cursor: pointer;
216
+ transition: all 0.2s ease;
217
+ }
218
+ .add-button[data-v-99f9b22f] {
219
+ background-color: #ebf8ff;
220
+ color: #3182ce;
221
+ margin-top: 0.5rem;
222
+ width: 100%;
223
+ display: flex;
224
+ justify-content: center;
225
+ align-items: center;
226
+ }
227
+ .add-button[data-v-99f9b22f]:hover {
228
+ background-color: #bee3f8;
229
+ }
230
+ .remove-button[data-v-99f9b22f] {
231
+ background-color: transparent;
232
+ border: 1px solid #e2e8f0;
233
+ }
234
+ .remove-button[data-v-99f9b22f]:hover {
235
+ background-color: #fee2e2;
236
+ color: #e53e3e;
237
+ border-color: #fbd5d5;
238
+ }
239
+ .select-section[data-v-99f9b22f] {
240
+ margin-top: 1rem;
241
+ }
242
+ .select-section + .select-section[data-v-99f9b22f] {
243
+ margin-top: 2rem;
244
+ padding-top: 1.5rem;
245
+ border-top: 1px solid #edf2f7;
246
+ }
247
+
248
+ /* Responsive adjustments */
249
+ @media (max-width: 768px) {
250
+ .columns-grid[data-v-99f9b22f],
251
+ .settings-grid[data-v-99f9b22f] {
252
+ grid-template-columns: 1fr;
253
+ }
254
+ }