@geowiki/core 0.16.9-dev.4 → 0.16.9-dev.6

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/index.mjs CHANGED
@@ -2398,11 +2398,21 @@ var useBasfStore = create4((set) => ({
2398
2398
  // src/utils/common.ts
2399
2399
  import { createRoot } from "react-dom/client";
2400
2400
  import { flushSync } from "react-dom";
2401
- import { I18n } from "next-localization";
2402
2401
  import { driver } from "driver.js";
2403
2402
  import "driver.js/dist/driver.css";
2404
2403
  import * as XLSX from "xlsx";
2405
- var i18n = I18n();
2404
+ var createI18n = () => {
2405
+ let current = "en";
2406
+ return {
2407
+ locale: (next) => {
2408
+ if (next)
2409
+ current = next;
2410
+ return current;
2411
+ },
2412
+ t: (key) => key
2413
+ };
2414
+ };
2415
+ var i18n = createI18n();
2406
2416
  var getHtmlElementFromReactNode = (node) => {
2407
2417
  const div = document.createElement("div");
2408
2418
  const root = createRoot(div);
@@ -3124,6 +3134,367 @@ function signIn(_provider, _options, params) {
3124
3134
  function signOut() {
3125
3135
  window.location.href = "/api/auth/logout";
3126
3136
  }
3137
+
3138
+ // src/framework/index.tsx
3139
+ import { forwardRef as forwardRef2 } from "react";
3140
+
3141
+ // src/framework/context.tsx
3142
+ import { createContext as createContext2, useContext as useContext2, useMemo as useMemo4 } from "react";
3143
+
3144
+ // src/framework/defaults.tsx
3145
+ import {
3146
+ Suspense,
3147
+ forwardRef,
3148
+ lazy,
3149
+ useCallback as useCallback2,
3150
+ useEffect as useEffect5,
3151
+ useMemo as useMemo3,
3152
+ useRef as useRef2,
3153
+ useState as useState2
3154
+ } from "react";
3155
+ import { jsx as jsx2 } from "react/jsx-runtime";
3156
+ var isBrowser = () => typeof window !== "undefined";
3157
+ var queryToSearchParams = (query, target = new URLSearchParams()) => {
3158
+ if (!query)
3159
+ return target;
3160
+ for (const [key, value] of Object.entries(query)) {
3161
+ if (value === void 0 || value === null)
3162
+ continue;
3163
+ if (Array.isArray(value)) {
3164
+ for (const v of value)
3165
+ target.append(key, String(v));
3166
+ } else {
3167
+ target.set(key, String(value));
3168
+ }
3169
+ }
3170
+ return target;
3171
+ };
3172
+ var urlToHref = (url) => {
3173
+ if (typeof url === "string")
3174
+ return url;
3175
+ const { pathname = "", query, hash } = url;
3176
+ const qs = queryToSearchParams(query).toString();
3177
+ return `${pathname}${qs ? `?${qs}` : ""}${hash ? `#${hash}` : ""}`;
3178
+ };
3179
+ var unwrapDefault = (mod) => mod && typeof mod === "object" && "default" in mod ? mod : { default: mod };
3180
+ var DefaultLink = forwardRef(
3181
+ function DefaultLink2(props, ref) {
3182
+ const _a = props, {
3183
+ href,
3184
+ as: _as,
3185
+ replace: _replace,
3186
+ scroll: _scroll,
3187
+ shallow: _shallow,
3188
+ passHref: _passHref,
3189
+ prefetch: _prefetch,
3190
+ locale: _locale,
3191
+ legacyBehavior: _legacyBehavior,
3192
+ children
3193
+ } = _a, rest = __objRest(_a, [
3194
+ "href",
3195
+ "as",
3196
+ "replace",
3197
+ "scroll",
3198
+ "shallow",
3199
+ "passHref",
3200
+ "prefetch",
3201
+ "locale",
3202
+ "legacyBehavior",
3203
+ "children"
3204
+ ]);
3205
+ return /* @__PURE__ */ jsx2("a", __spreadProps(__spreadValues({ ref, href: urlToHref(href) }, rest), { children }));
3206
+ }
3207
+ );
3208
+ var DefaultImage = function DefaultImage2(props) {
3209
+ const _a = props, {
3210
+ src,
3211
+ alt,
3212
+ width,
3213
+ height,
3214
+ fill,
3215
+ sizes: _sizes,
3216
+ quality: _quality,
3217
+ priority: _priority,
3218
+ loading,
3219
+ placeholder: _placeholder,
3220
+ blurDataURL: _blurDataURL,
3221
+ unoptimized: _unoptimized,
3222
+ layout: _layout,
3223
+ objectFit,
3224
+ objectPosition,
3225
+ onLoadingComplete,
3226
+ style
3227
+ } = _a, rest = __objRest(_a, [
3228
+ "src",
3229
+ "alt",
3230
+ "width",
3231
+ "height",
3232
+ "fill",
3233
+ "sizes",
3234
+ "quality",
3235
+ "priority",
3236
+ "loading",
3237
+ "placeholder",
3238
+ "blurDataURL",
3239
+ "unoptimized",
3240
+ "layout",
3241
+ "objectFit",
3242
+ "objectPosition",
3243
+ "onLoadingComplete",
3244
+ "style"
3245
+ ]);
3246
+ const resolvedSrc = typeof src === "string" ? src : src == null ? void 0 : src.src;
3247
+ const mergedStyle = useMemo3(() => {
3248
+ if (!fill && !objectFit && !objectPosition && !style)
3249
+ return void 0;
3250
+ const out = __spreadValues({}, style);
3251
+ if (fill)
3252
+ Object.assign(out, { position: "absolute", inset: 0, width: "100%", height: "100%" });
3253
+ if (objectFit)
3254
+ out.objectFit = objectFit;
3255
+ if (objectPosition)
3256
+ out.objectPosition = objectPosition;
3257
+ return out;
3258
+ }, [fill, objectFit, objectPosition, style]);
3259
+ return (
3260
+ // eslint-disable-next-line @next/next/no-img-element, jsx-a11y/alt-text
3261
+ /* @__PURE__ */ jsx2(
3262
+ "img",
3263
+ __spreadValues({
3264
+ src: resolvedSrc,
3265
+ alt,
3266
+ width: fill ? void 0 : width,
3267
+ height: fill ? void 0 : height,
3268
+ loading: loading != null ? loading : "lazy",
3269
+ style: mergedStyle,
3270
+ onLoad: (e) => onLoadingComplete == null ? void 0 : onLoadingComplete(e.currentTarget)
3271
+ }, rest)
3272
+ )
3273
+ );
3274
+ };
3275
+ var DefaultScript = function DefaultScript2(props) {
3276
+ const _a = props, { strategy: _strategy, onReady: _onReady } = _a, rest = __objRest(_a, ["strategy", "onReady"]);
3277
+ const { src, id, async, defer, type, nonce, onLoad, onError, children } = rest;
3278
+ const onLoadRef = useRef2(onLoad);
3279
+ const onErrorRef = useRef2(onError);
3280
+ onLoadRef.current = onLoad;
3281
+ onErrorRef.current = onError;
3282
+ useEffect5(() => {
3283
+ if (!src || !isBrowser())
3284
+ return;
3285
+ const el = document.createElement("script");
3286
+ el.src = src;
3287
+ if (id)
3288
+ el.id = id;
3289
+ if (async)
3290
+ el.async = true;
3291
+ if (defer)
3292
+ el.defer = true;
3293
+ if (type)
3294
+ el.type = type;
3295
+ if (nonce)
3296
+ el.nonce = nonce;
3297
+ el.onload = () => {
3298
+ var _a2;
3299
+ return (_a2 = onLoadRef.current) == null ? void 0 : _a2.call(onLoadRef);
3300
+ };
3301
+ el.onerror = (e) => {
3302
+ var _a2;
3303
+ return (_a2 = onErrorRef.current) == null ? void 0 : _a2.call(onErrorRef, e);
3304
+ };
3305
+ document.head.appendChild(el);
3306
+ return () => {
3307
+ el.remove();
3308
+ };
3309
+ }, [src, id, async, defer, type, nonce]);
3310
+ if (children) {
3311
+ return /* @__PURE__ */ jsx2("script", __spreadProps(__spreadValues({}, rest), { children }));
3312
+ }
3313
+ return null;
3314
+ };
3315
+ var DefaultHead = function DefaultHead2({ children: _children }) {
3316
+ return null;
3317
+ };
3318
+ var parseSearch = (search) => {
3319
+ const params = new URLSearchParams(search);
3320
+ const result = {};
3321
+ for (const key of new Set(params.keys())) {
3322
+ const all = params.getAll(key);
3323
+ result[key] = all.length > 1 ? all : all[0];
3324
+ }
3325
+ return result;
3326
+ };
3327
+ var useLocation2 = () => {
3328
+ const [tick, setTick] = useState2(0);
3329
+ useEffect5(() => {
3330
+ if (!isBrowser())
3331
+ return;
3332
+ const handler = () => setTick((t) => t + 1);
3333
+ window.addEventListener("popstate", handler);
3334
+ return () => window.removeEventListener("popstate", handler);
3335
+ }, []);
3336
+ return useMemo3(() => {
3337
+ if (!isBrowser()) {
3338
+ return { pathname: "/", search: "", hash: "", asPath: "/" };
3339
+ }
3340
+ const { pathname, search, hash } = window.location;
3341
+ return {
3342
+ pathname,
3343
+ search,
3344
+ hash,
3345
+ asPath: `${pathname}${search}${hash}`
3346
+ };
3347
+ }, [tick]);
3348
+ };
3349
+ var useDefaultRouter = () => {
3350
+ const loc = useLocation2();
3351
+ const query = useMemo3(() => parseSearch(loc.search), [loc.search]);
3352
+ const push = useCallback2((url) => __async(void 0, null, function* () {
3353
+ if (!isBrowser())
3354
+ return false;
3355
+ window.history.pushState({}, "", urlToHref(url));
3356
+ window.dispatchEvent(new PopStateEvent("popstate"));
3357
+ return true;
3358
+ }), []);
3359
+ const replace = useCallback2((url) => __async(void 0, null, function* () {
3360
+ if (!isBrowser())
3361
+ return false;
3362
+ window.history.replaceState({}, "", urlToHref(url));
3363
+ window.dispatchEvent(new PopStateEvent("popstate"));
3364
+ return true;
3365
+ }), []);
3366
+ const back = useCallback2(() => {
3367
+ if (isBrowser())
3368
+ window.history.back();
3369
+ }, []);
3370
+ const forward = useCallback2(() => {
3371
+ if (isBrowser())
3372
+ window.history.forward();
3373
+ }, []);
3374
+ const reload = useCallback2(() => {
3375
+ if (isBrowser())
3376
+ window.location.reload();
3377
+ }, []);
3378
+ return useMemo3(
3379
+ () => ({
3380
+ pathname: loc.pathname,
3381
+ asPath: loc.asPath,
3382
+ query,
3383
+ isReady: isBrowser(),
3384
+ push,
3385
+ replace,
3386
+ back,
3387
+ forward,
3388
+ reload
3389
+ }),
3390
+ [loc.pathname, loc.asPath, query, push, replace, back, forward, reload]
3391
+ );
3392
+ };
3393
+ var useDefaultNavigationRouter = () => {
3394
+ const router = useDefaultRouter();
3395
+ return useMemo3(
3396
+ () => ({
3397
+ push: (href) => router.push(href),
3398
+ replace: (href) => router.replace(href),
3399
+ back: () => router.back(),
3400
+ forward: () => {
3401
+ var _a;
3402
+ return (_a = router.forward) == null ? void 0 : _a.call(router);
3403
+ },
3404
+ refresh: () => router.reload(),
3405
+ prefetch: () => void 0
3406
+ }),
3407
+ [router]
3408
+ );
3409
+ };
3410
+ var useDefaultSearchParams = () => {
3411
+ const loc = useLocation2();
3412
+ return useMemo3(() => new URLSearchParams(loc.search), [loc.search]);
3413
+ };
3414
+ var useDefaultTheme = () => {
3415
+ const [theme, setThemeState] = useState2(void 0);
3416
+ const setTheme = useCallback2((next) => {
3417
+ setThemeState((prev) => prev === next ? prev : next);
3418
+ }, []);
3419
+ return useMemo3(
3420
+ () => ({ theme, resolvedTheme: theme, setTheme }),
3421
+ [theme, setTheme]
3422
+ );
3423
+ };
3424
+ var useDefaultI18n = () => ({
3425
+ locale: isBrowser() ? document.documentElement.lang || "en" : "en",
3426
+ t: (key) => key
3427
+ });
3428
+ var defaultDynamic = (loader, options) => {
3429
+ const Lazy = lazy(() => __async(void 0, null, function* () {
3430
+ return unwrapDefault(yield loader());
3431
+ }));
3432
+ const Loading = options == null ? void 0 : options.loading;
3433
+ const Wrapped = (props) => /* @__PURE__ */ jsx2(Suspense, { fallback: Loading ? /* @__PURE__ */ jsx2(Loading, {}) : null, children: /* @__PURE__ */ jsx2(Lazy, __spreadValues({}, props)) });
3434
+ Wrapped.displayName = "DynamicDefault";
3435
+ return Wrapped;
3436
+ };
3437
+
3438
+ // src/framework/context.tsx
3439
+ import { jsx as jsx3 } from "react/jsx-runtime";
3440
+ var defaultAdapters = {
3441
+ Link: DefaultLink,
3442
+ Image: DefaultImage,
3443
+ Script: DefaultScript,
3444
+ Head: DefaultHead,
3445
+ useRouter: useDefaultRouter,
3446
+ useNavigationRouter: useDefaultNavigationRouter,
3447
+ useSearchParams: useDefaultSearchParams,
3448
+ useTheme: useDefaultTheme,
3449
+ useI18n: useDefaultI18n,
3450
+ dynamic: defaultDynamic
3451
+ };
3452
+ var FrameworkContext = createContext2(defaultAdapters);
3453
+ var FrameworkProvider = ({ adapters, children }) => {
3454
+ const value = useMemo4(
3455
+ () => __spreadValues(__spreadValues({}, defaultAdapters), adapters),
3456
+ [adapters]
3457
+ );
3458
+ return /* @__PURE__ */ jsx3(FrameworkContext.Provider, { value, children });
3459
+ };
3460
+ var useFrameworkAdapters = () => useContext2(FrameworkContext);
3461
+
3462
+ // src/framework/index.tsx
3463
+ import { jsx as jsx4 } from "react/jsx-runtime";
3464
+ var Link = forwardRef2(function Link2(props, ref) {
3465
+ const { Link: Adapter } = useFrameworkAdapters();
3466
+ return /* @__PURE__ */ jsx4(Adapter, __spreadValues({ ref }, props));
3467
+ });
3468
+ var Image = (props) => {
3469
+ const { Image: Adapter } = useFrameworkAdapters();
3470
+ return /* @__PURE__ */ jsx4(Adapter, __spreadValues({}, props));
3471
+ };
3472
+ var Script = (props) => {
3473
+ const { Script: Adapter } = useFrameworkAdapters();
3474
+ return /* @__PURE__ */ jsx4(Adapter, __spreadValues({}, props));
3475
+ };
3476
+ var Head = (props) => {
3477
+ const { Head: Adapter } = useFrameworkAdapters();
3478
+ return /* @__PURE__ */ jsx4(Adapter, __spreadValues({}, props));
3479
+ };
3480
+ var useRouter = () => useFrameworkAdapters().useRouter();
3481
+ var useNavigationRouter = () => useFrameworkAdapters().useNavigationRouter();
3482
+ var useSearchParams = () => useFrameworkAdapters().useSearchParams();
3483
+ var useTheme = () => useFrameworkAdapters().useTheme();
3484
+ var useI18n = () => useFrameworkAdapters().useI18n();
3485
+ function dynamic(loader, options) {
3486
+ let resolved;
3487
+ const Wrapper = (props) => {
3488
+ const { dynamic: dynamicAdapter } = useFrameworkAdapters();
3489
+ if (!resolved) {
3490
+ resolved = dynamicAdapter(loader, options);
3491
+ }
3492
+ const Component = resolved;
3493
+ return /* @__PURE__ */ jsx4(Component, __spreadValues({}, props));
3494
+ };
3495
+ Wrapper.displayName = "DynamicFrameworkWrapper";
3496
+ return Wrapper;
3497
+ }
3127
3498
  export {
3128
3499
  ActivityStatus,
3129
3500
  AdminMenus,
@@ -3134,13 +3505,21 @@ export {
3134
3505
  ColorArrayCSSClass,
3135
3506
  Config,
3136
3507
  DOTS,
3508
+ DefaultHead,
3509
+ DefaultImage,
3510
+ DefaultLink,
3511
+ DefaultScript,
3137
3512
  FarmingSystem,
3138
3513
  Features,
3514
+ FrameworkProvider,
3515
+ Head,
3139
3516
  HostService,
3140
3517
  HostType,
3141
3518
  HuntingManagement,
3519
+ Image,
3142
3520
  ImageError,
3143
3521
  IsTokenExpired,
3522
+ Link,
3144
3523
  LiveStock,
3145
3524
  LookUps,
3146
3525
  MainAgriculturalAreas,
@@ -3155,6 +3534,7 @@ export {
3155
3534
  ResourcesMenu,
3156
3535
  Responsive,
3157
3536
  SESSION_QUERY_KEY,
3537
+ Script,
3158
3538
  SessionProvider,
3159
3539
  StyleType,
3160
3540
  TaskEventType,
@@ -3165,9 +3545,11 @@ export {
3165
3545
  ViewStatus,
3166
3546
  classNames,
3167
3547
  configStore,
3548
+ defaultDynamic,
3168
3549
  delayedSlideInUp,
3169
3550
  downloadData,
3170
3551
  downloadJSON,
3552
+ dynamic,
3171
3553
  easing,
3172
3554
  findHostInfo,
3173
3555
  formatUnixDate,
@@ -3192,6 +3574,7 @@ export {
3192
3574
  itemVariants,
3193
3575
  keyStr,
3194
3576
  listVariants,
3577
+ queryToSearchParams,
3195
3578
  rgbDataURL,
3196
3579
  routes,
3197
3580
  scrollToFirstErrorElement,
@@ -3212,6 +3595,7 @@ export {
3212
3595
  trackUmamiEvent,
3213
3596
  trackUserEvent,
3214
3597
  triplet,
3598
+ unwrapDefault,
3215
3599
  useAllNewsFromAllClusters,
3216
3600
  useApiImage,
3217
3601
  useApiUrl,
@@ -3245,7 +3629,12 @@ export {
3245
3629
  useCountries,
3246
3630
  useCreateHost,
3247
3631
  useCurrentUser,
3632
+ useDefaultI18n,
3633
+ useDefaultNavigationRouter,
3634
+ useDefaultRouter,
3635
+ useDefaultSearchParams,
3248
3636
  useDefaultSettings,
3637
+ useDefaultTheme,
3249
3638
  useDeleteHost,
3250
3639
  useDimensions,
3251
3640
  useEmailing,
@@ -3257,12 +3646,14 @@ export {
3257
3646
  useFileUpload,
3258
3647
  useFileUrl,
3259
3648
  useFilterClusters,
3649
+ useFrameworkAdapters,
3260
3650
  useGeoWikiSettings,
3261
3651
  useGetUserProject,
3262
3652
  useGrantedPolicies,
3263
3653
  useGroupsInProject,
3264
3654
  useHost,
3265
3655
  useHosts,
3656
+ useI18n,
3266
3657
  useImageUrl,
3267
3658
  useIntroTourSettings,
3268
3659
  useIsAdmin,
@@ -3278,6 +3669,7 @@ export {
3278
3669
  useLockBodyScroll,
3279
3670
  useLookUp,
3280
3671
  useMapMenuItems,
3672
+ useNavigationRouter,
3281
3673
  useNews,
3282
3674
  useNewsFromAllClusters,
3283
3675
  usePagination,
@@ -3300,6 +3692,8 @@ export {
3300
3692
  useResourceType,
3301
3693
  useReviewTaskBulkUpload,
3302
3694
  useRoles,
3695
+ useRouter,
3696
+ useSearchParams,
3303
3697
  useSession,
3304
3698
  useTaskAnnotation,
3305
3699
  useTaskAnswers,
@@ -3311,6 +3705,7 @@ export {
3311
3705
  useTaskStatusList,
3312
3706
  useTasksPerLocation,
3313
3707
  useTenants,
3708
+ useTheme,
3314
3709
  useTopic,
3315
3710
  useUpdateActiveGroupInProject,
3316
3711
  useUpdateHost,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geowiki/core",
3
- "version": "0.16.9-dev.4",
3
+ "version": "0.16.9-dev.6",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [
@@ -30,23 +30,21 @@
30
30
  "geotiff": "^2.1.3",
31
31
  "xlsx": "^0.18.5",
32
32
  "zustand": "4.5.1",
33
- "@geowiki/cms-proxy": "0.16.9-dev.4",
34
- "@geowiki/api-proxy": "0.16.9-dev.4",
35
- "@geowiki/evoland-api-proxy": "0.16.9-dev.4"
33
+ "@geowiki/api-proxy": "0.16.9-dev.6",
34
+ "@geowiki/cms-proxy": "0.16.9-dev.6",
35
+ "@geowiki/evoland-api-proxy": "0.16.9-dev.6"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@react-leaflet/core": "^2.1.0",
39
39
  "@tanstack/react-query": "^5.22.2",
40
40
  "leaflet": "^1.9.4",
41
- "next": "15.5.3",
42
- "next-localization": "^0.12.0",
43
41
  "@heroicons/react": "^2.1.1",
44
42
  "react": "^18.2.0",
45
43
  "react-dom": "^18.2.0",
46
44
  "react-leaflet": "^4.2.1"
47
45
  },
48
46
  "scripts": {
49
- "build": "tsup src/index.tsx --format cjs,esm --dts --external react --external react-dom --external next",
47
+ "build": "tsup src/index.tsx --format cjs,esm --dts --external react --external react-dom",
50
48
  "lint": "eslint \"src/**/*.ts*\"",
51
49
  "type-check": "tsc --noEmit",
52
50
  "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"