@burdenoff/microfe-devportal 2026.917.1 → 2026.917.3

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.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * MultiSelectCombobox — a searchable, checkbox multi-select.
3
+ * @module devportal/components
4
+ *
5
+ * Drop-in replacement for a flat checkbox-pill grid wherever the option
6
+ * list can grow past a handful of items (e.g. Compatible Products, which
7
+ * lists every active platform product). A closed-by-default trigger opens
8
+ * a searchable popover list with a checkmark per selected item; picking an
9
+ * item toggles it without closing the popover, and every selected item
10
+ * renders as a removable chip below the trigger.
11
+ *
12
+ * Built entirely on the existing fe-libs `ui` primitives (Command + Popover)
13
+ * — no new dependency. Mirrors the proven Popover+Command composition used
14
+ * by intelwatchtower's `Combobox` (single-select) and manufacturedops'
15
+ * `TagPicker` (chips-below-trigger), adapted for a fixed, fully-client-side
16
+ * option list (no server search/create needed here).
17
+ */
18
+ export interface MultiSelectOption {
19
+ value: string;
20
+ label: string;
21
+ /** Optional secondary text rendered muted next to the label. */
22
+ hint?: string;
23
+ }
24
+ interface MultiSelectComboboxProps {
25
+ options: MultiSelectOption[];
26
+ selected: string[];
27
+ onChange: (selected: string[]) => void;
28
+ placeholder?: string;
29
+ searchPlaceholder?: string;
30
+ emptyText?: string;
31
+ id?: string;
32
+ disabled?: boolean;
33
+ className?: string;
34
+ error?: boolean;
35
+ }
36
+ export declare function MultiSelectCombobox({ options, selected, onChange, placeholder, searchPlaceholder, emptyText, id, disabled, className, error, }: MultiSelectComboboxProps): import("react").JSX.Element;
37
+ export {};
38
+ //# sourceMappingURL=MultiSelectCombobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectCombobox.d.ts","sourceRoot":"","sources":["../../../src/devportal/components/MultiSelectCombobox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,wBAAwB;IAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAuB,EACvB,iBAA6B,EAC7B,SAAyB,EACzB,EAAE,EACF,QAAgB,EAChB,SAAS,EACT,KAAa,GACd,EAAE,wBAAwB,+BAyG1B"}
@@ -0,0 +1,80 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { useMemo as t, useState as n } from "react";
3
+ import { Check as r, ChevronDown as i, X as a } from "lucide-react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import { Command as c, CommandEmpty as l, CommandInput as u, CommandItem as d, CommandList as f, Popover as p, PopoverContent as m, PopoverTrigger as h } from "@burdenoff/fe-libs/ui";
6
+ //#region src/devportal/components/MultiSelectCombobox.tsx
7
+ function g({ options: g, selected: _, onChange: v, placeholder: y = "Select…", searchPlaceholder: b = "Search…", emptyText: x = "No matches.", id: S, disabled: C = !1, className: w, error: T = !1 }) {
8
+ let [E, D] = n(!1), O = t(() => new Set(_), [_]), k = t(() => g.filter((e) => O.has(e.value)), [g, O]), A = (e) => {
9
+ v(O.has(e) ? _.filter((t) => t !== e) : [..._, e]);
10
+ };
11
+ return /* @__PURE__ */ s("div", {
12
+ className: w,
13
+ children: [/* @__PURE__ */ s(p, {
14
+ open: E,
15
+ onOpenChange: D,
16
+ children: [/* @__PURE__ */ o(h, {
17
+ asChild: !0,
18
+ children: /* @__PURE__ */ s("button", {
19
+ type: "button",
20
+ id: S,
21
+ role: "combobox",
22
+ "aria-expanded": E,
23
+ disabled: C,
24
+ className: e("flex h-10 w-full items-center justify-between gap-2 rounded-input border bg-bg-surface px-3 py-2 text-sm transition-colors duration-200 focus:border-border-focus focus:outline-none focus:shadow-[var(--shadow-focus)] focus:ring-1 focus:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50", T ? "border-status-error-bg/50" : "border-border-default", k.length > 0 ? "text-text-primary" : "text-text-placeholder"),
25
+ children: [/* @__PURE__ */ o("span", {
26
+ className: "truncate",
27
+ children: k.length > 0 ? `${k.length} selected` : y
28
+ }), /* @__PURE__ */ o(i, {
29
+ className: "size-4 shrink-0 text-text-muted",
30
+ "aria-hidden": "true"
31
+ })]
32
+ })
33
+ }), /* @__PURE__ */ o(m, {
34
+ align: "start",
35
+ className: "w-[var(--radix-popover-trigger-width)] p-0 border-border-subtle bg-bg-elevated",
36
+ children: /* @__PURE__ */ s(c, {
37
+ className: "bg-bg-elevated text-text-primary",
38
+ children: [/* @__PURE__ */ o(u, { placeholder: b }), /* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(l, { children: x }), g.map((t) => {
39
+ let n = O.has(t.value);
40
+ return /* @__PURE__ */ s(d, {
41
+ value: t.label,
42
+ onSelect: () => A(t.value),
43
+ children: [
44
+ /* @__PURE__ */ o(r, {
45
+ className: e("size-4 shrink-0", n ? "opacity-100" : "opacity-0"),
46
+ "aria-hidden": "true"
47
+ }),
48
+ /* @__PURE__ */ o("span", {
49
+ className: "truncate",
50
+ children: t.label
51
+ }),
52
+ t.hint && /* @__PURE__ */ o("span", {
53
+ className: "ml-auto truncate text-xs text-text-tertiary",
54
+ children: t.hint
55
+ })
56
+ ]
57
+ }, t.value);
58
+ })] })]
59
+ })
60
+ })]
61
+ }), k.length > 0 && /* @__PURE__ */ o("div", {
62
+ className: "mt-2 flex flex-wrap gap-1.5",
63
+ children: k.map((e) => /* @__PURE__ */ s("span", {
64
+ className: "inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-sunken px-2 py-1 text-xs text-text-primary",
65
+ children: [e.label, /* @__PURE__ */ o("button", {
66
+ type: "button",
67
+ onClick: () => A(e.value),
68
+ disabled: C,
69
+ className: "text-text-secondary hover:text-text-primary disabled:cursor-not-allowed",
70
+ "aria-label": `Remove ${e.label}`,
71
+ children: /* @__PURE__ */ o(a, { className: "size-3" })
72
+ })]
73
+ }, e.value))
74
+ })]
75
+ });
76
+ }
77
+ //#endregion
78
+ export { g as MultiSelectCombobox };
79
+
80
+ //# sourceMappingURL=MultiSelectCombobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectCombobox.js","names":[],"sources":["../../../src/devportal/components/MultiSelectCombobox.tsx"],"sourcesContent":["/**\n * MultiSelectCombobox — a searchable, checkbox multi-select.\n * @module devportal/components\n *\n * Drop-in replacement for a flat checkbox-pill grid wherever the option\n * list can grow past a handful of items (e.g. Compatible Products, which\n * lists every active platform product). A closed-by-default trigger opens\n * a searchable popover list with a checkmark per selected item; picking an\n * item toggles it without closing the popover, and every selected item\n * renders as a removable chip below the trigger.\n *\n * Built entirely on the existing fe-libs `ui` primitives (Command + Popover)\n * — no new dependency. Mirrors the proven Popover+Command composition used\n * by intelwatchtower's `Combobox` (single-select) and manufacturedops'\n * `TagPicker` (chips-below-trigger), adapted for a fixed, fully-client-side\n * option list (no server search/create needed here).\n */\n\nimport { useMemo, useState } from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"../utils/cn\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n /** Optional secondary text rendered muted next to the label. */\n hint?: string;\n}\n\ninterface MultiSelectComboboxProps {\n options: MultiSelectOption[];\n selected: string[];\n onChange: (selected: string[]) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n id?: string;\n disabled?: boolean;\n className?: string;\n error?: boolean;\n}\n\nexport function MultiSelectCombobox({\n options,\n selected,\n onChange,\n placeholder = \"Select…\",\n searchPlaceholder = \"Search…\",\n emptyText = \"No matches.\",\n id,\n disabled = false,\n className,\n error = false,\n}: MultiSelectComboboxProps) {\n const [open, setOpen] = useState(false);\n const selectedSet = useMemo(() => new Set(selected), [selected]);\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedSet.has(o.value)),\n [options, selectedSet],\n );\n\n const toggle = (value: string) => {\n onChange(\n selectedSet.has(value)\n ? selected.filter((v) => v !== value)\n : [...selected, value],\n );\n };\n\n return (\n <div className={className}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"flex h-10 w-full items-center justify-between gap-2 rounded-input border bg-bg-surface px-3 py-2 text-sm transition-colors duration-200 focus:border-border-focus focus:outline-none focus:shadow-[var(--shadow-focus)] focus:ring-1 focus:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50\",\n error ? \"border-status-error-bg/50\" : \"border-border-default\",\n selectedOptions.length > 0\n ? \"text-text-primary\"\n : \"text-text-placeholder\",\n )}\n >\n <span className=\"truncate\">\n {selectedOptions.length > 0\n ? `${selectedOptions.length} selected`\n : placeholder}\n </span>\n <ChevronDown\n className=\"size-4 shrink-0 text-text-muted\"\n aria-hidden=\"true\"\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] p-0 border-border-subtle bg-bg-elevated\"\n >\n <Command className=\"bg-bg-elevated text-text-primary\">\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n {options.map((o) => {\n const checked = selectedSet.has(o.value);\n return (\n <CommandItem\n key={o.value}\n value={o.label}\n onSelect={() => toggle(o.value)}\n >\n <Check\n className={cn(\n \"size-4 shrink-0\",\n checked ? \"opacity-100\" : \"opacity-0\",\n )}\n aria-hidden=\"true\"\n />\n <span className=\"truncate\">{o.label}</span>\n {o.hint && (\n <span className=\"ml-auto truncate text-xs text-text-tertiary\">\n {o.hint}\n </span>\n )}\n </CommandItem>\n );\n })}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n\n {selectedOptions.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {selectedOptions.map((o) => (\n <span\n key={o.value}\n className=\"inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-sunken px-2 py-1 text-xs text-text-primary\"\n >\n {o.label}\n <button\n type=\"button\"\n onClick={() => toggle(o.value)}\n disabled={disabled}\n className=\"text-text-secondary hover:text-text-primary disabled:cursor-not-allowed\"\n aria-label={`Remove ${o.label}`}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAoDA,SAAgB,EAAoB,EAClC,YACA,aACA,aACA,iBAAc,WACd,uBAAoB,WACpB,eAAY,eACZ,OACA,cAAW,IACX,cACA,WAAQ,MACmB;CAC3B,IAAM,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,IAAc,QAAc,IAAI,IAAI,EAAS,EAAE,CAAC,EAAS,CAAC,EAC1D,IAAkB,QAChB,EAAQ,QAAQ,MAAM,EAAY,IAAI,EAAE,MAAM,CAAC,EACrD,CAAC,GAAS,EAAY,CACvB,EAEK,KAAU,MAAkB;AAChC,IACE,EAAY,IAAI,EAAM,GAClB,EAAS,QAAQ,MAAM,MAAM,EAAM,GACnC,CAAC,GAAG,GAAU,EAAM,CACzB;;AAGH,QACE,kBAAC,OAAD;EAAgB;YAAhB,CACE,kBAAC,GAAD;GAAe;GAAM,cAAc;aAAnC,CACE,kBAAC,GAAD;IAAgB,SAAA;cACd,kBAAC,UAAD;KACE,MAAK;KACD;KACJ,MAAK;KACL,iBAAe;KACL;KACV,WAAW,EACT,6TACA,IAAQ,8BAA8B,yBACtC,EAAgB,SAAS,IACrB,sBACA,wBACL;eAZH,CAcE,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAgB,SAAS,IACtB,GAAG,EAAgB,OAAO,aAC1B;MACC,CAAA,EACP,kBAAC,GAAD;MACE,WAAU;MACV,eAAY;MACZ,CAAA,CACK;;IACM,CAAA,EACjB,kBAAC,GAAD;IACE,OAAM;IACN,WAAU;cAEV,kBAAC,GAAD;KAAS,WAAU;eAAnB,CACE,kBAAC,GAAD,EAAc,aAAa,GAAqB,CAAA,EAChD,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAe,GAAyB,CAAA,EACvC,EAAQ,KAAK,MAAM;MAClB,IAAM,IAAU,EAAY,IAAI,EAAE,MAAM;AACxC,aACE,kBAAC,GAAD;OAEE,OAAO,EAAE;OACT,gBAAgB,EAAO,EAAE,MAAM;iBAHjC;QAKE,kBAAC,GAAD;SACE,WAAW,EACT,mBACA,IAAU,gBAAgB,YAC3B;SACD,eAAY;SACZ,CAAA;QACF,kBAAC,QAAD;SAAM,WAAU;mBAAY,EAAE;SAAa,CAAA;QAC1C,EAAE,QACD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE;SACE,CAAA;QAEG;SAjBP,EAAE,MAiBK;OAEhB,CACU,EAAA,CAAA,CACN;;IACK,CAAA,CACT;MAET,EAAgB,SAAS,KACxB,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAgB,KAAK,MACpB,kBAAC,QAAD;IAEE,WAAU;cAFZ,CAIG,EAAE,OACH,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAO,EAAE,MAAM;KACpB;KACV,WAAU;KACV,cAAY,UAAU,EAAE;eAExB,kBAAC,GAAD,EAAG,WAAU,UAAW,CAAA;KACjB,CAAA,CACJ;MAbA,EAAE,MAaF,CACP;GACE,CAAA,CAEJ"}
@@ -7,5 +7,6 @@ export { apolloClient, parseGraphQLError, getErrorMessage, isAuthError, isValida
7
7
  export { DevPortalProvider } from './DevPortalProvider';
8
8
  export { useDevportalPermission } from './usePermission';
9
9
  export { useCarrierPickupLocations, capitalizeCarrierName, type CarrierPickupLocation, type UseCarrierPickupLocationsResult, } from './useCarrierPickupLocations';
10
+ export { useProducts, type ProductOption } from './useProducts';
10
11
  export * from '../../generated/global-operations';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,GACrC,MAAM,6BAA6B,CAAC;AAGrC,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,GACrC,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGhE,cAAc,mCAAmC,CAAC"}
@@ -3,3 +3,4 @@ import "./useGraphQL.js";
3
3
  import "./DevPortalProvider.js";
4
4
  import "./usePermission.js";
5
5
  import "./useCarrierPickupLocations.js";
6
+ import "./useProducts.js";
@@ -0,0 +1,18 @@
1
+ export interface ProductOption {
2
+ id: string;
3
+ /**
4
+ * The slug is what actually gets stored in StoreProduct.compatibleProducts
5
+ * and what browseStore/homeGroupedProducts match against — never the
6
+ * catalog row's `id`, which is a different UUID.
7
+ */
8
+ slug: string;
9
+ name: string;
10
+ }
11
+ interface UseProductsResult {
12
+ products: ProductOption[];
13
+ isLoading: boolean;
14
+ error: Error | undefined;
15
+ }
16
+ export declare function useProducts(): UseProductsResult;
17
+ export {};
18
+ //# sourceMappingURL=useProducts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProducts.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/useProducts.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CAU/C"}
@@ -0,0 +1,14 @@
1
+ import { useListProductsForSelectorQuery as e } from "../../generated/global-operations.js";
2
+ //#region src/devportal/hooks/useProducts.ts
3
+ function t() {
4
+ let { data: t, loading: n, error: r } = e({ fetchPolicy: "cache-and-network" });
5
+ return {
6
+ products: t?.platformProducts.items ?? [],
7
+ isLoading: n,
8
+ error: r
9
+ };
10
+ }
11
+ //#endregion
12
+ export { t as useProducts };
13
+
14
+ //# sourceMappingURL=useProducts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProducts.js","names":[],"sources":["../../../src/devportal/hooks/useProducts.ts"],"sourcesContent":["/**\n * Shared hook for fetching the active platform products list — backs the\n * Compatible Products selector on the node/workflow create and edit forms,\n * so publishers pick from every real platform product instead of a\n * hardcoded handful that goes stale as new products launch.\n */\nimport { useListProductsForSelectorQuery } from \"../../generated/global-operations\";\n\nexport interface ProductOption {\n id: string;\n /**\n * The slug is what actually gets stored in StoreProduct.compatibleProducts\n * and what browseStore/homeGroupedProducts match against — never the\n * catalog row's `id`, which is a different UUID.\n */\n slug: string;\n name: string;\n}\n\ninterface UseProductsResult {\n products: ProductOption[];\n isLoading: boolean;\n error: Error | undefined;\n}\n\nexport function useProducts(): UseProductsResult {\n const { data, loading, error } = useListProductsForSelectorQuery({\n fetchPolicy: \"cache-and-network\",\n });\n\n return {\n products: data?.platformProducts.items ?? [],\n isLoading: loading,\n error: error as Error | undefined,\n };\n}\n"],"mappings":";;AAyBA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,SAAM,YAAS,aAAU,EAAgC,EAC/D,aAAa,qBACd,CAAC;AAEF,QAAO;EACL,UAAU,GAAM,iBAAiB,SAAS,EAAE;EAC5C,WAAW;EACJ;EACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"CreateApplicationPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateApplicationPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAgbhC,eAAO,MAAM,qBAAqB,EAAE,EAsjBnC,CAAC"}
1
+ {"version":3,"file":"CreateApplicationPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateApplicationPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAwahC,eAAO,MAAM,qBAAqB,EAAE,EA0hBnC,CAAC"}