hs-uix 1.6.2 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -71,6 +71,7 @@ var SUCCESS_MATCHERS = [
71
71
  "complete",
72
72
  "completed",
73
73
  "approved",
74
+ "accepted",
74
75
  "won",
75
76
  "healthy",
76
77
  "enabled",
@@ -80,23 +81,46 @@ var SUCCESS_MATCHERS = [
80
81
  "published",
81
82
  "available",
82
83
  "synced",
83
- "resolved"
84
+ "resolved",
85
+ "replied",
86
+ "responded",
87
+ "confirmed",
88
+ "verified",
89
+ "validated",
90
+ "deployed",
91
+ "running",
92
+ "restored",
93
+ "recovered",
94
+ "cleared"
84
95
  ];
85
96
  var WARNING_MATCHERS = [
86
97
  "warning",
87
98
  "at risk",
88
99
  "risky",
89
100
  "pending",
101
+ "waiting",
90
102
  "paused",
91
103
  "pause",
92
104
  "on hold",
93
105
  "hold",
94
106
  "review",
107
+ "attention",
95
108
  "expiring",
96
109
  "trial",
97
110
  "in progress",
98
111
  "awaiting",
99
- "scheduled"
112
+ "scheduled",
113
+ "negotiation",
114
+ "stalled",
115
+ "stuck",
116
+ "recovering",
117
+ "urgent",
118
+ "escalated",
119
+ "reopened",
120
+ "degraded",
121
+ "retrying",
122
+ "limited",
123
+ "partial"
100
124
  ];
101
125
  var DANGER_MATCHERS = [
102
126
  "danger",
@@ -108,6 +132,9 @@ var DANGER_MATCHERS = [
108
132
  "blocked",
109
133
  "cancelled",
110
134
  "canceled",
135
+ "deactivated",
136
+ "suspended",
137
+ "terminated",
111
138
  "rejected",
112
139
  "denied",
113
140
  "churned",
@@ -115,6 +142,10 @@ var DANGER_MATCHERS = [
115
142
  "overdue",
116
143
  "expired",
117
144
  "offline",
145
+ "disconnected",
146
+ "invalid",
147
+ "unhealthy",
148
+ "unsynced",
118
149
  "deleted",
119
150
  "archived",
120
151
  "unpaid"
@@ -122,12 +153,23 @@ var DANGER_MATCHERS = [
122
153
  var INFO_MATCHERS = [
123
154
  "info",
124
155
  "new",
156
+ "not started",
157
+ "todo",
158
+ "to do",
159
+ "backlog",
160
+ "qualified",
161
+ "proposal",
162
+ "contacted",
163
+ "attempted",
125
164
  "queued",
126
165
  "processing",
127
166
  "progress",
128
167
  "upcoming",
129
168
  "draft",
130
- "open"
169
+ "open",
170
+ "ready",
171
+ "deferred",
172
+ "postponed"
131
173
  ];
132
174
  var normalizeTagValue = (value) => {
133
175
  if (value == null) return "";
@@ -13,6 +13,7 @@ var SUCCESS_MATCHERS = [
13
13
  "complete",
14
14
  "completed",
15
15
  "approved",
16
+ "accepted",
16
17
  "won",
17
18
  "healthy",
18
19
  "enabled",
@@ -22,23 +23,46 @@ var SUCCESS_MATCHERS = [
22
23
  "published",
23
24
  "available",
24
25
  "synced",
25
- "resolved"
26
+ "resolved",
27
+ "replied",
28
+ "responded",
29
+ "confirmed",
30
+ "verified",
31
+ "validated",
32
+ "deployed",
33
+ "running",
34
+ "restored",
35
+ "recovered",
36
+ "cleared"
26
37
  ];
27
38
  var WARNING_MATCHERS = [
28
39
  "warning",
29
40
  "at risk",
30
41
  "risky",
31
42
  "pending",
43
+ "waiting",
32
44
  "paused",
33
45
  "pause",
34
46
  "on hold",
35
47
  "hold",
36
48
  "review",
49
+ "attention",
37
50
  "expiring",
38
51
  "trial",
39
52
  "in progress",
40
53
  "awaiting",
41
- "scheduled"
54
+ "scheduled",
55
+ "negotiation",
56
+ "stalled",
57
+ "stuck",
58
+ "recovering",
59
+ "urgent",
60
+ "escalated",
61
+ "reopened",
62
+ "degraded",
63
+ "retrying",
64
+ "limited",
65
+ "partial"
42
66
  ];
43
67
  var DANGER_MATCHERS = [
44
68
  "danger",
@@ -50,6 +74,9 @@ var DANGER_MATCHERS = [
50
74
  "blocked",
51
75
  "cancelled",
52
76
  "canceled",
77
+ "deactivated",
78
+ "suspended",
79
+ "terminated",
53
80
  "rejected",
54
81
  "denied",
55
82
  "churned",
@@ -57,6 +84,10 @@ var DANGER_MATCHERS = [
57
84
  "overdue",
58
85
  "expired",
59
86
  "offline",
87
+ "disconnected",
88
+ "invalid",
89
+ "unhealthy",
90
+ "unsynced",
60
91
  "deleted",
61
92
  "archived",
62
93
  "unpaid"
@@ -64,12 +95,23 @@ var DANGER_MATCHERS = [
64
95
  var INFO_MATCHERS = [
65
96
  "info",
66
97
  "new",
98
+ "not started",
99
+ "todo",
100
+ "to do",
101
+ "backlog",
102
+ "qualified",
103
+ "proposal",
104
+ "contacted",
105
+ "attempted",
67
106
  "queued",
68
107
  "processing",
69
108
  "progress",
70
109
  "upcoming",
71
110
  "draft",
72
- "open"
111
+ "open",
112
+ "ready",
113
+ "deferred",
114
+ "postponed"
73
115
  ];
74
116
  var normalizeTagValue = (value) => {
75
117
  if (value == null) return "";
package/dist/datatable.js CHANGED
@@ -186,6 +186,8 @@ var DataTable = ({
186
186
  showFirstLastButtons,
187
187
  // show First/Last page buttons (default: auto when pageCount > 5)
188
188
  // Row count
189
+ title,
190
+ // optional title shown above the table toolbar
189
191
  showRowCount = true,
190
192
  // show "X records" / "X of Y records" text
191
193
  rowCountBold = false,
@@ -655,6 +657,9 @@ var DataTable = ({
655
657
  selectionResetRef.current = combinedSelectionResetKey;
656
658
  }, [combinedSelectionResetKey, selectable, externalSelectedIds]);
657
659
  const selectedIds = externalSelectedIds != null ? new Set(externalSelectedIds) : internalSelectedIds;
660
+ const showToolbarCount = showRowCount && !title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
661
+ const showTitleCount = showRowCount && !!title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
662
+ const hasToolbarContent = showSearch && searchFields.length > 0 || filters.length > 0 || activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) || showToolbarCount;
658
663
  const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
659
664
  const applySelection = (0, import_react.useCallback)((nextSet) => {
660
665
  if (externalSelectedIds == null) {
@@ -1004,7 +1009,7 @@ var DataTable = ({
1004
1009
  }
1005
1010
  );
1006
1011
  };
1007
- return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "xs" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 3 }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ import_react.default.createElement(
1012
+ return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "xs" }, title && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", justify: "between", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Heading, null, title), showTitleCount && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)), hasToolbarContent && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 3 }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ import_react.default.createElement(
1008
1013
  import_ui_extensions.SearchInput,
1009
1014
  {
1010
1015
  name: "datatable-search",
@@ -1030,7 +1035,7 @@ var DataTable = ({
1030
1035
  onClick: () => handleFilterRemove("all")
1031
1036
  },
1032
1037
  resolvedClearAllLabel
1033
- )))), showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0) && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1038
+ )))), showToolbarCount && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1034
1039
  selectedIds,
1035
1040
  selectedCount: selectedIds.size,
1036
1041
  displayCount,
@@ -10,6 +10,7 @@ import {
10
10
  EmptyState,
11
11
  ErrorState,
12
12
  Flex,
13
+ Heading,
13
14
  Icon,
14
15
  Input,
15
16
  Link,
@@ -182,6 +183,8 @@ var DataTable = ({
182
183
  showFirstLastButtons,
183
184
  // show First/Last page buttons (default: auto when pageCount > 5)
184
185
  // Row count
186
+ title,
187
+ // optional title shown above the table toolbar
185
188
  showRowCount = true,
186
189
  // show "X records" / "X of Y records" text
187
190
  rowCountBold = false,
@@ -651,6 +654,9 @@ var DataTable = ({
651
654
  selectionResetRef.current = combinedSelectionResetKey;
652
655
  }, [combinedSelectionResetKey, selectable, externalSelectedIds]);
653
656
  const selectedIds = externalSelectedIds != null ? new Set(externalSelectedIds) : internalSelectedIds;
657
+ const showToolbarCount = showRowCount && !title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
658
+ const showTitleCount = showRowCount && !!title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
659
+ const hasToolbarContent = showSearch && searchFields.length > 0 || filters.length > 0 || activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) || showToolbarCount;
654
660
  const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
655
661
  const applySelection = useCallback((nextSet) => {
656
662
  if (externalSelectedIds == null) {
@@ -1000,7 +1006,7 @@ var DataTable = ({
1000
1006
  }
1001
1007
  );
1002
1008
  };
1003
- return /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "xs" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ React.createElement(Box, { flex: 3 }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ React.createElement(
1009
+ return /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "xs" }, title && /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", justify: "between", gap: "sm" }, /* @__PURE__ */ React.createElement(Heading, null, title), showTitleCount && /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)), hasToolbarContent && /* @__PURE__ */ React.createElement(Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ React.createElement(Box, { flex: 3 }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ React.createElement(
1004
1010
  SearchInput,
1005
1011
  {
1006
1012
  name: "datatable-search",
@@ -1026,7 +1032,7 @@ var DataTable = ({
1026
1032
  onClick: () => handleFilterRemove("all")
1027
1033
  },
1028
1034
  resolvedClearAllLabel
1029
- )))), showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0) && /* @__PURE__ */ React.createElement(Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1035
+ )))), showToolbarCount && /* @__PURE__ */ React.createElement(Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1030
1036
  selectedIds,
1031
1037
  selectedCount: selectedIds.size,
1032
1038
  displayCount,
package/dist/form.js CHANGED
@@ -404,6 +404,8 @@ var FormBuilder = (0, import_react.forwardRef)(function FormBuilder2(props, ref)
404
404
  // () => void
405
405
  submitPosition = "bottom",
406
406
  // "bottom" | "none"
407
+ submitAlign,
408
+ // default single-step action row alignment
407
409
  loading: controlledLoading,
408
410
  // controlled loading state
409
411
  disabled = false,
@@ -708,6 +710,10 @@ var FormBuilder = (0, import_react.forwardRef)(function FormBuilder2(props, ref)
708
710
  console.warn(`[FormBuilder] ${message}`);
709
711
  }
710
712
  }, [isDev]);
713
+ (0, import_react.useEffect)(() => {
714
+ if (!isMultiStep || !submitAlign) return;
715
+ warnConfig("submitAlign is ignored when steps are provided. Use renderButtons for custom multi-step button layout.");
716
+ }, [isMultiStep, submitAlign, warnConfig]);
711
717
  const replaceErrors = (0, import_react.useCallback)(
712
718
  (nextErrors) => {
713
719
  if (controlledErrors == null) setInternalErrors(nextErrors);
@@ -2310,6 +2316,7 @@ var FormBuilder = (0, import_react.forwardRef)(function FormBuilder2(props, ref)
2310
2316
  if (submitPosition === "none" || formReadOnly) return null;
2311
2317
  const isLastStep = !isMultiStep || currentStep === steps.length - 1;
2312
2318
  const isFirstStep = !isMultiStep || currentStep === 0;
2319
+ const singleStepJustify = submitAlign || (showCancel ? "between" : "start");
2313
2320
  const buttonContext = {
2314
2321
  isMultiStep,
2315
2322
  isFirstStep,
@@ -2344,7 +2351,7 @@ var FormBuilder = (0, import_react.forwardRef)(function FormBuilder2(props, ref)
2344
2351
  submitButtonLabel
2345
2352
  ) : /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Button, { variant: "primary", onClick: handleNext, disabled }, nextButtonLabel)));
2346
2353
  }
2347
- return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: showCancel ? "between" : "start", gap: "sm" }, showCancel && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ import_react.default.createElement(
2354
+ return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: singleStepJustify, gap: "sm" }, showCancel && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ import_react.default.createElement(
2348
2355
  import_ui_extensions.LoadingButton,
2349
2356
  {
2350
2357
  variant: submitVariant,
package/dist/form.mjs CHANGED
@@ -408,6 +408,8 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
408
408
  // () => void
409
409
  submitPosition = "bottom",
410
410
  // "bottom" | "none"
411
+ submitAlign,
412
+ // default single-step action row alignment
411
413
  loading: controlledLoading,
412
414
  // controlled loading state
413
415
  disabled = false,
@@ -712,6 +714,10 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
712
714
  console.warn(`[FormBuilder] ${message}`);
713
715
  }
714
716
  }, [isDev]);
717
+ useEffect(() => {
718
+ if (!isMultiStep || !submitAlign) return;
719
+ warnConfig("submitAlign is ignored when steps are provided. Use renderButtons for custom multi-step button layout.");
720
+ }, [isMultiStep, submitAlign, warnConfig]);
715
721
  const replaceErrors = useCallback(
716
722
  (nextErrors) => {
717
723
  if (controlledErrors == null) setInternalErrors(nextErrors);
@@ -2314,6 +2320,7 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
2314
2320
  if (submitPosition === "none" || formReadOnly) return null;
2315
2321
  const isLastStep = !isMultiStep || currentStep === steps.length - 1;
2316
2322
  const isFirstStep = !isMultiStep || currentStep === 0;
2323
+ const singleStepJustify = submitAlign || (showCancel ? "between" : "start");
2317
2324
  const buttonContext = {
2318
2325
  isMultiStep,
2319
2326
  isFirstStep,
@@ -2348,7 +2355,7 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
2348
2355
  submitButtonLabel
2349
2356
  ) : /* @__PURE__ */ React.createElement(Button, { variant: "primary", onClick: handleNext, disabled }, nextButtonLabel)));
2350
2357
  }
2351
- return /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: showCancel ? "between" : "start", gap: "sm" }, showCancel && /* @__PURE__ */ React.createElement(Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ React.createElement(
2358
+ return /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: singleStepJustify, gap: "sm" }, showCancel && /* @__PURE__ */ React.createElement(Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ React.createElement(
2352
2359
  LoadingButton,
2353
2360
  {
2354
2361
  variant: submitVariant,
package/dist/index.js CHANGED
@@ -217,6 +217,8 @@ var DataTable = ({
217
217
  showFirstLastButtons,
218
218
  // show First/Last page buttons (default: auto when pageCount > 5)
219
219
  // Row count
220
+ title,
221
+ // optional title shown above the table toolbar
220
222
  showRowCount = true,
221
223
  // show "X records" / "X of Y records" text
222
224
  rowCountBold = false,
@@ -686,6 +688,9 @@ var DataTable = ({
686
688
  selectionResetRef.current = combinedSelectionResetKey;
687
689
  }, [combinedSelectionResetKey, selectable, externalSelectedIds]);
688
690
  const selectedIds = externalSelectedIds != null ? new Set(externalSelectedIds) : internalSelectedIds;
691
+ const showToolbarCount = showRowCount && !title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
692
+ const showTitleCount = showRowCount && !!title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
693
+ const hasToolbarContent = showSearch && searchFields.length > 0 || filters.length > 0 || activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) || showToolbarCount;
689
694
  const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
690
695
  const applySelection = (0, import_react.useCallback)((nextSet) => {
691
696
  if (externalSelectedIds == null) {
@@ -1035,7 +1040,7 @@ var DataTable = ({
1035
1040
  }
1036
1041
  );
1037
1042
  };
1038
- return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "xs" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 3 }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ import_react.default.createElement(
1043
+ return /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "xs" }, title && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", justify: "between", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Heading, null, title), showTitleCount && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)), hasToolbarContent && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 3 }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ import_react.default.createElement(
1039
1044
  import_ui_extensions.SearchInput,
1040
1045
  {
1041
1046
  name: "datatable-search",
@@ -1061,7 +1066,7 @@ var DataTable = ({
1061
1066
  onClick: () => handleFilterRemove("all")
1062
1067
  },
1063
1068
  resolvedClearAllLabel
1064
- )))), showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0) && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1069
+ )))), showToolbarCount && /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react.default.createElement(import_ui_extensions.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1065
1070
  selectedIds,
1066
1071
  selectedCount: selectedIds.size,
1067
1072
  displayCount,
@@ -1540,6 +1545,8 @@ var FormBuilder = (0, import_react2.forwardRef)(function FormBuilder2(props, ref
1540
1545
  // () => void
1541
1546
  submitPosition = "bottom",
1542
1547
  // "bottom" | "none"
1548
+ submitAlign,
1549
+ // default single-step action row alignment
1543
1550
  loading: controlledLoading,
1544
1551
  // controlled loading state
1545
1552
  disabled = false,
@@ -1844,6 +1851,10 @@ var FormBuilder = (0, import_react2.forwardRef)(function FormBuilder2(props, ref
1844
1851
  console.warn(`[FormBuilder] ${message}`);
1845
1852
  }
1846
1853
  }, [isDev]);
1854
+ (0, import_react2.useEffect)(() => {
1855
+ if (!isMultiStep || !submitAlign) return;
1856
+ warnConfig("submitAlign is ignored when steps are provided. Use renderButtons for custom multi-step button layout.");
1857
+ }, [isMultiStep, submitAlign, warnConfig]);
1847
1858
  const replaceErrors = (0, import_react2.useCallback)(
1848
1859
  (nextErrors) => {
1849
1860
  if (controlledErrors == null) setInternalErrors(nextErrors);
@@ -3446,6 +3457,7 @@ var FormBuilder = (0, import_react2.forwardRef)(function FormBuilder2(props, ref
3446
3457
  if (submitPosition === "none" || formReadOnly) return null;
3447
3458
  const isLastStep = !isMultiStep || currentStep === steps.length - 1;
3448
3459
  const isFirstStep = !isMultiStep || currentStep === 0;
3460
+ const singleStepJustify = submitAlign || (showCancel ? "between" : "start");
3449
3461
  const buttonContext = {
3450
3462
  isMultiStep,
3451
3463
  isFirstStep,
@@ -3480,7 +3492,7 @@ var FormBuilder = (0, import_react2.forwardRef)(function FormBuilder2(props, ref
3480
3492
  submitButtonLabel
3481
3493
  ) : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Button, { variant: "primary", onClick: handleNext, disabled }, nextButtonLabel)));
3482
3494
  }
3483
- return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", justify: showCancel ? "between" : "start", gap: "sm" }, showCancel && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ import_react2.default.createElement(
3495
+ return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", justify: singleStepJustify, gap: "sm" }, showCancel && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Button, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ import_react2.default.createElement(
3484
3496
  import_ui_extensions2.LoadingButton,
3485
3497
  {
3486
3498
  variant: submitVariant,
@@ -4990,6 +5002,7 @@ var SUCCESS_MATCHERS = [
4990
5002
  "complete",
4991
5003
  "completed",
4992
5004
  "approved",
5005
+ "accepted",
4993
5006
  "won",
4994
5007
  "healthy",
4995
5008
  "enabled",
@@ -4999,23 +5012,46 @@ var SUCCESS_MATCHERS = [
4999
5012
  "published",
5000
5013
  "available",
5001
5014
  "synced",
5002
- "resolved"
5015
+ "resolved",
5016
+ "replied",
5017
+ "responded",
5018
+ "confirmed",
5019
+ "verified",
5020
+ "validated",
5021
+ "deployed",
5022
+ "running",
5023
+ "restored",
5024
+ "recovered",
5025
+ "cleared"
5003
5026
  ];
5004
5027
  var WARNING_MATCHERS = [
5005
5028
  "warning",
5006
5029
  "at risk",
5007
5030
  "risky",
5008
5031
  "pending",
5032
+ "waiting",
5009
5033
  "paused",
5010
5034
  "pause",
5011
5035
  "on hold",
5012
5036
  "hold",
5013
5037
  "review",
5038
+ "attention",
5014
5039
  "expiring",
5015
5040
  "trial",
5016
5041
  "in progress",
5017
5042
  "awaiting",
5018
- "scheduled"
5043
+ "scheduled",
5044
+ "negotiation",
5045
+ "stalled",
5046
+ "stuck",
5047
+ "recovering",
5048
+ "urgent",
5049
+ "escalated",
5050
+ "reopened",
5051
+ "degraded",
5052
+ "retrying",
5053
+ "limited",
5054
+ "partial"
5019
5055
  ];
5020
5056
  var DANGER_MATCHERS = [
5021
5057
  "danger",
@@ -5027,6 +5063,9 @@ var DANGER_MATCHERS = [
5027
5063
  "blocked",
5028
5064
  "cancelled",
5029
5065
  "canceled",
5066
+ "deactivated",
5067
+ "suspended",
5068
+ "terminated",
5030
5069
  "rejected",
5031
5070
  "denied",
5032
5071
  "churned",
@@ -5034,6 +5073,10 @@ var DANGER_MATCHERS = [
5034
5073
  "overdue",
5035
5074
  "expired",
5036
5075
  "offline",
5076
+ "disconnected",
5077
+ "invalid",
5078
+ "unhealthy",
5079
+ "unsynced",
5037
5080
  "deleted",
5038
5081
  "archived",
5039
5082
  "unpaid"
@@ -5041,12 +5084,23 @@ var DANGER_MATCHERS = [
5041
5084
  var INFO_MATCHERS = [
5042
5085
  "info",
5043
5086
  "new",
5087
+ "not started",
5088
+ "todo",
5089
+ "to do",
5090
+ "backlog",
5091
+ "qualified",
5092
+ "proposal",
5093
+ "contacted",
5094
+ "attempted",
5044
5095
  "queued",
5045
5096
  "processing",
5046
5097
  "progress",
5047
5098
  "upcoming",
5048
5099
  "draft",
5049
- "open"
5100
+ "open",
5101
+ "ready",
5102
+ "deferred",
5103
+ "postponed"
5050
5104
  ];
5051
5105
  var normalizeTagValue = (value) => {
5052
5106
  if (value == null) return "";
package/dist/index.mjs CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  EmptyState,
11
11
  ErrorState,
12
12
  Flex,
13
+ Heading,
13
14
  Icon,
14
15
  Input,
15
16
  Link,
@@ -182,6 +183,8 @@ var DataTable = ({
182
183
  showFirstLastButtons,
183
184
  // show First/Last page buttons (default: auto when pageCount > 5)
184
185
  // Row count
186
+ title,
187
+ // optional title shown above the table toolbar
185
188
  showRowCount = true,
186
189
  // show "X records" / "X of Y records" text
187
190
  rowCountBold = false,
@@ -651,6 +654,9 @@ var DataTable = ({
651
654
  selectionResetRef.current = combinedSelectionResetKey;
652
655
  }, [combinedSelectionResetKey, selectable, externalSelectedIds]);
653
656
  const selectedIds = externalSelectedIds != null ? new Set(externalSelectedIds) : internalSelectedIds;
657
+ const showToolbarCount = showRowCount && !title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
658
+ const showTitleCount = showRowCount && !!title && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
659
+ const hasToolbarContent = showSearch && searchFields.length > 0 || filters.length > 0 || activeChips.length > 0 && (showFilterBadges || showClearFiltersButton) || showToolbarCount;
654
660
  const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
655
661
  const applySelection = useCallback((nextSet) => {
656
662
  if (externalSelectedIds == null) {
@@ -1000,7 +1006,7 @@ var DataTable = ({
1000
1006
  }
1001
1007
  );
1002
1008
  };
1003
- return /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "xs" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ React.createElement(Box, { flex: 3 }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ React.createElement(
1009
+ return /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "xs" }, title && /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", justify: "between", gap: "sm" }, /* @__PURE__ */ React.createElement(Heading, null, title), showTitleCount && /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)), hasToolbarContent && /* @__PURE__ */ React.createElement(Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ React.createElement(Box, { flex: 3 }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ React.createElement(
1004
1010
  SearchInput,
1005
1011
  {
1006
1012
  name: "datatable-search",
@@ -1026,7 +1032,7 @@ var DataTable = ({
1026
1032
  onClick: () => handleFilterRemove("all")
1027
1033
  },
1028
1034
  resolvedClearAllLabel
1029
- )))), showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0) && /* @__PURE__ */ React.createElement(Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1035
+ )))), showToolbarCount && /* @__PURE__ */ React.createElement(Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ React.createElement(Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ React.createElement(Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
1030
1036
  selectedIds,
1031
1037
  selectedCount: selectedIds.size,
1032
1038
  displayCount,
@@ -1545,6 +1551,8 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
1545
1551
  // () => void
1546
1552
  submitPosition = "bottom",
1547
1553
  // "bottom" | "none"
1554
+ submitAlign,
1555
+ // default single-step action row alignment
1548
1556
  loading: controlledLoading,
1549
1557
  // controlled loading state
1550
1558
  disabled = false,
@@ -1849,6 +1857,10 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
1849
1857
  console.warn(`[FormBuilder] ${message}`);
1850
1858
  }
1851
1859
  }, [isDev]);
1860
+ useEffect2(() => {
1861
+ if (!isMultiStep || !submitAlign) return;
1862
+ warnConfig("submitAlign is ignored when steps are provided. Use renderButtons for custom multi-step button layout.");
1863
+ }, [isMultiStep, submitAlign, warnConfig]);
1852
1864
  const replaceErrors = useCallback2(
1853
1865
  (nextErrors) => {
1854
1866
  if (controlledErrors == null) setInternalErrors(nextErrors);
@@ -3451,6 +3463,7 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
3451
3463
  if (submitPosition === "none" || formReadOnly) return null;
3452
3464
  const isLastStep = !isMultiStep || currentStep === steps.length - 1;
3453
3465
  const isFirstStep = !isMultiStep || currentStep === 0;
3466
+ const singleStepJustify = submitAlign || (showCancel ? "between" : "start");
3454
3467
  const buttonContext = {
3455
3468
  isMultiStep,
3456
3469
  isFirstStep,
@@ -3485,7 +3498,7 @@ var FormBuilder = forwardRef(function FormBuilder2(props, ref) {
3485
3498
  submitButtonLabel
3486
3499
  ) : /* @__PURE__ */ React2.createElement(Button2, { variant: "primary", onClick: handleNext, disabled }, nextButtonLabel)));
3487
3500
  }
3488
- return /* @__PURE__ */ React2.createElement(Flex2, { direction: "row", justify: showCancel ? "between" : "start", gap: "sm" }, showCancel && /* @__PURE__ */ React2.createElement(Button2, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ React2.createElement(
3501
+ return /* @__PURE__ */ React2.createElement(Flex2, { direction: "row", justify: singleStepJustify, gap: "sm" }, showCancel && /* @__PURE__ */ React2.createElement(Button2, { variant: "secondary", onClick: onCancel, disabled }, cancelButtonLabel), /* @__PURE__ */ React2.createElement(
3489
3502
  LoadingButton,
3490
3503
  {
3491
3504
  variant: submitVariant,
@@ -5030,6 +5043,7 @@ var SUCCESS_MATCHERS = [
5030
5043
  "complete",
5031
5044
  "completed",
5032
5045
  "approved",
5046
+ "accepted",
5033
5047
  "won",
5034
5048
  "healthy",
5035
5049
  "enabled",
@@ -5039,23 +5053,46 @@ var SUCCESS_MATCHERS = [
5039
5053
  "published",
5040
5054
  "available",
5041
5055
  "synced",
5042
- "resolved"
5056
+ "resolved",
5057
+ "replied",
5058
+ "responded",
5059
+ "confirmed",
5060
+ "verified",
5061
+ "validated",
5062
+ "deployed",
5063
+ "running",
5064
+ "restored",
5065
+ "recovered",
5066
+ "cleared"
5043
5067
  ];
5044
5068
  var WARNING_MATCHERS = [
5045
5069
  "warning",
5046
5070
  "at risk",
5047
5071
  "risky",
5048
5072
  "pending",
5073
+ "waiting",
5049
5074
  "paused",
5050
5075
  "pause",
5051
5076
  "on hold",
5052
5077
  "hold",
5053
5078
  "review",
5079
+ "attention",
5054
5080
  "expiring",
5055
5081
  "trial",
5056
5082
  "in progress",
5057
5083
  "awaiting",
5058
- "scheduled"
5084
+ "scheduled",
5085
+ "negotiation",
5086
+ "stalled",
5087
+ "stuck",
5088
+ "recovering",
5089
+ "urgent",
5090
+ "escalated",
5091
+ "reopened",
5092
+ "degraded",
5093
+ "retrying",
5094
+ "limited",
5095
+ "partial"
5059
5096
  ];
5060
5097
  var DANGER_MATCHERS = [
5061
5098
  "danger",
@@ -5067,6 +5104,9 @@ var DANGER_MATCHERS = [
5067
5104
  "blocked",
5068
5105
  "cancelled",
5069
5106
  "canceled",
5107
+ "deactivated",
5108
+ "suspended",
5109
+ "terminated",
5070
5110
  "rejected",
5071
5111
  "denied",
5072
5112
  "churned",
@@ -5074,6 +5114,10 @@ var DANGER_MATCHERS = [
5074
5114
  "overdue",
5075
5115
  "expired",
5076
5116
  "offline",
5117
+ "disconnected",
5118
+ "invalid",
5119
+ "unhealthy",
5120
+ "unsynced",
5077
5121
  "deleted",
5078
5122
  "archived",
5079
5123
  "unpaid"
@@ -5081,12 +5125,23 @@ var DANGER_MATCHERS = [
5081
5125
  var INFO_MATCHERS = [
5082
5126
  "info",
5083
5127
  "new",
5128
+ "not started",
5129
+ "todo",
5130
+ "to do",
5131
+ "backlog",
5132
+ "qualified",
5133
+ "proposal",
5134
+ "contacted",
5135
+ "attempted",
5084
5136
  "queued",
5085
5137
  "processing",
5086
5138
  "progress",
5087
5139
  "upcoming",
5088
5140
  "draft",
5089
- "open"
5141
+ "open",
5142
+ "ready",
5143
+ "deferred",
5144
+ "postponed"
5090
5145
  ];
5091
5146
  var normalizeTagValue = (value) => {
5092
5147
  if (value == null) return "";
@@ -5387,7 +5442,7 @@ var KeyValueList = ({ items = [], direction = "row", gap = "sm" }) => {
5387
5442
 
5388
5443
  // src/common-components/SectionHeader.js
5389
5444
  import React10 from "react";
5390
- import { Flex as Flex6, Heading, Text as Text5 } from "@hubspot/ui-extensions";
5445
+ import { Flex as Flex6, Heading as Heading2, Text as Text5 } from "@hubspot/ui-extensions";
5391
5446
  var SectionHeader = ({
5392
5447
  title,
5393
5448
  description,
@@ -5398,7 +5453,7 @@ var SectionHeader = ({
5398
5453
  }) => {
5399
5454
  const body = [];
5400
5455
  if (title != null) {
5401
- body.push(React10.createElement(Heading, { key: "title", as: titleAs }, title));
5456
+ body.push(React10.createElement(Heading2, { key: "title", as: titleAs }, title));
5402
5457
  }
5403
5458
  if (description != null) {
5404
5459
  body.push(
package/dist/utils.js CHANGED
@@ -140,6 +140,7 @@ var SUCCESS_MATCHERS = [
140
140
  "complete",
141
141
  "completed",
142
142
  "approved",
143
+ "accepted",
143
144
  "won",
144
145
  "healthy",
145
146
  "enabled",
@@ -149,23 +150,46 @@ var SUCCESS_MATCHERS = [
149
150
  "published",
150
151
  "available",
151
152
  "synced",
152
- "resolved"
153
+ "resolved",
154
+ "replied",
155
+ "responded",
156
+ "confirmed",
157
+ "verified",
158
+ "validated",
159
+ "deployed",
160
+ "running",
161
+ "restored",
162
+ "recovered",
163
+ "cleared"
153
164
  ];
154
165
  var WARNING_MATCHERS = [
155
166
  "warning",
156
167
  "at risk",
157
168
  "risky",
158
169
  "pending",
170
+ "waiting",
159
171
  "paused",
160
172
  "pause",
161
173
  "on hold",
162
174
  "hold",
163
175
  "review",
176
+ "attention",
164
177
  "expiring",
165
178
  "trial",
166
179
  "in progress",
167
180
  "awaiting",
168
- "scheduled"
181
+ "scheduled",
182
+ "negotiation",
183
+ "stalled",
184
+ "stuck",
185
+ "recovering",
186
+ "urgent",
187
+ "escalated",
188
+ "reopened",
189
+ "degraded",
190
+ "retrying",
191
+ "limited",
192
+ "partial"
169
193
  ];
170
194
  var DANGER_MATCHERS = [
171
195
  "danger",
@@ -177,6 +201,9 @@ var DANGER_MATCHERS = [
177
201
  "blocked",
178
202
  "cancelled",
179
203
  "canceled",
204
+ "deactivated",
205
+ "suspended",
206
+ "terminated",
180
207
  "rejected",
181
208
  "denied",
182
209
  "churned",
@@ -184,6 +211,10 @@ var DANGER_MATCHERS = [
184
211
  "overdue",
185
212
  "expired",
186
213
  "offline",
214
+ "disconnected",
215
+ "invalid",
216
+ "unhealthy",
217
+ "unsynced",
187
218
  "deleted",
188
219
  "archived",
189
220
  "unpaid"
@@ -191,12 +222,23 @@ var DANGER_MATCHERS = [
191
222
  var INFO_MATCHERS = [
192
223
  "info",
193
224
  "new",
225
+ "not started",
226
+ "todo",
227
+ "to do",
228
+ "backlog",
229
+ "qualified",
230
+ "proposal",
231
+ "contacted",
232
+ "attempted",
194
233
  "queued",
195
234
  "processing",
196
235
  "progress",
197
236
  "upcoming",
198
237
  "draft",
199
- "open"
238
+ "open",
239
+ "ready",
240
+ "deferred",
241
+ "postponed"
200
242
  ];
201
243
  var normalizeTagValue = (value) => {
202
244
  if (value == null) return "";
package/dist/utils.mjs CHANGED
@@ -100,6 +100,7 @@ var SUCCESS_MATCHERS = [
100
100
  "complete",
101
101
  "completed",
102
102
  "approved",
103
+ "accepted",
103
104
  "won",
104
105
  "healthy",
105
106
  "enabled",
@@ -109,23 +110,46 @@ var SUCCESS_MATCHERS = [
109
110
  "published",
110
111
  "available",
111
112
  "synced",
112
- "resolved"
113
+ "resolved",
114
+ "replied",
115
+ "responded",
116
+ "confirmed",
117
+ "verified",
118
+ "validated",
119
+ "deployed",
120
+ "running",
121
+ "restored",
122
+ "recovered",
123
+ "cleared"
113
124
  ];
114
125
  var WARNING_MATCHERS = [
115
126
  "warning",
116
127
  "at risk",
117
128
  "risky",
118
129
  "pending",
130
+ "waiting",
119
131
  "paused",
120
132
  "pause",
121
133
  "on hold",
122
134
  "hold",
123
135
  "review",
136
+ "attention",
124
137
  "expiring",
125
138
  "trial",
126
139
  "in progress",
127
140
  "awaiting",
128
- "scheduled"
141
+ "scheduled",
142
+ "negotiation",
143
+ "stalled",
144
+ "stuck",
145
+ "recovering",
146
+ "urgent",
147
+ "escalated",
148
+ "reopened",
149
+ "degraded",
150
+ "retrying",
151
+ "limited",
152
+ "partial"
129
153
  ];
130
154
  var DANGER_MATCHERS = [
131
155
  "danger",
@@ -137,6 +161,9 @@ var DANGER_MATCHERS = [
137
161
  "blocked",
138
162
  "cancelled",
139
163
  "canceled",
164
+ "deactivated",
165
+ "suspended",
166
+ "terminated",
140
167
  "rejected",
141
168
  "denied",
142
169
  "churned",
@@ -144,6 +171,10 @@ var DANGER_MATCHERS = [
144
171
  "overdue",
145
172
  "expired",
146
173
  "offline",
174
+ "disconnected",
175
+ "invalid",
176
+ "unhealthy",
177
+ "unsynced",
147
178
  "deleted",
148
179
  "archived",
149
180
  "unpaid"
@@ -151,12 +182,23 @@ var DANGER_MATCHERS = [
151
182
  var INFO_MATCHERS = [
152
183
  "info",
153
184
  "new",
185
+ "not started",
186
+ "todo",
187
+ "to do",
188
+ "backlog",
189
+ "qualified",
190
+ "proposal",
191
+ "contacted",
192
+ "attempted",
154
193
  "queued",
155
194
  "processing",
156
195
  "progress",
157
196
  "upcoming",
158
197
  "draft",
159
- "open"
198
+ "open",
199
+ "ready",
200
+ "deferred",
201
+ "postponed"
160
202
  ];
161
203
  var normalizeTagValue = (value) => {
162
204
  if (value == null) return "";
package/form.d.ts CHANGED
@@ -17,6 +17,7 @@ export {
17
17
  FormBuilderLabels,
18
18
  FormBuilderAlertConfig,
19
19
  FormBuilderButtonsRenderContext,
20
+ FormBuilderSubmitAlign,
20
21
  FormBuilderLayout,
21
22
  FormBuilderLayoutEntry,
22
23
  FormBuilderSection,
package/index.d.ts CHANGED
@@ -75,6 +75,7 @@ export type {
75
75
  FormBuilderLabels,
76
76
  FormBuilderAlertConfig,
77
77
  FormBuilderButtonsRenderContext,
78
+ FormBuilderSubmitAlign,
78
79
  FormBuilderLayout,
79
80
  FormBuilderLayoutEntry,
80
81
  FormBuilderSection,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hs-uix",
3
- "version": "1.6.2",
3
+ "version": "1.6.4",
4
4
  "description": "Production-ready UI components for HubSpot UI Extensions — DataTable, FormBuilder, and more",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",