@omnikit-js/ui 0.6.0 → 0.6.1
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/chunk-FPLMULY5.mjs +436 -0
- package/dist/chunk-FPLMULY5.mjs.map +1 -0
- package/dist/chunk-MQEH3FTA.mjs +196 -0
- package/dist/chunk-MQEH3FTA.mjs.map +1 -0
- package/dist/components/client/index.d.mts +35 -2
- package/dist/components/client/index.mjs +3 -1
- package/dist/components/client/index.mjs.map +1 -1
- package/dist/components/server/index.d.mts +1 -1
- package/dist/components/server/index.mjs +2 -199
- package/dist/components/server/index.mjs.map +1 -1
- package/dist/{index-D-5etDTV.d.mts → index-CsOyTW-D.d.mts} +8 -1
- package/dist/index.d.mts +2 -3
- package/dist/index.mjs +2 -202
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/components/client/Tabs/index.tsx
|
|
6
|
+
function Tabs({ tabs, defaultTab, className = "" }) {
|
|
7
|
+
const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id);
|
|
8
|
+
return /* @__PURE__ */ jsxs("div", { className, children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsx("nav", { className: "-mb-px flex space-x-8", children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
10
|
+
"button",
|
|
11
|
+
{
|
|
12
|
+
onClick: () => setActiveTab(tab.id),
|
|
13
|
+
className: `
|
|
14
|
+
whitespace-nowrap border-b-2 px-1 pb-4 text-sm font-medium transition-colors
|
|
15
|
+
${activeTab === tab.id ? "border-blue-500 text-blue-600 dark:text-blue-400" : "border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"}
|
|
16
|
+
`,
|
|
17
|
+
children: tab.label
|
|
18
|
+
},
|
|
19
|
+
tab.id
|
|
20
|
+
)) }) }),
|
|
21
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6", children: tabs.find((tab) => tab.id === activeTab)?.content })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
function Modal({ isOpen, onClose, title, children, className = "" }) {
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const handleEscape = (e) => {
|
|
27
|
+
if (e.key === "Escape") onClose();
|
|
28
|
+
};
|
|
29
|
+
if (isOpen) {
|
|
30
|
+
document.addEventListener("keydown", handleEscape);
|
|
31
|
+
document.body.style.overflow = "hidden";
|
|
32
|
+
}
|
|
33
|
+
return () => {
|
|
34
|
+
document.removeEventListener("keydown", handleEscape);
|
|
35
|
+
document.body.style.overflow = "unset";
|
|
36
|
+
};
|
|
37
|
+
}, [isOpen, onClose]);
|
|
38
|
+
if (!isOpen) return null;
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
className: "absolute inset-0 bg-black/50 backdrop-blur-sm",
|
|
44
|
+
onClick: onClose
|
|
45
|
+
}
|
|
46
|
+
),
|
|
47
|
+
/* @__PURE__ */ jsxs(
|
|
48
|
+
"div",
|
|
49
|
+
{
|
|
50
|
+
className: `relative bg-white dark:bg-gray-900 rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto ${className}`,
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700", children: [
|
|
53
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: title }),
|
|
54
|
+
/* @__PURE__ */ jsx(
|
|
55
|
+
"button",
|
|
56
|
+
{
|
|
57
|
+
onClick: onClose,
|
|
58
|
+
className: "text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors",
|
|
59
|
+
children: /* @__PURE__ */ jsx("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
/* @__PURE__ */ jsx("div", { className: "p-6", children })
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
function PaymentMethodManager({ currentMethod }) {
|
|
70
|
+
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
71
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
72
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
73
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold mb-4", children: "Current Payment Method" }),
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg mb-6", children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
76
|
+
/* @__PURE__ */ jsx("div", { className: "h-12 w-16 rounded bg-gradient-to-br from-blue-600 to-blue-800 flex items-center justify-center text-white font-bold text-sm", children: currentMethod.type }),
|
|
77
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
78
|
+
/* @__PURE__ */ jsxs("p", { className: "font-medium", children: [
|
|
79
|
+
"\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ",
|
|
80
|
+
currentMethod.last4
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: [
|
|
83
|
+
"Expires ",
|
|
84
|
+
currentMethod.expiry
|
|
85
|
+
] })
|
|
86
|
+
] })
|
|
87
|
+
] }),
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
onClick: () => setIsModalOpen(true),
|
|
92
|
+
className: "rounded-lg border border-gray-300 dark:border-gray-600 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",
|
|
93
|
+
children: "Update"
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
] }),
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
"button",
|
|
99
|
+
{
|
|
100
|
+
onClick: () => setIsModalOpen(true),
|
|
101
|
+
className: "w-full rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors",
|
|
102
|
+
children: "Add New Payment Method"
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ jsx(
|
|
107
|
+
Modal,
|
|
108
|
+
{
|
|
109
|
+
isOpen: isModalOpen,
|
|
110
|
+
onClose: () => setIsModalOpen(false),
|
|
111
|
+
title: "Add Payment Method",
|
|
112
|
+
children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
113
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
114
|
+
/* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Cardholder Name" }),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
"input",
|
|
117
|
+
{
|
|
118
|
+
type: "text",
|
|
119
|
+
placeholder: "John Doe",
|
|
120
|
+
className: "w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20"
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
] }),
|
|
124
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
125
|
+
/* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Card Number" }),
|
|
126
|
+
/* @__PURE__ */ jsx(
|
|
127
|
+
"input",
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
placeholder: "1234 5678 9012 3456",
|
|
131
|
+
className: "w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20"
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
] }),
|
|
135
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
136
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
137
|
+
/* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Expiry Date" }),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
"input",
|
|
140
|
+
{
|
|
141
|
+
type: "text",
|
|
142
|
+
placeholder: "MM/YY",
|
|
143
|
+
className: "w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20"
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
] }),
|
|
147
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
148
|
+
/* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "CVC" }),
|
|
149
|
+
/* @__PURE__ */ jsx(
|
|
150
|
+
"input",
|
|
151
|
+
{
|
|
152
|
+
type: "text",
|
|
153
|
+
placeholder: "123",
|
|
154
|
+
className: "w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20"
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
] })
|
|
158
|
+
] }),
|
|
159
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
160
|
+
/* @__PURE__ */ jsx(
|
|
161
|
+
"input",
|
|
162
|
+
{
|
|
163
|
+
type: "checkbox",
|
|
164
|
+
id: "setDefaultModal",
|
|
165
|
+
className: "rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"
|
|
166
|
+
}
|
|
167
|
+
),
|
|
168
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "setDefaultModal", className: "text-sm text-gray-700 dark:text-gray-300", children: "Set as default payment method" })
|
|
169
|
+
] }),
|
|
170
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-3 pt-4", children: [
|
|
171
|
+
/* @__PURE__ */ jsx(
|
|
172
|
+
"button",
|
|
173
|
+
{
|
|
174
|
+
onClick: () => setIsModalOpen(false),
|
|
175
|
+
className: "flex-1 rounded-lg border border-gray-300 dark:border-gray-600 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",
|
|
176
|
+
children: "Cancel"
|
|
177
|
+
}
|
|
178
|
+
),
|
|
179
|
+
/* @__PURE__ */ jsx(
|
|
180
|
+
"button",
|
|
181
|
+
{
|
|
182
|
+
onClick: () => setIsModalOpen(false),
|
|
183
|
+
className: "flex-1 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors",
|
|
184
|
+
children: "Add Card"
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
] })
|
|
188
|
+
] })
|
|
189
|
+
}
|
|
190
|
+
)
|
|
191
|
+
] });
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export { Modal, PaymentMethodManager, Tabs };
|
|
195
|
+
//# sourceMappingURL=chunk-MQEH3FTA.mjs.map
|
|
196
|
+
//# sourceMappingURL=chunk-MQEH3FTA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/client/Tabs/index.tsx","../src/components/client/Modal/index.tsx","../src/components/client/PaymentMethodManager/index.tsx"],"names":["jsxs","jsx","useState"],"mappings":"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","file":"chunk-MQEH3FTA.mjs","sourcesContent":["'use client'\n\nimport { useState } from 'react'\n\nexport interface Tab {\n id: string\n label: string\n content: React.ReactNode\n}\n\nexport interface TabsProps {\n tabs: Tab[]\n defaultTab?: string\n className?: string\n}\n\nexport function Tabs({ tabs, defaultTab, className = '' }: TabsProps) {\n const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id)\n\n return (\n <div className={className}>\n <div className=\"border-b border-gray-200 dark:border-gray-700\">\n <nav className=\"-mb-px flex space-x-8\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`\n whitespace-nowrap border-b-2 px-1 pb-4 text-sm font-medium transition-colors\n ${\n activeTab === tab.id\n ? 'border-blue-500 text-blue-600 dark:text-blue-400'\n : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'\n }\n `}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n <div className=\"mt-6\">\n {tabs.find((tab) => tab.id === activeTab)?.content}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect } from 'react'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title: string\n children: React.ReactNode\n className?: string\n}\n\nexport function Modal({ isOpen, onClose, title, children, className = '' }: ModalProps) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = 'unset'\n }\n }, [isOpen, onClose])\n\n if (!isOpen) return null\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className={`relative bg-white dark:bg-gray-900 rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto ${className}`}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700\">\n <h2 className=\"text-xl font-semibold\">{title}</h2>\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Modal } from '../Modal'\n\nexport interface PaymentMethodManagerProps {\n currentMethod: {\n type: string\n last4: string\n expiry: string\n }\n}\n\nexport function PaymentMethodManager({ currentMethod }: PaymentMethodManagerProps) {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n return (\n <>\n <div>\n <h3 className=\"text-lg font-semibold mb-4\">Current Payment Method</h3>\n <div className=\"flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg mb-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-12 w-16 rounded bg-gradient-to-br from-blue-600 to-blue-800 flex items-center justify-center text-white font-bold text-sm\">\n {currentMethod.type}\n </div>\n <div>\n <p className=\"font-medium\">•••• •••• •••• {currentMethod.last4}</p>\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n Expires {currentMethod.expiry}\n </p>\n </div>\n </div>\n <button\n onClick={() => setIsModalOpen(true)}\n className=\"rounded-lg border border-gray-300 dark:border-gray-600 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\n >\n Update\n </button>\n </div>\n\n <button\n onClick={() => setIsModalOpen(true)}\n className=\"w-full rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n Add New Payment Method\n </button>\n </div>\n\n <Modal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title=\"Add Payment Method\"\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Cardholder Name\n </label>\n <input\n type=\"text\"\n placeholder=\"John Doe\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Card Number\n </label>\n <input\n type=\"text\"\n placeholder=\"1234 5678 9012 3456\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Expiry Date\n </label>\n <input\n type=\"text\"\n placeholder=\"MM/YY\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n CVC\n </label>\n <input\n type=\"text\"\n placeholder=\"123\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"setDefaultModal\"\n className=\"rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor=\"setDefaultModal\" className=\"text-sm text-gray-700 dark:text-gray-300\">\n Set as default payment method\n </label>\n </div>\n <div className=\"flex gap-3 pt-4\">\n <button\n onClick={() => setIsModalOpen(false)}\n className=\"flex-1 rounded-lg border border-gray-300 dark:border-gray-600 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\n >\n Cancel\n </button>\n <button\n onClick={() => setIsModalOpen(false)}\n className=\"flex-1 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n Add Card\n </button>\n </div>\n </div>\n </Modal>\n </>\n )\n}\n"]}
|
|
@@ -1,7 +1,40 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface Tab {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
content: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
interface TabsProps {
|
|
9
|
+
tabs: Tab[];
|
|
10
|
+
defaultTab?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
declare function Tabs({ tabs, defaultTab, className }: TabsProps): react_jsx_runtime.JSX.Element;
|
|
14
|
+
|
|
15
|
+
interface ModalProps {
|
|
16
|
+
isOpen: boolean;
|
|
17
|
+
onClose: () => void;
|
|
18
|
+
title: string;
|
|
19
|
+
children: React.ReactNode;
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
declare function Modal({ isOpen, onClose, title, children, className }: ModalProps): react_jsx_runtime.JSX.Element | null;
|
|
23
|
+
|
|
24
|
+
interface PaymentMethodManagerProps {
|
|
25
|
+
currentMethod: {
|
|
26
|
+
type: string;
|
|
27
|
+
last4: string;
|
|
28
|
+
expiry: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
declare function PaymentMethodManager({ currentMethod }: PaymentMethodManagerProps): react_jsx_runtime.JSX.Element;
|
|
32
|
+
|
|
1
33
|
/**
|
|
2
34
|
* Client Components
|
|
3
35
|
* These components run on the client side
|
|
4
36
|
*/
|
|
5
|
-
declare const OMNIKIT_CLIENT_VERSION = "0.1.0";
|
|
6
37
|
|
|
7
|
-
|
|
38
|
+
declare const OMNIKIT_CLIENT_VERSION = "0.6.1";
|
|
39
|
+
|
|
40
|
+
export { Modal, type ModalProps, OMNIKIT_CLIENT_VERSION, PaymentMethodManager, type PaymentMethodManagerProps, type Tab, Tabs, type TabsProps };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export { Modal, PaymentMethodManager, Tabs } from '../../chunk-MQEH3FTA.mjs';
|
|
2
|
+
|
|
1
3
|
// src/components/client/index.ts
|
|
2
|
-
var OMNIKIT_CLIENT_VERSION = "0.1
|
|
4
|
+
var OMNIKIT_CLIENT_VERSION = "0.6.1";
|
|
3
5
|
|
|
4
6
|
export { OMNIKIT_CLIENT_VERSION };
|
|
5
7
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/client/index.ts"],"names":[],"mappings":";;;AAcO,IAAM,sBAAA,GAAyB","file":"index.mjs","sourcesContent":["/**\n * Client Components\n * These components run on the client side\n */\n\nexport { Tabs } from './Tabs'\nexport type { TabsProps, Tab } from './Tabs'\n\nexport { Modal } from './Modal'\nexport type { ModalProps } from './Modal'\n\nexport { PaymentMethodManager } from './PaymentMethodManager'\nexport type { PaymentMethodManagerProps } from './PaymentMethodManager'\n\nexport const OMNIKIT_CLIENT_VERSION = '0.6.1'\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as Column, c as ColumnDefinition, D as DataList, b as DataListProps } from '../../index-D
|
|
1
|
+
export { B as Billing, d as BillingProps, C as Column, c as ColumnDefinition, D as DataList, b as DataListProps } from '../../index-CsOyTW-D.mjs';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
@@ -1,201 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// src/lib/omnikit-client.ts
|
|
4
|
-
var OmniKitClient = class {
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
7
|
-
this.apiKey = config.apiKey;
|
|
8
|
-
this.jwt = config.jwt;
|
|
9
|
-
}
|
|
10
|
-
getHeaders() {
|
|
11
|
-
const headers = {
|
|
12
|
-
"Content-Type": "application/json"
|
|
13
|
-
};
|
|
14
|
-
if (this.jwt) {
|
|
15
|
-
headers["Authorization"] = `Bearer ${this.jwt}`;
|
|
16
|
-
} else if (this.apiKey) {
|
|
17
|
-
headers["X-API-Key"] = this.apiKey;
|
|
18
|
-
}
|
|
19
|
-
return headers;
|
|
20
|
-
}
|
|
21
|
-
async request(endpoint, options) {
|
|
22
|
-
const url = `${this.baseUrl}${endpoint}`;
|
|
23
|
-
const response = await fetch(url, {
|
|
24
|
-
...options,
|
|
25
|
-
headers: {
|
|
26
|
-
...this.getHeaders(),
|
|
27
|
-
...options?.headers
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
if (!response.ok) {
|
|
31
|
-
const error = await response.json().catch(() => ({ error: "Request failed" }));
|
|
32
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
33
|
-
}
|
|
34
|
-
return response.json();
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Query records from a table
|
|
38
|
-
*/
|
|
39
|
-
async query(table, options) {
|
|
40
|
-
const params = new URLSearchParams();
|
|
41
|
-
if (options?.filter) {
|
|
42
|
-
params.append("filter", JSON.stringify(options.filter));
|
|
43
|
-
}
|
|
44
|
-
if (options?.sort) {
|
|
45
|
-
params.append("sort", options.sort);
|
|
46
|
-
}
|
|
47
|
-
if (options?.limit) {
|
|
48
|
-
params.append("limit", options.limit.toString());
|
|
49
|
-
}
|
|
50
|
-
if (options?.offset) {
|
|
51
|
-
params.append("offset", options.offset.toString());
|
|
52
|
-
}
|
|
53
|
-
const queryString = params.toString();
|
|
54
|
-
const endpoint = `/data/${table}${queryString ? `?${queryString}` : ""}`;
|
|
55
|
-
return this.request(endpoint);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Find a record by ID
|
|
59
|
-
*/
|
|
60
|
-
async findById(table, id) {
|
|
61
|
-
return this.request(`/data/${table}/${id}`);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Insert a new record
|
|
65
|
-
*/
|
|
66
|
-
async insert(table, data) {
|
|
67
|
-
return this.request(`/data/${table}`, {
|
|
68
|
-
method: "POST",
|
|
69
|
-
body: JSON.stringify(data)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Update an existing record
|
|
74
|
-
*/
|
|
75
|
-
async update(table, id, data) {
|
|
76
|
-
return this.request(`/data/${table}/${id}`, {
|
|
77
|
-
method: "PUT",
|
|
78
|
-
body: JSON.stringify(data)
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Delete a record
|
|
83
|
-
*/
|
|
84
|
-
async delete(table, id) {
|
|
85
|
-
return this.request(`/data/${table}/${id}`, {
|
|
86
|
-
method: "DELETE"
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Upsert a record (insert or update)
|
|
91
|
-
*/
|
|
92
|
-
async upsert(table, data) {
|
|
93
|
-
return this.request(`/data/${table}`, {
|
|
94
|
-
method: "PUT",
|
|
95
|
-
body: JSON.stringify(data)
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
function createOmniKitClient(config) {
|
|
100
|
-
return new OmniKitClient(config);
|
|
101
|
-
}
|
|
102
|
-
function normalizeColumn(column) {
|
|
103
|
-
if (typeof column === "string") {
|
|
104
|
-
return {
|
|
105
|
-
key: column,
|
|
106
|
-
label: column.charAt(0).toUpperCase() + column.slice(1).replace(/_/g, " "),
|
|
107
|
-
sortable: true
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
...column,
|
|
112
|
-
label: column.label || column.key.charAt(0).toUpperCase() + column.key.slice(1).replace(/_/g, " ")
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
function getCellValue(row, key) {
|
|
116
|
-
return key.split(".").reduce((obj, k) => obj?.[k], row);
|
|
117
|
-
}
|
|
118
|
-
async function DataList({
|
|
119
|
-
table,
|
|
120
|
-
baseUrl,
|
|
121
|
-
apiKey,
|
|
122
|
-
jwt,
|
|
123
|
-
columns,
|
|
124
|
-
keyField = "id",
|
|
125
|
-
filter,
|
|
126
|
-
sort,
|
|
127
|
-
limit,
|
|
128
|
-
offset,
|
|
129
|
-
className = "",
|
|
130
|
-
headerClassName = "",
|
|
131
|
-
rowClassName = "",
|
|
132
|
-
cellClassName = "",
|
|
133
|
-
emptyMessage = "No data found",
|
|
134
|
-
errorMessage = "Failed to load data"
|
|
135
|
-
}) {
|
|
136
|
-
const client = createOmniKitClient({ baseUrl, apiKey, jwt });
|
|
137
|
-
let data = [];
|
|
138
|
-
let error = null;
|
|
139
|
-
try {
|
|
140
|
-
const response = await client.query(table, {
|
|
141
|
-
filter,
|
|
142
|
-
sort,
|
|
143
|
-
limit,
|
|
144
|
-
offset
|
|
145
|
-
});
|
|
146
|
-
if (response.success) {
|
|
147
|
-
data = response.data;
|
|
148
|
-
} else {
|
|
149
|
-
error = response.error || errorMessage;
|
|
150
|
-
}
|
|
151
|
-
} catch (err) {
|
|
152
|
-
error = err instanceof Error ? err.message : errorMessage;
|
|
153
|
-
}
|
|
154
|
-
const normalizedColumns = columns.map(normalizeColumn);
|
|
155
|
-
if (error) {
|
|
156
|
-
return /* @__PURE__ */ jsxs("div", { className: `rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 p-4 text-red-800 dark:text-red-200 ${className}`, children: [
|
|
157
|
-
/* @__PURE__ */ jsx("p", { className: "font-medium", children: "Error" }),
|
|
158
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: error })
|
|
159
|
-
] });
|
|
160
|
-
}
|
|
161
|
-
if (data.length === 0) {
|
|
162
|
-
return /* @__PURE__ */ jsx("div", { className: `rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 p-8 text-center text-gray-600 dark:text-gray-400 ${className}`, children: /* @__PURE__ */ jsx("p", { children: emptyMessage }) });
|
|
163
|
-
}
|
|
164
|
-
return /* @__PURE__ */ jsx("div", { className: `overflow-x-auto rounded-lg border border-gray-200 dark:border-gray-700 ${className}`, children: /* @__PURE__ */ jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [
|
|
165
|
-
/* @__PURE__ */ jsx("thead", { className: `bg-gray-50 dark:bg-gray-800 ${headerClassName}`, children: /* @__PURE__ */ jsx("tr", { children: normalizedColumns.map((column) => /* @__PURE__ */ jsx(
|
|
166
|
-
"th",
|
|
167
|
-
{
|
|
168
|
-
className: `px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-700 dark:text-gray-300 ${column.className || ""}`,
|
|
169
|
-
children: column.label
|
|
170
|
-
},
|
|
171
|
-
column.key
|
|
172
|
-
)) }) }),
|
|
173
|
-
/* @__PURE__ */ jsx("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-700 bg-white dark:bg-gray-900", children: data.map((row) => {
|
|
174
|
-
const rowKey = String(row[keyField]);
|
|
175
|
-
const computedRowClassName = typeof rowClassName === "function" ? rowClassName(row) : rowClassName;
|
|
176
|
-
return /* @__PURE__ */ jsx(
|
|
177
|
-
"tr",
|
|
178
|
-
{
|
|
179
|
-
className: `hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors ${computedRowClassName}`,
|
|
180
|
-
children: normalizedColumns.map((column) => {
|
|
181
|
-
const cellValue = getCellValue(row, column.key);
|
|
182
|
-
const computedCellClassName = typeof cellClassName === "function" ? cellClassName(column, row) : cellClassName;
|
|
183
|
-
return /* @__PURE__ */ jsx(
|
|
184
|
-
"td",
|
|
185
|
-
{
|
|
186
|
-
className: `px-6 py-4 text-sm text-gray-900 dark:text-gray-100 ${computedCellClassName}`,
|
|
187
|
-
children: column.render ? column.render(cellValue, row) : cellValue
|
|
188
|
-
},
|
|
189
|
-
column.key
|
|
190
|
-
);
|
|
191
|
-
})
|
|
192
|
-
},
|
|
193
|
-
rowKey
|
|
194
|
-
);
|
|
195
|
-
}) })
|
|
196
|
-
] }) });
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export { DataList };
|
|
1
|
+
export { Billing, DataList } from '../../chunk-FPLMULY5.mjs';
|
|
2
|
+
import '../../chunk-MQEH3FTA.mjs';
|
|
200
3
|
//# sourceMappingURL=index.mjs.map
|
|
201
4
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/omnikit-client.ts","../../../src/components/server/DataList/index.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * OmniKit API Client\n * Wrapper for making requests to OmniKit serverless platform\n */\n\nimport type {\n QueryOptions,\n QueryResponse,\n SingleRecordResponse,\n MutationResponse,\n OmniKitConfig,\n} from './types'\n\nexport class OmniKitClient {\n private baseUrl: string\n private apiKey?: string\n private jwt?: string\n\n constructor(config: OmniKitConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '') // Remove trailing slash\n this.apiKey = config.apiKey\n this.jwt = config.jwt\n }\n\n private getHeaders(): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n\n if (this.jwt) {\n headers['Authorization'] = `Bearer ${this.jwt}`\n } else if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey\n }\n\n return headers\n }\n\n private async request<T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options?.headers,\n },\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Request failed' }))\n throw new Error(error.error || `HTTP ${response.status}`)\n }\n\n return response.json()\n }\n\n /**\n * Query records from a table\n */\n async query<T = any>(\n table: string,\n options?: QueryOptions\n ): Promise<QueryResponse<T>> {\n const params = new URLSearchParams()\n\n if (options?.filter) {\n params.append('filter', JSON.stringify(options.filter))\n }\n if (options?.sort) {\n params.append('sort', options.sort)\n }\n if (options?.limit) {\n params.append('limit', options.limit.toString())\n }\n if (options?.offset) {\n params.append('offset', options.offset.toString())\n }\n\n const queryString = params.toString()\n const endpoint = `/data/${table}${queryString ? `?${queryString}` : ''}`\n\n return this.request<QueryResponse<T>>(endpoint)\n }\n\n /**\n * Find a record by ID\n */\n async findById<T = any>(\n table: string,\n id: string | number\n ): Promise<SingleRecordResponse<T>> {\n return this.request<SingleRecordResponse<T>>(`/data/${table}/${id}`)\n }\n\n /**\n * Insert a new record\n */\n async insert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Update an existing record\n */\n async update(\n table: string,\n id: string | number,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Delete a record\n */\n async delete(table: string, id: string | number): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'DELETE',\n })\n }\n\n /**\n * Upsert a record (insert or update)\n */\n async upsert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n}\n\n/**\n * Create a new OmniKit client instance\n */\nexport function createOmniKitClient(config: OmniKitConfig): OmniKitClient {\n return new OmniKitClient(config)\n}\n","/**\n * DataList Component\n *\n * A server-side React component that fetches and displays data from OmniKit API.\n * Renders on the server with zero client JavaScript for data fetching.\n *\n * @example\n * ```tsx\n * import { DataList } from '@omnikit-js/ui'\n *\n * export default function UsersPage() {\n * return (\n * <DataList\n * table=\"users\"\n * baseUrl={process.env.OMNIKIT_BASE_URL}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * columns={['name', 'email', 'created_at']}\n * filter={{ active: true }}\n * limit={20}\n * />\n * )\n * }\n * ```\n */\n\nimport { createOmniKitClient } from '../../../lib/omnikit-client'\nimport type { DataListProps, Column, ColumnDefinition } from './types'\n\nfunction normalizeColumn<T>(column: Column<T>): ColumnDefinition<T> {\n if (typeof column === 'string') {\n return {\n key: column,\n label: column.charAt(0).toUpperCase() + column.slice(1).replace(/_/g, ' '),\n sortable: true,\n }\n }\n return {\n ...column,\n label: column.label || column.key.charAt(0).toUpperCase() + column.key.slice(1).replace(/_/g, ' '),\n }\n}\n\nfunction getCellValue(row: any, key: string): any {\n return key.split('.').reduce((obj, k) => obj?.[k], row)\n}\n\nexport async function DataList<T extends Record<string, any>>({\n table,\n baseUrl,\n apiKey,\n jwt,\n columns,\n keyField = 'id' as keyof T,\n filter,\n sort,\n limit,\n offset,\n className = '',\n headerClassName = '',\n rowClassName = '',\n cellClassName = '',\n emptyMessage = 'No data found',\n errorMessage = 'Failed to load data',\n}: DataListProps<T>) {\n // Create API client\n const client = createOmniKitClient({ baseUrl, apiKey, jwt })\n\n // Fetch data\n let data: T[] = []\n let error: string | null = null\n\n try {\n const response = await client.query<T>(table, {\n filter,\n sort,\n limit,\n offset,\n })\n\n if (response.success) {\n data = response.data\n } else {\n error = response.error || errorMessage\n }\n } catch (err) {\n error = err instanceof Error ? err.message : errorMessage\n }\n\n // Normalize columns\n const normalizedColumns = columns.map(normalizeColumn)\n\n // Error state\n if (error) {\n return (\n <div className={`rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 p-4 text-red-800 dark:text-red-200 ${className}`}>\n <p className=\"font-medium\">Error</p>\n <p className=\"mt-1 text-sm\">{error}</p>\n </div>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className={`rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 p-8 text-center text-gray-600 dark:text-gray-400 ${className}`}>\n <p>{emptyMessage}</p>\n </div>\n )\n }\n\n // Render table\n return (\n <div className={`overflow-x-auto rounded-lg border border-gray-200 dark:border-gray-700 ${className}`}>\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\n <thead className={`bg-gray-50 dark:bg-gray-800 ${headerClassName}`}>\n <tr>\n {normalizedColumns.map((column) => (\n <th\n key={column.key}\n className={`px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-700 dark:text-gray-300 ${column.className || ''}`}\n >\n {column.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 dark:divide-gray-700 bg-white dark:bg-gray-900\">\n {data.map((row) => {\n const rowKey = String(row[keyField])\n const computedRowClassName = typeof rowClassName === 'function'\n ? rowClassName(row)\n : rowClassName\n\n return (\n <tr\n key={rowKey}\n className={`hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors ${computedRowClassName}`}\n >\n {normalizedColumns.map((column) => {\n const cellValue = getCellValue(row, column.key)\n const computedCellClassName = typeof cellClassName === 'function'\n ? cellClassName(column, row)\n : cellClassName\n\n return (\n <td\n key={column.key}\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 ${computedCellClassName}`}\n >\n {column.render ? column.render(cellValue, row) : cellValue}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
@@ -77,4 +77,11 @@ interface DataListProps<T = any> {
|
|
|
77
77
|
|
|
78
78
|
declare function DataList<T extends Record<string, any>>({ table, baseUrl, apiKey, jwt, columns, keyField, filter, sort, limit, offset, className, headerClassName, rowClassName, cellClassName, emptyMessage, errorMessage, }: DataListProps<T>): Promise<react_jsx_runtime.JSX.Element>;
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
interface BillingProps {
|
|
81
|
+
/** Custom class names */
|
|
82
|
+
className?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
declare function Billing({ className }: BillingProps): Promise<react_jsx_runtime.JSX.Element>;
|
|
86
|
+
|
|
87
|
+
export { Billing as B, type Column as C, DataList as D, type FilterExpression as F, type MutationResponse as M, type OmniKitConfig as O, type QueryOptions as Q, type SingleRecordResponse as S, type QueryResponse as a, type DataListProps as b, type ColumnDefinition as c, type BillingProps as d };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { O as OmniKitConfig, Q as QueryOptions, a as QueryResponse, S as SingleRecordResponse, M as MutationResponse } from './index-D
|
|
2
|
-
export { C as Column, c as ColumnDefinition, D as DataList, b as DataListProps, F as FilterExpression } from './index-D
|
|
3
|
-
export { OMNIKIT_CLIENT_VERSION } from './components/client/index.mjs';
|
|
1
|
+
import { O as OmniKitConfig, Q as QueryOptions, a as QueryResponse, S as SingleRecordResponse, M as MutationResponse } from './index-CsOyTW-D.mjs';
|
|
2
|
+
export { B as Billing, d as BillingProps, C as Column, c as ColumnDefinition, D as DataList, b as DataListProps, F as FilterExpression } from './index-CsOyTW-D.mjs';
|
|
4
3
|
import 'react/jsx-runtime';
|
|
5
4
|
|
|
6
5
|
/**
|