funuicss 3.5.7 → 3.5.9

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/ui/theme/theme.js CHANGED
@@ -33,24 +33,43 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  return result;
34
34
  };
35
35
  })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
36
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.useVariant = void 0;
37
41
  var react_1 = __importStar(require("react"));
38
42
  var themes_1 = require("./themes");
39
43
  var darkenUtils_1 = require("./darkenUtils");
44
+ var firestore_1 = require("firebase/firestore");
45
+ var Firebase_1 = __importDefault(require("../../utils/Firebase"));
46
+ var VariantContext = (0, react_1.createContext)({
47
+ variant: 'standard',
48
+ setVariant: function () {
49
+ /** noop */
50
+ },
51
+ });
52
+ var useVariant = function () { return (0, react_1.useContext)(VariantContext); };
53
+ exports.useVariant = useVariant;
54
+ /* -------------------------------------------------------------------------- */
55
+ /* COMPONENT */
56
+ /* -------------------------------------------------------------------------- */
40
57
  var ThemeProvider = function (_a) {
41
- var theme = _a.theme, children = _a.children;
58
+ var theme = _a.theme, children = _a.children, projectId = _a.projectId;
59
+ var _b = (0, react_1.useState)('standard'), variant = _b[0], setVariant = _b[1];
60
+ /* -------------------------- Apply base theme --------------------------- */
42
61
  (0, react_1.useEffect)(function () {
43
62
  var root = document.documentElement;
44
63
  var selectedTheme = themes_1.themes[theme] || themes_1.themes.light;
45
- // Apply selected theme variables
46
64
  Object.entries(selectedTheme).forEach(function (_a) {
47
65
  var key = _a[0], value = _a[1];
48
66
  root.style.setProperty(key, value);
49
67
  });
50
- // Apply darkened RGBA versions (for dark themes only)
51
- if (theme === 'dark' || theme === 'dark-blue' || theme === 'midnight-purple' || theme === 'cyber-metal') {
68
+ if (['dark', 'dark-blue', 'midnight-purple', 'cyber-metal'].includes(theme)) {
52
69
  themes_1.colorVarsToDarken.forEach(function (varName) {
53
- var original = getComputedStyle(root).getPropertyValue(varName).trim();
70
+ var original = getComputedStyle(root)
71
+ .getPropertyValue(varName)
72
+ .trim();
54
73
  if (original) {
55
74
  var darkAmount = (0, darkenUtils_1.getDarkenAmount)(varName);
56
75
  var rgba = (0, darkenUtils_1.darkenToRgba)(original, darkAmount, 0.9);
@@ -59,10 +78,35 @@ var ThemeProvider = function (_a) {
59
78
  });
60
79
  }
61
80
  }, [theme]);
62
- return (react_1.default.createElement("div", { className: "theme-".concat(theme), style: {
63
- backgroundColor: 'var(--page-bg)',
64
- color: 'var(--text-color)',
65
- minHeight: '100vh',
66
- } }, children));
81
+ /* ---------------------- Real-time Firestore sync ----------------------- */
82
+ (0, react_1.useEffect)(function () {
83
+ if (!projectId)
84
+ return;
85
+ var root = document.documentElement;
86
+ var docRef = (0, firestore_1.doc)(Firebase_1.default, 'Projects', projectId);
87
+ var unsubscribe = (0, firestore_1.onSnapshot)(docRef, function (snapshot) {
88
+ var _a;
89
+ var data = snapshot.data();
90
+ if (!data)
91
+ return;
92
+ var config = (_a = data.theme_config) !== null && _a !== void 0 ? _a : {};
93
+ var newVariant = data.default_variation || 'standard';
94
+ setVariant(newVariant);
95
+ Object.entries(config).forEach(function (_a) {
96
+ var key = _a[0], value = _a[1];
97
+ root.style.setProperty(key.startsWith('--') ? key : "--".concat(key), String(value));
98
+ });
99
+ }, function (error) {
100
+ console.error('Realtime theme listener error:', error);
101
+ });
102
+ return function () { return unsubscribe(); };
103
+ }, [projectId]);
104
+ /* ------------------------------- Render ------------------------------- */
105
+ return (react_1.default.createElement(VariantContext.Provider, { value: { variant: variant, setVariant: setVariant } },
106
+ react_1.default.createElement("div", { className: "theme-".concat(theme), style: {
107
+ backgroundColor: 'var(--page-bg)',
108
+ color: 'var(--text-color)',
109
+ minHeight: '100vh',
110
+ } }, children)));
67
111
  };
68
112
  exports.default = ThemeProvider;
@@ -0,0 +1,10 @@
1
+ export namespace Requests {
2
+ export function getDocs(collectionName: any, docs_limit: any, extraQueries?: any[]): Promise<any>;
3
+ export function getDoc(collectionName: any, id: any): Promise<any>;
4
+ export function query(collectionName: any, queriesArr: any[] | undefined, docs_limit: any): Promise<any>;
5
+ export function add_document(cName: any, data: any, dbCollection?: string): Promise<any>;
6
+ export function set_doc(cName: any, doc_id: any, data: any): Promise<any>;
7
+ export function update(cName: any, doc_id: any, data: any): Promise<any>;
8
+ export function _delete(cName: any, doc_id: any): Promise<any>;
9
+ export { _delete as delete };
10
+ }
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ var __importDefault = (this && this.__importDefault) || function (mod) {
59
+ return (mod && mod.__esModule) ? mod : { "default": mod };
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.Requests = void 0;
63
+ var Firebase_1 = __importDefault(require("./Firebase"));
64
+ var firestore_1 = require("firebase/firestore");
65
+ // ⏳ Convert timestamp to "x time ago"
66
+ function timeAgo(timestamp) {
67
+ if (!timestamp)
68
+ return "";
69
+ var now = new Date();
70
+ var date = timestamp.toDate ? timestamp.toDate() : new Date(timestamp);
71
+ var seconds = Math.floor((now - date) / 1000);
72
+ var intervals = {
73
+ year: 31536000,
74
+ month: 2592000,
75
+ week: 604800,
76
+ day: 86400,
77
+ hour: 3600,
78
+ minute: 60,
79
+ second: 1,
80
+ };
81
+ for (var key in intervals) {
82
+ var value = intervals[key];
83
+ if (seconds >= value) {
84
+ var count = Math.floor(seconds / value);
85
+ return "".concat(count, " ").concat(key).concat(count > 1 ? "s" : "", " ago");
86
+ }
87
+ }
88
+ return "just now";
89
+ }
90
+ // ⏳ Apply timeAgo to createdAt & updatedAt fields
91
+ function formatTimestamps(docData) {
92
+ return __assign(__assign({}, docData), { createdAt: docData.createdAt ? timeAgo(docData.createdAt) : null, updatedAt: docData.updatedAt ? timeAgo(docData.updatedAt) : null });
93
+ }
94
+ exports.Requests = {
95
+ // 📥 Get all docs
96
+ getDocs: function (collectionName, docs_limit, extraQueries) {
97
+ if (extraQueries === void 0) { extraQueries = []; }
98
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
99
+ var Resourceq, snapshot, data, err_1;
100
+ return __generator(this, function (_a) {
101
+ switch (_a.label) {
102
+ case 0:
103
+ _a.trys.push([0, 2, , 3]);
104
+ Resourceq = firestore_1.query.apply(void 0, __spreadArray(__spreadArray([(0, firestore_1.collection)(Firebase_1.default, collectionName)], extraQueries, false), (docs_limit ? [(0, firestore_1.limit)(docs_limit)] : []), false));
105
+ return [4 /*yield*/, (0, firestore_1.getDocs)(Resourceq)];
106
+ case 1:
107
+ snapshot = _a.sent();
108
+ if (snapshot.docs.length > 0) {
109
+ data = snapshot.docs.map(function (d) { return (__assign({ id: d.id }, formatTimestamps(d.data()))); });
110
+ resolve(data);
111
+ }
112
+ else {
113
+ resolve([]);
114
+ }
115
+ return [3 /*break*/, 3];
116
+ case 2:
117
+ err_1 = _a.sent();
118
+ reject("Error fetching documents: ".concat(err_1.message));
119
+ return [3 /*break*/, 3];
120
+ case 3: return [2 /*return*/];
121
+ }
122
+ });
123
+ }); });
124
+ },
125
+ // 📥 Get single doc
126
+ getDoc: function (collectionName, id) {
127
+ return new Promise(function (resolve, reject) {
128
+ (0, firestore_1.onSnapshot)((0, firestore_1.doc)(Firebase_1.default, collectionName, id), function (gdoc) {
129
+ var data = gdoc.data();
130
+ if (data) {
131
+ resolve({ data: formatTimestamps(data), id: gdoc.id });
132
+ }
133
+ else {
134
+ resolve({ message: "No data found", data: "" });
135
+ }
136
+ }, function (err) { return reject("Error fetching document: ".concat(err.message)); });
137
+ });
138
+ },
139
+ // 🔎 Flexible query (add more queries)
140
+ query: function (collectionName, queriesArr, docs_limit) {
141
+ if (queriesArr === void 0) { queriesArr = []; }
142
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
143
+ var Resourceq, snapshot, data, err_2;
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0:
147
+ _a.trys.push([0, 2, , 3]);
148
+ Resourceq = firestore_1.query.apply(void 0, __spreadArray(__spreadArray([(0, firestore_1.collection)(Firebase_1.default, collectionName)], queriesArr, false), (docs_limit ? [(0, firestore_1.limit)(docs_limit)] : []), false));
149
+ return [4 /*yield*/, (0, firestore_1.getDocs)(Resourceq)];
150
+ case 1:
151
+ snapshot = _a.sent();
152
+ if (snapshot.docs.length > 0) {
153
+ data = snapshot.docs.map(function (d) { return (__assign({ id: d.id }, formatTimestamps(d.data()))); });
154
+ resolve({ data: data });
155
+ }
156
+ else {
157
+ resolve({ message: "No data", data: [] });
158
+ }
159
+ return [3 /*break*/, 3];
160
+ case 2:
161
+ err_2 = _a.sent();
162
+ reject("Error querying documents: ".concat(err_2.message));
163
+ console.log(err_2);
164
+ return [3 /*break*/, 3];
165
+ case 3: return [2 /*return*/];
166
+ }
167
+ });
168
+ }); });
169
+ },
170
+ // ➕ Add new doc with createdAt + updatedAt
171
+ add_document: function (cName, data, dbCollection) {
172
+ if (dbCollection === void 0) { dbCollection = ''; }
173
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
174
+ var docRef, err_3;
175
+ return __generator(this, function (_a) {
176
+ switch (_a.label) {
177
+ case 0:
178
+ _a.trys.push([0, 3, , 4]);
179
+ return [4 /*yield*/, (0, firestore_1.addDoc)((0, firestore_1.collection)(Firebase_1.default, cName), __assign(__assign({}, data), { createdAt: (0, firestore_1.serverTimestamp)(), updatedAt: (0, firestore_1.serverTimestamp)() }))];
180
+ case 1:
181
+ docRef = _a.sent();
182
+ // Then update the same doc with its ID
183
+ return [4 /*yield*/, (0, firestore_1.updateDoc)(docRef, dbCollection === 'users' ? { uid: docRef.id } : { id: docRef.id })];
184
+ case 2:
185
+ // Then update the same doc with its ID
186
+ _a.sent();
187
+ resolve(docRef);
188
+ return [3 /*break*/, 4];
189
+ case 3:
190
+ err_3 = _a.sent();
191
+ reject("Error adding document: ".concat(err_3.message));
192
+ return [3 /*break*/, 4];
193
+ case 4: return [2 /*return*/];
194
+ }
195
+ });
196
+ }); });
197
+ },
198
+ // ✍️ Set/merge doc with updatedAt
199
+ set_doc: function (cName, doc_id, data) {
200
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
201
+ var res, err_4;
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0:
205
+ _a.trys.push([0, 2, , 3]);
206
+ return [4 /*yield*/, (0, firestore_1.setDoc)((0, firestore_1.doc)(Firebase_1.default, cName, doc_id), __assign(__assign({}, data), { updatedAt: (0, firestore_1.serverTimestamp)(), createdAt: (0, firestore_1.serverTimestamp)() }), { merge: true })];
207
+ case 1:
208
+ res = _a.sent();
209
+ resolve(res);
210
+ return [3 /*break*/, 3];
211
+ case 2:
212
+ err_4 = _a.sent();
213
+ reject("Error setting document: ".concat(err_4.message));
214
+ return [3 /*break*/, 3];
215
+ case 3: return [2 /*return*/];
216
+ }
217
+ });
218
+ }); });
219
+ },
220
+ // 🔄 Update doc with updatedAt
221
+ update: function (cName, doc_id, data) {
222
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
223
+ var res, err_5;
224
+ return __generator(this, function (_a) {
225
+ switch (_a.label) {
226
+ case 0:
227
+ _a.trys.push([0, 2, , 3]);
228
+ return [4 /*yield*/, (0, firestore_1.updateDoc)((0, firestore_1.doc)(Firebase_1.default, cName, doc_id), __assign(__assign({}, data), { updatedAt: (0, firestore_1.serverTimestamp)() }))];
229
+ case 1:
230
+ res = _a.sent();
231
+ resolve(res);
232
+ return [3 /*break*/, 3];
233
+ case 2:
234
+ err_5 = _a.sent();
235
+ reject("Error updating document: ".concat(err_5.message));
236
+ return [3 /*break*/, 3];
237
+ case 3: return [2 /*return*/];
238
+ }
239
+ });
240
+ }); });
241
+ },
242
+ // ❌ Delete doc
243
+ delete: function (cName, doc_id) {
244
+ return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
245
+ var err_6;
246
+ return __generator(this, function (_a) {
247
+ switch (_a.label) {
248
+ case 0:
249
+ _a.trys.push([0, 2, , 3]);
250
+ return [4 /*yield*/, (0, firestore_1.deleteDoc)((0, firestore_1.doc)(Firebase_1.default, cName, doc_id))];
251
+ case 1:
252
+ _a.sent();
253
+ resolve("Document ".concat(doc_id, " successfully deleted"));
254
+ return [3 /*break*/, 3];
255
+ case 2:
256
+ err_6 = _a.sent();
257
+ reject("Error deleting document: ".concat(err_6.message));
258
+ return [3 /*break*/, 3];
259
+ case 3: return [2 /*return*/];
260
+ }
261
+ });
262
+ }); });
263
+ },
264
+ };
265
+ // // Add document
266
+ // Requests.add_document("users", { name: "John Doe", email: "john@example.com" });
267
+ // // Update document
268
+ // Requests.update("users", "docID123", { name: "Jane Doe" });
269
+ // // Query with multiple conditions
270
+ // Requests.query("users", [
271
+ // where("status", "==", "active"),
272
+ // where("level", "==", "admin"),
273
+ // ], 10).then(res => console.log(res.data));
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@firebase/firestore").Firestore;
2
+ export default _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var app_1 = require("firebase/app");
4
+ var firestore_1 = require("firebase/firestore");
5
+ var firebaseConfig = {
6
+ apiKey: "AIzaSyBi6mv2y56aKgJOv-MTHhwL1OaKnXlRNxE",
7
+ authDomain: "funui-4bcd1.firebaseapp.com",
8
+ projectId: "funui-4bcd1",
9
+ storageBucket: "funui-4bcd1.firebasestorage.app",
10
+ messagingSenderId: "321671406212",
11
+ appId: "1:321671406212:web:344738ff231449368f18d1",
12
+ measurementId: "G-PDMZ8J0R37"
13
+ };
14
+ // Initialize Firebase app
15
+ var db = (0, app_1.initializeApp)(firebaseConfig);
16
+ exports.default = (0, firestore_1.getFirestore)();
@@ -0,0 +1,8 @@
1
+ export interface ThemeConfig {
2
+ colors?: Record<string, string>;
3
+ }
4
+ /**
5
+ * Applies color variables from a theme config to the :root element.
6
+ * Example: { primary: "#8B5CF6" } → --color-primary: #8B5CF6
7
+ */
8
+ export declare const applyThemeConfig: (themeConfig: ThemeConfig) => void;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyThemeConfig = void 0;
4
+ /**
5
+ * Applies color variables from a theme config to the :root element.
6
+ * Example: { primary: "#8B5CF6" } → --color-primary: #8B5CF6
7
+ */
8
+ var applyThemeConfig = function (themeConfig) {
9
+ if (typeof window === "undefined")
10
+ return; // For SSR safety
11
+ var root = document.documentElement;
12
+ var colors = themeConfig.colors || {};
13
+ Object.entries(colors).forEach(function (_a) {
14
+ var key = _a[0], value = _a[1];
15
+ var varName = "--".concat(key);
16
+ root.style.setProperty(varName, String(value));
17
+ });
18
+ };
19
+ exports.applyThemeConfig = applyThemeConfig;