@elmeragroup/fuse 0.1.0-canary.39 → 0.1.0-canary.40
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/components/text-field/text-field-variants.d.ts +6 -0
- package/components/text-field/text-field-variants.d.ts.map +1 -1
- package/components/text-field/text-field-variants.js +3 -1
- package/components/text-field/text-field-variants.js.map +1 -1
- package/components/text-field/text-field.js +2 -2
- package/components/text-field/text-field.js.map +1 -1
- package/package.json +2 -2
- package/styles.css +3 -0
|
@@ -13,6 +13,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
13
13
|
input: string;
|
|
14
14
|
label: string;
|
|
15
15
|
container: string;
|
|
16
|
+
inputContainer: string;
|
|
16
17
|
description: string;
|
|
17
18
|
};
|
|
18
19
|
inline: {
|
|
@@ -38,6 +39,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
38
39
|
labelContainer: string;
|
|
39
40
|
label: string;
|
|
40
41
|
container: string;
|
|
42
|
+
inputContainer: string;
|
|
41
43
|
description: string;
|
|
42
44
|
iconContainer: string;
|
|
43
45
|
}, undefined, {
|
|
@@ -48,6 +50,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
48
50
|
input: string;
|
|
49
51
|
label: string;
|
|
50
52
|
container: string;
|
|
53
|
+
inputContainer: string;
|
|
51
54
|
description: string;
|
|
52
55
|
};
|
|
53
56
|
inline: {
|
|
@@ -73,6 +76,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
73
76
|
labelContainer: string;
|
|
74
77
|
label: string;
|
|
75
78
|
container: string;
|
|
79
|
+
inputContainer: string;
|
|
76
80
|
description: string;
|
|
77
81
|
iconContainer: string;
|
|
78
82
|
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
@@ -83,6 +87,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
83
87
|
input: string;
|
|
84
88
|
label: string;
|
|
85
89
|
container: string;
|
|
90
|
+
inputContainer: string;
|
|
86
91
|
description: string;
|
|
87
92
|
};
|
|
88
93
|
inline: {
|
|
@@ -108,6 +113,7 @@ export declare const textFieldVariants: import("tailwind-variants").TVReturnType
|
|
|
108
113
|
labelContainer: string;
|
|
109
114
|
label: string;
|
|
110
115
|
container: string;
|
|
116
|
+
inputContainer: string;
|
|
111
117
|
description: string;
|
|
112
118
|
iconContainer: string;
|
|
113
119
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-field-variants.d.ts","names":[],"sources":["../../../src/components/text-field/text-field-variants.ts"],"mappings":";;;;;;;qBAca,+CAAiB;;
|
|
1
|
+
{"version":3,"file":"text-field-variants.d.ts","names":[],"sources":["../../../src/components/text-field/text-field-variants.ts"],"mappings":";;;;;;;qBAca,+CAAiB;;IAexB;MACE;MACA;MACA;MACA;MACA;MAIA;MACA;;IAEF;MACE;MAMA;;;;IAKF;MACE;;;;IAIF;MACE;MACA"}
|
|
@@ -18,6 +18,7 @@ const textFieldVariants = tv({
|
|
|
18
18
|
labelContainer: frame.labelRow(),
|
|
19
19
|
label: "",
|
|
20
20
|
container: frame.content(),
|
|
21
|
+
inputContainer: "relative",
|
|
21
22
|
description: frame.description(),
|
|
22
23
|
iconContainer: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 [&>svg]:size-4"
|
|
23
24
|
},
|
|
@@ -29,7 +30,8 @@ const textFieldVariants = tv({
|
|
|
29
30
|
input: "text-lg rounded-none border-none p-0",
|
|
30
31
|
label: "text-muted-foreground",
|
|
31
32
|
container: "flex flex-row items-center gap-3",
|
|
32
|
-
|
|
33
|
+
inputContainer: "min-w-0 flex-1",
|
|
34
|
+
description: "max-w-1/2 text-muted-foreground"
|
|
33
35
|
},
|
|
34
36
|
inline: {
|
|
35
37
|
base: "group/inline-field",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-field-variants.js","names":[],"sources":["../../../src/components/text-field/text-field-variants.ts"],"sourcesContent":["import { tv } from \"tailwind-variants\";\n\nimport { cn } from \"../../styles/cn\";\nimport { cardVariants } from \"../card/card-variants\";\nimport { fieldFrameVariants } from \"../field/field-frame\";\n\nconst frame = fieldFrameVariants();\n\n/**\n * PUBLIC slot recipe. Layout slots compose FieldFrame\n * recipe slots so the documented names stay stable while the frame owns the defaults.\n * No size axis — the inner Input pins the md field-box rung. The ref's unused textarea\n * slot is omitted.\n */\nexport const textFieldVariants = tv({\n slots: {\n base: frame.root(),\n fieldGroup: \"w-auto\",\n input: \"\",\n labelContainer: frame.labelRow(),\n label: \"\",\n container: frame.content(),\n description: frame.description(),\n iconContainer: \"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 [&>svg]:size-4\",\n },\n variants: {\n variant: {\n card: {\n base: cn(cardVariants().base(), \"gap-0 px-6 py-4\"),\n fieldGroup: \"w-full border-none\",\n input: \"text-lg rounded-none border-none p-0\",\n label: \"text-muted-foreground\",\n container: \"flex flex-row items-center gap-3\",\n description: \"text-muted-foreground\",\n },\n inline: {\n base: \"group/inline-field\",\n // The input is the whole control, so the wrapper's hover repaints it only while it is\n // enabled: a disabled inline field keeps its resting border and fill (the state face).\n // The gate negates fuse.css's one `disabled-state` predicate. `not-disabled-state:`\n // adds no specificity and sorts with the `not-*` variants ahead of `focus-visible:`,\n // so `focus-visible:border-ring` still wins on a hovered, focused field.\n fieldGroup:\n \"border-transparent bg-transparent group-focus-within/inline-field:bg-background group-hover/inline-field:not-disabled-state:border-input group-hover/inline-field:not-disabled-state:bg-background group-data-[invalid]/inline-field:border-error group-data-[invalid]/inline-field:bg-background focus-visible:border-ring\",\n },\n },\n hidden: {\n true: {\n base: \"hidden\",\n },\n },\n isIconActive: {\n true: {\n fieldGroup: \"relative\",\n input: \"truncate overflow-hidden pr-10 whitespace-nowrap\",\n },\n },\n },\n defaultVariants: {\n hidden: false,\n isIconActive: false,\n },\n});\n"],"mappings":";;;;;AAMA,MAAM,QAAQ,mBAAmB;;;;;;;AAQjC,MAAa,oBAAoB,GAAG;CAClC,OAAO;EACL,MAAM,MAAM,KAAK;EACjB,YAAY;EACZ,OAAO;EACP,gBAAgB,MAAM,SAAS;EAC/B,OAAO;EACP,WAAW,MAAM,QAAQ;
|
|
1
|
+
{"version":3,"file":"text-field-variants.js","names":[],"sources":["../../../src/components/text-field/text-field-variants.ts"],"sourcesContent":["import { tv } from \"tailwind-variants\";\n\nimport { cn } from \"../../styles/cn\";\nimport { cardVariants } from \"../card/card-variants\";\nimport { fieldFrameVariants } from \"../field/field-frame\";\n\nconst frame = fieldFrameVariants();\n\n/**\n * PUBLIC slot recipe. Layout slots compose FieldFrame\n * recipe slots so the documented names stay stable while the frame owns the defaults.\n * No size axis — the inner Input pins the md field-box rung. The ref's unused textarea\n * slot is omitted.\n */\nexport const textFieldVariants = tv({\n slots: {\n base: frame.root(),\n fieldGroup: \"w-auto\",\n input: \"\",\n labelContainer: frame.labelRow(),\n label: \"\",\n container: frame.content(),\n // The input's wrapper and the trailing icon's positioning box.\n inputContainer: \"relative\",\n description: frame.description(),\n iconContainer: \"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 [&>svg]:size-4\",\n },\n variants: {\n variant: {\n card: {\n base: cn(cardVariants().base(), \"gap-0 px-6 py-4\"),\n fieldGroup: \"w-full border-none\",\n input: \"text-lg rounded-none border-none p-0\",\n label: \"text-muted-foreground\",\n container: \"flex flex-row items-center gap-3\",\n // The wrapper's zero flex basis sizes it from the row, not from the input's intrinsic\n // width, so the input fills whatever the description leaves. The description takes at\n // most half the row: past that it wraps, so it can never squeeze the input away.\n inputContainer: \"min-w-0 flex-1\",\n description: \"max-w-1/2 text-muted-foreground\",\n },\n inline: {\n base: \"group/inline-field\",\n // The input is the whole control, so the wrapper's hover repaints it only while it is\n // enabled: a disabled inline field keeps its resting border and fill (the state face).\n // The gate negates fuse.css's one `disabled-state` predicate. `not-disabled-state:`\n // adds no specificity and sorts with the `not-*` variants ahead of `focus-visible:`,\n // so `focus-visible:border-ring` still wins on a hovered, focused field.\n fieldGroup:\n \"border-transparent bg-transparent group-focus-within/inline-field:bg-background group-hover/inline-field:not-disabled-state:border-input group-hover/inline-field:not-disabled-state:bg-background group-data-[invalid]/inline-field:border-error group-data-[invalid]/inline-field:bg-background focus-visible:border-ring\",\n },\n },\n hidden: {\n true: {\n base: \"hidden\",\n },\n },\n isIconActive: {\n true: {\n fieldGroup: \"relative\",\n input: \"truncate overflow-hidden pr-10 whitespace-nowrap\",\n },\n },\n },\n defaultVariants: {\n hidden: false,\n isIconActive: false,\n },\n});\n"],"mappings":";;;;;AAMA,MAAM,QAAQ,mBAAmB;;;;;;;AAQjC,MAAa,oBAAoB,GAAG;CAClC,OAAO;EACL,MAAM,MAAM,KAAK;EACjB,YAAY;EACZ,OAAO;EACP,gBAAgB,MAAM,SAAS;EAC/B,OAAO;EACP,WAAW,MAAM,QAAQ;EAEzB,gBAAgB;EAChB,aAAa,MAAM,YAAY;EAC/B,eAAe;CACjB;CACA,UAAU;EACR,SAAS;GACP,MAAM;IACJ,MAAM,GAAG,aAAa,CAAC,CAAC,KAAK,GAAG,iBAAiB;IACjD,YAAY;IACZ,OAAO;IACP,OAAO;IACP,WAAW;IAIX,gBAAgB;IAChB,aAAa;GACf;GACA,QAAQ;IACN,MAAM;IAMN,YACE;GACJ;EACF;EACA,QAAQ,EACN,MAAM,EACJ,MAAM,SACR,EACF;EACA,cAAc,EACZ,MAAM;GACJ,YAAY;GACZ,OAAO;EACT,EACF;CACF;CACA,iBAAiB;EACf,QAAQ;EACR,cAAc;CAChB;AACF,CAAC"}
|
|
@@ -10,7 +10,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* change handler reads the input's value for `onChange`.
|
|
11
11
|
*/
|
|
12
12
|
function TextField({ label, description, errorMessage, value, defaultValue, onChange, name, placeholder, hidden = false, isReadOnly = false, isDisabled = false, isInvalid = false, isRequired = false, isPending = false, isSuccess = false, icon, variant, className, ...props }) {
|
|
13
|
-
const { base, input, fieldGroup, iconContainer, label: labelSlot, container, description: descriptionSlot } = textFieldVariants({
|
|
13
|
+
const { base, input, fieldGroup, iconContainer, label: labelSlot, container, inputContainer, description: descriptionSlot } = textFieldVariants({
|
|
14
14
|
variant,
|
|
15
15
|
hidden,
|
|
16
16
|
isIconActive: Boolean(icon)
|
|
@@ -33,7 +33,7 @@ function TextField({ label, description, errorMessage, value, defaultValue, onCh
|
|
|
33
33
|
description,
|
|
34
34
|
errorMessage,
|
|
35
35
|
children: /* @__PURE__ */ jsxs("div", {
|
|
36
|
-
className:
|
|
36
|
+
className: inputContainer(),
|
|
37
37
|
children: [/* @__PURE__ */ jsx(Input, {
|
|
38
38
|
name,
|
|
39
39
|
value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-field.js","names":[],"sources":["../../../src/components/text-field/text-field.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ChangeEvent, ComponentProps, ReactElement, ReactNode } from \"react\";\n\nimport { cn } from \"../../styles/cn\";\nimport { FieldFrame } from \"../field/field-frame\";\nimport { Input } from \"../input/input\";\nimport type { InputProps } from \"../input/input\";\nimport { textFieldVariants } from \"./text-field-variants\";\n\nexport type TextFieldProps = {\n /** Visible label, rendered as `Field.Label`. */\n label?: string;\n /** Supporting copy, rendered as `Field.Description`. */\n description?: string;\n /**\n * Error copy, rendered as `Field.Error` when truthy. Accepts any `ReactNode`. Falsy, the\n * field shows its own validation error instead, such as an error `Form` holds under its\n * `name` or a native constraint message.\n */\n errorMessage?: ReactNode;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. `null` is coerced to `undefined` before reaching the input. */\n defaultValue?: string | null;\n /** Called with the string value, not the native event. */\n onChange?: (value: string) => void;\n /** Native `name` forwarded to the inner input. */\n name?: string;\n /** Native `placeholder` forwarded to the inner input. */\n placeholder?: string;\n /** Hides the root via the recipe and the inner input via the native `hidden` attribute. */\n hidden?: boolean;\n /** Forwards `readOnly` to the inner input. */\n isReadOnly?: boolean;\n /** Forwards `disabled` to `Field.Root` and the inner input. */\n isDisabled?: boolean;\n /** Forwards `invalid` to `Field.Root`. */\n isInvalid?: boolean;\n /** Forwards `required` to the inner input. */\n isRequired?: boolean;\n /** Shows a spinner in the label row. Forces that row to exist even without `label`. */\n isPending?: boolean;\n /** Shows a check in the label row and wins the crossfade over `isPending`. */\n isSuccess?: boolean;\n /** Trailing inline icon. Activates the `isIconActive` recipe axis. */\n icon?: ReactNode;\n /**\n * Digits-only guard, forwarded to the inner `Input`. Non-digit characters are stripped from\n * typing, paste and autofill, so only digits reach `onChange`, and `maxLength` counts digits,\n * so a pasted `912 34 567` fits `maxLength={8}` whole. Sets `inputMode=\"numeric\"` unless the\n * caller passes `inputMode`. Input's `filter` lists the paths where the browser's own length\n * handling still applies.\n */\n filter?: InputProps[\"filter\"];\n /** `card` composes `cardVariants`; `inline` restyles the input chrome. Unset is the plain Input. */\n variant?: \"card\" | \"inline\";\n /** Extra classes, merged onto the root via `cn`. */\n className?: string;\n} & Omit<\n ComponentProps<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"name\" | \"className\" | \"disabled\" | \"readOnly\" | \"required\"\n>;\n\n/**\n * Labeled single-line field composite over Field and Input. Client component, because its\n * change handler reads the input's value for `onChange`.\n */\nexport function TextField({\n label,\n description,\n errorMessage,\n value,\n defaultValue,\n onChange,\n name,\n placeholder,\n hidden = false,\n isReadOnly = false,\n isDisabled = false,\n isInvalid = false,\n isRequired = false,\n isPending = false,\n isSuccess = false,\n icon,\n variant,\n className,\n ...props\n}: TextFieldProps): ReactElement {\n const {\n base,\n input,\n fieldGroup,\n iconContainer,\n label: labelSlot,\n container,\n description: descriptionSlot,\n } = textFieldVariants({\n variant,\n hidden,\n isIconActive: Boolean(icon),\n });\n\n function handleChange(event: ChangeEvent<HTMLInputElement>): void {\n onChange?.(event.currentTarget.value);\n }\n\n return (\n <FieldFrame\n className={cn(base(), className)}\n classNames={{\n label: labelSlot() || undefined,\n content: container(),\n description: descriptionSlot() || undefined,\n }}\n invalid={isInvalid}\n disabled={isDisabled}\n label={label}\n isPending={isPending}\n isSuccess={isSuccess}\n description={description}\n errorMessage={errorMessage}>\n <div className
|
|
1
|
+
{"version":3,"file":"text-field.js","names":[],"sources":["../../../src/components/text-field/text-field.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ChangeEvent, ComponentProps, ReactElement, ReactNode } from \"react\";\n\nimport { cn } from \"../../styles/cn\";\nimport { FieldFrame } from \"../field/field-frame\";\nimport { Input } from \"../input/input\";\nimport type { InputProps } from \"../input/input\";\nimport { textFieldVariants } from \"./text-field-variants\";\n\nexport type TextFieldProps = {\n /** Visible label, rendered as `Field.Label`. */\n label?: string;\n /** Supporting copy, rendered as `Field.Description`. */\n description?: string;\n /**\n * Error copy, rendered as `Field.Error` when truthy. Accepts any `ReactNode`. Falsy, the\n * field shows its own validation error instead, such as an error `Form` holds under its\n * `name` or a native constraint message.\n */\n errorMessage?: ReactNode;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. `null` is coerced to `undefined` before reaching the input. */\n defaultValue?: string | null;\n /** Called with the string value, not the native event. */\n onChange?: (value: string) => void;\n /** Native `name` forwarded to the inner input. */\n name?: string;\n /** Native `placeholder` forwarded to the inner input. */\n placeholder?: string;\n /** Hides the root via the recipe and the inner input via the native `hidden` attribute. */\n hidden?: boolean;\n /** Forwards `readOnly` to the inner input. */\n isReadOnly?: boolean;\n /** Forwards `disabled` to `Field.Root` and the inner input. */\n isDisabled?: boolean;\n /** Forwards `invalid` to `Field.Root`. */\n isInvalid?: boolean;\n /** Forwards `required` to the inner input. */\n isRequired?: boolean;\n /** Shows a spinner in the label row. Forces that row to exist even without `label`. */\n isPending?: boolean;\n /** Shows a check in the label row and wins the crossfade over `isPending`. */\n isSuccess?: boolean;\n /** Trailing inline icon. Activates the `isIconActive` recipe axis. */\n icon?: ReactNode;\n /**\n * Digits-only guard, forwarded to the inner `Input`. Non-digit characters are stripped from\n * typing, paste and autofill, so only digits reach `onChange`, and `maxLength` counts digits,\n * so a pasted `912 34 567` fits `maxLength={8}` whole. Sets `inputMode=\"numeric\"` unless the\n * caller passes `inputMode`. Input's `filter` lists the paths where the browser's own length\n * handling still applies.\n */\n filter?: InputProps[\"filter\"];\n /** `card` composes `cardVariants`; `inline` restyles the input chrome. Unset is the plain Input. */\n variant?: \"card\" | \"inline\";\n /** Extra classes, merged onto the root via `cn`. */\n className?: string;\n} & Omit<\n ComponentProps<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"name\" | \"className\" | \"disabled\" | \"readOnly\" | \"required\"\n>;\n\n/**\n * Labeled single-line field composite over Field and Input. Client component, because its\n * change handler reads the input's value for `onChange`.\n */\nexport function TextField({\n label,\n description,\n errorMessage,\n value,\n defaultValue,\n onChange,\n name,\n placeholder,\n hidden = false,\n isReadOnly = false,\n isDisabled = false,\n isInvalid = false,\n isRequired = false,\n isPending = false,\n isSuccess = false,\n icon,\n variant,\n className,\n ...props\n}: TextFieldProps): ReactElement {\n const {\n base,\n input,\n fieldGroup,\n iconContainer,\n label: labelSlot,\n container,\n inputContainer,\n description: descriptionSlot,\n } = textFieldVariants({\n variant,\n hidden,\n isIconActive: Boolean(icon),\n });\n\n function handleChange(event: ChangeEvent<HTMLInputElement>): void {\n onChange?.(event.currentTarget.value);\n }\n\n return (\n <FieldFrame\n className={cn(base(), className)}\n classNames={{\n label: labelSlot() || undefined,\n content: container(),\n description: descriptionSlot() || undefined,\n }}\n invalid={isInvalid}\n disabled={isDisabled}\n label={label}\n isPending={isPending}\n isSuccess={isSuccess}\n description={description}\n errorMessage={errorMessage}>\n <div className={inputContainer()}>\n <Input\n name={name}\n value={value}\n defaultValue={defaultValue ?? undefined}\n onChange={handleChange}\n placeholder={placeholder}\n // fieldGroup's default would override the input's w-full.\n className={cn(input(), variant ? fieldGroup() : null)}\n {...props}\n readOnly={isReadOnly}\n required={isRequired}\n hidden={hidden}\n disabled={isDisabled}\n />\n {icon ? <div className={iconContainer()}>{icon}</div> : null}\n </div>\n </FieldFrame>\n );\n}\n\nTextField.displayName = \"TextField\";\n"],"mappings":";;;;;;;;;;;AAoEA,SAAgB,UAAU,EACxB,OACA,aACA,cACA,OACA,cACA,UACA,MACA,aACA,SAAS,OACT,aAAa,OACb,aAAa,OACb,YAAY,OACZ,aAAa,OACb,YAAY,OACZ,YAAY,OACZ,MACA,SACA,WACA,GAAG,SAC4B;CAC/B,MAAM,EACJ,MACA,OACA,YACA,eACA,OAAO,WACP,WACA,gBACA,aAAa,oBACX,kBAAkB;EACpB;EACA;EACA,cAAc,QAAQ,IAAI;CAC5B,CAAC;CAED,SAAS,aAAa,OAA4C;EAChE,WAAW,MAAM,cAAc,KAAK;CACtC;CAEA,OACE,oBAAC,YAAD;EACE,WAAW,GAAG,KAAK,GAAG,SAAS;EAC/B,YAAY;GACV,OAAO,UAAU,KAAK,KAAA;GACtB,SAAS,UAAU;GACnB,aAAa,gBAAgB,KAAK,KAAA;EACpC;EACA,SAAS;EACT,UAAU;EACH;EACI;EACA;EACE;EACC;EACd,UAAA,qBAAC,OAAD;GAAK,WAAW,eAAe;GAA/B,UAAA,CACE,oBAAC,OAAD;IACQ;IACC;IACP,cAAc,gBAAgB,KAAA;IAC9B,UAAU;IACG;IAEb,WAAW,GAAG,MAAM,GAAG,UAAU,WAAW,IAAI,IAAI;IACpD,GAAI;IACJ,UAAU;IACV,UAAU;IACF;IACR,UAAU;GACX,CAAA,GACA,OAAO,oBAAC,OAAD;IAAK,WAAW,cAAc;IAAI,UAAA;GAAU,CAAA,IAAI,IACrD;;CACK,CAAA;AAEhB;AAEA,UAAU,cAAc"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elmeragroup/fuse",
|
|
3
|
-
"version": "0.1.0-canary.
|
|
3
|
+
"version": "0.1.0-canary.40",
|
|
4
4
|
"description": "Fuse — whitelabel React components for Elmera Group's energy brands. One package, twenty theme permutations, ESM-only.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
"access": "public"
|
|
364
364
|
},
|
|
365
365
|
"elmeraRelease": {
|
|
366
|
-
"commit": "
|
|
366
|
+
"commit": "59f38a5c44908fd5e4395024413fcb7b195e11c7",
|
|
367
367
|
"channel": "canary"
|
|
368
368
|
}
|
|
369
369
|
}
|