@shapesos/clay 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts.cjs +695 -246
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.d.cts +133 -5
- package/dist/artifacts.d.ts +133 -5
- package/dist/artifacts.js +7 -2
- package/dist/blocks.cjs +705 -259
- package/dist/blocks.cjs.map +1 -1
- package/dist/blocks.css +1 -1
- package/dist/blocks.d.cts +8 -10
- package/dist/blocks.d.ts +8 -10
- package/dist/blocks.js +3 -2
- package/dist/capture.cjs +220 -0
- package/dist/capture.cjs.map +1 -0
- package/dist/capture.d.cts +113 -0
- package/dist/capture.d.ts +113 -0
- package/dist/capture.js +17 -0
- package/dist/chat.cjs +724 -287
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.d.cts +2 -2
- package/dist/chat.d.ts +2 -2
- package/dist/chat.js +4 -3
- package/dist/{chunk-36CB624W.js → chunk-26XVDY6Z.js} +3 -3
- package/dist/chunk-26XVDY6Z.js.map +1 -0
- package/dist/{chunk-Z5JWF24N.js → chunk-DT44KNCV.js} +367 -82
- package/dist/chunk-DT44KNCV.js.map +1 -0
- package/dist/chunk-JAGNXEWK.js +116 -0
- package/dist/chunk-JAGNXEWK.js.map +1 -0
- package/dist/chunk-LXYCT4YO.js +7 -0
- package/dist/chunk-LXYCT4YO.js.map +1 -0
- package/dist/{chunk-FFX3CAOX.js → chunk-QH2WW2MW.js} +3 -3
- package/dist/chunk-RSRNSWJN.js +1 -0
- package/dist/chunk-RSRNSWJN.js.map +1 -0
- package/dist/dom-to-image-NATF3446.js +21 -0
- package/dist/dom-to-image-NATF3446.js.map +1 -0
- package/dist/index.cjs +763 -317
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +9 -4
- package/dist/{types-C0BvwliI.d.cts → types-BzXPBy6s.d.cts} +39 -41
- package/dist/{types-uPfn67Dc.d.ts → types-CW45GBXl.d.cts} +25 -13
- package/dist/{types-DCutaXjZ.d.cts → types-D1b8v7EY.d.ts} +25 -13
- package/dist/{types-C5bFH4v3.d.ts → types-GCkXbyFm.d.ts} +39 -41
- package/package.json +12 -2
- package/dist/chunk-36CB624W.js.map +0 -1
- package/dist/chunk-AQEJRMRN.js +0 -1
- package/dist/chunk-Z5JWF24N.js.map +0 -1
- /package/dist/{chunk-AQEJRMRN.js.map → capture.js.map} +0 -0
- /package/dist/{chunk-FFX3CAOX.js.map → chunk-QH2WW2MW.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __esm = (fn, res) => function __init() {
|
|
9
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
|
+
};
|
|
8
11
|
var __commonJS = (cb, mod2) => function __require() {
|
|
9
12
|
return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports;
|
|
10
13
|
};
|
|
@@ -30,6 +33,239 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
|
|
|
30
33
|
));
|
|
31
34
|
var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
|
|
32
35
|
|
|
36
|
+
// src/tokens/colors.ts
|
|
37
|
+
var colors;
|
|
38
|
+
var init_colors = __esm({
|
|
39
|
+
"src/tokens/colors.ts"() {
|
|
40
|
+
"use strict";
|
|
41
|
+
colors = {
|
|
42
|
+
// White
|
|
43
|
+
white: "#FFFFFF",
|
|
44
|
+
"white-alpha-85": "rgba(255, 255, 255, 0.85)",
|
|
45
|
+
"white-alpha-40": "rgba(255, 255, 255, 0.40)",
|
|
46
|
+
// Brown
|
|
47
|
+
"brown-10": "#FAF9F8",
|
|
48
|
+
"brown-20": "#F5F3F0",
|
|
49
|
+
"brown-30": "#EEEBE5",
|
|
50
|
+
"brown-40": "#E6E2DA",
|
|
51
|
+
"brown-50": "#CFCBC4",
|
|
52
|
+
"brown-60": "#A19E99",
|
|
53
|
+
"brown-70": "#73716D",
|
|
54
|
+
"brown-80": "#5C5A57",
|
|
55
|
+
"brown-90": "#2E2D2C",
|
|
56
|
+
"brown-100": "#171716",
|
|
57
|
+
"brown-alpha-12": "rgba(23, 23, 22, 0.12)",
|
|
58
|
+
"brown-alpha-20": "rgba(23, 23, 22, 0.20)",
|
|
59
|
+
"brown-alpha-55": "rgba(23, 23, 22, 0.55)",
|
|
60
|
+
"brown-alpha-70": "rgba(23, 23, 22, 0.70)",
|
|
61
|
+
"brown-alpha-80": "rgba(23, 23, 22, 0.80)",
|
|
62
|
+
"brown-alpha-90": "rgba(23, 23, 22, 0.90)",
|
|
63
|
+
// Fuchsia
|
|
64
|
+
"fuchsia-50": "#FAF5FF",
|
|
65
|
+
"fuchsia-300": "#F0ABFC",
|
|
66
|
+
"fuchsia-500": "#D946EF",
|
|
67
|
+
"fuchsia-600": "#C026D3",
|
|
68
|
+
"fuchsia-800": "#86198F",
|
|
69
|
+
// Pink
|
|
70
|
+
"pink-50": "#FDF2F8",
|
|
71
|
+
"pink-400": "#F472B6",
|
|
72
|
+
"pink-600": "#DB2777",
|
|
73
|
+
"pink-800": "#9D174D",
|
|
74
|
+
// Violet
|
|
75
|
+
"violet-50": "#F5F3FF",
|
|
76
|
+
"violet-400": "#A78BFA",
|
|
77
|
+
"violet-600": "#7C3AED",
|
|
78
|
+
"violet-800": "#5B21B6",
|
|
79
|
+
// Indigo
|
|
80
|
+
"indigo-50": "#EEF2FF",
|
|
81
|
+
"indigo-400": "#818CF8",
|
|
82
|
+
"indigo-500": "#6366F1",
|
|
83
|
+
"indigo-600": "#4F46E5",
|
|
84
|
+
"indigo-800": "#3730A3",
|
|
85
|
+
// Cyan
|
|
86
|
+
"cyan-50": "#E7FEFF",
|
|
87
|
+
"cyan-300": "#67E8F9",
|
|
88
|
+
"cyan-600": "#0891B2",
|
|
89
|
+
"cyan-900": "#164E63",
|
|
90
|
+
// Teal
|
|
91
|
+
"teal-50": "#EBFDF9",
|
|
92
|
+
"teal-300": "#5EEAD4",
|
|
93
|
+
"teal-600": "#0D9488",
|
|
94
|
+
// Rose
|
|
95
|
+
"rose-400": "#FB7185",
|
|
96
|
+
// Purple
|
|
97
|
+
"purple-400": "#C084FC",
|
|
98
|
+
// Blue
|
|
99
|
+
"blue-50": "#EFF6FF",
|
|
100
|
+
"blue-100": "#DBEAFE",
|
|
101
|
+
"blue-300": "#93C5FD",
|
|
102
|
+
"blue-400": "#60A5FA",
|
|
103
|
+
"blue-600": "#2563EB",
|
|
104
|
+
"blue-800": "#1E40AF",
|
|
105
|
+
// Sky
|
|
106
|
+
"sky-300": "#7DD3FC",
|
|
107
|
+
// Green
|
|
108
|
+
"green-50": "#ECF9F0",
|
|
109
|
+
"green-100": "#D4F1D9",
|
|
110
|
+
"green-400": "#3DC269",
|
|
111
|
+
"green-700": "#277C43",
|
|
112
|
+
"green-800": "#1C5930",
|
|
113
|
+
// Orange
|
|
114
|
+
"orange-50": "#FFF7ED",
|
|
115
|
+
"orange-100": "#FFEDD5",
|
|
116
|
+
"orange-200": "#FED7AA",
|
|
117
|
+
"orange-500": "#F97316",
|
|
118
|
+
"orange-600": "#EA580C",
|
|
119
|
+
// Red
|
|
120
|
+
"red-50": "#FEF2F2",
|
|
121
|
+
"red-100": "#FEE2E2",
|
|
122
|
+
"red-200": "#FECACA",
|
|
123
|
+
"red-400": "#F7776C",
|
|
124
|
+
"red-500": "#EF4444",
|
|
125
|
+
"red-600": "#DC2626"
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// src/capture/capture-exclude-attribute.ts
|
|
131
|
+
var CAPTURE_EXCLUDE_ATTRIBUTE;
|
|
132
|
+
var init_capture_exclude_attribute = __esm({
|
|
133
|
+
"src/capture/capture-exclude-attribute.ts"() {
|
|
134
|
+
"use strict";
|
|
135
|
+
CAPTURE_EXCLUDE_ATTRIBUTE = "data-clay-capture-exclude";
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// src/capture/_font-data-urls.generated.ts
|
|
140
|
+
var GEIST_LATIN_WOFF2_DATA_URL, CRIMSON_PRO_LATIN_WOFF2_DATA_URL;
|
|
141
|
+
var init_font_data_urls_generated = __esm({
|
|
142
|
+
"src/capture/_font-data-urls.generated.ts"() {
|
|
143
|
+
"use strict";
|
|
144
|
+
GEIST_LATIN_WOFF2_DATA_URL = "data:font/woff2;base64,d09GMgABAAAAAHLYABQAAAABAQgAAHJiAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoYFG4GfHhyHTD9IVkFSh1s/TVZBUjwGYD9TVEFUgTgAhRAvfhEICvZo3iMLhEIAMIGoaAE2AiQDiQAEIAWIGgeLSQwHGyLxFWxXY6CewOalNZfPMyrYrmbcDkTU+r1qNsKGjQMg3hwT/X9SUhlDE9iTFqA63e4PtWQjlBo5goYcMo0ZqbViQ0jvqjjmPNf7mgM3sj6o9UXp+5FQOzPJbOE3Jx5hd/ytpmpjm0pYR9BzruG68ZnXxBVYEMSHMTAwnWpYTZ0wG3f74drkjkO9/6wik1904hQkUpdYDWmJLZFY0pNBEcb7IndF19PSj1kEuE38iIQcX4SK1qgisnr6gFERPc4+OgJHpJCEZJaAxtzpl8/CAc8Rzfk/exe9hCSEEEII4fAAIZilNJgFLUVSVAJFvJRHwV/VaP29R8UpddoiNaXiVOXz+nnW8vzTuOd/7TP3wUxgI76kJCdlOHSryZ2cIZquptBglVCzlLbxtmnUViK7SXY3ySbepI23Th21In7G/T/8PXD3nBn2TjlRgXtD5X9y8/sLj1BKDapUxtT7bcyW//zF1njpmb9ZiFmfWWVarEkKASLEBdHC8/y9O39WtzE54I1pQBMnULgfMHXC/yed9r1BDQhtGTCKA5+y+w8Yu+u5KTKSj4v2ymuaz5wFYG/AcWQSNAC4Gc+jnNqMoTBjlTBQYlhwJCcyUAFAfd3JRQxiCQASnZhHqyFanw2SSW3yoCX0NbQNST3t3wtitjLDMjrC5AKDqIA84tpO+X06q19d3aKW2DLteMgws7s+RPtdEF0YdkmaA4IIKEPg+LL735x+fyVLjuNAgT8DDtDyE8VJ5/zdX+xoswDARzSdN21KaWKzLNlCv34uhbKnT9eI6JKKPh395+QWaAu0BXoHtIXfybyEh3836/8kJIGEQAIRQoAECxKklEmpQGl9rGsus5371L9E9JqP7HZnzdqZmk8LlCIJoX/k9iCCRPK2rIWh3PYL4J+AWGsmndQZSiFWlgOPgZDfTBA9mlsoDTKxz8xQv/38r2Up7Xf/esMojtKulKeklnaUQvEVkpgOEEUkKHYzvaO5v32jkPtSnpPkmC+vzpmFSM1ChCEkZmZqQ1ED6jKABowZGnBonv//5Ts7529ae2sUMo7ILxzFmpQ23KS7P9QiUaXLCBVnQXUjMR6jHCDqZv81T3ETF1IgRjKJJB6jsPi8Nst2/GZ9wAogFg0Avz5FhfaXZNmjGdM4u2Ovj9m5AFmWtePzAVIVIKiqtCnTXV2t97qtAh1g0Vb5e1PN9j8EYcVLSyr9y//yvwzHWjacAi9Url26i4tdgNhdENICJO8Wq7QAeeeF4gdFn0BS8hHgRVKekUNMdEofIH3zSZ2sZTgfpHMIoWhCyJ2L0k2fq9pFpXFRea4oO5eRnseb+MCsd5v0rcACzGRv+jFSDL5rR3UVmRIi8/WOe9fUUvNIKU12j6zTMTxCIATCUNraqc9r6/omVq3JfU/2LaGEQYYiEoJIENcL3e/m91MrGjK6RrIPCSoSZQkEqSUm9d3XvQOzYiqtAy27c6EL4OPV3wvhCgBLAZ8AzmKjCObOihAGadQMEAWeVGgw8LQnvyyX5FkeJYJ28yAgeri/vhBImAZti/nf7CJ/usjUXBR6sFgmIo65HKSrbQ4BKwHpaBFUHkZoocuC6HIR7791yCyoIEMB/BLgHMA+wHoIUIDAf9gqBByCQYDnn/XrBzD/O7gICECv+OSXH37/oxc+evGj73/+zW8/+S7Nt6adaVIcEx+U7pSelL/zy7u/PqQt6yn9Gv16/Q79PmPOWDSWjWtMN06aaXPeituIHbfn7AXnJudW53bnbuce5wkX2Q/3V/eUffvB6n58v7hfqtjHOxW5EqykKn2V/ip22DscHG5Vhaq3qla1GjZ5dC1Qk2tKLX1gO3rcQbj+ZWvailucozRIw7SfrtelQ7VRa8jMn4WzT9yE5t35SjPZzLZaEi/Iwl88tn2+T5fb7by+OWCaZMNsXY/r43dlQ+1sjtJRY7XFBSme08lAz4WnUReneIGXOMMFFljhyCK8gjyMhSQjmEbIU9AY6dIlzShlFtN87E/81J/5mU/FzUQrmAVZIISPrxB7yUZST5pJO+mG4zAN52EWFiFTllKqQqwTO/ahfXvSnPT76VC5AUU87a+nfHZt3pxPrrOsJLgEIcDFG7lwf2tccvQTuBYACKDzvG7ablGymjetVNpiyi2hbMcNBVFKqMABAATg70VLW0wZVxVWAlmAUF5kCADnUQEOHqWahWkqYG7/a8tRdlwUmQBWZ9ZXlID43IrcYhBflFmlBSsU8E4Z40S9e97iwlsrtCDreF0gubh4fx8QAIKGLg4FvSio1PWEALOnvaKu9ATayqQSofhoeBACBg15iBU0JAs2hAJXV9fgIWBYNwJheiOAUHhFAhVH1sydmDMy41JSr+zsJRlVf6gY0JA2lkFDCGCjSKFiq/nDeGjwYmALWEcAt6sWsHlgRNWqVvw98jV9EDt/t6dJ4t38UWbZvNuC7zRW2/yOyRe4u3cTvMM85eBusFEccQn2k0cMrF+2bUoEc0Q0Cw35AJgLWuBptqK8NQxQJ79YEpIozULEpYRlx2qsRXMKCGV3QHai2S0OIuvP79huwNbY9k24R9KWqqkMEM061+nLuWQQ+Rm4LD/yqVz8plpK2c6Z7My6LEnXwN+csfSmq6E/Tg+OOoqCRcRH5wXQj76iMnJzL3liryh+gbvj6VbX2GODvYalBhta1eus2XcVyYCpygCPfQYhdpwFmPobyf0m0Q5fQFD2zTkYvxXNiI3Q6YbYubiiP79YtvIZGNag1Yzfw25N44dILrWOE/tGy07v+I7wtizXnozyygvx+XZSeGAY+aRs0Ynvt7pxlYldax4X5FlrG9ti3nrGhgxcWjSWT2mo37fRC6+vHq3cNEk9rWHcOUZi63kT9BnlQEKXX/YbzbHSkOe8du6C6aWTzdruMYlJOzhSYteOXvh3LrehC91O2A2R54sy2nJASFgckLmLiZqYZHoE3M551aqGndjctE57MNyLwb1Fawgyk8FeSauiw2xI7LQqYOaw6Z1QRvjO43xSsKfTaX7INVZ2SiQVWHJy2iTsVALOnv/6TlGOyNy6hNlwLTD8Z9ycKHdGvXW/3b5E9MBzDHoV/OxCnfqhwdWAu359A+AywAnAXsBaq50rhdh2RcwWcvtzgVIXcoBSbLaysi1L6dmTBP/S85VPLebSYKs6Pdh8tH4QvB3sApaqm6yJIDhz8B/rPhVTBf+52l19taC8+esGK1ZEoSUvixIU5WYbbDIvQuRKw/9mq7csbalqSiGGo9NBI48FCUopaNIXEhoXw138VzY86FYMucw285OptCEtqlyLWwukwGQNP5O8LzB3y32AUdjLUjRZWp8ZW3M1fb/czl606sIua1m64BrEsuEoidz0rjJA6/IGmTQqxkk7fH3Gr5oz3YEwT9v+jOhj/q2133BJDQg0R9WGeBLX2G5AGRFtAoRoh4eXaZdFhSI8JbHRocrBuzirxt9kXBVQZgiWpkGf2mu0uvMCjh20D/ssaczOzCZ4VW+wD2fc9SKmUyGkqbP4YC6k2goCp+MzAo4Lt32RWJiAqP8DqEaho3qyn6Cb5TR6pUKILZNAaqj1XJA6yOmhUhwRMWT/hP2vjGHAR9fML4cNG0kSCOZtzH9sYwB+KPe/rvdAE5itjuNwyb+ubUQWFj7flxVrSSYVGN0t27wtF3uCy9FcHWW++jEY8Fb5lvXJbbqUDLX3/P46HusWhwuM1t7424JxnZFwTe4341jYJbKJe7VN+OQ4Jvvq8wSXRAucgEN/t2pvr1+CcroGRq7VSUKnMU+X6l7dL6xitWr7GYTKP6m5P7l5KF5dF+wOx9ewPAD9HCw2sOG4j2pvMdD6jhG7HHhaL2xagjYzwTotcqvkJ5hDAdUYnuVhr/Viuo/do6cRrmptPFKBNc+qbXqeJepuWNYf37sd/2RMAItyJmV62GDjqh0u1dTW4h60pdVyb+75Qcor8mV2FXn8faldbosJTJT5mEPQnen8qeMs7Fa6QfdjHgvg1ZbHNP/kLDhG+RVeN1Oo5629XL4z6JZrDcegt5o+kt+0Soh7jL5r+7snuE7qZQtVm8uXM5Yh6un2HIx5OILHs9/GYu3QG/4xyE6redq069CpS7cevY474aRThgwbc94Fl113x133PfTIE89MeOO9KX/52z/+9Z8ffgoKwhAOiO6NALH/0e4smmndCW4eEWojYu3EUAfR00n4ugium4j0EF29Up+TRF+LmCEiyGlCcZbQDRPPJuAsmYbzZBLeJTPwPpmHj+US/2IEvgJJwtdkAr4hSZglEzBHELhI4nCJIDAv450Wx2EdZAq2SAoae3cABn8/NmbzNmdTttNmbLftuDoLerDH7Al73o4VU/AReWkAeznOOzpOGVOudsJO2pJm8vvqQhLCOEAtNSsjFCALMYBEU7dN+t1EY0R0oU5vIHWXObUdi5iq5Jpy/yp/CP1kTiVMt1wNzk8JkaMAEsgkAkRAQ2p2MD0UIAcqQKKrQ7ffnHGIERzuOgX9IgW0juXZQhGNRwuKe+gic9yPXG8HnOveYhkz36GCHrPiUCqrrpXW1i4aGqTYfSSUUH9gBtKvyk+pu6yjTW3bG7mshTEtVemEZSuCOo0CAyrDMKI1/N1QvnRc0NB8USn7tLRhrnrOmL8lk0oK0dFBZ5TBRXOdn0+yBP95o+fIhLiAtksPzdS6ngKbOdKRcZmnXOdaHXcuF2j68D4nj1iMgyapoQOvujO41Gxdjk5O4mR/Z2Qn7khkO8bvbqTKZU156rI2+lxl+DILdOdJ+TftWubGm6e1rpd3FQhqjgGdgcRLpSlo5lPDkdaypvbK206RbLwXO2et96Qd0U+QuC8k6RqKkXFzVsToa/MioW4uDcF1nZgYhbCo9bcs11Glipm3bVy58p42vIziqHNqZLDuD6rbS5o5jwQkQm4R97iMCvIOBCzUGkxI4f0zRt+f8ESIvRjTkyn/+FGovyoydZ9vAx+OeFVm+H5A9diI46htvsJK/eRpygPEPKK2VGtvSKCjvOotlMsI1J0jozpfaZ37G19ya1wj+1xJjaafAJwT1kdVKsy6jg/J9kAXSjiDbr7BKFxz5jJpajawGoorCce5f2bOCq8YGNnbAz0q2c+rla3hEdQqXGU0tT3Ztwm1QHMsY051861utJY5Mnm17QovFnTmRVCHDp1RJciOzlVYyxbtRxB4RdI+K3R2DsmqhDepv0jNkvAK6Iww4BIujfT7HqtA99av+RBeN+odHZqnxW5gRwlL4xGqr22Z2eBpcp7jLcwAbDBGo+soapNJg++5l9mH5xLD4jbaaZGCUq+9pMp3G7YvlzeaOYKLgISPfISwRysrsj4F1z73hyxzNABOjYken+yiDj5YnurFBWI02F61pRuf0GAESga1QgdeC0upyUWMIrjhRw2QJZyXIfA0ptobkw/rYsYcX2kUjwEuzm0WBic6iuXz3vWYmBie0oALBc5RjNgLvhkIHwR7bDyeNDNekUmpWYvLAhzF+3hK6Lj2uGcmk3xxKqCuIYOBTYBL7VZljrMl8p7zOVk/xwVWEhKq7M0Rj5Tel6LwJDESWGES4DhXsC1+FVAbSaj3L5YiYuohdJalyYWRS07cIAEG9hnMZz2OxSHSaP87LZU6f9f0aGWMa4bwrVk1gxNBWeg9bmN+yLkthL/EiGh01n5HXZr4BUbVHpvtpDivtb40D//FHIqTYeDRZnMQs2xsKx7nYsQwhcExKWEnHDPejyPWp6HL1ei7nqQFVYuLNh4jInTm85tVr9X6xjq/rC/ZV2X0aPWQ/pbxUWr0ES8d4ODau2d9dcU17qmaBR141Z3ABZDgCKDrKT1LeEfCuxAfTjObB5+mlyZ45t8xkItazLxzb/7mdbGWjTFhm/WsT9cQ+njXJMje1a8GCE4F8FgAZkLFeG/6bBZjXhjq4qdrKnQuSk9eMdNKf9BtRfW/M5loPAgG7UicUls1J7OMDi+afUcjOJ0pedfOIz5S3DOXfKO1m4xk7N+4zZ6cdEYEtcBQOsFLXyiXmv5Nz0OGfbo5MUc4VnBQowsij+KnrMWkZNFkvOusfaHBKbpunmwXdJrLpkcGf9yXDles6xbjeQQF1hlurdgl/j+3OY8axbkuvTuld6G7c04VO2ZZ3cUF1Do6kWDT5iuhBNAxV6/u0jWtNXfocZqjcT3iPqyGWmJ54bpRFea3ZEQfkq0b9ybqq3dhZfBRriuhMcVKeLslCzR0ur93Vnrw4I1+snvs5del/7W/UR7bMaetU2x1BpB4/0n4mio8RmjjAKNWMebaC3kMvb9K6+vKnAufB296rlBc20KnBxosjW2IHn1F9Fy5oXtne4400lGrcODR2ncPGVgzqBU68NKskC18ZqlkDbR4odZ2CAfw6wi/1QB66Yd4wujb7PsJ1IzXORoe4ntOucz1Du8I3dJDnzVw6c4Z9tk7eub/tJWiozCOfK1gZ6SwfsX+a/vOuVI+AGIa81fNFK5VXodjdWtmPf2tUX+dhcq/zsQ08PW1oS14YKVBxi2toT20Od79BFjrq1eNpBLWQrqPeArURFYg42gE6sWvMB5de03hyvBfOj7/ls39qYeB8N/zcSvBzYMWhtZfn7o5598XqtJvt9DNqsr/kOiFKB19/eBQIgvg598LTeotJ9Hb/DVH9tpbC6QWe38Esgn0DOU/XpyT/oS8VKJX1SFExdaHcwcHUlK8T4t+fKtecx03pNvwPlO1BcamFzrvskWuTy93xz0rPJhe7ZEJa7xpG73/+iZTwWEzzO83mp035rQLOdOgj8JyaowooDWqzXCqGsyWUafJAsN1r53gcp1sM+p9klurkweeuivfY3eyfgQIgIeoCsENS7wxmClUglY2icpp6+Cg2joC/sMVBY11BVQ6LmNb6rfwKq/cs8zt2gH8rjpQzzOfZBU1dPW/5VrWxVrH3O89kOWZJ+qcc0qF87RL4rKrKqd9z6NLXHMJc6yPjWJTN4r/iFM80GJXBbThkmpLAzsdvRBGFUPFPVpvniab7M2SLcapxx5FaEnrZUCaZT3MQVRtNgvYWg0k18KL6P9HJECYaAgEhIUNp0MHwsGB4xJA9OnDCRlBJIyJSJlgIZlBzNnC2ZFD7NnDKSggDhzgHDnicOKGwZ0HNk+edHnxpsOHDyGlABSBAiFBomDU1PiiRcPEmAlJkkIgVSpEQ0PfLOmoMuTDFChAVagQUqQIplgxqhIlMKVKIVpaXGUq0VWpxlSjhp5a9ZgaNDDQaA6+Zs245moh1aqV2DzzOGjTxkW7ds46dJDr1MlOly5i3bo56dHDVq9eCsedwHPSKYaGDOE57TQjZ51laswYa+edZ+mCC2QuusjEJZeQLrvM3g03OLrjLp577jF3330WHnjA3EMPWXjkEYnHHjP2xBMSTz1l7JkJZt54w8p779mYMsXVX8GBgImFMNAwMdERCDpY2Hh06MBxcBjj0kMnIGBDnz6CkBGMhDEmKSkOEyaESGYw5mzgbNmis2NHSq6Jq/XoXs3EwY3BM39UIfuqGhgFzcWgiIURoBZFeqj4chNBGAQYMVzgZqSpYeYUNRExJ2HGnRsHCi6c2ZPQJy59J2QVuwW66Sr6WSYsWJajQ5YT0C+Z3CUTGskUyZQ1W3Jm32NBFAIBS3PJc/Lpl9ef1lEzNlu2/L0WFYokQviYCFw8uvj02FJwpJaqWKMz/yt2CeP+UBwe8G3MHzcCOfa/aWi7j8AoRr5AV2r7wdG8jJQ/PuqGiMnbywX1UYPgJESoMOEiRIoSLUOmLNly5MqTr0jJiNnMpo0jbiPiXQS3gXADAAAAALCycXuyAAd6084t/bMQBdCVSxPImfy/+o4SBP9vxzGOjcLxeRKpZEnKfBr3fkMeS/8/l8Y0DXNwOEUNMSJapbeBuTaGBPvrfNX8F/m+w1GFvvWGIBJStvslHC1we9zllP1+KZcOiQycKY7yI9pRcRHLf6/vxOz7aOjZYUzyxtTjlJECmJOzVi7+nTjz5tJyqDtLW1YKFcci5VUouKgwPxP64zCWgGYh8bWYS6pLKyD8sm4GgVfhwNc7/zJwMdFR4NGt2lyWTh6iMovRt+dXRuxpjsC77nnGZvultSrlL+Sdh4YNsELBgMBNtjVL0gbwh1CQRHgIz2EuewHfJJhXcdUPL1H05KtwQhwMx2B+OMrTkTABqjZ3vV44gRBzjGZD1xKrcaOqJVZN68fPBOw8dSsi+/O0zsEgv1oOaPj+FBogrBBwCB+ikLgLYZdX2AA4SMr57kZ/wGv7q1UPqILzwveeEYIiKUx/x4jt6PcjxlJnCpqQiWgsTIUsJxFTBPEEyWyiTBQXP9UCPVNCNLSKMxybrSMwzkVMKgsDOWlIUzsovbwHFWZRikzTE8Tq5GLULQhPoKWgAdlYSdbwVsywW5tA4xPbGkBJEg0zyR/jT7Ma5DyAHHdhufErrwpJI+75thxcNMb8EJP13tJLMDsiqPyhPPlzLg9y87iYwE1PZ6np8IfxCBscGsbK8uYIMWttiGj5xywAlwsgJqV/Bh/uAsqj0xYh1PJge9nCWUvEhjwm+Kz+mTLDQHREQzjY0pMolZMqFTQyaClUKlc/+DvPJDdbmSSFEqQplkC9Pld0GILjaqKa9yLZMGAeBhgFSH4ICTc3RSBQQh8SKWoABtzAWmUTDEEOtvrCQkxwvJKnUVmqGdoaAihyNL/nDGJBJwhMML9ZhFI0SeegVh1d8eI+S+drmUqJDXiG7oqaruSr/a6YppEp4ssQAp4LDrgWsA2w/A/+nvHNzLvAae7Nh+14xMJHDT+h62lHn9f/Dux8D65+CCOflfHncPSr/0v3ZxwBzwEC8JZdHTXRbe56zHt44Aj+9Phx51/df6NOD4/YRnVj2NjQueyFJVfMV/uvtV+zXgtcZ35QdUN6S3/LeAu/rRznjgvHpeO6O+DTsLtVd/l3hXc9d4P3Ku/p7ssfFH8FP3Q+an4UfeJ90v+08Dv2s2vPGp9xn41NMH+onmiccE5MPi/8uexl9UvpS/lL02vpa/1rw2vza+i1+3XP69E38AjOD8/GtHu1N3670fjWf+bNW82Hzc/++7D9uHO/89KF8Yv5/YmLN14Sq6XqyctTV45due7KXVfFg56DE9eI9DUNf6PUmLpx1e2+drk9pCf0Qf3+e+GPBh4ClpNRDgwGoG+e5T/32vxv8/0Xf6/S/ohuJ+vGjqN1sAsAPHxeftXaYA0wfwErM6g4HW5h0EcCpYLcBRXk7iQBXB5fvafgHF/G5GlwuyPu8jG75oiASBhCLuTjH///ArQtziGBlwFkYkYBNiOgtfZ8gOUIwHbYtbcXVCEA9I9mMeK+rwIkOU+hEmQoUacNAuBkckC6YirnNkxX/hzbEcsiIM9yG2Y76VbMTdJ150tWLCyydXG13XFBsFgDPaRCerlXYyulmr7STiFRSDjw0mynn+bIyficymhqoSqCU3Ambr5ZQIpJKWlGWpEupDcZSO5cNTNdvLp0wP/pwGaOvG20uzgSdxLgDWecokeKSMmFO5NeXVcY/yGc9InA/2fSkHn+j3kA/33fMQDfP97lnlRZsoGzbz6pYkeZc4AoAdd5agqADzFo9V4eCO92AbcmfeO0Z875MxR4Y8J1N4z5ywmXHXfeSaf85D8/nPUaQmDRwSWgT8iAhJQJkilzduwpOHDkxJ0HT1583HbBeI7BtWRQChQkRBi1aDFiJUmlMUuaDAWKFCuhVaZKtRq1Gtz01a1EYNAZ//N/k6Z88y5LvDfXo0ThQ67iUwA+tS+G/OKtkVzNHi0e22mHXYbRYCgYqOiY2PTw6OIzImJIjMOMNQuWbFj5h4wbZy5ceZMrpTKNL3/T+QkQLEq4CJFmipdghlDpcmTKkifbv3JVKjdbhTqF6tnKz1zE44GH7rjnvrsQYDEMIsBEdCEJctSXvvbyzWFnMeESO0WhCuw0RepFnzMUi492lhL6V8A5SrXOvnaeZBfCLtBM7RzYRVqoF4tdsgl1Z9F5cL65Rf1nDyw8F1h+JMCwEqhXAaDB+riX8HIz6UgSoaq86q6GxqUyATQaHhsLoGk6alKN1cjE1a2cukzw42JQ02px9aXmOnHy0evjUSUjqj52pav6VMUaFpIWr0O5HGXSUTP19KTUNW/is9SXsU6qkSSboV1kcHkiAgqi61MbEUY1JmNiyPPNsbG2WeXOTZJ/xo2goIleZCB0BVqtjrvZqsCl82v22TVlGu9yyCPII0vMYgfcrH337LZTKVImpwPRer2U+1XgI1dSmJ1CczXN4jivNxEhQj/2I54yfroPzYnNxm5na40dwxAw3iAFXs8ZwnJprelWCtPQH9M+s7lPcs+qalZJcnZRLgbpjEUSGbc52qXdlkmUabPZA21JpapONB7sksg+KnQf32eV4R8VX/veHaFDawevYZvzSQWExSavMyAAH/PAgGYvpdnPmRkS/KZOq0ZmSeXzLuggInw4JuKiv7nl34tZKZZR5MJv5OY/t6yWJH8XoBIuxX46dLNzeqZ9VRdUE37Kv96EhodUx6sFxi/MPqXYR96p1+K54zvWVzrrNPSy5zDWs1IcT5ApACPWgGUu32461R+iAl9qzbAOrfWVm4IpqzJ2KXTKr0YvMxObqPnzrFXNNYI83vp2aOQZQx4EEn72bVDlB6J8kISMZsrOiuW3XD2DseyYTg8vIyWpwlfxrO6yBI56hU5ymu8vH2UhDCD51v2TTyX7CVsDnTi4Vd1seWMtj4ppLvhAGu+/K8SWyXkWB/PIDLJ385M9jOsCaEDaAOlSe67WDiL3k6XofjdwGGeGsxq5zU3s+MYnrUTx+jH3JNjm33j9Fwa7YnBd4Z4qF59A/bK50uObRo3iz19umCA/Q5PkVojOdMyfnqL0sIRTDXrL4liNfLmhyD5S9dKM3yrsUbGRQUetYlsHnPApFwUtTEwYzbJ/DZjBzOmBNtGA7Mfk6GvPl10Q64EYgRCS5tiuyyZQ5HKnt/e5l3Pylkq1Pitwzbn4UD78IX0/VuSR8t3XwdE2MyRPHt9U5rPM4/cGw2z8Y8ivlHTmIWruSJL0rT/hVPb9mdPZo+VQkM1lJLKsbxhosyluIO+fiMKJfUd20ByUB62e+68hC5fr1Ur2Wq3vLG90nI/zstRLoJxJ2eJy8LGb5QHJ/zD2XPECErA3XxiZ3+0NIwkbltlZM/k7XcsQjecnUb2VVjLKR9gx5bnACGRoSRdoG5bVT2qIwJGSKXcfTdnmuPogxlR7seLDLPfV7z/fGh5kdVFlFtavaJz8ymNW5h37lVsDbAuZqNJZe2tnTa9yK70SNGt6eQleF9lPNFvbhOzjcZT+9O1WtX/ycSmhSJJikFmKyq3qfK9cftx7hayCwGO+w8AAptjDQBA1vNJxSkh56V8whCwDAsFOV96PglHmO/oX/nzRTwO1jMs/7IKLqd85J11Hd/14sitY0F1Hm1iG6irDu6Pu+5sS0XuVYt2qvxejAdSYnmX5Z3FfOfMv2cPUfe+LFYlu2Eq3k322+6BosLemdZwWvFryufuM0iMtFB89InssR301eXGVe6VuNeUua55CfXP6TJhQ7oEFy73dnDn/Uo3tO4MMrdZyjq26zCua4wup6/PGROa0kFAzPB+jGK1Mr+NcuIptUK2PxIWyQonKxTvvmT3nslPvm3pcaRGrVhGU6rtc7S3P8OmEBjyH3/A0YD++MkCn5Davzx1HZdpUrX9vrTMuc5rmT4L7IJ5KciK+78vYmwc31duK7WFkkJowROhC9BeRGzaXJfarVXNy+Zoz9goYSJ+Lix+NRRxMqHkSlkXfJ9yPoCGpTftLf01+lCIfhgX3u6vgQphBNhBq93bToX9astcbjc57axnt2anlUi8VDCSXKLY5FNWGCCuYU8p9vDtCe1mjAR+kLRKNTX/RWbPzzEnSt+yKR30TGyE6yUPCTHsLOVRi+AvQl8bAnRnclobOwT8LyhmPdxMTKYGa9I8fMLjV9WSSCDVnIB9LNPRsM/uLU+WaWCZ3nBipfZ2RJJnYWqsmDMJScpBNbcOA6i7JFMf3tMP2oLAX9+2T9O6dhGTMds87JpK4Dza8N6qRNv85fzmdL9p3yH414qIEzrYQqc5eYbLK/D+Vkq+ZR6tVjyssr01uaqqz1OAVymIYImnaJ+2ja7DCvdx6NDYp0+V8g+EtU+32dZPPKcE14+7qQspnPNt+8sNdmACFuaq6k6J5jvw04cER/59B9TLmC4XqTb9KiTQVDiTCRhWOPJk9/2gLks52cP0e17n4Szu3u8ur03ixnMZa5YSyyltT2+lASYoAuY00pm0m55HFwYCXPd0KI08NQ8a2rJZadc0f1nlamoVszs0snxGUl1/aHNJh0jixwlQfpD6pT3W+iFV6ZUStlqZC+OWONOdmKiCN1bO6OUf/HlGMoiE+8ozfxlfLdCLkQs6qTKtgJzmbgQ7DAoMzox63o8O6VXvZE22L/NTKuLk6sSLmDuiM44v34Dpz0wh7DEvUVZ3FGIMoRiAW7VDY5JyTRTWMuc2wWqeS3AgizXTroQ32otkQJ4aBXF5XFueRYnEW353E4ebC6zi9LRnHVCLuZ982iCcxUcA+spGBpQXsMyuWtmZhShrIdnvxtbrz2lwuhqz3h87fzu75mWVVy9a5Rb9Kw+azqOw5yfue0zneMPxjowE21YVZHa0D2nq1MUzpUIvuy706K8JfaTkVhUiB/pzhPHlO4afibeqqgzVVx8T8maKZf5tfXHlx7i7nuxud5Rvf4+wBwf2tqhmnBb8uPBQljS9MRoFg2ZnbCfaf9XH6X6mEI28ssvVeDcjQMaCZudK8IpIU8SwYV8aI5LqI7hXdY2e8o5hap1YTRmyG7iO8WoWaUrp/D4qZ8Z1B8vDoKHlkZ3J8zfZf9MvCjGJHdyCEZlDN6nBYsyqDoJ3prkJPmFHodIwuNwPNzFdbnx3c0b/r8Kbe+I0rVmzc1C1KjJcn+Qud+zkaF/11OGHri23vseBja+LWHEsDhczU9jh+pK/PcXRHRso3ZkB7CqEQoxAN+SPuFCla63J3rE47SFNELYnPfcsjyZoZj50+FYDHhCA6409+7vS+ZL/CLHPWHr+jgM2E00b1EAgNMECsLQCh9k7/O/tGt8dEyoQxQ6axa6BCxt/dc9MdSf33gNN3bEG1mKmJ7LNs3epavcGpvBtW3MTStKFh/8zqYDIFypnpXUHX4dFR15FdyemMKBq3+uGSKO3Fc4hqVTisWp1DcYwVjrO+inmgjJnd2ek4MjCIX/GVlqUm9dn0QRr/2Rhn/NWT8Hgqs37wSS+ZtctX017ZmhxOEllcusZLy1Zn7EAzc3+yXZxGdYkhGflEecETFIUgELXzngBV++mz7hgIhlO0+yw9Ntm2OJNxJr/df/K+WlCtY8mdlrwdCcfRbA4/ujM7k0Nz2NFcwvIYJAkMlmyuFJzJtEQdyTni5R5SuiZDbFaaUIOkQ07GBTQzRY4+mbYLFrfhllZ3EMJ1DKjsvYDuWV2h8R1WxT+gCMhgdMH4KyCa6VlisPYzbCFGqgOjOBqppQZiN/3gt6XL3eVdEqFNoVeHe6QYMaSF0nPNIUZYCGMcBewyypp+I0m8NFiR07eRMqMpPCQG5yse0Tz66xFIYnqmTOYJ9zv+mE/rDEATn6yamBRUgDNpD7L3s2lgBL4/ajcuJneRiU89Ptn9vZzdDzDfJF91573aMNCQ80v8XTrvRFOIgqvzvx/L+6tDz+hgM6gPLqsZot+Ph5iNNHjM8nQ5UJR0+ZknmwOMkEl14XTSnGJ8JBrO9I2kvyy9wqzAxQsXsGfEst3dfpLFxhQ4n2dt4x5rTN7cZGkHT1lk2m5TiyBn0+GTIsB0KKr6+aHgHKZjcSSQHhocqtk7YfQk2nnYIZTNQyT1xyoGRMa86bPWiH5Eu5ymtct6UczSY8YnJ1SzJp+mfBY5LD4bopVbx8L/Qy0ZTqdNZyBw4F+g8ol7Z5HOGfqHOF6usqYR1TKfTxR8cnAScfVEoq4cJLGI2AGjnh1EOwCrAO9HdMtpWresH8UNMaHOPR1grMfUSsydi0ahY5Ol21oQTesSYx2ggGVJIYplPh8p+sVjUQTagvfoGSdGhkNiLtlh7mgK6o1NAbOow+rJRSOeHvBJZ5Wkb1XXyGr91hXe+NwyLDZ/nZNa1nIwfnEBNmDQjZKUbiQ0g6mCIhPe5OOtWre1lMSoaMxFhTDMHfH58MwE0gIu/GNog3WI3U7jROP3LOWBs7gpDkSHNKkcg+WpAOPFNwyhTo3WL/BK5EgO0o46nJqRDASrg7I6mvqf0SOYFeFFqDsGYuewCVQosjpjHg8RAzEztM3uA/+31Ao1hJQf1vlog0uJqc0uF64HVCldCvKX4621N5osaL71czv+gVzPqx9+77t7jnlPXs8OTINB0QZ5Fh1ZCBaK8PSZcM3a8ELvFciMb/E7FiAXVjyNNLVpXCJeyOyjEbvKruIkG2CxgTbYJKSOk2QhHQYiwcaH+iTBDQIDoeCG1b7n0ZJKuJRvIJx4kVWADYgT+RTFGNaPYB+tW16wkxg1ISopVzGI3v+4Om/xS1qN3kCmXOIVTxRRVEQKrHV5a04z9n9uic52dqKuRQS3sgMQ1BJAWlvqRf3X0xRf40q4OqJCiopcGpI3+snOz1X+KlZYqgADq1VKRANLLsHXhqjBrOX0vNNrkLVOUI7YGNULX8pbTJx/28G/tSUAQb3CGRHNAwAxpfjsDSPzEdiollMyvvPxNhXgFWCJ9uyQF2CsOmd1/yNPv3UshBV5BXVCWy7cZQ2K2114gFF9QCvXRJprzeinLnaAJxRiwxSIuYYourvkUGIg7UF9fms+2B+WSL3K2Lq+KTNlJmmDWdjrZGnbyDajxaToOGFU2uzQNcC3o5B1Dp3Pvt0UiYvO4g44+C+Qsd6Yjza6lHaNyUbZ9HQptW6GaQ5ZwZ0hXc3DJ3ddwzaceMx6y46vOB6+28uPRye7aHzP/sEBDv9gvpqXmD678WxqYPZfixK7P97zMcjsxw31BxNNDX+fG/3d8RXu+p/Q715RgIwmRi34oeOTH8DB2kn5vVb7Ec1gRXNeQ/1Nm2/2ekJtsmNWZEXR9PwF+kUXC8obmhoTg19prWs5VZ6S/ZMlpV5wvVYdiVGUlAhXJE4qz2kWHJe7nBDYnpTS2xJE71/uff71UPcpicKZ/hUh9PDICHpkRdgfYMWiUf1wie/3RpP7tmjaVtOw0UCKWtEt+T8ZwfHifbie96PJFp0BeodoamKgRzX/5HMWltf+3xHhdy2whRgF2U3LRrGsTBk1KFsIGsG4cWkiy99CAzlzYtVgfiDIYJiDKkTkqr4hDumEXGpabfJIDCqr2ma1KgZDjPnkkkSvPStS+XSwh6KKS/3z01kChePjErDpkUIi8XX0bjAh+Ij/v3k08GA6+iXGEB5iLPPrEUeAdki5downl5ACRlS0Y0eCqZFx39rRcq6tz6gbtNlMg4sNoJ1JDdu129PB+ofNY70wGc9Gy/HQ3OOHfJJS+2c9WLaln2LLrD06bT9GmIaH9TavNRgkJRwbwm0XO7itNomE67AJwfODui+GLxMpj9A3iGB6ZEZxYwrsmc6JDrjT4oqkHCVlf8MjYbU6kJZaLBmpKqCGMed7ZZEl4ZTLAneOdzi9ZNSMGD14KOjFjUjUTERhm1ojs+hQxKqTaWxqUMANDvrLoPCcF67Lk2M7QB9SDWftFkuPQT+EE6bhIb0tNOxW7EmF6h4waXMGk1WCcYQ2mYTrtLVKJRYhxyGRcu0ID7Qy3aMh4+GREeOR0bDbQ0cbDo+OcEJur4/et6UnYf+wT9/+6e4Z+0AhvZE+V/x73CrsD+7xaT8iEjSwUqherf/DM7d9L1nWtzmLP13k7YItkMf2OW8tx2KSX90EVecfcN/N3nbPvR2JuXPhn97Bvr5YjO612SSuvD6rrq3dZkVF9tbwL5LFZpa4wMSi/3wPo/C9OHCubnuL77QeWMPCt/e+orT1PFQm1lWzpciloBU1axGDVKx8ecOTx8uHtHBQ63rykPRblT2f01Xf4Gmt0dTU19RUfb3IpLDscgTSaU23Osw4N+tcmlSUEZyGwy/KDl81flZ6K8PP7NXuBDu1Xla5+VKAy2rZwCELWurZzxmMvvvEe+OC5OmBaqPOoTY5LeCwVkXWucX/4kI2fdr4yamSSObmHwPJkKF2sbSXPK6ltHWrelgTFrBbG4xrFS0PGv64xnYwKwzGqx0W155QbG9xwyqVGu62BuONXMsHjopH2Uca3tUJzxl/5yqNfgMGHbHlWVBHmUqVQjGkUG6PAB5z2wvjcy8k0gfrG8BFO1hxh0nMIoB8MTNAcaBjrUx9JHVPgLi3mmndjDT/F/8rPiU9OM2BtzAs/0PnANVQrZCfy4zs/3C+PRcqp03Z9Z+xXFHEgBOOubYQgwGZ0n0aDErIVBG98KnRY0teV+S+lj1H3/TYEtX1bjnqmnj04WPnVpCOObnZHyd11r7RYnSwkTxYZ67SIpNK2LdCAqenzFN9fwnUC/dKkC2EsHAPeDfvjH0muuECy/Gu6X/tHOY6XA6sB0pHo5Q4oG9gwVLA7jbpIG/H3CGuEyCTXcTHszw8MP3e14973nU0f/pJ8fRPjMUgecBhNFbfeEF3lP198wgMI2Q47vS2Lv+2Kb7p2+V2Xufqi1QTxCxYoIg6IM8XeefNMxxReWCIPAIEj7wRMg8SyJWifT7vi7pCuuI8AXIWoaZC+ShoDCIGLkQvWA++dxBwSpe6FevBmo+Fs+rTtZGHWCB1ZLf+Mfy+Lf/Y2fGx9ar9Nmh1vGeOoQSgOll2hAoy5kcZ84MUF4DyJDPXKf7uwXO7MqVSoRxSKPQUfxYx68Hpfo+vPnEpwpImpabFsb7y+xi6WtkyrL3KeitFnEnELgA1qEXKB8qNo3+k/YcWZ0xHJ5YeghOLjwYifxigOpZ4UZXocPvzUxK/+hYd1S5wKxH5QMxsVuCi/Q/TohjzfYattHKyWqbpi3Va1mz0T3g2qTIz8u2BTnTtuoCYMlf+/KmFzk9ZkYKW3CJh+zuNkSK52AJwbmY8ERHVWPUQOnCF0eiK+t0KjM1FOjRImJQfekeS551bwB76B52Xdr6ZIg2kDKnKe+Zr2t7SIYV16sWBz3SG7HE2/zhX8MAWEEgtWbEmbDRqwjkx+tNMTAO6FBiZkKRITcF+xiqL2iySdFc2mtsJJlLs4QW4bffxm3fNHWRohGPQh3kqR9rHWGGTaBov/lVgAtvLXKWhVkc7/4FdSxtFrQo4ymlUdfS2NFXjpdy6fz1fKXzDagR+V+DcoM5Nqzc4Xer16fQGdaRr/S5Z73KqN6D1HFKXaSOJtpxeL4oqdotOl20jUoUU4hkduohC1mU0ymLwrZMSXIlF78r37RJYrL0nsLmPWkjOfeHziZiQYpQAGJ7XZAlxXJDQaEQhKSHYo1uw66NbuNkc1yoTOp2yO64xm7s0iNsPYqJL2wYLk1pzR2tj3a/ORhM6Jhp/TGZ8o0JwtcEFGDOrYqopU+USk7Kf7nRMHzvG9axTi7hxbXyeiMD51a0hAqG1vV1os/FbqZUvtBnWUhNYSzGH29jc3MjlsADv+/bnPvcfQWQgSkWPsukklSRv3Bhwk2X83hqH5UfwflS3jO4IX70+TqVqkzZdrY5rtaLodbWbfI2Fe3WIxxu6yrW+Ggc/fvVY08SGDbWN6ze01Qa5nayVanZK7TX/vgRJaCm+tB6jJvSWXoYlwEiKbARbLUGrxS1N7/tsPGVkeVzMt8q1qmBGYncOqM3JVUEGJoDsbDnkMEgXfUGY2Ev8FRltKyHVG4MDYvA0E+5VOhOCjW43f5Mr2auETWmNJVVsDjGYZh+lhUOO9jUed/uaEA4bA5EiS4RRgKL9PYZTt/DdC7AND4cfXoABT89ifcI0v6xmBO+eYSKNamUwLtM74mIZOZic83fUsY27+hzH4KtXng8/Emrr//8jATBzBzFDjOwlZghZ87fkiv97PCYeV4wR80lgff/tx93pwcFMbypnk2SAjgurtK6ulJXs2dCzVZj9O+Itt9FLuYtvr3sm9PbniLU84cybRfDRhBQkDvBBhr+Bs3reIC4UnCboYCD93y39H6rzGAW1LymiPba0lvv27t2b9cRH5DsC8Av0bBj/0y1gvXKyqZexp+unwqbAmdIAf9jn94cQ1Bfy+3xhxCDYqnTfKpAdoKf7wOkDyO6/ugUf7CONHkqFYkiUkhffsS9uX68fPunKRIYUCp5/kAfYpRLBhF8SG1zQ7gutikGrgJ0P0kBICq331lvx5ML7ewwOhw0Oi0ALPdNs/geJtwCzgE6TNcq7O6G7dLL0ixtQMstYhUU6ZmmuTF6D86s7iu6YhWVatpxvBK3D9kI7WOrSy14q5ZZWFf1rrbY1v1L8EtesDrTuDwfDYOOX4nUHzds/rBG/WKb3qvhExNyQ9x1P8noVrJpqtwceWCYncgSYe+NnOiQkWDf4cnOB84cNX72yiwCswgsIMCsE/Odg1p4NK9qzYHV7OmxYyoQ/Av3JdeAMt4QDbWkWTuJzFoBOqUfwimUz3NrBDwnXngVd7emwYAkTVgUN2hPg3p7181J7+s8bS5g/p0HJEgLNz5iaDA5mzLnrkq49C463p8OZtFdgwqUbe/S3wd18DvyWOCkSQzrRVulE/dKJDiZeK0dXE6VfOAJe0sPKTAv0fDqZsynYVwcWOJxICnL49ydhuu6V3teH1RS5PejlDrOB4goMMwqEDQXWCM8u/JHcYd6m5CcwnOEQXpTmcJJPZJgzQgTtI2hEeAjm663EtFJ2xlJh2Z6U6dLF+rKafDeTXqpRV5vUFtBxqnXoaUYdBtRZRHZ5l7gk5S9hoHYk8zWZNFrnatPe07X9sXDa/3Y6mtP5q9PVne7ZTs//ud4RN59lN/j/OZV75F65T+6XB+RBHMLzZiCv0nQCpj20l/bRfjpAB+kQBsxO+S136Y8YqJ3L8Ojk/P1ZIvfJSBoeOr4KYBbfhmO6sY4B8wnGTgMXZ4+QnEtFXAL4c2Z/2QNcX6LF7gnbHpJ522sG9Frkt7b21AigV/+pg89NfcYN80IHYhJBLNIhDnEF/zc99+59DI03sfimH3z5Et7tlMJvXY36gacB/o8A5M7qcbtbeLKRh97CO2rnjguw70/Jyox792UUDS/0VZxceE0jfcpCfvrB4+uCknek4OT5/GpA3ySXm3v0G3MMVKJcOE0jPTPjgR9RyKk4uVMuK52e/gayaxfknUWQcflgujEnp3B/9VMC2Nx2KnYL8t7JEYSdxvuoxoj59N9qfIqADXsAB/ArYh4IHww105ABhPGUjDwsE5r7eqxLlSgf1I7RKCWp5SW1JFJiTvm5HnlZP7njbxT2+zIbO46hBLk1o8mIHBfAw7s/C3AxS+vZPPbEpsSb6uwItmE4sYzYsYzlsCo4Z/zTZL0xw60IAF+njZcA1wWAQhBFNzgvQOITm8PleaezlKBiWfWWGXkHQQLaFdD8AOWNZSgEUVSZ0QCJTzThvPW3miCtU90K5M+MOfkm/10Wmi7OpIcZPf1ykHEw2z9lfQrRRauVx42btiPX73DMzguvb58jBmQmT997W4vMT1LIMuFNGJZXrtKnr1iJXBrhFmvMA0/Fi+p4qWbzxarZqnNksD9F3d+ntBjw/2/HRQDkBIBZrLkLkiBbhRYLjWTBZLPucoNHPGdF2WZE0eaBbM+hDAcPX6kyKb8K1co6UP31qYaNTTFqts2zhbTH28MhPZQPx7tF9+qFfapv6iv6tn6sPzZ9LGr1rM+2vo1+yP/52MEYO2aN9QIh/hesjt+JvwqPwoXk7cQriXcQM4k8Yod129/BSmTls6pZ8+zv27+w/2q/Zy9NWJMz9mfIH8VnJvGpOccTHc93vNbxbp0knTydKp3R6UXnPZwlaX3p99xfsv/OfjJTmKFm9FR0OUlPLXxl4a/mf5z/Z/7j/IMUk7LS75b8TnFmNr4acz9X+sVsm5kq+9/qq/n18u/2apzIxbg8V+ZOVNxYcW/FkxWvVvxK/Qf1n9f/XP9//bOFwkJ9QemAldMrHZWBymTlUOWyyk2VSys3VO6owqvKqpqrJFXmqtVVG6reVgdXZ6qfqqHWtNbsq1lbs7nmZM39mu+1tNqmWmktXOuuXVH7RO3/64LqvHXL6p6se1D3ru7vemZ9VT2/XlOP10fql9Y/XP+xwa/B3zDYsLRha8PhhvMNzxu+sUQsHsvI8rEmWDtZO1hjrOeNRONfFwUv6mua37SlmdIsah5u3tC8rHlr82ALvWWw5Tu2L/sAe5T9iP2Jw+LYOTHOUs6DnIOc71yC28Tdw93Lvcp9zv3Ko/CqeFJeiDfNO8+7wyf41XwvP8lfzF/F38Pv4/fzB/hn+Ff49/mv+N8EdDMYgtV5gAFUQLAI8EUDaq51CpAgAAQiAMRUv/RyxL+2cyUmwq7OhEJga3IHGnfsvT33Wcey8Xmu4CGd/pcHcHnx7P3RFm8rQIIVICAiAJw6gHcdKAhhZP8RfWd5kCO7sdZ3Hy2N0LH2d6elLFmBMErhHY8bLwRPfdS8i+xHnoIUHBlYU/XzR+66a4Y/LTMXbxm/A3+Xxi8UVuWVlXf3siYU2jIeeOB06gAIj7sQuhxY2LeAzfhrtzBPK90oH8mOrwm/Pf/mNfDkg//+7xGpBcel4zEzSh4INJdIAidIZTStoEUXoLegdDBCoA6UtZGBSsmJUtKMincx1cQhuog92ivQ07NFPnN9f2nY7nDixEScH0DPiygTI+sxC7fZp55aB1zTRqYBoWhWGVSMilFggQedo0WsbxyeS97SsoUBaSRve79mqZUFyw+5xnLG2Fl4Xl+44Nod7zwn6CC5uGrrrq5BxSjYL+d4SiQG5nCbocgSvtONxGD5Au5tqVf30oynjavM7D72SEYGmhFtWsj/oqo2W89tQr0iwfKXj7/GjoCfRENpEqdMkE53igMahKUwMBUl41iSMv1zvtfTLXsGdBcF7+oYMN84qLInVpJSov0DrNen9N8qC2yHfjy4Gbq9WVujlxGweVwYhZ4C1BYKgM9FXuD0QWGvy/+IC8uZvay3eP96cOS3WdpjrilwGQaLj+P6NZq8+zwyEor1ZsQemYFf8sPwlNIHmn+u4H91Aa/Ee2XAzuy6676VLvJ33GH/QEwByILq2i7ffux/N218U+cwXANXevv7LY+1ABrbI6rBr87VaxmVp5K27LbnVGq1H9/xBJUVK6wR3WpB8LjGvCPxOE2q2w820jkfh80d75KQZW1Uzp3ed3TREgH2WkrPiOUjsvPo0p29NB3RyOjt/EEmM2Epo3b8AQ4MEzL0bg2JU+lwE+qDEILPHJ9S0Fjg0ulTvN0SWlMgBCFeQcnHBe9saupcZVgPvLkZqGsYHZkIysQgTEyKRX6dEqyce3aZ1vrlNrOg+AXs3FCcmyt7lD+pO+CAm6a4jYC50JBZQHowihMKnzzq4EUp5F1ORLhYZyJmREJMSgC3Gh8CpR8XZR8ajRb4kgkSCXSNiqMcc+BRautJ5TNnPP82Kfd1FtnPUxB/6C+hvRNRutR/ouRIkZIO4TISVlbvUwYf+MyEI8xNLMHf3N/PBIoG/y4wDan66YQG89tHU/5f7jcL3M/QMXTY850PKIBLcsGagFKlVOf91M7e3kZAWCowCwPqk3XQj8PwIZAO6nEd+rr/5AVuaem9lYCkcvwiWFsrYnTTbX6v8ZNPOv/v3DGHTPba4ZulvYSTI6EfwIEH2QN5rnTPUncVCtDQ4FyA8dlF/u4zTx9Rl68HCuG7sau5suwyNI58PAnjUm/k7UxaiDWFFiyReUq2QueLFG2ys0qermigELINTKc2TQkhmInWfPA2bSeqFNGChnI38P0kRDCm/n3WopS3MjAKa62X8Ye/22t4O4NQ6YC3AqEfCzc3/1z0qOG1ezN97e5zyEgw1qUIcafepVagq+zkNny95mMEioRwq3RrheXEZNtUvGB+2+PR9QPuQ5kZEWVy0E6RlCy1OB+sug1NojsWCInp6xPiFwrLYibz7l62PM4FM9FDExa3NLlpHmzncuhS8tsVU/W7ElEz9g57IvGhzEwd9vGTg1DS+NWFW3pFQRXoMaKbArSMKaDjf/sxS8i+hq0pZ0TYMRov2AxtVu4N3Ucl/QVkpAyYfQ+kK4V12z8n+3Qlh5bqxbY5EgZiQANUu/qhp0Z9e+763uBsgLlazp/4uiTE1oH9sre3zBB5JVh8MmM575cgK2WBGSzbZ8PHmzU2Hky9xDVaLKbHduG8UVgebSZRlSus57r/HNh7vep5rOCxlRtkKabDNsxjm6JzrDAbfPOKSMaoSDo1uFm6uc1H63aykAti9ozjw+XERohXsvw8Mtmm2976gA8NZYPCEcVj3WxAijiySah+KvgwWmlk048JG1Y+NQhzIlhN5tCjciwRk0WbCoUCOTUwwrW6Ao0u49B9kcowKHn8mp4be4cGFKBkFAlmsaq49UNjr2DWefKdYVZY0fNIoA5syOMEDZa+CGMwinYK93VV3Pi1/Vyd5+i5Rd6MC8gqrHUjJ10qIaJtyVBuLStHaStsKYElpx0OntGOe+tdfWUFE4hyYByBDDNEWWl+APnmRsmvEVsHoelCCyNoyeq6FKP0YpVAgqscJCZEp03gfrhfMBw3jWMfbhVlX66EQwVoLJRMgMvRoLUrX31j0AkrMaiDSk2xdIFmgkN6kGvq6pEcc6m6wLyGwFF9lye9thHoqtvwKdpcldiW02yknZwoU06qOxLUgW3PGqHMyTv8aCsg7VRpyk2dtwZbqbEkVMTccmQc51ukYELTQ3tu1D8JXxNhsXwPOyAapq/Os+39mUztnPJdfmZ3/aoUDvl4ijpEsJfbARiKMBZIGzA/6OAvgILRe/aDcXLWYXxbMCFRmYoAqMc1Q0Qfr2341F+1qO6ZqGPGehXJ2xt2kpAA2z8TfUURWz/m16lW7u7DD6eEty3igvPHFceY1MEss8CKdCtTE3mXMxEp1jsRW2QJlERDg6CN/Dt43FIeFI+0//vAsPfIofuLQI9mbfUFfhOkaVMf+affP+us0gdT3lXgOvQvc/uXFm8uxYr7YNbNMvvXysqK94Ex4uwjItva9a7OE4L0WUxYn/hv77l7s8GLOuegwwE2+Bw6oA5Nu7v8uoXpDzvxDn6bXRPLgLnN0uLK4b+nYZce9ceEvuksVwkCaC3OPESHwj7QsXdnJgOiHNZhCtYlnkG5sa7B3PSerD+k3WExQoC4+En47LJmxLYfhgGE3Pk1X60CW+mG+Hzlt/GLd20CD0uP5J6UW3hPFwBvCxfH+UIcWYpECLLTnQuaqlvzeBhHl051v4Xc3Dsn4CEkCVzwIg228/C8FkdjD4dmk0DO1hCbI9t1OJyIKM1/vMBbmxMCPQlBE6fz6EMdubH/+siVg/76aDBwo1GPx6XK9kSdw8rSc+WFxqby0x8lBVZgJ8fBRFhK7t+C6B0xVERnr+zOyaDzzQrngvEP9fUKWOSJy7Dbz017xTYL1FYcwo9SqLuUCUkxvwnZVqLCaGczHddLFDJXYuE34ffcVWH4PedSQquN2LN8IR5Z8upIbErZnvaW+Q5VT5hIBoIUjfcqdtT0dbrT62u9HSCuPxl/vWpnt2DMSIKWqWLo2sL9fFgCFrebsQSGT9MNv9pgWZwfVrLaJuHwK+rVD4Ma1yq2PGwN3BtAA4OOV7Bm4WQheWhEbindEJkbdjfGOoPFNEKf9hmigS89pNbZxqG6y1Jugmg6GtJJ1kR7h+i4/VzcSl5duB7AZIqQXBNVPfiao52OCGdPZydyAMePBVCe54Wvu7lTGzBhXNRYPOOJlX7U6IDLaUHrx+VOS5owChMVu/drhWIRQQZTolVZ4EIE2YosE2ghkcUuUu7kzRgtTNM56TiZLkkuFDTgBS9EQLVWQHdv8IbCOae+6w/5fB7SBSE91e2LZLipTvqL1lYwYhWLdjzElM0SLFEYil/1oWlxAN2kYabIEgzBsLc1qWpfK6v2lXNRvXbJxo4L3qAUBr3IlmoGcIDjbKl3OrqXF/NgM15HabUWDbcUDzTyUUMpXJdKXK6vKiNJ3w3EYRrVL6X9GnAjGXOoVCxYmmx0LWStmAlnFcVrm4SAgf3lCrhx1SDvXOIxHg4jpOIXhEU+A8FLNWgShyoPCgaHyotpbhfNB2RwXKIDsFbWPAe2YmHHCdhWViRhbBjfQUVi3ZBubJHOSmQ4aUIpHUKUcanOZPEk73RKSYrO95NtINeaBoQb4HZmObeWxXZzyTZzY0UQQok5NF6w/EwSsBGSDkbYUaE5ETRJFJhrjUYnyoLaWuEE5t8VETgje90xYbFRVTZ9LSvb199qOq9F5/smqECAQzas6Ka/oWjHAhjn4LPO8SZuBjikX7CZ1AD6EIFBpNDYMSO9muk8I1cOiFPAF7/IrWz/gWd73Vl8RBNhzNueNxyXykUL88WvlMK+3O0PlG27de72u4Tm4i40tbQ122Fe8F4z1neFP7/SU90Il6qLj/tV9184WI2Vbwc40wBsjS0CPqHEjhCGzjAuj32AvMtr4Sj2QlgFuZMYiKBUKq/CA78DYN0E34qrVbhN08lDdf+AFCDITR44jngq8rJwIl6QNcgmxQH0YPMqEscJ67/WyALLS8WPzONhAMaU4PAkcUa90vRK7t5ENNptnVNHFvhJOqPqP427fQX+dKnzTxyAu4V3B3DctGmC4KuS0aatUCwhJeJROLe9CsctNVJc7re9AgX1gYEOBZVUFg8XrdFrb8U5I/OTCjCOaZnI5oyTwnsRFZID5drbegQ9TsV5w++IwUL7HGRND16Z2cHJrH+YyTBpit4xjf5OatJ7VcKaI0YLh6pEErcCdaZWISKUbq95XRJB9jhn4Yekz24dy2T7GtBtDu2cd1jEWek9zbdXl8joYquBDp+Xeb0TkWHGBt+y6EDDoU0rt8IQDNtwoK9wd7h1IwdITRMaraWKKGlx41WvnX8cX9jRvQCxvArfAFwiI9OwEa86FzIcbE7o/rtGQBjiUDt4WAt1l9pDXNB+9RhK+dgEAqjaoM0Bi8vT4CXwQcgTu9erNpqL4m3gOf0xn+uNqGV2PYSuKCGcUbAT5vnpwOu2C4Yy4fLoAuI7ZlRCeDBXIzajcou5hd3S79T3WTAJvY8MKepWRcRceTDbfTMaC8RD+CWCCKTFxeqY4Zpkv270UrEmk+RYKdSIs3qFwppsJFFkht614tmRBc6aJI3a1wSZkiwEroNb9KOr6U8TdaIi6I16uV5t6JZAEZolFsMOcDRenLf5nkoB52/VK9pIb9YZuRWpdmtG/mFvS1oEhzeGSfv223aPrquvOXGnE7Mi+sH+YrlYONJbBn1IrOhstozWCSw/NeFvBLjGVURY4VnKHxSUJbUqg+HGv1Q6X/YbVWlqWan01CTGIQU9MNoJJ/EyK0ui5m9wQSUcdBB78ofG1uttcne0uP3XCLO+ODRuGuvTIzNPgEHOEuoOE/pJ8umC/83BVvdU365vaFNgbbkD8tADg85k0rAgJTRj+Sw+NtU9J1U0MP8F01gzugdCm90Txa4X64p2wuOMJYf9ZQQTxqxGcRijXYtWP5qoPn2c6YhOYGOFAT9Noe5SLhSMuRAi7gwXRAPucRuiEDSuCNo8gFzegO/ACbiCO2f0xAFBcBZHc81leEeuYkSx2O60IFgd14pa/MJr1M8vMcu9ETbU3qOS18pFcCFuhG0kgEK7w52vq++FgkGvx4G7qh6GUd5g0Of313Te2kY7qYAt52ItM6XMh1I0k1EJUdERyQfRefTqAW10WWMASG1rTEGQKFpoj6YkiTh2e2apL0UZqRdkzhgI2w3P0UO7Al1Fnj8P3o9hMiw+lXJI1AW283l0ZpYMpUok8iX1/M4auu7YLTn8Kh+q2l5JHfe9KawV5EwTZnzV4+0twpufgkXZ5dM+0kdNWu2Z0gI4CVPc+c1MhuGcaEYld0rFF36V4flFt+l13WAKDV/CxbLGv6PrDGwVq4uXLmeTG1uFPrBeENdgfsu/DVPTbK8JiuoKnlmapuof8PnW29H9zcRYAGnInYCheNzSqeefOXhKK/XVYpcHrR76zRV1qAEIgzJDwegpokRSSrnMsBVDRRSr5iXnuMm1J+HBsPho9GHUHwnHgsFI0N9CkRMl+K7UD/VXszZX53wS3AF3co+dGZjxj3aVzmpCSmHabU/zWVosNOPG671Yk+JQFbnLy7yRhgkpO01WHoZZAl92a4LH7QhFXGED5UYi71vGTBlruuWxZnJs1CkZ+3ynheMsoUTQtLKYj9wxeEN3/HoT11PHIlA+VD50XTcXA15yGMIEV9JwJcKbl6lj+ZIoZI3H0oyZytOdMBCKyJyT1gNuglusJZOUojwVqHK+UGE52jl6ZBzZLRuv82mxC2v1ytTClQmZLo6uFJumZiG3HVUzTThX9upoCbc63TxmvrVcJ53HD929kurz+1MTq+QeDyFJXVGh8vUul63N7cSHjvEajfpSP/48jCKzzIvMcVnTyKg3JemgjfkSWsL1i/n/9jzxnHNcpUi2exS5zMkIMoYhyOACSWh/L+vNklgnwzlbQLnoDiudKemcygVBkjCqY/A9lckt4L2z5AdaDQnI5PoMoE+w0g76ylP8q1cZnwvsOPDqM8KprKNEOWvkpL8t+ztXF0T29fE2cWHDlxK+YBprUarZfZKvc3uQCI2Kp92nA4/AzkUcwBd214cKxWJ+FaJXcgAFzPseWPhtKbZ7GfY0OHMfWIr7DNS3q8ESThPqbwTB2bBvxjSA/+EkC2qK2Jowc1AmmhucCXDN0rr9QltHs1568MmWt/9chmjDt2DH1waD3x2eSYYMzWBe/kmeKW7nJ9VLUOTQgo9Bh8hS0BH8MzLyK7MH53k8CPqZzBDqS0SIDd69BRCF5JDyYH/P6ACt2k6z5cI+TgAZKHlsOMaZ94Vayt2S7Pe8HIfX9g7B7reTnRQCPHfFUsnvZ1Baz0+tQ+xyrg2BL1thuLYWKiSHV0ePadV9Bi7+5VXk/buhcDLIv1NX3cAWujIy3/O9JPZMQLoEArx1Ds5dge4HcydmYAsQIm428JELnHoyE5h7choLxG0bsA93Bv9cjWx7H34Hjy/6F9wH986KpipaQu3Qhe3q7hYcTWKW2IZUmVqtLlteDNaG2uS2EvlWbYupQY0kYZoyr1bj8gQrxfEGbBKBQY5G6YeIcS45zNV8veYcsPmCRomy4qV1GaW+GEllAKTa6Z4g7u3VtFzEL4sMw7rcUQ5FXsvmHRVoZbCI5FBOc20hpUxgqi2Wc2EwinMTsUJBEKCuaiTmOnDtkIfuSrrvR73KOlsSs2o7wNNZbXdjDUoaVzWUoHJkvySdIzstYMyURIm3Rz1iM5IJDvM2gYO6UmiogIwRBYE5TKBoow2HA/s6IFr0oAs0c2wXrpJzeC4C5R8Lfezj9V7ASjxfAleygAIMOlvzThexyIu2uoTkmUEbrDTFwm1GY0IdPB2gfyczOR2mNzR4ihM2o+iW6DQcyg7bilYiPYpYf59qRFe6r007epC/ukLoIIJiQMPkeFg92IlsuvktC9Z+XF/wgrc81lqpwqHOmUNgOS8Wq4dp5YMxxjNtO6Hf//wY6H9i//kdX9sjBNoKkzBZuatCn5DdKC0/5LApUUokRaE4g1nIZnX7yl4IBZfXN6mDitTG7qbmQfghi+Ko4zACWJC7e3sbu4YBh9V6Wcrc0Ubf3ZkbNVINaWWZ0ogztnRpCUG/cbkvl/T73FC5v73p/t4T1E4UGaLMmQL5+SFjuAPu4B5Llhy1g+nH5hVV2qXvF3orxaVwecgsrrhhVVeQE4bRfC63kJFx65DFOQjbQTxCm3hsqqM1G2Fd9sjCXFolwaUxmAyPjVGc35HUxbj9L6HhKp8OgNkGR53CtfRvxthqV3/Aw0jSbZOLKMCgkTGtquXjEKSdrX6Nkni2v7t5E16rM25kOw1rRcMLiwmuB7CIdUKBHJD6IRQd4okripRb9Wy1BWDPFwu8AvMetP76HhnwnX9p3rNbQb0Bt/8f5HAlupKPRW6RWu3g6rA/aF9+0pa38ATy2ML2sFJVsYNMp5HdhkNSmJJXVw94CiSjnNwATZ9KCoVlivcttrGw5k8WUbrTau9IG6P4sY2DlVjuKv+l+oc8OO35P0HLQb83hyt6GmyBDGqerhMSgbN9uKiX799nNvn2YyVtwwghIl1a1jRzj/NaczwbRNj9KTRNNf2Ga20ixkpklbObdVU04Y6ESUoiVHEbc+kAluHrRm2tS6YwlQ3NM+HXylIoudoiDDNRedSLMnAjLkzs5dDjZVJxfGLfJ8TGoP9a0aWem/1uyqLtHxyBIdqUCGYpPTYfmwi6mAj0fQmMLeA8bls0rS0ypdNSf83P23jMd4WWGr7xDX9rLX+BAXmlN9gqA5BBmlH7NOflT/lztKnVakCfiw9yvbdQOMX5kXZ8ojc0vnhW/HB44JpAADQb4SHmAcLf/+JIOQl4Gp4++rTCZIVGMMh9MLS0VpRdOKFpGZ4wdlO1y2EvoGZHfdvq7myYrlJ/ECxCC+DI4kxJGs+QrmLMQhw6BxRmolqvu1ocXJ7lHOfI7mlwAqTL0NPyIsQhnk/DgrLb+an0AOmm6a5BksKlXhN7n7k+jR1SL4Tb+RPJmRwgRaxpDWKlbbzLtjATWhbWUZRbB6+/ah+6kIOs9p2o8hgrpRNc9r403ArOVt2rBzfCN3y+Bbnvt9KpSMQVgyyxXJbZzFaNK9VKutfKNpkGfKas7qdMTpK4KyKSPhUF/S/qW5eqbpLCFwWxZXtrGkycBvVO5dNH0oPqj/uMSdeGKglNUTMuJYN6pHi8zJCLRV37YKyJa7SrYrqEHAzJlNjTkj0TkuJ7mJrwSbNGmqgP80NaDODTn45RNr9yiSvh9qC/3j0NrwL9jmhEbo4pTf3zlIPF4+XwYNPGm+g0YI2Fm8lNjpnIdMdbkVODk00Madn4Ij98/NB8ARMoBayxdDN/mqQcx3IIRTJCiFHp44gVd/dbhz0mdrIbQMk/z0zk1U+/YcqsGb5HD47Tf27p06MJIIB9PUBJpyAomQ6HQcUywY/VBi9WA1QsGMpYDlB3yfZKHUABfTAEuzrBQGA2xmhAj5EItGOUA5dj5KE+KjuB7UWFiPWtqICZCMTZ9RsFwTVwrVsf7MddqeoBAqPCmjtuQNtdI6PsoEwYfVtujbVWcxgRRqD9G01Mq5MGOH6rYOXYYOxEEYXnp3B84EFwet+bKuBDFV1Uo54eCfGUR6ltgwUsG0qOxAUatWYQ4HAZSnMeTVCia6IY4ZZwGJjAt32Qdf7udGG2nKKSWBn9Y6ObAg54pdPMQgE4Fx6QxdY6qI/opwRtePYsvqvscTYKpmojl/wHf30RWXD3Me1LcPGEchk8DX1QrKRpGw2bh3XaOBSogi0ipuqqnDN1BLYWUJzY7CITgjuQa4fdencvfv00BeyvueRjswPibIBFnFogHtj7TsepdTBgRJkQjSsYTFjrknDYddcQZNc52HPQXt1xEHijVoQIHw4+xB4VuzaE0nJ02YDuZmFMuG0D5nzHf7WZyTe1Axh6g/FK2cLXGEB3A82jZDllIAKtn5btydIfVchRIMmLDSHi0GLsSzZDjWCJQwQrT/lwMeU3djDfrrhwWmrqDJ1eMmlC0l4PvjNpRS0UVBUkjMvZsOSlSbIoZzwCr9UkDpu8baS0jzape3Aj3NjIEUrN4lLDhHSJxYAxwbleDqnnvsrCZeNlyxSPQlszMhE6mIKdIamiGtbLgqzzD/qXsbIqZRiGzu7wqMxYMfR9qUt2YdJ+yOMJeZ28VjCtabreiQbGwGa1VuaOAKORRLddVZHAtE0n1PGwmSfCD6NtuzgOYIpm0nHAgtuPkQbrHUeqTTgJ5D5Ih7ByATYKu5f3D8SQF9nOkoA/gPHLdzAMI7ztXEcwXzP6naZCRJWH7NC07X6ZEIO0Ba+FlAAxUW0KboPfiXKOQ0laNI5EFNAhRZDRRp+myl4EoWqFshqwfEsl7dEyuUIJs+BtmQy3vYYkFmxof3+1UiOebySOxcouxNAFwDUCWspoiuD5wnTSU2jH1qmGGZZxcFs6d1ipxbzB8X6CdWDMgzCtBMWtL7UuhwGF+aZnOy2ao6C1aKAUIKIp+VglXi5S61wwruXzqlo4QjojE8/rx7r7TGdsADZDn/Daej2XPXoQkiwaEEh9JxyOtzg97PYDBAh2ygGq7A2HBZWyrvIcxgwEjs4LxqknHLhFiW40gmW3b64o+pRcDojG6fqcKZezfIGQe5OgDe5zKPOUh+XxoqnbpnGZ+g1mOuhiq8738s6gY1td+tokHsxI0LJdFoB0xTtLHpeFhJttcxA2agihY75ZK6pSAjeq6jFJcLTE1q1ajPv9w1iZ6C3hfonFcqHkCty4xFHipqRkzITsuIGl9BFAmJB4ZwgwApiVHkh9jraqcDo+J0EoTXWeLbrdQsk4mQkCOMzaUWsLnlkzEQDiJxIjKHQX5EEorKuZISDE5gyizzyyzT899SSQT7836jSQhYVOM3eR0/1MAPX4OOmwkjFGRwveO1B+r72HZHQrMWj6tfOdMpSo2tt1YIz5+UdADrvyFK5AFWTDH5Z6j58OYHvyaNGmAkXfew4eC8j/dwwEENNxYeEkBzbhXRuWTObnGIAHcESt8xahobIY6UWB5Lb43AUOJ26wzw3jXVsd93WnTYsbfbiuSJQHgHmOiWJhZnnbGFFJH5Y2inYjj0Uf+KBd+O32+wiA00pE9vlO+WOCckQBY088Wcehi1ZcI4o59YcerVjMcjCvqOMa+w7lchVfB7uNepeLDoVCybjN+3ThisTR9TrNSdJx+uEzKRyDSTT18BxZshvNTmt7uXhskSrS8JKLE3l8O2MicRKDQzmFjziya9IPOSKPxXkkji1e3y/53MwtLnyY3Jgui4LM18lu1FsfuCtxpSZomP1u6loxq1MfF/bejAClSeM9PekIh8mDc+zrhyM0jPVWCoW524/XuYo1d9fVflyMBd6yOyWCOsznrE/b/VB+clBX8/ljx3h2Mu7sTUVetm3HK5xWJVvwlK9SH6LcjCiX0w3balY4T9w5/U2Pl6LDsfqGsP4F8Txs6p60Xq7CkSHyk6GokOW0Ws3tE7TR81dG8+obITemHz4T7Aat6HOwP3vR4OveS1CREUESxTfxVt9fXrrws+d/EyjCSvHSpehNwK7QlfJxXajqIYz0ClfFSeV1C4694W3HYsLi16eLA1WsAkC15CTM73NtzK/vfvrZbS1jQJqC7nBctRrOHumEK+X7Y9uh1enKvVYO2TVltrcwudbpPIY86MFYsRDcrMylD/F1XKwwX1SDgx2GQZ65GwCyKrNlwGCHhuy2uconLRf0ua/PDbdjLaB0h8cI+BPO7y5KI+BJ/K0SKneZwXpyiyPgKP7CrR2Xls+trJxDef7+++cLBxvgIuEPi1Byoamwu1LA+ltjnMqZbi/ML0Nngnd/Mj8FzmCuqHLYaepe5YSbYCoB60B1Hr4SyILYQw8eUw7kh+GWFqWnAZ50c7wxC4ARYKQ1693nmyU/otyyH9B3QECCi3iEtDw69b546xR+LE5ZoQXwP+MDhVx/rKsQ8QN3uQ2DZi1i9xTSzyIj+Kk4BB1go1pgJfHt/xwWyuoz/ji0w31N4AmAK+DKwpx3bV4sWWKjxC9TNAVXEEXhU5sdLHAyGOcgq6LPt6aobot5rHIZcmQNhVAbHJxewaLo3NtZ5X52R6km3Sgb7USjwyQkHFNXuvnUH5DN9LIDk7Y6mvJrazZWlnaYfT73+FOvW02JF0gFhaFyObBNsVm8hCBkXiyMsav4KX+pcriZ1dSsbhiVNxQf8EmihTHnCC3NSJHHcu+kGJ7nM0VZXRUZHIxQwpS6XWIoqyudOc37q/3Urzsejca7NzpDbE779NNDBReBFnhRJ7unH38iCYqyZEHXv8g3Q9sGR71xnE9fJS5sZZX6OcRuvtkDbGvUf54PAIHcHZiV7IC+thUp3378DIBJxhZO9E7barp6r/TOAl8tKgIB9gXhDfhroZYc43prO4UaDUsQQskisjNS5H8hBz9++Kab3i2cwl+K07J8Fck5tRSe9obdryRut3vfhX34Dfz1n84XS3Fg7ncvEl3/+on/tHQkZSA38rtH8EsH2jutbqNnH+E/gAEmE9C+DM5x1MLBJXA8/7Fm0HIJFZSTrXA8/EPwQWSX7EIm7je/qi0HAUuI39yQwlfeXZPbmT/fbQYz+x/p0N7Z2b0eqCoJQeWEaw1IEWYMvmlVr/AXnQEa6OsGZaj5h4Mu4C1urAexz8wZf6da3aloaXNxI6iVq/gWp1NbMtEQRBCnt3PKTlWK+K/ufgh/L8QSglghEU5bQ6nnZwK+q0gXwC9kN3tAek9rzgdwg7u+v6TsFE4DiTxE49GNab9Z6OoGakO4VxXYTR68wsDyytOorCehMS8IzXUVFkAzg+kPwHoZj38D/72PbLMLviSBNNcGx2gP6WEgqfy00m8C/XgqlUAU/KFMO/Ksz31afuqp6WxPMILDxYHVQEmDZTwZzF0YG7RFGiD8B/r3wXCrdl12FNsoAvqe8gStZHcmlU0mQjSwSk49oaxqLJ05glCaua10vldawbVIBJqnd9ZbBrVKFyagBAzPpkRUAKGJXASZDBWAKY5Xei0fCbJpRcsHyeFFl3Kch7e/U2zxF2pdqmUfogaukegXFe1QabtYXbs0R07v4FoohD4xQKFRA11dA0m7JGwckWT3reuSJQhZNVGWiSZjkk8K+OGKHrcgB+z9X0bgDrALQwx06UhciYZDPIVLdxf7jhoiuIXyu92T8d6oCIiJGmXKd1mrASUrmGaNhOq4Ls8bSihgFPEWzFvIJacpSkEIxtmcpxVXAtM2R/nZrNeoxeQ+A2JMrxNm3Qy8DL/mujPxUKoue52UkvSkjh80LOVHSJ3HyxQ2M/znaLyNUHMZk4TzNpE4PaFyvjAGKBIZGkmBAq+HJ6L4pq6WB6dPVk48/b7bjMZeGnyYFFvPkjE9LcmuIm5/+KqSd9n4OOsieEnakzAaRrfRkrSATrAS1ukFC2bp+EIUrDuJF4AOsLreSCRokpX/71fXmHSIN2KXtmIdFh5wehPMAdznh7sJYUSgsZyJonU8rh3zJGt9aluIhiE1Gq+H8LsfVl4Qkat7r68lxUF5wG7L6zWx3Tc2cKDYJpuFGLbxN2Yd0Xn9sw+2ftchaywxnl5DFPgZX237Nm8AW1V31xP5VE4KG+Enjh/+FP6Mv8pawNlOSRiUvaclHoOmUdzMBzABmpf5CcvMpuwiruxDZL/KM7x36hOPxE6TRHSYWG3uUnhD2oSQjCAEnYn38y+3zTKNGwlYQXvXtnB8uN0CUs1pKexln2dOS4KYc221rjiMpkOf6qq+HHiRL0x01ROyKXV32iFi2jXqGMje60YmvHoS2B2KTiZfMn3r3tAdDqQkAbnE1oUzPT1pErMvzL9JCyG3Ovzxxj4ZiLM2cMgwpMasdtuXf57Eh3kaOJEVeZnZbRsd1mupzR06/7qk+yqs8g5icUaFj1rzKNHhpSfG1dc636+TMDno17dBZABYRBJGJYowtUwCrCcEgRkGKPUGXb29XWHqIRwPMQRKPSvhRvnVFvX6SfXErw237QfFitTudpLdPlyMCzR0GmpJ4POhrBXU0sFdWwWCxTBEMSJ2XIRI0lSXqXQZ3mp/0nl+6vLAE0tDGc6Vg2LK6IebhUKMUMVeITdyMHofAYoXELCBcdl0ImmWRS3P88zSpQpE7PSirBf1MCyzHtFHMl+vv1o+TSnGBBGNIYRXk7mJ07TlF3ufNgdIKLOoK449J2TpMrHl3TLG036/CycDm88wwMy650wsh8NeS6Ykk1Lr3PTcBxdVg0EAztYBLlRHWSy0W/P6aS/n7FlCU8LSAU3SvsswniBFPDXrOyB3bshquAdhOqvAY4IFTlBsj7UmOtZosiJVBK7XpiiVzCjVzeyglpdabqIH1ZQPJDhWhGrS9CDiOwIAo7pbbwzkJF9112qEEhKyjdPfO+eggCOXwmfg+++ItM9TO60n+GdyyeRNvlnn+dPjEPpSHxDNpfgAPngZ5yENREdPRoFjyiqWa1iRqmz6Vt1RbEIGklcoZMMia40K67oYzhaIsCoGVbYPigwxLl28VoXQg4lSNB2QhjHz2JSWYuFh6I/F/AnXT3ZJtQVpYdffz9XasuazAE7JCXWc1v9Zgh1oLHpwQmrvJABm1DBmcDNN29fwK7gXjtUc+/+AT2JQBofkADNEJ3FaLg2TeKFL4QQcfcWm3L9MjdPhQ7eptyQii6KUTfEGsUYa063l3W85zq0aJcdTVdW03+xw2kmrpayDCJWaHVcr2C5Wjuo9OyZkmYHlOIJafs8J5D5EkNDxDiOsmn+m+1vBMe0ayvL8yv4+IcTly/aEum9MOzkJ4S8dXD1hau+W2e2EAdbaxlf1Z4+6YO77KdBR/Cb0MFrCJQSZ1VMnhIIPO1x3nNDLOsyCM2bv6rSlWWE4lmNcbKttzVJ/F5l1O1SV3rwGlssQfFy5MUUteo4jtXQcXsMj8ISPDdm9Qgetduyj7ZISyOVQZ/yjbcNIukG2VuNSWKWuWgarW+A6qPVazvbz6jVbqVvf3HM4iqGlHEkch7PUl5mcKgjRqExZqb7URUhke8ZJmZO3+7BW4LXV4kmS+M3sb6qj3VAhYzg/ikWhUjCuPd5GOVU+Meysbxb6nc1xvUaroSJllszzTCxdcT+NNvI6SjIRkXgySEZnt8BN1/UARzH6tYEY5T+qIDDiM08NlmDihSit+YfPpgSsRjyYUdB/TDSxeAXqaFJJN9gt5BoIRxghkMaVx4FN00ddDhOxFwwHQaBwDPuc7ffXR90RwGyyvUW8aG4X2u0lL7wVCoZMYyAEplFxT9+uk7lN6h0H0p89zhcFA05sPLuG1iH7t1UPVHhHKFHd0D4RpRtKUOAh6CxR5dvuViCZqRyU5iDIg/C4Fo9DlUvfI4y25/P8pu4VQIvBOiWua3oJniSTi/rirvjwzs7G2adTpbJsuMCuRpXCCfI7bfpa7eo4sxjsR5BcqnOYJIHeuDSfoHx7qWuEoP2hXNKrzNG34uTFdvGpcmXL40vHsdlchzDEN5azxpH4UTVy1vS72cXwF1fC39BuLEXxWk9a9VvaK4dzQfWwMjSnv6lNuZg+JgJIm3uU1lqW63zpyvfdr+Lu3cCGiJ4tFtyV5Ii2v5CR00QM9ZmlbUok4BcSEHiJB58u2D9HAx334GP+Ng0zMDedQS9GO77lAo58qwiG3yRauYSxs8ilW2I3d0eAqbRQ9Su5sjB+6IrrLHpKkgpgwZzOpqDZeq8h8vUd4sqVhjW4EgPKdR3dBH/dPsaumoYreXkBIPGk88/GQC8uKunrw661FEEZyNVkNKBym7fBnMaY6T8dZpNtgM3PW0XOAgIncVAUikZ5xYeU71mIRTcus7egZyUYY0IB8ZbsvSZ9sbBy+zzKl7hf917qvoQtuPFLzk1RcgMFYbxVtxCLc+/fvnKBufNJIPt7I4AxgPltGiHt6PSnpongfwNozbZhRbUT9jKQ/U6wGiygJA1A8xujoOQtTxQeP4DY0ZwXWN4wQ8LP4TxUjH2NGecydxLN8+iJbDvmh8+d64NHT0eVtsHCq3kjXV2nItTHOnienzIYlkU7GGN+HnNxHU8/KtFCTCqR1OUshIrIFdglKmpMx7O/6jiTMd1QW5h+S8hdmA+heSbbL68r/pnt1ilbgm1di376NKpYpJa2MqCoJOzgSXjI3bof+o0nM2oPU6oR4oUqUVj6yT1P9Lvn1ivPuwJ65e/eesc94jtuvenKJm76QPz3nZgWHQyKNBplqC8GOx3i+8Nw/DRiR3Vr77gBR3IlXK2LrsZEZ/kR8+NTbFDDILwOpoL5HHeDRgx7ggKJm8H4ERwPumAcBLvKw7q8beoYiJtIHjfOMGjuNJtWaA59frpgNfcn4qnglbgoZ/VF1J31auiyAykT9LX7dlx3qA9KS2y5yz/ua1mefxLv8RLENE+qwXg0rqNO07cvCVXKMeuQCVB44ZkWHZ8yBcSLklJi+Q75a64u/XHw5APqYbCPmR06xkUuBQyUh/TIqhdN7shDpQxqFuDMf7+EgjQgE66xdxkP5UsNfqqxTuT2Tm3x7Gl8sMEdVA8Q+fE5ffHJnwWaQn2SENuuuMkpqmY/FG0OHMle8WCTPzigjAiCEPSdpE7zu4rHJbXuCRaaUJ4kZJG01/OI9E4FNMzYU8Ie2mbNczMB3B2rOxB5yNlznrjeAeEI0B5ySKm3Ot7C5+M5TRtNnjazbWcmZalO5MDzDxs2dDXi+qY0CTgU/ZSMDZsCZn1XFsO6xFs3nYfaA/RBn3i0Z/m15FVmmvGxrKqKU6FhmJaF4yI6YllOEMQmDM9jsoUz1DbZCaeBmb6O6YrgE2sVNXSrHhdOCqufpHhfY/b2En8uSXS/dF0cDETiXlAQbLmjyBKP0b25Y58BPXER0pAuVFchSgQRIjgumlkNc2gFH50TS7Tym6KrtrR/0Q3umrxYNuyQVBLcii7KGoZt6nIhsazxhKXD6biGAbwT4eHYV0CbddBA4w0OdMIfqYYnXKImtbe8TtdZnmiiJU1bLBMlzQiwhMikZPVIWZQ/PbB6MzawBSsVUeDMsvlrQvJQ3j5Ot007xIx/twxD6zswno3mcDgxQ/Og3dv/O4FeuHtrlJPcaUeEGjL89RpB5H4mcvOaiPr9Lf0OdaVAanuPiiplXvcIxGG1374YmWzT2jSIqnFk+Ed7bfOyRny5BZ8H81f/cOAnMa4OLMUgA1/F4AONGP7ACjDVfSDazM2FMhCIiWYSQ8hw3/cYKNEVdOUWgQDfPWP51/jWU7n63yyOvwHgl2ceb19c+K/5b6XntDzHrJkBdBgABP31sOacVpX+e6hFVeMK5ycJWa3j0UfOevSi1S7hdup3NPVX7FsH0CglSK0JIIxTHnT+khRD+mkXA+UUTs0ggKxGU6jUBo6oXy/Wj9hLA1W2emD0w/gaxkb9eq/Go2Swax9Rzj2AoGG4VaXBLdX0eFCRSMoaebatBIknppo1QDxMi+FUll6UFWfLg4gxSY1QjNRjDw61FYXyU4GKmpgUSG2A/JllCfXHhXPtpJ0IVp5GFfNyFVGSzXjU9NGxqhphc7lJheFQhngo/C61A2XNROvWh/DIYmTZosvSB3FOi11VjLJyfZWPtCoQW8oGQWmQBURJKIQL5DCFY+IUYXVTp3Qh842R04lEGg6RZMsVwvK8JQ2pmxRZif7uWWRJPUTQOBMu6/E3mJXMOQ3fYYzcYO8S58mXxAbN6dLlLbc5o1gOyCOePYHdWz+e6FNkGeu1lC4ntuQq+nTrVWHfHT72ZLlpB9ptKhoYrpS1mFeO/UwX36X0kZch1olgDU4pi/2hvdDmcbunW483LUFWCepZ4tGUTY34jNaMJvuQu0mWKJnHAI1+yXI5ierTdYeQHb7sUwWyYpD4fr4kziVxdmUlFqx8JkV/tbmWc9hjfwL2Yzcer+72+aQ1TyGfIvCwFDkB/zWucIGA86nDk4YKGZuWf9WGZIFDAyYAb5U4VQhRPIXhFKZwjrmhKMQZBFX2gSbb1nC4R70JApgffyWAEW+ljyBWEEq+MoD0TYkgvFGGCN2oEVt7AjKquwmSwDaqjBHZraTw9CkTJFoVCUODMkUgT5nBl6DMkXJXFhDkyhIhIawk8V2sIQBXKFMqk1aYKt22RKFsIXK5smDt+Sdk1hQnI3kbpE5thUxwWXqYHGKkPApjcxxvO0sVIsrHliIKOU+rVupHSjhytvkKKMZ4rMf8CGrsEpugwJ7Uxs6ZcmXhrDH6y1Xy5sBllnM9nDe3aVU1VxNcebCi+PQK+eo2Ti6b6kbbCokRFaaw3JKcWg725MhxN+RDJexDaZwAkWacNUZmD5WZAPOd9SpWLiU5c5RWV+TKc66OsMExXlumqGCyL1r9VLfElK1CI00vaw/nUyi4dbUsCtkvxRYHNSut22RKJLGP29hrAzM+0vQGZ3+w8wG2O58ojMmyS7bdFrFkJYe1t2RynXPBRTZs2ZG75LIrrrIP3l+dn57H2TXX5btpsT32cvGRK7ee7PCtKAp8vHjzse9NW0yh56L0xaU2ChKsTIh3QpU3on22sH7ifPMdVWrUJh+qRYWBaD3guV7qxKnXqEmDTebYJ94nCWZI1G2mJM1a/GKuZClSaXxw1KzMhSGnk4D1+sIEvR75VPqz82FGJCEQC7GRzhZj/WtXV756CtRXqIEiDRVrpERjpZpIaqqZ5lpoqZXWHDfpT98j00Zb7ZRrr0IHHcHjpLMuuqKLy5jUDhRbmNnsrE46aPimx013ePY7wB8LW5oMvlSGjTjokAGH/aHfSadQEfHQUy+9McfUpUOvHr+aFx+VpHujzQn0TKPdChyffTGIZMrEUpm28sOIr9NVCQmLiGrRqk27mLgOnbokJFkgwHx3PXLPfY9TM2oOlBhJT6QLxgd7xGI5JJaJJfN7RP1DyX7a45hLtkllKpaUw/My8Yxom9R6543Fx5aeR/TJYGTuofT7jWXmDA2m756xyWzm7Z7uxffcvdYV354Jfo32TNk735xd7e12DfYMzny9+sJ2zwuWCmEWBGHmB4lAVgBhLwv7FwuwQ31pC5YCHBRAAhDcHAgAIKk95Y6RilXieKJYDGuiUk/Ge3JEFVFlVOWq5XtB4qbcklP32SR+z/ecmD4hC1n70ILKKLdyL4G95M4h0yd/JxCIrhvh4IA7C/c7mOtTjcaqnyj01bCUh+1qnSV3zm4du3P2bdjJP3guwdzukfexk+PD8yP2N5i98J4Qq7Gsav6xIo9fyA4kPKlkMxLuolJPGV8Gmj/W05+6m0telBsa6ttNYpBjC1NDY3tHXHVbkKr8ETJ1oVS0gv9gq+1iSywHTbIO9GwYeTXv/u5eynYA";
|
|
145
|
+
CRIMSON_PRO_LATIN_WOFF2_DATA_URL = "data:font/woff2;base64,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";
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// src/capture/font-embed.ts
|
|
150
|
+
var CLAY_FONTS_EMBED_CSS;
|
|
151
|
+
var init_font_embed = __esm({
|
|
152
|
+
"src/capture/font-embed.ts"() {
|
|
153
|
+
"use strict";
|
|
154
|
+
init_font_data_urls_generated();
|
|
155
|
+
CLAY_FONTS_EMBED_CSS = `
|
|
156
|
+
@font-face {
|
|
157
|
+
font-family: 'Geist';
|
|
158
|
+
font-style: normal;
|
|
159
|
+
font-weight: 100 900;
|
|
160
|
+
font-display: swap;
|
|
161
|
+
src: url(${GEIST_LATIN_WOFF2_DATA_URL}) format('woff2-variations');
|
|
162
|
+
}
|
|
163
|
+
@font-face {
|
|
164
|
+
font-family: 'Crimson Pro';
|
|
165
|
+
font-style: normal;
|
|
166
|
+
font-weight: 200 900;
|
|
167
|
+
font-display: swap;
|
|
168
|
+
src: url(${CRIMSON_PRO_LATIN_WOFF2_DATA_URL}) format('woff2-variations');
|
|
169
|
+
}
|
|
170
|
+
`.trim();
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// src/capture/dom-to-image.ts
|
|
175
|
+
var dom_to_image_exports = {};
|
|
176
|
+
__export(dom_to_image_exports, {
|
|
177
|
+
CAPTURE_EXCLUDE_ATTRIBUTE: () => CAPTURE_EXCLUDE_ATTRIBUTE,
|
|
178
|
+
_resetFontEmbedCacheForTests: () => _resetFontEmbedCacheForTests,
|
|
179
|
+
copyNodeAsPng: () => copyNodeAsPng,
|
|
180
|
+
downloadNodeAsPng: () => downloadNodeAsPng,
|
|
181
|
+
nodeToPngBlob: () => nodeToPngBlob,
|
|
182
|
+
truncateErrorMessage: () => truncateErrorMessage
|
|
183
|
+
});
|
|
184
|
+
function defaultFilter(node) {
|
|
185
|
+
if (typeof node.getAttribute !== "function") return true;
|
|
186
|
+
return !node.hasAttribute(CAPTURE_EXCLUDE_ATTRIBUTE);
|
|
187
|
+
}
|
|
188
|
+
function composeFilter(caller) {
|
|
189
|
+
if (!caller) return defaultFilter;
|
|
190
|
+
return (node) => defaultFilter(node) && caller(node);
|
|
191
|
+
}
|
|
192
|
+
async function resolveFontEmbedCSS(node) {
|
|
193
|
+
if (cachedFontEmbedCSS !== null) return cachedFontEmbedCSS;
|
|
194
|
+
if (inflightFontEmbedCSS !== null) return inflightFontEmbedCSS;
|
|
195
|
+
inflightFontEmbedCSS = (0, import_html_to_image.getFontEmbedCSS)(node).catch(() => "").then((dynamicCss) => {
|
|
196
|
+
const combined = `${CLAY_FONTS_EMBED_CSS}
|
|
197
|
+
${dynamicCss}`;
|
|
198
|
+
cachedFontEmbedCSS = combined;
|
|
199
|
+
return combined;
|
|
200
|
+
}).finally(() => {
|
|
201
|
+
inflightFontEmbedCSS = null;
|
|
202
|
+
});
|
|
203
|
+
return inflightFontEmbedCSS;
|
|
204
|
+
}
|
|
205
|
+
function _resetFontEmbedCacheForTests() {
|
|
206
|
+
cachedFontEmbedCSS = null;
|
|
207
|
+
inflightFontEmbedCSS = null;
|
|
208
|
+
}
|
|
209
|
+
async function nodeToPngBlob(node, options = {}) {
|
|
210
|
+
const fontEmbedCSS = options.fontEmbedCSS ?? await resolveFontEmbedCSS(node).catch(() => void 0);
|
|
211
|
+
const rect = node.getBoundingClientRect();
|
|
212
|
+
const width2 = options.width ?? rect.width;
|
|
213
|
+
const height2 = options.height ?? rect.height;
|
|
214
|
+
const blob = await (0, import_html_to_image.toBlob)(node, {
|
|
215
|
+
backgroundColor: options.backgroundColor ?? DEFAULT_BACKGROUND,
|
|
216
|
+
cacheBust: options.cacheBust ?? true,
|
|
217
|
+
filter: composeFilter(options.filter),
|
|
218
|
+
pixelRatio: options.pixelRatio,
|
|
219
|
+
width: width2,
|
|
220
|
+
height: height2,
|
|
221
|
+
fontEmbedCSS
|
|
222
|
+
});
|
|
223
|
+
if (!blob) throw new Error("Failed to rasterise node \u2014 toBlob returned null (possible cross-origin canvas taint).");
|
|
224
|
+
return blob;
|
|
225
|
+
}
|
|
226
|
+
async function copyNodeAsPng(node, options = {}) {
|
|
227
|
+
if (typeof ClipboardItem === "undefined") {
|
|
228
|
+
throw new Error("Clipboard image writes are not supported in this environment (ClipboardItem missing).");
|
|
229
|
+
}
|
|
230
|
+
if (!navigator.clipboard) {
|
|
231
|
+
throw new Error("Clipboard API unavailable \u2014 secure context (HTTPS) required.");
|
|
232
|
+
}
|
|
233
|
+
const blobPromise = nodeToPngBlob(node, options);
|
|
234
|
+
void blobPromise.catch(() => void 0);
|
|
235
|
+
const item = new ClipboardItem({ "image/png": blobPromise });
|
|
236
|
+
await Promise.all([navigator.clipboard.write([item]), blobPromise]);
|
|
237
|
+
}
|
|
238
|
+
async function downloadNodeAsPng(node, filename, options = {}) {
|
|
239
|
+
const blob = await nodeToPngBlob(node, options);
|
|
240
|
+
const url = URL.createObjectURL(blob);
|
|
241
|
+
const a = document.createElement("a");
|
|
242
|
+
a.href = url;
|
|
243
|
+
a.download = filename;
|
|
244
|
+
a.rel = "noopener noreferrer";
|
|
245
|
+
document.body.appendChild(a);
|
|
246
|
+
a.click();
|
|
247
|
+
a.remove();
|
|
248
|
+
setTimeout(() => URL.revokeObjectURL(url), OBJECT_URL_REVOKE_DELAY_MS);
|
|
249
|
+
}
|
|
250
|
+
function truncateErrorMessage(message, max = MAX_ERROR_MESSAGE_CHARS) {
|
|
251
|
+
return message.length <= max ? message : `${message.slice(0, max - 1)}\u2026`;
|
|
252
|
+
}
|
|
253
|
+
var import_html_to_image, DEFAULT_BACKGROUND, MAX_ERROR_MESSAGE_CHARS, cachedFontEmbedCSS, inflightFontEmbedCSS, OBJECT_URL_REVOKE_DELAY_MS;
|
|
254
|
+
var init_dom_to_image = __esm({
|
|
255
|
+
"src/capture/dom-to-image.ts"() {
|
|
256
|
+
"use strict";
|
|
257
|
+
import_html_to_image = require("html-to-image");
|
|
258
|
+
init_colors();
|
|
259
|
+
init_capture_exclude_attribute();
|
|
260
|
+
init_font_embed();
|
|
261
|
+
DEFAULT_BACKGROUND = colors.white;
|
|
262
|
+
MAX_ERROR_MESSAGE_CHARS = 120;
|
|
263
|
+
cachedFontEmbedCSS = null;
|
|
264
|
+
inflightFontEmbedCSS = null;
|
|
265
|
+
OBJECT_URL_REVOKE_DELAY_MS = 3e4;
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
|
|
33
269
|
// node_modules/lottie-web/build/player/lottie.js
|
|
34
270
|
var require_lottie = __commonJS({
|
|
35
271
|
"node_modules/lottie-web/build/player/lottie.js"(exports, module) {
|
|
@@ -16342,7 +16578,9 @@ var require_lottie = __commonJS({
|
|
|
16342
16578
|
// src/index.ts
|
|
16343
16579
|
var src_exports = {};
|
|
16344
16580
|
__export(src_exports, {
|
|
16581
|
+
ArtifactCopyAsImageButton: () => ArtifactCopyAsImageButton,
|
|
16345
16582
|
ArtifactDownloadButton: () => ArtifactDownloadButton,
|
|
16583
|
+
ArtifactDownloadMenu: () => ArtifactDownloadMenu,
|
|
16346
16584
|
ArtifactRefBlock: () => ArtifactRefBlock,
|
|
16347
16585
|
ArtifactRefBlockService: () => ArtifactRefBlockService,
|
|
16348
16586
|
ArtifactServices: () => ArtifactServices,
|
|
@@ -16390,93 +16628,8 @@ __export(src_exports, {
|
|
|
16390
16628
|
});
|
|
16391
16629
|
module.exports = __toCommonJS(src_exports);
|
|
16392
16630
|
|
|
16393
|
-
// src/tokens/
|
|
16394
|
-
|
|
16395
|
-
// White
|
|
16396
|
-
white: "#FFFFFF",
|
|
16397
|
-
"white-alpha-85": "rgba(255, 255, 255, 0.85)",
|
|
16398
|
-
"white-alpha-40": "rgba(255, 255, 255, 0.40)",
|
|
16399
|
-
// Brown
|
|
16400
|
-
"brown-10": "#FAF9F8",
|
|
16401
|
-
"brown-20": "#F5F3F0",
|
|
16402
|
-
"brown-30": "#EEEBE5",
|
|
16403
|
-
"brown-40": "#E6E2DA",
|
|
16404
|
-
"brown-50": "#CFCBC4",
|
|
16405
|
-
"brown-60": "#A19E99",
|
|
16406
|
-
"brown-70": "#73716D",
|
|
16407
|
-
"brown-80": "#5C5A57",
|
|
16408
|
-
"brown-90": "#2E2D2C",
|
|
16409
|
-
"brown-100": "#171716",
|
|
16410
|
-
"brown-alpha-12": "rgba(23, 23, 22, 0.12)",
|
|
16411
|
-
"brown-alpha-20": "rgba(23, 23, 22, 0.20)",
|
|
16412
|
-
"brown-alpha-55": "rgba(23, 23, 22, 0.55)",
|
|
16413
|
-
"brown-alpha-70": "rgba(23, 23, 22, 0.70)",
|
|
16414
|
-
"brown-alpha-80": "rgba(23, 23, 22, 0.80)",
|
|
16415
|
-
"brown-alpha-90": "rgba(23, 23, 22, 0.90)",
|
|
16416
|
-
// Fuchsia
|
|
16417
|
-
"fuchsia-50": "#FAF5FF",
|
|
16418
|
-
"fuchsia-300": "#F0ABFC",
|
|
16419
|
-
"fuchsia-500": "#D946EF",
|
|
16420
|
-
"fuchsia-600": "#C026D3",
|
|
16421
|
-
"fuchsia-800": "#86198F",
|
|
16422
|
-
// Pink
|
|
16423
|
-
"pink-50": "#FDF2F8",
|
|
16424
|
-
"pink-400": "#F472B6",
|
|
16425
|
-
"pink-600": "#DB2777",
|
|
16426
|
-
"pink-800": "#9D174D",
|
|
16427
|
-
// Violet
|
|
16428
|
-
"violet-50": "#F5F3FF",
|
|
16429
|
-
"violet-400": "#A78BFA",
|
|
16430
|
-
"violet-600": "#7C3AED",
|
|
16431
|
-
"violet-800": "#5B21B6",
|
|
16432
|
-
// Indigo
|
|
16433
|
-
"indigo-50": "#EEF2FF",
|
|
16434
|
-
"indigo-400": "#818CF8",
|
|
16435
|
-
"indigo-500": "#6366F1",
|
|
16436
|
-
"indigo-600": "#4F46E5",
|
|
16437
|
-
"indigo-800": "#3730A3",
|
|
16438
|
-
// Cyan
|
|
16439
|
-
"cyan-50": "#E7FEFF",
|
|
16440
|
-
"cyan-300": "#67E8F9",
|
|
16441
|
-
"cyan-600": "#0891B2",
|
|
16442
|
-
"cyan-900": "#164E63",
|
|
16443
|
-
// Teal
|
|
16444
|
-
"teal-50": "#EBFDF9",
|
|
16445
|
-
"teal-300": "#5EEAD4",
|
|
16446
|
-
"teal-600": "#0D9488",
|
|
16447
|
-
// Rose
|
|
16448
|
-
"rose-400": "#FB7185",
|
|
16449
|
-
// Purple
|
|
16450
|
-
"purple-400": "#C084FC",
|
|
16451
|
-
// Blue
|
|
16452
|
-
"blue-50": "#EFF6FF",
|
|
16453
|
-
"blue-100": "#DBEAFE",
|
|
16454
|
-
"blue-300": "#93C5FD",
|
|
16455
|
-
"blue-400": "#60A5FA",
|
|
16456
|
-
"blue-600": "#2563EB",
|
|
16457
|
-
"blue-800": "#1E40AF",
|
|
16458
|
-
// Sky
|
|
16459
|
-
"sky-300": "#7DD3FC",
|
|
16460
|
-
// Green
|
|
16461
|
-
"green-50": "#ECF9F0",
|
|
16462
|
-
"green-100": "#D4F1D9",
|
|
16463
|
-
"green-400": "#3DC269",
|
|
16464
|
-
"green-700": "#277C43",
|
|
16465
|
-
"green-800": "#1C5930",
|
|
16466
|
-
// Orange
|
|
16467
|
-
"orange-50": "#FFF7ED",
|
|
16468
|
-
"orange-100": "#FFEDD5",
|
|
16469
|
-
"orange-200": "#FED7AA",
|
|
16470
|
-
"orange-500": "#F97316",
|
|
16471
|
-
"orange-600": "#EA580C",
|
|
16472
|
-
// Red
|
|
16473
|
-
"red-50": "#FEF2F2",
|
|
16474
|
-
"red-100": "#FEE2E2",
|
|
16475
|
-
"red-200": "#FECACA",
|
|
16476
|
-
"red-400": "#F7776C",
|
|
16477
|
-
"red-500": "#EF4444",
|
|
16478
|
-
"red-600": "#DC2626"
|
|
16479
|
-
};
|
|
16631
|
+
// src/tokens/index.ts
|
|
16632
|
+
init_colors();
|
|
16480
16633
|
|
|
16481
16634
|
// src/tokens/typography.ts
|
|
16482
16635
|
var fontFamilies = {
|
|
@@ -16787,7 +16940,10 @@ var artifactTypes = {
|
|
|
16787
16940
|
|
|
16788
16941
|
// src/components/artifacts/chart-artifact/types.ts
|
|
16789
16942
|
var DEFAULT_CHART_ARTIFACT_LABELS = {
|
|
16790
|
-
download: "Download
|
|
16943
|
+
download: "Download",
|
|
16944
|
+
downloadCsv: "Download CSV",
|
|
16945
|
+
downloadPng: "Download PNG",
|
|
16946
|
+
copyAsImage: "Copy Image",
|
|
16791
16947
|
unavailable: "Chart data is unavailable.",
|
|
16792
16948
|
loadError: "Couldn't load chart data.",
|
|
16793
16949
|
loading: "Loading chart\u2026",
|
|
@@ -16805,7 +16961,10 @@ var DEFAULT_TABLE_ARTIFACT_LABELS = {
|
|
|
16805
16961
|
};
|
|
16806
16962
|
|
|
16807
16963
|
// src/components/artifacts/chart-artifact/chart-artifact.tsx
|
|
16808
|
-
var
|
|
16964
|
+
var import_react13 = require("react");
|
|
16965
|
+
|
|
16966
|
+
// src/components/ai-elements/artifact.tsx
|
|
16967
|
+
var import_react = require("react");
|
|
16809
16968
|
|
|
16810
16969
|
// src/lib/utils.ts
|
|
16811
16970
|
var import_clsx = require("clsx");
|
|
@@ -16816,20 +16975,25 @@ function cn(...inputs) {
|
|
|
16816
16975
|
|
|
16817
16976
|
// src/components/ai-elements/artifact.tsx
|
|
16818
16977
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
16819
|
-
var Artifact = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
16978
|
+
var Artifact = (0, import_react.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
16820
16979
|
"div",
|
|
16821
16980
|
{
|
|
16981
|
+
ref,
|
|
16822
16982
|
className: cn("flex flex-col overflow-hidden rounded-lg border bg-background shadow-sm", className),
|
|
16823
16983
|
...props
|
|
16824
16984
|
}
|
|
16825
|
-
);
|
|
16985
|
+
));
|
|
16986
|
+
Artifact.displayName = "Artifact";
|
|
16826
16987
|
var ArtifactHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex items-center justify-between border-b bg-muted/50 px-4 py-3", className), ...props });
|
|
16827
16988
|
var ArtifactTitle = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: cn("font-medium text-foreground text-sm", className), ...props });
|
|
16828
16989
|
var ArtifactActions = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex items-center gap-1", className), ...props });
|
|
16829
16990
|
var ArtifactContent = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex-1 overflow-auto p-4", className), ...props });
|
|
16830
16991
|
|
|
16992
|
+
// src/components/artifacts/chart-artifact/chart-artifact.tsx
|
|
16993
|
+
init_capture_exclude_attribute();
|
|
16994
|
+
|
|
16831
16995
|
// node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
|
|
16832
|
-
var
|
|
16996
|
+
var import_react2 = require("react");
|
|
16833
16997
|
|
|
16834
16998
|
// node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs
|
|
16835
16999
|
var defaultAttributes = {
|
|
@@ -16856,8 +17020,8 @@ var defaultAttributes = {
|
|
|
16856
17020
|
|
|
16857
17021
|
// node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
|
|
16858
17022
|
var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
|
|
16859
|
-
const Component = (0,
|
|
16860
|
-
({ color = "currentColor", size = 24, stroke = 2, title, className, children, ...rest }, ref) => (0,
|
|
17023
|
+
const Component = (0, import_react2.forwardRef)(
|
|
17024
|
+
({ color = "currentColor", size = 24, stroke = 2, title, className, children, ...rest }, ref) => (0, import_react2.createElement)(
|
|
16861
17025
|
"svg",
|
|
16862
17026
|
{
|
|
16863
17027
|
ref,
|
|
@@ -16874,8 +17038,8 @@ var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
|
|
|
16874
17038
|
...rest
|
|
16875
17039
|
},
|
|
16876
17040
|
[
|
|
16877
|
-
title && (0,
|
|
16878
|
-
...iconNode.map(([tag, attrs]) => (0,
|
|
17041
|
+
title && (0, import_react2.createElement)("title", { key: "svg-title" }, title),
|
|
17042
|
+
...iconNode.map(([tag, attrs]) => (0, import_react2.createElement)(tag, attrs)),
|
|
16879
17043
|
...Array.isArray(children) ? children : [children]
|
|
16880
17044
|
]
|
|
16881
17045
|
)
|
|
@@ -16884,31 +17048,50 @@ var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
|
|
|
16884
17048
|
return Component;
|
|
16885
17049
|
};
|
|
16886
17050
|
|
|
17051
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs
|
|
17052
|
+
var __iconNode = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
|
|
17053
|
+
var IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCircle", __iconNode);
|
|
17054
|
+
|
|
16887
17055
|
// node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs
|
|
16888
|
-
var
|
|
16889
|
-
var IconCheck = createReactComponent("outline", "check", "Check",
|
|
17056
|
+
var __iconNode2 = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
|
|
17057
|
+
var IconCheck = createReactComponent("outline", "check", "Check", __iconNode2);
|
|
16890
17058
|
|
|
16891
17059
|
// node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.mjs
|
|
16892
|
-
var
|
|
16893
|
-
var IconCopy = createReactComponent("outline", "copy", "Copy",
|
|
17060
|
+
var __iconNode3 = [["path", { "d": "M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
|
|
17061
|
+
var IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode3);
|
|
16894
17062
|
|
|
16895
17063
|
// node_modules/@tabler/icons-react/dist/esm/icons/IconDownload.mjs
|
|
16896
|
-
var
|
|
16897
|
-
var IconDownload = createReactComponent("outline", "download", "Download",
|
|
17064
|
+
var __iconNode4 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
|
|
17065
|
+
var IconDownload = createReactComponent("outline", "download", "Download", __iconNode4);
|
|
17066
|
+
|
|
17067
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs
|
|
17068
|
+
var __iconNode5 = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2", "key": "svg-1" }], ["path", { "d": "M8 11h8v7h-8l0 -7", "key": "svg-2" }], ["path", { "d": "M8 15h8", "key": "svg-3" }], ["path", { "d": "M11 11v7", "key": "svg-4" }]];
|
|
17069
|
+
var IconFileSpreadsheet = createReactComponent("outline", "file-spreadsheet", "FileSpreadsheet", __iconNode5);
|
|
17070
|
+
|
|
17071
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs
|
|
17072
|
+
var __iconNode6 = [["path", { "d": "M12 3a9 9 0 1 0 9 9", "key": "svg-0" }]];
|
|
17073
|
+
var IconLoader2 = createReactComponent("outline", "loader-2", "Loader2", __iconNode6);
|
|
17074
|
+
|
|
17075
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconPhoto.mjs
|
|
17076
|
+
var __iconNode7 = [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]];
|
|
17077
|
+
var IconPhoto = createReactComponent("outline", "photo", "Photo", __iconNode7);
|
|
16898
17078
|
|
|
16899
17079
|
// node_modules/@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs
|
|
16900
|
-
var
|
|
16901
|
-
var IconThumbDown = createReactComponent("outline", "thumb-down", "ThumbDown",
|
|
17080
|
+
var __iconNode8 = [["path", { "d": "M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3", "key": "svg-0" }]];
|
|
17081
|
+
var IconThumbDown = createReactComponent("outline", "thumb-down", "ThumbDown", __iconNode8);
|
|
16902
17082
|
|
|
16903
17083
|
// node_modules/@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs
|
|
16904
|
-
var
|
|
16905
|
-
var IconThumbUp = createReactComponent("outline", "thumb-up", "ThumbUp",
|
|
17084
|
+
var __iconNode9 = [["path", { "d": "M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3", "key": "svg-0" }]];
|
|
17085
|
+
var IconThumbUp = createReactComponent("outline", "thumb-up", "ThumbUp", __iconNode9);
|
|
17086
|
+
|
|
17087
|
+
// src/components/artifacts/artifact-copy-as-image-button/artifact-copy-as-image-button.tsx
|
|
17088
|
+
var import_react6 = require("react");
|
|
16906
17089
|
|
|
16907
17090
|
// src/components/icon-button/icon-button.tsx
|
|
16908
|
-
var
|
|
17091
|
+
var import_react4 = require("react");
|
|
16909
17092
|
|
|
16910
17093
|
// src/components/icon/icon.tsx
|
|
16911
|
-
var
|
|
17094
|
+
var import_react3 = require("react");
|
|
16912
17095
|
|
|
16913
17096
|
// src/components/icon/icon-styles.ts
|
|
16914
17097
|
var import_styled_components = __toESM(require("styled-components"), 1);
|
|
@@ -16935,7 +17118,7 @@ var IconWrapper = import_styled_components.default.span`
|
|
|
16935
17118
|
// src/components/icon/icon.tsx
|
|
16936
17119
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
16937
17120
|
var DEFAULT_SIZE = 16;
|
|
16938
|
-
var Icon = (0,
|
|
17121
|
+
var Icon = (0, import_react3.forwardRef)(function Icon2({ icon: IconComponent, size = DEFAULT_SIZE, color, className, "aria-label": ariaLabel }, ref) {
|
|
16939
17122
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
16940
17123
|
IconWrapper,
|
|
16941
17124
|
{
|
|
@@ -16951,6 +17134,7 @@ var Icon = (0, import_react2.forwardRef)(function Icon2({ icon: IconComponent, s
|
|
|
16951
17134
|
|
|
16952
17135
|
// src/components/icon-button/icon-button-styles.ts
|
|
16953
17136
|
var import_styled_components2 = __toESM(require("styled-components"), 1);
|
|
17137
|
+
init_colors();
|
|
16954
17138
|
var PADDING = {
|
|
16955
17139
|
short: {
|
|
16956
17140
|
small: "4px",
|
|
@@ -16998,7 +17182,7 @@ var ICON_SIZE_BY_BUTTON_SIZE = {
|
|
|
16998
17182
|
small: 16,
|
|
16999
17183
|
medium: 20
|
|
17000
17184
|
};
|
|
17001
|
-
var IconButton = (0,
|
|
17185
|
+
var IconButton = (0, import_react4.forwardRef)(function IconButton2({
|
|
17002
17186
|
icon,
|
|
17003
17187
|
size = "small",
|
|
17004
17188
|
variant = "short",
|
|
@@ -17053,17 +17237,119 @@ var TooltipContent = React.forwardRef(({ className, sideOffset = 4, ...props },
|
|
|
17053
17237
|
));
|
|
17054
17238
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
17055
17239
|
|
|
17056
|
-
// src/components/artifacts/artifact-
|
|
17240
|
+
// src/components/artifacts/artifact-copy-as-image-button/use-copy-as-image.ts
|
|
17241
|
+
var import_react5 = require("react");
|
|
17242
|
+
var DEFAULT_RESET_AFTER_MS = 1500;
|
|
17243
|
+
function useCopyAsImage(targetRef, options = {}) {
|
|
17244
|
+
const [status, setStatus] = (0, import_react5.useState)("idle");
|
|
17245
|
+
const [error, setError] = (0, import_react5.useState)(null);
|
|
17246
|
+
const resetTimerRef = (0, import_react5.useRef)(null);
|
|
17247
|
+
(0, import_react5.useEffect)(() => {
|
|
17248
|
+
return () => {
|
|
17249
|
+
if (resetTimerRef.current !== null) clearTimeout(resetTimerRef.current);
|
|
17250
|
+
};
|
|
17251
|
+
}, []);
|
|
17252
|
+
const copy = (0, import_react5.useCallback)(async () => {
|
|
17253
|
+
if (resetTimerRef.current !== null) {
|
|
17254
|
+
clearTimeout(resetTimerRef.current);
|
|
17255
|
+
resetTimerRef.current = null;
|
|
17256
|
+
}
|
|
17257
|
+
const { resetAfterMs = DEFAULT_RESET_AFTER_MS, ...nodeOptions } = options;
|
|
17258
|
+
const scheduleReset = () => {
|
|
17259
|
+
if (resetAfterMs <= 0) return;
|
|
17260
|
+
resetTimerRef.current = setTimeout(() => {
|
|
17261
|
+
resetTimerRef.current = null;
|
|
17262
|
+
setStatus("idle");
|
|
17263
|
+
setError(null);
|
|
17264
|
+
}, resetAfterMs);
|
|
17265
|
+
};
|
|
17266
|
+
const node = targetRef.current;
|
|
17267
|
+
if (!node) {
|
|
17268
|
+
const err = new Error("ArtifactCopyAsImageButton: target ref is not attached to a DOM node.");
|
|
17269
|
+
setError(err);
|
|
17270
|
+
setStatus("error");
|
|
17271
|
+
scheduleReset();
|
|
17272
|
+
throw err;
|
|
17273
|
+
}
|
|
17274
|
+
setError(null);
|
|
17275
|
+
setStatus("working");
|
|
17276
|
+
try {
|
|
17277
|
+
const { copyNodeAsPng: copyNodeAsPng2 } = await Promise.resolve().then(() => (init_dom_to_image(), dom_to_image_exports));
|
|
17278
|
+
await copyNodeAsPng2(node, nodeOptions);
|
|
17279
|
+
setStatus("success");
|
|
17280
|
+
scheduleReset();
|
|
17281
|
+
} catch (err) {
|
|
17282
|
+
const wrapped = err instanceof Error ? err : new Error(String(err));
|
|
17283
|
+
setError(wrapped);
|
|
17284
|
+
setStatus("error");
|
|
17285
|
+
scheduleReset();
|
|
17286
|
+
throw wrapped;
|
|
17287
|
+
}
|
|
17288
|
+
}, [targetRef, options]);
|
|
17289
|
+
return { status, error, copy };
|
|
17290
|
+
}
|
|
17291
|
+
|
|
17292
|
+
// src/components/artifacts/artifact-copy-as-image-button/artifact-copy-as-image-button.tsx
|
|
17057
17293
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
17058
|
-
var
|
|
17059
|
-
function
|
|
17060
|
-
|
|
17294
|
+
var MAX_ERROR_MESSAGE_CHARS2 = 120;
|
|
17295
|
+
function truncateErrorMessage2(message, max = MAX_ERROR_MESSAGE_CHARS2) {
|
|
17296
|
+
return message.length <= max ? message : `${message.slice(0, max - 1)}\u2026`;
|
|
17297
|
+
}
|
|
17298
|
+
var DEFAULT_LABEL = "Copy Image";
|
|
17299
|
+
var ICON_BY_STATUS = {
|
|
17300
|
+
// `IconCopy` reads as the clipboard-copy affordance (action-shaped), distinct from the
|
|
17301
|
+
// download menu's format-shaped icons. The button only ever puts bytes on the clipboard, so
|
|
17302
|
+
// the visual signal stays consistent across copy-aware artifact types.
|
|
17303
|
+
idle: IconCopy,
|
|
17304
|
+
working: IconLoader2,
|
|
17305
|
+
success: IconCheck,
|
|
17306
|
+
error: IconAlertCircle
|
|
17307
|
+
};
|
|
17308
|
+
var TRANSIENT_TOOLTIP_BY_STATUS = {
|
|
17309
|
+
working: "Copying\u2026",
|
|
17310
|
+
success: "Copied",
|
|
17311
|
+
error: "Copy failed"
|
|
17312
|
+
};
|
|
17313
|
+
function ArtifactCopyAsImageButton({
|
|
17314
|
+
targetRef,
|
|
17061
17315
|
label = DEFAULT_LABEL,
|
|
17316
|
+
disabled = false,
|
|
17062
17317
|
onClick
|
|
17063
17318
|
}) {
|
|
17064
|
-
|
|
17319
|
+
const { status, error, copy } = useCopyAsImage(targetRef);
|
|
17320
|
+
const handleClick = (0, import_react6.useCallback)(() => {
|
|
17321
|
+
onClick?.();
|
|
17322
|
+
copy().catch((err) => {
|
|
17323
|
+
console.warn("[clay] ArtifactCopyAsImageButton: copy failed", err);
|
|
17324
|
+
});
|
|
17325
|
+
}, [copy, onClick]);
|
|
17326
|
+
const statusLabel = status === "idle" ? label : status === "error" && error ? `Copy failed: ${truncateErrorMessage2(error.message)}` : TRANSIENT_TOOLTIP_BY_STATUS[status] ?? label;
|
|
17065
17327
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Tooltip, { children: [
|
|
17066
17328
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
17329
|
+
IconButton,
|
|
17330
|
+
{
|
|
17331
|
+
icon: ICON_BY_STATUS[status],
|
|
17332
|
+
size: "small",
|
|
17333
|
+
onClick: handleClick,
|
|
17334
|
+
disabled: disabled || status === "working",
|
|
17335
|
+
"aria-label": statusLabel
|
|
17336
|
+
}
|
|
17337
|
+
) }),
|
|
17338
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipContent, { children: statusLabel })
|
|
17339
|
+
] }) });
|
|
17340
|
+
}
|
|
17341
|
+
|
|
17342
|
+
// src/components/artifacts/artifact-download-button/artifact-download-button.tsx
|
|
17343
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
17344
|
+
var DEFAULT_LABEL2 = "Download CSV";
|
|
17345
|
+
function ArtifactDownloadButton({
|
|
17346
|
+
href,
|
|
17347
|
+
label = DEFAULT_LABEL2,
|
|
17348
|
+
onClick
|
|
17349
|
+
}) {
|
|
17350
|
+
if (!isSafeDownloadUrl(href)) return null;
|
|
17351
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Tooltip, { children: [
|
|
17352
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
17067
17353
|
IconButton,
|
|
17068
17354
|
{
|
|
17069
17355
|
as: "a",
|
|
@@ -17076,7 +17362,7 @@ function ArtifactDownloadButton({
|
|
|
17076
17362
|
"aria-label": label
|
|
17077
17363
|
}
|
|
17078
17364
|
) }),
|
|
17079
|
-
/* @__PURE__ */ (0,
|
|
17365
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipContent, { children: label })
|
|
17080
17366
|
] }) });
|
|
17081
17367
|
}
|
|
17082
17368
|
function isSafeDownloadUrl(url) {
|
|
@@ -17088,10 +17374,120 @@ function isSafeDownloadUrl(url) {
|
|
|
17088
17374
|
}
|
|
17089
17375
|
}
|
|
17090
17376
|
|
|
17377
|
+
// src/components/artifacts/artifact-download-menu/artifact-download-menu.tsx
|
|
17378
|
+
var import_react7 = require("react");
|
|
17379
|
+
|
|
17380
|
+
// src/components/ui/dropdown-menu.tsx
|
|
17381
|
+
var React2 = __toESM(require("react"), 1);
|
|
17382
|
+
var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
17383
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
17384
|
+
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
17385
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
17386
|
+
var DropdownMenuContent = React2.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
17387
|
+
DropdownMenuPrimitive.Content,
|
|
17388
|
+
{
|
|
17389
|
+
ref,
|
|
17390
|
+
sideOffset,
|
|
17391
|
+
className: cn(
|
|
17392
|
+
// Stacking is consumer-configurable via the `--z-popover` CSS variable (default `99999`,
|
|
17393
|
+
// declared in clay's generated `_theme-tokens.css` :root block). Consumers whose chat or
|
|
17394
|
+
// modal layer sits even higher override on their own root once:
|
|
17395
|
+
// :root { --z-popover: 9999999; }
|
|
17396
|
+
// and every clay floating surface picks the new value up via cascade. The fallback in
|
|
17397
|
+
// `var(...,99999)` only kicks in if the consumer also strips the clay stylesheet — which
|
|
17398
|
+
// they shouldn't, but the safety net costs nothing.
|
|
17399
|
+
"z-[var(--z-popover,99999)] min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
|
|
17400
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
17401
|
+
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
17402
|
+
className
|
|
17403
|
+
),
|
|
17404
|
+
...props
|
|
17405
|
+
}
|
|
17406
|
+
) }));
|
|
17407
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
17408
|
+
var DropdownMenuItem = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
17409
|
+
DropdownMenuPrimitive.Item,
|
|
17410
|
+
{
|
|
17411
|
+
ref,
|
|
17412
|
+
className: cn(
|
|
17413
|
+
"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors",
|
|
17414
|
+
"focus:bg-accent focus:text-accent-foreground",
|
|
17415
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
17416
|
+
"[&_svg]:size-4 [&_svg]:shrink-0",
|
|
17417
|
+
inset && "pl-8",
|
|
17418
|
+
className
|
|
17419
|
+
),
|
|
17420
|
+
...props
|
|
17421
|
+
}
|
|
17422
|
+
));
|
|
17423
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
17424
|
+
var DropdownMenuSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
|
|
17425
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
17426
|
+
var DropdownMenuLabel = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
17427
|
+
DropdownMenuPrimitive.Label,
|
|
17428
|
+
{
|
|
17429
|
+
ref,
|
|
17430
|
+
className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className),
|
|
17431
|
+
...props
|
|
17432
|
+
}
|
|
17433
|
+
));
|
|
17434
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
17435
|
+
|
|
17436
|
+
// src/components/artifacts/artifact-download-menu/artifact-download-menu.tsx
|
|
17437
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
17438
|
+
var DEFAULT_TRIGGER_LABEL = "Download";
|
|
17439
|
+
var DEFAULT_CSV_LABEL = "Download CSV";
|
|
17440
|
+
var DEFAULT_PNG_LABEL = "Download PNG";
|
|
17441
|
+
var DEFAULT_PNG_BASENAME = "artifact";
|
|
17442
|
+
function ArtifactDownloadMenu({
|
|
17443
|
+
actions,
|
|
17444
|
+
triggerLabel = DEFAULT_TRIGGER_LABEL
|
|
17445
|
+
}) {
|
|
17446
|
+
const { csv, png } = actions;
|
|
17447
|
+
const showCsv = csv !== void 0 && isSafeDownloadUrl(csv.href);
|
|
17448
|
+
const showPng = png !== void 0;
|
|
17449
|
+
const handlePngSelect = (0, import_react7.useCallback)(async () => {
|
|
17450
|
+
if (!png) return;
|
|
17451
|
+
png.onSelect?.();
|
|
17452
|
+
const node = png.targetRef.current;
|
|
17453
|
+
if (!node) return;
|
|
17454
|
+
const filename = `${png.filename ?? DEFAULT_PNG_BASENAME}.png`;
|
|
17455
|
+
try {
|
|
17456
|
+
const { downloadNodeAsPng: downloadNodeAsPng2 } = await Promise.resolve().then(() => (init_dom_to_image(), dom_to_image_exports));
|
|
17457
|
+
await downloadNodeAsPng2(node, filename);
|
|
17458
|
+
} catch (err) {
|
|
17459
|
+
console.warn("[clay] ArtifactDownloadMenu: PNG download failed", err);
|
|
17460
|
+
}
|
|
17461
|
+
}, [png]);
|
|
17462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenu, { children: [
|
|
17463
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Tooltip, { children: [
|
|
17464
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconButton, { icon: IconDownload, size: "small", "aria-label": triggerLabel }) }) }),
|
|
17465
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipContent, { children: triggerLabel })
|
|
17466
|
+
] }) }),
|
|
17467
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuContent, { align: "end", children: [
|
|
17468
|
+
showCsv ? (
|
|
17469
|
+
// `asChild` lets Radix render the item as our anchor — the browser handles the
|
|
17470
|
+
// download natively and respects `Content-Disposition`. The analytics callback rides
|
|
17471
|
+
// on the anchor's own `onClick` (rather than Radix's `onSelect`) so the same handler
|
|
17472
|
+
// fires whether the user mouse-clicks the item, hits Enter on it, or activates it via
|
|
17473
|
+
// touch — `onSelect` is reliable only for keyboard activation when `asChild` is in use.
|
|
17474
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("a", { href: csv.href, download: true, rel: "noopener noreferrer", onClick: csv.onSelect, children: [
|
|
17475
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconFileSpreadsheet, {}),
|
|
17476
|
+
csv.label ?? DEFAULT_CSV_LABEL
|
|
17477
|
+
] }) })
|
|
17478
|
+
) : null,
|
|
17479
|
+
showPng ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuItem, { onSelect: handlePngSelect, disabled: png.disabled ?? false, children: [
|
|
17480
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconPhoto, {}),
|
|
17481
|
+
png.label ?? DEFAULT_PNG_LABEL
|
|
17482
|
+
] }) : null
|
|
17483
|
+
] })
|
|
17484
|
+
] });
|
|
17485
|
+
}
|
|
17486
|
+
|
|
17091
17487
|
// src/components/artifacts/status-message.tsx
|
|
17092
|
-
var
|
|
17488
|
+
var import_react8 = require("react");
|
|
17093
17489
|
function StatusMessage({ $tone, children }) {
|
|
17094
|
-
return (0,
|
|
17490
|
+
return (0, import_react8.createElement)(
|
|
17095
17491
|
"div",
|
|
17096
17492
|
{
|
|
17097
17493
|
className: `py-6 px-2 text-center text-sm font-medium leading-5 ${$tone === "error" ? "text-red-600" : "text-brown-70"}`
|
|
@@ -17101,12 +17497,12 @@ function StatusMessage({ $tone, children }) {
|
|
|
17101
17497
|
}
|
|
17102
17498
|
|
|
17103
17499
|
// src/components/chart/bar-chart/bar-chart.tsx
|
|
17104
|
-
var
|
|
17500
|
+
var import_react9 = require("react");
|
|
17105
17501
|
var import_recharts2 = require("recharts");
|
|
17106
17502
|
|
|
17107
17503
|
// src/components/chart/chart-container.tsx
|
|
17108
17504
|
var import_recharts = require("recharts");
|
|
17109
|
-
var
|
|
17505
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
17110
17506
|
function ChartContainer({
|
|
17111
17507
|
children,
|
|
17112
17508
|
height: height2 = 320,
|
|
@@ -17114,23 +17510,23 @@ function ChartContainer({
|
|
|
17114
17510
|
className,
|
|
17115
17511
|
style
|
|
17116
17512
|
}) {
|
|
17117
|
-
return /* @__PURE__ */ (0,
|
|
17513
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: cn("text-xs text-foreground", className), style: { width: width2, height: height2, ...style }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_recharts.ResponsiveContainer, { width: "100%", height: "100%", children }) });
|
|
17118
17514
|
}
|
|
17119
17515
|
|
|
17120
17516
|
// src/components/chart/chart-legend-content.tsx
|
|
17121
|
-
var
|
|
17517
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
17122
17518
|
function ChartLegendContent({ payload, className, iconType = "square" }) {
|
|
17123
17519
|
if (!payload || payload.length === 0) return null;
|
|
17124
|
-
return /* @__PURE__ */ (0,
|
|
17520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
17125
17521
|
"ul",
|
|
17126
17522
|
{
|
|
17127
17523
|
className: cn("flex flex-wrap items-center justify-center gap-x-4 gap-y-2 text-xs text-brown-80", className),
|
|
17128
17524
|
children: payload.map((entry, i) => {
|
|
17129
17525
|
const swatchColor = typeof entry.color === "string" ? entry.color : "transparent";
|
|
17130
17526
|
const label = entry.value !== void 0 ? String(entry.value) : "";
|
|
17131
|
-
return /* @__PURE__ */ (0,
|
|
17132
|
-
iconType === "square" ? /* @__PURE__ */ (0,
|
|
17133
|
-
/* @__PURE__ */ (0,
|
|
17527
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("li", { className: "flex items-center gap-1.5", children: [
|
|
17528
|
+
iconType === "square" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-block h-2.5 w-2.5 shrink-0 rounded-sm", style: { background: swatchColor } }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-block h-[3px] w-4 shrink-0 rounded-full", style: { background: swatchColor } }),
|
|
17529
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: label })
|
|
17134
17530
|
] }, `${label}-${i}`);
|
|
17135
17531
|
})
|
|
17136
17532
|
}
|
|
@@ -17138,7 +17534,7 @@ function ChartLegendContent({ payload, className, iconType = "square" }) {
|
|
|
17138
17534
|
}
|
|
17139
17535
|
|
|
17140
17536
|
// src/components/chart/chart-tooltip-content.tsx
|
|
17141
|
-
var
|
|
17537
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
17142
17538
|
function ChartTooltipContent({
|
|
17143
17539
|
active: active2,
|
|
17144
17540
|
payload,
|
|
@@ -17148,7 +17544,7 @@ function ChartTooltipContent({
|
|
|
17148
17544
|
formatValue
|
|
17149
17545
|
}) {
|
|
17150
17546
|
if (!active2 || !payload || payload.length === 0) return null;
|
|
17151
|
-
return /* @__PURE__ */ (0,
|
|
17547
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
17152
17548
|
"div",
|
|
17153
17549
|
{
|
|
17154
17550
|
className: cn(
|
|
@@ -17157,16 +17553,16 @@ function ChartTooltipContent({
|
|
|
17157
17553
|
className
|
|
17158
17554
|
),
|
|
17159
17555
|
children: [
|
|
17160
|
-
showLabel && label !== void 0 && label !== null ? /* @__PURE__ */ (0,
|
|
17161
|
-
/* @__PURE__ */ (0,
|
|
17556
|
+
showLabel && label !== void 0 && label !== null ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-1.5 font-medium text-brown-90", children: String(label) }) : null,
|
|
17557
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: "space-y-1", children: payload.map((entry, i) => {
|
|
17162
17558
|
const name2 = entry.name !== void 0 ? String(entry.name) : "";
|
|
17163
17559
|
const rawValue = entry.value;
|
|
17164
17560
|
const display = formatValue ? formatValue(rawValue, name2) : rawValue === void 0 ? "" : String(rawValue);
|
|
17165
17561
|
const swatch = typeof entry.color === "string" ? entry.color : "transparent";
|
|
17166
|
-
return /* @__PURE__ */ (0,
|
|
17167
|
-
/* @__PURE__ */ (0,
|
|
17168
|
-
/* @__PURE__ */ (0,
|
|
17169
|
-
/* @__PURE__ */ (0,
|
|
17562
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("li", { className: "flex items-center gap-2", children: [
|
|
17563
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "inline-block h-2.5 w-2.5 shrink-0 rounded-sm", style: { background: swatch } }),
|
|
17564
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-brown-70", children: name2 }),
|
|
17565
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-auto font-semibold tabular-nums text-brown-90", children: display })
|
|
17170
17566
|
] }, `${name2}-${i}`);
|
|
17171
17567
|
}) })
|
|
17172
17568
|
]
|
|
@@ -17290,7 +17686,7 @@ function coerceNumericColumns(rows, numericKeys) {
|
|
|
17290
17686
|
}
|
|
17291
17687
|
|
|
17292
17688
|
// src/components/chart/bar-chart/bar-chart.tsx
|
|
17293
|
-
var
|
|
17689
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
17294
17690
|
function BarChart({
|
|
17295
17691
|
data: data2,
|
|
17296
17692
|
xKey,
|
|
@@ -17310,23 +17706,23 @@ function BarChart({
|
|
|
17310
17706
|
xAxisAngle,
|
|
17311
17707
|
xAxisTickFormatter
|
|
17312
17708
|
}) {
|
|
17313
|
-
const seriesKeys = (0,
|
|
17314
|
-
const coercedData = (0,
|
|
17709
|
+
const seriesKeys = (0, import_react9.useMemo)(() => series.map((s) => s.key), [series]);
|
|
17710
|
+
const coercedData = (0, import_react9.useMemo)(
|
|
17315
17711
|
() => coerceNumericColumns(data2, seriesKeys),
|
|
17316
17712
|
[data2, seriesKeys]
|
|
17317
17713
|
);
|
|
17318
17714
|
const resolvedShowLegend = showLegend ?? series.length > 1;
|
|
17319
17715
|
const resolvedShowValueLabels = showValueLabels ?? (!stacked && series.length === 1);
|
|
17320
17716
|
const resolvedAngle = xAxisAngle ?? (coercedData.length >= 8 ? -30 : 0);
|
|
17321
|
-
const resolvedTickFormatter = (0,
|
|
17717
|
+
const resolvedTickFormatter = (0, import_react9.useMemo)(
|
|
17322
17718
|
() => xAxisTickFormatter ?? defaultBarTickFormatter(coercedData.length),
|
|
17323
17719
|
[xAxisTickFormatter, coercedData.length]
|
|
17324
17720
|
);
|
|
17325
17721
|
const angledLabelPad = resolvedAngle === 0 ? 0 : Math.min(Math.abs(resolvedAngle) * 0.7, 40);
|
|
17326
17722
|
const chartMargin = { ...CHART_MARGIN, bottom: CHART_MARGIN.bottom + angledLabelPad };
|
|
17327
|
-
return /* @__PURE__ */ (0,
|
|
17328
|
-
showGrid ? /* @__PURE__ */ (0,
|
|
17329
|
-
showXAxis ? /* @__PURE__ */ (0,
|
|
17723
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_recharts2.BarChart, { data: coercedData, margin: chartMargin, barCategoryGap: "22%", children: [
|
|
17724
|
+
showGrid ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.CartesianGrid, { ...CHART_GRID_PROPS }) : null,
|
|
17725
|
+
showXAxis ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
17330
17726
|
import_recharts2.XAxis,
|
|
17331
17727
|
{
|
|
17332
17728
|
dataKey: xKey,
|
|
@@ -17339,19 +17735,19 @@ function BarChart({
|
|
|
17339
17735
|
tickFormatter: resolvedTickFormatter
|
|
17340
17736
|
}
|
|
17341
17737
|
) : null,
|
|
17342
|
-
showYAxis ? /* @__PURE__ */ (0,
|
|
17343
|
-
showTooltip ? /* @__PURE__ */ (0,
|
|
17344
|
-
resolvedShowLegend ? /* @__PURE__ */ (0,
|
|
17738
|
+
showYAxis ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.YAxis, { ...CHART_AXIS_PROPS, width: 40 }) : null,
|
|
17739
|
+
showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.Tooltip, { cursor: { fill: BAR_TOOLTIP_CURSOR_FILL }, content: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartTooltipContent, {}) }) : null,
|
|
17740
|
+
resolvedShowLegend ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
17345
17741
|
import_recharts2.Legend,
|
|
17346
17742
|
{
|
|
17347
17743
|
verticalAlign: "top",
|
|
17348
17744
|
align: "center",
|
|
17349
17745
|
wrapperStyle: { top: 0 },
|
|
17350
17746
|
itemSorter: null,
|
|
17351
|
-
content: /* @__PURE__ */ (0,
|
|
17747
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartLegendContent, { iconType: "square" })
|
|
17352
17748
|
}
|
|
17353
17749
|
) : null,
|
|
17354
|
-
series.map((s, i) => /* @__PURE__ */ (0,
|
|
17750
|
+
series.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
17355
17751
|
import_recharts2.Bar,
|
|
17356
17752
|
{
|
|
17357
17753
|
dataKey: s.key,
|
|
@@ -17359,7 +17755,7 @@ function BarChart({
|
|
|
17359
17755
|
fill: colorForSeriesIndex(i, palette),
|
|
17360
17756
|
stackId: stacked ? "default" : s.key,
|
|
17361
17757
|
radius: barRadius(stacked, i, series.length),
|
|
17362
|
-
children: resolvedShowValueLabels ? /* @__PURE__ */ (0,
|
|
17758
|
+
children: resolvedShowValueLabels ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.LabelList, { dataKey: s.key, position: "top", style: CHART_VALUE_LABEL_STYLE }) : null
|
|
17363
17759
|
},
|
|
17364
17760
|
s.key
|
|
17365
17761
|
))
|
|
@@ -17375,9 +17771,9 @@ function barRadius(stacked, seriesIndex, seriesCount) {
|
|
|
17375
17771
|
var VARIANT_CHART_HEIGHT = "100%";
|
|
17376
17772
|
|
|
17377
17773
|
// src/components/artifacts/chart-artifact/chart-variant-services/bar-chart-variant-component.tsx
|
|
17378
|
-
var
|
|
17774
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
17379
17775
|
function BarChartVariantComponent({ config, rows }) {
|
|
17380
|
-
return /* @__PURE__ */ (0,
|
|
17776
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
17381
17777
|
BarChart,
|
|
17382
17778
|
{
|
|
17383
17779
|
data: rows,
|
|
@@ -17424,9 +17820,9 @@ var BarChartVariantService = {
|
|
|
17424
17820
|
};
|
|
17425
17821
|
|
|
17426
17822
|
// src/components/chart/line-chart/line-chart.tsx
|
|
17427
|
-
var
|
|
17823
|
+
var import_react10 = require("react");
|
|
17428
17824
|
var import_recharts3 = require("recharts");
|
|
17429
|
-
var
|
|
17825
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
17430
17826
|
var TARGET_VISIBLE_LABELS = 5;
|
|
17431
17827
|
function LineChart({
|
|
17432
17828
|
data: data2,
|
|
@@ -17449,23 +17845,23 @@ function LineChart({
|
|
|
17449
17845
|
xAxisAngle = 0,
|
|
17450
17846
|
xAxisTickFormatter
|
|
17451
17847
|
}) {
|
|
17452
|
-
const seriesKeys = (0,
|
|
17453
|
-
const coercedData = (0,
|
|
17848
|
+
const seriesKeys = (0, import_react10.useMemo)(() => series.map((s) => s.key), [series]);
|
|
17849
|
+
const coercedData = (0, import_react10.useMemo)(
|
|
17454
17850
|
() => coerceNumericColumns(data2, seriesKeys),
|
|
17455
17851
|
[data2, seriesKeys]
|
|
17456
17852
|
);
|
|
17457
17853
|
const lineType = smooth2 ? "monotone" : "linear";
|
|
17458
17854
|
const resolvedShowLegend = showLegend ?? series.length > 1;
|
|
17459
|
-
const resolvedTickFormatter = (0,
|
|
17855
|
+
const resolvedTickFormatter = (0, import_react10.useMemo)(() => {
|
|
17460
17856
|
if (xAxisTickFormatter) return xAxisTickFormatter;
|
|
17461
17857
|
const visible = evenlyDistributedVisibleIndices(coercedData.length, TARGET_VISIBLE_LABELS);
|
|
17462
17858
|
return defaultLineChartTickFormatter(coercedData.length, visible);
|
|
17463
17859
|
}, [xAxisTickFormatter, coercedData.length]);
|
|
17464
17860
|
const angledLabelPad = xAxisAngle === 0 ? 0 : Math.min(Math.abs(xAxisAngle) * 0.7, 40);
|
|
17465
17861
|
const chartMargin = { ...CHART_MARGIN, right: CHART_MARGIN.right + 16, bottom: CHART_MARGIN.bottom + angledLabelPad };
|
|
17466
|
-
return /* @__PURE__ */ (0,
|
|
17467
|
-
showGrid ? /* @__PURE__ */ (0,
|
|
17468
|
-
showXAxis ? /* @__PURE__ */ (0,
|
|
17862
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_recharts3.LineChart, { data: coercedData, margin: chartMargin, children: [
|
|
17863
|
+
showGrid ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.CartesianGrid, { ...CHART_GRID_PROPS }) : null,
|
|
17864
|
+
showXAxis ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
17469
17865
|
import_recharts3.XAxis,
|
|
17470
17866
|
{
|
|
17471
17867
|
dataKey: xKey,
|
|
@@ -17478,21 +17874,21 @@ function LineChart({
|
|
|
17478
17874
|
tickFormatter: resolvedTickFormatter
|
|
17479
17875
|
}
|
|
17480
17876
|
) : null,
|
|
17481
|
-
showYAxis ? /* @__PURE__ */ (0,
|
|
17482
|
-
showTooltip ? /* @__PURE__ */ (0,
|
|
17483
|
-
resolvedShowLegend ? /* @__PURE__ */ (0,
|
|
17877
|
+
showYAxis ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.YAxis, { ...CHART_AXIS_PROPS, width: 40 }) : null,
|
|
17878
|
+
showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.Tooltip, { content: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartTooltipContent, {}) }) : null,
|
|
17879
|
+
resolvedShowLegend ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
17484
17880
|
import_recharts3.Legend,
|
|
17485
17881
|
{
|
|
17486
17882
|
verticalAlign: "top",
|
|
17487
17883
|
align: "center",
|
|
17488
17884
|
wrapperStyle: { top: 0 },
|
|
17489
17885
|
itemSorter: null,
|
|
17490
|
-
content: /* @__PURE__ */ (0,
|
|
17886
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartLegendContent, { iconType: "line" })
|
|
17491
17887
|
}
|
|
17492
17888
|
) : null,
|
|
17493
17889
|
series.map((s, i) => {
|
|
17494
17890
|
const color = colorForSeriesIndex(i, palette);
|
|
17495
|
-
return /* @__PURE__ */ (0,
|
|
17891
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
17496
17892
|
import_recharts3.Line,
|
|
17497
17893
|
{
|
|
17498
17894
|
type: lineType,
|
|
@@ -17502,7 +17898,7 @@ function LineChart({
|
|
|
17502
17898
|
strokeWidth,
|
|
17503
17899
|
dot: showDots ? { r: 3, fill: color, stroke: color, strokeWidth: 0 } : false,
|
|
17504
17900
|
activeDot: { r: 5, fill: color, stroke: LINE_ACTIVE_DOT_STROKE, strokeWidth: 2 },
|
|
17505
|
-
children: showValueLabels ? /* @__PURE__ */ (0,
|
|
17901
|
+
children: showValueLabels ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.LabelList, { dataKey: s.key, position: "top", style: CHART_VALUE_LABEL_STYLE }) : null
|
|
17506
17902
|
},
|
|
17507
17903
|
s.key
|
|
17508
17904
|
);
|
|
@@ -17511,9 +17907,9 @@ function LineChart({
|
|
|
17511
17907
|
}
|
|
17512
17908
|
|
|
17513
17909
|
// src/components/artifacts/chart-artifact/chart-variant-services/line-chart-variant-component.tsx
|
|
17514
|
-
var
|
|
17910
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
17515
17911
|
function LineChartVariantComponent({ config, rows }) {
|
|
17516
|
-
return /* @__PURE__ */ (0,
|
|
17912
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(LineChart, { data: rows, xKey: config.xKey, series: config.series, height: VARIANT_CHART_HEIGHT });
|
|
17517
17913
|
}
|
|
17518
17914
|
|
|
17519
17915
|
// src/components/artifacts/chart-artifact/chart-variant-services/line-chart-variant-service.tsx
|
|
@@ -17534,9 +17930,9 @@ var LineChartVariantService = {
|
|
|
17534
17930
|
};
|
|
17535
17931
|
|
|
17536
17932
|
// src/components/chart/pie-chart/pie-chart.tsx
|
|
17537
|
-
var
|
|
17933
|
+
var import_react11 = require("react");
|
|
17538
17934
|
var import_recharts4 = require("recharts");
|
|
17539
|
-
var
|
|
17935
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
17540
17936
|
function PieChart({
|
|
17541
17937
|
data: data2,
|
|
17542
17938
|
categoryKey,
|
|
@@ -17552,7 +17948,7 @@ function PieChart({
|
|
|
17552
17948
|
outerRadius = "68%",
|
|
17553
17949
|
othersCategoryLabels = DEFAULT_OTHERS_CATEGORY_LABELS
|
|
17554
17950
|
}) {
|
|
17555
|
-
const { orderedData, sliceColors } = (0,
|
|
17951
|
+
const { orderedData, sliceColors } = (0, import_react11.useMemo)(() => {
|
|
17556
17952
|
const coerced = coerceNumericColumns(data2, [valueKey]);
|
|
17557
17953
|
const namedRows = [];
|
|
17558
17954
|
const namedColors = [];
|
|
@@ -17572,19 +17968,19 @@ function PieChart({
|
|
|
17572
17968
|
sliceColors: [...namedColors, ...othersColors]
|
|
17573
17969
|
};
|
|
17574
17970
|
}, [data2, valueKey, categoryKey, othersCategoryLabels, palette]);
|
|
17575
|
-
return /* @__PURE__ */ (0,
|
|
17576
|
-
showTooltip ? /* @__PURE__ */ (0,
|
|
17577
|
-
showLegend ? /* @__PURE__ */ (0,
|
|
17971
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_recharts4.PieChart, { margin: PIE_CHART_MARGIN, children: [
|
|
17972
|
+
showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_recharts4.Tooltip, { content: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartTooltipContent, {}) }) : null,
|
|
17973
|
+
showLegend ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
17578
17974
|
import_recharts4.Legend,
|
|
17579
17975
|
{
|
|
17580
17976
|
verticalAlign: "top",
|
|
17581
17977
|
align: "center",
|
|
17582
17978
|
wrapperStyle: { top: 0 },
|
|
17583
17979
|
itemSorter: null,
|
|
17584
|
-
content: /* @__PURE__ */ (0,
|
|
17980
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartLegendContent, { iconType: "square" })
|
|
17585
17981
|
}
|
|
17586
17982
|
) : null,
|
|
17587
|
-
/* @__PURE__ */ (0,
|
|
17983
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
17588
17984
|
import_recharts4.Pie,
|
|
17589
17985
|
{
|
|
17590
17986
|
data: orderedData,
|
|
@@ -17599,7 +17995,7 @@ function PieChart({
|
|
|
17599
17995
|
label: showLabels ? (entry) => {
|
|
17600
17996
|
const v = entry.value;
|
|
17601
17997
|
if (v === void 0 || v === null) return null;
|
|
17602
|
-
return /* @__PURE__ */ (0,
|
|
17998
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
17603
17999
|
"text",
|
|
17604
18000
|
{
|
|
17605
18001
|
x: entry.x,
|
|
@@ -17616,20 +18012,20 @@ function PieChart({
|
|
|
17616
18012
|
labelLine: false,
|
|
17617
18013
|
stroke: "none",
|
|
17618
18014
|
strokeWidth: 0,
|
|
17619
|
-
children: orderedData.map((_row, i) => /* @__PURE__ */ (0,
|
|
18015
|
+
children: orderedData.map((_row, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_recharts4.Cell, { fill: sliceColors[i] }, i))
|
|
17620
18016
|
}
|
|
17621
18017
|
)
|
|
17622
18018
|
] }) });
|
|
17623
18019
|
}
|
|
17624
18020
|
|
|
17625
18021
|
// src/components/artifacts/chart-artifact/chart-variant-services/pie-chart-variant-component.tsx
|
|
17626
|
-
var
|
|
18022
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
17627
18023
|
function PieChartVariantComponent({
|
|
17628
18024
|
config,
|
|
17629
18025
|
rows,
|
|
17630
18026
|
labels
|
|
17631
18027
|
}) {
|
|
17632
|
-
return /* @__PURE__ */ (0,
|
|
18028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
17633
18029
|
PieChart,
|
|
17634
18030
|
{
|
|
17635
18031
|
data: rows,
|
|
@@ -17666,14 +18062,14 @@ var ChartVariantServices = {
|
|
|
17666
18062
|
};
|
|
17667
18063
|
|
|
17668
18064
|
// src/components/artifacts/chart-artifact/chart-artifact-content.tsx
|
|
17669
|
-
var
|
|
18065
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
17670
18066
|
function ChartArtifactContent({ config, rows, labels }) {
|
|
17671
18067
|
const service = ChartVariantServices[config.variant];
|
|
17672
18068
|
if (!service) {
|
|
17673
|
-
return /* @__PURE__ */ (0,
|
|
18069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
|
|
17674
18070
|
}
|
|
17675
18071
|
const Component = service.Component;
|
|
17676
|
-
return /* @__PURE__ */ (0,
|
|
18072
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Component, { config, rows, labels });
|
|
17677
18073
|
}
|
|
17678
18074
|
|
|
17679
18075
|
// src/components/artifacts/parse-csv.ts
|
|
@@ -17698,7 +18094,7 @@ function parseCsv(text2, columns) {
|
|
|
17698
18094
|
}
|
|
17699
18095
|
|
|
17700
18096
|
// src/components/artifacts/use-rows-artifact-data.ts
|
|
17701
|
-
var
|
|
18097
|
+
var import_react12 = require("react");
|
|
17702
18098
|
var LOADING = { status: "loading", rows: null, error: null };
|
|
17703
18099
|
var UNAVAILABLE = { status: "unavailable", rows: null, error: null };
|
|
17704
18100
|
var INITIAL_INTERNAL = { cacheKey: null, data: LOADING };
|
|
@@ -17710,11 +18106,11 @@ function scrubUrl(url) {
|
|
|
17710
18106
|
return q === -1 ? url : `${url.slice(0, q)}?<redacted>`;
|
|
17711
18107
|
}
|
|
17712
18108
|
function useRowsArtifactData(presignedUrl, columns, parse) {
|
|
17713
|
-
const colsKey = (0,
|
|
18109
|
+
const colsKey = (0, import_react12.useMemo)(() => columnsFingerprint(columns), [columns]);
|
|
17714
18110
|
const safeUrl = presignedUrl && isSafeDownloadUrl(presignedUrl) ? presignedUrl : null;
|
|
17715
18111
|
const cacheKey = safeUrl ? `${safeUrl}::${colsKey}` : null;
|
|
17716
|
-
const [state, setState] = (0,
|
|
17717
|
-
(0,
|
|
18112
|
+
const [state, setState] = (0, import_react12.useState)(INITIAL_INTERNAL);
|
|
18113
|
+
(0, import_react12.useEffect)(() => {
|
|
17718
18114
|
if (!safeUrl) return;
|
|
17719
18115
|
const controller = new AbortController();
|
|
17720
18116
|
fetch(safeUrl, {
|
|
@@ -17771,32 +18167,71 @@ function isValidChartConfig(config) {
|
|
|
17771
18167
|
}
|
|
17772
18168
|
|
|
17773
18169
|
// src/components/artifacts/chart-artifact/chart-artifact.tsx
|
|
17774
|
-
var
|
|
18170
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
17775
18171
|
var TITLE_CLASSES = "text-sm font-semibold text-foreground";
|
|
17776
18172
|
var CHART_HEIGHT = 320;
|
|
17777
18173
|
function ChartArtifact({ artifact, labels, callbacks }) {
|
|
17778
18174
|
const validConfig = isValidChartConfig(artifact.config);
|
|
17779
|
-
(0,
|
|
18175
|
+
const cardRef = (0, import_react13.useRef)(null);
|
|
18176
|
+
(0, import_react13.useEffect)(() => {
|
|
17780
18177
|
if (validConfig) return;
|
|
17781
18178
|
console.warn("[clay] ChartArtifact: malformed `config` \u2014 skipping render.");
|
|
17782
18179
|
}, [validConfig]);
|
|
17783
18180
|
const presignedUrl = artifact.protectedAsset?.presignedUrl ?? null;
|
|
17784
|
-
const resolvedLabels = (0,
|
|
17785
|
-
() => ({ ...DEFAULT_CHART_ARTIFACT_LABELS, ...labels
|
|
18181
|
+
const resolvedLabels = (0, import_react13.useMemo)(
|
|
18182
|
+
() => ({ ...DEFAULT_CHART_ARTIFACT_LABELS, ...labels ?? {} }),
|
|
17786
18183
|
[labels]
|
|
17787
18184
|
);
|
|
17788
18185
|
const data2 = useChartArtifactData(
|
|
17789
18186
|
validConfig ? presignedUrl : null,
|
|
17790
18187
|
validConfig ? artifact.config : { variant: "LINE", series: [], xKey: "x" }
|
|
17791
18188
|
);
|
|
17792
|
-
const onDownload = callbacks
|
|
17793
|
-
const
|
|
17794
|
-
|
|
17795
|
-
|
|
17796
|
-
|
|
17797
|
-
|
|
18189
|
+
const { onDownload, onDownloadPng, onCopyAsImage } = callbacks ?? {};
|
|
18190
|
+
const handleDownloadCsvSelect = onDownload ? () => onDownload(artifact) : void 0;
|
|
18191
|
+
const handleDownloadPngSelect = onDownloadPng ? () => onDownloadPng(artifact) : void 0;
|
|
18192
|
+
const handleCopyAsImageClick = onCopyAsImage ? () => onCopyAsImage(artifact) : void 0;
|
|
18193
|
+
const canCopyAsImage = data2.status === "ready" && data2.rows.length > 0;
|
|
18194
|
+
const canDownloadPng = data2.status === "ready" && data2.rows.length > 0;
|
|
18195
|
+
const isCsvDownloadAvailable = presignedUrl !== null && isSafeDownloadUrl(presignedUrl);
|
|
18196
|
+
const showDownloadMenu = validConfig && canDownloadPng || isCsvDownloadAvailable;
|
|
18197
|
+
const showActions = validConfig || showDownloadMenu;
|
|
18198
|
+
const pngFilename = (artifact.title ?? "").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).join("-") || "chart";
|
|
18199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Artifact, { ref: cardRef, className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
18200
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
18201
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ArtifactTitle, { className: TITLE_CLASSES, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", {}),
|
|
18202
|
+
showActions ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(ArtifactActions, { ...{ [CAPTURE_EXCLUDE_ATTRIBUTE]: "" }, children: [
|
|
18203
|
+
validConfig ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
18204
|
+
ArtifactCopyAsImageButton,
|
|
18205
|
+
{
|
|
18206
|
+
targetRef: cardRef,
|
|
18207
|
+
label: resolvedLabels.copyAsImage,
|
|
18208
|
+
disabled: !canCopyAsImage,
|
|
18209
|
+
onClick: handleCopyAsImageClick
|
|
18210
|
+
}
|
|
18211
|
+
) : null,
|
|
18212
|
+
showDownloadMenu ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
18213
|
+
ArtifactDownloadMenu,
|
|
18214
|
+
{
|
|
18215
|
+
triggerLabel: resolvedLabels.download,
|
|
18216
|
+
actions: {
|
|
18217
|
+
csv: isCsvDownloadAvailable ? {
|
|
18218
|
+
href: presignedUrl ?? "",
|
|
18219
|
+
label: resolvedLabels.downloadCsv,
|
|
18220
|
+
onSelect: handleDownloadCsvSelect
|
|
18221
|
+
} : void 0,
|
|
18222
|
+
png: validConfig ? {
|
|
18223
|
+
targetRef: cardRef,
|
|
18224
|
+
filename: pngFilename,
|
|
18225
|
+
label: resolvedLabels.downloadPng,
|
|
18226
|
+
disabled: !canDownloadPng,
|
|
18227
|
+
onSelect: handleDownloadPngSelect
|
|
18228
|
+
} : void 0
|
|
18229
|
+
}
|
|
18230
|
+
}
|
|
18231
|
+
) : null
|
|
18232
|
+
] }) : null
|
|
17798
18233
|
] }),
|
|
17799
|
-
/* @__PURE__ */ (0,
|
|
18234
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
17800
18235
|
ArtifactContent,
|
|
17801
18236
|
{
|
|
17802
18237
|
className: "p-4 overflow-visible flex flex-none items-center justify-center",
|
|
@@ -17808,21 +18243,21 @@ function ChartArtifact({ artifact, labels, callbacks }) {
|
|
|
17808
18243
|
}
|
|
17809
18244
|
function renderBody(validConfig, artifact, data2, labels) {
|
|
17810
18245
|
if (!validConfig) {
|
|
17811
|
-
return /* @__PURE__ */ (0,
|
|
18246
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
|
|
17812
18247
|
}
|
|
17813
18248
|
if (data2.status === "error") {
|
|
17814
|
-
return /* @__PURE__ */ (0,
|
|
18249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
|
|
17815
18250
|
}
|
|
17816
18251
|
if (data2.status === "unavailable") {
|
|
17817
|
-
return /* @__PURE__ */ (0,
|
|
18252
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
|
|
17818
18253
|
}
|
|
17819
18254
|
if (data2.status === "loading") {
|
|
17820
|
-
return /* @__PURE__ */ (0,
|
|
18255
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
|
|
17821
18256
|
}
|
|
17822
18257
|
if (data2.rows.length === 0) {
|
|
17823
|
-
return /* @__PURE__ */ (0,
|
|
18258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.empty });
|
|
17824
18259
|
}
|
|
17825
|
-
return /* @__PURE__ */ (0,
|
|
18260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ChartArtifactContent, { config: artifact.config, rows: data2.rows, labels });
|
|
17826
18261
|
}
|
|
17827
18262
|
|
|
17828
18263
|
// src/components/artifacts/chart-artifact/to-clipboard-text.ts
|
|
@@ -17839,27 +18274,27 @@ var ChartArtifactService = {
|
|
|
17839
18274
|
};
|
|
17840
18275
|
|
|
17841
18276
|
// src/components/artifacts/table-artifact/table-artifact.tsx
|
|
17842
|
-
var
|
|
18277
|
+
var import_react15 = require("react");
|
|
17843
18278
|
|
|
17844
18279
|
// src/components/ui/table.tsx
|
|
17845
|
-
var
|
|
17846
|
-
var
|
|
17847
|
-
var Table =
|
|
18280
|
+
var React3 = __toESM(require("react"), 1);
|
|
18281
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
18282
|
+
var Table = React3.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn("relative w-full overflow-auto", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
|
|
17848
18283
|
Table.displayName = "Table";
|
|
17849
|
-
var TableHeader =
|
|
17850
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18284
|
+
var TableHeader = React3.forwardRef(
|
|
18285
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
|
|
17851
18286
|
);
|
|
17852
18287
|
TableHeader.displayName = "TableHeader";
|
|
17853
|
-
var TableBody =
|
|
17854
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18288
|
+
var TableBody = React3.forwardRef(
|
|
18289
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
|
|
17855
18290
|
);
|
|
17856
18291
|
TableBody.displayName = "TableBody";
|
|
17857
|
-
var TableFooter =
|
|
17858
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18292
|
+
var TableFooter = React3.forwardRef(
|
|
18293
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
|
|
17859
18294
|
);
|
|
17860
18295
|
TableFooter.displayName = "TableFooter";
|
|
17861
|
-
var TableRow =
|
|
17862
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18296
|
+
var TableRow = React3.forwardRef(
|
|
18297
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
17863
18298
|
"tr",
|
|
17864
18299
|
{
|
|
17865
18300
|
ref,
|
|
@@ -17869,8 +18304,8 @@ var TableRow = React2.forwardRef(
|
|
|
17869
18304
|
)
|
|
17870
18305
|
);
|
|
17871
18306
|
TableRow.displayName = "TableRow";
|
|
17872
|
-
var TableHead =
|
|
17873
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18307
|
+
var TableHead = React3.forwardRef(
|
|
18308
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
17874
18309
|
"th",
|
|
17875
18310
|
{
|
|
17876
18311
|
ref,
|
|
@@ -17883,21 +18318,21 @@ var TableHead = React2.forwardRef(
|
|
|
17883
18318
|
)
|
|
17884
18319
|
);
|
|
17885
18320
|
TableHead.displayName = "TableHead";
|
|
17886
|
-
var TableCell =
|
|
17887
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18321
|
+
var TableCell = React3.forwardRef(
|
|
18322
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
|
|
17888
18323
|
);
|
|
17889
18324
|
TableCell.displayName = "TableCell";
|
|
17890
|
-
var TableCaption =
|
|
17891
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18325
|
+
var TableCaption = React3.forwardRef(
|
|
18326
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
|
|
17892
18327
|
);
|
|
17893
18328
|
TableCaption.displayName = "TableCaption";
|
|
17894
18329
|
|
|
17895
18330
|
// src/components/table/use-scroll-shadow.ts
|
|
17896
|
-
var
|
|
18331
|
+
var import_react14 = require("react");
|
|
17897
18332
|
function useScrollShadow() {
|
|
17898
|
-
const targetRef = (0,
|
|
17899
|
-
const [isScrolled, setIsScrolled] = (0,
|
|
17900
|
-
(0,
|
|
18333
|
+
const targetRef = (0, import_react14.useRef)(null);
|
|
18334
|
+
const [isScrolled, setIsScrolled] = (0, import_react14.useState)(false);
|
|
18335
|
+
(0, import_react14.useEffect)(() => {
|
|
17901
18336
|
const target = targetRef.current;
|
|
17902
18337
|
if (!target) return;
|
|
17903
18338
|
let scrollContainer = target;
|
|
@@ -17937,7 +18372,7 @@ var DATA_ROW_CLASSES = `${ROW_CLASSES} animate-in fade-in duration-300`;
|
|
|
17937
18372
|
var SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
|
|
17938
18373
|
|
|
17939
18374
|
// src/components/artifacts/table-artifact/table-artifact-content.tsx
|
|
17940
|
-
var
|
|
18375
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
17941
18376
|
function TableArtifactContent({
|
|
17942
18377
|
columns,
|
|
17943
18378
|
data: data2,
|
|
@@ -17947,43 +18382,43 @@ function TableArtifactContent({
|
|
|
17947
18382
|
labels
|
|
17948
18383
|
}) {
|
|
17949
18384
|
if (data2.status === TABLE_STATUS.ERROR) {
|
|
17950
|
-
return /* @__PURE__ */ (0,
|
|
18385
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
|
|
17951
18386
|
}
|
|
17952
18387
|
if (data2.status === TABLE_STATUS.UNAVAILABLE) {
|
|
17953
|
-
return /* @__PURE__ */ (0,
|
|
18388
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
|
|
17954
18389
|
}
|
|
17955
18390
|
if (data2.status === TABLE_STATUS.LOADING) {
|
|
17956
18391
|
if (typeof knownRowCount === "number" && knownRowCount > 0) {
|
|
17957
18392
|
const shimmerCount = Math.min(knownRowCount, maxShimmerRows);
|
|
17958
|
-
return /* @__PURE__ */ (0,
|
|
18393
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
|
|
17959
18394
|
}
|
|
17960
|
-
return /* @__PURE__ */ (0,
|
|
18395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
|
|
17961
18396
|
}
|
|
17962
|
-
return /* @__PURE__ */ (0,
|
|
18397
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data2.rows.length === 0 ? renderEmptyRow(columns.length, labels.empty) : renderDataRows(columns, data2.rows) });
|
|
17963
18398
|
}
|
|
17964
18399
|
function ArtifactTable({ columns, maxBodyHeight, children }) {
|
|
17965
18400
|
const { targetRef, isScrolled } = useScrollShadow();
|
|
17966
|
-
return /* @__PURE__ */ (0,
|
|
17967
|
-
/* @__PURE__ */ (0,
|
|
18401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref: targetRef, className: "overscroll-none", style: { maxHeight: maxBodyHeight, overflowY: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Table, { containerClassName: "overflow-visible", children: [
|
|
18402
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
17968
18403
|
TableHeader,
|
|
17969
18404
|
{
|
|
17970
18405
|
"data-scrolled": isScrolled ? "true" : void 0,
|
|
17971
18406
|
className: "sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow",
|
|
17972
18407
|
style: isScrolled ? { boxShadow: SCROLL_SHADOW } : void 0,
|
|
17973
|
-
children: /* @__PURE__ */ (0,
|
|
18408
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: "hover:bg-transparent", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableHead, { scope: "col", className: HEAD_CLASS, children: column.label }, column.key)) })
|
|
17974
18409
|
}
|
|
17975
18410
|
),
|
|
17976
|
-
/* @__PURE__ */ (0,
|
|
18411
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableBody, { children })
|
|
17977
18412
|
] }) });
|
|
17978
18413
|
}
|
|
17979
18414
|
function renderShimmerRows(columns, count) {
|
|
17980
|
-
return Array.from({ length: count }).map((_, index2) => /* @__PURE__ */ (0,
|
|
18415
|
+
return Array.from({ length: count }).map((_, index2) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: ROW_CLASSES, "aria-hidden": "true", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { className: CELL_CLASS, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "block h-3 w-3/4 animate-pulse rounded bg-muted-foreground/20" }) }, column.key)) }, `shimmer-${index2}`));
|
|
17981
18416
|
}
|
|
17982
18417
|
function renderDataRows(columns, rows) {
|
|
17983
|
-
return rows.map((row, index2) => /* @__PURE__ */ (0,
|
|
18418
|
+
return rows.map((row, index2) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: DATA_ROW_CLASSES, children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { className: CELL_CLASS, children: formatCell(row, column) }, column.key)) }, index2));
|
|
17984
18419
|
}
|
|
17985
18420
|
function renderEmptyRow(colSpan, emptyMessage) {
|
|
17986
|
-
return /* @__PURE__ */ (0,
|
|
18421
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: "hover:bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { colSpan, className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }) });
|
|
17987
18422
|
}
|
|
17988
18423
|
|
|
17989
18424
|
// src/components/artifacts/table-artifact/use-table-artifact-data.ts
|
|
@@ -18008,19 +18443,19 @@ function isValidTableColumn(column) {
|
|
|
18008
18443
|
}
|
|
18009
18444
|
|
|
18010
18445
|
// src/components/artifacts/table-artifact/table-artifact.tsx
|
|
18011
|
-
var
|
|
18446
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
18012
18447
|
var TITLE_CLASSES2 = "text-sm font-semibold text-foreground";
|
|
18013
18448
|
var TABLE_MAX_BODY_HEIGHT = 480;
|
|
18014
18449
|
var MAX_SHIMMER_ROWS = 10;
|
|
18015
18450
|
function TableArtifact({ artifact, labels, callbacks }) {
|
|
18016
18451
|
const validConfig = isValidTableConfig(artifact.config);
|
|
18017
18452
|
const validColumns = validConfig ? artifact.config.columns : null;
|
|
18018
|
-
(0,
|
|
18453
|
+
(0, import_react15.useEffect)(() => {
|
|
18019
18454
|
if (validConfig) return;
|
|
18020
18455
|
console.warn("[clay] TableArtifact: malformed `config` \u2014 skipping render.");
|
|
18021
18456
|
}, [validConfig]);
|
|
18022
|
-
const resolvedLabels = (0,
|
|
18023
|
-
() => ({ ...DEFAULT_TABLE_ARTIFACT_LABELS, ...labels
|
|
18457
|
+
const resolvedLabels = (0, import_react15.useMemo)(
|
|
18458
|
+
() => ({ ...DEFAULT_TABLE_ARTIFACT_LABELS, ...labels ?? {} }),
|
|
18024
18459
|
[labels]
|
|
18025
18460
|
);
|
|
18026
18461
|
const data2 = useTableArtifactData(
|
|
@@ -18028,13 +18463,13 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
18028
18463
|
validColumns ?? []
|
|
18029
18464
|
);
|
|
18030
18465
|
const presignedUrl = artifact.protectedAsset?.presignedUrl ?? null;
|
|
18031
|
-
const onDownload = callbacks?.
|
|
18466
|
+
const onDownload = callbacks?.onDownload;
|
|
18032
18467
|
const handleDownloadClick = onDownload ? () => onDownload(artifact) : void 0;
|
|
18033
18468
|
if (!validConfig || !validColumns) {
|
|
18034
|
-
return /* @__PURE__ */ (0,
|
|
18035
|
-
/* @__PURE__ */ (0,
|
|
18036
|
-
artifact.title ? /* @__PURE__ */ (0,
|
|
18037
|
-
presignedUrl ? /* @__PURE__ */ (0,
|
|
18469
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
18470
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
18471
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", {}),
|
|
18472
|
+
presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
18038
18473
|
ArtifactDownloadButton,
|
|
18039
18474
|
{
|
|
18040
18475
|
href: presignedUrl,
|
|
@@ -18043,17 +18478,17 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
18043
18478
|
}
|
|
18044
18479
|
) }) : null
|
|
18045
18480
|
] }),
|
|
18046
|
-
/* @__PURE__ */ (0,
|
|
18481
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactContent, { className: "p-0 overflow-auto", style: { maxHeight: TABLE_MAX_BODY_HEIGHT }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
|
|
18047
18482
|
] });
|
|
18048
18483
|
}
|
|
18049
18484
|
return (
|
|
18050
18485
|
// The table body owns its own scroll container (`ArtifactTable` inside `TableArtifactContent`).
|
|
18051
18486
|
// Disable the outer overflow container so only one scroll context exists — this prevents
|
|
18052
18487
|
// double-scroll nesting and lets `useScrollShadow` find the correct scroll ancestor.
|
|
18053
|
-
/* @__PURE__ */ (0,
|
|
18054
|
-
/* @__PURE__ */ (0,
|
|
18055
|
-
artifact.title ? /* @__PURE__ */ (0,
|
|
18056
|
-
/* @__PURE__ */ (0,
|
|
18488
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
18489
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
18490
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", {}),
|
|
18491
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
18057
18492
|
ArtifactDownloadButton,
|
|
18058
18493
|
{
|
|
18059
18494
|
href: presignedUrl ?? "",
|
|
@@ -18062,7 +18497,7 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
18062
18497
|
}
|
|
18063
18498
|
) })
|
|
18064
18499
|
] }),
|
|
18065
|
-
/* @__PURE__ */ (0,
|
|
18500
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
18066
18501
|
TableArtifactContent,
|
|
18067
18502
|
{
|
|
18068
18503
|
columns: validColumns,
|
|
@@ -18104,13 +18539,13 @@ function artifactToClipboardText(artifact) {
|
|
|
18104
18539
|
}
|
|
18105
18540
|
|
|
18106
18541
|
// src/components/blocks/artifact-ref-block/artifact-ref-block.tsx
|
|
18107
|
-
var
|
|
18542
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
18108
18543
|
function ArtifactRefBlock({ block }) {
|
|
18109
18544
|
const { artifact, labels, callbacks } = block.payload;
|
|
18110
18545
|
const entry = ArtifactServices[artifact.type];
|
|
18111
18546
|
if (!entry) return null;
|
|
18112
|
-
const
|
|
18113
|
-
return /* @__PURE__ */ (0,
|
|
18547
|
+
const Component = entry.Component;
|
|
18548
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Component, { artifact, labels, callbacks });
|
|
18114
18549
|
}
|
|
18115
18550
|
|
|
18116
18551
|
// src/components/blocks/block-services/artifact-ref-block-service.ts
|
|
@@ -18162,9 +18597,9 @@ var TableScroll = import_styled_components3.default.div`
|
|
|
18162
18597
|
`;
|
|
18163
18598
|
|
|
18164
18599
|
// src/components/blocks/scrollable-table/scrollable-table.tsx
|
|
18165
|
-
var
|
|
18600
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
18166
18601
|
function ScrollableTable({ node: _node, ...props }) {
|
|
18167
|
-
return /* @__PURE__ */ (0,
|
|
18602
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TableContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TableScroll, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("table", { ...props }) }) });
|
|
18168
18603
|
}
|
|
18169
18604
|
|
|
18170
18605
|
// src/components/blocks/text-block/sanitize.ts
|
|
@@ -18177,6 +18612,7 @@ function sanitize(text2) {
|
|
|
18177
18612
|
|
|
18178
18613
|
// src/components/blocks/text-block/text-block-styles.ts
|
|
18179
18614
|
var import_styled_components4 = __toESM(require("styled-components"), 1);
|
|
18615
|
+
init_colors();
|
|
18180
18616
|
var TextBlockWrapper = import_styled_components4.default.div`
|
|
18181
18617
|
${typographyMixin(typographyTypes.GEIST_BODY_S_REGULAR)};
|
|
18182
18618
|
color: ${colors["brown-100"]};
|
|
@@ -18295,12 +18731,12 @@ var TextBlockWrapper = import_styled_components4.default.div`
|
|
|
18295
18731
|
`;
|
|
18296
18732
|
|
|
18297
18733
|
// src/components/blocks/text-block/text-block.tsx
|
|
18298
|
-
var
|
|
18734
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
18299
18735
|
var markdownComponents = {
|
|
18300
|
-
table: ((tableProps) => /* @__PURE__ */ (0,
|
|
18736
|
+
table: ((tableProps) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ScrollableTable, { ...tableProps }))
|
|
18301
18737
|
};
|
|
18302
18738
|
function TextBlock({ block }) {
|
|
18303
|
-
return /* @__PURE__ */ (0,
|
|
18739
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TextBlockWrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_markdown.default, { remarkPlugins: [import_remark_gfm.default, import_remark_breaks.default], components: markdownComponents, children: sanitize(block.payload.text) }) });
|
|
18304
18740
|
}
|
|
18305
18741
|
|
|
18306
18742
|
// src/components/blocks/block-services/text-block-service.ts
|
|
@@ -18322,23 +18758,23 @@ var BlockServices = {
|
|
|
18322
18758
|
};
|
|
18323
18759
|
|
|
18324
18760
|
// src/components/blocks/block/block.tsx
|
|
18325
|
-
var
|
|
18761
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
18326
18762
|
function Block({ block }) {
|
|
18327
18763
|
const service = BlockServices[block.type];
|
|
18328
18764
|
if (!service) return null;
|
|
18329
18765
|
const { Component } = service;
|
|
18330
|
-
return /* @__PURE__ */ (0,
|
|
18766
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Component, { block });
|
|
18331
18767
|
}
|
|
18332
18768
|
|
|
18333
18769
|
// src/components/blocks/block-context/block-context.tsx
|
|
18334
|
-
var
|
|
18335
|
-
var BlockContext = (0,
|
|
18770
|
+
var import_react16 = require("react");
|
|
18771
|
+
var BlockContext = (0, import_react16.createContext)(null);
|
|
18336
18772
|
function useBlockContext() {
|
|
18337
|
-
return (0,
|
|
18773
|
+
return (0, import_react16.useContext)(BlockContext) ?? {};
|
|
18338
18774
|
}
|
|
18339
18775
|
|
|
18340
18776
|
// src/components/chat/chat-message/chat-message.tsx
|
|
18341
|
-
var
|
|
18777
|
+
var import_react20 = require("react");
|
|
18342
18778
|
|
|
18343
18779
|
// src/components/chat/hooks/copy-message-text.ts
|
|
18344
18780
|
function copyMessageText(message) {
|
|
@@ -18355,13 +18791,13 @@ function copyMessageText(message) {
|
|
|
18355
18791
|
}
|
|
18356
18792
|
|
|
18357
18793
|
// src/components/chat/chat-message-actions/chat-message-actions.tsx
|
|
18358
|
-
var
|
|
18794
|
+
var import_react19 = require("react");
|
|
18359
18795
|
|
|
18360
18796
|
// src/components/chat/chat-context/chat-context.ts
|
|
18361
|
-
var
|
|
18362
|
-
var ChatContext = (0,
|
|
18797
|
+
var import_react17 = require("react");
|
|
18798
|
+
var ChatContext = (0, import_react17.createContext)(null);
|
|
18363
18799
|
function useChatContext() {
|
|
18364
|
-
const context = (0,
|
|
18800
|
+
const context = (0, import_react17.useContext)(ChatContext);
|
|
18365
18801
|
if (!context) {
|
|
18366
18802
|
throw new Error("useChatContext must be used within a Chat.Root component");
|
|
18367
18803
|
}
|
|
@@ -18369,7 +18805,7 @@ function useChatContext() {
|
|
|
18369
18805
|
}
|
|
18370
18806
|
|
|
18371
18807
|
// src/components/chat/hooks/use-copy-to-clipboard.ts
|
|
18372
|
-
var
|
|
18808
|
+
var import_react18 = require("react");
|
|
18373
18809
|
|
|
18374
18810
|
// src/utils/clipboard.ts
|
|
18375
18811
|
function copyToClipboard(text2, options) {
|
|
@@ -18382,14 +18818,14 @@ function copyToClipboard(text2, options) {
|
|
|
18382
18818
|
// src/components/chat/hooks/use-copy-to-clipboard.ts
|
|
18383
18819
|
var RESET_DELAY_MS = 2e3;
|
|
18384
18820
|
function useCopyToClipboard() {
|
|
18385
|
-
const [isCopied, setIsCopied] = (0,
|
|
18386
|
-
const timeoutRef = (0,
|
|
18387
|
-
(0,
|
|
18821
|
+
const [isCopied, setIsCopied] = (0, import_react18.useState)(false);
|
|
18822
|
+
const timeoutRef = (0, import_react18.useRef)(null);
|
|
18823
|
+
(0, import_react18.useEffect)(() => {
|
|
18388
18824
|
return () => {
|
|
18389
18825
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
18390
18826
|
};
|
|
18391
18827
|
}, []);
|
|
18392
|
-
const copy = (0,
|
|
18828
|
+
const copy = (0, import_react18.useCallback)((text2) => {
|
|
18393
18829
|
copyToClipboard(text2, {
|
|
18394
18830
|
onSuccess: () => {
|
|
18395
18831
|
setIsCopied(true);
|
|
@@ -18429,24 +18865,24 @@ var AnimatedAction = import_styled_components5.default.div`
|
|
|
18429
18865
|
`;
|
|
18430
18866
|
|
|
18431
18867
|
// src/components/chat/chat-message-actions/chat-message-actions.tsx
|
|
18432
|
-
var
|
|
18868
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
18433
18869
|
function ChatMessageActions({ className, messageId, content: content2, role, isHelpful }) {
|
|
18434
18870
|
const { onCopyMessage, onThumbUpClick, onThumbDownClick } = useChatContext();
|
|
18435
18871
|
const { isCopied, copy } = useCopyToClipboard();
|
|
18436
|
-
const handleCopy = (0,
|
|
18872
|
+
const handleCopy = (0, import_react19.useCallback)(() => {
|
|
18437
18873
|
copy(content2);
|
|
18438
18874
|
onCopyMessage?.(messageId);
|
|
18439
18875
|
}, [content2, messageId, copy, onCopyMessage]);
|
|
18440
|
-
const handleThumbUp = (0,
|
|
18876
|
+
const handleThumbUp = (0, import_react19.useCallback)(() => {
|
|
18441
18877
|
onThumbUpClick?.(messageId, isHelpful === true ? null : true);
|
|
18442
18878
|
}, [messageId, isHelpful, onThumbUpClick]);
|
|
18443
|
-
const handleThumbDown = (0,
|
|
18879
|
+
const handleThumbDown = (0, import_react19.useCallback)(() => {
|
|
18444
18880
|
onThumbDownClick?.(messageId, isHelpful === false ? null : false);
|
|
18445
18881
|
}, [messageId, isHelpful, onThumbDownClick]);
|
|
18446
18882
|
const isAssistant = role === MESSAGE_ROLE.ASSISTANT;
|
|
18447
18883
|
const hasFeedback = isAssistant && (onThumbUpClick || onThumbDownClick);
|
|
18448
|
-
return /* @__PURE__ */ (0,
|
|
18449
|
-
/* @__PURE__ */ (0,
|
|
18884
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ActionsContainer, { $role: role, className, children: [
|
|
18885
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
18450
18886
|
IconButton,
|
|
18451
18887
|
{
|
|
18452
18888
|
icon: isCopied ? IconCheck : IconCopy,
|
|
@@ -18454,7 +18890,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
|
|
|
18454
18890
|
"aria-label": isCopied ? "Copied" : "Copy message"
|
|
18455
18891
|
}
|
|
18456
18892
|
),
|
|
18457
|
-
hasFeedback && /* @__PURE__ */ (0,
|
|
18893
|
+
hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AnimatedAction, { $visible: isHelpful !== false, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
18458
18894
|
IconButton,
|
|
18459
18895
|
{
|
|
18460
18896
|
icon: IconThumbUp,
|
|
@@ -18463,7 +18899,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
|
|
|
18463
18899
|
"aria-label": "Good response"
|
|
18464
18900
|
}
|
|
18465
18901
|
) }),
|
|
18466
|
-
hasFeedback && /* @__PURE__ */ (0,
|
|
18902
|
+
hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AnimatedAction, { $visible: isHelpful !== true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
18467
18903
|
IconButton,
|
|
18468
18904
|
{
|
|
18469
18905
|
icon: IconThumbDown,
|
|
@@ -18477,6 +18913,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
|
|
|
18477
18913
|
|
|
18478
18914
|
// src/components/chat/chat-message/chat-message-styles.ts
|
|
18479
18915
|
var import_styled_components6 = __toESM(require("styled-components"), 1);
|
|
18916
|
+
init_colors();
|
|
18480
18917
|
var MessageRow = import_styled_components6.default.div`
|
|
18481
18918
|
display: flex;
|
|
18482
18919
|
justify-content: ${({ $role }) => $role === MESSAGE_ROLE.USER ? "flex-end" : "flex-start"};
|
|
@@ -18513,12 +18950,12 @@ var MessageBubble = import_styled_components6.default.div`
|
|
|
18513
18950
|
`;
|
|
18514
18951
|
|
|
18515
18952
|
// src/components/chat/chat-message/chat-message.tsx
|
|
18516
|
-
var
|
|
18953
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
18517
18954
|
function ChatMessage({ message }) {
|
|
18518
|
-
const clipboardText = (0,
|
|
18519
|
-
return /* @__PURE__ */ (0,
|
|
18520
|
-
/* @__PURE__ */ (0,
|
|
18521
|
-
/* @__PURE__ */ (0,
|
|
18955
|
+
const clipboardText = (0, import_react20.useMemo)(() => copyMessageText(message), [message]);
|
|
18956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MessageRow, { $role: message.role, role: "article", "aria-label": `${message.role} message`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(MessageContainer, { $role: message.role, children: [
|
|
18957
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MessageBubble, { $role: message.role, "data-testid": "message-bubble", children: message.blocks.map((block, index2) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Block, { block }, index2)) }),
|
|
18958
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
18522
18959
|
ChatMessageActions,
|
|
18523
18960
|
{
|
|
18524
18961
|
messageId: message.id,
|
|
@@ -18532,6 +18969,7 @@ function ChatMessage({ message }) {
|
|
|
18532
18969
|
|
|
18533
18970
|
// src/components/keyboard-shortcut/keyboard-shortcut-styles.ts
|
|
18534
18971
|
var import_styled_components7 = __toESM(require("styled-components"), 1);
|
|
18972
|
+
init_colors();
|
|
18535
18973
|
|
|
18536
18974
|
// src/components/keyboard-shortcut/types.ts
|
|
18537
18975
|
var KEYBOARD_SHORTCUT_VARIANTS = {
|
|
@@ -18567,20 +19005,20 @@ var Key = import_styled_components7.default.kbd`
|
|
|
18567
19005
|
`;
|
|
18568
19006
|
|
|
18569
19007
|
// src/components/keyboard-shortcut/keyboard-shortcut.tsx
|
|
18570
|
-
var
|
|
19008
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
18571
19009
|
function KeyboardShortcut({
|
|
18572
19010
|
keys,
|
|
18573
19011
|
variant = KEYBOARD_SHORTCUT_VARIANTS.OUTLINED,
|
|
18574
19012
|
className
|
|
18575
19013
|
}) {
|
|
18576
|
-
return /* @__PURE__ */ (0,
|
|
19014
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Wrapper, { className, children: keys.map((KeyComponent, index2) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Key, { $variant: variant, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { icon: KeyComponent, size: 12 }) }, index2)) });
|
|
18577
19015
|
}
|
|
18578
19016
|
|
|
18579
19017
|
// src/components/keyboard-shortcut/icons/icon-ctrl.tsx
|
|
18580
|
-
var
|
|
19018
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
18581
19019
|
function IconCtrl(props) {
|
|
18582
19020
|
const { width: width2 = 24, height: height2 = 24, ...rest } = props;
|
|
18583
|
-
return /* @__PURE__ */ (0,
|
|
19021
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: width2, height: height2, fill: "none", ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
18584
19022
|
"text",
|
|
18585
19023
|
{
|
|
18586
19024
|
x: "50%",
|
|
@@ -18597,7 +19035,7 @@ function IconCtrl(props) {
|
|
|
18597
19035
|
}
|
|
18598
19036
|
|
|
18599
19037
|
// src/components/lottie/lottie.tsx
|
|
18600
|
-
var
|
|
19038
|
+
var import_react22 = require("react");
|
|
18601
19039
|
|
|
18602
19040
|
// src/components/lottie/lottie-styles.ts
|
|
18603
19041
|
var import_styled_components8 = __toESM(require("styled-components"), 1);
|
|
@@ -18613,7 +19051,7 @@ var LottieContainer = import_styled_components8.default.div`
|
|
|
18613
19051
|
`;
|
|
18614
19052
|
|
|
18615
19053
|
// src/components/lottie/use-lottie.ts
|
|
18616
|
-
var
|
|
19054
|
+
var import_react21 = require("react");
|
|
18617
19055
|
var import_lottie_web = __toESM(require_lottie(), 1);
|
|
18618
19056
|
function useLottie({
|
|
18619
19057
|
animationData: animationData2,
|
|
@@ -18628,17 +19066,17 @@ function useLottie({
|
|
|
18628
19066
|
onLoopComplete,
|
|
18629
19067
|
onEnterFrame
|
|
18630
19068
|
}) {
|
|
18631
|
-
const containerRef = (0,
|
|
18632
|
-
const animationRef = (0,
|
|
18633
|
-
const onAnimationLoadedRef = (0,
|
|
18634
|
-
const onCompleteRef = (0,
|
|
18635
|
-
const onLoopCompleteRef = (0,
|
|
18636
|
-
const onEnterFrameRef = (0,
|
|
19069
|
+
const containerRef = (0, import_react21.useRef)(null);
|
|
19070
|
+
const animationRef = (0, import_react21.useRef)(null);
|
|
19071
|
+
const onAnimationLoadedRef = (0, import_react21.useRef)(onAnimationLoaded);
|
|
19072
|
+
const onCompleteRef = (0, import_react21.useRef)(onComplete);
|
|
19073
|
+
const onLoopCompleteRef = (0, import_react21.useRef)(onLoopComplete);
|
|
19074
|
+
const onEnterFrameRef = (0, import_react21.useRef)(onEnterFrame);
|
|
18637
19075
|
onAnimationLoadedRef.current = onAnimationLoaded;
|
|
18638
19076
|
onCompleteRef.current = onComplete;
|
|
18639
19077
|
onLoopCompleteRef.current = onLoopComplete;
|
|
18640
19078
|
onEnterFrameRef.current = onEnterFrame;
|
|
18641
|
-
(0,
|
|
19079
|
+
(0, import_react21.useEffect)(() => {
|
|
18642
19080
|
if (!containerRef.current) return;
|
|
18643
19081
|
const anim = import_lottie_web.default.loadAnimation({
|
|
18644
19082
|
container: containerRef.current,
|
|
@@ -18730,8 +19168,8 @@ function createLottieRef(animationRef) {
|
|
|
18730
19168
|
}
|
|
18731
19169
|
|
|
18732
19170
|
// src/components/lottie/lottie.tsx
|
|
18733
|
-
var
|
|
18734
|
-
var Lottie = (0,
|
|
19171
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
19172
|
+
var Lottie = (0, import_react22.forwardRef)(function Lottie2({
|
|
18735
19173
|
animationData: animationData2,
|
|
18736
19174
|
autoplay,
|
|
18737
19175
|
loop,
|
|
@@ -18761,8 +19199,8 @@ var Lottie = (0, import_react18.forwardRef)(function Lottie2({
|
|
|
18761
19199
|
onLoopComplete,
|
|
18762
19200
|
onEnterFrame
|
|
18763
19201
|
});
|
|
18764
|
-
(0,
|
|
18765
|
-
return /* @__PURE__ */ (0,
|
|
19202
|
+
(0, import_react22.useImperativeHandle)(ref, () => createLottieRef(animationRef), [animationRef]);
|
|
19203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
18766
19204
|
LottieContainer,
|
|
18767
19205
|
{
|
|
18768
19206
|
ref: containerRef,
|
|
@@ -18776,7 +19214,7 @@ var Lottie = (0, import_react18.forwardRef)(function Lottie2({
|
|
|
18776
19214
|
});
|
|
18777
19215
|
|
|
18778
19216
|
// src/components/text-area/text-area.tsx
|
|
18779
|
-
var
|
|
19217
|
+
var import_react23 = require("react");
|
|
18780
19218
|
|
|
18781
19219
|
// src/utils/merge-refs.ts
|
|
18782
19220
|
function mergeRefs(...refs) {
|
|
@@ -18793,6 +19231,7 @@ function mergeRefs(...refs) {
|
|
|
18793
19231
|
|
|
18794
19232
|
// src/components/text-area/text-area-styles.ts
|
|
18795
19233
|
var import_styled_components9 = __toESM(require("styled-components"), 1);
|
|
19234
|
+
init_colors();
|
|
18796
19235
|
var StyledTextArea = import_styled_components9.default.textarea`
|
|
18797
19236
|
${typographyMixin(typographyTypes.GEIST_BODY_S_REGULAR)};
|
|
18798
19237
|
color: ${colors["brown-100"]};
|
|
@@ -18816,23 +19255,23 @@ var StyledTextArea = import_styled_components9.default.textarea`
|
|
|
18816
19255
|
`;
|
|
18817
19256
|
|
|
18818
19257
|
// src/components/text-area/text-area.tsx
|
|
18819
|
-
var
|
|
18820
|
-
var TextArea = (0,
|
|
18821
|
-
const internalRef = (0,
|
|
18822
|
-
(0,
|
|
19258
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
19259
|
+
var TextArea = (0, import_react23.forwardRef)(function TextArea2({ value: value2, onChange, placeholder, maxHeight, rows = 1, autoFocus, onKeyDown, disabled, className }, externalRef) {
|
|
19260
|
+
const internalRef = (0, import_react23.useRef)(null);
|
|
19261
|
+
(0, import_react23.useLayoutEffect)(() => {
|
|
18823
19262
|
const el = internalRef.current;
|
|
18824
19263
|
if (el) {
|
|
18825
19264
|
el.style.height = "auto";
|
|
18826
19265
|
el.style.height = `${el.scrollHeight}px`;
|
|
18827
19266
|
}
|
|
18828
19267
|
}, [value2]);
|
|
18829
|
-
const handleChange = (0,
|
|
19268
|
+
const handleChange = (0, import_react23.useCallback)(
|
|
18830
19269
|
(e) => {
|
|
18831
19270
|
onChange(e.target.value);
|
|
18832
19271
|
},
|
|
18833
19272
|
[onChange]
|
|
18834
19273
|
);
|
|
18835
|
-
return /* @__PURE__ */ (0,
|
|
19274
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
18836
19275
|
StyledTextArea,
|
|
18837
19276
|
{
|
|
18838
19277
|
ref: mergeRefs(internalRef, externalRef),
|
|
@@ -18921,10 +19360,11 @@ function convertTableToCSV(table) {
|
|
|
18921
19360
|
}
|
|
18922
19361
|
|
|
18923
19362
|
// src/components/button/button.tsx
|
|
18924
|
-
var
|
|
19363
|
+
var import_react24 = require("react");
|
|
18925
19364
|
|
|
18926
19365
|
// src/components/button/button-styles.ts
|
|
18927
19366
|
var import_styled_components10 = __toESM(require("styled-components"), 1);
|
|
19367
|
+
init_colors();
|
|
18928
19368
|
|
|
18929
19369
|
// src/components/button/constants.ts
|
|
18930
19370
|
var BUTTON_VARIANT = {
|
|
@@ -19043,8 +19483,8 @@ var StyledButton = import_styled_components10.default.button`
|
|
|
19043
19483
|
`;
|
|
19044
19484
|
|
|
19045
19485
|
// src/components/button/button.tsx
|
|
19046
|
-
var
|
|
19047
|
-
var Button2 = (0,
|
|
19486
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
19487
|
+
var Button2 = (0, import_react24.forwardRef)(function Button3({
|
|
19048
19488
|
children,
|
|
19049
19489
|
variant = BUTTON_VARIANT.SOLID,
|
|
19050
19490
|
intent = BUTTON_INTENT.PRIMARY,
|
|
@@ -19056,8 +19496,8 @@ var Button2 = (0, import_react20.forwardRef)(function Button3({
|
|
|
19056
19496
|
className,
|
|
19057
19497
|
"aria-label": ariaLabel
|
|
19058
19498
|
}, ref) {
|
|
19059
|
-
const iconElement = icon ? /* @__PURE__ */ (0,
|
|
19060
|
-
return /* @__PURE__ */ (0,
|
|
19499
|
+
const iconElement = icon ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { icon, size: 16 }) : null;
|
|
19500
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
19061
19501
|
StyledButton,
|
|
19062
19502
|
{
|
|
19063
19503
|
ref,
|
|
@@ -19071,7 +19511,7 @@ var Button2 = (0, import_react20.forwardRef)(function Button3({
|
|
|
19071
19511
|
"aria-label": ariaLabel,
|
|
19072
19512
|
children: [
|
|
19073
19513
|
iconPosition === ICON_POSITION.LEADING && iconElement,
|
|
19074
|
-
/* @__PURE__ */ (0,
|
|
19514
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children }),
|
|
19075
19515
|
iconPosition === ICON_POSITION.TRAILING && iconElement
|
|
19076
19516
|
]
|
|
19077
19517
|
}
|
|
@@ -19079,7 +19519,9 @@ var Button2 = (0, import_react20.forwardRef)(function Button3({
|
|
|
19079
19519
|
});
|
|
19080
19520
|
// Annotate the CommonJS export names for ESM import in node:
|
|
19081
19521
|
0 && (module.exports = {
|
|
19522
|
+
ArtifactCopyAsImageButton,
|
|
19082
19523
|
ArtifactDownloadButton,
|
|
19524
|
+
ArtifactDownloadMenu,
|
|
19083
19525
|
ArtifactRefBlock,
|
|
19084
19526
|
ArtifactRefBlockService,
|
|
19085
19527
|
ArtifactServices,
|
|
@@ -19139,9 +19581,13 @@ lottie-web/build/player/lottie.js:
|
|
|
19139
19581
|
|
|
19140
19582
|
@tabler/icons-react/dist/esm/defaultAttributes.mjs:
|
|
19141
19583
|
@tabler/icons-react/dist/esm/createReactComponent.mjs:
|
|
19584
|
+
@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs:
|
|
19142
19585
|
@tabler/icons-react/dist/esm/icons/IconCheck.mjs:
|
|
19143
19586
|
@tabler/icons-react/dist/esm/icons/IconCopy.mjs:
|
|
19144
19587
|
@tabler/icons-react/dist/esm/icons/IconDownload.mjs:
|
|
19588
|
+
@tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs:
|
|
19589
|
+
@tabler/icons-react/dist/esm/icons/IconLoader2.mjs:
|
|
19590
|
+
@tabler/icons-react/dist/esm/icons/IconPhoto.mjs:
|
|
19145
19591
|
@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs:
|
|
19146
19592
|
@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs:
|
|
19147
19593
|
@tabler/icons-react/dist/esm/tabler-icons-react.mjs:
|