analytica-frontend-lib 1.1.93 → 1.1.94

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.
Files changed (35) hide show
  1. package/dist/BreadcrumbMenu/breadcrumbStore/index.d.mts +77 -0
  2. package/dist/BreadcrumbMenu/breadcrumbStore/index.d.ts +77 -0
  3. package/dist/BreadcrumbMenu/breadcrumbStore/index.js +146 -0
  4. package/dist/BreadcrumbMenu/breadcrumbStore/index.js.map +1 -0
  5. package/dist/BreadcrumbMenu/breadcrumbStore/index.mjs +120 -0
  6. package/dist/BreadcrumbMenu/breadcrumbStore/index.mjs.map +1 -0
  7. package/dist/BreadcrumbMenu/index.d.mts +31 -0
  8. package/dist/BreadcrumbMenu/index.d.ts +31 -0
  9. package/dist/BreadcrumbMenu/index.js +308 -0
  10. package/dist/BreadcrumbMenu/index.js.map +1 -0
  11. package/dist/BreadcrumbMenu/index.mjs +289 -0
  12. package/dist/BreadcrumbMenu/index.mjs.map +1 -0
  13. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.d.mts +48 -0
  14. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.d.ts +48 -0
  15. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.js +189 -0
  16. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.js.map +1 -0
  17. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.mjs +164 -0
  18. package/dist/BreadcrumbMenu/useBreadcrumbBuilder/index.mjs.map +1 -0
  19. package/dist/BreadcrumbMenu/useUrlParams/index.d.mts +28 -0
  20. package/dist/BreadcrumbMenu/useUrlParams/index.d.ts +28 -0
  21. package/dist/BreadcrumbMenu/useUrlParams/index.js +43 -0
  22. package/dist/BreadcrumbMenu/useUrlParams/index.js.map +1 -0
  23. package/dist/BreadcrumbMenu/useUrlParams/index.mjs +18 -0
  24. package/dist/BreadcrumbMenu/useUrlParams/index.mjs.map +1 -0
  25. package/dist/index.css +3 -0
  26. package/dist/index.css.map +1 -1
  27. package/dist/index.d.mts +4 -0
  28. package/dist/index.d.ts +4 -0
  29. package/dist/index.js +244 -18
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +236 -14
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/styles.css +3 -0
  34. package/dist/styles.css.map +1 -1
  35. package/package.json +2 -1
package/dist/index.mjs CHANGED
@@ -12486,16 +12486,234 @@ var QuizListResultByMateria = ({
12486
12486
  ] });
12487
12487
  };
12488
12488
 
12489
- // src/hooks/useAppInitialization.ts
12489
+ // src/components/BreadcrumbMenu/BreadcrumbMenu.tsx
12490
+ import { useNavigate } from "react-router-dom";
12491
+ import { jsx as jsx53 } from "react/jsx-runtime";
12492
+ var BreadcrumbMenu = ({
12493
+ breadcrumbs,
12494
+ onBreadcrumbClick,
12495
+ className = "!px-0 py-4 flex-wrap w-full"
12496
+ }) => {
12497
+ const navigate = useNavigate();
12498
+ const handleClick = (breadcrumb, index) => {
12499
+ if (onBreadcrumbClick) {
12500
+ onBreadcrumbClick(breadcrumb, index);
12501
+ }
12502
+ navigate(breadcrumb.url);
12503
+ };
12504
+ return /* @__PURE__ */ jsx53(
12505
+ Menu,
12506
+ {
12507
+ value: `breadcrumb-${breadcrumbs.length - 1}`,
12508
+ defaultValue: "breadcrumb-0",
12509
+ variant: "breadcrumb",
12510
+ className,
12511
+ children: /* @__PURE__ */ jsx53(MenuContent, { className: "w-full flex flex-row flex-wrap gap-2 !px-0", children: breadcrumbs.map((breadcrumb, index) => {
12512
+ const isLast = index === breadcrumbs.length - 1;
12513
+ const hasSeparator = !isLast;
12514
+ return /* @__PURE__ */ jsx53(
12515
+ MenuItem,
12516
+ {
12517
+ variant: "breadcrumb",
12518
+ value: `breadcrumb-${index}`,
12519
+ className: "!p-0 whitespace-nowrap",
12520
+ onClick: () => handleClick(breadcrumb, index),
12521
+ separator: hasSeparator,
12522
+ children: breadcrumb.name
12523
+ },
12524
+ breadcrumb.id
12525
+ );
12526
+ }) })
12527
+ }
12528
+ );
12529
+ };
12530
+
12531
+ // src/components/BreadcrumbMenu/useBreadcrumbBuilder.ts
12532
+ import { useEffect as useEffect22 } from "react";
12533
+
12534
+ // src/components/BreadcrumbMenu/breadcrumbStore.ts
12535
+ import { create as create10 } from "zustand";
12536
+ var useBreadcrumbStore = create10((set, get) => ({
12537
+ breadcrumbs: {},
12538
+ setBreadcrumbs: (namespace, items) => {
12539
+ set((state) => ({
12540
+ breadcrumbs: {
12541
+ ...state.breadcrumbs,
12542
+ [namespace]: items
12543
+ }
12544
+ }));
12545
+ },
12546
+ addBreadcrumb: (namespace, item) => {
12547
+ set((state) => {
12548
+ const current = state.breadcrumbs[namespace] || [];
12549
+ return {
12550
+ breadcrumbs: {
12551
+ ...state.breadcrumbs,
12552
+ [namespace]: [...current, item]
12553
+ }
12554
+ };
12555
+ });
12556
+ },
12557
+ updateBreadcrumb: (namespace, itemId, updates) => {
12558
+ set((state) => {
12559
+ const current = state.breadcrumbs[namespace] || [];
12560
+ return {
12561
+ breadcrumbs: {
12562
+ ...state.breadcrumbs,
12563
+ [namespace]: current.map(
12564
+ (item) => item.id === itemId ? { ...item, ...updates } : item
12565
+ )
12566
+ }
12567
+ };
12568
+ });
12569
+ },
12570
+ removeBreadcrumbFrom: (namespace, itemId) => {
12571
+ set((state) => {
12572
+ const current = state.breadcrumbs[namespace] || [];
12573
+ const index = current.findIndex((item) => item.id === itemId);
12574
+ if (index === -1) return state;
12575
+ return {
12576
+ breadcrumbs: {
12577
+ ...state.breadcrumbs,
12578
+ [namespace]: current.slice(0, index)
12579
+ }
12580
+ };
12581
+ });
12582
+ },
12583
+ sliceBreadcrumbs: (namespace, index) => {
12584
+ set((state) => {
12585
+ const current = state.breadcrumbs[namespace] || [];
12586
+ return {
12587
+ breadcrumbs: {
12588
+ ...state.breadcrumbs,
12589
+ [namespace]: current.slice(0, index + 1)
12590
+ }
12591
+ };
12592
+ });
12593
+ },
12594
+ clearBreadcrumbs: (namespace) => {
12595
+ set((state) => {
12596
+ const { [namespace]: _, ...rest } = state.breadcrumbs;
12597
+ return {
12598
+ breadcrumbs: rest
12599
+ };
12600
+ });
12601
+ },
12602
+ getBreadcrumbs: (namespace) => {
12603
+ return get().breadcrumbs[namespace] || [];
12604
+ }
12605
+ }));
12606
+ var useBreadcrumb = (namespace) => {
12607
+ const store = useBreadcrumbStore();
12608
+ const breadcrumbs = store.breadcrumbs[namespace] || [];
12609
+ return {
12610
+ breadcrumbs,
12611
+ /**
12612
+ * Define todos os breadcrumbs de uma vez
12613
+ */
12614
+ setBreadcrumbs: (items) => {
12615
+ store.setBreadcrumbs(namespace, items);
12616
+ },
12617
+ /**
12618
+ * Adiciona um novo breadcrumb ao final
12619
+ */
12620
+ addBreadcrumb: (item) => {
12621
+ store.addBreadcrumb(namespace, item);
12622
+ },
12623
+ /**
12624
+ * Atualiza um breadcrumb existente
12625
+ */
12626
+ updateBreadcrumb: (itemId, updates) => {
12627
+ store.updateBreadcrumb(namespace, itemId, updates);
12628
+ },
12629
+ /**
12630
+ * Remove um breadcrumb e todos os seguintes
12631
+ */
12632
+ removeBreadcrumbFrom: (itemId) => {
12633
+ store.removeBreadcrumbFrom(namespace, itemId);
12634
+ },
12635
+ /**
12636
+ * Mantém apenas os breadcrumbs até o índice especificado (inclusivo)
12637
+ */
12638
+ sliceBreadcrumbs: (index) => {
12639
+ store.sliceBreadcrumbs(namespace, index);
12640
+ },
12641
+ /**
12642
+ * Limpa todos os breadcrumbs
12643
+ */
12644
+ clearBreadcrumbs: () => {
12645
+ store.clearBreadcrumbs(namespace);
12646
+ }
12647
+ };
12648
+ };
12649
+
12650
+ // src/components/BreadcrumbMenu/useBreadcrumbBuilder.ts
12651
+ var isBreadcrumbWithData = (level) => {
12652
+ return "data" in level;
12653
+ };
12654
+ var useBreadcrumbBuilder = (config) => {
12655
+ const { namespace, root, levels } = config;
12656
+ const { breadcrumbs, setBreadcrumbs, sliceBreadcrumbs } = useBreadcrumb(namespace);
12657
+ const levelDependencies = levels.map(
12658
+ (level) => isBreadcrumbWithData(level) ? level.data : null
12659
+ );
12660
+ const levelUrlIds = levels.map((level) => level.urlId);
12661
+ useEffect22(() => {
12662
+ const newBreadcrumbs = [root];
12663
+ const previousIds = [];
12664
+ for (const level of levels) {
12665
+ const { urlId } = level;
12666
+ if (isBreadcrumbWithData(level)) {
12667
+ const { data, getId, getName, getUrl } = level;
12668
+ if (!data) break;
12669
+ const dataId = getId(data);
12670
+ if (urlId === void 0 || dataId !== urlId) break;
12671
+ newBreadcrumbs.push({
12672
+ id: dataId,
12673
+ name: getName(data),
12674
+ url: getUrl(data, previousIds)
12675
+ });
12676
+ previousIds.push(dataId);
12677
+ } else {
12678
+ const { breadcrumb } = level;
12679
+ if (urlId === void 0) break;
12680
+ newBreadcrumbs.push(breadcrumb);
12681
+ previousIds.push(breadcrumb.id);
12682
+ }
12683
+ }
12684
+ setBreadcrumbs(newBreadcrumbs);
12685
+ }, [namespace, ...levelDependencies, ...levelUrlIds, root.id]);
12686
+ return {
12687
+ breadcrumbs,
12688
+ sliceBreadcrumbs
12689
+ };
12690
+ };
12691
+
12692
+ // src/components/BreadcrumbMenu/useUrlParams.ts
12490
12693
  import { useMemo as useMemo7 } from "react";
12694
+ import { useLocation as useLocation3 } from "react-router-dom";
12695
+ var useUrlParams = (config) => {
12696
+ const location = useLocation3();
12697
+ return useMemo7(() => {
12698
+ const segments = location.pathname.split("/").filter(Boolean);
12699
+ const params = {};
12700
+ for (const [key, index] of Object.entries(config)) {
12701
+ params[key] = segments[index];
12702
+ }
12703
+ return params;
12704
+ }, [location.pathname, config]);
12705
+ };
12706
+
12707
+ // src/hooks/useAppInitialization.ts
12708
+ import { useMemo as useMemo8 } from "react";
12491
12709
 
12492
12710
  // src/hooks/useInstitution.ts
12493
- import { useEffect as useEffect22, useState as useState23 } from "react";
12711
+ import { useEffect as useEffect23, useState as useState23 } from "react";
12494
12712
  function useInstitutionId() {
12495
12713
  const [institutionId, setInstitutionId] = useState23(() => {
12496
12714
  return document.querySelector('meta[name="institution-id"]')?.getAttribute("content") ?? null;
12497
12715
  });
12498
- useEffect22(() => {
12716
+ useEffect23(() => {
12499
12717
  const metaTag = document.querySelector('meta[name="institution-id"]');
12500
12718
  if (!metaTag) return;
12501
12719
  const observer = new MutationObserver(() => {
@@ -12512,9 +12730,9 @@ function useInstitutionId() {
12512
12730
  }
12513
12731
 
12514
12732
  // src/store/appStore.ts
12515
- import { create as create10 } from "zustand";
12733
+ import { create as create11 } from "zustand";
12516
12734
  import { createJSONStorage, persist as persist2 } from "zustand/middleware";
12517
- var useAppStore = create10()(
12735
+ var useAppStore = create11()(
12518
12736
  persist2(
12519
12737
  (set, get) => ({
12520
12738
  institutionId: null,
@@ -12558,9 +12776,9 @@ var useAppStore = create10()(
12558
12776
  );
12559
12777
 
12560
12778
  // src/store/authStore.ts
12561
- import { create as create11 } from "zustand";
12779
+ import { create as create12 } from "zustand";
12562
12780
  import { createJSONStorage as createJSONStorage2, persist as persist3 } from "zustand/middleware";
12563
- var useAuthStore = create11()(
12781
+ var useAuthStore = create12()(
12564
12782
  persist3(
12565
12783
  (set, get) => ({
12566
12784
  user: null,
@@ -12662,7 +12880,7 @@ var useAuthStore = create11()(
12662
12880
  function useAppInitialization() {
12663
12881
  const getInstitutionId = useInstitutionId();
12664
12882
  const { initialize, initialized, institutionId } = useAppStore();
12665
- const authFunctions = useMemo7(
12883
+ const authFunctions = useMemo8(
12666
12884
  () => ({
12667
12885
  checkAuth: async () => {
12668
12886
  const { sessionInfo, tokens } = useAuthStore.getState();
@@ -12699,10 +12917,10 @@ function useAppInitialization() {
12699
12917
  }
12700
12918
 
12701
12919
  // src/hooks/useAppContent.ts
12702
- import { useCallback as useCallback7, useEffect as useEffect23, useMemo as useMemo8 } from "react";
12703
- import { useNavigate } from "react-router-dom";
12920
+ import { useCallback as useCallback7, useEffect as useEffect24, useMemo as useMemo9 } from "react";
12921
+ import { useNavigate as useNavigate2 } from "react-router-dom";
12704
12922
  function useAppContent(config) {
12705
- const navigate = useNavigate();
12923
+ const navigate = useNavigate2();
12706
12924
  const { setTokens, setSessionInfo, setSelectedProfile } = useAuthStore();
12707
12925
  const {
12708
12926
  api,
@@ -12749,7 +12967,7 @@ function useAppContent(config) {
12749
12967
  },
12750
12968
  [navigate, onError]
12751
12969
  );
12752
- const urlAuthConfig = useMemo8(
12970
+ const urlAuthConfig = useMemo9(
12753
12971
  () => ({
12754
12972
  setTokens,
12755
12973
  setSessionInfo,
@@ -12775,10 +12993,10 @@ function useAppContent(config) {
12775
12993
  );
12776
12994
  useUrlAuthentication(urlAuthConfig);
12777
12995
  const { sessionInfo } = useAuth();
12778
- const institutionIdToUse = useMemo8(() => {
12996
+ const institutionIdToUse = useMemo9(() => {
12779
12997
  return sessionInfo?.institutionId || getInstitutionId;
12780
12998
  }, [sessionInfo?.institutionId, getInstitutionId]);
12781
- useEffect23(() => {
12999
+ useEffect24(() => {
12782
13000
  if (institutionIdToUse && !initialized) {
12783
13001
  initialize(institutionIdToUse);
12784
13002
  }
@@ -12796,6 +13014,7 @@ export {
12796
13014
  AlternativesList,
12797
13015
  AuthProvider,
12798
13016
  Badge_default as Badge,
13017
+ BreadcrumbMenu,
12799
13018
  Button_default as Button,
12800
13019
  Calendar_default as Calendar,
12801
13020
  CardAccordation,
@@ -12921,6 +13140,8 @@ export {
12921
13140
  useAuth,
12922
13141
  useAuthGuard,
12923
13142
  useAuthStore,
13143
+ useBreadcrumb,
13144
+ useBreadcrumbBuilder,
12924
13145
  useInstitutionId,
12925
13146
  useMobile,
12926
13147
  useQuizStore,
@@ -12929,6 +13150,7 @@ export {
12929
13150
  useThemeStore,
12930
13151
  ToastStore_default as useToastStore,
12931
13152
  useUrlAuthentication,
13153
+ useUrlParams,
12932
13154
  withAuth
12933
13155
  };
12934
13156
  //# sourceMappingURL=index.mjs.map