hs-uix 1.4.1 → 1.5.1
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/README.md +20 -2
- package/common-components.d.ts +55 -0
- package/dist/common-components.js +260 -0
- package/dist/common-components.mjs +221 -0
- package/dist/datatable.js +36 -11
- package/dist/datatable.mjs +38 -12
- package/dist/index.js +244 -11
- package/dist/index.mjs +244 -15
- package/dist/utils.js +269 -0
- package/dist/utils.mjs +230 -0
- package/index.d.ts +21 -0
- package/package.json +16 -2
- package/utils.d.ts +59 -0
package/dist/datatable.mjs
CHANGED
|
@@ -30,7 +30,8 @@ import {
|
|
|
30
30
|
Text,
|
|
31
31
|
TextArea,
|
|
32
32
|
TimeInput,
|
|
33
|
-
Toggle
|
|
33
|
+
Toggle,
|
|
34
|
+
Tooltip
|
|
34
35
|
} from "@hubspot/ui-extensions";
|
|
35
36
|
var formatDateChip = (dateObj) => {
|
|
36
37
|
if (!dateObj) return "";
|
|
@@ -304,7 +305,9 @@ var DataTable = ({
|
|
|
304
305
|
const initialSortState = useMemo(() => {
|
|
305
306
|
return normalizeSortState(columns, defaultSort);
|
|
306
307
|
}, [columns, defaultSort]);
|
|
307
|
-
const [internalSearchTerm, setInternalSearchTerm] = useState(
|
|
308
|
+
const [internalSearchTerm, setInternalSearchTerm] = useState(
|
|
309
|
+
() => serverSide && searchValue != null ? searchValue : ""
|
|
310
|
+
);
|
|
308
311
|
const [internalFilterValues, setInternalFilterValues] = useState(() => {
|
|
309
312
|
const init = {};
|
|
310
313
|
filters.forEach((f) => {
|
|
@@ -315,7 +318,16 @@ var DataTable = ({
|
|
|
315
318
|
const [internalSortState, setInternalSortState] = useState(initialSortState);
|
|
316
319
|
const [currentPage, setCurrentPage] = useState(1);
|
|
317
320
|
const [showMoreFilters, setShowMoreFilters] = useState(false);
|
|
321
|
+
const lastAppliedSearchRef = useRef(
|
|
322
|
+
serverSide && searchValue != null ? searchValue : ""
|
|
323
|
+
);
|
|
318
324
|
const searchTerm = serverSide && searchValue != null ? searchValue : internalSearchTerm;
|
|
325
|
+
useEffect(() => {
|
|
326
|
+
if (!serverSide || searchValue == null) return;
|
|
327
|
+
if (searchValue === lastAppliedSearchRef.current) return;
|
|
328
|
+
lastAppliedSearchRef.current = searchValue;
|
|
329
|
+
setInternalSearchTerm(searchValue);
|
|
330
|
+
}, [serverSide, searchValue]);
|
|
319
331
|
const filterValues = serverSide && externalFilterValues != null ? externalFilterValues : internalFilterValues;
|
|
320
332
|
const externalSortState = useMemo(
|
|
321
333
|
() => normalizeSortState(columns, externalSort),
|
|
@@ -349,15 +361,16 @@ var DataTable = ({
|
|
|
349
361
|
const handleSearchChange = useCallback((term) => {
|
|
350
362
|
setInternalSearchTerm(term);
|
|
351
363
|
resetPage();
|
|
364
|
+
const dispatch = () => {
|
|
365
|
+
lastAppliedSearchRef.current = term;
|
|
366
|
+
fireSearchCallback(term);
|
|
367
|
+
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
368
|
+
};
|
|
352
369
|
if (searchDebounce > 0) {
|
|
353
370
|
if (debounceRef.current) clearTimeout(debounceRef.current);
|
|
354
|
-
debounceRef.current = setTimeout(
|
|
355
|
-
fireSearchCallback(term);
|
|
356
|
-
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
357
|
-
}, searchDebounce);
|
|
371
|
+
debounceRef.current = setTimeout(dispatch, searchDebounce);
|
|
358
372
|
} else {
|
|
359
|
-
|
|
360
|
-
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
373
|
+
dispatch();
|
|
361
374
|
}
|
|
362
375
|
}, [searchDebounce, fireSearchCallback, fireParamsChange, resetPage, resetPageOnChange]);
|
|
363
376
|
useEffect(() => () => {
|
|
@@ -439,10 +452,23 @@ var DataTable = ({
|
|
|
439
452
|
if (serverSide) return filteredData;
|
|
440
453
|
const activeField = Object.keys(sortState).find((k) => sortState[k] !== "none");
|
|
441
454
|
if (!activeField) return filteredData;
|
|
455
|
+
const activeCol = columns.find((c) => c.field === activeField);
|
|
456
|
+
const sortOrder = Array.isArray(activeCol == null ? void 0 : activeCol.sortOrder) ? activeCol.sortOrder : null;
|
|
457
|
+
const sortOrderIndex = (val) => {
|
|
458
|
+
const idx = sortOrder.indexOf(val);
|
|
459
|
+
return idx === -1 ? sortOrder.length : idx;
|
|
460
|
+
};
|
|
442
461
|
return [...filteredData].sort((a, b) => {
|
|
443
462
|
const dir = sortState[activeField] === "ascending" ? 1 : -1;
|
|
444
463
|
const aVal = a[activeField];
|
|
445
464
|
const bVal = b[activeField];
|
|
465
|
+
if (typeof (activeCol == null ? void 0 : activeCol.sortComparator) === "function") {
|
|
466
|
+
return dir * activeCol.sortComparator(aVal, bVal, a, b);
|
|
467
|
+
}
|
|
468
|
+
if (sortOrder) {
|
|
469
|
+
const diff = sortOrderIndex(aVal) - sortOrderIndex(bVal);
|
|
470
|
+
if (diff !== 0) return dir * diff;
|
|
471
|
+
}
|
|
446
472
|
if (aVal == null && bVal == null) return 0;
|
|
447
473
|
if (aVal == null) return 1;
|
|
448
474
|
if (bVal == null) return -1;
|
|
@@ -450,7 +476,7 @@ var DataTable = ({
|
|
|
450
476
|
if (aVal > bVal) return dir;
|
|
451
477
|
return 0;
|
|
452
478
|
});
|
|
453
|
-
}, [filteredData, sortState, serverSide]);
|
|
479
|
+
}, [filteredData, sortState, serverSide, columns]);
|
|
454
480
|
const groupedData = useMemo(() => {
|
|
455
481
|
if (!groupBy) return null;
|
|
456
482
|
const source = serverSide ? data : sortedData;
|
|
@@ -979,7 +1005,7 @@ var DataTable = ({
|
|
|
979
1005
|
{
|
|
980
1006
|
name: "datatable-search",
|
|
981
1007
|
placeholder: searchPlaceholder,
|
|
982
|
-
value:
|
|
1008
|
+
value: internalSearchTerm,
|
|
983
1009
|
onChange: handleSearchChange
|
|
984
1010
|
}
|
|
985
1011
|
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */ React.createElement(
|
|
@@ -992,7 +1018,7 @@ var DataTable = ({
|
|
|
992
1018
|
/* @__PURE__ */ React.createElement(Icon, { name: "filter", size: "sm" }),
|
|
993
1019
|
" ",
|
|
994
1020
|
resolvedFiltersButtonLabel
|
|
995
|
-
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "
|
|
1021
|
+
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, filters.slice(filterInlineLimit).map(renderFilterControl)), activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) && /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showFilterBadges && activeChips.map((chip) => /* @__PURE__ */ React.createElement(Tag, { key: chip.key, variant: "default", onDelete: () => handleFilterRemove(chip.key) }, chip.label)), showClearFiltersButton && /* @__PURE__ */ React.createElement(
|
|
996
1022
|
Button,
|
|
997
1023
|
{
|
|
998
1024
|
variant: "transparent",
|
|
@@ -1056,7 +1082,7 @@ var DataTable = ({
|
|
|
1056
1082
|
sortDirection: col.sortable ? sortState[col.field] || "none" : "never",
|
|
1057
1083
|
onSortChange: col.sortable ? () => handleSortChange(col.field) : void 0
|
|
1058
1084
|
},
|
|
1059
|
-
col.label
|
|
1085
|
+
col.description ? /* @__PURE__ */ React.createElement(React.Fragment, null, col.label, "\xA0", /* @__PURE__ */ React.createElement(Link, { inline: true, variant: "dark", overlay: /* @__PURE__ */ React.createElement(Tooltip, null, col.description) }, /* @__PURE__ */ React.createElement(Icon, { name: "info", screenReaderText: typeof col.description === "string" ? col.description : void 0 }))) : col.label
|
|
1060
1086
|
);
|
|
1061
1087
|
}), showRowActionsColumn && /* @__PURE__ */ React.createElement(TableHeader, { width: "min" }))),
|
|
1062
1088
|
/* @__PURE__ */ React.createElement(TableBody, null, displayRows.map(
|
package/dist/index.js
CHANGED
|
@@ -29,8 +29,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/index.js
|
|
30
30
|
var src_exports = {};
|
|
31
31
|
__export(src_exports, {
|
|
32
|
+
AutoStatusTag: () => AutoStatusTag,
|
|
33
|
+
AutoTag: () => AutoTag,
|
|
32
34
|
DataTable: () => DataTable,
|
|
33
35
|
FormBuilder: () => FormBuilder,
|
|
36
|
+
createStatusTagSortComparator: () => createStatusTagSortComparator,
|
|
37
|
+
getAutoStatusTagVariant: () => getAutoStatusTagVariant,
|
|
38
|
+
getAutoTagVariant: () => getAutoTagVariant,
|
|
34
39
|
useFormPrefill: () => useFormPrefill
|
|
35
40
|
});
|
|
36
41
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -311,7 +316,9 @@ var DataTable = ({
|
|
|
311
316
|
const initialSortState = (0, import_react.useMemo)(() => {
|
|
312
317
|
return normalizeSortState(columns, defaultSort);
|
|
313
318
|
}, [columns, defaultSort]);
|
|
314
|
-
const [internalSearchTerm, setInternalSearchTerm] = (0, import_react.useState)(
|
|
319
|
+
const [internalSearchTerm, setInternalSearchTerm] = (0, import_react.useState)(
|
|
320
|
+
() => serverSide && searchValue != null ? searchValue : ""
|
|
321
|
+
);
|
|
315
322
|
const [internalFilterValues, setInternalFilterValues] = (0, import_react.useState)(() => {
|
|
316
323
|
const init = {};
|
|
317
324
|
filters.forEach((f) => {
|
|
@@ -322,7 +329,16 @@ var DataTable = ({
|
|
|
322
329
|
const [internalSortState, setInternalSortState] = (0, import_react.useState)(initialSortState);
|
|
323
330
|
const [currentPage, setCurrentPage] = (0, import_react.useState)(1);
|
|
324
331
|
const [showMoreFilters, setShowMoreFilters] = (0, import_react.useState)(false);
|
|
332
|
+
const lastAppliedSearchRef = (0, import_react.useRef)(
|
|
333
|
+
serverSide && searchValue != null ? searchValue : ""
|
|
334
|
+
);
|
|
325
335
|
const searchTerm = serverSide && searchValue != null ? searchValue : internalSearchTerm;
|
|
336
|
+
(0, import_react.useEffect)(() => {
|
|
337
|
+
if (!serverSide || searchValue == null) return;
|
|
338
|
+
if (searchValue === lastAppliedSearchRef.current) return;
|
|
339
|
+
lastAppliedSearchRef.current = searchValue;
|
|
340
|
+
setInternalSearchTerm(searchValue);
|
|
341
|
+
}, [serverSide, searchValue]);
|
|
326
342
|
const filterValues = serverSide && externalFilterValues != null ? externalFilterValues : internalFilterValues;
|
|
327
343
|
const externalSortState = (0, import_react.useMemo)(
|
|
328
344
|
() => normalizeSortState(columns, externalSort),
|
|
@@ -356,15 +372,16 @@ var DataTable = ({
|
|
|
356
372
|
const handleSearchChange = (0, import_react.useCallback)((term) => {
|
|
357
373
|
setInternalSearchTerm(term);
|
|
358
374
|
resetPage();
|
|
375
|
+
const dispatch = () => {
|
|
376
|
+
lastAppliedSearchRef.current = term;
|
|
377
|
+
fireSearchCallback(term);
|
|
378
|
+
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
379
|
+
};
|
|
359
380
|
if (searchDebounce > 0) {
|
|
360
381
|
if (debounceRef.current) clearTimeout(debounceRef.current);
|
|
361
|
-
debounceRef.current = setTimeout(
|
|
362
|
-
fireSearchCallback(term);
|
|
363
|
-
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
364
|
-
}, searchDebounce);
|
|
382
|
+
debounceRef.current = setTimeout(dispatch, searchDebounce);
|
|
365
383
|
} else {
|
|
366
|
-
|
|
367
|
-
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
384
|
+
dispatch();
|
|
368
385
|
}
|
|
369
386
|
}, [searchDebounce, fireSearchCallback, fireParamsChange, resetPage, resetPageOnChange]);
|
|
370
387
|
(0, import_react.useEffect)(() => () => {
|
|
@@ -446,10 +463,23 @@ var DataTable = ({
|
|
|
446
463
|
if (serverSide) return filteredData;
|
|
447
464
|
const activeField = Object.keys(sortState).find((k) => sortState[k] !== "none");
|
|
448
465
|
if (!activeField) return filteredData;
|
|
466
|
+
const activeCol = columns.find((c) => c.field === activeField);
|
|
467
|
+
const sortOrder = Array.isArray(activeCol == null ? void 0 : activeCol.sortOrder) ? activeCol.sortOrder : null;
|
|
468
|
+
const sortOrderIndex = (val) => {
|
|
469
|
+
const idx = sortOrder.indexOf(val);
|
|
470
|
+
return idx === -1 ? sortOrder.length : idx;
|
|
471
|
+
};
|
|
449
472
|
return [...filteredData].sort((a, b) => {
|
|
450
473
|
const dir = sortState[activeField] === "ascending" ? 1 : -1;
|
|
451
474
|
const aVal = a[activeField];
|
|
452
475
|
const bVal = b[activeField];
|
|
476
|
+
if (typeof (activeCol == null ? void 0 : activeCol.sortComparator) === "function") {
|
|
477
|
+
return dir * activeCol.sortComparator(aVal, bVal, a, b);
|
|
478
|
+
}
|
|
479
|
+
if (sortOrder) {
|
|
480
|
+
const diff = sortOrderIndex(aVal) - sortOrderIndex(bVal);
|
|
481
|
+
if (diff !== 0) return dir * diff;
|
|
482
|
+
}
|
|
453
483
|
if (aVal == null && bVal == null) return 0;
|
|
454
484
|
if (aVal == null) return 1;
|
|
455
485
|
if (bVal == null) return -1;
|
|
@@ -457,7 +487,7 @@ var DataTable = ({
|
|
|
457
487
|
if (aVal > bVal) return dir;
|
|
458
488
|
return 0;
|
|
459
489
|
});
|
|
460
|
-
}, [filteredData, sortState, serverSide]);
|
|
490
|
+
}, [filteredData, sortState, serverSide, columns]);
|
|
461
491
|
const groupedData = (0, import_react.useMemo)(() => {
|
|
462
492
|
if (!groupBy) return null;
|
|
463
493
|
const source = serverSide ? data : sortedData;
|
|
@@ -986,7 +1016,7 @@ var DataTable = ({
|
|
|
986
1016
|
{
|
|
987
1017
|
name: "datatable-search",
|
|
988
1018
|
placeholder: searchPlaceholder,
|
|
989
|
-
value:
|
|
1019
|
+
value: internalSearchTerm,
|
|
990
1020
|
onChange: handleSearchChange
|
|
991
1021
|
}
|
|
992
1022
|
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */ import_react.default.createElement(
|
|
@@ -999,7 +1029,7 @@ var DataTable = ({
|
|
|
999
1029
|
/* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Icon, { name: "filter", size: "sm" }),
|
|
1000
1030
|
" ",
|
|
1001
1031
|
resolvedFiltersButtonLabel
|
|
1002
|
-
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "
|
|
1032
|
+
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, filters.slice(filterInlineLimit).map(renderFilterControl)), activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showFilterBadges && activeChips.map((chip) => /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Tag, { key: chip.key, variant: "default", onDelete: () => handleFilterRemove(chip.key) }, chip.label)), showClearFiltersButton && /* @__PURE__ */ import_react.default.createElement(
|
|
1003
1033
|
import_ui_extensions.Button,
|
|
1004
1034
|
{
|
|
1005
1035
|
variant: "transparent",
|
|
@@ -1063,7 +1093,7 @@ var DataTable = ({
|
|
|
1063
1093
|
sortDirection: col.sortable ? sortState[col.field] || "none" : "never",
|
|
1064
1094
|
onSortChange: col.sortable ? () => handleSortChange(col.field) : void 0
|
|
1065
1095
|
},
|
|
1066
|
-
col.label
|
|
1096
|
+
col.description ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, col.label, "\xA0", /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Link, { inline: true, variant: "dark", overlay: /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Tooltip, null, col.description) }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Icon, { name: "info", screenReaderText: typeof col.description === "string" ? col.description : void 0 }))) : col.label
|
|
1067
1097
|
);
|
|
1068
1098
|
}), showRowActionsColumn && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.TableHeader, { width: "min" }))),
|
|
1069
1099
|
/* @__PURE__ */ import_react.default.createElement(import_ui_extensions.TableBody, null, displayRows.map(
|
|
@@ -3449,9 +3479,212 @@ var FormBuilder = (0, import_react2.forwardRef)(function FormBuilder2(props, ref
|
|
|
3449
3479
|
formContent
|
|
3450
3480
|
);
|
|
3451
3481
|
});
|
|
3482
|
+
|
|
3483
|
+
// src/common-components/AutoTag.js
|
|
3484
|
+
var import_react3 = __toESM(require("react"));
|
|
3485
|
+
var import_ui_extensions3 = require("@hubspot/ui-extensions");
|
|
3486
|
+
|
|
3487
|
+
// src/utils/tagVariants.js
|
|
3488
|
+
var DEFAULT_VARIANT = "default";
|
|
3489
|
+
var DANGER_VARIANT = "danger";
|
|
3490
|
+
var ERROR_VARIANT = "error";
|
|
3491
|
+
var SUCCESS_MATCHERS = [
|
|
3492
|
+
"active",
|
|
3493
|
+
"success",
|
|
3494
|
+
"succeeded",
|
|
3495
|
+
"complete",
|
|
3496
|
+
"completed",
|
|
3497
|
+
"approved",
|
|
3498
|
+
"won",
|
|
3499
|
+
"healthy",
|
|
3500
|
+
"enabled",
|
|
3501
|
+
"connected",
|
|
3502
|
+
"paid",
|
|
3503
|
+
"live",
|
|
3504
|
+
"published",
|
|
3505
|
+
"available",
|
|
3506
|
+
"synced",
|
|
3507
|
+
"resolved"
|
|
3508
|
+
];
|
|
3509
|
+
var WARNING_MATCHERS = [
|
|
3510
|
+
"warning",
|
|
3511
|
+
"at risk",
|
|
3512
|
+
"risky",
|
|
3513
|
+
"pending",
|
|
3514
|
+
"paused",
|
|
3515
|
+
"pause",
|
|
3516
|
+
"on hold",
|
|
3517
|
+
"hold",
|
|
3518
|
+
"review",
|
|
3519
|
+
"expiring",
|
|
3520
|
+
"trial",
|
|
3521
|
+
"in progress",
|
|
3522
|
+
"awaiting",
|
|
3523
|
+
"scheduled"
|
|
3524
|
+
];
|
|
3525
|
+
var DANGER_MATCHERS = [
|
|
3526
|
+
"danger",
|
|
3527
|
+
"error",
|
|
3528
|
+
"failed",
|
|
3529
|
+
"failure",
|
|
3530
|
+
"inactive",
|
|
3531
|
+
"disabled",
|
|
3532
|
+
"blocked",
|
|
3533
|
+
"cancelled",
|
|
3534
|
+
"canceled",
|
|
3535
|
+
"rejected",
|
|
3536
|
+
"denied",
|
|
3537
|
+
"churned",
|
|
3538
|
+
"lost",
|
|
3539
|
+
"overdue",
|
|
3540
|
+
"expired",
|
|
3541
|
+
"offline",
|
|
3542
|
+
"deleted",
|
|
3543
|
+
"archived",
|
|
3544
|
+
"unpaid"
|
|
3545
|
+
];
|
|
3546
|
+
var INFO_MATCHERS = [
|
|
3547
|
+
"info",
|
|
3548
|
+
"new",
|
|
3549
|
+
"queued",
|
|
3550
|
+
"processing",
|
|
3551
|
+
"progress",
|
|
3552
|
+
"upcoming",
|
|
3553
|
+
"draft",
|
|
3554
|
+
"open"
|
|
3555
|
+
];
|
|
3556
|
+
var normalizeTagValue = (value) => {
|
|
3557
|
+
if (value == null) return "";
|
|
3558
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
3559
|
+
return String(value).trim().toLowerCase().replace(/[_-]+/g, " ").replace(/\s+/g, " ");
|
|
3560
|
+
};
|
|
3561
|
+
var matchesAny = (value, matchers) => matchers.some((matcher) => {
|
|
3562
|
+
if (value === matcher) return true;
|
|
3563
|
+
return ` ${value} `.includes(` ${matcher} `);
|
|
3564
|
+
});
|
|
3565
|
+
var getSemanticVariant = (value, options = {}) => {
|
|
3566
|
+
const normalized = normalizeTagValue(value);
|
|
3567
|
+
const fallback = options.fallback || DEFAULT_VARIANT;
|
|
3568
|
+
if (!normalized) return fallback;
|
|
3569
|
+
if (options.overrides) {
|
|
3570
|
+
const overrideKey = Object.keys(options.overrides).find(
|
|
3571
|
+
(key) => normalizeTagValue(key) === normalized
|
|
3572
|
+
);
|
|
3573
|
+
if (overrideKey) return options.overrides[overrideKey];
|
|
3574
|
+
}
|
|
3575
|
+
if (normalized === "true") return "success";
|
|
3576
|
+
if (normalized === "false") return fallback;
|
|
3577
|
+
if (matchesAny(normalized, SUCCESS_MATCHERS)) return "success";
|
|
3578
|
+
if (matchesAny(normalized, DANGER_MATCHERS)) return DANGER_VARIANT;
|
|
3579
|
+
if (matchesAny(normalized, WARNING_MATCHERS)) return "warning";
|
|
3580
|
+
if (matchesAny(normalized, INFO_MATCHERS)) return "info";
|
|
3581
|
+
return fallback;
|
|
3582
|
+
};
|
|
3583
|
+
var getAutoTagVariant = (value, options = {}) => {
|
|
3584
|
+
const semanticVariant = getSemanticVariant(value, options);
|
|
3585
|
+
return semanticVariant === DANGER_VARIANT ? ERROR_VARIANT : semanticVariant;
|
|
3586
|
+
};
|
|
3587
|
+
var getAutoStatusTagVariant = (value, options = {}) => getSemanticVariant(value, options);
|
|
3588
|
+
var getAutoTagDisplayValue = (value) => {
|
|
3589
|
+
if (typeof value === "boolean") return value ? "True" : "False";
|
|
3590
|
+
return value;
|
|
3591
|
+
};
|
|
3592
|
+
var DEFAULT_STATUS_TAG_COLOR_ORDER = [
|
|
3593
|
+
"success",
|
|
3594
|
+
"warning",
|
|
3595
|
+
"danger",
|
|
3596
|
+
"error",
|
|
3597
|
+
"info",
|
|
3598
|
+
"default"
|
|
3599
|
+
];
|
|
3600
|
+
var createStatusTagSortComparator = (options = {}) => {
|
|
3601
|
+
const {
|
|
3602
|
+
variantOrder = DEFAULT_STATUS_TAG_COLOR_ORDER,
|
|
3603
|
+
overrides,
|
|
3604
|
+
fallback,
|
|
3605
|
+
getLabel
|
|
3606
|
+
} = options;
|
|
3607
|
+
const variantIndex = (variant) => {
|
|
3608
|
+
const idx = variantOrder.indexOf(variant);
|
|
3609
|
+
return idx === -1 ? variantOrder.length : idx;
|
|
3610
|
+
};
|
|
3611
|
+
const labelOf = (value) => {
|
|
3612
|
+
if (getLabel) return String(getLabel(value) ?? "");
|
|
3613
|
+
if (value == null) return "";
|
|
3614
|
+
return String(getAutoTagDisplayValue(value) ?? "");
|
|
3615
|
+
};
|
|
3616
|
+
return (aVal, bVal) => {
|
|
3617
|
+
const aVariant = getSemanticVariant(aVal, { overrides, fallback });
|
|
3618
|
+
const bVariant = getSemanticVariant(bVal, { overrides, fallback });
|
|
3619
|
+
const diff = variantIndex(aVariant) - variantIndex(bVariant);
|
|
3620
|
+
if (diff !== 0) return diff;
|
|
3621
|
+
return labelOf(aVal).localeCompare(labelOf(bVal));
|
|
3622
|
+
};
|
|
3623
|
+
};
|
|
3624
|
+
|
|
3625
|
+
// src/common-components/AutoTag.js
|
|
3626
|
+
var AutoTag = ({
|
|
3627
|
+
value,
|
|
3628
|
+
tag,
|
|
3629
|
+
children,
|
|
3630
|
+
variant,
|
|
3631
|
+
overrides,
|
|
3632
|
+
fallback,
|
|
3633
|
+
...props
|
|
3634
|
+
}) => {
|
|
3635
|
+
const resolvedValue = value ?? tag ?? children;
|
|
3636
|
+
const displayValue = children ?? getAutoTagDisplayValue(resolvedValue);
|
|
3637
|
+
const resolvedVariant = variant || getAutoTagVariant(resolvedValue, {
|
|
3638
|
+
overrides,
|
|
3639
|
+
fallback
|
|
3640
|
+
});
|
|
3641
|
+
return import_react3.default.createElement(
|
|
3642
|
+
import_ui_extensions3.Tag,
|
|
3643
|
+
{ variant: resolvedVariant, ...props },
|
|
3644
|
+
displayValue
|
|
3645
|
+
);
|
|
3646
|
+
};
|
|
3647
|
+
|
|
3648
|
+
// src/common-components/AutoStatusTag.js
|
|
3649
|
+
var import_react4 = __toESM(require("react"));
|
|
3650
|
+
var import_ui_extensions4 = require("@hubspot/ui-extensions");
|
|
3651
|
+
var AutoStatusTag = ({
|
|
3652
|
+
value,
|
|
3653
|
+
status,
|
|
3654
|
+
children,
|
|
3655
|
+
variant,
|
|
3656
|
+
overrides,
|
|
3657
|
+
fallback,
|
|
3658
|
+
...props
|
|
3659
|
+
}) => {
|
|
3660
|
+
const resolvedValue = value ?? status ?? children;
|
|
3661
|
+
const displayValue = children ?? getAutoTagDisplayValue(resolvedValue);
|
|
3662
|
+
const resolvedVariant = variant || getAutoStatusTagVariant(resolvedValue, {
|
|
3663
|
+
overrides,
|
|
3664
|
+
fallback
|
|
3665
|
+
});
|
|
3666
|
+
return import_react4.default.createElement(
|
|
3667
|
+
import_ui_extensions4.StatusTag,
|
|
3668
|
+
{ variant: resolvedVariant, ...props },
|
|
3669
|
+
displayValue
|
|
3670
|
+
);
|
|
3671
|
+
};
|
|
3672
|
+
|
|
3673
|
+
// src/common-components/KeyValueList.js
|
|
3674
|
+
var import_react5 = __toESM(require("react"));
|
|
3675
|
+
var import_ui_extensions5 = require("@hubspot/ui-extensions");
|
|
3676
|
+
|
|
3677
|
+
// src/common-components/SectionHeader.js
|
|
3678
|
+
var import_react6 = __toESM(require("react"));
|
|
3679
|
+
var import_ui_extensions6 = require("@hubspot/ui-extensions");
|
|
3452
3680
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3453
3681
|
0 && (module.exports = {
|
|
3682
|
+
AutoStatusTag,
|
|
3683
|
+
AutoTag,
|
|
3454
3684
|
DataTable,
|
|
3455
3685
|
FormBuilder,
|
|
3686
|
+
createStatusTagSortComparator,
|
|
3687
|
+
getAutoStatusTagVariant,
|
|
3688
|
+
getAutoTagVariant,
|
|
3456
3689
|
useFormPrefill
|
|
3457
3690
|
});
|