@oods/components-vue 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,10 @@
1
- import { defineComponent, h, ref, computed, useId, watch, nextTick, onMounted, onBeforeUnmount, isVNode, Text as Text$1, Comment, Fragment } from 'vue';
2
- import { svgCarriesTitle, assertStaticSvg, formatPriceAmount, formatPriceCode, formatReferenceLabel, summaryValue, formatDateTime, dateTimeInputValue, formatReadOnlyValue, BILLING_MINOR_UNITS, billingSummary, formatBillingAmount, billingAmountText, billingAmountMessage, parseBillingAmount, BILLING_INTERVALS, billingIntervalMessage, billingCycle, auditSummary, initialSort, ariaSort, nextSort, recipeItemLabels, DEFAULT_COLOR_STATES, geoFieldMapping, currencyMinorUnits, billingPaymentSummary, billingPaymentRows, traitEventRows, vizControlFields, VIZ_CONTROL_TITLES, vizFieldValue, vizSummaryRows, editVizIntent } from '@oods/component-contracts';
1
+ import { defineComponent, h, useId, computed, ref, onMounted, watch, nextTick, onBeforeUnmount, isVNode, Text as Text$1, Comment, Fragment } from 'vue';
2
+ import { vizPreviewLayers, svgCarriesTitle, formatPriceAmount, formatPriceCode, formatReferenceLabel, summaryValue, formatDateTime, dateTimeInputValue, formatReadOnlyValue, BILLING_MINOR_UNITS, billingSummary, formatBillingAmount, billingAmountText, billingAmountMessage, parseBillingAmount, BILLING_INTERVALS, billingIntervalMessage, billingCycle, auditSummary, initialSort, ariaSort, nextSort, recipeItemLabels, DEFAULT_COLOR_STATES, geoFieldMapping, STATUS_ICON_SVG_ATTRS, STATUS_ICON_SHAPES, getStatusPresentation, resolveStatusIcon, currencyMinorUnits, billingPaymentSummary, billingPaymentRows, traitEventRows, vizControlFields, VIZ_CONTROL_TITLES, vizFieldValue, vizSummaryRows, editVizIntent } from '@oods/component-contracts';
3
+
4
+ // src/primitives.ts
5
+ function statusIcon(name) {
6
+ return h("svg", { ...STATUS_ICON_SVG_ATTRS }, STATUS_ICON_SHAPES[name].map((shape) => h(shape.tag, { ...shape.attrs })));
7
+ }
3
8
 
4
9
  // src/primitives.ts
5
10
  var toneProp = String;
@@ -142,7 +147,7 @@ var Banner = defineComponent({
142
147
  class: "oods-banner-dismiss oods-banner__dismiss",
143
148
  "aria-label": props.dismissLabel,
144
149
  onClick: () => emit("dismiss")
145
- }, [h("span", { "aria-hidden": "true" }, "\xD7")]) : null
150
+ }, [statusIcon("x")]) : null
146
151
  ]);
147
152
  };
148
153
  }
@@ -152,7 +157,7 @@ var Button = defineComponent({
152
157
  props: {
153
158
  content: { type: [String, Number], default: "" },
154
159
  intent: { type: String, default: "neutral" },
155
- size: { type: sizeProp, default: "md" },
160
+ size: { type: String, default: "md" },
156
161
  disabled: Boolean,
157
162
  type: { type: String, default: "button" }
158
163
  },
@@ -179,6 +184,83 @@ var Button = defineComponent({
179
184
  }, [slotOrValue(slots.default, props.content)]);
180
185
  }
181
186
  });
187
+ var canShowModal = () => typeof HTMLDialogElement !== "undefined" && typeof HTMLDialogElement.prototype.showModal === "function";
188
+ var Dialog = defineComponent({
189
+ name: "OodsDialog",
190
+ props: {
191
+ id: String,
192
+ open: Boolean,
193
+ modal: { type: Boolean, default: true },
194
+ title: { type: String, default: "" },
195
+ description: String,
196
+ dismissLabel: { type: String, default: "Close" },
197
+ size: { type: String, default: "md" },
198
+ actions: { type: [String, Number, Object, Array], default: void 0 }
199
+ },
200
+ emits: {
201
+ close: () => true
202
+ },
203
+ setup(props, { emit, slots }) {
204
+ const generatedId = useId().replace(/[^\w-]/g, "");
205
+ const dialogId = computed(() => props.id || `oods-dialog-${generatedId}`);
206
+ const element = ref(null);
207
+ const mounted = ref(false);
208
+ const managed = computed(() => props.modal && mounted.value && canShowModal());
209
+ const sync = () => {
210
+ const dialog = element.value;
211
+ if (!dialog || !managed.value) return;
212
+ if (props.open && !dialog.open) dialog.showModal();
213
+ else if (!props.open && dialog.open) dialog.close();
214
+ };
215
+ onMounted(() => {
216
+ mounted.value = true;
217
+ });
218
+ watch([() => props.open, managed], sync, { flush: "post" });
219
+ const requestClose = (event) => {
220
+ event.preventDefault();
221
+ emit("close");
222
+ };
223
+ return () => {
224
+ const titleId = `${dialogId.value}-title`;
225
+ const descriptionId = `${dialogId.value}-description`;
226
+ const actions = slotOrValue(slots.actions, props.actions);
227
+ return h("dialog", {
228
+ ref: element,
229
+ id: dialogId.value,
230
+ class: "oods-dialog",
231
+ "data-oods-component": "Dialog",
232
+ "data-size": props.size,
233
+ "aria-labelledby": titleId,
234
+ "aria-describedby": props.description ? descriptionId : void 0,
235
+ open: managed.value ? void 0 : props.open,
236
+ onKeydown: (event) => {
237
+ if (event.key === "Escape" && !event.defaultPrevented) requestClose(event);
238
+ },
239
+ onCancel: requestClose,
240
+ // The browser closed it (a close request it would not let be cancelled) while open is still true. A close event
241
+ // from moving a mounted dialog into the top layer finds it open again, and is not reported.
242
+ onClose: () => {
243
+ if (props.open && !element.value?.open) emit("close");
244
+ }
245
+ }, [
246
+ h("div", { class: "oods-dialog__header" }, [
247
+ h("div", { class: "oods-dialog__heading" }, [
248
+ h("h2", { id: titleId, class: "oods-dialog__title" }, props.title),
249
+ props.description ? h("p", { id: descriptionId, class: "oods-dialog__description" }, props.description) : null
250
+ ]),
251
+ h("button", {
252
+ type: "button",
253
+ class: "oods-dialog__close",
254
+ "aria-label": props.dismissLabel,
255
+ onClick: () => emit("close")
256
+ }, [statusIcon("x")])
257
+ ]),
258
+ slots.default ? h("div", { class: "oods-dialog__body" }, slots.default()) : null,
259
+ actions !== void 0 && actions !== null && actions !== "" ? h("div", { class: "oods-dialog__footer" }, [actions]) : null
260
+ ]);
261
+ };
262
+ }
263
+ });
182
264
  var SAFE_CARD_ELEMENTS = /* @__PURE__ */ new Set(["div", "article", "section", "aside"]);
183
265
  var Card = defineComponent({
184
266
  name: "OodsCard",
@@ -458,6 +540,13 @@ var VizAreaPreview = defineComponent({
458
540
  svgNarrow: String,
459
541
  /** The same chart rendered at the wide size; the figure shows it instead of svg when its own inline size is at least 900px. */
460
542
  svgWide: String,
543
+ /** s222-m02 (F7): the dark and high-contrast renders; with any of them, svg* are the light ones (see React's types). */
544
+ svgDark: String,
545
+ svgDarkNarrow: String,
546
+ svgDarkWide: String,
547
+ svgHc: String,
548
+ svgHcNarrow: String,
549
+ svgHcWide: String,
461
550
  title: String,
462
551
  description: String,
463
552
  width: { type: Number, default: 640 },
@@ -466,6 +555,7 @@ var VizAreaPreview = defineComponent({
466
555
  setup(props, { slots }) {
467
556
  return () => {
468
557
  const content = authoredContent(slots.default?.());
558
+ const renders = (layer) => layer.renders.map(([attribute, markup]) => h("div", { [attribute]: "true", innerHTML: markup }));
469
559
  if (props.svg !== void 0) return h("figure", {
470
560
  class: "oods-viz-area-preview",
471
561
  "data-oods-component": "VizAreaPreview",
@@ -480,9 +570,11 @@ var VizAreaPreview = defineComponent({
480
570
  style: { "--oods-viz-width": `${props.width}px` }
481
571
  }, [
482
572
  ...props.title && !svgCarriesTitle(props.svg, props.title) ? [h("figcaption", props.title)] : [],
483
- h("div", { "data-viz-svg": "true", innerHTML: assertStaticSvg(props.svg) }),
484
- ...props.svgNarrow !== void 0 ? [h("div", { "data-viz-svg-narrow": "true", innerHTML: assertStaticSvg(props.svgNarrow) })] : [],
485
- ...props.svgWide !== void 0 ? [h("div", { "data-viz-svg-wide": "true", innerHTML: assertStaticSvg(props.svgWide) })] : [],
573
+ ...vizPreviewLayers(props).flatMap((layer) => layer.theme === void 0 ? renders(layer) : [h("div", {
574
+ "data-viz-theme": layer.theme,
575
+ ...layer.narrow ? { "data-viz-narrow": "true" } : {},
576
+ ...layer.wide ? { "data-viz-wide": "true" } : {}
577
+ }, renders(layer))]),
486
578
  ...props.description ? [h("p", { "data-viz-description": "true" }, props.description)] : []
487
579
  ]);
488
580
  return h("div", {
@@ -1725,6 +1817,75 @@ var Checkbox = defineComponent({
1725
1817
  };
1726
1818
  }
1727
1819
  });
1820
+ var Switch = defineComponent({
1821
+ name: "OodsSwitch",
1822
+ props: {
1823
+ id: String,
1824
+ label: String,
1825
+ modelValue: { type: Boolean, default: void 0 },
1826
+ checked: { type: Boolean, default: void 0 },
1827
+ defaultChecked: Boolean,
1828
+ required: Boolean,
1829
+ disabled: Boolean,
1830
+ help: String,
1831
+ validation: Object,
1832
+ size: { type: String, default: "md" }
1833
+ },
1834
+ emits: {
1835
+ "update:modelValue": (_value) => true,
1836
+ change: (_value) => true
1837
+ },
1838
+ setup(props, { emit, slots }) {
1839
+ const internalChecked = ref(props.defaultChecked);
1840
+ const currentChecked = computed(() => props.modelValue ?? props.checked ?? internalChecked.value);
1841
+ const metadata = useFieldMetadata("Switch", props, slots);
1842
+ const toggle = () => {
1843
+ const next = !currentChecked.value;
1844
+ if (props.modelValue === void 0 && props.checked === void 0) internalChecked.value = next;
1845
+ emit("update:modelValue", next);
1846
+ emit("change", next);
1847
+ };
1848
+ return () => {
1849
+ const label = slots.label?.() ?? props.label;
1850
+ const help = slots.help?.() ?? props.help;
1851
+ const validation = slots.validation?.() ?? props.validation?.message;
1852
+ const controlId = metadata.controlId.value;
1853
+ return h("div", {
1854
+ class: "oods-field oods-switch",
1855
+ style: validationStyle(props.validation),
1856
+ "data-oods-component": "Switch",
1857
+ "data-size": props.size,
1858
+ "data-validation-state": props.validation?.state
1859
+ }, [
1860
+ h("div", { class: "oods-switch__row" }, [
1861
+ h("button", {
1862
+ id: controlId,
1863
+ type: "button",
1864
+ role: "switch",
1865
+ class: "oods-switch__control",
1866
+ "aria-checked": currentChecked.value ? "true" : "false",
1867
+ "aria-labelledby": `${controlId}-label`,
1868
+ "aria-describedby": metadata.describedBy.value,
1869
+ "aria-required": props.required ? "true" : void 0,
1870
+ "aria-invalid": props.validation?.state === "error" ? "true" : void 0,
1871
+ disabled: props.disabled,
1872
+ onClick: toggle
1873
+ }, [h("span", { class: "oods-switch__thumb", "aria-hidden": "true" })]),
1874
+ h("label", { id: `${controlId}-label`, class: "oods-field-label oods-switch__label", for: controlId }, [
1875
+ label,
1876
+ props.required ? h("span", { class: "oods-field-required", "aria-hidden": "true" }, "*") : null
1877
+ ])
1878
+ ]),
1879
+ help ? h("p", { id: metadata.helpId.value, class: "oods-field-help" }, help) : null,
1880
+ validation ? h("p", {
1881
+ id: metadata.validationId.value,
1882
+ class: "oods-field-error",
1883
+ role: props.validation?.state === "error" ? "alert" : void 0
1884
+ }, validation) : null
1885
+ ]);
1886
+ };
1887
+ }
1888
+ });
1728
1889
  var TableCaption = defineComponent({
1729
1890
  name: "OodsTableCaption",
1730
1891
  setup(_props, { slots }) {
@@ -1769,6 +1930,8 @@ var Table = defineComponent({
1769
1930
  inheritAttrs: false,
1770
1931
  props: {
1771
1932
  caption: { type: String, default: "" },
1933
+ // s222-m02 (#2502 ruling 11): false keeps the caption as the table's accessible name but hides it visually.
1934
+ showCaption: { type: Boolean, default: true },
1772
1935
  columns: { type: Array, default: () => [] },
1773
1936
  rows: { type: Array, default: () => [] },
1774
1937
  density: { type: String, default: "default" },
@@ -1785,7 +1948,7 @@ var Table = defineComponent({
1785
1948
  "data-oods-component": "Table",
1786
1949
  "data-density": props.density
1787
1950
  }, [
1788
- slots.caption || props.caption ? h(TableCaption, {}, {
1951
+ slots.caption || props.caption ? h(TableCaption, { "data-visually-hidden": props.showCaption ? void 0 : "true" }, {
1789
1952
  default: () => slots.caption?.() ?? props.caption
1790
1953
  }) : null,
1791
1954
  h(TableHead, {}, {
@@ -2003,82 +2166,6 @@ var Tabs = defineComponent({
2003
2166
  ]);
2004
2167
  }
2005
2168
  });
2006
-
2007
- // src/ported-core.ts
2008
- var STATUS_METADATA = {
2009
- subscription: {
2010
- future: {
2011
- description: "Subscription is scheduled but not yet active.",
2012
- tone: "info",
2013
- icon: "\u23F2"
2014
- },
2015
- trialing: {
2016
- description: "Subscription is in a trial period before billing begins.",
2017
- tone: "accent",
2018
- icon: "\u2605"
2019
- },
2020
- active: {
2021
- description: "Subscription is paid and service is provisioned.",
2022
- tone: "success",
2023
- icon: "\u2714\uFE0E"
2024
- },
2025
- paused: {
2026
- description: "Billing paused temporarily by finance or customer request.",
2027
- tone: "neutral",
2028
- icon: "\u23F8"
2029
- },
2030
- pending_cancellation: {
2031
- description: "Subscription will cancel at period end but remains active now.",
2032
- tone: "info",
2033
- icon: "\u2026"
2034
- },
2035
- past_due: {
2036
- description: "Renewal payment failed; smart retries ongoing and access retained during the grace window.",
2037
- tone: "critical",
2038
- icon: "\u26A0\uFE0E"
2039
- },
2040
- unpaid: {
2041
- description: "Payment retries exhausted; service access revoked.",
2042
- tone: "critical",
2043
- icon: "\u2A2F"
2044
- },
2045
- terminated: {
2046
- description: "Subscription ended; service access revoked and billing stopped.",
2047
- tone: "neutral",
2048
- icon: "\u2205"
2049
- }
2050
- },
2051
- invoice: {
2052
- draft: {
2053
- description: "Invoice is editable and not yet finalized.",
2054
- tone: "neutral",
2055
- icon: "\u270E"
2056
- },
2057
- posted: {
2058
- description: "Invoice finalized with terms before collection.",
2059
- tone: "info",
2060
- icon: "\u2026"
2061
- },
2062
- paid: {
2063
- description: "Invoice collected successfully in full.",
2064
- tone: "success",
2065
- icon: "\u2714\uFE0E"
2066
- },
2067
- past_due: {
2068
- description: "Invoice is unpaid past its due date.",
2069
- tone: "critical",
2070
- icon: "\u2A2F"
2071
- },
2072
- void: {
2073
- description: "Invoice canceled and no longer payable.",
2074
- tone: "neutral",
2075
- icon: "\u2205"
2076
- }
2077
- }
2078
- };
2079
- var STATUS_ALIASES = {
2080
- subscription: { delinquent: "unpaid" }
2081
- };
2082
2169
  function isRecord2(value) {
2083
2170
  return typeof value === "object" && value !== null && !Array.isArray(value);
2084
2171
  }
@@ -2095,18 +2182,13 @@ function statusLabel2(status) {
2095
2182
  return status.split(/[_-]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" ");
2096
2183
  }
2097
2184
  function getPortedStatusPresentation(domain, status) {
2098
- const normalizedDomain = domain.toLowerCase();
2099
- const normalizedStatus = status.toLowerCase();
2100
- const alias = STATUS_ALIASES[normalizedDomain]?.[normalizedStatus];
2101
- const metadata = STATUS_METADATA[normalizedDomain]?.[alias ?? normalizedStatus];
2102
- if (!metadata) {
2103
- return {
2104
- label: statusLabel2(status || "Unknown"),
2105
- description: "Status not found in registry; falling back to the requested token set.",
2106
- tone: "neutral"
2107
- };
2108
- }
2109
- return { ...metadata, label: statusLabel2(status) };
2185
+ const presentation = getStatusPresentation(domain.toLowerCase(), status);
2186
+ return {
2187
+ label: statusLabel2(status || "Unknown"),
2188
+ description: presentation.description,
2189
+ tone: presentation.tone,
2190
+ icon: resolveStatusIcon(presentation.iconName)
2191
+ };
2110
2192
  }
2111
2193
  function formatPrice(amountCents, amount, currency) {
2112
2194
  const normalizedAmount = amount;
@@ -2250,11 +2332,10 @@ var StatusBadge = defineComponent({
2250
2332
  domain: props.domain,
2251
2333
  tone,
2252
2334
  emphasis: props.variant === "solid" ? "solid" : props.emphasis,
2253
- icon: props.showIcon ? presentation.icon : void 0,
2254
2335
  title: stringValue(attrs.title) ?? presentation.description,
2255
2336
  "aria-label": ariaLabel,
2256
2337
  "data-oods-component": "StatusBadge"
2257
- }, slots);
2338
+ }, props.showIcon && presentation.icon && !slots.icon ? { ...slots, icon: () => statusIcon(presentation.icon) } : slots);
2258
2339
  };
2259
2340
  }
2260
2341
  });
@@ -2567,7 +2648,7 @@ var SearchInput = defineComponent({
2567
2648
  "aria-label": "Clear search",
2568
2649
  disabled: props.disabled,
2569
2650
  onClick: clear
2570
- }, "\xD7") : null
2651
+ }, [statusIcon("x")]) : null
2571
2652
  ]);
2572
2653
  };
2573
2654
  }
@@ -2714,17 +2795,18 @@ var RelativeTimestamp = defineComponent({
2714
2795
  props.createdAt
2715
2796
  ) ?? "";
2716
2797
  if (props.hideWhenEmpty && (!datetime || Number.isNaN(Date.parse(datetime)))) return null;
2798
+ const absolute = formatDateTime(datetime, { timeZone: props.timezone });
2717
2799
  const content = firstDefined(
2718
2800
  props.relative,
2719
2801
  props.label,
2720
2802
  props.text,
2721
- props.now === void 0 ? formatDateTime(datetime, { timeZone: props.timezone }) : relativeTimestampLabel(datetime, props.now)
2803
+ !absolute ? "Unknown time" : props.now === void 0 ? absolute : relativeTimestampLabel(datetime, props.now)
2722
2804
  ) ?? "";
2723
2805
  return h("time", {
2724
2806
  ...attrs,
2725
2807
  class: mergedClass("oods-relative-timestamp", attrs.class),
2726
2808
  datetime: datetime || void 0,
2727
- title: stringValue(attrs.title) ?? formatDateTime(datetime, { timeZone: props.timezone }),
2809
+ title: stringValue(attrs.title) ?? absolute,
2728
2810
  "data-oods-component": "RelativeTimestamp"
2729
2811
  }, content);
2730
2812
  };
@@ -2972,7 +3054,7 @@ function summary(id) {
2972
3054
  } });
2973
3055
  }
2974
3056
  function preview(id, type) {
2975
- return defineComponent({ name: id, props: { svg: String, svgNarrow: String, svgWide: String, title: String, description: String, width: Number, height: Number }, setup(props, { slots }) {
3057
+ return defineComponent({ name: id, props: { svg: String, svgNarrow: String, svgWide: String, svgDark: String, svgDarkNarrow: String, svgDarkWide: String, svgHc: String, svgHcNarrow: String, svgHcWide: String, title: String, description: String, width: Number, height: Number }, setup(props, { slots }) {
2976
3058
  return () => h(VizAreaPreview, { ...props, title: props.title ?? `${type[0].toUpperCase()}${type.slice(1)} chart`, "data-oods-component": id, "data-viz-preview-type": type }, { default: slots.default ?? (() => h(Text, { content: "No rendered chart supplied" })) });
2977
3059
  } });
2978
3060
  }
@@ -3003,4 +3085,4 @@ var VizMarkPreview = preview("VizMarkPreview", "bar");
3003
3085
  var VizPointPreview = preview("VizPointPreview", "scatter");
3004
3086
  var VizScatterPreview = preview("VizScatterPreview", "scatter");
3005
3087
 
3006
- export { AddressCollectionPanel, AddressEditor, AddressSummaryBadge, AddressValidationTimeline, ArchiveEvent, ArchivePill, ArchiveSummary, ArchivedRowOverlay, AuditEvent, AuditSummaryCard, AuditTimeline, Badge, Banner, BillingAmountInput, BillingCardMeta, BillingIntervalSelector, BillingSummaryBadge, Button, CancellationBadge, CancellationEvent, CancellationForm, CancellationSummary, Card, CardHeader, Checkbox, ClassificationBadge, ClassificationEditor, ClassificationPanel, ColorStatePicker, ColorSwatch, ColorizedBadge, CommunicationDetailPanel, CycleProgressCard, DatePicker, DetailHeader, FilterPanel, FormLabelGroup, GeoFieldMappingForm, GeoResolutionBadge, GeocodablePreview, Grid, InlineLabel, Input, LabelCell, MembershipAuditTimeline, MembershipPanel, MessageEventTimeline, MessageStatusBadge, OwnerBadge, OwnershipMeta, OwnershipSummary, PaginationBar, PaymentEventTimeline, PaymentTimeline, PreferenceEditor, PreferencePanel, PreferenceSummaryBadge, PreferenceTimeline, PriceBadge, PriceCardMeta, PriceSummary, RelativeTimestamp, RoleAssignmentForm, RoleBadgeList, SearchInput, Select, SortIndicator, Stack, StateTransitionEvent, StatusBadge, StatusColorLegend, StatusSelector, StatusTimeline, Table, TableBody, TableCaption, TableCell, TableHead, TableHeaderCell, TableRow, Tabs, TagInput, TagManager, TagPills, TagSummary, TemplatePicker, Text, Textarea, TimelineEntryLabel, VizAreaControls, VizAreaPreview, VizAxisControls, VizAxisSummary, VizColorControls, VizColorLegendConfig, VizEncodingBadge, VizGraphPreview, VizHeatmapControls, VizHeatmapPreview, VizLineControls, VizLinePreview, VizMarkControls, VizMarkPreview, VizOpacityControls, VizOpacitySummary, VizPointControls, VizPointPreview, VizRoleBadge, VizScaleControls, VizScaleSummary, VizScatterControls, VizScatterPreview, VizShapeControls, VizShapeLegend, VizSizeControls, VizSizeSummary };
3088
+ export { AddressCollectionPanel, AddressEditor, AddressSummaryBadge, AddressValidationTimeline, ArchiveEvent, ArchivePill, ArchiveSummary, ArchivedRowOverlay, AuditEvent, AuditSummaryCard, AuditTimeline, Badge, Banner, BillingAmountInput, BillingCardMeta, BillingIntervalSelector, BillingSummaryBadge, Button, CancellationBadge, CancellationEvent, CancellationForm, CancellationSummary, Card, CardHeader, Checkbox, ClassificationBadge, ClassificationEditor, ClassificationPanel, ColorStatePicker, ColorSwatch, ColorizedBadge, CommunicationDetailPanel, CycleProgressCard, DatePicker, DetailHeader, Dialog, FilterPanel, FormLabelGroup, GeoFieldMappingForm, GeoResolutionBadge, GeocodablePreview, Grid, InlineLabel, Input, LabelCell, MembershipAuditTimeline, MembershipPanel, MessageEventTimeline, MessageStatusBadge, OwnerBadge, OwnershipMeta, OwnershipSummary, PaginationBar, PaymentEventTimeline, PaymentTimeline, PreferenceEditor, PreferencePanel, PreferenceSummaryBadge, PreferenceTimeline, PriceBadge, PriceCardMeta, PriceSummary, RelativeTimestamp, RoleAssignmentForm, RoleBadgeList, SearchInput, Select, SortIndicator, Stack, StateTransitionEvent, StatusBadge, StatusColorLegend, StatusSelector, StatusTimeline, Switch, Table, TableBody, TableCaption, TableCell, TableHead, TableHeaderCell, TableRow, Tabs, TagInput, TagManager, TagPills, TagSummary, TemplatePicker, Text, Textarea, TimelineEntryLabel, VizAreaControls, VizAreaPreview, VizAxisControls, VizAxisSummary, VizColorControls, VizColorLegendConfig, VizEncodingBadge, VizGraphPreview, VizHeatmapControls, VizHeatmapPreview, VizLineControls, VizLinePreview, VizMarkControls, VizMarkPreview, VizOpacityControls, VizOpacitySummary, VizPointControls, VizPointPreview, VizRoleBadge, VizScaleControls, VizScaleSummary, VizScatterControls, VizScatterPreview, VizShapeControls, VizShapeLegend, VizSizeControls, VizSizeSummary };