@abgov/jsonforms-components 2.69.0 → 2.70.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/index.esm.js CHANGED
@@ -1,6 +1,5 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import React, { useContext, useReducer, useMemo, useEffect, createContext, useCallback, useRef, useState, useLayoutEffect } from 'react';
3
- import { GoabFormItem, GoabDropdown, GoabDropdownItem, GoabInput, GoabTextArea, GoabCallout, GoabRadioGroup, GoabRadioItem, GoabCheckbox, GoabIcon, GoabButton, GoabTable, GoabGrid, GoabIconButton, GoabModal, GoabButtonGroup, GoabContainer, GoabDetails, GoabFormStepper, GoabFormStep, GoabPages, GoabBadge, GoabText, GoabFileUploadInput, GoabCircularProgress, GoabSpinner } from '@abgov/react-components';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import React, { useRef, useEffect, useContext, useReducer, useMemo, createContext, useCallback, useState, useLayoutEffect } from 'react';
4
3
  import Ajv from 'ajv';
5
4
  import styled from 'styled-components';
6
5
  import axios from 'axios';
@@ -12,6 +11,7 @@ import { useJsonForms, withJsonFormsControlProps, withJsonFormsEnumProps, withTr
12
11
  import dompurify from 'dompurify';
13
12
  import * as xss from 'xss';
14
13
  import merge from 'lodash/merge';
14
+ import { GoabRadioGroup as GoabRadioGroup$1, GoabRadioItem as GoabRadioItem$1, GoabTable as GoabTable$1, GoabGrid as GoabGrid$1, GoabContainer as GoabContainer$1 } from '@abgov/react-components';
15
15
  import isEmpty$1 from 'lodash/isEmpty';
16
16
  import range from 'lodash/range';
17
17
  import pluralize from 'pluralize';
@@ -1826,6 +1826,759 @@ $$J({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
1826
1826
  }
1827
1827
  });
1828
1828
 
1829
+ const lowercase = (input) => input.toLowerCase();
1830
+ function transformProps(props, transform = lowercase) {
1831
+ const result = {};
1832
+ for (const [key, value] of Object.entries(props)) {
1833
+ if (value === void 0) continue;
1834
+ if (key.startsWith("data-")) {
1835
+ result[key] = value;
1836
+ } else {
1837
+ result[transform(key)] = value;
1838
+ }
1839
+ }
1840
+ return result;
1841
+ }
1842
+
1843
+ function getIconValue(icon, iconType) {
1844
+ if (icon !== void 0) {
1845
+ return icon ? "true" : "false";
1846
+ }
1847
+ return iconType ? "true" : "false";
1848
+ }
1849
+ function GoabBadge({ icon, iconType, ...rest }) {
1850
+ const _props = transformProps(rest, lowercase);
1851
+ return /* @__PURE__ */ jsx(
1852
+ "goa-badge",
1853
+ {
1854
+ icon: getIconValue(icon, iconType),
1855
+ icontype: iconType,
1856
+ ..._props
1857
+ }
1858
+ );
1859
+ }
1860
+ function GoabButton({
1861
+ disabled,
1862
+ onClick,
1863
+ actionArgs,
1864
+ actionArg,
1865
+ children,
1866
+ ...rest
1867
+ }) {
1868
+ const el = useRef(null);
1869
+ const _props = transformProps(rest, lowercase);
1870
+ useEffect(() => {
1871
+ if (!el.current) {
1872
+ return;
1873
+ }
1874
+ if (!onClick) {
1875
+ return;
1876
+ }
1877
+ const current = el.current;
1878
+ const listener = () => {
1879
+ onClick == null ? void 0 : onClick();
1880
+ };
1881
+ current.addEventListener("_click", listener);
1882
+ return () => {
1883
+ current.removeEventListener("_click", listener);
1884
+ };
1885
+ }, [el, onClick]);
1886
+ return /* @__PURE__ */ jsx(
1887
+ "goa-button",
1888
+ {
1889
+ ref: el,
1890
+ disabled: disabled ? "true" : void 0,
1891
+ "action-arg": actionArg,
1892
+ "action-args": JSON.stringify(actionArgs),
1893
+ ..._props,
1894
+ children
1895
+ }
1896
+ );
1897
+ }
1898
+ function GoabButtonGroup({
1899
+ children,
1900
+ ...rest
1901
+ }) {
1902
+ const _props = transformProps(rest, lowercase);
1903
+ return /* @__PURE__ */ jsx("goa-button-group", { ..._props, children });
1904
+ }
1905
+ const GoabCallout = ({
1906
+ type = "information",
1907
+ iconTheme = "outline",
1908
+ size = "large",
1909
+ ariaLive = "off",
1910
+ children,
1911
+ ...rest
1912
+ }) => {
1913
+ const _props = transformProps(
1914
+ { type, icontheme: iconTheme, size, arialive: ariaLive, ...rest },
1915
+ lowercase
1916
+ );
1917
+ return /* @__PURE__ */ jsx("goa-callout", { ..._props, children });
1918
+ };
1919
+ function GoabCheckbox({
1920
+ error,
1921
+ checked,
1922
+ indeterminate,
1923
+ disabled,
1924
+ value,
1925
+ description,
1926
+ reveal,
1927
+ onChange,
1928
+ name,
1929
+ children,
1930
+ ...rest
1931
+ }) {
1932
+ const el = useRef(null);
1933
+ const _props = transformProps(rest, lowercase);
1934
+ useEffect(() => {
1935
+ if (!el.current) {
1936
+ return;
1937
+ }
1938
+ const current = el.current;
1939
+ const listener = (e) => {
1940
+ const detail = e.detail;
1941
+ onChange == null ? void 0 : onChange({ ...detail, event: e });
1942
+ };
1943
+ current.addEventListener("_change", listener);
1944
+ return () => {
1945
+ current.removeEventListener("_change", listener);
1946
+ };
1947
+ }, [name, onChange]);
1948
+ return /* @__PURE__ */ jsxs(
1949
+ "goa-checkbox",
1950
+ {
1951
+ ref: el,
1952
+ ..._props,
1953
+ name,
1954
+ error: error ? "true" : void 0,
1955
+ checked: checked ? "true" : void 0,
1956
+ indeterminate: indeterminate ? "true" : void 0,
1957
+ disabled: disabled ? "true" : void 0,
1958
+ value: typeof value === "boolean" ? value ? "true" : void 0 : value,
1959
+ description: typeof description === "string" ? description : void 0,
1960
+ children: [
1961
+ children,
1962
+ typeof description !== "string" && description && /* @__PURE__ */ jsx("div", { slot: "description", children: description }),
1963
+ reveal && /* @__PURE__ */ jsx("div", { slot: "reveal", children: reveal })
1964
+ ]
1965
+ }
1966
+ );
1967
+ }
1968
+ const GoabCircularProgress = ({
1969
+ visible,
1970
+ message,
1971
+ progress,
1972
+ variant,
1973
+ size,
1974
+ testId
1975
+ }) => {
1976
+ return /* @__PURE__ */ jsx(
1977
+ "goa-circular-progress",
1978
+ {
1979
+ visible: visible ? "true" : void 0,
1980
+ message,
1981
+ progress,
1982
+ variant,
1983
+ size,
1984
+ testid: testId
1985
+ }
1986
+ );
1987
+ };
1988
+ function GoabContainer({
1989
+ heading,
1990
+ title,
1991
+ actions,
1992
+ children,
1993
+ ...rest
1994
+ }) {
1995
+ const _props = transformProps(rest, lowercase);
1996
+ const headingContent = heading || title;
1997
+ return /* @__PURE__ */ jsxs("goa-container", { ..._props, children: [
1998
+ headingContent && /* @__PURE__ */ jsx("div", { slot: "title", children: headingContent }),
1999
+ children,
2000
+ actions && /* @__PURE__ */ jsx("div", { slot: "actions", children: actions })
2001
+ ] });
2002
+ }
2003
+ function GoabDetails({
2004
+ open,
2005
+ children,
2006
+ ...rest
2007
+ }) {
2008
+ const _props = transformProps(rest, lowercase);
2009
+ return /* @__PURE__ */ jsx(
2010
+ "goa-details",
2011
+ {
2012
+ open: open ? "true" : void 0,
2013
+ ..._props,
2014
+ children
2015
+ }
2016
+ );
2017
+ }
2018
+ function stringify(value) {
2019
+ if (typeof value === "undefined") {
2020
+ return "";
2021
+ }
2022
+ if (typeof value === "string") {
2023
+ return value;
2024
+ }
2025
+ return JSON.stringify(value);
2026
+ }
2027
+ function GoabDropdown({
2028
+ value,
2029
+ onChange,
2030
+ disabled,
2031
+ error,
2032
+ filterable,
2033
+ multiselect,
2034
+ native,
2035
+ relative,
2036
+ children,
2037
+ ...rest
2038
+ }) {
2039
+ const el = useRef(null);
2040
+ const _props = transformProps(rest, lowercase);
2041
+ useEffect(() => {
2042
+ if (!el.current) {
2043
+ return;
2044
+ }
2045
+ const current = el.current;
2046
+ const handler = (e) => {
2047
+ const detail = e.detail;
2048
+ onChange == null ? void 0 : onChange({ ...detail, event: e });
2049
+ };
2050
+ if (onChange) {
2051
+ current.addEventListener("_change", handler);
2052
+ }
2053
+ return () => {
2054
+ if (onChange) {
2055
+ current.removeEventListener("_change", handler);
2056
+ }
2057
+ };
2058
+ }, [el, onChange]);
2059
+ return /* @__PURE__ */ jsx(
2060
+ "goa-dropdown",
2061
+ {
2062
+ ref: el,
2063
+ value: stringify(value),
2064
+ disabled: disabled ? "true" : void 0,
2065
+ error: error ? "true" : void 0,
2066
+ filterable: filterable ? "true" : void 0,
2067
+ multiselect: multiselect ? "true" : void 0,
2068
+ native: native ? "true" : void 0,
2069
+ relative: relative ? "true" : void 0,
2070
+ ..._props,
2071
+ children
2072
+ }
2073
+ );
2074
+ }
2075
+ function GoabDropdownItem({
2076
+ value,
2077
+ label,
2078
+ filter,
2079
+ name,
2080
+ mountType = "append"
2081
+ }) {
2082
+ return /* @__PURE__ */ jsx(
2083
+ "goa-dropdown-item",
2084
+ {
2085
+ value,
2086
+ label,
2087
+ filter,
2088
+ name,
2089
+ mount: mountType
2090
+ }
2091
+ );
2092
+ }
2093
+ function GoabFileUploadInput({
2094
+ onSelectFile,
2095
+ ...rest
2096
+ }) {
2097
+ const el = useRef(null);
2098
+ const _props = transformProps(rest, lowercase);
2099
+ useEffect(() => {
2100
+ if (!el.current) return;
2101
+ const current = el.current;
2102
+ const handler = (e) => {
2103
+ const detail = e.detail;
2104
+ onSelectFile({ ...detail, event: e });
2105
+ };
2106
+ current.addEventListener("_selectFile", handler);
2107
+ return () => {
2108
+ current.removeEventListener("_selectFile", handler);
2109
+ };
2110
+ }, [el, onSelectFile]);
2111
+ return /* @__PURE__ */ jsx("goa-file-upload-input", { ref: el, ..._props });
2112
+ }
2113
+ function GoabFormItem({
2114
+ error,
2115
+ helpText,
2116
+ publicFormSummaryOrder,
2117
+ children,
2118
+ ...rest
2119
+ }) {
2120
+ const _props = transformProps(rest, lowercase);
2121
+ return /* @__PURE__ */ jsxs(
2122
+ "goa-form-item",
2123
+ {
2124
+ error: typeof error === "string" ? error : void 0,
2125
+ helptext: typeof helpText === "string" ? helpText : void 0,
2126
+ "public-form-summary-order": publicFormSummaryOrder,
2127
+ ..._props,
2128
+ children: [
2129
+ error && typeof error !== "string" && /* @__PURE__ */ jsx("div", { slot: "error", children: error }),
2130
+ helpText && typeof helpText !== "string" && /* @__PURE__ */ jsx("div", { slot: "helptext", children: helpText }),
2131
+ children
2132
+ ]
2133
+ }
2134
+ );
2135
+ }
2136
+ function GoabFormStep(props) {
2137
+ return /* @__PURE__ */ jsx("goa-form-step", { text: props.text, status: props.status });
2138
+ }
2139
+ function GoabFormStepper({
2140
+ testId,
2141
+ step,
2142
+ mt,
2143
+ mb,
2144
+ ml,
2145
+ mr,
2146
+ onChange,
2147
+ children
2148
+ }) {
2149
+ const ref = useRef(null);
2150
+ useEffect(() => {
2151
+ if (!ref.current) {
2152
+ return;
2153
+ }
2154
+ const current = ref.current;
2155
+ const changeListener = (e) => {
2156
+ const detail = e.detail;
2157
+ onChange == null ? void 0 : onChange(detail);
2158
+ };
2159
+ current.addEventListener("_change", changeListener);
2160
+ return () => {
2161
+ current.removeEventListener("_change", changeListener);
2162
+ };
2163
+ }, [ref, onChange]);
2164
+ return /* @__PURE__ */ jsx(
2165
+ "goa-form-stepper",
2166
+ {
2167
+ ref,
2168
+ testid: testId,
2169
+ step,
2170
+ mt,
2171
+ mr,
2172
+ mb,
2173
+ ml,
2174
+ children
2175
+ }
2176
+ );
2177
+ }
2178
+ function GoabGrid({
2179
+ gap,
2180
+ minChildWidth,
2181
+ mt,
2182
+ mr,
2183
+ mb,
2184
+ ml,
2185
+ testId,
2186
+ children
2187
+ }) {
2188
+ return /* @__PURE__ */ jsx(
2189
+ "goa-grid",
2190
+ {
2191
+ gap,
2192
+ minchildwidth: minChildWidth,
2193
+ mt,
2194
+ mr,
2195
+ mb,
2196
+ ml,
2197
+ testid: testId,
2198
+ children
2199
+ }
2200
+ );
2201
+ }
2202
+ function GoabIconButton({
2203
+ variant = "color",
2204
+ size = "medium",
2205
+ disabled,
2206
+ onClick,
2207
+ actionArgs,
2208
+ actionArg,
2209
+ children,
2210
+ ...rest
2211
+ }) {
2212
+ const ref = useRef(null);
2213
+ const _props = transformProps(
2214
+ { variant, size, ...rest },
2215
+ lowercase
2216
+ );
2217
+ useEffect(() => {
2218
+ if (!ref.current) {
2219
+ return;
2220
+ }
2221
+ if (!onClick) {
2222
+ return;
2223
+ }
2224
+ const current = ref.current;
2225
+ const listener = () => {
2226
+ onClick == null ? void 0 : onClick();
2227
+ };
2228
+ current.addEventListener("_click", listener);
2229
+ return () => {
2230
+ current.removeEventListener("_click", listener);
2231
+ };
2232
+ }, [ref, onClick]);
2233
+ return /* @__PURE__ */ jsx(
2234
+ "goa-icon-button",
2235
+ {
2236
+ ref,
2237
+ disabled: disabled ? "true" : void 0,
2238
+ "action-arg": actionArg,
2239
+ "action-args": JSON.stringify(actionArgs),
2240
+ ..._props,
2241
+ children
2242
+ }
2243
+ );
2244
+ }
2245
+ function GoabIcon({
2246
+ inverted,
2247
+ ...rest
2248
+ }) {
2249
+ const _props = transformProps(rest, lowercase);
2250
+ return /* @__PURE__ */ jsx(
2251
+ "goa-icon",
2252
+ {
2253
+ inverted: typeof inverted === "boolean" ? inverted ? "true" : void 0 : inverted,
2254
+ ..._props
2255
+ }
2256
+ );
2257
+ }
2258
+ function GoabInput({
2259
+ variant = "goa",
2260
+ textAlign = "left",
2261
+ focused,
2262
+ disabled,
2263
+ readonly,
2264
+ error,
2265
+ leadingContent,
2266
+ trailingContent,
2267
+ onTrailingIconClick,
2268
+ onChange,
2269
+ onFocus,
2270
+ onBlur,
2271
+ onKeyPress,
2272
+ ...rest
2273
+ }) {
2274
+ const ref = useRef(null);
2275
+ const _props = transformProps({ variant, textalign: textAlign, ...rest }, lowercase);
2276
+ useEffect(() => {
2277
+ if (!ref.current) {
2278
+ return;
2279
+ }
2280
+ const current = ref.current;
2281
+ const changeListener = (e) => {
2282
+ const detail = e.detail;
2283
+ onChange == null ? void 0 : onChange({ ...detail, event: e });
2284
+ };
2285
+ const clickListener = () => {
2286
+ onTrailingIconClick == null ? void 0 : onTrailingIconClick();
2287
+ };
2288
+ const focusListener = (e) => {
2289
+ const detail = e.detail;
2290
+ onFocus == null ? void 0 : onFocus({ ...detail, event: e });
2291
+ };
2292
+ const blurListener = (e) => {
2293
+ const detail = e.detail;
2294
+ onBlur == null ? void 0 : onBlur({ ...detail, event: e });
2295
+ };
2296
+ const keypressListener = (e) => {
2297
+ const detail = e.detail;
2298
+ onKeyPress == null ? void 0 : onKeyPress({ ...detail, event: e });
2299
+ };
2300
+ current.addEventListener("_change", changeListener);
2301
+ current.addEventListener("_trailingIconClick", clickListener);
2302
+ current.addEventListener("_focus", focusListener);
2303
+ current.addEventListener("_blur", blurListener);
2304
+ current.addEventListener("_keyPress", keypressListener);
2305
+ return () => {
2306
+ current.removeEventListener("_change", changeListener);
2307
+ current.removeEventListener("_trailingIconClick", clickListener);
2308
+ current.removeEventListener("_focus", focusListener);
2309
+ current.removeEventListener("_blur", blurListener);
2310
+ current.removeEventListener("_keyPress", keypressListener);
2311
+ };
2312
+ }, [ref, onChange, onTrailingIconClick, onFocus, onBlur, onKeyPress]);
2313
+ return /* @__PURE__ */ jsxs(
2314
+ "goa-input",
2315
+ {
2316
+ ref,
2317
+ ..._props,
2318
+ focused: focused ? "true" : void 0,
2319
+ disabled: disabled ? "true" : void 0,
2320
+ readonly: readonly ? "true" : void 0,
2321
+ error: error ? "true" : void 0,
2322
+ handletrailingiconclick: onTrailingIconClick ? "true" : "false",
2323
+ children: [
2324
+ leadingContent && /* @__PURE__ */ jsx("div", { slot: "leadingContent", children: leadingContent }),
2325
+ trailingContent && /* @__PURE__ */ jsx("div", { slot: "trailingContent", children: trailingContent })
2326
+ ]
2327
+ }
2328
+ );
2329
+ }
2330
+ function GoabModal({
2331
+ heading,
2332
+ children,
2333
+ maxWidth,
2334
+ open,
2335
+ actions,
2336
+ transition,
2337
+ calloutVariant,
2338
+ onClose,
2339
+ testId
2340
+ }) {
2341
+ const el = useRef(null);
2342
+ useEffect(() => {
2343
+ if (!el.current) {
2344
+ return;
2345
+ }
2346
+ const current = el.current;
2347
+ const listener = () => {
2348
+ onClose == null ? void 0 : onClose();
2349
+ };
2350
+ current.addEventListener("_close", listener);
2351
+ return () => {
2352
+ current.removeEventListener("_close", listener);
2353
+ };
2354
+ }, [el, onClose]);
2355
+ return /* @__PURE__ */ jsxs(
2356
+ "goa-modal",
2357
+ {
2358
+ ref: el,
2359
+ open: open ? "true" : void 0,
2360
+ closable: onClose ? "true" : "false",
2361
+ heading: typeof heading === "string" ? heading : void 0,
2362
+ maxwidth: maxWidth,
2363
+ transition,
2364
+ calloutvariant: calloutVariant,
2365
+ testid: testId,
2366
+ children: [
2367
+ heading && typeof heading !== "string" && /* @__PURE__ */ jsx("div", { slot: "heading", children: heading }),
2368
+ actions && /* @__PURE__ */ jsx("div", { slot: "actions", children: actions }),
2369
+ children
2370
+ ]
2371
+ }
2372
+ );
2373
+ }
2374
+ function GoabPages(props) {
2375
+ return /* @__PURE__ */ jsx(
2376
+ "goa-pages",
2377
+ {
2378
+ current: props.current,
2379
+ ml: props.ml,
2380
+ mr: props.mr,
2381
+ mt: props.mt,
2382
+ mb: props.mb,
2383
+ children: props.children
2384
+ }
2385
+ );
2386
+ }
2387
+ function GoabRadioItem({
2388
+ name,
2389
+ label,
2390
+ value,
2391
+ description,
2392
+ reveal,
2393
+ revealAriaLabel,
2394
+ maxWidth,
2395
+ disabled,
2396
+ checked,
2397
+ error,
2398
+ ariaLabel,
2399
+ children,
2400
+ mt,
2401
+ mr,
2402
+ mb,
2403
+ ml
2404
+ }) {
2405
+ return /* @__PURE__ */ jsxs(
2406
+ "goa-radio-item",
2407
+ {
2408
+ name,
2409
+ label,
2410
+ value,
2411
+ description: typeof description === "string" ? description : void 0,
2412
+ maxwidth: maxWidth,
2413
+ error: error ? "true" : void 0,
2414
+ disabled: disabled ? "true" : void 0,
2415
+ checked: checked ? "true" : void 0,
2416
+ arialabel: ariaLabel,
2417
+ revealarialabel: revealAriaLabel,
2418
+ mt,
2419
+ mr,
2420
+ mb,
2421
+ ml,
2422
+ children: [
2423
+ description && typeof description !== "string" && /* @__PURE__ */ jsx("div", { slot: "description", children: description }),
2424
+ reveal && /* @__PURE__ */ jsx("div", { slot: "reveal", children: reveal }),
2425
+ children
2426
+ ]
2427
+ }
2428
+ );
2429
+ }
2430
+ function GoabRadioGroup({
2431
+ disabled,
2432
+ error,
2433
+ onChange,
2434
+ name,
2435
+ children,
2436
+ ...rest
2437
+ }) {
2438
+ const el = useRef(null);
2439
+ const _props = transformProps(rest, lowercase);
2440
+ useEffect(() => {
2441
+ if (!el.current) return;
2442
+ const listener = (e) => {
2443
+ const detail = e.detail;
2444
+ onChange == null ? void 0 : onChange({ ...detail, event: e });
2445
+ };
2446
+ const currentEl = el.current;
2447
+ if (onChange) {
2448
+ currentEl.addEventListener("_change", listener);
2449
+ }
2450
+ return () => {
2451
+ if (onChange) {
2452
+ currentEl.removeEventListener("_change", listener);
2453
+ }
2454
+ };
2455
+ }, [name, onChange]);
2456
+ return /* @__PURE__ */ jsx(
2457
+ "goa-radio-group",
2458
+ {
2459
+ ref: el,
2460
+ ..._props,
2461
+ name,
2462
+ disabled: disabled ? "true" : void 0,
2463
+ error: error ? "true" : void 0,
2464
+ children
2465
+ }
2466
+ );
2467
+ }
2468
+ function GoabSpinner({
2469
+ type,
2470
+ size,
2471
+ progress,
2472
+ invert,
2473
+ testId
2474
+ }) {
2475
+ return /* @__PURE__ */ jsx(
2476
+ "goa-spinner",
2477
+ {
2478
+ type,
2479
+ size,
2480
+ progress,
2481
+ invert: invert ? "true" : void 0,
2482
+ testid: testId
2483
+ }
2484
+ );
2485
+ }
2486
+ function GoabTable({ onSort, ...props }) {
2487
+ const ref = useRef(null);
2488
+ useEffect(() => {
2489
+ if (!ref.current) {
2490
+ return;
2491
+ }
2492
+ const current = ref.current;
2493
+ const sortListener = (e) => {
2494
+ const detail = e.detail;
2495
+ onSort == null ? void 0 : onSort(detail);
2496
+ };
2497
+ current.addEventListener("_sort", sortListener);
2498
+ return () => {
2499
+ current.removeEventListener("_sort", sortListener);
2500
+ };
2501
+ }, [ref, onSort]);
2502
+ return /* @__PURE__ */ jsx(
2503
+ "goa-table",
2504
+ {
2505
+ ref,
2506
+ width: props.width,
2507
+ variant: props.variant,
2508
+ testid: props.testId,
2509
+ mt: props.mt,
2510
+ mb: props.mb,
2511
+ ml: props.ml,
2512
+ mr: props.mr,
2513
+ children: /* @__PURE__ */ jsx("table", { style: { width: "100%" }, children: props.children })
2514
+ }
2515
+ );
2516
+ }
2517
+ function GoabText({
2518
+ as,
2519
+ tag,
2520
+ children,
2521
+ ...rest
2522
+ }) {
2523
+ const _props = transformProps(rest, lowercase);
2524
+ return /* @__PURE__ */ jsx(
2525
+ "goa-text",
2526
+ {
2527
+ as: tag || as,
2528
+ ..._props,
2529
+ children
2530
+ }
2531
+ );
2532
+ }
2533
+ function GoabTextArea({
2534
+ readOnly,
2535
+ disabled,
2536
+ error,
2537
+ onChange,
2538
+ onKeyPress,
2539
+ onBlur,
2540
+ ...rest
2541
+ }) {
2542
+ const el = useRef(null);
2543
+ const _props = transformProps(rest, lowercase);
2544
+ useEffect(() => {
2545
+ if (!el.current) {
2546
+ return;
2547
+ }
2548
+ const current = el.current;
2549
+ const changeListener = (e) => {
2550
+ const detail = e.detail;
2551
+ onChange == null ? void 0 : onChange({ ...detail, event: e });
2552
+ };
2553
+ const keypressListener = (e) => {
2554
+ const detail = e.detail;
2555
+ onKeyPress == null ? void 0 : onKeyPress({ ...detail, event: e });
2556
+ };
2557
+ const blurListener = (e) => {
2558
+ const detail = e.detail;
2559
+ onBlur == null ? void 0 : onBlur({ ...detail, event: e });
2560
+ };
2561
+ current.addEventListener("_change", changeListener);
2562
+ current.addEventListener("_keyPress", keypressListener);
2563
+ current.addEventListener("_blur", blurListener);
2564
+ return () => {
2565
+ current.removeEventListener("_change", changeListener);
2566
+ current.removeEventListener("_keyPress", keypressListener);
2567
+ current.removeEventListener("_blur", blurListener);
2568
+ };
2569
+ }, [el, onChange, onKeyPress, onBlur]);
2570
+ return /* @__PURE__ */ jsx(
2571
+ "goa-textarea",
2572
+ {
2573
+ ref: el,
2574
+ readOnly: readOnly ? "true" : void 0,
2575
+ disabled: disabled ? "true" : void 0,
2576
+ error: error ? "true" : void 0,
2577
+ ..._props
2578
+ }
2579
+ );
2580
+ }
2581
+
1829
2582
  var NATIVE_BIND$1 = functionBindNative;
1830
2583
 
1831
2584
  var FunctionPrototype = Function.prototype;
@@ -8441,7 +9194,6 @@ const RadioGroup = props => {
8441
9194
  uischema,
8442
9195
  path,
8443
9196
  handleChange,
8444
- options,
8445
9197
  config,
8446
9198
  label,
8447
9199
  isVisited,
@@ -8458,8 +9210,12 @@ const RadioGroup = props => {
8458
9210
  value: String(value),
8459
9211
  label: String(value)
8460
9212
  }));
8461
- const appliedUiSchemaOptions = merge({}, config, props.uischema.options, options);
8462
- return jsx(GoabRadioGroup, Object.assign({
9213
+ // Merge only UI-schema level options (config + uischema.options). The enum data
9214
+ // `options` array must NOT be merged here: lodash.merge folds its indices in as
9215
+ // numeric keys (0, 1, 2, ...), which then get spread onto <goa-radio-group> below
9216
+ // and trigger React's "Invalid attribute name: `3`" warning (CS ticket).
9217
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
9218
+ return jsx(GoabRadioGroup$1, Object.assign({
8463
9219
  error: isVisited && errors.length > 0,
8464
9220
  name: `${path || appliedUiSchemaOptions.label}`,
8465
9221
  testId: `${path || id || label}-radio-group`,
@@ -8468,7 +9224,7 @@ const RadioGroup = props => {
8468
9224
  }, appliedUiSchemaOptions, {
8469
9225
  onChange: detail => handleChange(path, detail.value)
8470
9226
  }, uischema == null || (_uischema$options = uischema.options) == null ? void 0 : _uischema$options.componentProps, {
8471
- children: items.map((item, index) => jsx(GoabRadioItem, {
9227
+ children: items.map((item, index) => jsx(GoabRadioItem$1, {
8472
9228
  name: item.value,
8473
9229
  value: item.value,
8474
9230
  label: item.label
@@ -8647,13 +9403,15 @@ const CheckboxGroup = props => {
8647
9403
  uischema,
8648
9404
  path,
8649
9405
  handleChange,
8650
- options,
8651
9406
  config,
8652
9407
  label,
8653
9408
  enabled
8654
9409
  } = props;
8655
9410
  const enumOptions = getEnumOptions(schema);
8656
- const appliedUiSchemaOptions = merge({}, config, props.uischema.options, options);
9411
+ // Merge only UI-schema level options. The enum data `options` array must NOT be merged
9412
+ // here: lodash.merge folds its indices in as numeric keys (0, 1, 2, ...) that then get
9413
+ // spread onto <goa-checkbox> below and trigger React's "Invalid attribute name" warning.
9414
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
8657
9415
  return jsx(Checkboxes, {
8658
9416
  orientation: (_uischema$options = uischema.options) != null && _uischema$options.orientation ? (_uischema$options2 = uischema.options) == null ? void 0 : _uischema$options2.orientation : 'vertical',
8659
9417
  testId: `${label || id}-jsonforms-checkboxes`,
@@ -8678,7 +9436,8 @@ const CheckboxGroup = props => {
8678
9436
  newData = newData.filter(item => item !== enumValue);
8679
9437
  }
8680
9438
  handleChange(path, newData.length === 0 ? undefined : newData);
8681
- }
9439
+ },
9440
+ mt: "s"
8682
9441
  }), enumValue);
8683
9442
  })
8684
9443
  });
@@ -9317,7 +10076,7 @@ const DataTable = ({
9317
10076
  columnLabels
9318
10077
  }) => {
9319
10078
  var _Object$keys;
9320
- return jsxs(GoabTable, {
10079
+ return jsxs(GoabTable$1, {
9321
10080
  width: "100%",
9322
10081
  children: [jsx("thead", {
9323
10082
  children: jsx("tr", {
@@ -10662,7 +11421,6 @@ const GoAInputBaseTableReview = props => {
10662
11421
  })]
10663
11422
  }), stepId !== undefined && !((_uischema$options6 = uischema.options) != null && (_uischema$options6 = _uischema$options6.componentProps) != null && _uischema$options6.readOnly) && jsx(GoabButton, {
10664
11423
  type: "tertiary",
10665
- size: "compact",
10666
11424
  onClick: handleChangeClick,
10667
11425
  children: "Change"
10668
11426
  })]
@@ -10944,7 +11702,7 @@ const LayoutRenderer = ({
10944
11702
  if (direction === 'row') {
10945
11703
  return jsx(Visible, {
10946
11704
  "$visible": visible,
10947
- children: jsx(GoabGrid, {
11705
+ children: jsx(GoabGrid$1, {
10948
11706
  minChildWidth: width || '10ch',
10949
11707
  children: renderLayoutElements(elements, schema, path, enabled, renderers, cells)
10950
11708
  })
@@ -11455,8 +12213,7 @@ const FullNameControlReview = props => {
11455
12213
  children: " (required)"
11456
12214
  })]
11457
12215
  }), stepId !== undefined && !((_uischema$options = uischema.options) != null && (_uischema$options = _uischema$options.componentProps) != null && _uischema$options.readOnly) && jsx(GoabButton, {
11458
- type: "tertiary",
11459
- size: "compact",
12216
+ type: "text",
11460
12217
  onClick: () => context == null ? void 0 : context.goToPage(stepId, uischema.scope),
11461
12218
  testId: `${fieldName}-change-btn`,
11462
12219
  children: "Change"
@@ -11504,8 +12261,7 @@ const FullNameDobReviewControl = props => {
11504
12261
  children: " (required)"
11505
12262
  })]
11506
12263
  }), stepId !== undefined && !((_uischema$options2 = uischema.options) != null && (_uischema$options2 = _uischema$options2.componentProps) != null && _uischema$options2.readOnly) && jsx(GoabButton, {
11507
- type: "tertiary",
11508
- size: "compact",
12264
+ type: "text",
11509
12265
  onClick: () => context == null ? void 0 : context.goToPage(stepId, uischema.scope),
11510
12266
  testId: `${fieldName}-change-btn`,
11511
12267
  children: "Change"
@@ -11894,8 +12650,7 @@ const ContractInfoControlReview = props => {
11894
12650
  children: [jsx(ReviewLabel, {
11895
12651
  children: fieldLabel
11896
12652
  }), stepId !== undefined && !((_uischema$options = uischema.options) != null && (_uischema$options = _uischema$options.componentProps) != null && _uischema$options.readOnly) && jsx(GoabButton, {
11897
- type: "tertiary",
11898
- size: "compact",
12653
+ type: "text",
11899
12654
  onClick: () => context == null ? void 0 : context.goToPage(stepId, uischema.scope),
11900
12655
  testId: `${fieldName}-change-btn`,
11901
12656
  children: "Change"
@@ -13071,6 +13826,7 @@ const PrimitiveArrayControl = props => {
13071
13826
  checked: checked,
13072
13827
  disabled: !enabled,
13073
13828
  testId: `${value}-checkbox`,
13829
+ mt: "s",
13074
13830
  onChange: detail => {
13075
13831
  let newValue = [...items];
13076
13832
  if (detail.value) {
@@ -13500,7 +14256,7 @@ const AddressLoopUpControlTableReview = props => {
13500
14256
  children: " (required)"
13501
14257
  })]
13502
14258
  }), showButton && stepId !== undefined && !((_uischema$options2 = uischema.options) != null && (_uischema$options2 = _uischema$options2.componentProps) != null && _uischema$options2.readOnly) && jsx(GoabButton, {
13503
- type: "tertiary",
14259
+ type: "text",
13504
14260
  size: "compact",
13505
14261
  onClick: () => formStepperCtx == null ? void 0 : formStepperCtx.goToPage(stepId, targetScope),
13506
14262
  testId: "address-change-btn",
@@ -13526,7 +14282,7 @@ const AddressLoopUpControlTableReview = props => {
13526
14282
  children: [jsx(ReviewLabel, {
13527
14283
  children: `${isAlbertaAddress ? 'Alberta' : 'Canada'} postal address`
13528
14284
  }), stepId !== undefined && !((_uischema$options3 = uischema.options) != null && (_uischema$options3 = _uischema$options3.componentProps) != null && _uischema$options3.readOnly) && jsx(GoabButton, {
13529
- type: "tertiary",
14285
+ type: "text",
13530
14286
  size: "compact",
13531
14287
  onClick: () => formStepperCtx == null ? void 0 : formStepperCtx.goToPage(stepId, targetScope),
13532
14288
  testId: "address-change-btn",
@@ -13656,20 +14412,20 @@ const GoAGroupControlComponent = props => {
13656
14412
  const accent = componentProps == null ? void 0 : componentProps.accent;
13657
14413
  return jsxs(Visible, {
13658
14414
  "$visible": visible,
13659
- children: [accent === 'thick' && jsx(GoabContainer, Object.assign({
14415
+ children: [accent === 'thick' && jsx(GoabContainer$1, Object.assign({
13660
14416
  heading: group.label
13661
14417
  }, componentProps, {
13662
14418
  children: renderLayoutElements(group.elements, schema, path, enabled, renderers, cells)
13663
14419
  })), (accent === 'thin' || accent === 'filled') && jsxs("div", {
13664
14420
  children: [group.label && jsx("h3", {
13665
14421
  children: group.label
13666
- }), jsx(GoabContainer, Object.assign({}, componentProps, {
14422
+ }), jsx(GoabContainer$1, Object.assign({}, componentProps, {
13667
14423
  children: renderLayoutElements(group.elements, schema, path, enabled, renderers, cells)
13668
14424
  }))]
13669
14425
  }), componentProps && !accent && jsxs("div", {
13670
14426
  children: [group.label && jsx("h3", {
13671
14427
  children: group.label
13672
- }), jsx(GoabContainer, Object.assign({}, componentProps, {
14428
+ }), jsx(GoabContainer$1, Object.assign({}, componentProps, {
13673
14429
  children: renderLayoutElements(group.elements, schema, path, enabled, renderers, cells)
13674
14430
  }))]
13675
14431
  }), !componentProps && jsxs("div", {
@@ -13677,7 +14433,7 @@ const GoAGroupControlComponent = props => {
13677
14433
  children: group.label
13678
14434
  }), isStepperReview ? jsx(Fragment, {
13679
14435
  children: renderLayoutElements(group.elements, schema, path, enabled, renderers, cells)
13680
- }) : jsx(GoabContainer, {
14436
+ }) : jsx(GoabContainer$1, {
13681
14437
  children: renderLayoutElements(group.elements, schema, path, enabled, renderers, cells)
13682
14438
  })]
13683
14439
  })]
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@abgov/jsonforms-components",
3
- "version": "2.69.0",
3
+ "version": "2.70.1",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Government of Alberta - React renderers for JSON Forms based on the design system.",
6
6
  "repository": "https://github.com/GovAlta/adsp-monorepo",
7
7
  "peerDependencies": {
8
8
  "@abgov/react-components": "^6.9.3",
9
- "@abgov/ui-components-common": "1.9.1",
9
+ "@abgov/ui-components-common": "2.2.1",
10
10
  "@jsonforms/core": "^3.1.0",
11
11
  "@jsonforms/react": "^3.1.0",
12
12
  "react": "^18.0.0",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-22T15:10:21.951Z",
4
- "sourceCommit": "813cb678891e28cf6ee0066498302eb66248289f",
3
+ "generatedAt": "2026-07-24T15:27:00.393Z",
4
+ "sourceCommit": "8a81c2092c7077517f68eff20e8351c2a681f841",
5
5
  "sourcePath": "libs/jsonforms-components/src/index.ts",
6
6
  "rendererCount": 33,
7
7
  "renderers": [