@crisp-ui-kit/crisp 0.54.11 → 0.55.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.
Files changed (50) hide show
  1. package/dist/cjs/components/datatable/datatable.js +130 -38
  2. package/dist/cjs/components/resizablepanel/resizablepanel.js +10 -1
  3. package/dist/cjs/components/table/table.js +8 -1
  4. package/dist/cjs/components/tabletoolbar/tabletoolbar.js +110 -27
  5. package/dist/cjs/index.js +0 -2
  6. package/dist/cjs/product/recordpage/index.js +6 -1
  7. package/dist/cjs/product/recordpage/recordpage.js +20 -4
  8. package/dist/esm/components/datatable/datatable.js +131 -39
  9. package/dist/esm/components/resizablepanel/resizablepanel.js +10 -1
  10. package/dist/esm/components/table/table.js +8 -1
  11. package/dist/esm/components/tabletoolbar/tabletoolbar.js +111 -28
  12. package/dist/esm/index.js +0 -2
  13. package/dist/esm/product/recordpage/index.js +2 -0
  14. package/dist/esm/product/recordpage/recordpage.js +20 -4
  15. package/dist/styles.css +0 -272
  16. package/dist/styles.layered.css +0 -272
  17. package/dist/types/components/table/table.d.ts +14 -0
  18. package/dist/types/index.d.ts +0 -2
  19. package/dist/types/product/recordpage/index.d.ts +2 -0
  20. package/package.json +2 -12
  21. package/dist/cjs/product/recordstable/company-logos.js +0 -29
  22. package/dist/cjs/product/recordstable/index.js +0 -13
  23. package/dist/cjs/product/recordstable/recordstable.js +0 -1362
  24. package/dist/cjs/product/recordstable/recordstable.recipe.js +0 -175
  25. package/dist/cjs/product/recordstable/recordstable.tag.js +0 -26
  26. package/dist/cjs/product/taskstable/index.js +0 -7
  27. package/dist/cjs/product/taskstable/taskstable.js +0 -32
  28. package/dist/cjs/product/taskstable/taskstable.recipe.js +0 -56
  29. package/dist/esm/product/recordstable/company-logos.js +0 -26
  30. package/dist/esm/product/recordstable/index.js +0 -3
  31. package/dist/esm/product/recordstable/recordstable.js +0 -1322
  32. package/dist/esm/product/recordstable/recordstable.recipe.js +0 -172
  33. package/dist/esm/product/recordstable/recordstable.tag.js +0 -23
  34. package/dist/esm/product/taskstable/index.js +0 -2
  35. package/dist/esm/product/taskstable/taskstable.js +0 -29
  36. package/dist/esm/product/taskstable/taskstable.recipe.js +0 -53
  37. package/dist/recordstable.css +0 -240
  38. package/dist/recordstable.d.ts +0 -7
  39. package/dist/recordstable.layered.css +0 -242
  40. package/dist/taskstable.css +0 -30
  41. package/dist/taskstable.d.ts +0 -7
  42. package/dist/taskstable.layered.css +0 -32
  43. package/dist/types/product/recordstable/company-logos.d.ts +0 -1
  44. package/dist/types/product/recordstable/index.d.ts +0 -3
  45. package/dist/types/product/recordstable/recordstable.d.ts +0 -294
  46. package/dist/types/product/recordstable/recordstable.recipe.d.ts +0 -5
  47. package/dist/types/product/recordstable/recordstable.tag.d.ts +0 -15
  48. package/dist/types/product/taskstable/index.d.ts +0 -2
  49. package/dist/types/product/taskstable/taskstable.d.ts +0 -59
  50. package/dist/types/product/taskstable/taskstable.recipe.d.ts +0 -3
@@ -1,175 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recordstableRecipe = void 0;
4
- const tabletoolbar_chrome_1 = require("../../components/tabletoolbar/tabletoolbar.chrome");
5
- const core_1 = require("../../core");
6
- const tokens_1 = require("../../tokens");
7
- const recordstable_tag_1 = require("./recordstable.tag");
8
- // A record grid, measured: 36px rows, 1px borderSubtle (#eeeff1) grid
9
- // lines on BOTH axes, sticky checkbox + entity (first) columns, entity = 16px
10
- // avatar + 14px/500 name, 28px toolbar controls, a floating bulk-action bar.
11
- //
12
- // The toolbar's measured chrome now lives in the TableToolbar primitive
13
- // (components/tabletoolbar/tabletoolbar.chrome.ts) and is emitted below under
14
- // this surface's own class prefix, so RecordsTable's markup is unchanged. The
15
- // three rules between the two halves are RecordsTable's own and must stay
16
- // mid-block: they depend on following the .menu rule in source order.
17
- const config = (0, core_1.defineRecipe)({
18
- name: "recordstable",
19
- base: `
20
- box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-height: 0; height: 100%; width: 100%; font-family: ${tokens_1.contract.font.sans}; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
21
- & * { box-sizing: border-box; }
22
-
23
- /* toolbar */
24
- ${(0, tabletoolbar_chrome_1.toolbarChromeHead)("recordstable")}
25
- & .crisp-recordstable-ctx { z-index: 60; }
26
- & .crisp-recordstable-th[data-drop] { box-shadow: inset 2px 0 0 ${tokens_1.contract.bgBrandSolid}; }
27
- & .crisp-recordstable-th-inner[draggable="true"]:active { cursor: grabbing; }
28
- ${(0, tabletoolbar_chrome_1.toolbarChromeBody)("recordstable")}
29
-
30
- /* scroll frame + table */
31
- & .crisp-recordstable-scroll { flex: 1; min-height: 0; overflow: auto; background: ${tokens_1.contract.bgSurface}; border-top: 1px solid ${tokens_1.contract.borderSubtle}; scrollbar-width: thin; scrollbar-color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 22%, transparent) transparent; }
32
- & .crisp-recordstable-scroll::-webkit-scrollbar { width: 10px; height: 10px; }
33
- & .crisp-recordstable-scroll::-webkit-scrollbar-thumb { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 20%, transparent); border-radius: ${tokens_1.contract.radius.full}; border: 2px solid ${tokens_1.contract.bgSurface}; background-clip: padding-box; }
34
- & .crisp-recordstable-scroll::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 34%, transparent); background-clip: padding-box; }
35
- & .crisp-recordstable-scroll::-webkit-scrollbar-corner { background: transparent; }
36
- & .crisp-recordstable-table { table-layout: fixed; border-collapse: separate; border-spacing: 0; }
37
- & .crisp-recordstable-th, & .crisp-recordstable-td { position: relative; height: ${tokens_1.contract.size.tableRow}; padding: 0 ${tokens_1.contract.space["2"]}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; border-inline-end: 1px solid ${tokens_1.contract.borderSubtle}; text-align: start; white-space: nowrap; overflow: hidden; }
38
- & .crisp-recordstable-th { position: sticky; top: 0; z-index: 2; padding: 0; height: ${tokens_1.contract.size.tableHeader}; background: ${tokens_1.contract.bgSurface}; font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.medium}; letter-spacing: -0.14px; color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 63%, transparent); user-select: none; }
39
- & .crisp-recordstable-th-inner { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; width: 100%; height: 100%; margin: 0; padding: 0 ${tokens_1.contract.space["2"]}; border: none; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-align: start; cursor: pointer; }
40
- & .crisp-recordstable-th-inner svg { flex-shrink: 0; color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 45%, transparent); }
41
- & .crisp-recordstable-th-label { flex: 1; overflow: hidden; text-overflow: ellipsis; }
42
- & .crisp-recordstable-th-rename { width: 100%; min-width: 0; height: 100%; margin: 0; padding: 0; border: none; outline: none; background: none; color: inherit; font: inherit; letter-spacing: inherit; }
43
- & .crisp-recordstable-th-rename:focus { box-shadow: inset 0 0 0 1px ${tokens_1.contract.bgBrandSolid}; }
44
- & .crisp-recordstable-sort { flex-shrink: 0; opacity: 0.4; transition: opacity .12s; color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 45%, transparent); }
45
- & .crisp-recordstable-th:hover .crisp-recordstable-sort, & .crisp-recordstable-th[data-sorted] .crisp-recordstable-sort { opacity: 1; }
46
- & .crisp-recordstable-th[data-sorted="desc"] .crisp-recordstable-sort svg { transform: rotate(180deg); }
47
-
48
- /* column resize handle */
49
- & .crisp-recordstable-resize { position: absolute; top: 0; inset-inline-end: -3px; width: 9px; height: 100%; cursor: col-resize; z-index: 6; touch-action: none; }
50
- & .crisp-recordstable-resize::after { content: ""; position: absolute; top: 0; inset-inline-start: 3px; width: 2px; height: 100%; background: ${tokens_1.contract.bgBrandSolid}; opacity: 0; transition: opacity .12s; }
51
- & .crisp-recordstable-resize:hover::after, & .crisp-recordstable-resize[data-resizing]::after { opacity: 1; }
52
-
53
- /* add-column header */
54
- & .crisp-recordstable-addcol { min-width: 44px; }
55
- & .crisp-recordstable-addcol button { display: flex; align-items: center; justify-content: center; width: 44px; height: 100%; border: none; background: none; color: ${tokens_1.contract.fgMuted}; cursor: pointer; }
56
- & .crisp-recordstable-addcol button:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
57
-
58
- /* cells */
59
- /* font-weight is explicit because the first cell of each row is a
60
- th[scope=row] — the record's name is what the row IS — and a th
61
- defaults to bold. Measured before the change and unchanged after: 400. */
62
- & .crisp-recordstable-td { font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.regular}; color: ${tokens_1.contract.fgPrimary}; background: ${tokens_1.contract.bgSurface}; cursor: default; }
63
- & .crisp-recordstable-td--editable { cursor: text; }
64
- /* keyboard/click cell selection (spreadsheet-style) */
65
- & .crisp-recordstable-td[data-selected] { outline: 2px solid ${tokens_1.contract.bgBrandSolid}; outline-offset: -2px; border-radius: ${tokens_1.contract.radius.sm}; z-index: 3; }
66
- & .crisp-recordstable-scroll:focus { outline: none; }
67
- /* picker cells (status / date / reference) host a ghost control edge-to-edge */
68
- & .crisp-recordstable-td--picker { padding: 0; }
69
- & .crisp-recordstable-td--picker .crisp-select-trigger, & .crisp-recordstable-td--picker .crisp-datepicker-trigger, & .crisp-recordstable-td--picker .crisp-multiselect-trigger { width: 100%; height: 100%; min-height: 0; border-radius: 0; box-shadow: none; padding: 0 ${tokens_1.contract.space["2"]}; }
70
- & .crisp-recordstable-td--picker .crisp-multiselect-trigger:hover { background: none; }
71
- & .crisp-recordstable-td--picker .crisp-multiselect-trigger[data-open] { box-shadow: inset 0 0 0 1.5px ${tokens_1.contract.bgBrandSolid}; }
72
- /* tag cell: one compact clipped line of full chips, no chevron (opens the picker on click) */
73
- & .crisp-recordstable-td--picker .crisp-multiselect-chips { flex-wrap: nowrap; overflow: hidden; }
74
- & .crisp-recordstable-td--picker .crisp-multiselect-chips .crisp-recordstable-tag { flex-shrink: 0; max-width: none; }
75
- & .crisp-recordstable-td--picker .crisp-multiselect-chevron { display: none; }
76
- & .crisp-recordstable-td--picker .crisp-multiselect-placeholder { color: ${tokens_1.contract.fgMuted}; }
77
- /* reference picker: a leading 16px avatar per option, plus a trailing
78
- "Create X" row when the consumer supplies one (#449) -- measured live
79
- against Attio's own picker (16px circular avatar, 16px plain icon for
80
- the create row, both sitting in the option's existing 8px gap, no new
81
- gap value invented). */
82
- & .crisp-recordstable-refoption { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
83
- & .crisp-recordstable-refoption-avatar { flex-shrink: 0; }
84
- & .crisp-recordstable-refoption--create { color: ${tokens_1.contract.fgMuted}; }
85
- & .crisp-recordstable-status { display: inline-flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; min-width: 0; }
86
- & .crisp-recordstable-status-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: ${tokens_1.contract.radius.full}; }
87
- & .crisp-recordstable-cell { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; height: 100%; min-width: 0; }
88
- & .crisp-recordstable-cell--num { justify-content: flex-end; font-variant-numeric: tabular-nums; }
89
- & .crisp-recordstable-cell--tags { gap: ${tokens_1.contract.space["1"]}; }
90
- ${recordstable_tag_1.recordTagCss}
91
- & .crisp-recordstable-muted { color: ${tokens_1.contract.fgMuted}; }
92
- & .crisp-recordstable-entity { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; min-width: 0; color: ${tokens_1.contract.fgPrimary}; font-weight: ${tokens_1.contract.weight.medium}; text-decoration: none; }
93
- & .crisp-recordstable-entity:hover .crisp-recordstable-entity-name { text-decoration: underline; }
94
- & .crisp-recordstable-entity-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
95
- & button.crisp-recordstable-entity-name--link { margin: 0; padding: 0; border: none; background: none; font: inherit; color: inherit; letter-spacing: inherit; text-align: start; cursor: pointer; max-width: 100%; }
96
- & .crisp-recordstable-fav { width: ${tokens_1.contract.size.icon}; height: ${tokens_1.contract.size.icon}; border-radius: ${tokens_1.contract.radius.sm}; flex-shrink: 0; object-fit: cover; background: ${tokens_1.contract.bgRaised}; }
97
- & .crisp-recordstable-open { position: absolute; inset-inline-end: ${tokens_1.contract.space["1"]}; top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; border: none; border-radius: ${tokens_1.contract.radius.sm}; background: ${tokens_1.contract.bgSurface}; box-shadow: inset 0 0 0 1px ${tokens_1.contract.borderDefault}; color: ${tokens_1.contract.fgMuted}; font-family: inherit; cursor: pointer; opacity: 0; transition: opacity .12s, background-color .12s; z-index: 3; }
98
- & .crisp-recordstable-open:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
99
- & tbody tr:hover .crisp-recordstable-open { opacity: 1; }
100
- & .crisp-recordstable-link { color: ${tokens_1.contract.fgPrimary}; text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
101
- & .crisp-recordstable-link:hover { text-decoration: underline; }
102
-
103
- /* inline edit input */
104
- & .crisp-recordstable-edit { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0 ${tokens_1.contract.space["2"]}; border: none; outline: 2px solid ${tokens_1.contract.bgBrandSolid}; outline-offset: -2px; border-radius: ${tokens_1.contract.radius.sm}; background: ${tokens_1.contract.bgSurface}; font-family: inherit; font-size: ${tokens_1.contract.text.lg}; color: ${tokens_1.contract.fgPrimary}; z-index: 5; }
105
- & .crisp-recordstable-edit--num { text-align: end; font-variant-numeric: tabular-nums; }
106
-
107
- /* selection / hover / sticky */
108
- & .crisp-recordstable-col-check { width: 40px; min-width: 40px; padding: 0; }
109
- & .crisp-recordstable-check-inner { display: flex; align-items: center; justify-content: center; height: 100%; }
110
- & .crisp-recordstable-col-check, & .crisp-recordstable-col-entity { position: sticky; z-index: 3; background: ${tokens_1.contract.bgSurface}; }
111
- /* The sticky pin is a LOGICAL offset: with physical \`left\` these columns
112
- were not pinned at all under RTL -- scrolled, they left the viewport
113
- entirely (measured: viewport 13..773, check column at x=1333). Nothing in
114
- JS measures these, so converting them is safe; the two properties below
115
- that have no logical form get an explicit RTL rule rather than being
116
- left to point the wrong way. */
117
- & .crisp-recordstable-col-check { inset-inline-start: 0; }
118
- & .crisp-recordstable-col-entity { inset-inline-start: 40px; clip-path: inset(0 -38px 0 0); transition: box-shadow .2s ease; }
119
- [dir="rtl"] & .crisp-recordstable-col-entity { clip-path: inset(0 0 0 -38px); }
120
- & thead .crisp-recordstable-col-check, & thead .crisp-recordstable-col-entity { z-index: 4; }
121
- /* soft shadow on the sticky column edge once the grid is scrolled horizontally */
122
- & .crisp-recordstable-scroll[data-scrolled] .crisp-recordstable-col-entity { box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
123
- /* box-shadow has no logical form either: the bleed follows the scrolled
124
- content, which is the opposite side under RTL. */
125
- [dir="rtl"] & .crisp-recordstable-scroll[data-scrolled] .crisp-recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
126
- /* AI-enriched values carry a purple wash. Measured live:
127
- a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
128
- whatever row-state background the cell already has, which is why it
129
- is an ::after and not a background. */
130
- & .crisp-recordstable-td[data-enriched]::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: color-mix(in srgb, ${tokens_1.contract.bgPurple} 4%, transparent); }
131
- & tbody tr:hover .crisp-recordstable-td { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 4%, ${tokens_1.contract.bgSurface}); }
132
- & tbody tr[data-selected] .crisp-recordstable-td { background: color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 10%, ${tokens_1.contract.bgSurface}); }
133
- & tbody tr[data-selected]:hover .crisp-recordstable-td { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 4%, color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 10%, ${tokens_1.contract.bgSurface})); }
134
- & .crisp-recordstable-th:last-child, & .crisp-recordstable-td:last-child { border-inline-end: none; }
135
-
136
- /* add-row footer */
137
- & .crisp-recordstable-addrow { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; width: 100%; height: ${tokens_1.contract.size.tableRow}; padding: 0 ${tokens_1.contract.space["2"]}; border: none; border-top: 1px solid ${tokens_1.contract.borderSubtle}; background: ${tokens_1.contract.bgSurface}; color: ${tokens_1.contract.fgMuted}; font-family: inherit; font-size: ${tokens_1.contract.text.lg}; cursor: pointer; }
138
- & .crisp-recordstable-addrow:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
139
- /* zero-row empty state — centred in the body region (headers + summary stay) */
140
- & .crisp-recordstable-empty { display: flex; align-items: center; justify-content: center; min-height: 320px; padding: ${tokens_1.contract.space["8"]} ${tokens_1.contract.space["4"]}; }
141
-
142
- /* summary footer — per-column aggregation, sticky to the bottom */
143
- & .crisp-recordstable-sum { position: sticky; bottom: 0; z-index: 2; height: ${tokens_1.contract.size.tableRow}; padding: 0; border-top: 1px solid ${tokens_1.contract.borderSubtle}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; border-inline-end: 1px solid ${tokens_1.contract.borderSubtle}; background: ${tokens_1.contract.bgSurface}; }
144
- & tfoot .crisp-recordstable-col-check, & tfoot .crisp-recordstable-col-entity { position: sticky; bottom: 0; z-index: 3; }
145
- & .crisp-recordstable-sum:last-child { border-inline-end: none; }
146
- & .crisp-recordstable-sum-btn { display: flex; align-items: center; justify-content: flex-end; gap: ${tokens_1.contract.space["1.5"]}; width: 100%; height: 100%; margin: 0; padding: 0 ${tokens_1.contract.space["3"]}; border: none; background: none; color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 63%, transparent); font-family: inherit; font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.medium}; cursor: pointer; white-space: nowrap; overflow: hidden; }
147
- & .crisp-recordstable-sum-btn:hover { background: ${tokens_1.contract.bgRaised}; }
148
- & .crisp-recordstable-sum-label { color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 45%, transparent); text-transform: capitalize; }
149
- & .crisp-recordstable-sum-value { color: ${tokens_1.contract.fgPrimary}; font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; }
150
- & .crisp-recordstable-sumgroup { width: 100%; height: 100%; }
151
- & .crisp-recordstable-pin { flex-shrink: 0; margin-inline-start: ${tokens_1.contract.space["1"]}; color: ${tokens_1.contract.bgWarning}; fill: color-mix(in srgb, ${tokens_1.contract.bgWarning} 35%, transparent); }
152
- & .crisp-recordstable-sum-btn[data-empty] { opacity: 0; justify-content: flex-start; }
153
- & .crisp-recordstable-sum-btn[data-empty]:hover { opacity: 1; }
154
-
155
- /* bulk action bar lives in its own component now — see components/bulkbar */
156
- & .crisp-recordstable-bulk-sep { width: 1px; height: 20px; margin: 0 ${tokens_1.contract.space["0.5"]}; background: ${tokens_1.contract.borderSubtle}; }
157
- & .crisp-recordstable-bulk-close { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; border: none; border-radius: ${tokens_1.contract.radius.md}; background: transparent; color: ${tokens_1.contract.fgMuted}; cursor: pointer; }
158
- & .crisp-recordstable-bulk-close:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
159
-
160
- /* announced, never drawn */
161
- & .crisp-recordstable-live {
162
- position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
163
- overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
164
- }
165
-
166
- ${core_1.rtlFlipCss}
167
- `,
168
- variants: {},
169
- defaultVariants: {},
170
- compoundVariants: [],
171
- });
172
- exports.recordstableRecipe = Object.assign((0, core_1.resolveRecipe)(config), {
173
- config,
174
- });
175
- exports.default = config;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recordTagCss = void 0;
4
- const tokens_1 = require("../../tokens");
5
- /**
6
- * The record tag/chip, measured live: 22px tall, `padding: 0 4px`,
7
- * `border-radius: ${c.radius.chip}`, 14px/20px at weight 500, and a 1px inset ring in the
8
- * tone's colour.
9
- *
10
- * Its own module (not pasted into `recordstable.recipe.ts`) because it used
11
- * to be shared with `RecordPanel`'s own Details field list too, and the two
12
- * copies had already started to drift before that sharing existed — adding
13
- * the measured inset ring meant patching the same rules twice. `RecordPanel`
14
- * no longer renders a Details list (#448, Attio's own peek doesn't have
15
- * one), so `RecordsTable` is this module's only consumer now; kept as its
16
- * own file rather than folded back in, since a second consumer showing up
17
- * again is exactly how the drift happened the first time.
18
- */
19
- exports.recordTagCss = `& .crisp-recordstable-tag { display: inline-flex; align-items: center; height: ${tokens_1.contract.size.chip}; padding: 0 ${tokens_1.contract.space["1"]}; border-radius: ${tokens_1.contract.radius.chip}; font-size: ${tokens_1.contract.text.lg}; line-height: 20px; font-weight: ${tokens_1.contract.weight.medium}; white-space: nowrap; background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 6%, transparent); color: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 82%, transparent); box-shadow: inset 0 0 0 1px ${tokens_1.contract.borderSubtle}; }
20
- & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 14%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 82%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgBrandSolid} 30%, transparent); }
21
- & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, ${tokens_1.contract.bgSuccess} 16%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgSuccess} 78%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgSuccess} 30%, transparent); }
22
- & .crisp-recordstable-tag[data-tone="warning"] { background: color-mix(in srgb, ${tokens_1.contract.bgWarning} 18%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgWarning} 82%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgWarning} 30%, transparent); }
23
- & .crisp-recordstable-tag[data-tone="danger"] { background: color-mix(in srgb, ${tokens_1.contract.bgDanger} 15%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgDanger} 80%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgDanger} 30%, transparent); }
24
- & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, ${tokens_1.contract.bgPurple} 16%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgPurple} 80%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgPurple} 30%, transparent); }
25
- & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, ${tokens_1.contract.bgCyan} 18%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgCyan} 82%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgCyan} 30%, transparent); }
26
- & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, ${tokens_1.contract.bgOrange} 16%, transparent); color: color-mix(in srgb, ${tokens_1.contract.bgOrange} 82%, ${tokens_1.contract.fgPrimary}); box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.bgOrange} 30%, transparent); }`;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.taskstableRecipe = exports.TasksTable = void 0;
4
- var taskstable_1 = require("./taskstable");
5
- Object.defineProperty(exports, "TasksTable", { enumerable: true, get: function () { return taskstable_1.TasksTable; } });
6
- var taskstable_recipe_1 = require("./taskstable.recipe");
7
- Object.defineProperty(exports, "taskstableRecipe", { enumerable: true, get: function () { return taskstable_recipe_1.taskstableRecipe; } });
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TasksTable = TasksTable;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("../../core");
6
- const listpage_1 = require("../listpage");
7
- const taskstable_recipe_1 = require("./taskstable.recipe");
8
- function Cell({ flex, className, children, }) {
9
- return ((0, jsx_runtime_1.jsx)("span", { className: (0, core_1.cx)("crisp-taskstable-cell", className), style: { flex }, children: children }));
10
- }
11
- /**
12
- * A grouped due-date table pattern — Attio's Tasks page. Composes
13
- * `ListPage`'s toolbar and group-row chrome (both class-compatible; see
14
- * taskstable.recipe.ts) with a typed column/cell layer: a title+checkbox
15
- * row grouped into due-date sections, a due-date cell that goes red past
16
- * due, and consumer-supplied record/assignee chip slots.
17
- *
18
- * @deprecated Reach for `DataTable`'s `groupBy` instead — a single
19
- * Attio-exact records grid replaces the separate table variants.
20
- * `TasksTable` has no consumers left (checked GRC and the fms/Mercury
21
- * admin) and is slated for removal in a future minor.
22
- */
23
- function TasksTable({ columns, groups, leading, trailing, emptyLabel: emptyLabelProp, completeLabel: completeLabelProp, incompleteLabel: incompleteLabelProp, className, ...rest }) {
24
- const crispMessages = (0, core_1.useCrispMessages)();
25
- const emptyLabel = emptyLabelProp ?? crispMessages["No tasks"] ?? "No tasks";
26
- const completeLabel = (0, core_1.useCrispMessage)(completeLabelProp, "Mark complete");
27
- const incompleteLabel = (0, core_1.useCrispMessage)(incompleteLabelProp, "Mark incomplete");
28
- const flexOf = (key) => columns.find((col) => col.key === key)?.flex ?? 1;
29
- const total = groups.reduce((s, g) => s + g.rows.length, 0);
30
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, core_1.cx)((0, taskstable_recipe_1.taskstableRecipe)({ className }), (0, listpage_1.listpageRecipe)()), ...rest, children: [(0, jsx_runtime_1.jsxs)("div", { className: "crisp-listpage-toolbar", children: [(0, jsx_runtime_1.jsx)("div", { className: "crisp-listpage-toolbar-lead", children: leading }), trailing != null && ((0, jsx_runtime_1.jsx)("div", { className: "crisp-listpage-toolbar-trail", children: trailing }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "crisp-listpage-body", children: [(0, jsx_runtime_1.jsx)("div", { className: "crisp-taskstable-colhead", children: columns.map((col) => ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-taskstable-colhead-cell", style: { flex: col.flex ?? 1 }, children: [col.icon, col.label] }, col.key))) }), total === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "crisp-taskstable-empty", children: emptyLabel })) : (groups.map((g) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "crisp-listpage-group", children: [g.label, (0, jsx_runtime_1.jsx)("span", { className: "crisp-listpage-group-count", children: g.count })] }), g.rows.map((row) => ((0, jsx_runtime_1.jsx)(listpage_1.ListRow, { children: (0, jsx_runtime_1.jsxs)("div", { className: "crisp-taskstable-row", style: { flex: 1 }, children: [(0, jsx_runtime_1.jsxs)(Cell, { flex: flexOf("title"), children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", className: "crisp-taskstable-check", checked: !!row.done, "aria-label": row.done ? incompleteLabel : completeLabel, onChange: () => row.onToggle?.(!row.done) }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-taskstable-title", children: row.title })] }), (0, jsx_runtime_1.jsx)(Cell, { flex: flexOf("due"), children: row.due != null && ((0, jsx_runtime_1.jsx)("span", { className: "crisp-taskstable-due", "data-overdue": row.due.overdue ? "" : undefined, children: row.due.label })) }), (0, jsx_runtime_1.jsx)(Cell, { flex: flexOf("record"), children: row.record }), (0, jsx_runtime_1.jsx)(Cell, { flex: flexOf("assignee"), children: row.assignee })] }) }, row.id)))] }, g.id))))] })] }));
31
- }
32
- TasksTable.displayName = "TasksTable";
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.taskstableRecipe = void 0;
4
- const core_1 = require("../../core");
5
- const tokens_1 = require("../../tokens");
6
- // A grouped due-date table — Attio's Tasks page (app.attio.com/<ws>/tasks),
7
- // measured live and recorded on crisp#462. Composes ListPage's own toolbar
8
- // (`.crisp-listpage-toolbar`) and group-row (`.crisp-listpage-group`) chrome
9
- // by carrying BOTH this recipe's root class and `listpageRecipe`'s root class
10
- // on the same element (see taskstable.tsx) -- both recipes' descendant rules
11
- // nest under their own root class, so this is a safe, ordinary composition,
12
- // the same way `<ListRow>` already lets a caller compose into `ListPage`'s
13
- // group bodies. Real deviation: ListPage's own `columns` colhead slot is
14
- // pinned to `c.size.menuRow` (32px, correct for its Reports/Sequences
15
- // reference surfaces per #479) but Tasks/Notes independently measure a 49px
16
- // column-header row (#462) -- ListPage's colhead can't be asked to render at
17
- // a different height per consumer today, so this component renders its own
18
- // colhead instead of using that slot. Flagged in the PR, not fixed here (out
19
- // of scope: don't change ListPage for this component).
20
- const config = (0, core_1.defineRecipe)({
21
- name: "taskstable",
22
- base: `display: flex; flex-direction: column; min-height: 0; box-sizing: border-box; font-family: ${tokens_1.contract.font.sans}; color: ${tokens_1.contract.fgPrimary};
23
- -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
24
-
25
- & .crisp-taskstable-colhead { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; min-height: 49px; max-height: 49px; padding: ${tokens_1.contract.space["2.5"]} ${tokens_1.contract.space["3"]}; box-shadow: inset 0 -1px 0 ${tokens_1.contract.borderSubtle}; font-size: ${tokens_1.contract.text.sm}; color: ${tokens_1.contract.fgMuted}; }
26
- & .crisp-taskstable-colhead-cell { display: inline-flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; min-width: 0; }
27
-
28
- & .crisp-taskstable-row { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; }
29
- /* #642: measured live -- title, due date and assignee name are ALL
30
- 14px/500 on Attio's own Tasks page. Only -title/-due set their own
31
- font-size (and only -title its own weight), so an unstyled consumer
32
- slot (a plain PersonChip/RecordChip name span with no font-size of
33
- its own) fell through to the browser/body default, 16px/400. Set
34
- the ambient font here so it cascades to any slot content that
35
- doesn't override it -- -title/-due's own declarations still apply,
36
- unchanged, they're just now redundant with this baseline rather
37
- than the only source of it. */
38
- & .crisp-taskstable-cell { display: flex; align-items: center; min-width: 0; font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.medium}; }
39
-
40
- & .crisp-taskstable-check { appearance: none; -webkit-appearance: none; box-sizing: border-box; flex-shrink: 0; margin: 0; width: 16px; height: 16px; border: none; border-radius: ${tokens_1.contract.radius.full}; background: ${tokens_1.contract.bgSurface}; box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.fgPrimary} 9%, transparent); cursor: pointer; transition: background-color .12s, box-shadow .12s; }
41
- & .crisp-taskstable-check:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, ${tokens_1.contract.fgPrimary} 30%, transparent); }
42
- & .crisp-taskstable-check:checked { background: ${tokens_1.contract.bgBrandSolid} center / 10px no-repeat; box-shadow: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 6.5 5 9l4.5-5'/%3E%3C/svg%3E"); }
43
- & .crisp-taskstable-check:focus-visible { outline: 2px solid ${tokens_1.contract.bgBrandSolid}; outline-offset: 1px; }
44
-
45
- & .crisp-taskstable-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: ${tokens_1.contract.text.lg}; font-weight: ${tokens_1.contract.weight.medium}; color: ${tokens_1.contract.fgPrimary}; }
46
-
47
- & .crisp-taskstable-due { font-size: ${tokens_1.contract.text.lg}; color: ${tokens_1.contract.fgMuted}; white-space: nowrap; }
48
- & .crisp-taskstable-due[data-overdue] { color: ${tokens_1.contract.fgDanger}; }
49
-
50
- & .crisp-taskstable-empty { padding: ${tokens_1.contract.space["8"]} ${tokens_1.contract.space["4"]}; text-align: center; font-size: ${tokens_1.contract.text.md}; color: ${tokens_1.contract.fgMuted}; }`,
51
- variants: {},
52
- defaultVariants: {},
53
- compoundVariants: [],
54
- });
55
- exports.taskstableRecipe = (0, core_1.resolveRecipe)(config);
56
- exports.default = config;
@@ -1,26 +0,0 @@
1
- // Clean, self-contained brand-mark data URIs for the built-in demo dataset
2
- // (defaultRows below). Each PNG is a real favicon, fetched once from
3
- // Google's public favicon service, then hard-thresholded on alpha (<128
4
- // -> fully transparent, >=128 -> fully opaque) before being baked in here.
5
- //
6
- // Why: those source PNGs anti-alias their edges against an assumed white
7
- // canvas, so boundary pixels come back literally white-colored at partial
8
- // alpha even though the corners are properly transparent. On a light page
9
- // that blends in invisibly; on dark rows it reads as a white halo/outline
10
- // around every logo. Thresholding removes that halo. It does NOT remove a
11
- // company's own opaque branding (e.g. Google's white circle, Notion's
12
- // white backing, OpenAI/Anthropic's light square) — those pixels are fully
13
- // opaque real brand-icon content, not an artifact, and are left as-is.
14
- //
15
- // Baking these in as data URIs (instead of the live s2/favicons URL) also
16
- // means the demo never depends on a live network request.
17
- export const companyLogos = {
18
- "google.com": "data:image/png;base64,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",
19
- "stripe.com": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACzklEQVR42u2az24SURTGv3M7BdsoRUKopcUqiU2jMRpbJWl0V7vqzufxDUx8Ct/AhakkbozJaGNq/JPGGkwL0tIgUmqk0OFeFzgMA5gopcDMnLOCS1h8v++7597JGUrMPUNzTQYTEMKnRsQY3FQ1WYaUVcoVddu6aP4SCy+rUW3CdeIBYESMYVSbULHwsuoIYCa8opSdhytLQWAmvKJsAFqpeKFMzWIymIAXnO+UhHq/Ez7Pud+Iv/Ap4caG9z+NUcDjxQAYAANgAAzAySWNk11jNKeJNQzgV8Fam5kn/Cy5EIApFqgL/pGuf75+n3BvFZiNE24m6muPHyrkdhSERs4FUD1SNmfHQ0AoQrh2xxI7FQXOBez/O/zjvmEAPs0hCWiOsuns+RhwZZEQvwrcvkuIxjoL7nVpg3A3EAGm44T4qiX20mXA5++/GVq/3F1cIdxaIkSi6Ju7pw7gb135wkU0xC4khkNozwFUjxS+vWvvylNRwO8fTJz7BkAaCtNxwqMnhLn5FjAV54jv+iZons9T0fbfnCSenwUYAANgAAyAATAABsAAGAADYAAMgAEwAAbAAJxcmuby2WC1AlQqwG4WyKaBNy8VUp+ArXWF8RDgO0PuA3BYqgve0IG3rxT2doDCfvuQpZuZ4FABaHZ3Qwe2Uwp6EviqW6Pv6RtW1INRctZorFN93rSi/H0P+PIBKGaVbTg6u3Ayd4cCgBnjbBrYzwIvnipsrSvb2Gw81HtnBwaged9upxQ+vgZKBYXSPmzuDkJszwCYR85utl3s++dWjAft7r8UPViSXb9kczYAZDbt+1bTTn/fDs0WKBXU0Drbl5ugk5zmZwEGwAAYAANgAB0A1GTZs+JrsgwhZZW8CkDKKolcUQdBek48QSJX1Os9IJ1Pei4FpuZGE8zk18gLSSBIZPJr1PEUSOeTdGwckBsbY02WcWwcUGvafwM6ARIBbCv6CwAAAABJRU5ErkJggg==",
20
- "figma.com": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADAUlEQVR42u2bP0+TURTGf0/BNIGWqoMuDsYQpi4GTGtY3BQ3ln4EdwIDTKSTLJbZz+Dgnxj0G2CxboZBcOEjFJrwLx4HCokRor3v5fa273vHpr1vz3Of85xznt7KzEjzypHyNepll3IZikVwodNsD+8VYIBJlPZh9XsEDKhWoVAwQuTS+RNkRnvcWHqceEs5f+9aDfb2kgc96wGYiaZYtcAM8BG8r9WuWtgUqFYjkzKDpUogAMpliLF2mox6OQAAxSJIcda09ngAAOLunCzdjZADM4cLAMta4QyADIBrB0Cx1kBA6PoBODmJ9ziLBwEY0GrFyQJDLuOxmwZsbsZX/xpfAotgs6lYEp+JLYV3hM46YlGpgGR9o31js89lsNmE01NhJoKMCXam9gencqW9d0+w/qBF/rjbivZIxuVXf39CH4GRK5rb81c6Tp2vfwaszUP+6MyqxIMq6DMw0t3vKmNUGAVMG/SPAW9q8POoG7SPwN8AhR4PVZg2kD3vAwMugvfWxDgyWpg+BQZgbd7PqV/EsEHShHZOh54BqNfADG9yrw/dnE7eDpjqATQgf+y5qt3wuFclAAMMf6fv7uNcudP1e4IRD8OBRNAyRygDgFS7wvFKYBgGKIdvGRSD5AneuuM5/DGPe80FYMCL12AepwB74nZyl0Ti5Mo4ieDKe6+jAPYscSLIngauAocPPWvBvjMPZHP9uCPUXS/nQQmGo+V3f4bdHW0tRPBe+oCVt3D7LvLlDtgccID+wQexlTx4LwwAKG/XOey0u2Ntb0jszDQ00Bclp1qLGGaDOiSNunt4NSbv3zOU0llgGIJ3BmCqtQhK6TRY3q5j/LLUjsOHnTZDc/wuAOQ0XP+w6N0UzTzBzBLLAEi3BqB0AyDzKYP9l9SeASjlOt4enh+72XcGOI3DU18XsOQXo7Qz0xhMEfzxaD3xXckYgk9UBXamJ5woYIjdmVI0SprYEZr8toDsv7FQLCfvrQ/YnV6npI6QdOlv5xJgKqkTXfDePMGsExzg9Rvv7eoPX7dwVQAAAABJRU5ErkJggg==",
21
- "notion.so": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEmElEQVR42uVb4XGrMAyW3/V/3AniDUo3MBOUDUomKJ0gZALYADpBsgFkAtjAMAF0Ar0/jxwFg02AQni640gv4EhfJfmzJRP4JUHEzq/uGI4AABBCRutFJjQGYRkhY4AgCgOXMurXQCASw1dldJZlt8+UUqCUTgoE+S3jy7K8XVmWQVmW8P39ffu7Mrb+XFmWrXE452DbNry/v08CQh0AHPpfybLs9jnP85by9eemFtu2wfO8Po/QBwIRARsihEDHcZBzjoZhIGMMKaX4z0tWcTHGMEkS7BE9D2g+maYpmKYpdcEphDF2u1dxXV37/V76XZZlkKYpnE6nlke5rgvH4/EuT5ACYJomxHGsNKSuYFPhLkMUSUxLXNeF0+nUAjWKohu4g4CQ+E3L1c7nM0ZRhEIIFELg0iKEQMbYDz0ppej7/vCQ0AFgDUbLQLBtu6Wvbdu9+g4GoEL3fD7jGsXzvFaCZoxhGIZ6IOgAUF2u664SBCGEdJZyHAeLoujEQJoEVfOnZVngeV5fwhnF+po8oiJMdXJUJ00qrtGVIEmVFocCUA3qui68vb0BpbRXuTzPWwRKdp9TOOcQRdF0ADyiNEOfEEKeHtmgOqGq3wEA4jjW8qxFAKgToqby1Xe73a5FoJrv9Ekcx2Ca5n1UeEgIUErBsqwfilUsUGbAFExwwCaBMgQGT4PNK4oiXKs0dZXNg6M9YMAqeoltIqUH/IH/XB5iFrhcLnC9Xlukp7pzziEIgvUBEMcxXK/XltJ1Vue6Lnx8fHSOEYYhHA6H3t95eXkZTRDuToJdEgSB1vuU0t6Vm+d5yDlvLX0BAIMgUK36lElwNgA459pjcM4nyeqrAqAoChRCYBRFWuMoNjIeD4Ch46lCYS4AVjMNlmWpTHZzrpIW9wCdUNhMCMgyuk4obAYAVWLsmhU2AwAiomVZg0NhUwAURdFbaqOUtjYzNwVAxfL6xrYsa9sA6DDGei1ikwB07efLQmGTRIgxBo7j9BKkZiH04YmQTPq4QdfUuYkQqETFDWQAbQoARETHcSb97YcDoCgKZShsdjVY1RHu3dt7+CRYFxVN3mwI6HKD2UNg6rr/Pdygp+tr/hBwXXdWD1D09mnT5NlCQLVSG6JE1/xOKUXLsnr3AVWhMCUAINuPHwOA7/tKEHW2w5MkaY1DKcXj8ThdcbSrV/jz8xN837+rOHo4HCCOY2n9f7/fg2EYwDnX7h26XC4AAGAYBhiGoVVm1y6Pd3lBURRoGMboHLD68nhfy3yWZfD6+trZN7yp8vi/F0hzSlqEnY2UNE1HHZnRzgdLe0DzjEJZlpDnOfi+32qSknlA35mhlmWyLvIoirST2djGSNk7Y9vkiOLhVj4wTfMHstWOzm63m6Srcy4xDAOSJBl2pEQ2M+hWe9d2BUEw/DgJdMxzuiQJVnCkxrKsrk42/YOTMrRs24avr6/Zu0C7eg2rRsrmqRTdxVzl/k8DTpdhs3fn+fkZwjBsJaOmMjLlms2UTYPnpgiDj872nSusktpvd4JOccqUDF02P3BLoDTpk3v2DtZklC4Nnuv0OC6p/BTyFxmRx6YRUfIyAAAAAElFTkSuQmCC",
22
- "linear.app": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAYXElEQVR42r2be3AV5f3/X3v27LnsuSSckxxyIQGCRBKMARXRVspoRavVYSpKEXGmrbXO2HGmzGA72mG0/gZr/f6+tB2m6mAVddSCtQgKjkJDIRZFvkDCJYRbQsiFkJPLSc79tnt+f+g+v5NDcpLSb92ZZ7LZ3bO7z+d5f96f60o1c67NkLVJkjTm/kTnso9ln8tkMuTbTCbTqOsymcyofeN87jVZd8hzLv//mUwGs3HAeOlMJjNqf7Lnss9nX6frel4B5t5HkqRR12madtlL55tgvuNjCcmc/dLGC4w18YnOZZ/Pvm6sLXeC+dA11kuPvrd0RQgw/ponA9PJbONNOhfiYwltrBcz/k6sAhMJaPxzX6uAnjuVPBOSxtnPd04aV8cBZFn++nm5q3+5Cv2HBJCZcBUnu9qT1cXsVU2n02Pq/1gqdiWTzC88Rgsg3wTH0++JeMIYJpPpsiFJEslkUvxe13WBkOwx2YleiRDMuRfksvhE5yayFGazGZPJhCzLmM1mMWRZFoLQdZ10Ok06nSaVSpFKpUin0+i6PgkV+PcEY86gjV7lHN2NRqMUFhZiMplIJBLIskwmowvoptNpZFnGarWKVbRabZjNZuLxOFabQkVFBXPnzmXOnDlUVFTg8XhwOBziN8lkkkgkwuDgIF1dXbS2tnLixAm6u7uJj0Rxu90AxONxMpkMmqaTTCbJZDLIJoVMJoOiKIIzjPsODw9jt9vzk/CsWbMz+ZwZVVWJx+MkEglMJpNYUWNflmUURSEajYprAGbNmsXixYu56667cLvdeL1enE51UrwRDkcZHBwkGAyyY8cOGhsbaW9vF2ixWCzYbDbi8ThkTAItmUyGdDpNJpPBarVis9mIRCJ5eUSqqqrKjOfFAdjtdoLBIGazGVVVSaVSJJNJMVHDjhcUFADgcrlYvnw5y5Ytw+l0YrfbMZvNo0gvlUqh67rgBsPjUxRlFEFqmkY0GiUYDPLee++xdetWYrEYkiQxMDBAMpnGZlVHrbyxGJqm4Xa7iUajeVVBCGA8ZySVSombWa1WQqEQmqZhs9nIZDI4nU7C4TCapnHPPffwi1/8gsrKSuLxuFgBg/AMUjPQYwhG1/VRQskmRYfDQTQaxWaz0dXVxYYNG/joo4+QJAm73U40GkdCJh6PI8sybrebRCJBKBQSvJNXBWbOnJkXAdkkZ8BLVVVsNhuaphGJRLjqqqt47LHHWLp0qYChzWYjEAgwZcqUUffL9vyM1TbIzjiW/Q4DAwN4vV5SqZRAy7Zt29i4cSPnz5/HZlOR5a8EYKAjG3ETkaEQwHhCMBg8Go2i6zoul4tMJkMkEkGWZcrLy9mwYQPz589H13VGRkZQVVXwg0Fc2U7QWCZuLB/A4CBDaOFwGIfDgaIoHD58mNWrV9PR0SmQYjKZxMqrqiq4IR8CTOPZSWPfYH6D6W02G9FoFIvFwqJFi2hsbGT69OlEo1FMJhMulwur1YosywwNDYkJGb93OBw4nU5cLhdut1sMl8uF0+nEZrONItqhoSGhLoZgw+EwM2bMYO/evSxatAiLxSLUxGq1ikVLJBITOlNyYWHhs/nC3FQqhcPhIJFIoGkakiQRiUS48cYb+c1vfoPH48Fut39tnjRkWUbTNFKpFE6nc9TKGlA3zht6nz0MP8IQutPpJBaLCRVIp9MoiiKQUVd3LS0tLVy4cAGz2SwskbFQhqs9rgpUVs6Y0AoMDw9TWFhIIBCgoKCA/v5+duzYwc03LySZTCLLMsPDw3g8HsHQbrdbvPBE+YB/x9011PK6666jr68Pi8UiTOVYz74s2JrId49EIgKWPp+PQCCAqqr86U9/4vTps1gsFgYHB3G73QSDQRKJBEVFRYTD4XHJaKJJjeUCj7dZrVZ6enr4/e9/j9lsJhKJoCgKFouFWCw2YVwiFxQUPpvPDNpsNoLBoCBCm81GLBbD7/fT1NTELbd8m6KiIhRFwWaz4ff7iUQiFBcXc/78eZxO56RD6rFc3YmCIoPkampqCAaD/OMf/8Dn84kFmOj3sttd8Gw+FUin03i9XhKJBDfddBPf+c536OjoIBqN0tnZSUfHeb773e8SiUQA8Hq9QlUcDscoXz7fxPP5+fkmkEgk8Hq9RCIRFi5cSHNzM62trUiShMvlIpVK5RXyhAgw3Mru7m5efPFF7rvvPnw+H19++SXxeJzOzgu0tbUxb948ysvLicfjXzso0VFe3b+iAuMJZSwzanBIIBCguLiYOXPm8Mc//hGfz0cqlZowoyS73QV5rYDT6eTMmTOsWrWKJ554AofDzrx59WiazpEjR4hEwhw6dAhFUaitrcVqtaJpGiaTiXA4jMVi+Zdhnwvx7Aln/6/rOrIsE4lEMJvNxGIxZs2axeHDh+nq6iIej1/GQ5eZwVwVyN03wtQ1a9ZQXV3N8PAI6bTGt7/9bVRVpbFxHyUlJezatYvz579SB5fLRSAQoLS0VMT7/xsCMPazjxlRqWGGTSYTFRUV/O1vf/sq3M0SwFjPEAIYTwi6ruPxeNi6dSulpaVce+21wo7fcsu3MJvN7N27F7fbzZkzZ+jq6uLOO+9ElmX8fj+qql6xCuTCfqxrDFNnMplEkFZRUcF7771HIpGYHAkanlN2AtOQstPp5MKFCxQUFHDgwAHq6+vxeDwoikIkEuW2225FlmUOHjxIPB7n0KFDBAIBbr75ZgoLC0fZ+nA4TCqVEnHFeHpvOEuGC5x9fCynyeAbq9Uqor/CwkK2bduGw+FA0zQRa2QHZZIk/X8EZD8g2xPr7+/n6quvZnBwkEQiwdGjR7n55pvFpHRdo7q6mmnTpnHs2DGmTp3Kxx9/TGdnJ0uXLiWRSJBMJpEkCVVVKSgoQFGUUZ5lLrGNB/vcfUNQRhAVj8fRdV14gdu2bUNRlDFrGMa+SZKkURLPvthkMlFVVUVtba3wxY8dO8b9999PNBrF5XIxPDyM2+3mBz/4AStXrqSjo4OrrrqKDz/8kJ/97GckEgk8Hg/RaBSz2UxbWxvHjx/H6/WKuD17GJyTmyIzRjKZvOyYMQcDYel0mtmzZ1NUVCQi2LGSPqNI0IBENkx0Xaempoa3336bRYsW8fLLL1NZWcnAwAANDQ3ceOONeDxTsFgshEIhbrvtNsrKynj77bcpLy/nxIkTnDt3jvr6ehwOB8lkkqKiIjFRp9MpTFXu6hqwNSI6Q0C5+8YEdV0XgVs8Hqe8vJw9e/bQ2dkpAquxcpam3LDXCB5SqRSxWIwFCxYQCoWorq7m888/p7W1lYqKCrq7u/nRj37EyZMnicViyLLMxYsX+elPf8pzzz1HX18fRUVF7Nmzh1//+tcEg0FUVWVkZITi4mKGhoZEciV7MmOhIBcRucei0SixWEykzAYHB8lkMtTV1QkBZ6tadvb6Mitg6LYBr5UrVwLQ3d1NWVkZq1at4re//S1lZWV0dnbS2nqS6667ToSk/f39LFu2DK/Xy0cffQTAhQsXGBwc5OqrrxaBU1lZGYODg8iyPGrFDQFkq0Q+BBgWSdd1TCYTmqYRDAZxOBwEAgF27tyJxWLBbDYLARiLrGnaVwjIvamBCEmSaGlpobCwELPZzKlTp5g1axZbt24lmUwyc+ZM2tvbefjhh7FYLEyZMoWhoSH8fj8rV65k7dq1hEIhPB4Pr732Gr/73e9wOBw4HA56enooLi6+TL8NHc/en4gDjAUzkrdGgDZlyhQhwLGq2QIBhgCyMzMGbPbv309XVxc33HADfX19hEIhvvWtb1FdXc0rr7zClCmFxONxPv30UxYsWIDP5+P06dMoisKSJUsoKiri3XffxefzcfToUc6cOcNdd93F8PDwqNx/9iJkIyDX7OWaQiM/kE6nSSaTaJqGqqoiS71582bsdjuKoojfGAhIp9OYDOgoivJ1zj8j4GSxWFBVlffff58dO3ZQWFhIT08PH374IXfffTd///vf6e7uxuv10tXVxeOPPy5Y//Tp05w4cYJHHnmETZs24ff7KSgo4JNPPmHNmjWoqiryBSaTiWAwKFA3NDSELMs4HI4xJ509jMyPYQ2y/QfDLOaW6w1rJ0kSpsnE29OnT2f9+vU0NDRQWVlJT08PmzZtora2lsbGRk6dOiUkeu+99xKLxaitrcXv99Pe3s7tt9/Oxo0buXTpElarlc2bN/PCCy8gSRKpVIpgMEhJSQnBYBBd17n22muJx+OCzHIdpeyhaZrwKWRZRpIkhoeHRWEmOyM91ia7XO5n8wlA0zQURcFut/PFF18IaIdCIVpaWrjppoU8/PDDrF+/XuTrWlpamD9/Pk6nk0uXLpFMJlm6dCm6rvP5558ze/Zsdu/eTV9fHw888ADxeBy/38/UqVPp7+/n9OnTVFZWjhlH5LrGmqYJR8sguoGBAaZOncqxY8fYt28fVqsVs9l8GRoymczEAjBMz9DQEDabjePHj1NbW4ssy/T19dHV1cmCBQu4/fbbeeONN5g9ezZNTU00NTVxxx13UF5eTkdHB36/n4ceegiHw8GWLVvIZDIMDQ1x5MgR7rrrLjERj8dDIpEQRY2xPMXsYbjUBvyNzHBZWRk7d+7k5MmTWCwWod7/sgDi8TiPPvooJ0+exG63U1BQwLvvvsvSpUuprKzk9OlTnD9/ngULFnD33XezYcMGPB4Pfr+fzs5O6urqcDqdDAwMEAgEuPPOO6moqOCTTz4hnU7T0dFBX18fCxYsoKioiJGREVwuF+FwmHg8Lmp+uatvWKtkMilqgUY6zKhdvPnmmwQCgVGZoctc4Yk4IJlMsmTJEvbv38/g4CB+v5/a2loeffRR+vr6uOmmm/D7/ezevZtp06bx4YcfEolE8Hg8fPrpp/zqV78iGo1SUlJCOBymvb2dRx55hNdff1240++88w4vv/wyfr8fgMHBQdLptKhBjDX5bCEYq2tUsex2O93d3XR0dIjJj8UlkyJBr9fL9u3bOXPmDM3NzQSDQfx+P6Wlpfz85z9naGgISZKwWq3s3LmT+fPn884779DZ2cmcOXPo6uriscceE3XC1tZWdu3axZ133smrr75Kb28vs2bN4oMPPmDt2rUAVFdXo+u6WP18RGhElpqmCQ7QdZ3W1lZGRkbyCmBSCOjv72ffvn20tLRw6dIlOjs7ReAxdepUnnzySWbNmkUwGESSJF577TXq6urYt28fp06dEqu0YsUKNE1j7ty5WCwWzp07xwMPPMALL7xAd3c3mUyGL7/8kueffx6/3y8ySvlyB4YADPfYYrGIposLFy4IE5u3WyU3GssdkiTR39+PyWTiz3/+M+3t7Xz22WeYzWai0SjpdJrHH38cSZKYNm0adrudd999l2uuuYbt27czNDSEqqqcOXOGJ598kv7+fpEn2L9/Pz/+8Y/ZsGEDoVAIXdfZs2cPa9euFV5cMpnE7XYLb07TNMLhMIqiCHufTqdxOByk02mGh4eRZZnNmzeP8gRzcwiGTzAhAq666ip6e3tpaGhg/vz5/OEPfyAUCnHy5ElRnamsrOTpp5+mu7sbVVVRFIX33nuPuXPnsm3bNs6cOUNVVRXNzc0888wzdHR0YLfbcTgctLW1sWLFCl577TUSiQSxWIwdO3awbt06SkpKsNlsdHZ2ilyjqqrMmDFD+AiJRAJd14nFYgQCAWbOnMn27dsJBAJjur+X+QFOp+vZ/M0KYex2O2fPnuWOO+7AbDbzySefUFVVxYoVK9i8+S8MDAyQyWRoaWmhrq6Ouro6hoaG6OnpYeHChdx+++28/vrr2O12BgYGOHr0KNdddx0+n4+LFy+iaRqLFy9GkiQaGhqoqalhz549nD17lu9973s4HA6Gh4eRJImOjg6Ghoaoqamhr68PRVEE+RnNHOvXryeZTE4qLT8hAowyE8Bf//pXysrKMJvN7Ny5k2QySWNjI5lMhpKSEoaHh3nqqadob28XHtrevXu5/vrr2bJli7DPbW1tPPHEEwQCAerq6ujp6eHIkSP88pe/5NVXX6W1tRVVVfniiy946qmnRjVVzJ49W1ShXS6XUIVMJoPX6+XNN9+kt7d3UglZAFM+J8OoCSSTSQoLC9m/fz/Hjx/nhhtuIB6P8/7775NIJGhqahIJSZfLxZo1a9B1nbKyMnRdZ8uWLdTX1wtiBHC73Tz22GO0tLRQVFSEruucPHmSlStX8swzz4hJ/fOf/+T5559HkiR8Pp8wsQMDA0QiERKJhKg+HT58WKTBJEkikUgw0fxkh8OZVwWi0ShTpkwhFApht9sJh8Oi6cHtdrNr16fMmzePBx98kI8//phwOExpaSkNDQ2Ul5dTUVFBVVUVBw8epLq6mqVLl7JlyxaCwSB9fX0cPHiQJUuWiCj04sWL3HvvvVRUVLB161ZUVeX48eOYzWamTZsmTJ6iKCSTSdLpNG63m46ODt566y16enpE9ik7E3TFCDBqgZqm4XA4OHHiBC0tLVRWVjIyMkJNTQ0bN27EbDbzxhtvCBPZ39/PW2+9RW9vLx0dHRQWFtLe3s7MmTP56KOPiEQi1NTUEI/Hefzxx0UOv6enh+bmZu677z5eeeUVAoEAXq+XTZs28dJLL1FaWkpxcTF+vx+fz4fJZKKtrY3du3fT1NREcXGxSLJku7/jjQk5wMitq6pKLBajpKSEhoYGdu/eTVVVFYODg3i9Xv7yl79gt9s5ceKECGyi0ShPP/00g4ODOJ1OIpGIILnPPvuM1tZWIpEIIyMjPPLII1y6dIlrrrmGvr4+2tvbWb58OevWrWN4eBiXy8XevXtZu3atUMne3l4kSeLAgQPs3LlTcFY6ncZut3/VRTaRFVBVx5iVIWMYCDB6BYwMjJH+qq+fRzAYwustorn5KC6Xm//+7/U899z/wWKxYjLJNDTsobr6atzuAsrKymlpOUlt7Vzuvvv7bNr0BqrqIBaL88UXB6ivn0dxsY/u7h6SyRTf//49lJaW8cEH23C7C2huPorf38+CBTficDj5r//6v/zP/xwiFovjdLqwWKxomk4ikcThcKJp+tc9j2MPIYB8FWIjQWI2m9E0jVgsJtrXVFWlrq6O3t5e0UzR29vLSy+9xIsvvihSW8eOHRMJ1srKSo4cOcKSJUuor69n+/btooq7d+9eli9fjtlspru7m0AgwC233EJ5eTk7duzA5/PR1NREKpVi//79NDc3MzQ0hKZpIuw1HKTc5ou8CBhPCLl5QqP1zOjwbGpq4uzZsyxevBibzUYoFKKnp4fa2loeeOABGhoasNvtpNNptm3bxvXXXy8itvPnz7Ns2TIcDgeNjY3EYjH6+/vZtWsX9957L263G0VROHXqFA8++KAo0QHEYjEOHjwouENVVdEdklvfyNv47fUWZybzwYJxU6P7wkidG2loRVH44Q9/yK233kpvby+xWIwHH3yQWCzGDTfcgMfjwel00tnZydq1a7n11ls5f/48yWSSVatW8dlnn3HfffeJnqCqqipWr16N3W4XLuz999/P6tWrefPNN9E0TSRVjaApOzU2mdL8KAGMJwSjTJZOp0XLm8ViESnoaDRKfX09Bw8eRFVVKioqWLZsGT6fj66uLpYuXcr06dOZPn26EJyiKCxevJgnnniCkZER/H4/y5cvp6GhgYceeojy8nIRcT711FPMmzePAwcOsG7dOmRZxuVycenSJWw2m2D77MyQzWYTxybyBCWPpygzUYdI9oSNSowRYlosFvx+P8XFxSiKQl9fHwAzZ85kxYoVAKxatYpMJsMdd9xBOp1GVVXa2tr4yU9+wj333IPFYqGrq4sVK1bQ2NjIypUrRbOl2WymsLCQtrY2bDYbZWVltLe3s3DhQk6fPj0qi23kBgweMBq48nKA3a7mJcHsgqnR/GhAzGhXM+oBgUAAn88nmhZ2797NoUOH2Lx5Mx6Ph3Q6zaFDh0QMf/jwYXRdp6SkBIBz585RVlbGuXPn0DRNJDVDoRCKooiiqsfj4dSpUxQUFIj6v9G0bWSajYWaSBUEAvI1SRmOkDF5g7GNF4pEIsyYMYNkMsnAwIDo0pQkSaS1jG4RI+1VXl7OxYsXSSaTzJ8/n76+Pjo6OgAoLS3l0qVLzJgxg5GREYLBIFOnTiUYDBKPxykpKRE9gEYmyCBDI08oyzJ2u/2yTrHLBDBlijcz2e8Cr2SbyAwZfkU2axswNmp9/8nnj/nFyDe55bqr2Q3T38S7mMezl/8bn9JdqQCyJ//vvsekETDWB5TfxDbec8YraP5HETDRp7H/iW2sJqjs9/h3n39FCPhXPn6+0hXO/YBivM7RyXp0V4yA8T6N+6bUIF8D0zexmfMx/zdtFXK9um/CDP8/nZEKihfT0P8AAAAASUVORK5CYII=",
23
- "vercel.com": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACMUlEQVR42u3ZLa+yYBgH8Os8nqKbjY2RCAYMWHXTIgaKm4FCsBFJJJMfgG9Aur+DnXwHGo1iYCYyATfHdp10zjzu2c458ipc/83mG7/7ut/fAAChx/kHPQ8BEAABEAABEAABEAABEAABEAAB1B1FUUBV1cYRsKlXkiTIOccm/0NjAJZlYZ7niIhoWVa/AARBwCiK8DNRFKEkSf0BcF0Xsyz7AsiyDF3X7QeApmkYhiE+JgxDVFW1+wCMsa++f588z9HzvG4D6Lr+re8/Jo5jNE2zuwCMMfwpjLFuAjiO89/Sf0ySJLVOi7WsBGVZhvV6DYPB4Mf3iqIIu90OZFnuzkrQtu1ftf79gGjbdje6gCRJGAQB/jVBEKAgCK8PcDwe8dnUNBZU+wNpmj4NkCTJaw+Ch8MBxuPx058XRRE8z6t0AHyDCq/H0zQtBAAAcL1eYTQavd6BSBiGhR8eAGA4HMLpdHqtadA0zUJ9/zFpmla5RC7/SznnWHY455VMi6V3AcdxYDKZlF6ms9kMLMtqdxeYz+eVtP5nfN9HRVHaWwGGYcBisahssFqtVrDf79tZAVW3/v35oa7r7asAXddhuVxWvnObTqew2WzaVQGGYfxpt1c0cRyXVgWlVMB2u/3VXr/M8wXTNNtRAZqm1dr692cGhmE0vxDyfR+bShAEhQHei5bP+XyGy+XSyKXm7XZr926QrscJgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIoH35AMeAlc846gXqAAAAAElFTkSuQmCC",
24
- "openai.com": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFm0lEQVR42u2av2v6ThjHn8+XbwsfcShWqFvTRZycLB3s0MlFaGP/Ae0WKNhJcLJ0ckuhk50UOgecnAuhUHBJu8SlQwtxMtNZ5drhvpPhklxiTo31S3MQSO1pcq88P973PPlDCCHwi8c/8MtHBCACEAGIAEQAIgARgN87/l3XhcbjMby9vcH39zcAAMTjcchkMj9PgIQ8FEUh2WyWAADzkCSJ6LpOfmqEBkBVVSIIgufCnUetViMY47UD+BPGZqjT6cDFxYX1dzabhUqlAoeHh5BMJmE8HsPHxwc8PDxAt9u1zbu+vobn52d4eXmBz89P2NnZgWQyCaenp3BycgKJRGKzXUBRFOupJhIJ0uv1fOcbhkGKxSKXpSCENtMFDMOwbjSbzZLJZDL3O+12m8RiMddCc7kcEUXR0436/f7mARBF0brBeYtXVZUkEgnbokRRJJqmMef3+31SKBRs8+dZ11oB6Lpu3ZiiKL5WQoOaWUvQJ0q7GAAQwzA2A0Cr1bJuijUwxqTRaLhM2Q+W1+j1etb38/n8zwIwTZPIskxSqRQBAFIul31veHY0Gg1fN5mnDWiYqqr+DIBms+lamCzLvosvl8u+ZkvPFwTBc3EIIdtvrhUAQojk83lmdHYCoF3D70npuu4KcnRwZEGTJMmas6iI4gaAMSbpdNq6cLFYJLquW5/5AWCNyWRCarUa00WcnzWbTdtC2+229T/TNNcDoFqt2kTJbMxiAA8AZ0R3Ch3TNG3XAwASi8Ws9Nfv963PvdLnSgHQF6T9DmPMBUDTNJcL5XI5z9jAcg9RFG0WsOiGigsALVlpORoUAMbY9UR5AyRLNTrvJxQApmna/NMZF4IAcB7tdtv2FGlfD6o51hYDVFX19DdeAE4NMJlMuEUSQoiUy2WbmlwkE8AiuzynuQUFIEmSr4kbhmFLbTOl5xfgZFm25lar1c0GEPimGO5SrVY9zZy2BN5sELgo+vfvX+v86+trLeW6YrFond/d3cHu7i7c39+75smybJ3f3t6GUxChU6BT0WGMra1tKpWy7eyWsYB2u00wxi6hVCwWffUJTywAHgXo52vOLa4oisQ0TVuU5wXQarVs8YEurjrdkA7SPMUSLh1A+xormLFSGi14lgHgtCYnADpN8xRKuBoj9XrdOr+8vHT9v1KpAEIIGo2G9dnT09Na4sX29rZ1Pp1Ow+kMZTIZqNVqAADQ7Xbh6urKNScej8PNzQ3oum4LYgAApVIJBoOB5+8PBgMolUpLw6ADdihVYdrfC4WCb25n1f6clV2EEHNHyOMCdJAOLQbQym3eVjVIfPCSwosAoAEGqUYvBYAOOLzylSV56exCZ5ugAOhyPG91CFZRAXamQD/5quu6q1dYKBRs21leAPRWmXdbvBAATdNc0pPVC5QkyZKvCCHmVpiVsoIAmLkbnZrpAk2oAGiTcy6AtftjLdwvZswDkEqliKqqJJfL+arDtQRBFnWEkGtXt0hV2M8C5knj0MvitOl5RV269JVOp33Tk67rrjKZ07rora8XpLUBoLX3vAqO3xNnaYB0Os0soc+sShAE0mq1Fq4CrawxQkffRRqVLA3g90Rp/UA2oT1OB0OeG1NV1dZbmFfwcBZklm2IrrQ3SLvCTAP0ej1mXNA0zaUZcrnc3Ny9qjZYaN1hWhg5mxiiKNrSFe3nQdwGIWSzllX4fSjtcYwxs1nqdeTz+blPXlVVWx9gmS4wWddLUtPpFB4fH+H5+Rne399hNBrB1tYWHB0dwfHxMdTrdVuNQBRFODs7g729PTg4OIDRaAT9fh86nQ68vr5a8xRFgfPz8//fe4LLWoogCCt7H2it7wkGySB+ILLZ7EJvj2zEe4K8YzgcwnA4tCpK+/v7fFWdJcZGAIjeFo8ARAAiABGACEAEIAIQAfiB8R/yJaxaNgYgiwAAAABJRU5ErkJggg==",
25
- "anthropic.com": "data:image/png;base64,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",
26
- };
@@ -1,3 +0,0 @@
1
- export { editableInputType, useEditableField, } from "../recordpage/editable-field.js";
2
- export { defaultColumns, defaultRows, RecordsTable, tagTone, } from "./recordstable.js";
3
- export { recordstableRecipe } from "./recordstable.recipe.js";