@nestledjs/data-browser 0.1.1 → 0.1.4

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.
Files changed (83) hide show
  1. package/index.d.ts +15 -0
  2. package/index.js +64 -0
  3. package/lib/admin-data.d.ts +2 -0
  4. package/lib/components/filters/DateRangeFilter.d.ts +7 -0
  5. package/lib/components/filters/DateRangeFilter.js +105 -0
  6. package/lib/components/filters/NumberRangeFilter.d.ts +8 -0
  7. package/lib/components/filters/NumberRangeFilter.js +115 -0
  8. package/lib/components/filters/RelationComponents.d.ts +32 -0
  9. package/lib/components/filters/RelationComponents.js +265 -0
  10. package/lib/components/filters/RelationFilterField.d.ts +8 -0
  11. package/lib/components/filters/RelationFilterField.js +116 -0
  12. package/lib/components/filters/index.d.ts +4 -0
  13. package/lib/components/index.d.ts +2 -0
  14. package/lib/components/shared/AdminBreadcrumbs.d.ts +13 -0
  15. package/lib/components/shared/AdminBreadcrumbs.js +103 -0
  16. package/lib/components/shared/AdminErrorStates.d.ts +30 -0
  17. package/lib/components/shared/AdminErrorStates.js +214 -0
  18. package/lib/components/shared/AdminStatusDisplay.d.ts +21 -0
  19. package/lib/components/shared/AdminStatusDisplay.js +205 -0
  20. package/lib/components/shared/index.d.ts +3 -0
  21. package/lib/context/AdminDataContext.d.ts +47 -0
  22. package/lib/context/AdminDataContext.js +28 -0
  23. package/lib/hooks/useAdminList.d.ts +5 -0
  24. package/lib/hooks/useAdminList.js +41 -0
  25. package/lib/hooks/useClickOutside.d.ts +2 -0
  26. package/lib/hooks/useClickOutside.js +13 -0
  27. package/lib/hooks/useDebounce.d.ts +1 -0
  28. package/lib/hooks/useDebounce.js +13 -0
  29. package/lib/hooks/useRelationData.d.ts +7 -0
  30. package/lib/hooks/useRelationData.js +64 -0
  31. package/lib/layouts/AdminDataLayout.d.ts +5 -0
  32. package/lib/layouts/AdminDataLayout.js +315 -0
  33. package/lib/pages/AdminDataCreatePage.d.ts +4 -0
  34. package/lib/pages/AdminDataCreatePage.js +487 -0
  35. package/lib/pages/AdminDataEditPage.d.ts +4 -0
  36. package/lib/pages/AdminDataEditPage.js +903 -0
  37. package/lib/pages/AdminDataIndexPage.d.ts +4 -0
  38. package/lib/pages/AdminDataIndexPage.js +91 -0
  39. package/lib/pages/AdminDataListPage.d.ts +9 -0
  40. package/lib/pages/AdminDataListPage.js +1218 -0
  41. package/lib/types/index.d.ts +60 -0
  42. package/lib/types/index.js +16 -0
  43. package/lib/utils/graphql-utils.d.ts +25 -0
  44. package/lib/utils/graphql-utils.js +265 -0
  45. package/lib/utils/secure-storage.d.ts +50 -0
  46. package/lib/utils/secure-storage.js +145 -0
  47. package/lib/utils/string-utils.d.ts +6 -0
  48. package/lib/utils/string-utils.js +27 -0
  49. package/package.json +16 -3
  50. package/.babelrc +0 -12
  51. package/LICENSE +0 -21
  52. package/eslint.config.mjs +0 -12
  53. package/project.json +0 -35
  54. package/src/index.ts +0 -28
  55. package/src/lib/admin-data.spec.tsx +0 -10
  56. package/src/lib/admin-data.tsx +0 -9
  57. package/src/lib/components/filters/DateRangeFilter.tsx +0 -88
  58. package/src/lib/components/filters/NumberRangeFilter.tsx +0 -111
  59. package/src/lib/components/filters/RelationComponents.tsx +0 -176
  60. package/src/lib/components/filters/RelationFilterField.tsx +0 -106
  61. package/src/lib/components/filters/index.ts +0 -5
  62. package/src/lib/components/index.ts +0 -2
  63. package/src/lib/components/shared/AdminBreadcrumbs.tsx +0 -88
  64. package/src/lib/components/shared/AdminErrorStates.tsx +0 -180
  65. package/src/lib/components/shared/AdminStatusDisplay.tsx +0 -292
  66. package/src/lib/components/shared/index.ts +0 -3
  67. package/src/lib/context/AdminDataContext.tsx +0 -74
  68. package/src/lib/hooks/useAdminList.ts +0 -42
  69. package/src/lib/hooks/useClickOutside.ts +0 -21
  70. package/src/lib/hooks/useDebounce.ts +0 -16
  71. package/src/lib/hooks/useRelationData.ts +0 -114
  72. package/src/lib/layouts/AdminDataLayout.tsx +0 -251
  73. package/src/lib/pages/AdminDataCreatePage.tsx +0 -415
  74. package/src/lib/pages/AdminDataEditPage.tsx +0 -777
  75. package/src/lib/pages/AdminDataIndexPage.tsx +0 -50
  76. package/src/lib/pages/AdminDataListPage.tsx +0 -921
  77. package/src/lib/types/index.ts +0 -51
  78. package/src/lib/utils/graphql-utils.ts +0 -538
  79. package/src/lib/utils/secure-storage.ts +0 -305
  80. package/src/lib/utils/string-utils.ts +0 -53
  81. package/tsconfig.json +0 -17
  82. package/tsconfig.lib.json +0 -20
  83. package/vite.config.ts +0 -35
package/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export * from './lib/context/AdminDataContext';
2
+ export * from './lib/pages/AdminDataCreatePage';
3
+ export * from './lib/pages/AdminDataEditPage';
4
+ export * from './lib/pages/AdminDataListPage';
5
+ export * from './lib/pages/AdminDataIndexPage';
6
+ export * from './lib/layouts/AdminDataLayout';
7
+ export * from './lib/types';
8
+ export * from './lib/hooks/useAdminList';
9
+ export * from './lib/hooks/useClickOutside';
10
+ export * from './lib/hooks/useDebounce';
11
+ export * from './lib/hooks/useRelationData';
12
+ export * from './lib/components';
13
+ export * from './lib/utils/graphql-utils';
14
+ export * from './lib/utils/secure-storage';
15
+ export * from './lib/utils/string-utils';
package/index.js ADDED
@@ -0,0 +1,64 @@
1
+ import { AdminDataProvider as r, useAdminDataContext as o } from "./lib/context/AdminDataContext.js";
2
+ import { AdminDataCreateErrorBoundary as m, AdminDataCreatePage as i } from "./lib/pages/AdminDataCreatePage.js";
3
+ import { AdminDataEditErrorBoundary as d, AdminDataEditPage as p } from "./lib/pages/AdminDataEditPage.js";
4
+ import { AdminDataErrorBoundary as u, AdminDataListPage as x } from "./lib/pages/AdminDataListPage.js";
5
+ import { AdminDataIndexPage as s } from "./lib/pages/AdminDataIndexPage.js";
6
+ import { AdminDataLayout as D } from "./lib/layouts/AdminDataLayout.js";
7
+ import { initialState as c } from "./lib/types/index.js";
8
+ import { useAdminList as F } from "./lib/hooks/useAdminList.js";
9
+ import { useClickOutside as y } from "./lib/hooks/useClickOutside.js";
10
+ import { useDebounce as L } from "./lib/hooks/useDebounce.js";
11
+ import { useRelationData as C } from "./lib/hooks/useRelationData.js";
12
+ import { DateRangeFilter as B } from "./lib/components/filters/DateRangeFilter.js";
13
+ import { NumberRangeFilter as P } from "./lib/components/filters/NumberRangeFilter.js";
14
+ import { RelationDropdownButton as k, RelationDropdownContent as w, RelationItem as M, RelationItemList as v, RelationSearchInput as z } from "./lib/components/filters/RelationComponents.js";
15
+ import { RelationFilterField as U } from "./lib/components/filters/RelationFilterField.js";
16
+ import { AdminBreadcrumbs as j } from "./lib/components/shared/AdminBreadcrumbs.js";
17
+ import { AdminEmptyState as G, AdminErrorState as H, AdminLoadingState as J } from "./lib/components/shared/AdminErrorStates.js";
18
+ import { AdminStatusDisplay as Q, AdminUserStatus as T } from "./lib/components/shared/AdminStatusDisplay.js";
19
+ import { buildFormFields as X, cleanFormInput as Y, getAdminDocuments as Z, getMutationName as _ } from "./lib/utils/graphql-utils.js";
20
+ import { AdminLocalStorage as ee, SecureAdminLocalStorage as te } from "./lib/utils/secure-storage.js";
21
+ import { formatFieldName as oe, getItemDisplayName as ae, getSmartSearchFields as me, kebabCase as ie, normalizeModelNameForDocument as ne, spacedWords as de } from "./lib/utils/string-utils.js";
22
+ export {
23
+ j as AdminBreadcrumbs,
24
+ m as AdminDataCreateErrorBoundary,
25
+ i as AdminDataCreatePage,
26
+ d as AdminDataEditErrorBoundary,
27
+ p as AdminDataEditPage,
28
+ u as AdminDataErrorBoundary,
29
+ s as AdminDataIndexPage,
30
+ D as AdminDataLayout,
31
+ x as AdminDataListPage,
32
+ r as AdminDataProvider,
33
+ G as AdminEmptyState,
34
+ H as AdminErrorState,
35
+ J as AdminLoadingState,
36
+ ee as AdminLocalStorage,
37
+ Q as AdminStatusDisplay,
38
+ T as AdminUserStatus,
39
+ B as DateRangeFilter,
40
+ P as NumberRangeFilter,
41
+ k as RelationDropdownButton,
42
+ w as RelationDropdownContent,
43
+ U as RelationFilterField,
44
+ M as RelationItem,
45
+ v as RelationItemList,
46
+ z as RelationSearchInput,
47
+ te as SecureAdminLocalStorage,
48
+ X as buildFormFields,
49
+ Y as cleanFormInput,
50
+ oe as formatFieldName,
51
+ Z as getAdminDocuments,
52
+ ae as getItemDisplayName,
53
+ _ as getMutationName,
54
+ me as getSmartSearchFields,
55
+ c as initialState,
56
+ ie as kebabCase,
57
+ ne as normalizeModelNameForDocument,
58
+ de as spacedWords,
59
+ o as useAdminDataContext,
60
+ F as useAdminList,
61
+ y as useClickOutside,
62
+ L as useDebounce,
63
+ C as useRelationData
64
+ };
@@ -0,0 +1,2 @@
1
+ export declare function AdminData(): import("react/jsx-runtime").JSX.Element;
2
+ export default AdminData;
@@ -0,0 +1,7 @@
1
+ interface DateRangeFilterProps {
2
+ fieldName: string;
3
+ currentValue: any;
4
+ onChange: (value: any) => void;
5
+ }
6
+ export declare function DateRangeFilter({ fieldName, currentValue, onChange }: DateRangeFilterProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,105 @@
1
+ import { jsxDEV as s } from "react/jsx-dev-runtime";
2
+ import { formatFieldName as c } from "../../utils/string-utils.js";
3
+ function u({
4
+ fieldName: o,
5
+ currentValue: t,
6
+ onChange: n
7
+ }) {
8
+ const i = t != null && t.gte ? new Date(t.gte).toISOString().split("T")[0] : "", a = t != null && t.lte ? new Date(t.lte).toISOString().split("T")[0] : "", m = (l) => {
9
+ const e = { ...t };
10
+ l ? e.gte = new Date(l).toISOString() : delete e.gte, !e.gte && !e.lte ? n(void 0) : n(e);
11
+ }, d = (l) => {
12
+ const e = { ...t };
13
+ if (l) {
14
+ const r = new Date(l);
15
+ r.setHours(23, 59, 59, 999), e.lte = r.toISOString();
16
+ } else
17
+ delete e.lte;
18
+ !e.gte && !e.lte ? n(void 0) : n(e);
19
+ };
20
+ return /* @__PURE__ */ s("div", { className: "space-y-1", children: [
21
+ /* @__PURE__ */ s("label", { className: "block text-sm font-medium text-gray-700", children: c(o) }, void 0, !1, {
22
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
23
+ lineNumber: 56,
24
+ columnNumber: 7
25
+ }, this),
26
+ /* @__PURE__ */ s("div", { className: "grid grid-cols-2 gap-2", children: [
27
+ /* @__PURE__ */ s("div", { children: [
28
+ /* @__PURE__ */ s("label", { className: "block text-xs text-gray-500 mb-1", children: "From" }, void 0, !1, {
29
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
30
+ lineNumber: 61,
31
+ columnNumber: 11
32
+ }, this),
33
+ /* @__PURE__ */ s(
34
+ "input",
35
+ {
36
+ type: "date",
37
+ value: i,
38
+ onChange: (l) => m(l.target.value),
39
+ className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
40
+ },
41
+ void 0,
42
+ !1,
43
+ {
44
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
45
+ lineNumber: 62,
46
+ columnNumber: 11
47
+ },
48
+ this
49
+ )
50
+ ] }, void 0, !0, {
51
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
52
+ lineNumber: 60,
53
+ columnNumber: 9
54
+ }, this),
55
+ /* @__PURE__ */ s("div", { children: [
56
+ /* @__PURE__ */ s("label", { className: "block text-xs text-gray-500 mb-1", children: "To" }, void 0, !1, {
57
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
58
+ lineNumber: 70,
59
+ columnNumber: 11
60
+ }, this),
61
+ /* @__PURE__ */ s(
62
+ "input",
63
+ {
64
+ type: "date",
65
+ value: a,
66
+ onChange: (l) => d(l.target.value),
67
+ className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
68
+ },
69
+ void 0,
70
+ !1,
71
+ {
72
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
73
+ lineNumber: 71,
74
+ columnNumber: 11
75
+ },
76
+ this
77
+ )
78
+ ] }, void 0, !0, {
79
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
80
+ lineNumber: 69,
81
+ columnNumber: 9
82
+ }, this)
83
+ ] }, void 0, !0, {
84
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
85
+ lineNumber: 59,
86
+ columnNumber: 7
87
+ }, this),
88
+ (i || a) && /* @__PURE__ */ s("div", { className: "text-xs text-gray-500", children: [
89
+ i && a && `${i} to ${a}`,
90
+ i && !a && `From ${i}`,
91
+ !i && a && `Until ${a}`
92
+ ] }, void 0, !0, {
93
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
94
+ lineNumber: 80,
95
+ columnNumber: 9
96
+ }, this)
97
+ ] }, void 0, !0, {
98
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
99
+ lineNumber: 55,
100
+ columnNumber: 5
101
+ }, this);
102
+ }
103
+ export {
104
+ u as DateRangeFilter
105
+ };
@@ -0,0 +1,8 @@
1
+ interface NumberRangeFilterProps {
2
+ fieldName: string;
3
+ fieldType: string;
4
+ currentValue: any;
5
+ onChange: (value: any) => void;
6
+ }
7
+ export declare function NumberRangeFilter({ fieldName, fieldType, currentValue, onChange }: Readonly<NumberRangeFilterProps>): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,115 @@
1
+ import { jsxDEV as i } from "react/jsx-dev-runtime";
2
+ import { formatFieldName as N } from "../../utils/string-utils.js";
3
+ function p({
4
+ fieldName: b,
5
+ fieldType: a,
6
+ currentValue: s,
7
+ onChange: m
8
+ }) {
9
+ const l = (s == null ? void 0 : s.gte) !== void 0 ? s.gte.toString() : "", n = (s == null ? void 0 : s.lte) !== void 0 ? s.lte.toString() : "", o = (t) => {
10
+ if (t) {
11
+ if (a === "int" || a === "bigint") {
12
+ const e = parseInt(t, 10);
13
+ return isNaN(e) ? void 0 : e;
14
+ } else if (a === "float" || a === "decimal") {
15
+ const e = parseFloat(t);
16
+ return isNaN(e) ? void 0 : e;
17
+ }
18
+ }
19
+ }, c = (t) => {
20
+ const e = { ...s }, r = o(t);
21
+ r !== void 0 ? e.gte = r : delete e.gte, e.gte === void 0 && e.lte === void 0 ? m(void 0) : m(e);
22
+ }, u = (t) => {
23
+ const e = { ...s }, r = o(t);
24
+ r !== void 0 ? e.lte = r : delete e.lte, e.gte === void 0 && e.lte === void 0 ? m(void 0) : m(e);
25
+ }, d = a === "int" || a === "bigint" ? "1" : "any";
26
+ return /* @__PURE__ */ i("div", { className: "space-y-1", children: [
27
+ /* @__PURE__ */ i("label", { className: "block text-sm font-medium text-gray-700", children: N(b) }, void 0, !1, {
28
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
29
+ lineNumber: 75,
30
+ columnNumber: 7
31
+ }, this),
32
+ /* @__PURE__ */ i("div", { className: "grid grid-cols-2 gap-2", children: [
33
+ /* @__PURE__ */ i("div", { children: [
34
+ /* @__PURE__ */ i("label", { className: "block text-xs text-gray-500 mb-1", children: "Min" }, void 0, !1, {
35
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
36
+ lineNumber: 80,
37
+ columnNumber: 11
38
+ }, this),
39
+ /* @__PURE__ */ i(
40
+ "input",
41
+ {
42
+ type: "number",
43
+ step: d,
44
+ value: l,
45
+ onChange: (t) => c(t.target.value),
46
+ placeholder: "No minimum",
47
+ className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
48
+ },
49
+ void 0,
50
+ !1,
51
+ {
52
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
53
+ lineNumber: 81,
54
+ columnNumber: 11
55
+ },
56
+ this
57
+ )
58
+ ] }, void 0, !0, {
59
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
60
+ lineNumber: 79,
61
+ columnNumber: 9
62
+ }, this),
63
+ /* @__PURE__ */ i("div", { children: [
64
+ /* @__PURE__ */ i("label", { className: "block text-xs text-gray-500 mb-1", children: "Max" }, void 0, !1, {
65
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
66
+ lineNumber: 91,
67
+ columnNumber: 11
68
+ }, this),
69
+ /* @__PURE__ */ i(
70
+ "input",
71
+ {
72
+ type: "number",
73
+ step: d,
74
+ value: n,
75
+ onChange: (t) => u(t.target.value),
76
+ placeholder: "No maximum",
77
+ className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
78
+ },
79
+ void 0,
80
+ !1,
81
+ {
82
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
83
+ lineNumber: 92,
84
+ columnNumber: 11
85
+ },
86
+ this
87
+ )
88
+ ] }, void 0, !0, {
89
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
90
+ lineNumber: 90,
91
+ columnNumber: 9
92
+ }, this)
93
+ ] }, void 0, !0, {
94
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
95
+ lineNumber: 78,
96
+ columnNumber: 7
97
+ }, this),
98
+ (l || n) && /* @__PURE__ */ i("div", { className: "text-xs text-gray-500", children: [
99
+ l && n && `${l} to ${n}`,
100
+ l && !n && `≥ ${l}`,
101
+ !l && n && `≤ ${n}`
102
+ ] }, void 0, !0, {
103
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
104
+ lineNumber: 103,
105
+ columnNumber: 9
106
+ }, this)
107
+ ] }, void 0, !0, {
108
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
109
+ lineNumber: 74,
110
+ columnNumber: 5
111
+ }, this);
112
+ }
113
+ export {
114
+ p as NumberRangeFilter
115
+ };
@@ -0,0 +1,32 @@
1
+ export declare function RelationDropdownButton({ currentItem, relatedModelName, isOpen, onClick }: Readonly<{
2
+ currentItem: any;
3
+ relatedModelName: string;
4
+ isOpen: boolean;
5
+ onClick: () => void;
6
+ }>): import("react/jsx-runtime").JSX.Element;
7
+ export declare function RelationSearchInput({ searchTerm, onSearchChange, relatedModelName }: Readonly<{
8
+ searchTerm: string;
9
+ onSearchChange: (value: string) => void;
10
+ relatedModelName: string;
11
+ }>): import("react/jsx-runtime").JSX.Element;
12
+ export declare function RelationItem({ item, onSelect }: {
13
+ item: any;
14
+ onSelect: (item: any) => void;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ export declare function RelationItemList({ items, loading, error, onSelect, onClear }: Readonly<{
17
+ items: any[];
18
+ loading: boolean;
19
+ error?: any;
20
+ onSelect: (item: any) => void;
21
+ onClear: () => void;
22
+ }>): import("react/jsx-runtime").JSX.Element;
23
+ export declare function RelationDropdownContent({ searchTerm, onSearchChange, relatedModelName, items, loading, error, onSelect, onClear }: {
24
+ searchTerm: string;
25
+ onSearchChange: (value: string) => void;
26
+ relatedModelName: string;
27
+ items: any[];
28
+ loading: boolean;
29
+ error?: any;
30
+ onSelect: (item: any) => void;
31
+ onClear: () => void;
32
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,265 @@
1
+ import { jsxDEV as e } from "react/jsx-dev-runtime";
2
+ import { getItemDisplayName as a } from "../../utils/string-utils.js";
3
+ function f({
4
+ currentItem: t,
5
+ relatedModelName: s,
6
+ isOpen: n,
7
+ onClick: l
8
+ }) {
9
+ return /* @__PURE__ */ e(
10
+ "button",
11
+ {
12
+ type: "button",
13
+ onClick: l,
14
+ className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm text-left bg-white flex items-center justify-between",
15
+ children: [
16
+ /* @__PURE__ */ e("span", { className: t ? "text-gray-900" : "text-gray-500", children: t ? a(t) : `Select ${s.toLowerCase()}...` }, void 0, !1, {
17
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
18
+ lineNumber: 21,
19
+ columnNumber: 11
20
+ }, this),
21
+ /* @__PURE__ */ e(
22
+ "svg",
23
+ {
24
+ className: `w-4 h-4 text-gray-400 transition-transform ${n ? "rotate-180" : ""}`,
25
+ fill: "none",
26
+ stroke: "currentColor",
27
+ viewBox: "0 0 24 24",
28
+ children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }, void 0, !1, {
29
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
30
+ lineNumber: 30,
31
+ columnNumber: 13
32
+ }, this)
33
+ },
34
+ void 0,
35
+ !1,
36
+ {
37
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
38
+ lineNumber: 24,
39
+ columnNumber: 7
40
+ },
41
+ this
42
+ )
43
+ ]
44
+ },
45
+ void 0,
46
+ !0,
47
+ {
48
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
49
+ lineNumber: 16,
50
+ columnNumber: 9
51
+ },
52
+ this
53
+ );
54
+ }
55
+ function d({
56
+ searchTerm: t,
57
+ onSearchChange: s,
58
+ relatedModelName: n
59
+ }) {
60
+ return /* @__PURE__ */ e("div", { className: "p-2", children: /* @__PURE__ */ e(
61
+ "input",
62
+ {
63
+ type: "text",
64
+ placeholder: `Search ${n.toLowerCase()}...`,
65
+ value: t,
66
+ onChange: (l) => s(l.target.value),
67
+ className: "w-full px-2 py-1 text-sm border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-green-web",
68
+ autoFocus: !0
69
+ },
70
+ void 0,
71
+ !1,
72
+ {
73
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
74
+ lineNumber: 48,
75
+ columnNumber: 15
76
+ },
77
+ this
78
+ ) }, void 0, !1, {
79
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
80
+ lineNumber: 47,
81
+ columnNumber: 13
82
+ }, this);
83
+ }
84
+ function c({
85
+ item: t,
86
+ onSelect: s
87
+ }) {
88
+ return /* @__PURE__ */ e(
89
+ "button",
90
+ {
91
+ type: "button",
92
+ onClick: () => s(t),
93
+ className: "w-full px-3 py-2 text-left text-sm hover:bg-gray-100 focus:bg-gray-100 transition-colors",
94
+ children: a(t)
95
+ },
96
+ void 0,
97
+ !1,
98
+ {
99
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
100
+ lineNumber: 69,
101
+ columnNumber: 5
102
+ },
103
+ this
104
+ );
105
+ }
106
+ function u({
107
+ items: t,
108
+ loading: s,
109
+ error: n,
110
+ onSelect: l,
111
+ onClear: o
112
+ }) {
113
+ return /* @__PURE__ */ e("div", { className: "max-h-48 overflow-y-auto", children: [
114
+ /* @__PURE__ */ e(
115
+ "button",
116
+ {
117
+ type: "button",
118
+ onClick: o,
119
+ className: "w-full px-3 py-2 text-left text-sm hover:bg-gray-100 text-gray-500 border-b border-gray-200",
120
+ children: "Clear selection"
121
+ },
122
+ void 0,
123
+ !1,
124
+ {
125
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
126
+ lineNumber: 95,
127
+ columnNumber: 15
128
+ },
129
+ this
130
+ ),
131
+ n ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-red-600", children: [
132
+ /* @__PURE__ */ e("div", { className: "flex items-center", children: [
133
+ /* @__PURE__ */ e("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }, void 0, !1, {
134
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
135
+ lineNumber: 107,
136
+ columnNumber: 15
137
+ }, this) }, void 0, !1, {
138
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
139
+ lineNumber: 106,
140
+ columnNumber: 13
141
+ }, this),
142
+ "Failed to load options"
143
+ ] }, void 0, !0, {
144
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
145
+ lineNumber: 105,
146
+ columnNumber: 11
147
+ }, this),
148
+ /* @__PURE__ */ e("div", { className: "text-xs text-gray-500 mt-1", children: n.networkError ? "Network error" : "Please try again" }, void 0, !1, {
149
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
150
+ lineNumber: 111,
151
+ columnNumber: 11
152
+ }, this)
153
+ ] }, void 0, !0, {
154
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
155
+ lineNumber: 104,
156
+ columnNumber: 9
157
+ }, this) : s ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-gray-500", children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
158
+ /* @__PURE__ */ e("svg", { className: "animate-spin -ml-1 mr-2 h-4 w-4 text-gray-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
159
+ /* @__PURE__ */ e("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }, void 0, !1, {
160
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
161
+ lineNumber: 119,
162
+ columnNumber: 15
163
+ }, this),
164
+ /* @__PURE__ */ e("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }, void 0, !1, {
165
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
166
+ lineNumber: 120,
167
+ columnNumber: 15
168
+ }, this)
169
+ ] }, void 0, !0, {
170
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
171
+ lineNumber: 118,
172
+ columnNumber: 13
173
+ }, this),
174
+ "Loading..."
175
+ ] }, void 0, !0, {
176
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
177
+ lineNumber: 117,
178
+ columnNumber: 11
179
+ }, this) }, void 0, !1, {
180
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
181
+ lineNumber: 116,
182
+ columnNumber: 9
183
+ }, this) : t.length === 0 ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-gray-500", children: "No items found" }, void 0, !1, {
184
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
185
+ lineNumber: 126,
186
+ columnNumber: 17
187
+ }, this) : t.map((i) => /* @__PURE__ */ e(
188
+ c,
189
+ {
190
+ item: i,
191
+ onSelect: l
192
+ },
193
+ i.id,
194
+ !1,
195
+ {
196
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
197
+ lineNumber: 129,
198
+ columnNumber: 11
199
+ },
200
+ this
201
+ ))
202
+ ] }, void 0, !0, {
203
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
204
+ lineNumber: 94,
205
+ columnNumber: 13
206
+ }, this);
207
+ }
208
+ function N({
209
+ searchTerm: t,
210
+ onSearchChange: s,
211
+ relatedModelName: n,
212
+ items: l,
213
+ loading: o,
214
+ error: i,
215
+ onSelect: r,
216
+ onClear: m
217
+ }) {
218
+ return /* @__PURE__ */ e("div", { className: "absolute z-10 w-full mt-1 bg-white border border-gray-300 rounded-md shadow-lg", children: [
219
+ /* @__PURE__ */ e(
220
+ d,
221
+ {
222
+ searchTerm: t,
223
+ onSearchChange: s,
224
+ relatedModelName: n
225
+ },
226
+ void 0,
227
+ !1,
228
+ {
229
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
230
+ lineNumber: 162,
231
+ columnNumber: 7
232
+ },
233
+ this
234
+ ),
235
+ /* @__PURE__ */ e(
236
+ u,
237
+ {
238
+ items: l,
239
+ loading: o,
240
+ error: i,
241
+ onSelect: r,
242
+ onClear: m
243
+ },
244
+ void 0,
245
+ !1,
246
+ {
247
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
248
+ lineNumber: 167,
249
+ columnNumber: 7
250
+ },
251
+ this
252
+ )
253
+ ] }, void 0, !0, {
254
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
255
+ lineNumber: 161,
256
+ columnNumber: 5
257
+ }, this);
258
+ }
259
+ export {
260
+ f as RelationDropdownButton,
261
+ N as RelationDropdownContent,
262
+ c as RelationItem,
263
+ u as RelationItemList,
264
+ d as RelationSearchInput
265
+ };
@@ -0,0 +1,8 @@
1
+ interface RelationFilterFieldProps {
2
+ fieldName: string;
3
+ relatedModelName: string;
4
+ currentValue: any;
5
+ onChange: (value: any) => void;
6
+ }
7
+ export declare function RelationFilterField({ fieldName, relatedModelName, currentValue, onChange }: Readonly<RelationFilterFieldProps>): import("react/jsx-runtime").JSX.Element;
8
+ export {};