ywana-core8 0.1.55 → 0.1.56

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.umd.js CHANGED
@@ -3340,6 +3340,68 @@
3340
3340
  }, children));
3341
3341
  };
3342
3342
 
3343
+ /**
3344
+ * Use Hash Page
3345
+ */
3346
+ function useHashPage(defaultPage) {
3347
+ if (defaultPage === void 0) {
3348
+ defaultPage = "home";
3349
+ }
3350
+ var getCurrentPageFromURL = function getCurrentPageFromURL() {
3351
+ var hash = window.location.hash.replace("#", "");
3352
+ return hash || defaultPage;
3353
+ };
3354
+ var _useState = React.useState(getCurrentPageFromURL()),
3355
+ page = _useState[0],
3356
+ setPage = _useState[1];
3357
+ var _useState2 = React.useState([]),
3358
+ history = _useState2[0],
3359
+ setHistory = _useState2[1];
3360
+ var isFirstLoad = React.useRef(true);
3361
+ React.useEffect(function () {
3362
+ var handleHashChange = function handleHashChange() {
3363
+ var newPage = getCurrentPageFromURL();
3364
+ if (!isFirstLoad.current) {
3365
+ setHistory(function (prev) {
3366
+ return [].concat(prev, [page]);
3367
+ }); // Guarda la página anterior
3368
+ } else {
3369
+ isFirstLoad.current = false;
3370
+ }
3371
+ setPage(newPage);
3372
+ };
3373
+ window.addEventListener("hashchange", handleHashChange);
3374
+ return function () {
3375
+ return window.removeEventListener("hashchange", handleHashChange);
3376
+ };
3377
+ }, [page]);
3378
+ var _goto = function _goto(id) {
3379
+ if (page) {
3380
+ setHistory(function (prev) {
3381
+ return [].concat(prev, [page]);
3382
+ });
3383
+ }
3384
+ setPage(id);
3385
+ window.location.hash = id;
3386
+ };
3387
+ var goBack = function goBack() {
3388
+ if (history.length > 0) {
3389
+ var lastPage = history[history.length - 1];
3390
+ setHistory(function (prev) {
3391
+ return prev.slice(0, -1);
3392
+ });
3393
+ setPage(lastPage);
3394
+ window.location.hash = lastPage;
3395
+ }
3396
+ };
3397
+ return {
3398
+ page: page,
3399
+ "goto": _goto,
3400
+ goBack: goBack,
3401
+ history: history
3402
+ };
3403
+ }
3404
+
3343
3405
  /**
3344
3406
  * Site Provider
3345
3407
  */
@@ -3380,30 +3442,10 @@
3380
3442
  var _useState11 = React.useState(),
3381
3443
  breadcrumb = _useState11[0],
3382
3444
  setBreadcrumb = _useState11[1];
3383
- var _useState12 = React.useState([]),
3384
- history = _useState12[0],
3385
- setHistory = _useState12[1];
3386
-
3387
- // 📌 Extraer la página actual desde la URL (por defecto "home")
3388
- var getCurrentPageFromURL = function getCurrentPageFromURL() {
3389
- var path = window.location.pathname.replace("/", "");
3390
- return path || "home";
3391
- };
3392
- var _useState13 = React.useState(getCurrentPageFromURL()),
3393
- page = _useState13[0],
3394
- setPage = _useState13[1];
3395
- React.useEffect(function () {
3396
- // 📌 Detectar cambios en la URL cuando el usuario presiona "Atrás" o "Adelante"
3397
- var handlePopState = function handlePopState(event) {
3398
- var _event$state;
3399
- var previousPage = ((_event$state = event.state) == null ? void 0 : _event$state.page) || "home";
3400
- setPage(previousPage);
3401
- };
3402
- window.addEventListener("popstate", handlePopState);
3403
- return function () {
3404
- return window.removeEventListener("popstate", handlePopState);
3405
- };
3406
- }, []);
3445
+ var _useHashPage = useHashPage(),
3446
+ page = _useHashPage.page,
3447
+ _goto = _useHashPage["goto"],
3448
+ goBack = _useHashPage.goBack;
3407
3449
  var value = {
3408
3450
  lang: lang,
3409
3451
  setLang: setLang,
@@ -3413,15 +3455,6 @@
3413
3455
  var _dictionary$key;
3414
3456
  return (dictionary == null ? void 0 : (_dictionary$key = dictionary[key]) == null ? void 0 : _dictionary$key[lang]) || key;
3415
3457
  }, [lang, dictionary]),
3416
- /*
3417
- translate: (key) => {
3418
- if (!key) return key
3419
- if (dictionary === undefined) return key
3420
- const term = dictionary[key]
3421
- return term ? term[lang] : key
3422
- },
3423
- */
3424
-
3425
3458
  sideNav: sideNav,
3426
3459
  setSideNav: setSideNav,
3427
3460
  showNav: showNav,
@@ -3448,27 +3481,8 @@
3448
3481
  breadcrumb: breadcrumb,
3449
3482
  setBreadcrumb: setBreadcrumb,
3450
3483
  page: page,
3451
- "goto": function goto(id) {
3452
- if (page) {
3453
- setHistory(function (prev) {
3454
- return [].concat(prev, [page]);
3455
- }); // 🔹 Guarda la página actual en el historial antes de cambiar
3456
- }
3457
- setPage(id);
3458
- window.history.pushState({
3459
- page: id
3460
- }, "", "/" + id); // 🔹 Actualiza la URL
3461
- },
3462
- goBack: function goBack() {
3463
- if (history.length > 0) {
3464
- var lastPage = history[history.length - 1];
3465
- setHistory(function (prev) {
3466
- return prev.slice(0, -1);
3467
- }); // 🔹 Elimina la última entrada del historial
3468
- setPage(lastPage); // 🔹 Vuelve a la página anterior
3469
- window.history.back(); // 🔹 Regresa en la navegación del navegador
3470
- }
3471
- },
3484
+ "goto": _goto,
3485
+ goBack: goBack,
3472
3486
  dialog: dialog,
3473
3487
  openDialog: function openDialog(dialog) {
3474
3488
  setDialog(dialog);
@@ -3621,7 +3635,7 @@
3621
3635
  var next = sideNav === 'max' ? 'min' : 'max';
3622
3636
  setSideNav(next);
3623
3637
  }
3624
- var _goto = function _goto(id) {
3638
+ var _goto2 = function _goto2(id) {
3625
3639
  context.setShowNav(false);
3626
3640
  context["goto"](id);
3627
3641
  };
@@ -3659,7 +3673,7 @@
3659
3673
  className: "site-menu-item " + styleItem,
3660
3674
  key: id,
3661
3675
  onClick: function onClick() {
3662
- return _goto(id);
3676
+ return _goto2(id);
3663
3677
  }
3664
3678
  }, /*#__PURE__*/React__default["default"].createElement(Tooltip, {
3665
3679
  text: title,
@@ -3670,7 +3684,7 @@
3670
3684
  icon: icon,
3671
3685
  clickable: true,
3672
3686
  action: function action() {
3673
- return _goto(id);
3687
+ return _goto2(id);
3674
3688
  }
3675
3689
  })), sideNav === 'max' ? /*#__PURE__*/React__default["default"].createElement("label", null, titleTxt) : null);
3676
3690
  }), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -3869,6 +3883,36 @@
3869
3883
  }, children));
3870
3884
  };
3871
3885
 
3886
+ /**
3887
+ * PageLink - Navegación declarativa usando el sistema de hash
3888
+ *
3889
+ * Props:
3890
+ * - page: string → ID de la página a mostrar
3891
+ * - children: ReactNode → contenido visual del enlace
3892
+ * - className: string → clases opcionales
3893
+ * - style: object → estilos en línea opcionales
3894
+ */
3895
+ var PageLink = function PageLink(_ref) {
3896
+ var page = _ref.page,
3897
+ children = _ref.children,
3898
+ _ref$className = _ref.className,
3899
+ className = _ref$className === void 0 ? '' : _ref$className,
3900
+ _ref$style = _ref.style,
3901
+ style = _ref$style === void 0 ? {} : _ref$style;
3902
+ var _useContext = React.useContext(SiteContext),
3903
+ _goto2 = _useContext["goto"];
3904
+ var handleClick = function handleClick(e) {
3905
+ e.preventDefault();
3906
+ _goto2(page);
3907
+ };
3908
+ return /*#__PURE__*/React__default["default"].createElement("a", {
3909
+ href: "#" + page,
3910
+ onClick: handleClick,
3911
+ className: className,
3912
+ style: style
3913
+ }, children);
3914
+ };
3915
+
3872
3916
  /**
3873
3917
  * Admin Change User Password Dialog
3874
3918
  */
@@ -12835,6 +12879,7 @@
12835
12879
  exports.MultiSelector = MultiSelector;
12836
12880
  exports.Page = Page;
12837
12881
  exports.PageContext = PageContext;
12882
+ exports.PageLink = PageLink;
12838
12883
  exports.PageProvider = PageProvider;
12839
12884
  exports.PasswordEditor = PasswordEditor;
12840
12885
  exports.PasswordField = PasswordField;