mumineen-ui-plugins 1.7.0 → 1.8.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.
@@ -26,7 +26,6 @@
26
26
  font-family: "DM Sans", sans-serif;
27
27
  background: var(--bg);
28
28
  color: var(--text);
29
- min-height: 100vh;
30
29
  display: flex;
31
30
  flex-direction: column;
32
31
  align-items: center;
@@ -119,7 +118,7 @@
119
118
  background: var(--bg-card);
120
119
  border: 1px solid var(--border);
121
120
  border-radius: var(--radius);
122
- padding: 32px;
121
+ padding: 10px;
123
122
  margin-bottom: 20px;
124
123
  box-shadow: 0 4px 24px var(--shadow), inset 0 1px 0 rgba(255, 255, 255, 0.9);
125
124
  }
@@ -1135,6 +1134,92 @@
1135
1134
  margin-top: 1px;
1136
1135
  }
1137
1136
 
1137
+ /* ── Results overlay layer ── */
1138
+ .qasr-namaaz .overlay-layer {
1139
+ position: absolute;
1140
+ inset: 0;
1141
+ z-index: 10;
1142
+ background: var(--bg);
1143
+ border-radius: var(--radius);
1144
+ display: flex;
1145
+ flex-direction: column;
1146
+ animation: qasr-fadeUp 0.3s ease both;
1147
+ }
1148
+
1149
+ .qasr-namaaz .overlay-header {
1150
+ display: flex;
1151
+ align-items: center;
1152
+ justify-content: space-between;
1153
+ gap: 10px;
1154
+ padding: 14px 16px;
1155
+ background: var(--bg-card);
1156
+ border-bottom: 1px solid var(--border);
1157
+ border-radius: var(--radius) var(--radius) 0 0;
1158
+ flex-shrink: 0;
1159
+ }
1160
+
1161
+ .qasr-namaaz .overlay-addresses {
1162
+ display: flex;
1163
+ align-items: center;
1164
+ gap: 10px;
1165
+ flex: 1;
1166
+ min-width: 0;
1167
+ }
1168
+
1169
+ .qasr-namaaz .overlay-addr {
1170
+ display: flex;
1171
+ align-items: center;
1172
+ gap: 6px;
1173
+ min-width: 0;
1174
+ }
1175
+
1176
+ .qasr-namaaz .overlay-addr-icon {
1177
+ color: var(--gold);
1178
+ font-size: 14px;
1179
+ flex-shrink: 0;
1180
+ }
1181
+
1182
+ .qasr-namaaz .overlay-addr-text {
1183
+ font-size: 12px;
1184
+ color: var(--text);
1185
+ font-weight: 500;
1186
+ white-space: nowrap;
1187
+ overflow: hidden;
1188
+ text-overflow: ellipsis;
1189
+ }
1190
+
1191
+ .qasr-namaaz .overlay-arrow {
1192
+ color: var(--grey-light);
1193
+ font-size: 14px;
1194
+ flex-shrink: 0;
1195
+ }
1196
+
1197
+ .qasr-namaaz .overlay-dismiss {
1198
+ width: 32px;
1199
+ height: 32px;
1200
+ border-radius: 8px;
1201
+ border: 1px solid rgba(0, 0, 0, 0.1);
1202
+ background: rgba(0, 0, 0, 0.03);
1203
+ color: rgba(0, 0, 0, 0.65);
1204
+ cursor: pointer;
1205
+ display: flex;
1206
+ align-items: center;
1207
+ justify-content: center;
1208
+ font-size: 15px;
1209
+ flex-shrink: 0;
1210
+ transition: background 0.18s;
1211
+ }
1212
+
1213
+ .qasr-namaaz .overlay-dismiss:hover {
1214
+ background: rgba(0, 0, 0, 0.07);
1215
+ }
1216
+
1217
+ .qasr-namaaz .overlay-body {
1218
+ flex: 1 1 auto;
1219
+ padding: 10px;
1220
+ min-height: 0;
1221
+ }
1222
+
1138
1223
  /* ── PAC autocomplete (global — dropdown renders outside component) ── */
1139
1224
  .pac-container {
1140
1225
  background: #fff !important;
@@ -1239,6 +1324,24 @@
1239
1324
  .qasr-namaaz .border-route-link {
1240
1325
  font-size: 11px;
1241
1326
  }
1327
+
1328
+ .qasr-namaaz .overlay-addresses {
1329
+ flex-direction: column;
1330
+ align-items: flex-start;
1331
+ gap: 4px;
1332
+ }
1333
+
1334
+ .qasr-namaaz .overlay-arrow {
1335
+ display: none;
1336
+ }
1337
+
1338
+ .qasr-namaaz .overlay-header {
1339
+ padding: 12px 14px;
1340
+ }
1341
+
1342
+ .qasr-namaaz .overlay-body {
1343
+ padding: 16px 14px;
1344
+ }
1242
1345
  }
1243
1346
 
1244
1347
  @media (max-width: 360px) {
@@ -1,5 +1,10 @@
1
1
  import * as React from "react";
2
2
  import "./QasrNamaaz.css";
3
- export declare const QasrNamaaz: React.FC<{
3
+ interface QasrNamaazProps {
4
4
  googleMapsApiKey: string;
5
- }>;
5
+ defaultOrigin?: string;
6
+ defaultDestination?: string;
7
+ showResultsAsOverlay?: boolean;
8
+ }
9
+ export declare const QasrNamaaz: React.FC<QasrNamaazProps>;
10
+ export {};
@@ -4,7 +4,8 @@ exports.QasrNamaaz = void 0;
4
4
  const React = require("react");
5
5
  require("./QasrNamaaz.css");
6
6
  const qasr_engine_1 = require("./qasr-engine");
7
- exports.QasrNamaaz = React.memo(({ googleMapsApiKey }) => {
7
+ exports.QasrNamaaz = React.memo(({ googleMapsApiKey, defaultOrigin, defaultDestination, showResultsAsOverlay }) => {
8
+ var _a, _b;
8
9
  const [scriptsLoaded, setScriptsLoaded] = React.useState(false);
9
10
  const [results, setResults] = React.useState([]);
10
11
  const [loading, setLoading] = React.useState(false);
@@ -18,6 +19,7 @@ exports.QasrNamaaz = React.memo(({ googleMapsApiKey }) => {
18
19
  const [openCards, setOpenCards] = React.useState({});
19
20
  const [activeTabs, setActiveTabs] = React.useState({});
20
21
  const [fsMap, setFsMap] = React.useState(null);
22
+ const [showOverlay, setShowOverlay] = React.useState(false);
21
23
  const originRef = React.useRef(null);
22
24
  const destRef = React.useRef(null);
23
25
  const resultsRef = React.useRef(null);
@@ -107,6 +109,39 @@ exports.QasrNamaaz = React.memo(({ googleMapsApiKey }) => {
107
109
  makeAC(originRef.current, "origin");
108
110
  makeAC(destRef.current, "dest");
109
111
  }, [scriptsLoaded]);
112
+ // Geocode default addresses after scripts are ready
113
+ React.useEffect(() => {
114
+ if (!scriptsLoaded)
115
+ return;
116
+ const gc = new ((0, qasr_engine_1.gm)().maps.Geocoder)();
117
+ const geocodeDefault = (address, which) => {
118
+ gc.geocode({ address }, (results, status) => {
119
+ if (status !== "OK" || !(results === null || results === void 0 ? void 0 : results.length))
120
+ return;
121
+ const p = results[0];
122
+ if (!p.geometry)
123
+ return;
124
+ const co = (0, qasr_engine_1.getCounty)(p), st = (0, qasr_engine_1.getState)(p);
125
+ const text = co ? co + " County, " + st : st;
126
+ if (which === "origin") {
127
+ if (originRef.current)
128
+ originRef.current.value = address;
129
+ (0, qasr_engine_1.setOriginPlace)(p);
130
+ setOriginBadge({ text, visible: true });
131
+ }
132
+ else {
133
+ if (destRef.current)
134
+ destRef.current.value = address;
135
+ (0, qasr_engine_1.setDestPlace)(p);
136
+ setDestBadge({ text, visible: true });
137
+ }
138
+ });
139
+ };
140
+ if (defaultOrigin)
141
+ geocodeDefault(defaultOrigin, "origin");
142
+ if (defaultDestination)
143
+ geocodeDefault(defaultDestination, "dest");
144
+ }, [scriptsLoaded]);
110
145
  // Init Leaflet maps when Map tab is opened
111
146
  React.useEffect(() => {
112
147
  Object.entries(activeTabs).forEach(([idxStr, tab]) => {
@@ -197,7 +232,12 @@ exports.QasrNamaaz = React.memo(({ googleMapsApiKey }) => {
197
232
  setActiveTabs({});
198
233
  setShowResults(true);
199
234
  setProgress({ pct: 100, label: "Done!" });
200
- setTimeout(() => { var _a; return (_a = resultsRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth", block: "start" }); }, 100);
235
+ if (showResultsAsOverlay) {
236
+ setShowOverlay(true);
237
+ }
238
+ else {
239
+ setTimeout(() => { var _a; return (_a = resultsRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth", block: "start" }); }, 100);
240
+ }
201
241
  }
202
242
  catch (e) {
203
243
  setError("Error: " + e.message);
@@ -431,11 +471,27 @@ exports.QasrNamaaz = React.memo(({ googleMapsApiKey }) => {
431
471
  React.createElement("div", { className: "prog-fill", style: { width: progress.pct + "%" } })),
432
472
  React.createElement("div", { className: "prog-lbl" }, progress.label || "Starting")),
433
473
  React.createElement("div", { className: "err" + (error ? " on" : "") }, error)),
434
- React.createElement("div", { className: "results-wrap" + (showResults ? " on" : ""), ref: resultsRef },
474
+ !showResultsAsOverlay && (React.createElement("div", { className: "results-wrap" + (showResults ? " on" : ""), ref: resultsRef },
435
475
  React.createElement("div", { className: "results-hd" },
436
476
  React.createElement("h2", null, "Route Results"),
437
477
  React.createElement("span", { className: "results-ct" }, resultCountText)),
438
478
  React.createElement("div", null, results.map((r, i) => renderRouteCard(r, i))))),
479
+ showResultsAsOverlay && showOverlay && showResults && (React.createElement("div", { className: "overlay-layer" },
480
+ React.createElement("div", { className: "overlay-header" },
481
+ React.createElement("div", { className: "overlay-addresses" },
482
+ React.createElement("div", { className: "overlay-addr" },
483
+ React.createElement("span", { className: "overlay-addr-icon" }, "\u29BF"),
484
+ React.createElement("span", { className: "overlay-addr-text" }, ((_a = originRef.current) === null || _a === void 0 ? void 0 : _a.value) || "Origin")),
485
+ React.createElement("div", { className: "overlay-arrow" }, "\u2192"),
486
+ React.createElement("div", { className: "overlay-addr" },
487
+ React.createElement("span", { className: "overlay-addr-icon" }, "\u25CE"),
488
+ React.createElement("span", { className: "overlay-addr-text" }, ((_b = destRef.current) === null || _b === void 0 ? void 0 : _b.value) || "Destination"))),
489
+ React.createElement("button", { className: "overlay-dismiss", onClick: () => setShowOverlay(false) }, "\u2715")),
490
+ React.createElement("div", { className: "overlay-body", ref: resultsRef },
491
+ React.createElement("div", { className: "results-hd" },
492
+ React.createElement("h2", null, "Route Results"),
493
+ React.createElement("span", { className: "results-ct" }, resultCountText)),
494
+ React.createElement("div", null, results.map((r, i) => renderRouteCard(r, i))))))),
439
495
  fsMap && (React.createElement("div", { className: "fs-overlay", onClick: e => {
440
496
  if (e.target === e.currentTarget)
441
497
  setFsMap(null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mumineen-ui-plugins",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "",
5
5
  "main": "dist/index",
6
6
  "scripts": {