@powerhousedao/design-system 1.14.0 → 1.16.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/scalars/components/form/form.js +45 -33
- package/dist/scalars/components/form/form.js.map +1 -1
- package/dist/scalars/components/fragments/badge/badge.js +6 -6
- package/dist/scalars/components/fragments/badge/badge.js.map +1 -1
- package/dist/scalars/components/fragments/form-label/form-label.js +14 -14
- package/dist/scalars/components/fragments/form-label/form-label.js.map +1 -1
- package/dist/scalars/components/fragments/select-field/content.js +15 -15
- package/dist/scalars/components/fragments/select-field/content.js.map +1 -1
- package/dist/scalars/components/fragments/select-field/search-input.js +39 -31
- package/dist/scalars/components/fragments/select-field/search-input.js.map +1 -1
- package/dist/scalars/components/fragments/select-field/select-field.js +43 -42
- package/dist/scalars/components/fragments/select-field/select-field.js.map +1 -1
- package/dist/scalars/components/fragments/select-field/use-select-field.js +14 -14
- package/dist/scalars/components/fragments/select-field/use-select-field.js.map +1 -1
- package/dist/scalars/components/fragments/text-field/text-field.js +34 -34
- package/dist/scalars/components/fragments/text-field/text-field.js.map +1 -1
- package/dist/scalars/components/fragments/textarea-field/textarea-field.js +62 -62
- package/dist/scalars/components/fragments/textarea-field/textarea-field.js.map +1 -1
- package/dist/scalars/components/fragments/with-field-validation/with-field-validation.js +58 -48
- package/dist/scalars/components/fragments/with-field-validation/with-field-validation.js.map +1 -1
- package/dist/scalars/components/id-field/id-field.js +24 -0
- package/dist/scalars/components/id-field/id-field.js.map +1 -0
- package/dist/scalars/components/number-field/number-field-validations.js +16 -16
- package/dist/scalars/components/number-field/number-field-validations.js.map +1 -1
- package/dist/scalars/components/number-field/number-field.js +117 -102
- package/dist/scalars/components/number-field/number-field.js.map +1 -1
- package/dist/scalars/components/number-field/utils.js +17 -20
- package/dist/scalars/components/number-field/utils.js.map +1 -1
- package/dist/scalars/components/string-field/string-field.js +4 -4
- package/dist/scalars/components/string-field/string-field.js.map +1 -1
- package/dist/scalars/components/url-field/url-field.js +56 -46
- package/dist/scalars/components/url-field/url-field.js.map +1 -1
- package/dist/scalars/components/url-field/useURLWarnings.js +32 -0
- package/dist/scalars/components/url-field/useURLWarnings.js.map +1 -0
- package/dist/scalars/index.js +63 -61
- package/dist/scalars/index.js.map +1 -1
- package/dist/src/scalars/components/country-code-field/country-code-field.d.ts +6 -0
- package/dist/src/scalars/components/country-code-field/country-code-field.d.ts.map +1 -0
- package/dist/src/scalars/components/country-code-field/country-code-field.test.d.ts +2 -0
- package/dist/src/scalars/components/country-code-field/country-code-field.test.d.ts.map +1 -0
- package/dist/src/scalars/components/country-code-field/index.d.ts +2 -0
- package/dist/src/scalars/components/country-code-field/index.d.ts.map +1 -0
- package/dist/src/scalars/components/country-code-field/types.d.ts +11 -0
- package/dist/src/scalars/components/country-code-field/types.d.ts.map +1 -0
- package/dist/src/scalars/components/form/form.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/button/button.d.ts +1 -1
- package/dist/src/scalars/components/fragments/command/command.d.ts +6 -6
- package/dist/src/scalars/components/fragments/select-field/content.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/select-field/search-input.d.ts +1 -0
- package/dist/src/scalars/components/fragments/select-field/search-input.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/select-field/select-field.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/select-field/use-select-field.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/textarea-field/textarea-field.d.ts.map +1 -1
- package/dist/src/scalars/components/fragments/value-transformer/index.d.ts +3 -0
- package/dist/src/scalars/components/fragments/value-transformer/index.d.ts.map +1 -0
- package/dist/src/scalars/components/fragments/with-field-validation/with-field-validation.d.ts.map +1 -1
- package/dist/src/scalars/components/id-field/id-field.d.ts +9 -0
- package/dist/src/scalars/components/id-field/id-field.d.ts.map +1 -0
- package/dist/src/scalars/components/id-field/id-field.test.d.ts +2 -0
- package/dist/src/scalars/components/id-field/id-field.test.d.ts.map +1 -0
- package/dist/src/scalars/components/id-field/index.d.ts +2 -0
- package/dist/src/scalars/components/id-field/index.d.ts.map +1 -0
- package/dist/src/scalars/components/index.d.ts +6 -5
- package/dist/src/scalars/components/index.d.ts.map +1 -1
- package/dist/src/scalars/components/number-field/number-field-validations.d.ts.map +1 -1
- package/dist/src/scalars/components/number-field/number-field.d.ts +1 -1
- package/dist/src/scalars/components/number-field/number-field.d.ts.map +1 -1
- package/dist/src/scalars/components/number-field/utils.d.ts +1 -1
- package/dist/src/scalars/components/number-field/utils.d.ts.map +1 -1
- package/dist/src/scalars/components/string-field/string-field.d.ts +1 -4
- package/dist/src/scalars/components/string-field/string-field.d.ts.map +1 -1
- package/dist/src/scalars/components/url-field/url-field.d.ts +1 -0
- package/dist/src/scalars/components/url-field/url-field.d.ts.map +1 -1
- package/dist/src/scalars/components/url-field/useURLWarnings.d.ts +5 -0
- package/dist/src/scalars/components/url-field/useURLWarnings.d.ts.map +1 -0
- package/dist/src/scalars/docs/examples/reset-on-successful-submit/reset-on-successful-submit.d.ts.map +1 -1
- package/dist/src/scalars/lib/decorators.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +15 -13
|
@@ -1,43 +1,55 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { deepEqual as
|
|
3
|
-
import { isEmpty as
|
|
4
|
-
import { forwardRef as
|
|
5
|
-
import { useForm as
|
|
6
|
-
const w =
|
|
1
|
+
import { jsx as p } from "react/jsx-runtime";
|
|
2
|
+
import { deepEqual as d } from "../../lib/deep-equal.js";
|
|
3
|
+
import { isEmpty as E } from "../../lib/is-empty.js";
|
|
4
|
+
import { forwardRef as S, useImperativeHandle as u, useEffect as O, useCallback as a } from "react";
|
|
5
|
+
import { useForm as k, FormProvider as y } from "react-hook-form";
|
|
6
|
+
const w = S(
|
|
7
7
|
({
|
|
8
8
|
children: m,
|
|
9
|
-
onSubmit:
|
|
10
|
-
resetOnSuccessfulSubmit:
|
|
11
|
-
submitChangesOnly:
|
|
12
|
-
defaultValues:
|
|
9
|
+
onSubmit: f,
|
|
10
|
+
resetOnSuccessfulSubmit: c = !1,
|
|
11
|
+
submitChangesOnly: s = !1,
|
|
12
|
+
defaultValues: t,
|
|
13
13
|
className: b
|
|
14
|
-
},
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
14
|
+
}, j) => {
|
|
15
|
+
const r = k({
|
|
16
|
+
defaultValues: t,
|
|
17
|
+
criteriaMode: "all"
|
|
18
|
+
// display all errors at once
|
|
19
|
+
});
|
|
20
|
+
u(j, () => r, [r]), O(() => {
|
|
21
|
+
c && r.formState.isSubmitSuccessful && r.reset({ ...t ?? {} });
|
|
22
|
+
}, [
|
|
23
|
+
c,
|
|
24
|
+
r,
|
|
25
|
+
r.formState.isSubmitSuccessful,
|
|
26
|
+
t
|
|
27
|
+
]);
|
|
28
|
+
const l = a(
|
|
29
|
+
(n) => {
|
|
30
|
+
let e = n;
|
|
31
|
+
return Object.keys(r.control._fields).forEach((o) => {
|
|
32
|
+
Object.keys(e).includes(o) || (e[o] = null);
|
|
33
|
+
}), s && t && (e = Object.fromEntries(
|
|
34
|
+
Object.entries(n).filter(
|
|
35
|
+
([o, i]) => !d(i, t[o])
|
|
36
|
+
)
|
|
37
|
+
)), e = Object.fromEntries(
|
|
38
|
+
Object.entries(e).map(([o, i]) => [
|
|
39
|
+
o,
|
|
40
|
+
E(i) ? null : i
|
|
41
|
+
])
|
|
42
|
+
), f(e);
|
|
43
|
+
},
|
|
44
|
+
[r, t, s, f]
|
|
45
|
+
);
|
|
46
|
+
return /* @__PURE__ */ p(y, { ...r, children: /* @__PURE__ */ p(
|
|
35
47
|
"form",
|
|
36
48
|
{
|
|
37
|
-
onSubmit:
|
|
49
|
+
onSubmit: r.handleSubmit(l),
|
|
38
50
|
className: b,
|
|
39
51
|
noValidate: !0,
|
|
40
|
-
children: typeof m == "function" ? m(
|
|
52
|
+
children: typeof m == "function" ? m(r) : m
|
|
41
53
|
}
|
|
42
54
|
) });
|
|
43
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","sources":["../../../../src/scalars/components/form/form.tsx"],"sourcesContent":["import { deepEqual } from \"@/scalars/lib/deep-equal\";\nimport { isEmpty } from \"@/scalars/lib/is-empty\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle } from \"react\";\nimport { FormProvider, useForm, UseFormReturn } from \"react-hook-form\";\n\ninterface FormProps {\n /**\n * Content of the form. Can be either React nodes or a render function that receives form methods\n * and returns React nodes. The render function approach is useful when you need access to form state\n * or methods (e.g., to disable submit button while submitting).\n */\n children: React.ReactNode | ((methods: UseFormReturn) => React.ReactNode);\n\n /**\n * Handler called when the form is submitted. Receives the form data as an argument.\n * The data structure will match the names of your form fields.\n *\n * @param data - An object containing the form values, keyed by field names\n */\n onSubmit: (data: any) => void;\n\n /**\n * Whether to reset the form after a successful submit.\n *\n * @default false\n */\n resetOnSuccessfulSubmit?: boolean;\n\n /**\n * Whether to submit only changed values.\n *\n * When enabled, the `onSubmit` callback will only receive fields whose values differ from their\n * corresponding `defaultValues`.\n *\n * @default false\n */\n submitChangesOnly?: boolean;\n\n /**\n * Initial values for the form fields. Keys should match the 'name' props of your form fields.\n * Useful for editing existing data or setting initial state.\n */\n defaultValues?: Record<string, any>;\n\n /**\n * Additional CSS class name to apply to the form element.\n * Use this to customize the form's styling.\n */\n className?: string;\n}\n\n/**\n * A form component that integrates with react-hook-form for form state management and validation.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Form onSubmit={handleSubmit}>\n * <StringField name=\"email\" label=\"Email\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n *\n * // With form methods access\n * <Form onSubmit={handleSubmit}>\n * {({ formState: { isSubmitting } }) => (\n * <>\n * <StringField name=\"email\" label=\"Email\" />\n * <Button type=\"submit\" disabled={isSubmitting}>\n * {isSubmitting ? 'Submitting...' : 'Submit'}\n * </Button>\n * </>\n * )}\n * </Form>\n *\n * // With default values\n * <Form\n * onSubmit={handleSubmit}\n * defaultValues={{\n * email: 'user@example.com'\n * }}\n * >\n * <StringField name=\"email\" label=\"Email\" />\n * </Form>\n * ```\n */\nexport const Form = forwardRef<UseFormReturn, FormProps>(\n (\n {\n children,\n onSubmit,\n resetOnSuccessfulSubmit = false,\n submitChangesOnly = false,\n defaultValues,\n className,\n },\n ref,\n ) => {\n const methods = useForm({
|
|
1
|
+
{"version":3,"file":"form.js","sources":["../../../../src/scalars/components/form/form.tsx"],"sourcesContent":["import { deepEqual } from \"@/scalars/lib/deep-equal\";\nimport { isEmpty } from \"@/scalars/lib/is-empty\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle } from \"react\";\nimport { FormProvider, useForm, UseFormReturn } from \"react-hook-form\";\n\ninterface FormProps {\n /**\n * Content of the form. Can be either React nodes or a render function that receives form methods\n * and returns React nodes. The render function approach is useful when you need access to form state\n * or methods (e.g., to disable submit button while submitting).\n */\n children: React.ReactNode | ((methods: UseFormReturn) => React.ReactNode);\n\n /**\n * Handler called when the form is submitted. Receives the form data as an argument.\n * The data structure will match the names of your form fields.\n *\n * @param data - An object containing the form values, keyed by field names\n */\n onSubmit: (data: any) => void;\n\n /**\n * Whether to reset the form after a successful submit.\n *\n * @default false\n */\n resetOnSuccessfulSubmit?: boolean;\n\n /**\n * Whether to submit only changed values.\n *\n * When enabled, the `onSubmit` callback will only receive fields whose values differ from their\n * corresponding `defaultValues`.\n *\n * @default false\n */\n submitChangesOnly?: boolean;\n\n /**\n * Initial values for the form fields. Keys should match the 'name' props of your form fields.\n * Useful for editing existing data or setting initial state.\n */\n defaultValues?: Record<string, any>;\n\n /**\n * Additional CSS class name to apply to the form element.\n * Use this to customize the form's styling.\n */\n className?: string;\n}\n\n/**\n * A form component that integrates with react-hook-form for form state management and validation.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Form onSubmit={handleSubmit}>\n * <StringField name=\"email\" label=\"Email\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n *\n * // With form methods access\n * <Form onSubmit={handleSubmit}>\n * {({ formState: { isSubmitting } }) => (\n * <>\n * <StringField name=\"email\" label=\"Email\" />\n * <Button type=\"submit\" disabled={isSubmitting}>\n * {isSubmitting ? 'Submitting...' : 'Submit'}\n * </Button>\n * </>\n * )}\n * </Form>\n *\n * // With default values\n * <Form\n * onSubmit={handleSubmit}\n * defaultValues={{\n * email: 'user@example.com'\n * }}\n * >\n * <StringField name=\"email\" label=\"Email\" />\n * </Form>\n * ```\n */\nexport const Form = forwardRef<UseFormReturn, FormProps>(\n (\n {\n children,\n onSubmit,\n resetOnSuccessfulSubmit = false,\n submitChangesOnly = false,\n defaultValues,\n className,\n },\n ref,\n ) => {\n const methods = useForm({\n defaultValues,\n criteriaMode: \"all\", // display all errors at once\n });\n useImperativeHandle(ref, () => methods, [methods]);\n\n useEffect(() => {\n if (resetOnSuccessfulSubmit && methods.formState.isSubmitSuccessful) {\n methods.reset({ ...(defaultValues ?? {}) });\n }\n }, [\n resetOnSuccessfulSubmit,\n methods,\n methods.formState.isSubmitSuccessful,\n defaultValues,\n ]);\n\n const wrappedOnSubmit = useCallback(\n (rawData: Record<string, any>) => {\n let data = rawData;\n // we should make sure that empty fields are submitted as `null`\n // react-hook-form doesn't submit fields with `undefined` values\n // so we need to add them to the data as `null`\n Object.keys(methods.control._fields).forEach((fieldName) => {\n if (!Object.keys(data).includes(fieldName)) {\n data[fieldName] = null;\n }\n });\n\n if (submitChangesOnly && !!defaultValues) {\n // remove fields that didn't change it's value\n data = Object.fromEntries(\n Object.entries(rawData).filter(\n ([fieldName, value]) =>\n !deepEqual(value, defaultValues[fieldName]),\n ),\n );\n }\n\n // at this point all the fields that need to be submitted are in the data\n // we just need to make sure that \"empty\" values are submitted as `null`\n data = Object.fromEntries(\n Object.entries(data).map(([fieldName, value]) => [\n fieldName,\n isEmpty(value) ? null : value,\n ]),\n );\n\n // we need to return the promise from the onSubmit callback if there is one\n // so react-hook-form can wait for it to resolve and update the form state correctly\n return onSubmit(data);\n },\n [methods, defaultValues, submitChangesOnly, onSubmit],\n );\n\n return (\n <FormProvider {...methods}>\n <form\n onSubmit={methods.handleSubmit(wrappedOnSubmit)}\n className={className}\n noValidate\n >\n {typeof children === \"function\" ? children(methods) : children}\n </form>\n </FormProvider>\n );\n },\n);\n"],"names":["Form","forwardRef","children","onSubmit","resetOnSuccessfulSubmit","submitChangesOnly","defaultValues","className","ref","methods","useForm","useImperativeHandle","useEffect","wrappedOnSubmit","useCallback","rawData","data","fieldName","value","deepEqual","isEmpty","jsx","FormProvider"],"mappings":";;;;;AAqFO,MAAMA,IAAOC;AAAA,EAClB,CACE;AAAA,IACE,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,yBAAAC,IAA0B;AAAA,IAC1B,mBAAAC,IAAoB;AAAA,IACpB,eAAAC;AAAA,IACA,WAAAC;AAAA,KAEFC,MACG;AACH,UAAMC,IAAUC,EAAQ;AAAA,MACtB,eAAAJ;AAAA,MACA,cAAc;AAAA;AAAA,IAAA,CACf;AACD,IAAAK,EAAoBH,GAAK,MAAMC,GAAS,CAACA,CAAO,CAAC,GAEjDG,EAAU,MAAM;AACV,MAAAR,KAA2BK,EAAQ,UAAU,sBAC/CA,EAAQ,MAAM,EAAE,GAAIH,KAAiB,IAAK;AAAA,IAC5C,GACC;AAAA,MACDF;AAAA,MACAK;AAAA,MACAA,EAAQ,UAAU;AAAA,MAClBH;AAAA,IAAA,CACD;AAED,UAAMO,IAAkBC;AAAA,MACtB,CAACC,MAAiC;AAChC,YAAIC,IAAOD;AAIX,sBAAO,KAAKN,EAAQ,QAAQ,OAAO,EAAE,QAAQ,CAACQ,MAAc;AAC1D,UAAK,OAAO,KAAKD,CAAI,EAAE,SAASC,CAAS,MACvCD,EAAKC,CAAS,IAAI;AAAA,QACpB,CACD,GAEGZ,KAAuBC,MAEzBU,IAAO,OAAO;AAAA,UACZ,OAAO,QAAQD,CAAO,EAAE;AAAA,YACtB,CAAC,CAACE,GAAWC,CAAK,MAChB,CAACC,EAAUD,GAAOZ,EAAcW,CAAS,CAAC;AAAA,UAAA;AAAA,QAEhD,IAKFD,IAAO,OAAO;AAAA,UACZ,OAAO,QAAQA,CAAI,EAAE,IAAI,CAAC,CAACC,GAAWC,CAAK,MAAM;AAAA,YAC/CD;AAAA,YACAG,EAAQF,CAAK,IAAI,OAAOA;AAAA,UACzB,CAAA;AAAA,QACH,GAIOf,EAASa,CAAI;AAAA,MACtB;AAAA,MACA,CAACP,GAASH,GAAeD,GAAmBF,CAAQ;AAAA,IACtD;AAGE,WAAA,gBAAAkB,EAACC,GAAc,EAAA,GAAGb,GAChB,UAAA,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAUZ,EAAQ,aAAaI,CAAe;AAAA,QAC9C,WAAAN;AAAA,QACA,YAAU;AAAA,QAET,UAAO,OAAAL,KAAa,aAAaA,EAASO,CAAO,IAAIP;AAAA,MAAA;AAAA,IAAA,GAE1D;AAAA,EAAA;AAGN;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { cva as
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { cva as o } from "class-variance-authority";
|
|
3
3
|
import { cn as t } from "../../../lib/utils.js";
|
|
4
|
-
const i =
|
|
4
|
+
const i = o(
|
|
5
5
|
t(
|
|
6
6
|
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold",
|
|
7
|
-
"transition-colors focus:outline-none
|
|
7
|
+
"transition-colors focus:outline-none"
|
|
8
8
|
),
|
|
9
9
|
{
|
|
10
10
|
variants: {
|
|
@@ -16,9 +16,9 @@ const i = e(
|
|
|
16
16
|
variant: "default"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
),
|
|
19
|
+
), f = ({ variant: r, className: a, ...e }) => /* @__PURE__ */ n("div", { className: t(i({ variant: r }), a), ...e });
|
|
20
20
|
export {
|
|
21
|
-
|
|
21
|
+
f as Badge,
|
|
22
22
|
i as badgeVariants
|
|
23
23
|
};
|
|
24
24
|
//# sourceMappingURL=badge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","sources":["../../../../../src/scalars/components/fragments/badge/badge.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/scalars/lib/utils\";\n\nconst badgeVariants = cva(\n cn(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold\",\n \"transition-colors focus:outline-none
|
|
1
|
+
{"version":3,"file":"badge.js","sources":["../../../../../src/scalars/components/fragments/badge/badge.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/scalars/lib/utils\";\n\nconst badgeVariants = cva(\n cn(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold\",\n \"transition-colors focus:outline-none\",\n ),\n {\n variants: {\n variant: {\n default: \"border-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nconst Badge: React.FC<BadgeProps> = ({ variant, className, ...props }) => (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n);\n\nexport { Badge, badgeVariants };\n"],"names":["badgeVariants","cva","cn","Badge","variant","className","props","jsx"],"mappings":";;;AAIA,MAAMA,IAAgBC;AAAA,EACpBC;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAMMC,IAA8B,CAAC,EAAE,SAAAC,GAAS,WAAAC,GAAW,GAAGC,EAAA,MAC3D,gBAAAC,EAAA,OAAA,EAAI,WAAWL,EAAGF,EAAc,EAAE,SAAAI,EAAS,CAAA,GAAGC,CAAS,GAAI,GAAGC,EAAO,CAAA;"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as p, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { cn as e } from "../../../lib/utils.js";
|
|
3
3
|
import { Tooltip as c } from "../tooltip/tooltip.js";
|
|
4
|
-
import { Provider as
|
|
5
|
-
import { Icon as
|
|
4
|
+
import { Provider as y } from "@radix-ui/react-tooltip";
|
|
5
|
+
import { Icon as i } from "../../../../powerhouse/components/icon/icon.js";
|
|
6
6
|
const N = ({
|
|
7
7
|
children: o,
|
|
8
8
|
required: m,
|
|
9
9
|
disabled: t,
|
|
10
10
|
description: a,
|
|
11
11
|
hasError: x,
|
|
12
|
-
inline:
|
|
13
|
-
className:
|
|
14
|
-
...
|
|
12
|
+
inline: g,
|
|
13
|
+
className: l,
|
|
14
|
+
...n
|
|
15
15
|
}) => {
|
|
16
16
|
const s = e(
|
|
17
17
|
"inline-flex items-center text-sm font-medium leading-[22px]",
|
|
18
|
-
|
|
18
|
+
`text-gray-900 ${g ? "dark:text-gray-400" : "dark:text-gray-50"} `,
|
|
19
19
|
x && "text-red-800 group-hover:!text-red-900 dark:text-red-800 dark:group-hover:!text-red-900",
|
|
20
20
|
t && "cursor-not-allowed text-gray-700 dark:text-gray-600",
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
g ? !t && "group-hover:text-gray-900 dark:group-hover:text-slate-50" : "mb-[3px]",
|
|
22
|
+
l
|
|
23
23
|
);
|
|
24
24
|
if (!o)
|
|
25
25
|
return null;
|
|
26
|
-
const
|
|
27
|
-
...
|
|
26
|
+
const d = {
|
|
27
|
+
...n
|
|
28
28
|
};
|
|
29
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ p("label", { className: s, ...d, children: [
|
|
30
30
|
o,
|
|
31
31
|
m && /* @__PURE__ */ r(
|
|
32
32
|
"span",
|
|
@@ -38,8 +38,8 @@ const N = ({
|
|
|
38
38
|
children: "*"
|
|
39
39
|
}
|
|
40
40
|
),
|
|
41
|
-
a && /* @__PURE__ */ r(
|
|
42
|
-
|
|
41
|
+
a && /* @__PURE__ */ r(y, { children: /* @__PURE__ */ r(c, { content: a, children: /* @__PURE__ */ r(
|
|
42
|
+
i,
|
|
43
43
|
{
|
|
44
44
|
name: "CircleInfo",
|
|
45
45
|
size: 16,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-label.js","sources":["../../../../../src/scalars/components/fragments/form-label/form-label.tsx"],"sourcesContent":["import { Icon } from \"@/powerhouse/components/icon\";\nimport React from \"react\";\nimport { Tooltip, TooltipProvider } from \"../tooltip\";\nimport { cn } from \"@/scalars/lib\";\n\nexport interface FormLabelProps\n extends React.PropsWithChildren,\n React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n disabled?: boolean;\n description?: string;\n hasError?: boolean;\n inline?: boolean;\n className?: string;\n}\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n children,\n required,\n disabled,\n description,\n hasError,\n inline,\n className,\n ...htmlLabelProps\n}) => {\n const classes = cn(\n \"inline-flex items-center text-sm font-medium leading-[22px]\",\n
|
|
1
|
+
{"version":3,"file":"form-label.js","sources":["../../../../../src/scalars/components/fragments/form-label/form-label.tsx"],"sourcesContent":["import { Icon } from \"@/powerhouse/components/icon\";\nimport React from \"react\";\nimport { Tooltip, TooltipProvider } from \"../tooltip\";\nimport { cn } from \"@/scalars/lib\";\n\nexport interface FormLabelProps\n extends React.PropsWithChildren,\n React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n disabled?: boolean;\n description?: string;\n hasError?: boolean;\n inline?: boolean;\n className?: string;\n}\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n children,\n required,\n disabled,\n description,\n hasError,\n inline,\n className,\n ...htmlLabelProps\n}) => {\n const classes = cn(\n \"inline-flex items-center text-sm font-medium leading-[22px]\",\n `text-gray-900 ${inline ? \"dark:text-gray-400\" : \"dark:text-gray-50\"} `,\n hasError &&\n \"text-red-800 group-hover:!text-red-900 dark:text-red-800 dark:group-hover:!text-red-900\",\n disabled && \"cursor-not-allowed text-gray-700 dark:text-gray-600\",\n inline\n ? !disabled && \"group-hover:text-gray-900 dark:group-hover:text-slate-50\"\n : \"mb-[3px]\",\n className,\n );\n\n if (!children) {\n // no label provided\n return null;\n }\n\n const extraProps = {\n ...htmlLabelProps,\n };\n\n return (\n <label className={classes} {...extraProps}>\n {children}\n {required && (\n <span\n className={cn(\n \"ml-1 text-gray-800 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-slate-50\",\n hasError && \"!text-red-800 group-hover:!text-red-900\",\n )}\n >\n *\n </span>\n )}\n\n {description && (\n <TooltipProvider>\n <Tooltip content={description}>\n <Icon\n name=\"CircleInfo\"\n size={16}\n className={cn(\n \"ml-1 cursor-pointer text-gray-600 hover:text-gray-500 dark:text-gray-500 dark:hover:text-gray-500\",\n disabled && \"text-gray-500\",\n )}\n />\n </Tooltip>\n </TooltipProvider>\n )}\n </label>\n );\n};\n"],"names":["FormLabel","children","required","disabled","description","hasError","inline","className","htmlLabelProps","classes","cn","extraProps","jsxs","jsx","TooltipProvider","Tooltip","Icon"],"mappings":";;;;;AAgBO,MAAMA,IAAsC,CAAC;AAAA,EAClD,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAUC;AAAA,IACd;AAAA,IACA,kBAAkBJ,IAAS,uBAAuB,mBAAmB;AAAA,IACrED,KACE;AAAA,IACFF,KAAY;AAAA,IACZG,IACI,CAACH,KAAY,6DACb;AAAA,IACJI;AAAA,EACF;AAEA,MAAI,CAACN;AAEI,WAAA;AAGT,QAAMU,IAAa;AAAA,IACjB,GAAGH;AAAA,EACL;AAEA,SACG,gBAAAI,EAAA,SAAA,EAAM,WAAWH,GAAU,GAAGE,GAC5B,UAAA;AAAA,IAAAV;AAAA,IACAC,KACC,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWH;AAAA,UACT;AAAA,UACAL,KAAY;AAAA,QACd;AAAA,QACD,UAAA;AAAA,MAAA;AAAA,IAED;AAAA,IAGDD,KACE,gBAAAS,EAAAC,GAAA,EACC,UAAC,gBAAAD,EAAAE,GAAA,EAAQ,SAASX,GAChB,UAAA,gBAAAS;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAWN;AAAA,UACT;AAAA,UACAP,KAAY;AAAA,QAAA;AAAA,MACd;AAAA,OAEJ,EACF,CAAA;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsxs as d, jsx as r
|
|
1
|
+
import { jsxs as d, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo as k } from "react";
|
|
3
|
-
import { Command as
|
|
3
|
+
import { Command as h, CommandInput as v, CommandList as p, CommandEmpty as N, CommandGroup as z, CommandItem as y } from "../command/command.js";
|
|
4
4
|
import { cn as t } from "../../../lib/utils.js";
|
|
5
5
|
import { Icon as c } from "../../../../powerhouse/components/icon/icon.js";
|
|
6
|
-
const
|
|
6
|
+
const L = ({
|
|
7
7
|
selectedValues: l,
|
|
8
8
|
options: s = [],
|
|
9
9
|
optionsCheckmark: n,
|
|
10
10
|
multiple: o,
|
|
11
|
-
searchable:
|
|
11
|
+
searchable: m,
|
|
12
12
|
searchPosition: b,
|
|
13
13
|
searchValue: g = "",
|
|
14
14
|
toggleOption: x,
|
|
@@ -36,19 +36,19 @@ const D = ({
|
|
|
36
36
|
)
|
|
37
37
|
}
|
|
38
38
|
);
|
|
39
|
-
return /* @__PURE__ */ d(
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
return /* @__PURE__ */ d(h, { children: [
|
|
40
|
+
m && b === "Dropdown" && /* @__PURE__ */ r(
|
|
41
|
+
v,
|
|
42
42
|
{
|
|
43
43
|
placeholder: "Search...",
|
|
44
44
|
className: "text-gray-900 dark:text-gray-50"
|
|
45
45
|
}
|
|
46
46
|
),
|
|
47
|
-
/* @__PURE__ */ d(
|
|
48
|
-
/* @__PURE__ */ r(
|
|
49
|
-
/* @__PURE__ */ d(
|
|
47
|
+
/* @__PURE__ */ d(p, { children: [
|
|
48
|
+
/* @__PURE__ */ r(N, { className: "p-4 text-center text-[14px] font-normal leading-5 text-gray-700 dark:text-gray-400", children: "No results found." }),
|
|
49
|
+
/* @__PURE__ */ d(z, { children: [
|
|
50
50
|
o && n === "Auto" && /* @__PURE__ */ r(
|
|
51
|
-
|
|
51
|
+
y,
|
|
52
52
|
{
|
|
53
53
|
onSelect: u,
|
|
54
54
|
className: "cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-900",
|
|
@@ -71,7 +71,7 @@ const D = ({
|
|
|
71
71
|
i.map((e) => {
|
|
72
72
|
const a = l.includes(e.value);
|
|
73
73
|
return /* @__PURE__ */ d(
|
|
74
|
-
|
|
74
|
+
y,
|
|
75
75
|
{
|
|
76
76
|
onSelect: () => !e.disabled && x(e.value),
|
|
77
77
|
className: t(
|
|
@@ -80,7 +80,7 @@ const D = ({
|
|
|
80
80
|
n === "None" && a && "bg-gray-300 dark:bg-gray-700"
|
|
81
81
|
),
|
|
82
82
|
children: [
|
|
83
|
-
n === "Auto" &&
|
|
83
|
+
n === "Auto" && (o ? /* @__PURE__ */ r(
|
|
84
84
|
"div",
|
|
85
85
|
{
|
|
86
86
|
className: t(
|
|
@@ -102,7 +102,7 @@ const D = ({
|
|
|
102
102
|
),
|
|
103
103
|
children: a && /* @__PURE__ */ r("div", { className: "absolute left-1/2 top-1/2 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full bg-gray-900 dark:bg-gray-400" })
|
|
104
104
|
}
|
|
105
|
-
)
|
|
105
|
+
)),
|
|
106
106
|
f(e.icon, e.disabled),
|
|
107
107
|
/* @__PURE__ */ r(
|
|
108
108
|
"span",
|
|
@@ -125,6 +125,6 @@ const D = ({
|
|
|
125
125
|
] });
|
|
126
126
|
};
|
|
127
127
|
export {
|
|
128
|
-
|
|
128
|
+
L as Content
|
|
129
129
|
};
|
|
130
130
|
//# sourceMappingURL=content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sources":["../../../../../src/scalars/components/fragments/select-field/content.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/scalars/components/fragments/command\";\nimport { cn } from \"@/scalars/lib/utils\";\nimport { SelectProps } from \"@/scalars/components/enum-field/types\";\nimport { Icon, type IconName } from \"@/powerhouse/components/icon\";\n\ninterface ContentProps {\n selectedValues: string[];\n options?: SelectProps[\"options\"];\n optionsCheckmark: \"Auto\" | \"None\";\n multiple?: boolean;\n searchable?: boolean;\n searchPosition?: \"Dropdown\" | \"Input\";\n searchValue?: string;\n toggleOption: (value: string) => void;\n toggleAll: () => void;\n}\n\nexport const Content: React.FC<ContentProps> = ({\n selectedValues,\n options = [],\n optionsCheckmark,\n multiple,\n searchable,\n searchPosition,\n searchValue = \"\",\n toggleOption,\n toggleAll,\n}) => {\n const filteredOptions = useMemo(() => {\n if (!searchValue) return options;\n return options.filter((option) =>\n option.label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n }, [options, searchValue]);\n\n const renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n disabled?: boolean,\n ) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={cn(\n \"text-gray-700 dark:text-gray-400\",\n disabled && \"opacity-50\",\n )}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent\n className={cn(\n \"size-4\",\n \"text-gray-700 dark:text-gray-400\",\n disabled && \"opacity-50\",\n )}\n />\n )\n );\n };\n\n return (\n <Command>\n {searchable && searchPosition === \"Dropdown\" && (\n <CommandInput\n placeholder=\"Search...\"\n className=\"text-gray-900 dark:text-gray-50\"\n />\n )}\n <CommandList>\n <CommandEmpty className=\"p-4 text-center text-[14px] font-normal leading-5 text-gray-700 dark:text-gray-400\">\n No results found.\n </CommandEmpty>\n <CommandGroup>\n {multiple && optionsCheckmark === \"Auto\" && (\n <CommandItem\n onSelect={toggleAll}\n className=\"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-900\"\n >\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n \"flex size-4 items-center justify-center rounded border\",\n \"border-gray-700 dark:border-gray-400\",\n selectedValues.length ===\n filteredOptions.filter((opt) => !opt.disabled).length\n ? \"bg-gray-900 text-slate-50 dark:bg-gray-400 dark:text-black\"\n : \"opacity-50 [&_svg]:invisible\",\n )}\n >\n <Icon name=\"Checkmark\" size={16} />\n </div>\n <span className=\"text-[14px] font-semibold leading-4 text-gray-900 dark:text-gray-50\">\n {selectedValues.length ===\n filteredOptions.filter((opt) => !opt.disabled).length\n ? \"Deselect All\"\n : \"Select All\"}\n </span>\n </div>\n </CommandItem>\n )}\n {filteredOptions.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n\n return (\n <CommandItem\n key={option.value}\n onSelect={() => !option.disabled && toggleOption(option.value)}\n className={cn(\n \"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-900\",\n option.disabled &&\n \"cursor-not-allowed opacity-75 hover:bg-transparent dark:hover:bg-transparent\",\n optionsCheckmark === \"None\" &&\n isSelected &&\n \"bg-gray-300 dark:bg-gray-700\",\n )}\n >\n {optionsCheckmark === \"Auto\"
|
|
1
|
+
{"version":3,"file":"content.js","sources":["../../../../../src/scalars/components/fragments/select-field/content.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/scalars/components/fragments/command\";\nimport { cn } from \"@/scalars/lib/utils\";\nimport { SelectProps } from \"@/scalars/components/enum-field/types\";\nimport { Icon, type IconName } from \"@/powerhouse/components/icon\";\n\ninterface ContentProps {\n selectedValues: string[];\n options?: SelectProps[\"options\"];\n optionsCheckmark: \"Auto\" | \"None\";\n multiple?: boolean;\n searchable?: boolean;\n searchPosition?: \"Dropdown\" | \"Input\";\n searchValue?: string;\n toggleOption: (value: string) => void;\n toggleAll: () => void;\n}\n\nexport const Content: React.FC<ContentProps> = ({\n selectedValues,\n options = [],\n optionsCheckmark,\n multiple,\n searchable,\n searchPosition,\n searchValue = \"\",\n toggleOption,\n toggleAll,\n}) => {\n const filteredOptions = useMemo(() => {\n if (!searchValue) return options;\n return options.filter((option) =>\n option.label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n }, [options, searchValue]);\n\n const renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n disabled?: boolean,\n ) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={cn(\n \"text-gray-700 dark:text-gray-400\",\n disabled && \"opacity-50\",\n )}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent\n className={cn(\n \"size-4\",\n \"text-gray-700 dark:text-gray-400\",\n disabled && \"opacity-50\",\n )}\n />\n )\n );\n };\n\n return (\n <Command>\n {searchable && searchPosition === \"Dropdown\" && (\n <CommandInput\n placeholder=\"Search...\"\n className=\"text-gray-900 dark:text-gray-50\"\n />\n )}\n <CommandList>\n <CommandEmpty className=\"p-4 text-center text-[14px] font-normal leading-5 text-gray-700 dark:text-gray-400\">\n No results found.\n </CommandEmpty>\n <CommandGroup>\n {multiple && optionsCheckmark === \"Auto\" && (\n <CommandItem\n onSelect={toggleAll}\n className=\"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-900\"\n >\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n \"flex size-4 items-center justify-center rounded border\",\n \"border-gray-700 dark:border-gray-400\",\n selectedValues.length ===\n filteredOptions.filter((opt) => !opt.disabled).length\n ? \"bg-gray-900 text-slate-50 dark:bg-gray-400 dark:text-black\"\n : \"opacity-50 [&_svg]:invisible\",\n )}\n >\n <Icon name=\"Checkmark\" size={16} />\n </div>\n <span className=\"text-[14px] font-semibold leading-4 text-gray-900 dark:text-gray-50\">\n {selectedValues.length ===\n filteredOptions.filter((opt) => !opt.disabled).length\n ? \"Deselect All\"\n : \"Select All\"}\n </span>\n </div>\n </CommandItem>\n )}\n {filteredOptions.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n\n return (\n <CommandItem\n key={option.value}\n onSelect={() => !option.disabled && toggleOption(option.value)}\n className={cn(\n \"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-900\",\n option.disabled &&\n \"cursor-not-allowed opacity-75 hover:bg-transparent dark:hover:bg-transparent\",\n optionsCheckmark === \"None\" &&\n isSelected &&\n \"bg-gray-300 dark:bg-gray-700\",\n )}\n >\n {optionsCheckmark === \"Auto\" &&\n (multiple ? (\n <div\n className={cn(\n \"flex size-4 items-center justify-center rounded border\",\n \"border-gray-700 dark:border-gray-400\",\n isSelected\n ? \"bg-gray-900 text-slate-50 dark:bg-gray-400 dark:text-black\"\n : \"opacity-50 [&_svg]:invisible\",\n option.disabled && \"opacity-75\",\n )}\n >\n <Icon name=\"Checkmark\" size={16} />\n </div>\n ) : (\n <div\n className={cn(\n \"relative size-4 rounded-full border\",\n isSelected\n ? \"border-gray-900 dark:border-gray-400\"\n : \"border-gray-800 dark:border-gray-400\",\n \"bg-transparent dark:bg-transparent\",\n option.disabled && \"opacity-75\",\n )}\n >\n {isSelected && (\n <div className=\"absolute left-1/2 top-1/2 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full bg-gray-900 dark:bg-gray-400\" />\n )}\n </div>\n ))}\n {renderIcon(option.icon, option.disabled)}\n <span\n className={cn(\n \"flex-1 truncate text-[14px] font-medium leading-4\",\n \"text-gray-700 dark:text-gray-400\",\n option.disabled && \"text-gray-600 dark:text-gray-600\",\n )}\n >\n {option.label}\n </span>\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n );\n};\n"],"names":["Content","selectedValues","options","optionsCheckmark","multiple","searchable","searchPosition","searchValue","toggleOption","toggleAll","filteredOptions","useMemo","option","renderIcon","IconComponent","disabled","jsx","Icon","cn","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","jsxs","opt","isSelected"],"mappings":"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"}
|
|
@@ -1,51 +1,59 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import {
|
|
3
|
-
import { Command as
|
|
4
|
-
import { cn as
|
|
5
|
-
import { Icon as
|
|
6
|
-
const
|
|
7
|
-
selectedValues:
|
|
1
|
+
import { jsxs as v, jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as d } from "react";
|
|
3
|
+
import { Command as g, CommandInput as D } from "../command/command.js";
|
|
4
|
+
import { cn as o } from "../../../lib/utils.js";
|
|
5
|
+
import { Icon as N } from "../../../../powerhouse/components/icon/icon.js";
|
|
6
|
+
const p = ({
|
|
7
|
+
selectedValues: y,
|
|
8
8
|
options: b = [],
|
|
9
|
-
placeholder:
|
|
10
|
-
disabled:
|
|
11
|
-
|
|
9
|
+
placeholder: w,
|
|
10
|
+
disabled: x,
|
|
11
|
+
searchValue: i,
|
|
12
|
+
onSearch: m,
|
|
12
13
|
onOpenChange: t,
|
|
13
|
-
onSelectFirstOption:
|
|
14
|
+
onSelectFirstOption: s,
|
|
14
15
|
handleClear: c,
|
|
15
16
|
isPopoverOpen: l
|
|
16
17
|
}) => {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
},
|
|
20
|
-
r.key === "Enter" && (r.preventDefault(), l ?
|
|
18
|
+
const u = b.find((r) => r.value === y[0]), a = (r) => {
|
|
19
|
+
u && u.label !== r && (c == null || c()), m == null || m(r), t == null || t(!0);
|
|
20
|
+
}, k = (r) => {
|
|
21
|
+
r.key === "Enter" && (r.preventDefault(), l ? s == null || s() : t == null || t(!0));
|
|
21
22
|
};
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
}, [u,
|
|
23
|
+
return d(() => {
|
|
24
|
+
m == null || m((u == null ? void 0 : u.label) ?? i ?? "");
|
|
25
|
+
}, [m, u, i]), d(() => {
|
|
25
26
|
if (l) {
|
|
26
27
|
const r = document.querySelector("input[cmdk-input]");
|
|
27
28
|
r && setTimeout(() => {
|
|
28
29
|
r.focus();
|
|
29
|
-
},
|
|
30
|
+
}, 0);
|
|
30
31
|
}
|
|
31
|
-
}, [l]), /* @__PURE__ */
|
|
32
|
-
/* @__PURE__ */ f("div", { className: "flex w-full items-center", children: /* @__PURE__ */ f(
|
|
33
|
-
|
|
32
|
+
}, [l]), /* @__PURE__ */ v("div", { className: "flex w-full items-center justify-between gap-3", children: [
|
|
33
|
+
/* @__PURE__ */ f("div", { className: "flex w-full items-center", children: /* @__PURE__ */ f(g, { children: /* @__PURE__ */ f(
|
|
34
|
+
D,
|
|
34
35
|
{
|
|
35
|
-
value:
|
|
36
|
-
onValueChange:
|
|
37
|
-
placeholder:
|
|
36
|
+
value: i,
|
|
37
|
+
onValueChange: a,
|
|
38
|
+
placeholder: w,
|
|
38
39
|
onClick: (r) => {
|
|
39
40
|
r.preventDefault(), r.stopPropagation(), t == null || t(!0);
|
|
40
41
|
},
|
|
41
|
-
onKeyDown:
|
|
42
|
-
wrapperClassName:
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
onKeyDown: k,
|
|
43
|
+
wrapperClassName: o(
|
|
44
|
+
"group mt-0 border-0 border-none px-0",
|
|
45
|
+
"hover:bg-gray-100! dark:hover:bg-charcoal-800!",
|
|
46
|
+
"focus-within:bg-white! dark:focus-within:bg-charcoal-900!"
|
|
47
|
+
),
|
|
48
|
+
className: o(
|
|
49
|
+
"py-0 text-gray-900 dark:text-gray-50",
|
|
50
|
+
"group-hover:bg-gray-100! dark:group-hover:bg-charcoal-800!"
|
|
51
|
+
),
|
|
52
|
+
disabled: x
|
|
45
53
|
}
|
|
46
54
|
) }) }),
|
|
47
55
|
/* @__PURE__ */ f(
|
|
48
|
-
|
|
56
|
+
N,
|
|
49
57
|
{
|
|
50
58
|
name: "ChevronDown",
|
|
51
59
|
size: 16,
|
|
@@ -55,6 +63,6 @@ const B = ({
|
|
|
55
63
|
] });
|
|
56
64
|
};
|
|
57
65
|
export {
|
|
58
|
-
|
|
66
|
+
p as SearchInput
|
|
59
67
|
};
|
|
60
68
|
//# sourceMappingURL=search-input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-input.js","sources":["../../../../../src/scalars/components/fragments/select-field/search-input.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"search-input.js","sources":["../../../../../src/scalars/components/fragments/select-field/search-input.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Command, CommandInput } from \"@/scalars/components/fragments/command\";\nimport { cn } from \"@/scalars/lib/utils\";\nimport { SelectProps } from \"@/scalars/components/enum-field/types\";\nimport { Icon } from \"@/powerhouse/components/icon\";\n\ninterface SearchInputProps {\n selectedValues: string[];\n options?: SelectProps[\"options\"];\n placeholder?: string;\n disabled?: boolean;\n searchValue?: string;\n onSearch?: (value: string) => void;\n onOpenChange?: (open: boolean) => void;\n onSelectFirstOption?: () => void;\n handleClear?: () => void;\n isPopoverOpen?: boolean;\n}\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n selectedValues,\n options = [],\n placeholder,\n disabled,\n searchValue,\n onSearch,\n onOpenChange,\n onSelectFirstOption,\n handleClear,\n isPopoverOpen,\n}) => {\n const selectedOption = options.find((o) => o.value === selectedValues[0]);\n\n const handleChange = (value: string) => {\n if (selectedOption && selectedOption.label !== value) {\n handleClear?.();\n }\n onSearch?.(value);\n onOpenChange?.(true);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (isPopoverOpen) {\n onSelectFirstOption?.();\n } else {\n onOpenChange?.(true);\n }\n }\n };\n\n useEffect(() => {\n onSearch?.(selectedOption?.label ?? searchValue ?? \"\");\n }, [onSearch, selectedOption, searchValue]);\n\n useEffect(() => {\n if (isPopoverOpen) {\n const input = document.querySelector(\"input[cmdk-input]\");\n if (input) {\n setTimeout(() => {\n (input as HTMLInputElement).focus();\n }, 0);\n }\n }\n }, [isPopoverOpen]);\n\n return (\n <div className=\"flex w-full items-center justify-between gap-3\">\n <div className=\"flex w-full items-center\">\n <Command>\n <CommandInput\n value={searchValue}\n onValueChange={handleChange}\n placeholder={placeholder}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onOpenChange?.(true);\n }}\n onKeyDown={handleKeyDown}\n wrapperClassName={cn(\n \"group mt-0 border-0 border-none px-0\",\n \"hover:bg-gray-100! dark:hover:bg-charcoal-800!\",\n \"focus-within:bg-white! dark:focus-within:bg-charcoal-900!\",\n )}\n className={cn(\n \"py-0 text-gray-900 dark:text-gray-50\",\n \"group-hover:bg-gray-100! dark:group-hover:bg-charcoal-800!\",\n )}\n disabled={disabled}\n />\n </Command>\n </div>\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"cursor-pointer text-gray-700 dark:text-gray-400\"\n />\n </div>\n );\n};\n"],"names":["SearchInput","selectedValues","options","placeholder","disabled","searchValue","onSearch","onOpenChange","onSelectFirstOption","handleClear","isPopoverOpen","selectedOption","o","handleChange","value","handleKeyDown","e","useEffect","input","jsxs","jsx","Command","CommandInput","cn","Icon"],"mappings":";;;;;AAmBO,MAAMA,IAA0C,CAAC;AAAA,EACtD,gBAAAC;AAAA,EACA,SAAAC,IAAU,CAAC;AAAA,EACX,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACE,QAAAC,IAAiBT,EAAQ,KAAK,CAACU,MAAMA,EAAE,UAAUX,EAAe,CAAC,CAAC,GAElEY,IAAe,CAACC,MAAkB;AAClC,IAAAH,KAAkBA,EAAe,UAAUG,MAC/BL,KAAA,QAAAA,MAEhBH,KAAA,QAAAA,EAAWQ,IACXP,KAAA,QAAAA,EAAe;AAAA,EACjB,GAEMQ,IAAgB,CAACC,MAA6C;AAC9D,IAAAA,EAAE,QAAQ,YACZA,EAAE,eAAe,GACbN,IACoBF,KAAA,QAAAA,MAEtBD,KAAA,QAAAA,EAAe;AAAA,EAGrB;AAEA,SAAAU,EAAU,MAAM;AACH,IAAAX,KAAA,QAAAA,GAAAK,KAAA,gBAAAA,EAAgB,UAASN,KAAe;AAAA,EAClD,GAAA,CAACC,GAAUK,GAAgBN,CAAW,CAAC,GAE1CY,EAAU,MAAM;AACd,QAAIP,GAAe;AACX,YAAAQ,IAAQ,SAAS,cAAc,mBAAmB;AACxD,MAAIA,KACF,WAAW,MAAM;AACd,QAAAA,EAA2B,MAAM;AAAA,SACjC,CAAC;AAAA,IACN;AAAA,EACF,GACC,CAACR,CAAa,CAAC,GAGhB,gBAAAS,EAAC,OAAI,EAAA,WAAU,kDACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAI,EAAA,WAAU,4BACb,UAAA,gBAAAA,EAACC,GACC,EAAA,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAOjB;AAAA,QACP,eAAeQ;AAAA,QACf,aAAAV;AAAA,QACA,SAAS,CAACa,MAAM;AACd,UAAAA,EAAE,eAAe,GACjBA,EAAE,gBAAgB,GAClBT,KAAA,QAAAA,EAAe;AAAA,QACjB;AAAA,QACA,WAAWQ;AAAA,QACX,kBAAkBQ;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAWA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAAnB;AAAA,MAAA;AAAA,OAEJ,EACF,CAAA;AAAA,IACA,gBAAAgB;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;"}
|