soda-heroui 0.0.4 → 0.1.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.
@@ -0,0 +1,13 @@
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import { NavbarItem } from "@heroui/react";
3
+ import { StrictOmit } from "soda-type";
4
+ export interface AutoNavbarItemProps extends StrictOmit<ComponentProps<typeof NavbarItem>, "isActive"> {
5
+ href: string;
6
+ }
7
+ export interface LocationState {
8
+ href: string;
9
+ }
10
+ export interface CreateAutoNavbarItemParams {
11
+ useLocation: () => LocationState;
12
+ }
13
+ export declare function createAutoNavbarItem({ useLocation }: CreateAutoNavbarItemParams): (props: AutoNavbarItemProps) => ReactNode;
@@ -0,0 +1,39 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/AutoNavbarItem.tsx
20
+ var AutoNavbarItem_exports = {};
21
+ __export(AutoNavbarItem_exports, {
22
+ createAutoNavbarItem: () => createAutoNavbarItem
23
+ });
24
+ module.exports = __toCommonJS(AutoNavbarItem_exports);
25
+ var import_react = require("@heroui/react");
26
+ var import_deepsea_tools = require("deepsea-tools");
27
+ function createAutoNavbarItem({ useLocation }) {
28
+ function AutoNavbarItem(props) {
29
+ const { href, ...rest } = props;
30
+ const location = useLocation();
31
+ return /* @__PURE__ */ React.createElement(import_react.NavbarItem, { ...rest, isActive: (0, import_deepsea_tools.isActiveHref)(href, location.href) });
32
+ }
33
+ return AutoNavbarItem;
34
+ }
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ createAutoNavbarItem
38
+ });
39
+ //# sourceMappingURL=AutoNavbarItem.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AutoNavbarItem.tsx"],
4
+ "sourcesContent": ["import { ComponentProps, ReactNode } from \"react\"\r\nimport { NavbarItem } from \"@heroui/react\"\r\nimport { isActiveHref } from \"deepsea-tools\"\r\nimport { StrictOmit } from \"soda-type\"\r\n\r\nexport interface AutoNavbarItemProps extends StrictOmit<ComponentProps<typeof NavbarItem>, \"isActive\"> {\r\n href: string\r\n}\r\n\r\nexport interface LocationState {\r\n href: string\r\n}\r\n\r\nexport interface CreateAutoNavbarItemParams {\r\n useLocation: () => LocationState\r\n}\r\n\r\nexport function createAutoNavbarItem({ useLocation }: CreateAutoNavbarItemParams) {\r\n function AutoNavbarItem(props: AutoNavbarItemProps): ReactNode {\r\n const { href, ...rest } = props\r\n const location = useLocation()\r\n return <NavbarItem {...rest} isActive={isActiveHref(href, location.href)} />\r\n }\r\n\r\n return AutoNavbarItem\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA2B;AAC3B,2BAA6B;AAetB,SAAS,qBAAqB,EAAE,YAAY,GAA+B;AAC9E,WAAS,eAAe,OAAuC;AAC3D,UAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,UAAM,WAAW,YAAY;AAC7B,WAAO,oCAAC,2BAAY,GAAG,MAAM,cAAU,mCAAa,MAAM,SAAS,IAAI,GAAG;AAAA,EAC9E;AAEA,SAAO;AACX;",
6
+ "names": []
7
+ }
@@ -2,6 +2,6 @@ import { ReactNode } from "react";
2
2
  import { Autocomplete } from "@heroui/react";
3
3
  import { Key } from "@react-types/shared";
4
4
  import { FieldComponentProps } from "soda-tanstack-form";
5
- export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, T extends object = object> extends FieldComponentProps<typeof Autocomplete<T>, FieldValue> {
5
+ export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object> extends FieldComponentProps<typeof Autocomplete<RenderItem>, FieldValue> {
6
6
  }
7
- export declare function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, T extends object = object>({ field, ...rest }: FormAutocompleteProps<FieldValue, T>): ReactNode;
7
+ export declare function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>({ field, ...rest }: FormAutocompleteProps<FieldValue, RenderItem>): ReactNode;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/FormAutocomplete.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { Autocomplete } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, T extends object = object>\n extends FieldComponentProps<typeof Autocomplete<T>, FieldValue> {}\n\nexport function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, T extends object = object>({\n field,\n ...rest\n}: FormAutocompleteProps<FieldValue, T>): ReactNode {\n return (\n <Autocomplete<T>\n selectedKey={field.state.value ?? null}\n onSelectionChange={value => field.handleChange((value ?? undefined) as FieldValue)}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAA6B;AAI7B,0BAA6B;AAKtB,SAAS,iBAAkG;AAAA,EAC9G;AAAA,EACA,GAAG;AACP,GAAoD;AAChD,SACI;AAAA,IAAC;AAAA;AAAA,MACG,aAAa,MAAM,MAAM,SAAS;AAAA,MAClC,mBAAmB,WAAS,MAAM,aAAc,SAAS,MAAwB;AAAA,MACjF,QAAQ,MAAM;AAAA,MACd,cAAc,oCAAC,oCAAa,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,MAC3D,WAAW,MAAM,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,MAC9C,GAAG;AAAA;AAAA,EACR;AAER;",
4
+ "sourcesContent": ["\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { Autocomplete } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>\n extends FieldComponentProps<typeof Autocomplete<RenderItem>, FieldValue> {}\n\nexport function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>({\n field,\n ...rest\n}: FormAutocompleteProps<FieldValue, RenderItem>): ReactNode {\n return (\n <Autocomplete<RenderItem>\n selectedKey={field.state.value ?? null}\n onSelectionChange={value => field.handleChange((value ?? undefined) as FieldValue)}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAA6B;AAI7B,0BAA6B;AAKtB,SAAS,iBAA2G;AAAA,EACvH;AAAA,EACA,GAAG;AACP,GAA6D;AACzD,SACI;AAAA,IAAC;AAAA;AAAA,MACG,aAAa,MAAM,MAAM,SAAS;AAAA,MAClC,mBAAmB,WAAS,MAAM,aAAc,SAAS,MAAwB;AAAA,MACjF,QAAQ,MAAM;AAAA,MACd,cAAc,oCAAC,oCAAa,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,MAC3D,WAAW,MAAM,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,MAC9C,GAAG;AAAA;AAAA,EACR;AAER;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ import { Select } from "@heroui/react";
2
2
  import { Key } from "@react-types/shared";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
- export interface FormSelectProps<Value extends Key | undefined = Key | undefined, Multiple extends boolean = false, T extends object = object, FieldValue = Multiple extends true ? Value[] : Value> extends StrictOmit<FieldComponentProps<typeof Select<T>, FieldValue>, "multiple"> {
5
+ export interface FormSelectProps<Multiple extends boolean = false, Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined, RenderItem extends object = object> extends StrictOmit<FieldComponentProps<typeof Select<RenderItem>, Value>, "multiple"> {
6
6
  multiple?: Multiple;
7
7
  }
8
- export declare function FormSelect<Value extends Key | undefined = Key | undefined, Multiple extends boolean = false, T extends object = object, FieldValue = Multiple extends true ? Value[] : Value>({ field, multiple, ...rest }: FormSelectProps<Value, Multiple, T, FieldValue>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function FormSelect<Multiple extends boolean = false, Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined, RenderItem extends object = object>({ field, multiple, ...rest }: FormSelectProps<Multiple, Value, RenderItem>): import("react/jsx-runtime").JSX.Element;
@@ -30,7 +30,7 @@ function FormSelect({ field, multiple, ...rest }) {
30
30
  return /* @__PURE__ */ React.createElement(
31
31
  import_react.Select,
32
32
  {
33
- selectedKeys: Array.isArray(field.state.value) ? field.state.value.filter(import_deepsea_tools.isNonNullable) : (0, import_deepsea_tools.isNonNullable)(field.state.value) ? [field.state.value] : [],
33
+ selectedKeys: (0, import_deepsea_tools.isNonNullable)(field.state.value) ? multiple ? field.state.value : [field.state.value] : [],
34
34
  onSelectionChange: (keys) => {
35
35
  const value = Array.from(keys);
36
36
  field.handleChange(multiple ? value : value.at(0));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/FormSelect.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport { Select } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { isNonNullable } from \"deepsea-tools\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\nimport { StrictOmit } from \"soda-type\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormSelectProps<\n Value extends Key | undefined = Key | undefined,\n Multiple extends boolean = false,\n T extends object = object,\n FieldValue = Multiple extends true ? Value[] : Value,\n> extends StrictOmit<FieldComponentProps<typeof Select<T>, FieldValue>, \"multiple\"> {\n multiple?: Multiple\n}\n\nexport function FormSelect<\n Value extends Key | undefined = Key | undefined,\n Multiple extends boolean = false,\n T extends object = object,\n FieldValue = Multiple extends true ? Value[] : Value,\n>({ field, multiple, ...rest }: FormSelectProps<Value, Multiple, T, FieldValue>) {\n return (\n <Select<T>\n selectedKeys={\n Array.isArray(field.state.value) ? field.state.value.filter(isNonNullable) : isNonNullable(field.state.value) ? [field.state.value] : []\n }\n onSelectionChange={keys => {\n const value = Array.from(keys) as string[]\n field.handleChange((multiple ? value : value.at(0)) as FieldValue)\n }}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAuB;AAEvB,2BAA8B;AAI9B,0BAA6B;AAWtB,SAAS,WAKd,EAAE,OAAO,UAAU,GAAG,KAAK,GAAoD;AAC7E,SACI;AAAA,IAAC;AAAA;AAAA,MACG,cACI,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,OAAO,kCAAa,QAAI,oCAAc,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,MAE3I,mBAAmB,UAAQ;AACvB,cAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,cAAM,aAAc,WAAW,QAAQ,MAAM,GAAG,CAAC,CAAgB;AAAA,MACrE;AAAA,MACA,QAAQ,MAAM;AAAA,MACd,cAAc,oCAAC,oCAAa,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,MAC3D,WAAW,MAAM,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,MAC9C,GAAG;AAAA;AAAA,EACR;AAER;",
4
+ "sourcesContent": ["\"use client\"\n\nimport { Select } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { isNonNullable } from \"deepsea-tools\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\nimport { StrictOmit } from \"soda-type\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormSelectProps<\n Multiple extends boolean = false,\n Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,\n RenderItem extends object = object,\n> extends StrictOmit<FieldComponentProps<typeof Select<RenderItem>, Value>, \"multiple\"> {\n multiple?: Multiple\n}\n\nexport function FormSelect<\n Multiple extends boolean = false,\n Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,\n RenderItem extends object = object,\n>({ field, multiple, ...rest }: FormSelectProps<Multiple, Value, RenderItem>) {\n return (\n <Select<RenderItem>\n selectedKeys={isNonNullable(field.state.value) ? (multiple ? (field.state.value as Key[]) : [field.state.value as Key]) : []}\n onSelectionChange={keys => {\n const value = Array.from(keys)\n field.handleChange((multiple ? value : value.at(0)) as Value)\n }}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAuB;AAEvB,2BAA8B;AAI9B,0BAA6B;AAUtB,SAAS,WAId,EAAE,OAAO,UAAU,GAAG,KAAK,GAAiD;AAC1E,SACI;AAAA,IAAC;AAAA;AAAA,MACG,kBAAc,oCAAc,MAAM,MAAM,KAAK,IAAK,WAAY,MAAM,MAAM,QAAkB,CAAC,MAAM,MAAM,KAAY,IAAK,CAAC;AAAA,MAC3H,mBAAmB,UAAQ;AACvB,cAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,cAAM,aAAc,WAAW,QAAQ,MAAM,GAAG,CAAC,CAAW;AAAA,MAChE;AAAA,MACA,QAAQ,MAAM;AAAA,MACd,cAAc,oCAAC,oCAAa,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,MAC3D,WAAW,MAAM,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,MAC9C,GAAG;AAAA;AAAA,EACR;AAER;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ export * from "./components/AutoNavbarItem";
1
2
  export * from "./components/ErrorMessage";
2
3
  export * from "./components/FormAutocomplete";
3
4
  export * from "./components/FormCalendar";
package/dist/cjs/index.js CHANGED
@@ -16,6 +16,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  // src/index.ts
17
17
  var src_exports = {};
18
18
  module.exports = __toCommonJS(src_exports);
19
+ __reExport(src_exports, require("./components/AutoNavbarItem"), module.exports);
19
20
  __reExport(src_exports, require("./components/ErrorMessage"), module.exports);
20
21
  __reExport(src_exports, require("./components/FormAutocomplete"), module.exports);
21
22
  __reExport(src_exports, require("./components/FormCalendar"), module.exports);
@@ -38,6 +39,7 @@ __reExport(src_exports, require("./utils/getTimeValue"), module.exports);
38
39
  __reExport(src_exports, require("./utils/parseTime"), module.exports);
39
40
  // Annotate the CommonJS export names for ESM import in node:
40
41
  0 && (module.exports = {
42
+ ...require("./components/AutoNavbarItem"),
41
43
  ...require("./components/ErrorMessage"),
42
44
  ...require("./components/FormAutocomplete"),
43
45
  ...require("./components/FormCalendar"),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["export * from \"@/components/ErrorMessage\"\nexport * from \"@/components/FormAutocomplete\"\nexport * from \"@/components/FormCalendar\"\nexport * from \"@/components/FormCheckbox\"\nexport * from \"@/components/FormCheckboxGroup\"\nexport * from \"@/components/FormDateInput\"\nexport * from \"@/components/FormDatePicker\"\nexport * from \"@/components/FormDateRangePicker\"\nexport * from \"@/components/FormInput\"\nexport * from \"@/components/FormInputOtp\"\nexport * from \"@/components/FormNumberInput\"\nexport * from \"@/components/FormPagination\"\nexport * from \"@/components/FormRadioGroup\"\nexport * from \"@/components/FormRangeCalendar\"\nexport * from \"@/components/FormSelect\"\nexport * from \"@/components/FormSwitch\"\nexport * from \"@/components/FormTextarea\"\nexport * from \"@/components/FormTimeInput\"\nexport * from \"@/utils/getTimeValue\"\nexport * from \"@/utils/parseTime\"\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,sCAAd;AACA,wBAAc,0CADd;AAEA,wBAAc,sCAFd;AAGA,wBAAc,sCAHd;AAIA,wBAAc,2CAJd;AAKA,wBAAc,uCALd;AAMA,wBAAc,wCANd;AAOA,wBAAc,6CAPd;AAQA,wBAAc,mCARd;AASA,wBAAc,sCATd;AAUA,wBAAc,yCAVd;AAWA,wBAAc,wCAXd;AAYA,wBAAc,wCAZd;AAaA,wBAAc,2CAbd;AAcA,wBAAc,oCAdd;AAeA,wBAAc,oCAfd;AAgBA,wBAAc,sCAhBd;AAiBA,wBAAc,uCAjBd;AAkBA,wBAAc,iCAlBd;AAmBA,wBAAc,8BAnBd;",
4
+ "sourcesContent": ["export * from \"@/components/AutoNavbarItem\"\nexport * from \"@/components/ErrorMessage\"\nexport * from \"@/components/FormAutocomplete\"\nexport * from \"@/components/FormCalendar\"\nexport * from \"@/components/FormCheckbox\"\nexport * from \"@/components/FormCheckboxGroup\"\nexport * from \"@/components/FormDateInput\"\nexport * from \"@/components/FormDatePicker\"\nexport * from \"@/components/FormDateRangePicker\"\nexport * from \"@/components/FormInput\"\nexport * from \"@/components/FormInputOtp\"\nexport * from \"@/components/FormNumberInput\"\nexport * from \"@/components/FormPagination\"\nexport * from \"@/components/FormRadioGroup\"\nexport * from \"@/components/FormRangeCalendar\"\nexport * from \"@/components/FormSelect\"\nexport * from \"@/components/FormSwitch\"\nexport * from \"@/components/FormTextarea\"\nexport * from \"@/components/FormTimeInput\"\nexport * from \"@/utils/getTimeValue\"\nexport * from \"@/utils/parseTime\"\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,wCAAd;AACA,wBAAc,sCADd;AAEA,wBAAc,0CAFd;AAGA,wBAAc,sCAHd;AAIA,wBAAc,sCAJd;AAKA,wBAAc,2CALd;AAMA,wBAAc,uCANd;AAOA,wBAAc,wCAPd;AAQA,wBAAc,6CARd;AASA,wBAAc,mCATd;AAUA,wBAAc,sCAVd;AAWA,wBAAc,yCAXd;AAYA,wBAAc,wCAZd;AAaA,wBAAc,wCAbd;AAcA,wBAAc,2CAdd;AAeA,wBAAc,oCAfd;AAgBA,wBAAc,oCAhBd;AAiBA,wBAAc,sCAjBd;AAkBA,wBAAc,uCAlBd;AAmBA,wBAAc,iCAnBd;AAoBA,wBAAc,8BApBd;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import { NavbarItem } from "@heroui/react";
3
+ import { StrictOmit } from "soda-type";
4
+ export interface AutoNavbarItemProps extends StrictOmit<ComponentProps<typeof NavbarItem>, "isActive"> {
5
+ href: string;
6
+ }
7
+ export interface LocationState {
8
+ href: string;
9
+ }
10
+ export interface CreateAutoNavbarItemParams {
11
+ useLocation: () => LocationState;
12
+ }
13
+ export declare function createAutoNavbarItem({ useLocation }: CreateAutoNavbarItemParams): (props: AutoNavbarItemProps) => ReactNode;
@@ -0,0 +1,20 @@
1
+ import { NavbarItem } from "@heroui/react";
2
+ import { isActiveHref } from "deepsea-tools";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ export function createAutoNavbarItem({
5
+ useLocation
6
+ }) {
7
+ function AutoNavbarItem(props) {
8
+ const {
9
+ href,
10
+ ...rest
11
+ } = props;
12
+ const location = useLocation();
13
+ return /*#__PURE__*/_jsx(NavbarItem, {
14
+ ...rest,
15
+ isActive: isActiveHref(href, location.href)
16
+ });
17
+ }
18
+ return AutoNavbarItem;
19
+ }
20
+ //# sourceMappingURL=AutoNavbarItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NavbarItem","isActiveHref","jsx","_jsx","createAutoNavbarItem","useLocation","AutoNavbarItem","props","href","rest","location","isActive"],"sources":["../../../src/components/AutoNavbarItem.tsx"],"sourcesContent":["import { ComponentProps, ReactNode } from \"react\"\r\nimport { NavbarItem } from \"@heroui/react\"\r\nimport { isActiveHref } from \"deepsea-tools\"\r\nimport { StrictOmit } from \"soda-type\"\r\n\r\nexport interface AutoNavbarItemProps extends StrictOmit<ComponentProps<typeof NavbarItem>, \"isActive\"> {\r\n href: string\r\n}\r\n\r\nexport interface LocationState {\r\n href: string\r\n}\r\n\r\nexport interface CreateAutoNavbarItemParams {\r\n useLocation: () => LocationState\r\n}\r\n\r\nexport function createAutoNavbarItem({ useLocation }: CreateAutoNavbarItemParams) {\r\n function AutoNavbarItem(props: AutoNavbarItemProps): ReactNode {\r\n const { href, ...rest } = props\r\n const location = useLocation()\r\n return <NavbarItem {...rest} isActive={isActiveHref(href, location.href)} />\r\n }\r\n\r\n return AutoNavbarItem\r\n}\r\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,YAAY,QAAQ,eAAe;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAe5C,OAAO,SAASC,oBAAoBA,CAAC;EAAEC;AAAwC,CAAC,EAAE;EAC9E,SAASC,cAAcA,CAACC,KAA0B,EAAa;IAC3D,MAAM;MAAEC,IAAI;MAAE,GAAGC;IAAK,CAAC,GAAGF,KAAK;IAC/B,MAAMG,QAAQ,GAAGL,WAAW,CAAC,CAAC;IAC9B,oBAAOF,IAAA,CAACH,UAAU;MAAA,GAAKS,IAAI;MAAEE,QAAQ,EAAEV,YAAY,CAACO,IAAI,EAAEE,QAAQ,CAACF,IAAI;IAAE,CAAE,CAAC;EAChF;EAEA,OAAOF,cAAc;AACzB"}
@@ -2,6 +2,6 @@ import { ReactNode } from "react";
2
2
  import { Autocomplete } from "@heroui/react";
3
3
  import { Key } from "@react-types/shared";
4
4
  import { FieldComponentProps } from "soda-tanstack-form";
5
- export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, T extends object = object> extends FieldComponentProps<typeof Autocomplete<T>, FieldValue> {
5
+ export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object> extends FieldComponentProps<typeof Autocomplete<RenderItem>, FieldValue> {
6
6
  }
7
- export declare function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, T extends object = object>({ field, ...rest }: FormAutocompleteProps<FieldValue, T>): ReactNode;
7
+ export declare function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>({ field, ...rest }: FormAutocompleteProps<FieldValue, RenderItem>): ReactNode;
@@ -1 +1 @@
1
- {"version":3,"names":["Autocomplete","ErrorMessage","jsx","_jsx","FormAutocomplete","field","rest","selectedKey","state","value","onSelectionChange","handleChange","undefined","onBlur","handleBlur","errorMessage","data","meta","errors","isInvalid","some","Boolean"],"sources":["../../../src/components/FormAutocomplete.tsx"],"sourcesContent":["\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { Autocomplete } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, T extends object = object>\n extends FieldComponentProps<typeof Autocomplete<T>, FieldValue> {}\n\nexport function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, T extends object = object>({\n field,\n ...rest\n}: FormAutocompleteProps<FieldValue, T>): ReactNode {\n return (\n <Autocomplete<T>\n selectedKey={field.state.value ?? null}\n onSelectionChange={value => field.handleChange((value ?? undefined) as FieldValue)}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],"mappings":"AAAA,YAAY;;AAGZ,SAASA,YAAY,QAAQ,eAAe;AAI5C,SAASC,YAAY;AAAwB,SAAAC,GAAA,IAAAC,IAAA;AAK7C,OAAO,SAASC,gBAAgBA,CAAkF;EAC9GC,KAAK;EACL,GAAGC;AAC+B,CAAC,EAAa;EAChD,oBACIH,IAAA,CAACH,YAAY;IACTO,WAAW,EAAEF,KAAK,CAACG,KAAK,CAACC,KAAK,IAAI,IAAK;IACvCC,iBAAiB,EAAED,KAAK,IAAIJ,KAAK,CAACM,YAAY,CAAEF,KAAK,IAAIG,SAAwB,CAAE;IACnFC,MAAM,EAAER,KAAK,CAACS,UAAW;IACzBC,YAAY,eAAEZ,IAAA,CAACF,YAAY;MAACe,IAAI,EAAEX,KAAK,CAACG,KAAK,CAACS,IAAI,CAACC;IAAO,CAAE,CAAE;IAC9DC,SAAS,EAAEd,KAAK,CAACG,KAAK,CAACS,IAAI,CAACC,MAAM,CAACE,IAAI,CAACC,OAAO,CAAE;IAAA,GAC7Cf;EAAI,CACX,CAAC;AAEV"}
1
+ {"version":3,"names":["Autocomplete","ErrorMessage","jsx","_jsx","FormAutocomplete","field","rest","selectedKey","state","value","onSelectionChange","handleChange","undefined","onBlur","handleBlur","errorMessage","data","meta","errors","isInvalid","some","Boolean"],"sources":["../../../src/components/FormAutocomplete.tsx"],"sourcesContent":["\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { Autocomplete } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>\n extends FieldComponentProps<typeof Autocomplete<RenderItem>, FieldValue> {}\n\nexport function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>({\n field,\n ...rest\n}: FormAutocompleteProps<FieldValue, RenderItem>): ReactNode {\n return (\n <Autocomplete<RenderItem>\n selectedKey={field.state.value ?? null}\n onSelectionChange={value => field.handleChange((value ?? undefined) as FieldValue)}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],"mappings":"AAAA,YAAY;;AAGZ,SAASA,YAAY,QAAQ,eAAe;AAI5C,SAASC,YAAY;AAAwB,SAAAC,GAAA,IAAAC,IAAA;AAK7C,OAAO,SAASC,gBAAgBA,CAA2F;EACvHC,KAAK;EACL,GAAGC;AACwC,CAAC,EAAa;EACzD,oBACIH,IAAA,CAACH,YAAY;IACTO,WAAW,EAAEF,KAAK,CAACG,KAAK,CAACC,KAAK,IAAI,IAAK;IACvCC,iBAAiB,EAAED,KAAK,IAAIJ,KAAK,CAACM,YAAY,CAAEF,KAAK,IAAIG,SAAwB,CAAE;IACnFC,MAAM,EAAER,KAAK,CAACS,UAAW;IACzBC,YAAY,eAAEZ,IAAA,CAACF,YAAY;MAACe,IAAI,EAAEX,KAAK,CAACG,KAAK,CAACS,IAAI,CAACC;IAAO,CAAE,CAAE;IAC9DC,SAAS,EAAEd,KAAK,CAACG,KAAK,CAACS,IAAI,CAACC,MAAM,CAACE,IAAI,CAACC,OAAO,CAAE;IAAA,GAC7Cf;EAAI,CACX,CAAC;AAEV"}
@@ -2,7 +2,7 @@ import { Select } from "@heroui/react";
2
2
  import { Key } from "@react-types/shared";
3
3
  import { FieldComponentProps } from "soda-tanstack-form";
4
4
  import { StrictOmit } from "soda-type";
5
- export interface FormSelectProps<Value extends Key | undefined = Key | undefined, Multiple extends boolean = false, T extends object = object, FieldValue = Multiple extends true ? Value[] : Value> extends StrictOmit<FieldComponentProps<typeof Select<T>, FieldValue>, "multiple"> {
5
+ export interface FormSelectProps<Multiple extends boolean = false, Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined, RenderItem extends object = object> extends StrictOmit<FieldComponentProps<typeof Select<RenderItem>, Value>, "multiple"> {
6
6
  multiple?: Multiple;
7
7
  }
8
- export declare function FormSelect<Value extends Key | undefined = Key | undefined, Multiple extends boolean = false, T extends object = object, FieldValue = Multiple extends true ? Value[] : Value>({ field, multiple, ...rest }: FormSelectProps<Value, Multiple, T, FieldValue>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function FormSelect<Multiple extends boolean = false, Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined, RenderItem extends object = object>({ field, multiple, ...rest }: FormSelectProps<Multiple, Value, RenderItem>): import("react/jsx-runtime").JSX.Element;
@@ -10,7 +10,7 @@ export function FormSelect({
10
10
  ...rest
11
11
  }) {
12
12
  return /*#__PURE__*/_jsx(Select, {
13
- selectedKeys: Array.isArray(field.state.value) ? field.state.value.filter(isNonNullable) : isNonNullable(field.state.value) ? [field.state.value] : [],
13
+ selectedKeys: isNonNullable(field.state.value) ? multiple ? field.state.value : [field.state.value] : [],
14
14
  onSelectionChange: keys => {
15
15
  const value = Array.from(keys);
16
16
  field.handleChange(multiple ? value : value.at(0));
@@ -1 +1 @@
1
- {"version":3,"names":["Select","isNonNullable","ErrorMessage","jsx","_jsx","FormSelect","field","multiple","rest","selectedKeys","Array","isArray","state","value","filter","onSelectionChange","keys","from","handleChange","at","onBlur","handleBlur","errorMessage","data","meta","errors","isInvalid","some","Boolean"],"sources":["../../../src/components/FormSelect.tsx"],"sourcesContent":["\"use client\"\n\nimport { Select } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { isNonNullable } from \"deepsea-tools\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\nimport { StrictOmit } from \"soda-type\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormSelectProps<\n Value extends Key | undefined = Key | undefined,\n Multiple extends boolean = false,\n T extends object = object,\n FieldValue = Multiple extends true ? Value[] : Value,\n> extends StrictOmit<FieldComponentProps<typeof Select<T>, FieldValue>, \"multiple\"> {\n multiple?: Multiple\n}\n\nexport function FormSelect<\n Value extends Key | undefined = Key | undefined,\n Multiple extends boolean = false,\n T extends object = object,\n FieldValue = Multiple extends true ? Value[] : Value,\n>({ field, multiple, ...rest }: FormSelectProps<Value, Multiple, T, FieldValue>) {\n return (\n <Select<T>\n selectedKeys={\n Array.isArray(field.state.value) ? field.state.value.filter(isNonNullable) : isNonNullable(field.state.value) ? [field.state.value] : []\n }\n onSelectionChange={keys => {\n const value = Array.from(keys) as string[]\n field.handleChange((multiple ? value : value.at(0)) as FieldValue)\n }}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,MAAM,QAAQ,eAAe;AAEtC,SAASC,aAAa,QAAQ,eAAe;AAI7C,SAASC,YAAY;AAAwB,SAAAC,GAAA,IAAAC,IAAA;AAW7C,OAAO,SAASC,UAAUA,CAKxB;EAAEC,KAAK;EAAEC,QAAQ;EAAE,GAAGC;AAAsD,CAAC,EAAE;EAC7E,oBACIJ,IAAA,CAACJ,MAAM;IACHS,YAAY,EACRC,KAAK,CAACC,OAAO,CAACL,KAAK,CAACM,KAAK,CAACC,KAAK,CAAC,GAAGP,KAAK,CAACM,KAAK,CAACC,KAAK,CAACC,MAAM,CAACb,aAAa,CAAC,GAAGA,aAAa,CAACK,KAAK,CAACM,KAAK,CAACC,KAAK,CAAC,GAAG,CAACP,KAAK,CAACM,KAAK,CAACC,KAAK,CAAC,GAAG,EACzI;IACDE,iBAAiB,EAAEC,IAAI,IAAI;MACvB,MAAMH,KAAK,GAAGH,KAAK,CAACO,IAAI,CAACD,IAAI,CAAa;MAC1CV,KAAK,CAACY,YAAY,CAAEX,QAAQ,GAAGM,KAAK,GAAGA,KAAK,CAACM,EAAE,CAAC,CAAC,CAAgB,CAAC;IACtE,CAAE;IACFC,MAAM,EAAEd,KAAK,CAACe,UAAW;IACzBC,YAAY,eAAElB,IAAA,CAACF,YAAY;MAACqB,IAAI,EAAEjB,KAAK,CAACM,KAAK,CAACY,IAAI,CAACC;IAAO,CAAE,CAAE;IAC9DC,SAAS,EAAEpB,KAAK,CAACM,KAAK,CAACY,IAAI,CAACC,MAAM,CAACE,IAAI,CAACC,OAAO,CAAE;IAAA,GAC7CpB;EAAI,CACX,CAAC;AAEV"}
1
+ {"version":3,"names":["Select","isNonNullable","ErrorMessage","jsx","_jsx","FormSelect","field","multiple","rest","selectedKeys","state","value","onSelectionChange","keys","Array","from","handleChange","at","onBlur","handleBlur","errorMessage","data","meta","errors","isInvalid","some","Boolean"],"sources":["../../../src/components/FormSelect.tsx"],"sourcesContent":["\"use client\"\n\nimport { Select } from \"@heroui/react\"\nimport { Key } from \"@react-types/shared\"\nimport { isNonNullable } from \"deepsea-tools\"\nimport { FieldComponentProps } from \"soda-tanstack-form\"\nimport { StrictOmit } from \"soda-type\"\n\nimport { ErrorMessage } from \"./ErrorMessage\"\n\nexport interface FormSelectProps<\n Multiple extends boolean = false,\n Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,\n RenderItem extends object = object,\n> extends StrictOmit<FieldComponentProps<typeof Select<RenderItem>, Value>, \"multiple\"> {\n multiple?: Multiple\n}\n\nexport function FormSelect<\n Multiple extends boolean = false,\n Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,\n RenderItem extends object = object,\n>({ field, multiple, ...rest }: FormSelectProps<Multiple, Value, RenderItem>) {\n return (\n <Select<RenderItem>\n selectedKeys={isNonNullable(field.state.value) ? (multiple ? (field.state.value as Key[]) : [field.state.value as Key]) : []}\n onSelectionChange={keys => {\n const value = Array.from(keys)\n field.handleChange((multiple ? value : value.at(0)) as Value)\n }}\n onBlur={field.handleBlur}\n errorMessage={<ErrorMessage data={field.state.meta.errors} />}\n isInvalid={field.state.meta.errors.some(Boolean)}\n {...rest}\n />\n )\n}\n"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,MAAM,QAAQ,eAAe;AAEtC,SAASC,aAAa,QAAQ,eAAe;AAI7C,SAASC,YAAY;AAAwB,SAAAC,GAAA,IAAAC,IAAA;AAU7C,OAAO,SAASC,UAAUA,CAIxB;EAAEC,KAAK;EAAEC,QAAQ;EAAE,GAAGC;AAAmD,CAAC,EAAE;EAC1E,oBACIJ,IAAA,CAACJ,MAAM;IACHS,YAAY,EAAER,aAAa,CAACK,KAAK,CAACI,KAAK,CAACC,KAAK,CAAC,GAAIJ,QAAQ,GAAID,KAAK,CAACI,KAAK,CAACC,KAAK,GAAa,CAACL,KAAK,CAACI,KAAK,CAACC,KAAK,CAAQ,GAAI,EAAG;IAC7HC,iBAAiB,EAAEC,IAAI,IAAI;MACvB,MAAMF,KAAK,GAAGG,KAAK,CAACC,IAAI,CAACF,IAAI,CAAC;MAC9BP,KAAK,CAACU,YAAY,CAAET,QAAQ,GAAGI,KAAK,GAAGA,KAAK,CAACM,EAAE,CAAC,CAAC,CAAW,CAAC;IACjE,CAAE;IACFC,MAAM,EAAEZ,KAAK,CAACa,UAAW;IACzBC,YAAY,eAAEhB,IAAA,CAACF,YAAY;MAACmB,IAAI,EAAEf,KAAK,CAACI,KAAK,CAACY,IAAI,CAACC;IAAO,CAAE,CAAE;IAC9DC,SAAS,EAAElB,KAAK,CAACI,KAAK,CAACY,IAAI,CAACC,MAAM,CAACE,IAAI,CAACC,OAAO,CAAE;IAAA,GAC7ClB;EAAI,CACX,CAAC;AAEV"}
@@ -1,3 +1,4 @@
1
+ export * from "./components/AutoNavbarItem";
1
2
  export * from "./components/ErrorMessage";
2
3
  export * from "./components/FormAutocomplete";
3
4
  export * from "./components/FormCalendar";
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from "./components/AutoNavbarItem";
1
2
  export * from "./components/ErrorMessage";
2
3
  export * from "./components/FormAutocomplete";
3
4
  export * from "./components/FormCalendar";
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"@/components/ErrorMessage\"\nexport * from \"@/components/FormAutocomplete\"\nexport * from \"@/components/FormCalendar\"\nexport * from \"@/components/FormCheckbox\"\nexport * from \"@/components/FormCheckboxGroup\"\nexport * from \"@/components/FormDateInput\"\nexport * from \"@/components/FormDatePicker\"\nexport * from \"@/components/FormDateRangePicker\"\nexport * from \"@/components/FormInput\"\nexport * from \"@/components/FormInputOtp\"\nexport * from \"@/components/FormNumberInput\"\nexport * from \"@/components/FormPagination\"\nexport * from \"@/components/FormRadioGroup\"\nexport * from \"@/components/FormRangeCalendar\"\nexport * from \"@/components/FormSelect\"\nexport * from \"@/components/FormSwitch\"\nexport * from \"@/components/FormTextarea\"\nexport * from \"@/components/FormTimeInput\"\nexport * from \"@/utils/getTimeValue\"\nexport * from \"@/utils/parseTime\"\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"@/components/AutoNavbarItem\"\nexport * from \"@/components/ErrorMessage\"\nexport * from \"@/components/FormAutocomplete\"\nexport * from \"@/components/FormCalendar\"\nexport * from \"@/components/FormCheckbox\"\nexport * from \"@/components/FormCheckboxGroup\"\nexport * from \"@/components/FormDateInput\"\nexport * from \"@/components/FormDatePicker\"\nexport * from \"@/components/FormDateRangePicker\"\nexport * from \"@/components/FormInput\"\nexport * from \"@/components/FormInputOtp\"\nexport * from \"@/components/FormNumberInput\"\nexport * from \"@/components/FormPagination\"\nexport * from \"@/components/FormRadioGroup\"\nexport * from \"@/components/FormRangeCalendar\"\nexport * from \"@/components/FormSelect\"\nexport * from \"@/components/FormSwitch\"\nexport * from \"@/components/FormTextarea\"\nexport * from \"@/components/FormTimeInput\"\nexport * from \"@/utils/getTimeValue\"\nexport * from \"@/utils/parseTime\"\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "soda-heroui",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "@internationalized/date": "^3.7.0",
33
33
  "@tanstack/react-form": "^1.1.2",
34
- "deepsea-tools": "5.21.0",
34
+ "deepsea-tools": "5.23.0",
35
35
  "soda-type": "6.0.2",
36
36
  "soda-tanstack-form": "0.0.3"
37
37
  },
@@ -0,0 +1,26 @@
1
+ import { ComponentProps, ReactNode } from "react"
2
+ import { NavbarItem } from "@heroui/react"
3
+ import { isActiveHref } from "deepsea-tools"
4
+ import { StrictOmit } from "soda-type"
5
+
6
+ export interface AutoNavbarItemProps extends StrictOmit<ComponentProps<typeof NavbarItem>, "isActive"> {
7
+ href: string
8
+ }
9
+
10
+ export interface LocationState {
11
+ href: string
12
+ }
13
+
14
+ export interface CreateAutoNavbarItemParams {
15
+ useLocation: () => LocationState
16
+ }
17
+
18
+ export function createAutoNavbarItem({ useLocation }: CreateAutoNavbarItemParams) {
19
+ function AutoNavbarItem(props: AutoNavbarItemProps): ReactNode {
20
+ const { href, ...rest } = props
21
+ const location = useLocation()
22
+ return <NavbarItem {...rest} isActive={isActiveHref(href, location.href)} />
23
+ }
24
+
25
+ return AutoNavbarItem
26
+ }
@@ -7,15 +7,15 @@ import { FieldComponentProps } from "soda-tanstack-form"
7
7
 
8
8
  import { ErrorMessage } from "./ErrorMessage"
9
9
 
10
- export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, T extends object = object>
11
- extends FieldComponentProps<typeof Autocomplete<T>, FieldValue> {}
10
+ export interface FormAutocompleteProps<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>
11
+ extends FieldComponentProps<typeof Autocomplete<RenderItem>, FieldValue> {}
12
12
 
13
- export function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, T extends object = object>({
13
+ export function FormAutocomplete<FieldValue extends Key | undefined = Key | undefined, RenderItem extends object = object>({
14
14
  field,
15
15
  ...rest
16
- }: FormAutocompleteProps<FieldValue, T>): ReactNode {
16
+ }: FormAutocompleteProps<FieldValue, RenderItem>): ReactNode {
17
17
  return (
18
- <Autocomplete<T>
18
+ <Autocomplete<RenderItem>
19
19
  selectedKey={field.state.value ?? null}
20
20
  onSelectionChange={value => field.handleChange((value ?? undefined) as FieldValue)}
21
21
  onBlur={field.handleBlur}
@@ -9,28 +9,24 @@ import { StrictOmit } from "soda-type"
9
9
  import { ErrorMessage } from "./ErrorMessage"
10
10
 
11
11
  export interface FormSelectProps<
12
- Value extends Key | undefined = Key | undefined,
13
12
  Multiple extends boolean = false,
14
- T extends object = object,
15
- FieldValue = Multiple extends true ? Value[] : Value,
16
- > extends StrictOmit<FieldComponentProps<typeof Select<T>, FieldValue>, "multiple"> {
13
+ Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,
14
+ RenderItem extends object = object,
15
+ > extends StrictOmit<FieldComponentProps<typeof Select<RenderItem>, Value>, "multiple"> {
17
16
  multiple?: Multiple
18
17
  }
19
18
 
20
19
  export function FormSelect<
21
- Value extends Key | undefined = Key | undefined,
22
20
  Multiple extends boolean = false,
23
- T extends object = object,
24
- FieldValue = Multiple extends true ? Value[] : Value,
25
- >({ field, multiple, ...rest }: FormSelectProps<Value, Multiple, T, FieldValue>) {
21
+ Value extends (Multiple extends true ? Key[] : Key) | undefined = (Multiple extends true ? Key[] : Key) | undefined,
22
+ RenderItem extends object = object,
23
+ >({ field, multiple, ...rest }: FormSelectProps<Multiple, Value, RenderItem>) {
26
24
  return (
27
- <Select<T>
28
- selectedKeys={
29
- Array.isArray(field.state.value) ? field.state.value.filter(isNonNullable) : isNonNullable(field.state.value) ? [field.state.value] : []
30
- }
25
+ <Select<RenderItem>
26
+ selectedKeys={isNonNullable(field.state.value) ? (multiple ? (field.state.value as Key[]) : [field.state.value as Key]) : []}
31
27
  onSelectionChange={keys => {
32
- const value = Array.from(keys) as string[]
33
- field.handleChange((multiple ? value : value.at(0)) as FieldValue)
28
+ const value = Array.from(keys)
29
+ field.handleChange((multiple ? value : value.at(0)) as Value)
34
30
  }}
35
31
  onBlur={field.handleBlur}
36
32
  errorMessage={<ErrorMessage data={field.state.meta.errors} />}
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from "@/components/AutoNavbarItem"
1
2
  export * from "@/components/ErrorMessage"
2
3
  export * from "@/components/FormAutocomplete"
3
4
  export * from "@/components/FormCalendar"