{"version":3,"sources":["../../../src/components/Functions/index.tsx","../../../src/hooks/useChatProvider.ts","../../../src/utils/functions.ts","../../../src/components/Functions/styles.css.ts"],"sourcesContent":["import clsx from \"clsx\";\nimport type React from \"react\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { useChatProvider } from \"../../hooks/useChatProvider\";\nimport {\n  clearPhone,\n  formatPrice,\n  getAddressByCep,\n  maskString,\n} from \"../../utils/functions\";\nimport { container, functionContainer, styledTable } from \"./styles.css\";\n\ninterface FunctionsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst FORMAT_PRICE_VALUES = [\n  89.9,\n  \"89.90\",\n  \"89,90\",\n  89.9999,\n  \"1.000,50\",\n  \"405\",\n];\n\nconst CEP = \"29050705\";\n\nexport const Functions = forwardRef(function Functions(\n  { className, ...props }: FunctionsProps,\n  ref: React.Ref<HTMLDivElement>,\n) {\n  const [viacep, setViacep] = useState<string | null>(null);\n\n  useChatProvider();\n\n  useEffect(() => {\n    const getCeps = async () => {\n      const resViacep = await getAddressByCep(CEP);\n\n      setViacep(JSON.stringify(resViacep, null, 2));\n    };\n\n    getCeps();\n  }, []);\n\n  return (\n    <div ref={ref} className={clsx(container, className)} {...props}>\n      <div className={functionContainer}>\n        <h2>formatPrice(price, options)</h2>\n        <p>\n          Função que formata um valor numérico ou string para o formato de preço\n          brasileiro.\n        </p>\n        <p>\n          <b>price: </b> string | number;\n        </p>\n        <p>\n          <b>options?:</b>\n          {\"{hasPrefix?: boolean , minimumFractionDigits?: number}\"}; default:{\" \"}\n          {\"{hasPrefix: true, minimumFractionDigits: 2}\"}\n        </p>\n        <table className={styledTable}>\n          <thead>\n            <tr>\n              <th colSpan={2}>formatPrice</th>\n            </tr>\n            <tr>\n              <th>Entrada</th>\n              <th>Saída</th>\n            </tr>\n          </thead>\n          <tbody>\n            {FORMAT_PRICE_VALUES.map((value, index) => (\n              <tr key={index}>\n                <td>{typeof value === \"string\" ? `\"${value}\"` : value}</td>\n                <td>{formatPrice(value)}</td>\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n      <div className={functionContainer}>\n        <h2>maskString(string, percent, char)</h2>\n        <p>Função que mascara parte de uma string</p>\n        <p>\n          <b>string: </b> string;\n        </p>\n        <p>\n          <b>percent: </b> number; default: 50\n        </p>\n        <p>\n          <b>char: </b> string; default: \"*\"\n        </p>\n        <table className={styledTable}>\n          <thead>\n            <tr>\n              <th colSpan={2}>maskString</th>\n            </tr>\n            <tr>\n              <th>Entrada</th>\n              <th>Saída</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>{\"String de exemplo\"}</td>\n              <td>{maskString(\"String de exemplo\")}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n\n      <div className={functionContainer}>\n        <h2>getAddressByCep(cep)</h2>\n        <p>Função que retorna um endereço baseado no CEP fornecido</p>\n        <p>\n          <b>cep: </b> string;\n          <b>provider?: 'viacep' | 'brasilapi'. Default: 'viacep'</b>\n        </p>\n        <table className={styledTable}>\n          <thead>\n            <tr>\n              <th colSpan={3}>getAddressByCep</th>\n            </tr>\n            <tr>\n              <th>Provedor</th>\n              <th>Entrada</th>\n              <th>Saída</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>Via cep</td>\n              <td>{CEP}</td>\n              <td style={{ whiteSpace: \"pre\", textAlign: \"left\" }}>{viacep}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n\n      <div className={functionContainer}>\n        <h2>clearPhone(phone)</h2>\n        <p>\n          Função que limpa uma string de telefone e retorna apenas os números\n        </p>\n        <p>\n          <b>phone: </b> string;\n        </p>\n        <table className={styledTable}>\n          <thead>\n            <tr>\n              <th colSpan={2}>maskString</th>\n            </tr>\n            <tr>\n              <th>Entrada</th>\n              <th>Saída</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>{\"(28) 99961-8010\"}</td>\n              <td>{clearPhone(\"(28) 99961-8010\")}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  );\n});\n\nFunctions.displayName = \"Functions\";\n","// @ts-nocheck\n// import { AxiosInstance } from \"axios\";\nimport { useEffect } from \"react\";\n\n// import { useQuery, useQueryClient } from \"@tanstack/react-query\";\n\n// const loadChatWoot = () => {\n//   window.chatwootSettings = {\n//     position: \"right\",\n//     type: \"standard\",\n//     launcherTitle: \"Fale conosco no chat\",\n//   };\n//   var BASE_URL = \"https://chatwoot.takeat.cloud\";\n//   var g = document.createElement(\"script\");\n\n//   g.src = BASE_URL + \"/packs/js/sdk.js\";\n//   g.defer = true;\n//   g.async = true;\n\n//   g.onload = function () {\n//     if (window.chatwootSDK && window.chatwootSDK.run) {\n//       window.chatwootSDK.run({\n//         websiteToken: \"FNDKaRvRLpcvmqVaWZMR19A5\",\n//         baseUrl: BASE_URL,\n//       });\n//     }\n//   };\n\n//   document.body.appendChild(g);\n// };\n\nfunction loadHubspot() {\n  window.hsConversationsSettings = { loadImmediately: false };\n  var s = document.createElement(\"script\");\n\n  s.type = \"text/javascript\";\n  s.id = \"hs-script-loader\";\n  s.async = true;\n  s.defer = true;\n  s.src = \"//js.hs-scripts.com/24373118.js\";\n\n  document.body.appendChild(s);\n}\n\n// const setElementDisplay = (element: HTMLElement, shouldShow: boolean) => {\n//   if (element) {\n//     element.style.setProperty(\n//       \"display\",\n//       shouldShow ? \"unset\" : \"none\",\n//       \"important\"\n//     );\n//   }\n// };\n\nexport const useChatProvider = () => {\n  // const queryClient = useQueryClient();\n  // const { data: chatData } = useQuery({\n  //   queryKey: [\"chat\"],\n  //   queryFn: () => {\n  //     return api.get(\"/public/settings/chat\");\n  //   },\n  //   retry: 0,\n  //   staleTime: Infinity,\n  // });\n\n  // useWebsocket(\"update-chat-provider\", (data: any) => {\n  //   queryClient.setQueryData([\"chat\"], () => {\n  //     return { data: data.value };\n  //   });\n  // });\n\n  // const chatwootBubbleEl = document.getElementById(\"cw-bubble-holder\");\n  // const chatwootWidgetEl = document.getElementById(\"cw-widget-holder\");\n  // const hubspotEl = document.getElementById(\n  //   \"hubspot-messages-iframe-container\"\n  // );\n\n  // useEffect(() => {\n  //   const chatProvider = chatData?.data;\n\n  //   const isChatwoot = chatProvider === \"chatwoot\";\n  //   const isHubspot = chatProvider === \"hubspot\";\n\n  //   setElementDisplay(chatwootBubbleEl, isChatwoot);\n  //   setElementDisplay(chatwootWidgetEl, isChatwoot);\n  //   setElementDisplay(hubspotEl, isHubspot);\n  // }, [chatData?.data, chatwootBubbleEl, chatwootWidgetEl, hubspotEl]);\n\n  useEffect(() => {\n    // loadChatWoot();\n    loadHubspot();\n  }, []);\n};\n","import axios from \"axios\";\nimport {\n  addDays,\n  getDaysInMonth,\n  isAfter,\n  isBefore,\n  set,\n  subDays,\n} from \"date-fns\";\nimport type { MenuItemProps } from \"../components/CollapsableMenu/types\";\n\n// Função para calcular o MDC (Máximo Divisor Comum) usando o Algoritmo de Euclides\nexport const mdc = (a: number, b: number) => {\n  while (b !== 0) {\n    [a, b] = [b, a % b];\n  }\n  return a;\n};\n\n// Função para calcular o MMC (Mínimo Múltiplo Comum) de dois números\nexport const mmc = (a: number, b: number) => {\n  return Math.abs(a * b) / mdc(a, b);\n};\n\n// Função para calcular o MMC de um array de números\nexport const mmcArray = (numbers: number[]) => {\n  return numbers.reduce((acc, num) => mmc(acc, num), 1);\n};\n\ninterface PriceOptions {\n  hasPrefix?: boolean;\n  minimumFractionDigits?: number;\n  maximumFractionDigits?: number;\n}\n// Função para formatar preço\nexport const formatPrice = (price: number | string, options?: PriceOptions) => {\n  if (price === undefined || price === null) return \"\";\n\n  const hasDecimal =\n    price.toString().includes(\".\") || price.toString().includes(\",\");\n\n  if (typeof price === \"string\") {\n    price = price.replace(/\\./g, \"\").replace(\",\", \"\");\n  }\n\n  const parsedPrice =\n    typeof price === \"string\"\n      ? parseFloat(price) / (hasDecimal ? 100 : 1)\n      : price;\n\n  const amount = new Intl.NumberFormat(\"pt-BR\", {\n    style: \"currency\",\n    currency: \"BRL\",\n    ...options,\n  }).format(parsedPrice);\n\n  return options?.hasPrefix === false ? `${amount}`.substring(3) : `${amount}`;\n};\n\n// Função para mascarar uma string\nexport const maskString = (string: string, percent = 50, char = \"*\") => {\n  const length = string.length;\n  const charAmount = length * (percent / 100);\n  const firstAmount = Math.floor((length - charAmount) / 2);\n\n  return (\n    string.substring(0, firstAmount) +\n    char.repeat(charAmount) +\n    string.substring(firstAmount + charAmount)\n  );\n};\n\n// Função para limpar telefone\nexport const clearPhone = (phone: string) => {\n  return phone.replace(/\\D/g, \"\");\n};\n\n// Função para validar um CPF\nexport const validateCPF = (cpf: string) => {\n  if (cpf.length !== 11) {\n    return false;\n  }\n\n  if (cpf.match(/(\\d)\\1{10}/)) {\n    return false;\n  }\n\n  const numbers = cpf.substring(0, 9);\n  const digits = cpf.substring(9);\n\n  const sum = numbers\n    .split(\"\")\n    .map((number, index) => parseInt(number, 10) * (10 - index))\n    .reduce((acc, curr) => acc + curr);\n\n  const firstDigit = (sum * 10) % 11;\n\n  if (firstDigit.toString() !== digits.charAt(0)) {\n    return false;\n  }\n\n  const sum2 = numbers\n    .split(\"\")\n    .map((number, index) => parseInt(number, 10) * (11 - index))\n    .reduce((acc, curr) => acc + curr);\n\n  const secondDigit = (sum2 * 10) % 11;\n\n  return secondDigit.toString() === digits.charAt(1);\n};\n\n// Função para buscar endereço pelo cep\nexport const getAddressByCep = async (cep: string) => {\n  const formattedCep = cep.replace(/(\\.|-)/gi, \"\");\n  try {\n    const { data } = await axios.get(\n      `https://viacep.com.br/ws/${formattedCep}/json/`,\n    );\n\n    return { ...data, provider: \"viacep\" };\n  } catch (_err) {\n    const { data } = await axios.get(\n      `https://brasilapi.com.br/api/cep/v2/${cep}`,\n    );\n\n    return {\n      cep: data.cep,\n      logradouro: data.street,\n      bairro: data.neighborhood,\n      localidade: data.city,\n      uf: data.state,\n      provider: \"brasilapi\",\n      brasilapi_service: data.service,\n    };\n  }\n};\n\n// Função para converter HEX para RGB\nexport const hexToRgb = (hex: string): [number, number, number] => {\n  // Remove o '#' se presente\n  hex = hex.replace(/^#/, \"\");\n\n  // Converter HEX para os componentes RGB\n  const r = parseInt(hex.substring(0, 2), 16);\n  const g = parseInt(hex.substring(2, 4), 16);\n  const b = parseInt(hex.substring(4, 6), 16);\n  return [r, g, b];\n};\n\n// Função para converter RGB para HSB\nexport const rgbToHsb = (r: number, g: number, b: number) => {\n  r /= 255;\n  g /= 255;\n  b /= 255;\n  const v = Math.max(r, g, b),\n    n = v - Math.min(r, g, b);\n  const h =\n    n === 0\n      ? 0\n      : n && v === r\n        ? (g - b) / n\n        : v === g\n          ? 2 + (b - r) / n\n          : 4 + (r - g) / n;\n  return [60 * (h < 0 ? h + 6 : h), v && (n / v) * 100, v * 100];\n};\n\n// Função para converter HEX para HSB\nexport const hexToHsb = (hex: string): [number, number, number] => {\n  // Remove o '#' se presente\n  hex = hex.replace(/^#/, \"\");\n\n  // Converter HEX para RGB\n  const r = parseInt(hex.substring(0, 2), 16) / 255;\n  const g = parseInt(hex.substring(2, 4), 16) / 255;\n  const b = parseInt(hex.substring(4, 6), 16) / 255;\n\n  // Calcular o máximo e mínimo entre R, G, B\n  const max = Math.max(r, g, b),\n    min = Math.min(r, g, b);\n  const delta = max - min;\n\n  // Calcular brilho (B)\n  const bValue = max * 100;\n\n  // Calcular saturação (S)\n  const sValue = max === 0 ? 0 : (delta / max) * 100;\n\n  // Calcular matiz (H)\n  let hValue = 0;\n  if (delta !== 0) {\n    if (max === r) hValue = (g - b) / delta + (g < b ? 6 : 0);\n    else if (max === g) hValue = (b - r) / delta + 2;\n    else hValue = (r - g) / delta + 4;\n\n    hValue = Math.round(hValue * 60);\n  }\n\n  return [hValue, Math.round(sValue), Math.round(bValue)];\n};\n\nexport const rgbToHex = (number: number) =>\n  number.toString(16).padStart(2, \"0\");\n\n// Função para converter HSB para HEX\nconst hsbToHex = (h: number, s: number, b: number): string => {\n  s /= 100;\n  b /= 100;\n\n  const c = b * s;\n  const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n  const m = b - c;\n  let r = 0,\n    g = 0,\n    bl = 0;\n\n  if (0 <= h && h < 60) {\n    r = c;\n    g = x;\n    bl = 0;\n  } else if (60 <= h && h < 120) {\n    r = x;\n    g = c;\n    bl = 0;\n  } else if (120 <= h && h < 180) {\n    r = 0;\n    g = c;\n    bl = x;\n  } else if (180 <= h && h < 240) {\n    r = 0;\n    g = x;\n    bl = c;\n  } else if (240 <= h && h < 300) {\n    r = x;\n    g = 0;\n    bl = c;\n  } else if (300 <= h && h < 360) {\n    r = c;\n    g = 0;\n    bl = x;\n  }\n\n  r = Math.round((r + m) * 255);\n  g = Math.round((g + m) * 255);\n  bl = Math.round((bl + m) * 255);\n\n  return `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(bl)}`;\n};\n\ninterface ColorVariants {\n  lightest: string;\n  lighter: string;\n  light: string;\n  default: string;\n  dark: string;\n  darker: string;\n}\n\n// Cache for color variants with LRU eviction (max 50 entries)\nconst colorVariantsCache = new Map<string, ColorVariants>();\nconst MAX_CACHE_SIZE = 50;\n\nconst cacheColorVariants = (\n  hex: string,\n  variants: ColorVariants,\n): ColorVariants => {\n  if (colorVariantsCache.size >= MAX_CACHE_SIZE) {\n    // Remove oldest entry (first inserted)\n    const firstKey = colorVariantsCache.keys().next().value;\n    colorVariantsCache.delete(firstKey);\n  }\n  colorVariantsCache.set(hex, variants);\n  return variants;\n};\n\n// Função para gerar variações de cor\nexport const generateColorVariants = (hex: string): ColorVariants => {\n  // Check cache first\n  const cached = colorVariantsCache.get(hex);\n  if (cached) {\n    return cached;\n  }\n\n  // Converter de HEX para HSB\n  const [h, s, b] = hexToHsb(hex);\n\n  // Gerar cor mais clara: -20 de S, +4 de L\n  const lightS = Math.max(s - 20, 0); // Garantir que S não seja negativo\n  const lightB = Math.min(b + 4, 100); // Garantir que L não passe de 100\n  const lightColor = hsbToHex(h, lightS, lightB);\n\n  // Gerar cor ainda mais clara: -40 de S, +8 de L\n  const lighterS = Math.max(s - 40, 0); // Garantir que S não seja negativo\n  const lighterB = Math.min(b + 8, 100); // Garantir que L não passe de 100\n  const lighterColor = hsbToHex(h, lighterS, lighterB);\n\n  // Gerar cor ainda mais clara: -60 de S, +12 de L\n  const lightestS = Math.max(s - 60, 0); // Garantir que S não seja negativo\n  const lightestB = Math.min(b + 12, 100); // Garantir que L não passe de 100\n  const lightestColor = hsbToHex(h, lightestS, lightestB);\n\n  // Gerar cor mais escura: +4 de S, -20 de L\n  const darkS = Math.min(s + 4, 100); // Garantir que S não passe de 100\n  const darkB = Math.max(b - 20, 0); // Garantir que L não seja negativo\n  const darkColor = hsbToHex(h, darkS, darkB);\n\n  // Gerar cor ainda mais escura: +8 de S, -40 de L\n  const darkerS = Math.min(s + 8, 100); // Garantir que S não passe de 100\n  const darkerB = Math.max(b - 40, 0); // Garantir que L não seja negativo\n  const darkerColor = hsbToHex(h, darkerS, darkerB);\n\n  const variants: ColorVariants = {\n    lightest: lightestColor,\n    lighter: lighterColor,\n    light: lightColor,\n    default: hex,\n    dark: darkColor,\n    darker: darkerColor,\n  };\n\n  return cacheColorVariants(hex, variants);\n};\n\nexport const getBrighterColor = (hex: string, percentage: number) => {\n  let [r, g, b] = hexToRgb(hex);\n\n  const lightenChannel = (channel: number) =>\n    Math.round(channel + (255 - channel) * (percentage / 100));\n\n  r = lightenChannel(r);\n  g = lightenChannel(g);\n  b = lightenChannel(b);\n\n  return `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(b)}`;\n};\n\n// Função para preencher um array de datas\nexport const fillDaysArray = (arr: Array<Date>) => {\n  const firstDay = arr[0];\n  for (let i = 1; i <= firstDay.getDay(); i++) {\n    const date = subDays(firstDay, i);\n    arr.unshift(date);\n  }\n\n  const multiplier = Math.ceil(arr.length / 7);\n  const left = 7 * multiplier - arr.length;\n  const lastDay = arr[arr.length - 1];\n\n  for (let i = 1; i <= left; i++) {\n    const date = addDays(lastDay, i);\n    arr.push(date);\n  }\n};\n\n// Função para aceitar apenas horas validas numa string e ajustar conforme necessário\nexport const clampTimeString = (\n  timeStr: string,\n  currentDate: Date,\n  type: \"start\" | \"end\",\n  compareDate?: Date,\n) => {\n  const [hourStr, minuteStr] = timeStr.split(\":\");\n\n  let hours = parseInt(hourStr, 10);\n  let minutes = parseInt(minuteStr, 10);\n\n  // Ajuste para valores válidos de horas e minutos\n  hours = Math.max(0, Math.min(23, hours));\n  minutes = Math.max(0, Math.min(59, minutes));\n\n  // Define a data ajustada com partes preservadas de currentDate\n  const adjustedDate = set(currentDate, { hours, minutes });\n\n  // Verifica e aplica restrições\n  if (compareDate && type === \"start\" && isAfter(adjustedDate, compareDate)) {\n    return compareDate;\n  } else if (\n    compareDate &&\n    type === \"end\" &&\n    isBefore(adjustedDate, compareDate)\n  ) {\n    return compareDate;\n  }\n\n  return adjustedDate;\n};\n\n// Função para aceitar apenas datas validas numa string e ajustar conforme necessário\nexport const clampDateString = (\n  dateStr: string,\n  currentDate: Date,\n  type: \"start\" | \"end\",\n  compareDate?: Date,\n) => {\n  const [dayStr, monthStr, yearStr] = dateStr.split(\"/\");\n\n  let day = parseInt(dayStr, 10);\n  let month = parseInt(monthStr, 10) - 1;\n  const year = parseInt(yearStr, 10);\n\n  // Ajuste do mês e do dia\n  month = Math.max(0, Math.min(11, month));\n  const maxDay = getDaysInMonth(new Date(year, month));\n  day = Math.max(1, Math.min(maxDay, day));\n\n  // Define a data ajustada com partes preservadas de currentDate\n  const adjustedDate = set(currentDate, { year, month, date: day });\n\n  if (compareDate && type === \"start\" && isAfter(adjustedDate, compareDate)) {\n    return compareDate;\n  } else if (\n    compareDate &&\n    type === \"end\" &&\n    isBefore(adjustedDate, compareDate)\n  ) {\n    return compareDate;\n  }\n\n  return adjustedDate;\n};\n\nexport function currencyFormatter(\n  value: number,\n  hasPrefix?: boolean,\n\n  minimumFractionDigits = 2,\n  max?: number,\n  min?: number,\n) {\n  if (value === null || value === undefined || Number.isNaN(value)) return \"\";\n\n  if (max && value > max * 100) {\n    value = max * 100;\n  }\n\n  if (min && value < min * 100) {\n    value = min * 100;\n  }\n\n  const amount = new Intl.NumberFormat(\"pt-BR\", {\n    style: \"currency\",\n    currency: \"BRL\",\n    minimumFractionDigits,\n  }).format(value / 10 ** minimumFractionDigits);\n\n  return hasPrefix ? `${amount}` : `${amount}`.substring(3);\n}\n\ntype Complement = {\n  price: string;\n  amount: number;\n};\n\ntype ComplementCategory = {\n  additional: boolean;\n  more_expensive_only: boolean;\n  use_average: boolean;\n  complements: Complement[];\n};\n\nexport type Product = {\n  price: string;\n  amount: number;\n  weight?: number;\n  complement_categories?: ComplementCategory[];\n};\n\nexport const getComplementsPrice = (product: Product) => {\n  const basePrice =\n    parseFloat(product.price) * product.amount * (product.weight || 1);\n\n  const complementsPrice =\n    product.complement_categories?.reduce((catTotal, cat) => {\n      if (!cat.additional) return catTotal;\n\n      if (cat.more_expensive_only) {\n        const highestComplement = cat.complements.reduce(\n          (highest, c) => {\n            return parseFloat(c.price) > parseFloat(highest.price)\n              ? c\n              : highest;\n          },\n          { price: \"0\", amount: 0 },\n        );\n\n        return (\n          catTotal +\n          parseFloat(highestComplement.price) *\n            (highestComplement.amount >= 1 ? 1 : 0) *\n            product.amount\n        );\n      }\n\n      if (cat.use_average) {\n        const totalValue = cat.complements.reduce(\n          (sum, c) => sum + parseFloat(c.price) * c.amount * product.amount,\n          0,\n        );\n        const totalAmount = cat.complements.reduce(\n          (sum, c) => sum + c.amount * product.amount,\n          0,\n        );\n\n        return totalAmount > 0 ? catTotal + totalValue / totalAmount : catTotal;\n      }\n\n      const complementsValue = cat.complements.reduce(\n        (sum, c) => sum + parseFloat(c.price) * c.amount * product.amount,\n        0,\n      );\n\n      return catTotal + complementsValue;\n    }, 0) ?? 0;\n\n  return basePrice + complementsPrice;\n};\n\nexport const formatSearchItems = (\n  menuItems: MenuItemProps[],\n  parentPath = \"\",\n  parentTexts: string[] = [],\n): MenuItemProps[] => {\n  return menuItems\n    .filter((item) => item.condition !== false)\n    .flatMap((item) => {\n      const currentPath = parentPath + (item.path || \"\");\n      const currentTexts = [...parentTexts, item.text];\n\n      if (item.subitems && item.subitems.length > 0) {\n        return formatSearchItems(item.subitems, currentPath, currentTexts);\n      }\n\n      return [\n        {\n          ...item,\n          path: currentPath,\n          searchText: currentTexts.join(\"/\"),\n          key: `${currentPath}|${currentTexts.join(\"/\")}`,\n        },\n      ];\n    });\n};\n\nexport const filterItems = (item: MenuItemProps, search: string) => {\n  return item.searchText?.toLowerCase().includes(search.toLowerCase());\n};\n\nexport const filterSidebarItems = (items: MenuItemProps[]) => {\n  return items\n    .map((item) => {\n      if (item.subitems) {\n        return {\n          ...item,\n          subitems: item.subitems.filter(\n            (subitem) =>\n              (subitem.displayType === \"sidebar\" || !subitem.displayType) &&\n              subitem.condition !== false,\n          ),\n        };\n      }\n      return item;\n    })\n    .filter(\n      (item) =>\n        (item.displayType === \"sidebar\" || !item.displayType) &&\n        item.condition !== false,\n    );\n};\n","import 'src/theme/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-1d247buhV9P19BHL80QBzofjtPMxkEzVvRFuhjQEmUrRlZ8kjy2J6i_15QtiVeNmlppiiKghEmQaK1Nvfa2hJphQv-1m_JjvzKSYEPVf_34S-_bC_ddt5b4KJ__obQep01VdN2631b7nB7XlflZtuTrh-BVoJWxMc29v5Q49sRbidolacBCR01fAQ7FGy7heeD4GviI9xN0CqLbNdOYThuX0asl6BV7FmxVSixTNZ-glaBbTlWwKFbkssFCeCCTNgpbAgXY4SOwAguBAWKRYjhIgxQtgAYLsANx2SZwuLPpKqao6w_S9CqKEiaRWr4FDwf0HkUe0r0iCUDNvMDG8KKhSgGdOo6BYhma7GhNcuizM5VUCbjLS1cHIRC4TYtIbVcjTJBqzQjbk6U6Cn0c4JWUZzHmTL0CH1J0MqPsyKzAahYiipBK4dkcRpCYLYSuwSt7DwOokiBZLKtE7SyisD1MYdNqwOR69AMVcuLolCBp8B72nBBpsaOyNcErVw3BZFiEVqaro1hLFuDbgBGWZbBQCbTfoAGcRxz0KbF9QYowiFBqx8_nqLHJzV8Cv42oB_j6EGJHrHHARs_-iGEFUtxGtDhk-OBaLYY5wStvn_3f9hKKJPx-3CRPc_iy9GRrKnzX4o7xKYzyIP_PXz4cY_FTCN0HgnDx6fo8Q5potDZxHt6dIIHNUWslE3nFCd8iLzvGhJbMJvOLHYQ-q6jZ7Bq6PxiPXiOzadWk0Pf4mp93Jb9NDXbwfBkK8ROvqHlCtN5pgjooSEw6dDphuT0UOMn9DDjBPQA0VJJ6cwTYnrAeK6adPLxPXoowWzmdPJxhl8gPK1wxgSnk481_OLQRXkiuVh0Ahf9ghXiFkLcbovz5tjJhd4kyNqfhh_n-ueVaP_4OvzVlk853h9A2Cno9m5Q-s_enaDSZSvvhqUho3thuav7fDcmjWcHM4KyZX2Zwgr5uO61rMOQviJuf943mxbvt-d1gXdlJS817SpBv_-l2e_Luvv9K-pwTe_wtiykAEdCrw5dWG0OFWaS3CXIuzUIgN-RvDzsJnidIF8D78iuTJsqnwhNggINgQfvExQC4C7DFVnnZbev8HldNHX_t_KduSleE-R4-9MdXlXW5M-Eb9I2QU50l0lH_IfA7HSpbgnOy3oDpNonyLGUA954UKoHrUh2RDHVN12qaZNDJT0myFaPNpCgJE9aeeNYYoZnuAkvrAzv-7KpgSTfE2Q7ytFuPCBPx0qG23nGiEKqjg3fABdit8NVJSfqOMlwq2tZUJqu9ipMo4lJekw9uz3OaGecTt0E8BM0xh0BzPkgQZF4njkdsuW7nZ-eEk7E9urtfDWdjxPkOtL4DABTARKARaQJ8sYUW5yXh47NMGMEXs8y-eWMvOtZJjRh2-p6mh26YNXfzrOADSef7HDdl9matG0zPXidrfAJecR1hywjHaOlFD43jciyLpoJ9ix8shhhR9zWZb2ZkC_CZ9L3n3VOTuu8bfZ5c6wnYEX79tZIV9SuyTGjdZcg2xYgfdNUfbmfQDWtqATCzOLQaRJkuzfIrrncfxxinyDbt3YdB6mbdsem85og1xJBXdUcJ0g73ME3SNbs9k1N6p4uokiV_6yLZryD1znpXvqGUdKxvaHn9jitCJN_z97Md6hNT5h2PbANxzDLen_o1xVOSaVJ-W0Ju8LthnlwHZdwhbWCc1IIBsnDw2zinhV1Brlipem8EC0ji8m71hLl1xi8BtdeFIK75K7DTqSzuJICd1EVhhCCAE8r4PK7su9cX3v5BTbfd26whCsKD5eQBcmRtu8ErtB3brykXoq-wx-IIWhIF4Xg-y7TNg3ElRTki4cXBZAZEbbDkkfuuoJdOei5Qs9t5jNFyVt2PaOnClJLdqmgZ4rd9syugOZQpbRf5iuGO62ar1vos12C_JmXGO6yeoF6qMeaGdrTps1J-9fLCk_qtD2ziJwTQGi314V0sQDtQr6gv2MWyHPoYvf1Mx6UQABJxmGhDLgR35aq4btRv8xR8SUtp6VaoMY83w-yx_nwYV9qyfdkfFM1KwDfkp61kC7o9-zhKtzvixufV-45ye3d3Sy20JGeuzB7uCE97ypiYRhBi7-wFHxDesFVyyK6JCX8UBRBSaRR0pGKZOp-9GJNLQWueDXxAipfu1STcHroe-ZVklSxTLF0FHlCjXLFw1CkCfcbmTmaWJtC8biCeZLIzTK6oHU7N2n-qqgWOiBNSvl5EVvI-CVBjubqgKtBr1KsD3iSmOdOsSDiWUJ-tV4cvPzzGsUCCGJJee5nqYMb4HWWRuHyt4r1HkCSku3mKYUufa_Xyc2D656cmPoeEmRprwtPLrNmenHmvd3IyNLea3ICD3X-kwt1XBjqUj1BzIkG0T2iBDav5nxjIwucndUZSGrel4W6vOLmtPhWsoTLKfHtKxdZ4HpRObqow3cWBbreSLwOd26DXdm8Em9hWzApSGL8j8WCOs0P5nYaH4QXFy7rEjkfSWL0oYhQ-8Uz248LwcvDH2keTTOmy-IND0peVDa7FwcyLydf2j5jApIS8qFQYCMWsxuRjcEr2yzsGjEbSd_2IwGhLizndiETgdf2_IGm0fTgy6xwmhcifqVfROtehvg7-EMzROVXCH4NvzmAmMIKzG8WJAyvw3zFOyRNBCH91wXpcysyv12SPbQu87sFyQOLM7_X8mm3Ah-a_IN-tTzSxGzfFP-jIvKEJFWvhkSa2BynmWkqGuM8M1u4K97nJs21RGAlyJ1NE1MObP3nAoHNZxw4t404__rt29UPgNsXwQzgLTADuLkVWPz2YZ0ZANhZrjYD6Hbsf9IMoPMZyGYA3a590QwAFERlBtB5DEZgpNm5_wkzgMpfIJsBAPE6M4CHHSLssNSYAYLAzTXoEUv3Y8Yk8GDsJ80ARZG7IRxYNgMUBYkwX2CNGcAKXMuBdtdDZgBge73KDKDetf8pM4DaYyCbAQDrgtoMQPdierEKzJsBgC32CjOAct_-Z8wASoeBbAYAbAs6M4Cb22IDa8wAwNZ6pRkgy_xCsWcfMAMURZjPNAMURZwqXAayGaAo0jji-3eGGcAKbF94YN43A1jYc-x7Q00UZ84ufdgMgCMv05AkM4CXp06gyQwyA4Rhmkf8M0VjBrByeoBo2AxgB_TQEAQzgF3QQ42f0HTGcTE9QDRoBogwPWC8ZAbQOQ0AM4DGxgCYAZQb_P-LZgD7uimd_rSbFP_J8f2vtx_rmxV8kZ0BA876OhzffP8LMNI0znbZOKxZgBsnsIRxVJaBeyOFX2T_AD-SqAh0EcwdhrMUcOOEkiLYWHBvpOgL5DLgh7pJMl4D4zWYmMZrYLwGxmswIozXwHgNjNfAeA2M18B4DYzXwHgNblzjNTBeA-M1MF4D4zWYEcB4DYzXwHgNjNfAeA2M18B4DYzXwHgNjNfAeA2M18B4DS4xjNfAeA2M18B4DWbQjNfgP-w1SEmPBa-Bv8BrkBXEL2A_AOQ1iHEW6-DTfy7Snc8pjhRgyGtg41DcDqj0GtieX6Szv3jAyt0i4jcJmy8eMF88YL54wHzxgPnigQvYfPGA-eIBCW2-eMB88YD54gFjBjBmAGMGMGYAYwb4_zQDsO8djBnAmAGMGcCYARaEMGYAYwYwZoD7TGMGuAQwZoAFAYwZwJgBjBnAmAGMGcCYAS40YwYwZgBjBjBmAGMGMGYAYwYwZgBjBjBmAGMGmEM1ZoBrAGMGUNGMGWAG-3_QDPBvr-DT6oiQAAA';\nimport 'src/components/Functions/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX2tsaXhiNjAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IHZhcigtLXNwYWNpbmctbV9fMTRiaHM0djI4KTsKfQouc3R5bGVzX3N0eWxlZFRhYmxlX19rbGl4YjYxIHsKICB3aWR0aDogMTAwJTsKICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwp9Ci5zdHlsZXNfc3R5bGVkVGFibGVfX2tsaXhiNjEgdGggewogIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHNfXzE0YmhzNHYyNik7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3JzLW5ldXRyYWwtbGlnaHRlc3RfXzE0YmhzNHYxNyk7Cn0KLnN0eWxlc19zdHlsZWRUYWJsZV9fa2xpeGI2MSB0ZCB7CiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14c19fMTRiaHM0djI2KTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLnN0eWxlc19mdW5jdGlvbkNvbnRhaW5lcl9fa2xpeGI2MiB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIGdhcDogdmFyKC0tc3BhY2luZy14eHNfXzE0YmhzNHYyNSk7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zX18xNGJoczR2MjcpOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9ycy1uZXV0cmFsLWxpZ2h0X18xNGJoczR2MTkpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tX18xNGJoczR2MmQpOwp9';\nexport var container = 'styles_container__klixb60';\nexport var functionContainer = 'styles_functionContainer__klixb62';\nexport var styledTable = 'styles_styledTable__klixb61';"],"mappings":"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","names":["import_react","axios","Functions","clsx"]}