@semiont/cli 0.4.17 → 0.4.18

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 (85) hide show
  1. package/dist/cli.mjs +8 -8
  2. package/dist/frontend/dist/assets/{CookiePreferences-BDtMuCT2.js → CookiePreferences-ebe4eB-e.js} +2 -2
  3. package/dist/frontend/dist/assets/{CookiePreferences-BDtMuCT2.js.map → CookiePreferences-ebe4eB-e.js.map} +1 -1
  4. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-CuWwI0uw.js → PdfAnnotationCanvas.client-CHDCGQBR-BGx2owZ0.js} +2 -2
  5. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-CuWwI0uw.js.map → PdfAnnotationCanvas.client-CHDCGQBR-BGx2owZ0.js.map} +1 -1
  6. package/dist/frontend/dist/assets/{ToolbarPanels-mrjx6GSA.js → ToolbarPanels-C9r6ZyGY.js} +2 -2
  7. package/dist/frontend/dist/assets/{ToolbarPanels-mrjx6GSA.js.map → ToolbarPanels-C9r6ZyGY.js.map} +1 -1
  8. package/dist/frontend/dist/assets/{client-w-_FzMWW.js → client-8eRsF4aG.js} +2 -2
  9. package/dist/frontend/dist/assets/{client-w-_FzMWW.js.map → client-8eRsF4aG.js.map} +1 -1
  10. package/dist/frontend/dist/assets/{client-Dwyu_mF1.js → client-BwxrodJP.js} +2 -2
  11. package/dist/frontend/dist/assets/{client-Dwyu_mF1.js.map → client-BwxrodJP.js.map} +1 -1
  12. package/dist/frontend/dist/assets/{client-so55bcfy.js → client-D4vbUf7k.js} +2 -2
  13. package/dist/frontend/dist/assets/{client-so55bcfy.js.map → client-D4vbUf7k.js.map} +1 -1
  14. package/dist/frontend/dist/assets/{client-mCvsMrtH.js → client-Zl8uXOB2.js} +2 -2
  15. package/dist/frontend/dist/assets/{client-mCvsMrtH.js.map → client-Zl8uXOB2.js.map} +1 -1
  16. package/dist/frontend/dist/assets/index-DESF7by4.js +161 -0
  17. package/dist/frontend/dist/assets/index-DESF7by4.js.map +1 -0
  18. package/dist/frontend/dist/assets/layout-BInmmVVD.js +2 -0
  19. package/dist/frontend/dist/assets/{layout-Cmn1yGWi.js.map → layout-BInmmVVD.js.map} +1 -1
  20. package/dist/frontend/dist/assets/{layout-CsUwTEip.js → layout-Bc0HvP9q.js} +2 -2
  21. package/dist/frontend/dist/assets/{layout-CsUwTEip.js.map → layout-Bc0HvP9q.js.map} +1 -1
  22. package/dist/frontend/dist/assets/layout-CFCI5ndn.js +2 -0
  23. package/dist/frontend/dist/assets/{layout-DXjUb5pL.js.map → layout-CFCI5ndn.js.map} +1 -1
  24. package/dist/frontend/dist/assets/layout-DvfgC4ds.js +2 -0
  25. package/dist/frontend/dist/assets/{layout-B3hxaRnF.js.map → layout-DvfgC4ds.js.map} +1 -1
  26. package/dist/frontend/dist/assets/{not-found-C46rJTS0.js → not-found-B-h8U0AW.js} +2 -2
  27. package/dist/frontend/dist/assets/{not-found-C46rJTS0.js.map → not-found-B-h8U0AW.js.map} +1 -1
  28. package/dist/frontend/dist/assets/page-4JzRN2Q4.js +2 -0
  29. package/dist/frontend/dist/assets/{page-DWvAfkY1.js.map → page-4JzRN2Q4.js.map} +1 -1
  30. package/dist/frontend/dist/assets/page-B4bD7iN0.js +2 -0
  31. package/dist/frontend/dist/assets/{page-BSaAdGF1.js.map → page-B4bD7iN0.js.map} +1 -1
  32. package/dist/frontend/dist/assets/{page-DlBB3Xru.js → page-BD_lMtdf.js} +2 -2
  33. package/dist/frontend/dist/assets/{page-DlBB3Xru.js.map → page-BD_lMtdf.js.map} +1 -1
  34. package/dist/frontend/dist/assets/{page-DqbPyuN1.js → page-BKt53Kee.js} +2 -2
  35. package/dist/frontend/dist/assets/{page-DqbPyuN1.js.map → page-BKt53Kee.js.map} +1 -1
  36. package/dist/frontend/dist/assets/{page-BCTRI-5h.js → page-BRnMt7o2.js} +2 -2
  37. package/dist/frontend/dist/assets/{page-BCTRI-5h.js.map → page-BRnMt7o2.js.map} +1 -1
  38. package/dist/frontend/dist/assets/{page-DjY64aaC.js → page-BRpbSm6U.js} +2 -2
  39. package/dist/frontend/dist/assets/{page-DjY64aaC.js.map → page-BRpbSm6U.js.map} +1 -1
  40. package/dist/frontend/dist/assets/{page-Df3S4CSz.js → page-BeWKvJpC.js} +2 -2
  41. package/dist/frontend/dist/assets/{page-Df3S4CSz.js.map → page-BeWKvJpC.js.map} +1 -1
  42. package/dist/frontend/dist/assets/{page-DKA-wyMy.js → page-CNftu-l4.js} +2 -2
  43. package/dist/frontend/dist/assets/{page-DKA-wyMy.js.map → page-CNftu-l4.js.map} +1 -1
  44. package/dist/frontend/dist/assets/{page-DhkdSv3o.js → page-CkjHPT8p.js} +2 -2
  45. package/dist/frontend/dist/assets/{page-DhkdSv3o.js.map → page-CkjHPT8p.js.map} +1 -1
  46. package/dist/frontend/dist/assets/{page-sOV813bU.js → page-CnYCXW-A.js} +2 -2
  47. package/dist/frontend/dist/assets/{page-sOV813bU.js.map → page-CnYCXW-A.js.map} +1 -1
  48. package/dist/frontend/dist/assets/page-CwB528Up.js +2 -0
  49. package/dist/frontend/dist/assets/page-CwB528Up.js.map +1 -0
  50. package/dist/frontend/dist/assets/{page-B3Uq31BP.js → page-DFS-DvYi.js} +2 -2
  51. package/dist/frontend/dist/assets/{page-B3Uq31BP.js.map → page-DFS-DvYi.js.map} +1 -1
  52. package/dist/frontend/dist/assets/page-DLQK_cX5.js +2 -0
  53. package/dist/frontend/dist/assets/{page-cHW-gnyq.js.map → page-DLQK_cX5.js.map} +1 -1
  54. package/dist/frontend/dist/assets/{page-C9LRjfKm.js → page-DRQxmzY-.js} +2 -2
  55. package/dist/frontend/dist/assets/{page-C9LRjfKm.js.map → page-DRQxmzY-.js.map} +1 -1
  56. package/dist/frontend/dist/assets/page-EgwcfkeK.js +2 -0
  57. package/dist/frontend/dist/assets/{page-Bs0NV-OR.js.map → page-EgwcfkeK.js.map} +1 -1
  58. package/dist/frontend/dist/assets/{page-DCPEscX2.js → page-hTDMMHds.js} +2 -2
  59. package/dist/frontend/dist/assets/{page-DCPEscX2.js.map → page-hTDMMHds.js.map} +1 -1
  60. package/dist/frontend/dist/assets/page-tm2w2bTu.js +2 -0
  61. package/dist/frontend/dist/assets/{page-Cz0qvcvG.js.map → page-tm2w2bTu.js.map} +1 -1
  62. package/dist/frontend/dist/assets/page-zo4BeIjA.js +2 -0
  63. package/dist/frontend/dist/assets/{page-jAWX9Yq4.js.map → page-zo4BeIjA.js.map} +1 -1
  64. package/dist/frontend/dist/assets/{privacy-BCxizJzS.js → privacy-DS6wXZXA.js} +2 -2
  65. package/dist/frontend/dist/assets/{privacy-BCxizJzS.js.map → privacy-DS6wXZXA.js.map} +1 -1
  66. package/dist/frontend/dist/assets/{routing-C43HVxNw.js → routing-DDJ3KSPT.js} +2 -2
  67. package/dist/frontend/dist/assets/{routing-C43HVxNw.js.map → routing-DDJ3KSPT.js.map} +1 -1
  68. package/dist/frontend/dist/assets/{routing-swMLj8Z8.js → routing-NOxgO9NV.js} +2 -2
  69. package/dist/frontend/dist/assets/{routing-swMLj8Z8.js.map → routing-NOxgO9NV.js.map} +1 -1
  70. package/dist/frontend/dist/index.html +1 -1
  71. package/dist/frontend/package.json +1 -1
  72. package/package.json +7 -7
  73. package/dist/frontend/dist/assets/index-CqzrFNnV.js +0 -159
  74. package/dist/frontend/dist/assets/index-CqzrFNnV.js.map +0 -1
  75. package/dist/frontend/dist/assets/layout-B3hxaRnF.js +0 -2
  76. package/dist/frontend/dist/assets/layout-Cmn1yGWi.js +0 -2
  77. package/dist/frontend/dist/assets/layout-DXjUb5pL.js +0 -2
  78. package/dist/frontend/dist/assets/page-BSaAdGF1.js +0 -2
  79. package/dist/frontend/dist/assets/page-BjvkLuU3.js +0 -2
  80. package/dist/frontend/dist/assets/page-BjvkLuU3.js.map +0 -1
  81. package/dist/frontend/dist/assets/page-Bs0NV-OR.js +0 -2
  82. package/dist/frontend/dist/assets/page-Cz0qvcvG.js +0 -2
  83. package/dist/frontend/dist/assets/page-DWvAfkY1.js +0 -2
  84. package/dist/frontend/dist/assets/page-cHW-gnyq.js +0 -2
  85. package/dist/frontend/dist/assets/page-jAWX9Yq4.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"page-DhkdSv3o.js","sources":["../../src/app/[locale]/privacy/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function PrivacyPolicyPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Privacy.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`Navigation.${k}`, p as any) as string;\n const { t: _tHome } = useTranslation();\n const tHome = (k: string, p?: Record<string, unknown>) => _tHome(`Home.${k}`, p as any) as string;\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">{t('pageTitle')}</h1>\n </header>\n\n <article className=\"semiont-static-article\">\n <section>\n <h2>{t('introTitle')}</h2>\n {t('intro').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </section>\n\n <section>\n <h2>{t('infoCollectTitle')}</h2>\n\n <h3>{t('personalInfoTitle')}</h3>\n <ul>\n {t('personalInfo').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('autoCollectTitle')}</h3>\n <ul>\n {t('autoCollect').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('howWeUseTitle')}</h2>\n <ul>\n {t('howWeUse').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('cookiePolicyTitle')}</h2>\n <p>\n {t('cookiePolicyIntro')}\n </p>\n\n <h3>{t('cookieCategoriesTitle')}</h3>\n\n <div className=\"semiont-static-cookie-grid\">\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('necessaryCookiesTitle')}</h4>\n {t('necessaryCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('analyticsCookiesTitle')}</h4>\n {t('analyticsCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('marketingCookiesTitle')}</h4>\n {t('marketingCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('preferenceCookiesTitle')}</h4>\n {t('preferenceCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n </div>\n </section>\n\n <section>\n <h2>{t('yourRightsTitle')}</h2>\n\n <h3>{t('gdprRightsTitle')}</h3>\n <ul>\n {t('gdprRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('ccpaRightsTitle')}</h3>\n <ul>\n {t('ccpaRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('dataSecurityTitle')}</h2>\n {t('dataSecurity').split('\\n\\n').map((block, i) => {\n if (i === 0) {\n return (\n <p key={i}>\n {block}\n </p>\n );\n }\n return (\n <ul key={i}>\n {block.split('\\n').map((item, j) => (\n <li key={j}>{item}</li>\n ))}\n </ul>\n );\n })}\n </section>\n\n <section>\n <h2>{t('dataRetentionTitle')}</h2>\n <p>\n {t('dataRetention')}\n </p>\n </section>\n\n <section>\n <h2>{t('internationalTransfersTitle')}</h2>\n <p>\n {t('internationalTransfers')}\n </p>\n </section>\n\n <section>\n <h2>{t('contactTitle')}</h2>\n <p>\n {t('contactIntro')}\n </p>\n <div className=\"semiont-static-info-box\">\n <p>\n <strong>{t('contactEmail')}</strong> privacy@semiont.com<br />\n <strong>{t('contactAddress')}</strong> [Your Company Address]\n </p>\n </div>\n </section>\n\n <section>\n <h2>{t('updatesTitle')}</h2>\n <p>\n {t('updates')}\n </p>\n <footer className=\"semiont-static-footer\">\n <p>\n <strong>{t('lastUpdated', { date: new Date().toLocaleDateString() })}</strong>\n </p>\n </footer>\n </section>\n </article>\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["PrivacyPolicyPage","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","para","item","block","j"],"mappings":"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"}
1
+ {"version":3,"file":"page-CkjHPT8p.js","sources":["../../src/app/[locale]/privacy/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function PrivacyPolicyPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Privacy.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`Navigation.${k}`, p as any) as string;\n const { t: _tHome } = useTranslation();\n const tHome = (k: string, p?: Record<string, unknown>) => _tHome(`Home.${k}`, p as any) as string;\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">{t('pageTitle')}</h1>\n </header>\n\n <article className=\"semiont-static-article\">\n <section>\n <h2>{t('introTitle')}</h2>\n {t('intro').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </section>\n\n <section>\n <h2>{t('infoCollectTitle')}</h2>\n\n <h3>{t('personalInfoTitle')}</h3>\n <ul>\n {t('personalInfo').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('autoCollectTitle')}</h3>\n <ul>\n {t('autoCollect').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('howWeUseTitle')}</h2>\n <ul>\n {t('howWeUse').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('cookiePolicyTitle')}</h2>\n <p>\n {t('cookiePolicyIntro')}\n </p>\n\n <h3>{t('cookieCategoriesTitle')}</h3>\n\n <div className=\"semiont-static-cookie-grid\">\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('necessaryCookiesTitle')}</h4>\n {t('necessaryCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('analyticsCookiesTitle')}</h4>\n {t('analyticsCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('marketingCookiesTitle')}</h4>\n {t('marketingCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('preferenceCookiesTitle')}</h4>\n {t('preferenceCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n </div>\n </section>\n\n <section>\n <h2>{t('yourRightsTitle')}</h2>\n\n <h3>{t('gdprRightsTitle')}</h3>\n <ul>\n {t('gdprRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('ccpaRightsTitle')}</h3>\n <ul>\n {t('ccpaRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('dataSecurityTitle')}</h2>\n {t('dataSecurity').split('\\n\\n').map((block, i) => {\n if (i === 0) {\n return (\n <p key={i}>\n {block}\n </p>\n );\n }\n return (\n <ul key={i}>\n {block.split('\\n').map((item, j) => (\n <li key={j}>{item}</li>\n ))}\n </ul>\n );\n })}\n </section>\n\n <section>\n <h2>{t('dataRetentionTitle')}</h2>\n <p>\n {t('dataRetention')}\n </p>\n </section>\n\n <section>\n <h2>{t('internationalTransfersTitle')}</h2>\n <p>\n {t('internationalTransfers')}\n </p>\n </section>\n\n <section>\n <h2>{t('contactTitle')}</h2>\n <p>\n {t('contactIntro')}\n </p>\n <div className=\"semiont-static-info-box\">\n <p>\n <strong>{t('contactEmail')}</strong> privacy@semiont.com<br />\n <strong>{t('contactAddress')}</strong> [Your Company Address]\n </p>\n </div>\n </section>\n\n <section>\n <h2>{t('updatesTitle')}</h2>\n <p>\n {t('updates')}\n </p>\n <footer className=\"semiont-static-footer\">\n <p>\n <strong>{t('lastUpdated', { date: new Date().toLocaleDateString() })}</strong>\n </p>\n </footer>\n </section>\n </article>\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["PrivacyPolicyPage","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","para","item","block","j"],"mappings":"6WAOA,SAAwBA,GAAoB,CAC1C,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAC3E,CAAE,EAAGC,CAAA,EAAaJ,EAAA,EAClBK,EAAU,CAACH,EAAWC,IAAgCC,EAAS,UAAUF,CAAC,GAAIC,CAAQ,EACtF,CAAE,EAAGG,CAAA,EAAUN,EAAA,EACfO,EAAO,CAACL,EAAWC,IAAgCG,EAAM,cAAcJ,CAAC,GAAIC,CAAQ,EACpF,CAAE,EAAGK,CAAA,EAAWR,EAAA,EAChBS,EAAQ,CAACP,EAAWC,IAAgCK,EAAO,QAAQN,CAAC,GAAIC,CAAQ,EAChFO,EAAkBC,EAAAA,WAAWC,CAAwB,EAE3D,OACEC,EAAAA,IAACC,EAAA,CACC,KAAMC,EACN,OAAAC,EACA,EAAGX,EACH,KAAAE,EACA,MAAAE,EACA,kBAAAQ,EACC,IAAIP,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,EAChF,UAAU,sBAEV,eAAC,MAAA,CAAI,UAAU,2BACb,SAAAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAL,EAAAA,IAAC,SAAA,CAAO,UAAU,wBAChB,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,uBAAwB,SAAAZ,EAAE,WAAW,CAAA,CAAE,EACvD,EAEAiB,EAAAA,KAAC,UAAA,CAAQ,UAAU,yBACjB,SAAA,CAAAA,OAAC,UAAA,CACC,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,YAAY,CAAA,CAAE,EACpBA,EAAE,OAAO,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACkB,EAAM,IACnCN,EAAAA,IAAC,IAAA,CACE,SAAAM,CAAA,EADK,CAER,CACD,CAAA,EACH,SAEC,UAAA,CACC,SAAA,CAAAN,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,kBAAkB,CAAA,CAAE,EAE3BY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,mBAAmB,CAAA,CAAE,QAC3B,KAAA,CACE,SAAAA,EAAE,cAAc,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACmB,EAAM,IACxCP,EAAAA,IAAC,MAAY,SAAAO,CAAA,EAAJ,CAAS,CACnB,EACH,EAEAP,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,kBAAkB,CAAA,CAAE,QAC1B,KAAA,CACE,SAAAA,EAAE,aAAa,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACmB,EAAM,IACvCP,EAAAA,IAAC,MAAY,SAAAO,CAAA,EAAJ,CAAS,CACnB,CAAA,CACH,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,eAAe,CAAA,CAAE,QACvB,KAAA,CACE,SAAAA,EAAE,UAAU,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACmB,EAAM,IACpCP,EAAAA,IAAC,MAAY,SAAAO,CAAA,EAAJ,CAAS,CACnB,CAAA,CACH,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,mBAAmB,CAAA,CAAE,EAC5BY,EAAAA,IAAC,IAAA,CACE,SAAAZ,EAAE,mBAAmB,CAAA,CACxB,EAEAY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,uBAAuB,CAAA,CAAE,EAEhCiB,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,uBAAuB,CAAA,CAAE,EAC/BA,EAAE,kBAAkB,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACkB,EAAM,IAC9CN,EAAAA,IAAC,IAAA,CACE,SAAAM,CAAA,EADK,CAER,CACD,CAAA,EACH,EAEAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,uBAAuB,CAAA,CAAE,EAC/BA,EAAE,kBAAkB,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACkB,EAAM,IAC9CN,EAAAA,IAAC,IAAA,CACE,SAAAM,CAAA,EADK,CAER,CACD,CAAA,EACH,EAEAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,uBAAuB,CAAA,CAAE,EAC/BA,EAAE,kBAAkB,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACkB,EAAM,IAC9CN,EAAAA,IAAC,IAAA,CACE,SAAAM,CAAA,EADK,CAER,CACD,CAAA,EACH,EAEAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,wBAAwB,CAAA,CAAE,EAChCA,EAAE,mBAAmB,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACkB,EAAM,IAC/CN,EAAAA,IAAC,IAAA,CACE,SAAAM,CAAA,EADK,CAER,CACD,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAN,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,iBAAiB,CAAA,CAAE,EAE1BY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,iBAAiB,CAAA,CAAE,QACzB,KAAA,CACE,SAAAA,EAAE,YAAY,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACmB,EAAM,IACtCP,EAAAA,IAAC,MAAY,SAAAO,CAAA,EAAJ,CAAS,CACnB,EACH,EAEAP,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,iBAAiB,CAAA,CAAE,QACzB,KAAA,CACE,SAAAA,EAAE,YAAY,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,CAACmB,EAAM,IACtCP,EAAAA,IAAC,MAAY,SAAAO,CAAA,EAAJ,CAAS,CACnB,CAAA,CACH,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,mBAAmB,CAAA,CAAE,EAC3BA,EAAE,cAAc,EAAE,MAAM;AAAA;AAAA,CAAM,EAAE,IAAI,CAACoB,EAAO,IACvC,IAAM,EAENR,EAAAA,IAAC,IAAA,CACE,SAAAQ,CAAA,EADK,CAER,QAID,KAAA,CACE,SAAAA,EAAM,MAAM;AAAA,CAAI,EAAE,IAAI,CAACD,EAAME,UAC3B,KAAA,CAAY,SAAAF,CAAA,EAAJE,CAAS,CACnB,GAHM,CAIT,CAEH,CAAA,EACH,SAEC,UAAA,CACC,SAAA,CAAAT,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,oBAAoB,CAAA,CAAE,EAC7BY,EAAAA,IAAC,IAAA,CACE,SAAAZ,EAAE,eAAe,CAAA,CACpB,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,6BAA6B,CAAA,CAAE,EACtCY,EAAAA,IAAC,IAAA,CACE,SAAAZ,EAAE,wBAAwB,CAAA,CAC7B,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,cAAc,CAAA,CAAE,EACvBY,EAAAA,IAAC,IAAA,CACE,SAAAZ,EAAE,cAAc,CAAA,CACnB,EACAY,MAAC,MAAA,CAAI,UAAU,0BACb,gBAAC,IAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,SAAA,CAAQ,SAAAZ,EAAE,cAAc,CAAA,CAAE,EAAS,6BAAqB,KAAA,EAAG,EAC5DY,EAAAA,IAAC,SAAA,CAAQ,SAAAZ,EAAE,gBAAgB,CAAA,CAAE,EAAS,yBAAA,CAAA,CACxC,CAAA,CACF,CAAA,EACF,SAEC,UAAA,CACC,SAAA,CAAAY,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAE,cAAc,CAAA,CAAE,EACvBY,EAAAA,IAAC,IAAA,CACE,SAAAZ,EAAE,SAAS,CAAA,CACd,EACAY,EAAAA,IAAC,UAAO,UAAU,wBAChB,eAAC,IAAA,CACC,SAAAA,EAAAA,IAAC,UAAQ,SAAAZ,EAAE,cAAe,CAAE,KAAM,IAAI,OAAO,mBAAA,EAAsB,CAAA,CAAE,EACvE,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAGN"}
@@ -1,2 +1,2 @@
1
- import{j as t}from"./query-B6BuIB0M.js";import{r as a}from"./vendor-DJo4KD8w.js";import{u as l}from"./routing-C43HVxNw.js";import{u as m}from"./i18n-BbpF47i1.js";import"./index-CqzrFNnV.js";function g(){const{t:c}=m(),s=(e,i)=>c(`Sidebar.${e}`,i),r=l(),[o,n]=a.useState(!0);return a.useEffect(()=>{const e=localStorage.getItem("lastViewedDocumentId");e?r.replace(`/know/resource/${e}`):r.replace("/know/discover"),n(!1)},[r]),o?t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("loading")})}):t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("redirecting")})})}export{g as default};
2
- //# sourceMappingURL=page-sOV813bU.js.map
1
+ import{j as t}from"./query-B6BuIB0M.js";import{r as a}from"./vendor-DJo4KD8w.js";import{u as l}from"./routing-DDJ3KSPT.js";import{u as m}from"./i18n-BbpF47i1.js";import"./index-DESF7by4.js";function g(){const{t:c}=m(),s=(e,i)=>c(`Sidebar.${e}`,i),r=l(),[o,n]=a.useState(!0);return a.useEffect(()=>{const e=localStorage.getItem("lastViewedDocumentId");e?r.replace(`/know/resource/${e}`):r.replace("/know/discover"),n(!1)},[r]),o?t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("loading")})}):t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("redirecting")})})}export{g as default};
2
+ //# sourceMappingURL=page-CnYCXW-A.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-sOV813bU.js","sources":["../../src/app/[locale]/know/page.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\n\nexport default function KnowledgePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const router = useRouter();\n const [checking, setChecking] = useState(true);\n\n useEffect(() => {\n // Check if there's a last viewed document\n const lastDocumentId = localStorage.getItem('lastViewedDocumentId');\n \n if (lastDocumentId) {\n // If there's a last viewed document, go to it\n router.replace(`/know/resource/${lastDocumentId}`);\n } else {\n // Otherwise, go to Discover\n router.replace('/know/discover');\n }\n \n setChecking(false);\n }, [router]);\n\n if (checking) {\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('loading')}</p>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('redirecting')}</p>\n </div>\n );\n}"],"names":["KnowledgePage","_t","useTranslation","t","k","p","router","useRouter","checking","setChecking","useState","useEffect","lastDocumentId","jsx"],"mappings":"8LAIA,SAAwBA,GAAgB,CACtC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAC3EC,EAASC,EAAA,EACT,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAI,EAiB7C,OAfAC,EAAAA,UAAU,IAAM,CAEd,MAAMC,EAAiB,aAAa,QAAQ,sBAAsB,EAE9DA,EAEFN,EAAO,QAAQ,kBAAkBM,CAAc,EAAE,EAGjDN,EAAO,QAAQ,gBAAgB,EAGjCG,EAAY,EAAK,CACnB,EAAG,CAACH,CAAM,CAAC,EAEPE,EAEAK,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,SAAS,CAAA,CAAE,EAChE,EAKFU,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,aAAa,CAAA,CAAE,EACpE,CAEJ"}
1
+ {"version":3,"file":"page-CnYCXW-A.js","sources":["../../src/app/[locale]/know/page.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\n\nexport default function KnowledgePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const router = useRouter();\n const [checking, setChecking] = useState(true);\n\n useEffect(() => {\n // Check if there's a last viewed document\n const lastDocumentId = localStorage.getItem('lastViewedDocumentId');\n \n if (lastDocumentId) {\n // If there's a last viewed document, go to it\n router.replace(`/know/resource/${lastDocumentId}`);\n } else {\n // Otherwise, go to Discover\n router.replace('/know/discover');\n }\n \n setChecking(false);\n }, [router]);\n\n if (checking) {\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('loading')}</p>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('redirecting')}</p>\n </div>\n );\n}"],"names":["KnowledgePage","_t","useTranslation","t","k","p","router","useRouter","checking","setChecking","useState","useEffect","lastDocumentId","jsx"],"mappings":"8LAIA,SAAwBA,GAAgB,CACtC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAC3EC,EAASC,EAAA,EACT,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAI,EAiB7C,OAfAC,EAAAA,UAAU,IAAM,CAEd,MAAMC,EAAiB,aAAa,QAAQ,sBAAsB,EAE9DA,EAEFN,EAAO,QAAQ,kBAAkBM,CAAc,EAAE,EAGjDN,EAAO,QAAQ,gBAAgB,EAGjCG,EAAY,EAAK,CACnB,EAAG,CAACH,CAAM,CAAC,EAEPE,EAEAK,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,SAAS,CAAA,CAAE,EAChE,EAKFU,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,aAAa,CAAA,CAAE,EACpE,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as L}from"./query-B6BuIB0M.js";import{r as n}from"./vendor-DJo4KD8w.js";import{u as N}from"./routing-DDJ3KSPT.js";import{e as k,f as x,g as A,h as Q,i as j,j as F,k as I,l as S,m as l,R as $}from"./index-DESF7by4.js";import{T as D}from"./ToolbarPanels-C9r6ZyGY.js";import{u as K}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";const W=20;function J(){const{t:m}=K(),e=(s,B)=>m(`Discover.${s}`,B),c=N(),h=k(),{activePanel:d}=x(),{theme:_,setTheme:i,resolvedTheme:g}=A(),{showLineNumbers:p,toggleLineNumbers:u}=Q(),y=n.useCallback(({theme:s})=>{i(s)},[i]),R=n.useCallback(()=>{u()},[u]);j({"settings:theme-changed":y,"settings:line-numbers-toggled":R});const T=F(),b=I(),{data:r,isLoading:f}=T.list.useQuery({limit:10,archived:!1}),{data:a}=b.list.useQuery(),[o]=n.useState(()=>S(s=>h.browse.resources({search:s,limit:W})));n.useEffect(()=>()=>o.dispose(),[o]);const v=l(o.query$)??"",t=l(o.state$),P=(t==null?void 0:t.results)??[],C=(t==null?void 0:t.isSearching)??!1,E=(r==null?void 0:r.resources)||[],w=(a==null?void 0:a.entityTypes)||[];return L.jsx($,{recentDocuments:E,searchDocuments:P,entityTypes:w,isLoadingRecent:f,isSearching:C,searchQuery:v,onSearchQueryChange:o.setQuery,theme:g,showLineNumbers:p,activePanel:d,onNavigateToResource:s=>{c.push(`/know/resource/${encodeURIComponent(s)}`)},onNavigateToCompose:()=>{c.push("/know/compose")},translations:{title:e("title"),subtitle:e("subtitle"),searchPlaceholder:e("searchPlaceholder"),searchButton:e("searchButton"),searching:e("searching"),filterByEntityType:e("filterByEntityType"),all:e("all"),recentResources:e("recentResources"),searchResults:s=>e("searchResults",{count:s}),documentsTaggedWith:s=>e("documentsTaggedWith",{entityType:s}),noResultsFound:s=>e("noResultsFound",{query:s}),noResourcesAvailable:e("noResourcesAvailable"),composeFirstResource:e("composeFirstResource"),archived:e("archived"),created:e("created"),loadingKnowledgeBase:e("loadingKnowledgeBase")},ToolbarPanels:D})}export{J as default};
2
+ //# sourceMappingURL=page-CwB528Up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-CwB528Up.js","sources":["../../src/app/[locale]/know/discover/page.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Resource Discovery Page - Thin Next.js wrapper\n *\n * Handles Next.js-specific concerns (routing, data loading, hooks) and\n * delegates rendering to the pure React ResourceDiscoveryPage component.\n *\n * Search is wired through createSearchPipeline (pure RxJS): the pipeline is\n * created once per mount and held in useState. The component pushes typed\n * input to setQuery and reads results via useObservable.\n */\n\nimport { useEffect, useState, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\nimport {\n useResources,\n useEntityTypes,\n useTheme,\n usePanelBrowse,\n useLineNumbers,\n useEventSubscriptions,\n useObservable,\n useApiClient,\n createSearchPipeline,\n ResourceDiscoveryPage,\n} from '@semiont/react-ui';\nimport type { components } from '@semiont/core';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\n\ntype ResourceDescriptor = components['schemas']['ResourceDescriptor'];\n\nconst SEARCH_LIMIT = 20;\n\nexport default function DiscoverPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Discover.${k}`, p as any) as string;\n const router = useRouter();\n const semiont = useApiClient();\n\n // Toolbar and settings state\n const { activePanel } = usePanelBrowse();\n const { theme, setTheme, resolvedTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n const handleThemeChanged = useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => {\n setTheme(theme);\n }, [setTheme]);\n\n const handleLineNumbersToggled = useCallback(() => {\n toggleLineNumbers();\n }, [toggleLineNumbers]);\n\n useEventSubscriptions({\n 'settings:theme-changed': handleThemeChanged,\n 'settings:line-numbers-toggled': handleLineNumbersToggled,\n });\n\n // Recent documents and entity types via React Query — these aren't\n // pipeline-building, they're plain reads, so they stay on React Query.\n const resources = useResources();\n const entityTypesAPI = useEntityTypes();\n const { data: recentDocsData, isLoading: isLoadingRecent } = resources.list.useQuery(\n { limit: 10, archived: false }\n );\n const { data: entityTypesData } = entityTypesAPI.list.useQuery();\n\n // ── Search pipeline ─────────────────────────────────────────────────────\n const [pipeline] = useState(() =>\n createSearchPipeline<ResourceDescriptor>((q) =>\n semiont.browse.resources({ search: q, limit: SEARCH_LIMIT })\n )\n );\n useEffect(() => () => pipeline.dispose(), [pipeline]);\n\n const searchQuery = useObservable(pipeline.query$) ?? '';\n const searchState = useObservable(pipeline.state$);\n const searchDocuments = searchState?.results ?? [];\n const isSearching = searchState?.isSearching ?? false;\n\n const recentDocuments = recentDocsData?.resources || [];\n const entityTypes = entityTypesData?.entityTypes || [];\n\n return (\n <ResourceDiscoveryPage\n recentDocuments={recentDocuments}\n searchDocuments={searchDocuments}\n entityTypes={entityTypes}\n isLoadingRecent={isLoadingRecent}\n isSearching={isSearching}\n searchQuery={searchQuery}\n onSearchQueryChange={pipeline.setQuery}\n theme={resolvedTheme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n onNavigateToResource={(resourceId) => {\n router.push(`/know/resource/${encodeURIComponent(resourceId)}`);\n }}\n onNavigateToCompose={() => {\n router.push('/know/compose');\n }}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n searchPlaceholder: t('searchPlaceholder'),\n searchButton: t('searchButton'),\n searching: t('searching'),\n filterByEntityType: t('filterByEntityType'),\n all: t('all'),\n recentResources: t('recentResources'),\n searchResults: (count: number) => t('searchResults', { count }),\n documentsTaggedWith: (entityType: string) => t('documentsTaggedWith', { entityType }),\n noResultsFound: (query: string) => t('noResultsFound', { query }),\n noResourcesAvailable: t('noResourcesAvailable'),\n composeFirstResource: t('composeFirstResource'),\n archived: t('archived'),\n created: t('created'),\n loadingKnowledgeBase: t('loadingKnowledgeBase'),\n }}\n ToolbarPanels={ToolbarPanels}\n />\n );\n}\n"],"names":["SEARCH_LIMIT","DiscoverPage","_t","useTranslation","t","k","p","router","useRouter","semiont","useApiClient","activePanel","usePanelBrowse","theme","setTheme","resolvedTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","handleThemeChanged","useCallback","handleLineNumbersToggled","useEventSubscriptions","resources","useResources","entityTypesAPI","useEntityTypes","recentDocsData","isLoadingRecent","entityTypesData","pipeline","useState","createSearchPipeline","q","useEffect","searchQuery","useObservable","searchState","searchDocuments","isSearching","recentDocuments","entityTypes","jsx","ResourceDiscoveryPage","resourceId","count","entityType","query","ToolbarPanels"],"mappings":"yVAiCA,MAAMA,EAAe,GAErB,SAAwBC,GAAe,CACrC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,YAAYG,CAAC,GAAIC,CAAQ,EAC5EC,EAASC,EAAA,EACTC,EAAUC,EAAA,EAGV,CAAE,YAAAC,CAAA,EAAgBC,EAAA,EAClB,CAAE,MAAAC,EAAO,SAAAC,EAAU,cAAAC,CAAA,EAAkBC,EAAA,EACrC,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,EAAA,EAEzCC,EAAqBC,EAAAA,YAAY,CAAC,CAAE,MAAAR,KAAoD,CAC5FC,EAASD,CAAK,CAChB,EAAG,CAACC,CAAQ,CAAC,EAEPQ,EAA2BD,EAAAA,YAAY,IAAM,CACjDH,EAAA,CACF,EAAG,CAACA,CAAiB,CAAC,EAEtBK,EAAsB,CACpB,yBAA0BH,EAC1B,gCAAiCE,CAAA,CAClC,EAID,MAAME,EAAYC,EAAA,EACZC,EAAiBC,EAAA,EACjB,CAAE,KAAMC,EAAgB,UAAWC,GAAoBL,EAAU,KAAK,SAC1E,CAAE,MAAO,GAAI,SAAU,EAAA,CAAM,EAEzB,CAAE,KAAMM,CAAA,EAAoBJ,EAAe,KAAK,SAAA,EAGhD,CAACK,CAAQ,EAAIC,EAAAA,SAAS,IAC1BC,EAA0CC,GACxCzB,EAAQ,OAAO,UAAU,CAAE,OAAQyB,EAAG,MAAOlC,CAAA,CAAc,CAAA,CAC7D,EAEFmC,EAAAA,UAAU,IAAM,IAAMJ,EAAS,UAAW,CAACA,CAAQ,CAAC,EAEpD,MAAMK,EAAcC,EAAcN,EAAS,MAAM,GAAK,GAChDO,EAAcD,EAAcN,EAAS,MAAM,EAC3CQ,GAAkBD,GAAA,YAAAA,EAAa,UAAW,CAAA,EAC1CE,GAAcF,GAAA,YAAAA,EAAa,cAAe,GAE1CG,GAAkBb,GAAA,YAAAA,EAAgB,YAAa,CAAA,EAC/Cc,GAAcZ,GAAA,YAAAA,EAAiB,cAAe,CAAA,EAEpD,OACEa,EAAAA,IAACC,EAAA,CACC,gBAAAH,EACA,gBAAAF,EACA,YAAAG,EACA,gBAAAb,EACA,YAAAW,EACA,YAAAJ,EACA,oBAAqBL,EAAS,SAC9B,MAAOhB,EACP,gBAAAE,EACA,YAAAN,EACA,qBAAuBkC,GAAe,CACpCtC,EAAO,KAAK,kBAAkB,mBAAmBsC,CAAU,CAAC,EAAE,CAChE,EACA,oBAAqB,IAAM,CACzBtC,EAAO,KAAK,eAAe,CAC7B,EACA,aAAc,CACZ,MAAOH,EAAE,OAAO,EAChB,SAAUA,EAAE,UAAU,EACtB,kBAAmBA,EAAE,mBAAmB,EACxC,aAAcA,EAAE,cAAc,EAC9B,UAAWA,EAAE,WAAW,EACxB,mBAAoBA,EAAE,oBAAoB,EAC1C,IAAKA,EAAE,KAAK,EACZ,gBAAiBA,EAAE,iBAAiB,EACpC,cAAgB0C,GAAkB1C,EAAE,gBAAiB,CAAE,MAAA0C,EAAO,EAC9D,oBAAsBC,GAAuB3C,EAAE,sBAAuB,CAAE,WAAA2C,EAAY,EACpF,eAAiBC,GAAkB5C,EAAE,iBAAkB,CAAE,MAAA4C,EAAO,EAChE,qBAAsB5C,EAAE,sBAAsB,EAC9C,qBAAsBA,EAAE,sBAAsB,EAC9C,SAAUA,EAAE,UAAU,EACtB,QAASA,EAAE,SAAS,EACpB,qBAAsBA,EAAE,sBAAsB,CAAA,EAEhD,cAAA6C,CAAA,CAAA,CAGN"}
@@ -1,5 +1,5 @@
1
- import{j as i}from"./query-B6BuIB0M.js";import{r as x}from"./vendor-DJo4KD8w.js";import{a as j,L as u}from"./routing-C43HVxNw.js";import{P as f}from"./index-CqzrFNnV.js";import{C as b}from"./CookiePreferences-BDtMuCT2.js";import{K as T}from"./privacy-BCxizJzS.js";import{r as v,L as y}from"./routing-swMLj8Z8.js";import{u as l}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function I(){const{t:a}=l(),e=(t,s)=>a(`Terms.${t}`,s),{t:r}=l(),c=(t,s)=>r(`Footer.${t}`,s),{t:o}=l(),p=(t,s)=>o(`Navigation.${t}`,s),{t:d}=l(),h=(t,s)=>d(`Home.${t}`,s),m=j(),n=x.useContext(T);return i.jsx(f,{Link:y,routes:v,t:c,tNav:p,tHome:h,CookiePreferences:b,...(n==null?void 0:n.openKeyboardHelp)&&{onOpenKeyboardHelp:n.openKeyboardHelp},className:"semiont-static-page",children:i.jsx("div",{className:"semiont-static-container",children:i.jsxs("div",{className:"semiont-static-content",children:[i.jsxs("header",{className:"semiont-static-header",children:[i.jsx("h1",{className:"semiont-static-title",children:e("pageTitle")}),i.jsx("p",{className:"semiont-static-subtitle",children:e("pageSubtitle")})]}),i.jsxs("article",{className:"semiont-static-article",children:[i.jsx("h2",{children:e("aupTitle")}),i.jsx("p",{children:e("aup")}),i.jsx("h3",{children:e("prohibitedTitle")}),i.jsx("p",{children:e("prohibitedIntro")}),i.jsx("ul",{children:e("prohibited").split(`
1
+ import{j as i}from"./query-B6BuIB0M.js";import{r as x}from"./vendor-DJo4KD8w.js";import{a as j,L as u}from"./routing-DDJ3KSPT.js";import{P as f}from"./index-DESF7by4.js";import{C as b}from"./CookiePreferences-ebe4eB-e.js";import{K as T}from"./privacy-DS6wXZXA.js";import{r as v,L as y}from"./routing-NOxgO9NV.js";import{u as l}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function I(){const{t:a}=l(),e=(t,s)=>a(`Terms.${t}`,s),{t:r}=l(),c=(t,s)=>r(`Footer.${t}`,s),{t:o}=l(),p=(t,s)=>o(`Navigation.${t}`,s),{t:d}=l(),h=(t,s)=>d(`Home.${t}`,s),m=j(),n=x.useContext(T);return i.jsx(f,{Link:y,routes:v,t:c,tNav:p,tHome:h,CookiePreferences:b,...(n==null?void 0:n.openKeyboardHelp)&&{onOpenKeyboardHelp:n.openKeyboardHelp},className:"semiont-static-page",children:i.jsx("div",{className:"semiont-static-container",children:i.jsxs("div",{className:"semiont-static-content",children:[i.jsxs("header",{className:"semiont-static-header",children:[i.jsx("h1",{className:"semiont-static-title",children:e("pageTitle")}),i.jsx("p",{className:"semiont-static-subtitle",children:e("pageSubtitle")})]}),i.jsxs("article",{className:"semiont-static-article",children:[i.jsx("h2",{children:e("aupTitle")}),i.jsx("p",{children:e("aup")}),i.jsx("h3",{children:e("prohibitedTitle")}),i.jsx("p",{children:e("prohibitedIntro")}),i.jsx("ul",{children:e("prohibited").split(`
2
2
  `).map((t,s)=>i.jsx("li",{children:t},s))}),i.jsx("h3",{children:e("aiAllianceTitle")}),i.jsxs("p",{children:[e("aiAllianceIntro")," ",i.jsx("a",{href:"https://ai-alliance.cdn.prismic.io/ai-alliance/Zl-MG5m069VX1dgH_AIAllianceCodeofConduct.pdf",target:"_blank",rel:"noopener noreferrer",className:"semiont-static-link",children:e("aiAllianceLink")}),e("aiAllianceIncludes")]}),i.jsx("ul",{children:e("aiAlliance").split(`
3
3
  `).map((t,s)=>i.jsx("li",{children:t},s))}),i.jsx("h3",{children:e("responsibilitiesTitle")}),i.jsx("p",{children:e("responsibilitiesIntro")}),i.jsx("ul",{children:e("responsibilities").split(`
4
4
  `).map((t,s)=>i.jsx("li",{children:t},s))}),i.jsx("h3",{children:e("moderationTitle")}),i.jsx("p",{children:e("moderation")}),i.jsx("h3",{children:e("privacyTitle")}),i.jsxs("p",{children:[e("privacy").split(e("privacyLink"))[0],i.jsx(u,{to:`/${m}/privacy`,className:"semiont-static-link",children:e("privacyLink")}),e("privacy").split(e("privacyLink"))[1]]}),i.jsx("h3",{children:e("ipTitle")}),i.jsx("p",{children:e("ip")}),i.jsx("h3",{children:e("liabilityTitle")}),i.jsx("p",{children:e("liability")}),i.jsx("h3",{children:e("changesTitle")}),i.jsx("p",{children:e("changes")}),i.jsx("h3",{children:e("contactTitle")}),i.jsx("p",{children:e("contact")}),i.jsx("footer",{className:"semiont-static-footer",children:i.jsx("p",{children:e("lastUpdated",{date:new Date().toLocaleDateString()})})})]})]})})})}export{I as default};
5
- //# sourceMappingURL=page-B3Uq31BP.js.map
5
+ //# sourceMappingURL=page-DFS-DvYi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-B3Uq31BP.js","sources":["../../src/app/[locale]/terms/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { Link } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function TermsOfService() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Terms.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`Navigation.${k}`, p as any) as string;\n const { t: _tHome } = useTranslation();\n const tHome = (k: string, p?: Record<string, unknown>) => _tHome(`Home.${k}`, p as any) as string;\n const locale = useLocale();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">\n {t('pageTitle')}\n </h1>\n <p className=\"semiont-static-subtitle\">\n {t('pageSubtitle')}\n </p>\n </header>\n\n <article className=\"semiont-static-article\">\n <h2>{t('aupTitle')}</h2>\n\n <p>\n {t('aup')}\n </p>\n\n <h3>{t('prohibitedTitle')}</h3>\n <p>{t('prohibitedIntro')}</p>\n <ul>\n {t('prohibited').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('aiAllianceTitle')}</h3>\n <p>\n {t('aiAllianceIntro')}{' '}\n <a\n href=\"https://ai-alliance.cdn.prismic.io/ai-alliance/Zl-MG5m069VX1dgH_AIAllianceCodeofConduct.pdf\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"semiont-static-link\"\n >\n {t('aiAllianceLink')}\n </a>\n {t('aiAllianceIncludes')}\n </p>\n <ul>\n {t('aiAlliance').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('responsibilitiesTitle')}</h3>\n <p>{t('responsibilitiesIntro')}</p>\n <ul>\n {t('responsibilities').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('moderationTitle')}</h3>\n <p>\n {t('moderation')}\n </p>\n\n <h3>{t('privacyTitle')}</h3>\n <p>\n {t('privacy').split(t('privacyLink'))[0]}\n <Link to={`/${locale}/privacy`} className=\"semiont-static-link\">\n {t('privacyLink')}\n </Link>\n {t('privacy').split(t('privacyLink'))[1]}\n </p>\n\n <h3>{t('ipTitle')}</h3>\n <p>\n {t('ip')}\n </p>\n\n <h3>{t('liabilityTitle')}</h3>\n <p>\n {t('liability')}\n </p>\n\n <h3>{t('changesTitle')}</h3>\n <p>\n {t('changes')}\n </p>\n\n <h3>{t('contactTitle')}</h3>\n <p>\n {t('contact')}\n </p>\n\n <footer className=\"semiont-static-footer\">\n <p>\n {t('lastUpdated', { date: new Date().toLocaleDateString() })}\n </p>\n </footer>\n </article>\n\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["TermsOfService","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","locale","useLocale","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","item","i","Link"],"mappings":"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"}
1
+ {"version":3,"file":"page-DFS-DvYi.js","sources":["../../src/app/[locale]/terms/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { Link } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function TermsOfService() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Terms.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`Navigation.${k}`, p as any) as string;\n const { t: _tHome } = useTranslation();\n const tHome = (k: string, p?: Record<string, unknown>) => _tHome(`Home.${k}`, p as any) as string;\n const locale = useLocale();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">\n {t('pageTitle')}\n </h1>\n <p className=\"semiont-static-subtitle\">\n {t('pageSubtitle')}\n </p>\n </header>\n\n <article className=\"semiont-static-article\">\n <h2>{t('aupTitle')}</h2>\n\n <p>\n {t('aup')}\n </p>\n\n <h3>{t('prohibitedTitle')}</h3>\n <p>{t('prohibitedIntro')}</p>\n <ul>\n {t('prohibited').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('aiAllianceTitle')}</h3>\n <p>\n {t('aiAllianceIntro')}{' '}\n <a\n href=\"https://ai-alliance.cdn.prismic.io/ai-alliance/Zl-MG5m069VX1dgH_AIAllianceCodeofConduct.pdf\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"semiont-static-link\"\n >\n {t('aiAllianceLink')}\n </a>\n {t('aiAllianceIncludes')}\n </p>\n <ul>\n {t('aiAlliance').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('responsibilitiesTitle')}</h3>\n <p>{t('responsibilitiesIntro')}</p>\n <ul>\n {t('responsibilities').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('moderationTitle')}</h3>\n <p>\n {t('moderation')}\n </p>\n\n <h3>{t('privacyTitle')}</h3>\n <p>\n {t('privacy').split(t('privacyLink'))[0]}\n <Link to={`/${locale}/privacy`} className=\"semiont-static-link\">\n {t('privacyLink')}\n </Link>\n {t('privacy').split(t('privacyLink'))[1]}\n </p>\n\n <h3>{t('ipTitle')}</h3>\n <p>\n {t('ip')}\n </p>\n\n <h3>{t('liabilityTitle')}</h3>\n <p>\n {t('liability')}\n </p>\n\n <h3>{t('changesTitle')}</h3>\n <p>\n {t('changes')}\n </p>\n\n <h3>{t('contactTitle')}</h3>\n <p>\n {t('contact')}\n </p>\n\n <footer className=\"semiont-static-footer\">\n <p>\n {t('lastUpdated', { date: new Date().toLocaleDateString() })}\n </p>\n </footer>\n </article>\n\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["TermsOfService","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","locale","useLocale","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","item","i","Link"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as o}from"./vendor-DJo4KD8w.js";import{u as t}from"./routing-DDJ3KSPT.js";import"./query-B6BuIB0M.js";import"./index-DESF7by4.js";import"./i18n-BbpF47i1.js";function a(){const r=t();return o.useEffect(()=>{r.replace("/know/discover")},[r]),null}export{a as default};
2
+ //# sourceMappingURL=page-DLQK_cX5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-cHW-gnyq.js","sources":["../../src/app/[locale]/auth/connect/page.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useRouter } from '@/i18n/routing';\n\n/**\n * Legacy connect page — redirects to /know/discover.\n * Authentication is now handled inline in the Knowledge Base Panel.\n */\nexport default function ConnectPage() {\n const router = useRouter();\n\n useEffect(() => {\n router.replace('/know/discover');\n }, [router]);\n\n return null;\n}\n"],"names":["ConnectPage","router","useRouter","useEffect"],"mappings":"sKAOA,SAAwBA,GAAc,CACpC,MAAMC,EAASC,EAAA,EAEfC,OAAAA,EAAAA,UAAU,IAAM,CACdF,EAAO,QAAQ,gBAAgB,CACjC,EAAG,CAACA,CAAM,CAAC,EAEJ,IACT"}
1
+ {"version":3,"file":"page-DLQK_cX5.js","sources":["../../src/app/[locale]/auth/connect/page.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useRouter } from '@/i18n/routing';\n\n/**\n * Legacy connect page — redirects to /know/discover.\n * Authentication is now handled inline in the Knowledge Base Panel.\n */\nexport default function ConnectPage() {\n const router = useRouter();\n\n useEffect(() => {\n router.replace('/know/discover');\n }, [router]);\n\n return null;\n}\n"],"names":["ConnectPage","router","useRouter","useEffect"],"mappings":"sKAOA,SAAwBA,GAAc,CACpC,MAAMC,EAASC,EAAA,EAEfC,OAAAA,EAAAA,UAAU,IAAM,CACdF,EAAO,QAAQ,gBAAgB,CACjC,EAAG,CAACA,CAAM,CAAC,EAEJ,IACT"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./query-B6BuIB0M.js";import{r as i}from"./vendor-DJo4KD8w.js";import{u as n}from"./routing-C43HVxNw.js";import{u as c}from"./i18n-BbpF47i1.js";import"./index-CqzrFNnV.js";function x(){const{t:r}=c(),o=(s,a)=>r(`Moderation.${s}`,a),t=n();return i.useEffect(()=>{t.replace("/moderate/recent")},[t]),e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:o("redirecting")})})}export{x as default};
2
- //# sourceMappingURL=page-C9LRjfKm.js.map
1
+ import{j as e}from"./query-B6BuIB0M.js";import{r as i}from"./vendor-DJo4KD8w.js";import{u as n}from"./routing-DDJ3KSPT.js";import{u as c}from"./i18n-BbpF47i1.js";import"./index-DESF7by4.js";function x(){const{t:r}=c(),o=(s,a)=>r(`Moderation.${s}`,a),t=n();return i.useEffect(()=>{t.replace("/moderate/recent")},[t]),e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:o("redirecting")})})}export{x as default};
2
+ //# sourceMappingURL=page-DRQxmzY-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-C9LRjfKm.js","sources":["../../src/app/[locale]/moderate/page.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\n\nexport default function ModeratePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const router = useRouter();\n\n useEffect(() => {\n // Redirect to Recent Documents as the default page\n router.replace('/moderate/recent');\n }, [router]);\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('redirecting')}</p>\n </div>\n );\n}"],"names":["ModeratePage","_t","useTranslation","t","k","p","router","useRouter","useEffect","jsx"],"mappings":"8LAIA,SAAwBA,GAAe,CACrC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EAC9EC,EAASC,EAAA,EAEfC,OAAAA,EAAAA,UAAU,IAAM,CAEdF,EAAO,QAAQ,kBAAkB,CACnC,EAAG,CAACA,CAAM,CAAC,EAGTG,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAN,EAAE,aAAa,CAAA,CAAE,EACpE,CAEJ"}
1
+ {"version":3,"file":"page-DRQxmzY-.js","sources":["../../src/app/[locale]/moderate/page.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\n\nexport default function ModeratePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const router = useRouter();\n\n useEffect(() => {\n // Redirect to Recent Documents as the default page\n router.replace('/moderate/recent');\n }, [router]);\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('redirecting')}</p>\n </div>\n );\n}"],"names":["ModeratePage","_t","useTranslation","t","k","p","router","useRouter","useEffect","jsx"],"mappings":"8LAIA,SAAwBA,GAAe,CACrC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EAC9EC,EAASC,EAAA,EAEfC,OAAAA,EAAAA,UAAU,IAAM,CAEdF,EAAO,QAAQ,kBAAkB,CACnC,EAAG,CAACA,CAAM,CAAC,EAGTG,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAN,EAAE,aAAa,CAAA,CAAE,EACpE,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as r}from"./query-B6BuIB0M.js";import{a as t}from"./routing-DDJ3KSPT.js";import{N as a}from"./vendor-DJo4KD8w.js";import"./index-DESF7by4.js";import"./i18n-BbpF47i1.js";function n(){const o=t();return r.jsx(a,{to:`/${o}/admin/users`,replace:!0})}export{n as default};
2
+ //# sourceMappingURL=page-EgwcfkeK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-Bs0NV-OR.js","sources":["../../src/app/[locale]/admin/page.tsx"],"sourcesContent":["import { Navigate } from 'react-router-dom';\nimport { useLocale } from '@/i18n/routing';\n\nexport default function AdminPage() {\n const locale = useLocale();\n return <Navigate to={`/${locale}/admin/users`} replace />;\n}\n"],"names":["AdminPage","locale","useLocale","Navigate"],"mappings":"kLAGA,SAAwBA,GAAY,CAClC,MAAMC,EAASC,EAAA,EACf,aAAQC,EAAA,CAAS,GAAI,IAAIF,CAAM,eAAgB,QAAO,GAAC,CACzD"}
1
+ {"version":3,"file":"page-EgwcfkeK.js","sources":["../../src/app/[locale]/admin/page.tsx"],"sourcesContent":["import { Navigate } from 'react-router-dom';\nimport { useLocale } from '@/i18n/routing';\n\nexport default function AdminPage() {\n const locale = useLocale();\n return <Navigate to={`/${locale}/admin/users`} replace />;\n}\n"],"names":["AdminPage","locale","useLocale","Navigate"],"mappings":"kLAGA,SAAwBA,GAAY,CAClC,MAAMC,EAASC,EAAA,EACf,aAAQC,EAAA,CAAS,GAAI,IAAIF,CAAM,eAAgB,QAAO,GAAC,CACzD"}
@@ -1,2 +1,2 @@
1
- import{j as s}from"./query-B6BuIB0M.js";import{u as f,r as g}from"./vendor-DJo4KD8w.js";import{P as l,A as y}from"./index-CqzrFNnV.js";import{C as d}from"./CookiePreferences-BDtMuCT2.js";import{K as A}from"./privacy-BCxizJzS.js";import{r as h,L as x}from"./routing-swMLj8Z8.js";import{L}from"./routing-C43HVxNw.js";import{u as b}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function D(){const{t}=b(),e=(r,o)=>t(`AuthError.${r}`,o),n=(r,o)=>t(`Footer.${r}`,o),i=(r,o)=>t(`Navigation.${r}`,o),c=(r,o)=>t(`Home.${r}`,o),[m]=f(),a=g.useContext(A),p=m.get("error")??null,u={pageTitle:e("pageTitle"),tryAgain:e("tryAgain"),errorConfiguration:e("errorConfiguration"),errorAccessDenied:e("errorAccessDenied"),errorVerification:e("errorVerification"),errorGeneric:e("errorGeneric")};return s.jsx(l,{Link:x,routes:h,t:n,tNav:i,tHome:c,CookiePreferences:d,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"bg-gray-50 dark:bg-gray-900",children:s.jsx(y,{errorType:p,Link:L,translations:u})})}export{D as default};
2
- //# sourceMappingURL=page-DCPEscX2.js.map
1
+ import{j as s}from"./query-B6BuIB0M.js";import{u as f,r as g}from"./vendor-DJo4KD8w.js";import{P as l,A as y}from"./index-DESF7by4.js";import{C as d}from"./CookiePreferences-ebe4eB-e.js";import{K as A}from"./privacy-DS6wXZXA.js";import{r as h,L as x}from"./routing-NOxgO9NV.js";import{L}from"./routing-DDJ3KSPT.js";import{u as b}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function D(){const{t}=b(),e=(r,o)=>t(`AuthError.${r}`,o),n=(r,o)=>t(`Footer.${r}`,o),i=(r,o)=>t(`Navigation.${r}`,o),c=(r,o)=>t(`Home.${r}`,o),[m]=f(),a=g.useContext(A),p=m.get("error")??null,u={pageTitle:e("pageTitle"),tryAgain:e("tryAgain"),errorConfiguration:e("errorConfiguration"),errorAccessDenied:e("errorAccessDenied"),errorVerification:e("errorVerification"),errorGeneric:e("errorGeneric")};return s.jsx(l,{Link:x,routes:h,t:n,tNav:i,tHome:c,CookiePreferences:d,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"bg-gray-50 dark:bg-gray-900",children:s.jsx(y,{errorType:p,Link:L,translations:u})})}export{D as default};
2
+ //# sourceMappingURL=page-hTDMMHds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-DCPEscX2.js","sources":["../../src/app/[locale]/auth/error/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout, AuthErrorDisplay } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\nimport { Link } from '@/i18n/routing';\n\nexport default function AuthError() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthError.${k}`, p as any) as string;\n const tFooter = (k: string, p?: Record<string, unknown>) => _t(`Footer.${k}`, p as any) as string;\n const tNav = (k: string, p?: Record<string, unknown>) => _t(`Navigation.${k}`, p as any) as string;\n const tHome = (k: string, p?: Record<string, unknown>) => _t(`Home.${k}`, p as any) as string;\n const [searchParams] = useSearchParams();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n const errorType = searchParams.get('error') ?? null;\n\n const translations = {\n pageTitle: t('pageTitle'),\n tryAgain: t('tryAgain'),\n errorConfiguration: t('errorConfiguration'),\n errorAccessDenied: t('errorAccessDenied'),\n errorVerification: t('errorVerification'),\n errorGeneric: t('errorGeneric'),\n };\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"bg-gray-50 dark:bg-gray-900\"\n >\n <AuthErrorDisplay errorType={errorType} Link={Link} translations={translations} />\n </PageLayout>\n );\n}\n"],"names":["AuthError","_t","useTranslation","t","k","p","tFooter","tNav","tHome","searchParams","useSearchParams","keyboardContext","useContext","KeyboardShortcutsContext","errorType","translations","jsx","PageLayout","RoutingLink","routes","CookiePreferences","AuthErrorDisplay","Link"],"mappings":"kYASA,SAAwBA,GAAY,CAClC,KAAM,CAAEC,CAAG,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,aAAaG,CAAC,GAAIC,CAAQ,EAC7EC,EAAU,CAACF,EAAWC,IAAgCJ,EAAG,UAAUG,CAAC,GAAIC,CAAQ,EAChFE,EAAO,CAACH,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EACjFG,EAAQ,CAACJ,EAAWC,IAAgCJ,EAAG,QAAQG,CAAC,GAAIC,CAAQ,EAC5E,CAACI,CAAY,EAAIC,EAAA,EACjBC,EAAkBC,EAAAA,WAAWC,CAAwB,EAErDC,EAAYL,EAAa,IAAI,OAAO,GAAK,KAEzCM,EAAe,CACnB,UAAWZ,EAAE,WAAW,EACxB,SAAUA,EAAE,UAAU,EACtB,mBAAoBA,EAAE,oBAAoB,EAC1C,kBAAmBA,EAAE,mBAAmB,EACxC,kBAAmBA,EAAE,mBAAmB,EACxC,aAAcA,EAAE,cAAc,CAAA,EAGhC,OACEa,EAAAA,IAACC,EAAA,CACC,KAAMC,EACN,OAAAC,EACA,EAAGb,EACH,KAAAC,EACA,MAAAC,EACA,kBAAAY,EACC,IAAIT,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,EAChF,UAAU,8BAEV,SAAAK,EAAAA,IAACK,EAAA,CAAiB,UAAAP,EAAA,KAAsBQ,EAAY,aAAAP,CAAA,CAA4B,CAAA,CAAA,CAGtF"}
1
+ {"version":3,"file":"page-hTDMMHds.js","sources":["../../src/app/[locale]/auth/error/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout, AuthErrorDisplay } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\nimport { Link } from '@/i18n/routing';\n\nexport default function AuthError() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthError.${k}`, p as any) as string;\n const tFooter = (k: string, p?: Record<string, unknown>) => _t(`Footer.${k}`, p as any) as string;\n const tNav = (k: string, p?: Record<string, unknown>) => _t(`Navigation.${k}`, p as any) as string;\n const tHome = (k: string, p?: Record<string, unknown>) => _t(`Home.${k}`, p as any) as string;\n const [searchParams] = useSearchParams();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n const errorType = searchParams.get('error') ?? null;\n\n const translations = {\n pageTitle: t('pageTitle'),\n tryAgain: t('tryAgain'),\n errorConfiguration: t('errorConfiguration'),\n errorAccessDenied: t('errorAccessDenied'),\n errorVerification: t('errorVerification'),\n errorGeneric: t('errorGeneric'),\n };\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"bg-gray-50 dark:bg-gray-900\"\n >\n <AuthErrorDisplay errorType={errorType} Link={Link} translations={translations} />\n </PageLayout>\n );\n}\n"],"names":["AuthError","_t","useTranslation","t","k","p","tFooter","tNav","tHome","searchParams","useSearchParams","keyboardContext","useContext","KeyboardShortcutsContext","errorType","translations","jsx","PageLayout","RoutingLink","routes","CookiePreferences","AuthErrorDisplay","Link"],"mappings":"kYASA,SAAwBA,GAAY,CAClC,KAAM,CAAEC,CAAG,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,aAAaG,CAAC,GAAIC,CAAQ,EAC7EC,EAAU,CAACF,EAAWC,IAAgCJ,EAAG,UAAUG,CAAC,GAAIC,CAAQ,EAChFE,EAAO,CAACH,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EACjFG,EAAQ,CAACJ,EAAWC,IAAgCJ,EAAG,QAAQG,CAAC,GAAIC,CAAQ,EAC5E,CAACI,CAAY,EAAIC,EAAA,EACjBC,EAAkBC,EAAAA,WAAWC,CAAwB,EAErDC,EAAYL,EAAa,IAAI,OAAO,GAAK,KAEzCM,EAAe,CACnB,UAAWZ,EAAE,WAAW,EACxB,SAAUA,EAAE,UAAU,EACtB,mBAAoBA,EAAE,oBAAoB,EAC1C,kBAAmBA,EAAE,mBAAmB,EACxC,kBAAmBA,EAAE,mBAAmB,EACxC,aAAcA,EAAE,cAAc,CAAA,EAGhC,OACEa,EAAAA,IAACC,EAAA,CACC,KAAMC,EACN,OAAAC,EACA,EAAGb,EACH,KAAAC,EACA,MAAAC,EACA,kBAAAY,EACC,IAAIT,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,EAChF,UAAU,8BAEV,SAAAK,EAAAA,IAACK,EAAA,CAAiB,UAAAP,EAAA,KAAsBQ,EAAY,aAAAP,CAAA,CAA4B,CAAA,CAAA,CAGtF"}
@@ -0,0 +1,2 @@
1
+ import{j as r}from"./query-B6BuIB0M.js";import{a as R,r as g}from"./vendor-DJo4KD8w.js";import{a as j}from"./routing-DDJ3KSPT.js";import{r as m,u as E,j as S,w,x as f,y as L}from"./index-DESF7by4.js";import{r as y,L as P}from"./routing-NOxgO9NV.js";import{u as D}from"./StreamStatusContext-BNiTXRfJ.js";import{T as I}from"./ToolbarPanels-C9r6ZyGY.js";import"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function U(){const e=R(),d=j(),o=m(e==null?void 0:e.id),l=D(),{activeKnowledgeBase:s}=E(),p=S(),{data:t,isLoading:a,isError:u,error:c,refetch:n}=p.get.useQuery(o);if(g.useEffect(()=>{u&&!a&&console.error(`[Document] Failed to load resource ${o}:`,c)},[u,a,o,c]),a||!t)return r.jsx(w,{});if(u)return r.jsx(f,{error:c,onRetry:()=>n()});if(!t.resource)return r.jsx(f,{error:new Error("Resource not found"),onRetry:()=>n()});const i=t.resource,x=m(i["@id"]);return r.jsx(L,{resource:i,rUri:x,locale:d,Link:P,routes:y,ToolbarPanels:I,refetchDocument:n,streamStatus:l,knowledgeBaseName:s==null?void 0:s.label})}export{U as default};
2
+ //# sourceMappingURL=page-tm2w2bTu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-Cz0qvcvG.js","sources":["../../src/app/[locale]/know/resource/[id]/page.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Resource Viewer Page - Minimal Next.js routing wrapper\n *\n * Handles only Next.js routing and initial resource loading.\n * All other concerns (data loading, events, UI state) are handled by ResourceViewerPage.\n */\n\nimport { useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useLocale } from '@/i18n/routing';\nimport { useResources } from '@semiont/react-ui';\nimport { resourceId } from '@semiont/core';\nimport { Link, routes } from '@/lib/routing';\nimport { useStreamStatus } from '@/contexts/StreamStatusContext';\n\n// Feature components\nimport { ResourceLoadingState, ResourceErrorState, ResourceViewerPage, useKnowledgeBaseSession } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport type { SemiontResource } from '@semiont/react-ui';\n\n/**\n * Main page component - handles only routing and initial resource load\n */\nexport default function KnowledgeResourcePage() {\n const params = useParams();\n const locale = useLocale();\n\n // The URL param is the bare resource ID\n const rId = resourceId(params?.id as string);\n\n const streamStatus = useStreamStatus();\n const { activeKnowledgeBase } = useKnowledgeBaseSession();\n\n // Load only the resource descriptor - everything else is loaded by ResourceViewerPage\n const resources = useResources();\n const {\n data: docData,\n isLoading,\n isError,\n error,\n refetch: refetchDocument\n } = resources.get.useQuery(rId) as {\n data: { resource: SemiontResource } | undefined;\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n refetch: () => Promise<unknown>;\n };\n\n // Log error for debugging\n useEffect(() => {\n if (isError && !isLoading) {\n console.error(`[Document] Failed to load resource ${rId}:`, error);\n }\n }, [isError, isLoading, rId, error]);\n\n // Early return: Loading state\n if (isLoading || !docData) {\n return <ResourceLoadingState />;\n }\n\n // Early return: Error state\n if (isError) {\n return <ResourceErrorState error={error} onRetry={() => refetchDocument()} />;\n }\n\n // Early return: ResourceDescriptor not found\n if (!docData.resource) {\n return <ResourceErrorState error={new Error('Resource not found')} onRetry={() => refetchDocument()} />;\n }\n\n const resource = docData.resource;\n // resource['@id'] is now a bare ID\n const canonicalId = resourceId(resource['@id']);\n\n // Render with minimal props - all data loading/events handled inside ResourceViewerPage\n return (\n <ResourceViewerPage\n resource={resource}\n rUri={canonicalId}\n locale={locale}\n Link={Link}\n routes={routes}\n ToolbarPanels={ToolbarPanels}\n refetchDocument={refetchDocument}\n streamStatus={streamStatus}\n knowledgeBaseName={activeKnowledgeBase?.label}\n />\n );\n}\n"],"names":["KnowledgeResourcePage","params","useParams","locale","useLocale","rId","resourceId","streamStatus","useStreamStatus","activeKnowledgeBase","useKnowledgeBaseSession","resources","useResources","docData","isLoading","isError","error","refetchDocument","useEffect","ResourceLoadingState","ResourceErrorState","jsx","resource","canonicalId","ResourceViewerPage","Link","routes","ToolbarPanels"],"mappings":"+ZAyBA,SAAwBA,GAAwB,CAC9C,MAAMC,EAASC,EAAA,EACTC,EAASC,EAAA,EAGTC,EAAMC,EAAWL,GAAA,YAAAA,EAAQ,EAAY,EAErCM,EAAeC,EAAA,EACf,CAAE,oBAAAC,CAAA,EAAwBC,EAAA,EAG1BC,EAAYC,EAAA,EACZ,CACJ,KAAMC,EACN,UAAAC,EACA,QAAAC,EACA,MAAAC,EACA,QAASC,CAAA,EACPN,EAAU,IAAI,SAASN,CAAG,EAgB9B,GAPAa,EAAAA,UAAU,IAAM,CACVH,GAAW,CAACD,GACd,QAAQ,MAAM,sCAAsCT,CAAG,IAAKW,CAAK,CAErE,EAAG,CAACD,EAASD,EAAWT,EAAKW,CAAK,CAAC,EAG/BF,GAAa,CAACD,EAChB,aAAQM,EAAA,EAAqB,EAI/B,GAAIJ,EACF,aAAQK,EAAA,CAAmB,MAAAJ,EAAc,QAAS,IAAMC,IAAmB,EAI7E,GAAI,CAACJ,EAAQ,SACX,OAAOQ,MAACD,EAAA,CAAmB,MAAO,IAAI,MAAM,oBAAoB,EAAG,QAAS,IAAMH,EAAA,EAAmB,EAGvG,MAAMK,EAAWT,EAAQ,SAEnBU,EAAcjB,EAAWgB,EAAS,KAAK,CAAC,EAG9C,OACED,EAAAA,IAACG,EAAA,CACC,SAAAF,EACA,KAAMC,EACN,OAAApB,EACA,KAAAsB,EACA,OAAAC,EACA,cAAAC,EACA,gBAAAV,EACA,aAAAV,EACA,kBAAmBE,GAAA,YAAAA,EAAqB,KAAA,CAAA,CAG9C"}
1
+ {"version":3,"file":"page-tm2w2bTu.js","sources":["../../src/app/[locale]/know/resource/[id]/page.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Resource Viewer Page - Minimal Next.js routing wrapper\n *\n * Handles only Next.js routing and initial resource loading.\n * All other concerns (data loading, events, UI state) are handled by ResourceViewerPage.\n */\n\nimport { useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useLocale } from '@/i18n/routing';\nimport { useResources } from '@semiont/react-ui';\nimport { resourceId } from '@semiont/core';\nimport { Link, routes } from '@/lib/routing';\nimport { useStreamStatus } from '@/contexts/StreamStatusContext';\n\n// Feature components\nimport { ResourceLoadingState, ResourceErrorState, ResourceViewerPage, useKnowledgeBaseSession } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport type { SemiontResource } from '@semiont/react-ui';\n\n/**\n * Main page component - handles only routing and initial resource load\n */\nexport default function KnowledgeResourcePage() {\n const params = useParams();\n const locale = useLocale();\n\n // The URL param is the bare resource ID\n const rId = resourceId(params?.id as string);\n\n const streamStatus = useStreamStatus();\n const { activeKnowledgeBase } = useKnowledgeBaseSession();\n\n // Load only the resource descriptor - everything else is loaded by ResourceViewerPage\n const resources = useResources();\n const {\n data: docData,\n isLoading,\n isError,\n error,\n refetch: refetchDocument\n } = resources.get.useQuery(rId) as {\n data: { resource: SemiontResource } | undefined;\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n refetch: () => Promise<unknown>;\n };\n\n // Log error for debugging\n useEffect(() => {\n if (isError && !isLoading) {\n console.error(`[Document] Failed to load resource ${rId}:`, error);\n }\n }, [isError, isLoading, rId, error]);\n\n // Early return: Loading state\n if (isLoading || !docData) {\n return <ResourceLoadingState />;\n }\n\n // Early return: Error state\n if (isError) {\n return <ResourceErrorState error={error} onRetry={() => refetchDocument()} />;\n }\n\n // Early return: ResourceDescriptor not found\n if (!docData.resource) {\n return <ResourceErrorState error={new Error('Resource not found')} onRetry={() => refetchDocument()} />;\n }\n\n const resource = docData.resource;\n // resource['@id'] is now a bare ID\n const canonicalId = resourceId(resource['@id']);\n\n // Render with minimal props - all data loading/events handled inside ResourceViewerPage\n return (\n <ResourceViewerPage\n resource={resource}\n rUri={canonicalId}\n locale={locale}\n Link={Link}\n routes={routes}\n ToolbarPanels={ToolbarPanels}\n refetchDocument={refetchDocument}\n streamStatus={streamStatus}\n knowledgeBaseName={activeKnowledgeBase?.label}\n />\n );\n}\n"],"names":["KnowledgeResourcePage","params","useParams","locale","useLocale","rId","resourceId","streamStatus","useStreamStatus","activeKnowledgeBase","useKnowledgeBaseSession","resources","useResources","docData","isLoading","isError","error","refetchDocument","useEffect","ResourceLoadingState","ResourceErrorState","jsx","resource","canonicalId","ResourceViewerPage","Link","routes","ToolbarPanels"],"mappings":"0ZAyBA,SAAwBA,GAAwB,CAC9C,MAAMC,EAASC,EAAA,EACTC,EAASC,EAAA,EAGTC,EAAMC,EAAWL,GAAA,YAAAA,EAAQ,EAAY,EAErCM,EAAeC,EAAA,EACf,CAAE,oBAAAC,CAAA,EAAwBC,EAAA,EAG1BC,EAAYC,EAAA,EACZ,CACJ,KAAMC,EACN,UAAAC,EACA,QAAAC,EACA,MAAAC,EACA,QAASC,CAAA,EACPN,EAAU,IAAI,SAASN,CAAG,EAgB9B,GAPAa,EAAAA,UAAU,IAAM,CACVH,GAAW,CAACD,GACd,QAAQ,MAAM,sCAAsCT,CAAG,IAAKW,CAAK,CAErE,EAAG,CAACD,EAASD,EAAWT,EAAKW,CAAK,CAAC,EAG/BF,GAAa,CAACD,EAChB,aAAQM,EAAA,EAAqB,EAI/B,GAAIJ,EACF,aAAQK,EAAA,CAAmB,MAAAJ,EAAc,QAAS,IAAMC,IAAmB,EAI7E,GAAI,CAACJ,EAAQ,SACX,OAAOQ,MAACD,EAAA,CAAmB,MAAO,IAAI,MAAM,oBAAoB,EAAG,QAAS,IAAMH,EAAA,EAAmB,EAGvG,MAAMK,EAAWT,EAAQ,SAEnBU,EAAcjB,EAAWgB,EAAS,KAAK,CAAC,EAG9C,OACED,EAAAA,IAACG,EAAA,CACC,SAAAF,EACA,KAAMC,EACN,OAAApB,EACA,KAAAsB,EACA,OAAAC,EACA,cAAAC,EACA,gBAAAV,EACA,aAAAV,EACA,kBAAmBE,GAAA,YAAAA,EAAqB,KAAA,CAAA,CAG9C"}
@@ -0,0 +1,2 @@
1
+ import{j as l}from"./query-B6BuIB0M.js";import{r as t}from"./vendor-DJo4KD8w.js";import{f as h,g,h as v,i as f,_ as b,T as w,u as C,$ as y}from"./index-DESF7by4.js";import{T as D}from"./ToolbarPanels-C9r6ZyGY.js";import{u as k}from"./i18n-BbpF47i1.js";import{F as T}from"./CommandLineIcon-Ba4gpk8e.js";import"./routing-DDJ3KSPT.js";import"./XMarkIcon-KMKD47CF.js";function L({title:s,titleId:e,...n},i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:i,"aria-labelledby":e},n),s?t.createElement("title",{id:e},s):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"}))}const x=t.forwardRef(L);function M({title:s,titleId:e,...n},i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:i,"aria-labelledby":e},n),s?t.createElement("title",{id:e},s):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z"}))}const E=t.forwardRef(M);function O(){const{isFullyAuthenticated:s,isAuthenticated:e,hasValidBackendToken:n}=C();return l.jsx(y,{isFullyAuthenticated:s,isAuthenticated:e,hasValidBackendToken:n})}function N(){const{t:s}=k(),e=(o,p)=>s(`AdminDevOps.${o}`,p),{activePanel:n}=h(),{theme:i,setTheme:a}=g(),{showLineNumbers:c,toggleLineNumbers:r}=v(),m=t.useCallback(({theme:o})=>{a(o)},[a]),u=t.useCallback(()=>{r()},[r]);f({"settings:theme-changed":m,"settings:line-numbers-toggled":u});const d=[{title:e("systemMonitoring"),description:e("systemMonitoringDescription"),icon:x,available:e("systemMonitoringCLI")},{title:e("serviceManagement"),description:e("serviceManagementDescription"),icon:E,available:e("serviceManagementCLI")},{title:e("deploymentControl"),description:e("deploymentControlDescription"),icon:T,available:e("deploymentControlCLI")}];return l.jsx(b,{suggestedFeatures:d,theme:i,showLineNumbers:c,activePanel:n,translations:{title:e("title"),subtitle:e("subtitle"),systemStatus:e("systemStatus"),cliOperations:e("cliOperations"),cliOperationsDescription:e("cliOperationsDescription"),cliTitle:e("cliTitle"),cliDescription:e("cliDescription")},StatusDisplay:O,ToolbarPanels:D,Toolbar:w})}export{N as default};
2
+ //# sourceMappingURL=page-zo4BeIjA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-jAWX9Yq4.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/ChartBarIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ServerIcon.js","../../src/app/[locale]/admin/devops/page.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ChartBarIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChartBarIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ServerIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ServerIcon);\nexport default ForwardRef;","/**\n * DevOps Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (translations, hooks)\n * and delegates rendering to the pure React AdminDevOpsPage component.\n */\n\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useCallback } from 'react';\nimport {\n ChartBarIcon,\n ServerIcon,\n CommandLineIcon\n} from '@heroicons/react/24/outline';\nimport { StatusDisplay, Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, usePanelBrowse, useLineNumbers, useEventSubscriptions, useKnowledgeBaseSession } from '@semiont/react-ui';\nimport { AdminDevOpsPage } from '@semiont/react-ui';\n\n// Wrapper component that provides auth props to StatusDisplay\nfunction StatusDisplayWithAuth() {\n const { isFullyAuthenticated, isAuthenticated, hasValidBackendToken } = useKnowledgeBaseSession();\n return (\n <StatusDisplay\n isFullyAuthenticated={isFullyAuthenticated}\n isAuthenticated={isAuthenticated}\n hasValidBackendToken={hasValidBackendToken}\n />\n );\n}\n\nexport default function DevOpsPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AdminDevOps.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const { activePanel } = usePanelBrowse();\n const { theme, setTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n // Handle theme change events\n const handleThemeChanged = useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => {\n setTheme(theme);\n }, [setTheme]);\n\n // Handle line numbers toggle events\n const handleLineNumbersToggled = useCallback(() => {\n toggleLineNumbers();\n }, [toggleLineNumbers]);\n\n useEventSubscriptions({\n 'settings:theme-changed': handleThemeChanged,\n 'settings:line-numbers-toggled': handleLineNumbersToggled,\n });\n\n const suggestedFeatures = [\n {\n title: t('systemMonitoring'),\n description: t('systemMonitoringDescription'),\n icon: ChartBarIcon,\n available: t('systemMonitoringCLI')\n },\n {\n title: t('serviceManagement'),\n description: t('serviceManagementDescription'),\n icon: ServerIcon,\n available: t('serviceManagementCLI')\n },\n {\n title: t('deploymentControl'),\n description: t('deploymentControlDescription'),\n icon: CommandLineIcon,\n available: t('deploymentControlCLI')\n },\n ];\n\n return (\n <AdminDevOpsPage\n suggestedFeatures={suggestedFeatures}\n theme={theme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n systemStatus: t('systemStatus'),\n cliOperations: t('cliOperations'),\n cliOperationsDescription: t('cliOperationsDescription'),\n cliTitle: t('cliTitle'),\n cliDescription: t('cliDescription'),\n }}\n StatusDisplay={StatusDisplayWithAuth}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"names":["ChartBarIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ServerIcon","StatusDisplayWithAuth","isFullyAuthenticated","isAuthenticated","hasValidBackendToken","useKnowledgeBaseSession","jsx","StatusDisplay","DevOpsPage","_t","useTranslation","t","k","activePanel","usePanelBrowse","theme","setTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","handleThemeChanged","useCallback","handleLineNumbersToggled","useEventSubscriptions","suggestedFeatures","CommandLineIcon","AdminDevOpsPage","ToolbarPanels","Toolbar"],"mappings":"iXACA,SAASA,EAAa,CACpB,MAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,kcACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBP,CAAY,ECvB9D,SAASQ,EAAW,CAClB,MAAAP,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,2SACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBC,CAAU,ECJ5D,SAASC,GAAwB,CAC/B,KAAM,CAAE,qBAAAC,EAAsB,gBAAAC,EAAiB,qBAAAC,CAAA,EAAyBC,EAAA,EACxE,OACEC,EAAAA,IAACC,EAAA,CACC,qBAAAL,EACA,gBAAAC,EACA,qBAAAC,CAAA,CAAA,CAGN,CAEA,SAAwBI,GAAa,CACnC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAW,IAAgCH,EAAG,eAAeG,CAAC,GAAI,CAAQ,EAG/E,CAAE,YAAAC,CAAA,EAAgBC,EAAA,EAClB,CAAE,MAAAC,EAAO,SAAAC,CAAA,EAAaC,EAAA,EACtB,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,EAAA,EAGzCC,EAAqBC,EAAAA,YAAY,CAAC,CAAE,MAAAP,KAAoD,CAC5FC,EAASD,CAAK,CAChB,EAAG,CAACC,CAAQ,CAAC,EAGPO,EAA2BD,EAAAA,YAAY,IAAM,CACjDH,EAAA,CACF,EAAG,CAACA,CAAiB,CAAC,EAEtBK,EAAsB,CACpB,yBAA0BH,EAC1B,gCAAiCE,CAAA,CAClC,EAED,MAAME,EAAoB,CACxB,CACE,MAAOd,EAAE,kBAAkB,EAC3B,YAAaA,EAAE,6BAA6B,EAC5C,KAAMnB,EACN,UAAWmB,EAAE,qBAAqB,CAAA,EAEpC,CACE,MAAOA,EAAE,mBAAmB,EAC5B,YAAaA,EAAE,8BAA8B,EAC7C,KAAMX,EACN,UAAWW,EAAE,sBAAsB,CAAA,EAErC,CACE,MAAOA,EAAE,mBAAmB,EAC5B,YAAaA,EAAE,8BAA8B,EAC7C,KAAMe,EACN,UAAWf,EAAE,sBAAsB,CAAA,CACrC,EAGF,OACEL,EAAAA,IAACqB,EAAA,CACC,kBAAAF,EACA,MAAAV,EACA,gBAAAG,EACA,YAAAL,EACA,aAAc,CACZ,MAAOF,EAAE,OAAO,EAChB,SAAUA,EAAE,UAAU,EACtB,aAAcA,EAAE,cAAc,EAC9B,cAAeA,EAAE,eAAe,EAChC,yBAA0BA,EAAE,0BAA0B,EACtD,SAAUA,EAAE,UAAU,EACtB,eAAgBA,EAAE,gBAAgB,CAAA,EAEpC,cAAeV,EACf,cAAA2B,EACA,QAAAC,CAAA,CAAA,CAGN","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"page-zo4BeIjA.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/ChartBarIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ServerIcon.js","../../src/app/[locale]/admin/devops/page.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ChartBarIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChartBarIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ServerIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ServerIcon);\nexport default ForwardRef;","/**\n * DevOps Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (translations, hooks)\n * and delegates rendering to the pure React AdminDevOpsPage component.\n */\n\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useCallback } from 'react';\nimport {\n ChartBarIcon,\n ServerIcon,\n CommandLineIcon\n} from '@heroicons/react/24/outline';\nimport { StatusDisplay, Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, usePanelBrowse, useLineNumbers, useEventSubscriptions, useKnowledgeBaseSession } from '@semiont/react-ui';\nimport { AdminDevOpsPage } from '@semiont/react-ui';\n\n// Wrapper component that provides auth props to StatusDisplay\nfunction StatusDisplayWithAuth() {\n const { isFullyAuthenticated, isAuthenticated, hasValidBackendToken } = useKnowledgeBaseSession();\n return (\n <StatusDisplay\n isFullyAuthenticated={isFullyAuthenticated}\n isAuthenticated={isAuthenticated}\n hasValidBackendToken={hasValidBackendToken}\n />\n );\n}\n\nexport default function DevOpsPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AdminDevOps.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const { activePanel } = usePanelBrowse();\n const { theme, setTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n // Handle theme change events\n const handleThemeChanged = useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => {\n setTheme(theme);\n }, [setTheme]);\n\n // Handle line numbers toggle events\n const handleLineNumbersToggled = useCallback(() => {\n toggleLineNumbers();\n }, [toggleLineNumbers]);\n\n useEventSubscriptions({\n 'settings:theme-changed': handleThemeChanged,\n 'settings:line-numbers-toggled': handleLineNumbersToggled,\n });\n\n const suggestedFeatures = [\n {\n title: t('systemMonitoring'),\n description: t('systemMonitoringDescription'),\n icon: ChartBarIcon,\n available: t('systemMonitoringCLI')\n },\n {\n title: t('serviceManagement'),\n description: t('serviceManagementDescription'),\n icon: ServerIcon,\n available: t('serviceManagementCLI')\n },\n {\n title: t('deploymentControl'),\n description: t('deploymentControlDescription'),\n icon: CommandLineIcon,\n available: t('deploymentControlCLI')\n },\n ];\n\n return (\n <AdminDevOpsPage\n suggestedFeatures={suggestedFeatures}\n theme={theme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n systemStatus: t('systemStatus'),\n cliOperations: t('cliOperations'),\n cliOperationsDescription: t('cliOperationsDescription'),\n cliTitle: t('cliTitle'),\n cliDescription: t('cliDescription'),\n }}\n StatusDisplay={StatusDisplayWithAuth}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"names":["ChartBarIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ServerIcon","StatusDisplayWithAuth","isFullyAuthenticated","isAuthenticated","hasValidBackendToken","useKnowledgeBaseSession","jsx","StatusDisplay","DevOpsPage","_t","useTranslation","t","k","activePanel","usePanelBrowse","theme","setTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","handleThemeChanged","useCallback","handleLineNumbersToggled","useEventSubscriptions","suggestedFeatures","CommandLineIcon","AdminDevOpsPage","ToolbarPanels","Toolbar"],"mappings":"4WACA,SAASA,EAAa,CACpB,MAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,kcACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBP,CAAY,ECvB9D,SAASQ,EAAW,CAClB,MAAAP,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,2SACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBC,CAAU,ECJ5D,SAASC,GAAwB,CAC/B,KAAM,CAAE,qBAAAC,EAAsB,gBAAAC,EAAiB,qBAAAC,CAAA,EAAyBC,EAAA,EACxE,OACEC,EAAAA,IAACC,EAAA,CACC,qBAAAL,EACA,gBAAAC,EACA,qBAAAC,CAAA,CAAA,CAGN,CAEA,SAAwBI,GAAa,CACnC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAW,IAAgCH,EAAG,eAAeG,CAAC,GAAI,CAAQ,EAG/E,CAAE,YAAAC,CAAA,EAAgBC,EAAA,EAClB,CAAE,MAAAC,EAAO,SAAAC,CAAA,EAAaC,EAAA,EACtB,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,EAAA,EAGzCC,EAAqBC,EAAAA,YAAY,CAAC,CAAE,MAAAP,KAAoD,CAC5FC,EAASD,CAAK,CAChB,EAAG,CAACC,CAAQ,CAAC,EAGPO,EAA2BD,EAAAA,YAAY,IAAM,CACjDH,EAAA,CACF,EAAG,CAACA,CAAiB,CAAC,EAEtBK,EAAsB,CACpB,yBAA0BH,EAC1B,gCAAiCE,CAAA,CAClC,EAED,MAAME,EAAoB,CACxB,CACE,MAAOd,EAAE,kBAAkB,EAC3B,YAAaA,EAAE,6BAA6B,EAC5C,KAAMnB,EACN,UAAWmB,EAAE,qBAAqB,CAAA,EAEpC,CACE,MAAOA,EAAE,mBAAmB,EAC5B,YAAaA,EAAE,8BAA8B,EAC7C,KAAMX,EACN,UAAWW,EAAE,sBAAsB,CAAA,EAErC,CACE,MAAOA,EAAE,mBAAmB,EAC5B,YAAaA,EAAE,8BAA8B,EAC7C,KAAMe,EACN,UAAWf,EAAE,sBAAsB,CAAA,CACrC,EAGF,OACEL,EAAAA,IAACqB,EAAA,CACC,kBAAAF,EACA,MAAAV,EACA,gBAAAG,EACA,YAAAL,EACA,aAAc,CACZ,MAAOF,EAAE,OAAO,EAChB,SAAUA,EAAE,UAAU,EACtB,aAAcA,EAAE,cAAc,EAC9B,cAAeA,EAAE,eAAe,EAChC,yBAA0BA,EAAE,0BAA0B,EACtD,SAAUA,EAAE,UAAU,EACtB,eAAgBA,EAAE,gBAAgB,CAAA,EAEpC,cAAeV,EACf,cAAA2B,EACA,QAAAC,CAAA,CAAA,CAGN","x_google_ignoreList":[0,1]}
@@ -1,2 +1,2 @@
1
- import{j as l}from"./query-B6BuIB0M.js";import{r as c}from"./vendor-DJo4KD8w.js";import{u as m}from"./routing-C43HVxNw.js";import{a9 as C,aa as S,ab as b,ac as O}from"./index-CqzrFNnV.js";import{u as v}from"./i18n-BbpF47i1.js";function E({isOpen:e,onClose:t}){const o=m(),{t:n}=v(),s=(r,a)=>n(`Search.${r}`,a),i=(r,a)=>{r==="resource"?o.push(`/know/resource/${encodeURIComponent(a)}`):o.push(`/know/entity/${a}`)};return l.jsx(C,{isOpen:e,onClose:t,onNavigate:i,translations:{placeholder:s("placeholder"),searching:s("searching"),noResults:s("noResults"),startTyping:s("startTyping"),navigate:s("navigate"),select:s("select"),close:s("close"),enter:s("enter"),esc:s("esc")}})}const T=c.createContext(null);function U({children:e}){const t=m(),[o,n]=c.useState(!1),[s,i]=c.useState(!1),[r,a]=c.useState([]),u=c.useCallback(()=>{n(!0)},[]),f=c.useCallback(()=>{i(!0)},[]),h=c.useCallback(()=>{n(!1),i(!1),r.forEach(w=>w()),a([])},[r]);S([{key:"k",ctrlOrCmd:!0,handler:()=>{u()},description:"Open global search"},{key:"n",ctrlOrCmd:!0,handler:()=>{t.push("/know/compose")},description:"Create new resource"},{key:"/",handler:()=>{u()},description:"Open global search (alternative)"},{key:"?",shift:!0,handler:()=>{f()},description:"Show keyboard shortcuts help"}]),b("Escape",h,300);const k={openGlobalSearch:u,openKeyboardHelp:f,closeAllOverlays:h};return l.jsxs(T.Provider,{value:k,children:[e,o&&l.jsx(E,{isOpen:o,onClose:()=>n(!1)}),s&&l.jsx(O,{isOpen:s,onClose:()=>i(!1)})]})}const x=[{id:"necessary",name:"Strictly Necessary",description:"These cookies are essential for the website to function properly. They enable core functionality such as security, network management, and accessibility.",required:!0,cookies:["semiont-token","consent-preferences"]},{id:"analytics",name:"Analytics",description:"These cookies help us understand how visitors interact with our website by collecting and reporting information anonymously.",required:!1,cookies:["_ga","_ga_*","_gid","_gat","lighthouse-*"]},{id:"marketing",name:"Marketing",description:"These cookies are used to track visitors across websites to display relevant advertisements and measure campaign effectiveness.",required:!1,cookies:["_fbp","_fbc","fr","ads-*"]},{id:"preferences",name:"Preferences",description:"These cookies remember your choices and preferences to provide a more personalized experience.",required:!1,cookies:["theme-preference","language-preference","ui-settings"]}],p="1.0",g="semiont-cookie-consent",_={necessary:!0,analytics:!1,marketing:!1,preferences:!1,timestamp:new Date().toISOString(),version:p},A=e=>{typeof window>"u"||x.forEach(t=>{if(t.required)return;e[t.id]||t.cookies.forEach(n=>{if(n.includes("*")){const s=n.replace("*","");document.cookie.split(";").forEach(i=>{var a;const r=(a=i.split("=")[0])==null?void 0:a.trim();r&&r.startsWith(s)&&d(r)})}else d(n)})})},d=e=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`,document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`;const t=window.location.hostname.split(".").slice(-2).join(".");document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${t}`},I=()=>{if(typeof window>"u")return null;try{const e=localStorage.getItem(g);if(!e)return null;const t=JSON.parse(e);return t.version!==p?null:t}catch(e){return console.warn("Failed to parse cookie consent:",e),null}},j=e=>{if(typeof window>"u")return;const t={..._,...e,necessary:!0,timestamp:new Date().toISOString(),version:p};try{localStorage.setItem(g,JSON.stringify(t)),A(t),window.dispatchEvent(new CustomEvent("cookieConsentChanged",{detail:t}))}catch(o){console.error("Failed to save cookie consent:",o)}},D=()=>{const e=I();if(!e)return!1;const t=new Date(e.timestamp),o=new Date;return o.setMonth(o.getMonth()-13),t>o},G=()=>typeof window>"u"?!1:!D(),y=async()=>{try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone;return e.includes("Europe/")?"EU":e.includes("America/Los_Angeles")||e.includes("America/Vancouver")?"CA":e.includes("America/")?"US":"OTHER"}catch{return"OTHER"}},H=async()=>await y()==="CA",P=async()=>await y()==="EU",q=()=>{if(typeof window>"u")return{};const e={};document.cookie.split(";").forEach(t=>{const[o,n]=t.trim().split("=");o&&n&&(e[`cookie_${o}`]=decodeURIComponent(n))});for(let t=0;t<localStorage.length;t++){const o=localStorage.key(t);o&&(e[`localStorage_${o}`]=localStorage.getItem(o)||"")}for(let t=0;t<sessionStorage.length;t++){const o=sessionStorage.key(t);o&&(e[`sessionStorage_${o}`]=sessionStorage.getItem(o)||"")}return e},J=()=>{typeof window>"u"||(localStorage.clear(),sessionStorage.clear(),document.cookie.split(";").forEach(e=>{var o;const t=(o=e.split("=")[0])==null?void 0:o.trim();t&&d(t)}),window.location.reload())};export{x as C,T as K,U as a,G as b,H as c,J as d,q as e,I as g,P as i,j as s};
2
- //# sourceMappingURL=privacy-BCxizJzS.js.map
1
+ import{j as l}from"./query-B6BuIB0M.js";import{r as c}from"./vendor-DJo4KD8w.js";import{u as m}from"./routing-DDJ3KSPT.js";import{aa as C,ab as S,ac as b,ad as O}from"./index-DESF7by4.js";import{u as v}from"./i18n-BbpF47i1.js";function E({isOpen:e,onClose:t}){const o=m(),{t:n}=v(),s=(r,a)=>n(`Search.${r}`,a),i=(r,a)=>{r==="resource"?o.push(`/know/resource/${encodeURIComponent(a)}`):o.push(`/know/entity/${a}`)};return l.jsx(C,{isOpen:e,onClose:t,onNavigate:i,translations:{placeholder:s("placeholder"),searching:s("searching"),noResults:s("noResults"),startTyping:s("startTyping"),navigate:s("navigate"),select:s("select"),close:s("close"),enter:s("enter"),esc:s("esc")}})}const T=c.createContext(null);function U({children:e}){const t=m(),[o,n]=c.useState(!1),[s,i]=c.useState(!1),[r,a]=c.useState([]),u=c.useCallback(()=>{n(!0)},[]),f=c.useCallback(()=>{i(!0)},[]),h=c.useCallback(()=>{n(!1),i(!1),r.forEach(w=>w()),a([])},[r]);S([{key:"k",ctrlOrCmd:!0,handler:()=>{u()},description:"Open global search"},{key:"n",ctrlOrCmd:!0,handler:()=>{t.push("/know/compose")},description:"Create new resource"},{key:"/",handler:()=>{u()},description:"Open global search (alternative)"},{key:"?",shift:!0,handler:()=>{f()},description:"Show keyboard shortcuts help"}]),b("Escape",h,300);const k={openGlobalSearch:u,openKeyboardHelp:f,closeAllOverlays:h};return l.jsxs(T.Provider,{value:k,children:[e,o&&l.jsx(E,{isOpen:o,onClose:()=>n(!1)}),s&&l.jsx(O,{isOpen:s,onClose:()=>i(!1)})]})}const x=[{id:"necessary",name:"Strictly Necessary",description:"These cookies are essential for the website to function properly. They enable core functionality such as security, network management, and accessibility.",required:!0,cookies:["semiont-token","consent-preferences"]},{id:"analytics",name:"Analytics",description:"These cookies help us understand how visitors interact with our website by collecting and reporting information anonymously.",required:!1,cookies:["_ga","_ga_*","_gid","_gat","lighthouse-*"]},{id:"marketing",name:"Marketing",description:"These cookies are used to track visitors across websites to display relevant advertisements and measure campaign effectiveness.",required:!1,cookies:["_fbp","_fbc","fr","ads-*"]},{id:"preferences",name:"Preferences",description:"These cookies remember your choices and preferences to provide a more personalized experience.",required:!1,cookies:["theme-preference","language-preference","ui-settings"]}],p="1.0",g="semiont-cookie-consent",_={necessary:!0,analytics:!1,marketing:!1,preferences:!1,timestamp:new Date().toISOString(),version:p},A=e=>{typeof window>"u"||x.forEach(t=>{if(t.required)return;e[t.id]||t.cookies.forEach(n=>{if(n.includes("*")){const s=n.replace("*","");document.cookie.split(";").forEach(i=>{var a;const r=(a=i.split("=")[0])==null?void 0:a.trim();r&&r.startsWith(s)&&d(r)})}else d(n)})})},d=e=>{document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`,document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`;const t=window.location.hostname.split(".").slice(-2).join(".");document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${t}`},I=()=>{if(typeof window>"u")return null;try{const e=localStorage.getItem(g);if(!e)return null;const t=JSON.parse(e);return t.version!==p?null:t}catch(e){return console.warn("Failed to parse cookie consent:",e),null}},j=e=>{if(typeof window>"u")return;const t={..._,...e,necessary:!0,timestamp:new Date().toISOString(),version:p};try{localStorage.setItem(g,JSON.stringify(t)),A(t),window.dispatchEvent(new CustomEvent("cookieConsentChanged",{detail:t}))}catch(o){console.error("Failed to save cookie consent:",o)}},D=()=>{const e=I();if(!e)return!1;const t=new Date(e.timestamp),o=new Date;return o.setMonth(o.getMonth()-13),t>o},G=()=>typeof window>"u"?!1:!D(),y=async()=>{try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone;return e.includes("Europe/")?"EU":e.includes("America/Los_Angeles")||e.includes("America/Vancouver")?"CA":e.includes("America/")?"US":"OTHER"}catch{return"OTHER"}},H=async()=>await y()==="CA",P=async()=>await y()==="EU",q=()=>{if(typeof window>"u")return{};const e={};document.cookie.split(";").forEach(t=>{const[o,n]=t.trim().split("=");o&&n&&(e[`cookie_${o}`]=decodeURIComponent(n))});for(let t=0;t<localStorage.length;t++){const o=localStorage.key(t);o&&(e[`localStorage_${o}`]=localStorage.getItem(o)||"")}for(let t=0;t<sessionStorage.length;t++){const o=sessionStorage.key(t);o&&(e[`sessionStorage_${o}`]=sessionStorage.getItem(o)||"")}return e},J=()=>{typeof window>"u"||(localStorage.clear(),sessionStorage.clear(),document.cookie.split(";").forEach(e=>{var o;const t=(o=e.split("=")[0])==null?void 0:o.trim();t&&d(t)}),window.location.reload())};export{x as C,T as K,U as a,G as b,H as c,J as d,q as e,I as g,P as i,j as s};
2
+ //# sourceMappingURL=privacy-DS6wXZXA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"privacy-BCxizJzS.js","sources":["../../src/components/modals/GlobalSearchModal.tsx","../../src/contexts/KeyboardShortcutsContext.tsx","../../src/lib/cookies/constants.ts","../../src/lib/cookies/cleanup.ts","../../src/lib/cookies/consent.ts","../../src/lib/cookies/privacy.ts"],"sourcesContent":["import React from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { SearchModal } from '@semiont/react-ui';\nimport { useTranslation } from 'react-i18next';\n\ninterface GlobalSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function GlobalSearchModal({ isOpen, onClose }: GlobalSearchModalProps) {\n const router = useRouter();\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Search.${k}`, p as any) as string;\n\n const handleNavigate = (type: 'resource' | 'entity', id: string) => {\n if (type === 'resource') {\n router.push(`/know/resource/${encodeURIComponent(id)}`);\n } else {\n router.push(`/know/entity/${id}`);\n }\n };\n\n return (\n <SearchModal\n isOpen={isOpen}\n onClose={onClose}\n onNavigate={handleNavigate}\n translations={{\n placeholder: t('placeholder'),\n searching: t('searching'),\n noResults: t('noResults'),\n startTyping: t('startTyping'),\n navigate: t('navigate'),\n select: t('select'),\n close: t('close'),\n enter: t('enter'),\n esc: t('esc'),\n }}\n />\n );\n}","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useKeyboardShortcuts, useDoubleKeyPress, KeyboardShortcutsHelpModal } from '@semiont/react-ui';\nimport { GlobalSearchModal } from '../components/modals/GlobalSearchModal';\n\ninterface KeyboardShortcutsContextType {\n openGlobalSearch: () => void;\n openKeyboardHelp: () => void;\n closeAllOverlays: () => void;\n}\n\nexport const KeyboardShortcutsContext = createContext<KeyboardShortcutsContextType | null>(null);\n\nexport function useKeyboardShortcutsContext() {\n const context = useContext(KeyboardShortcutsContext);\n if (!context) {\n throw new Error('useKeyboardShortcutsContext must be used within KeyboardShortcutsProvider');\n }\n return context;\n}\n\ninterface KeyboardShortcutsProviderProps {\n children: React.ReactNode;\n}\n\nexport function KeyboardShortcutsProvider({ children }: KeyboardShortcutsProviderProps) {\n const router = useRouter();\n const [isSearchOpen, setIsSearchOpen] = useState(false);\n const [isHelpOpen, setIsHelpOpen] = useState(false);\n const [overlayCloseCallbacks, setOverlayCloseCallbacks] = useState<(() => void)[]>([]);\n\n // Open global search\n const openGlobalSearch = useCallback(() => {\n setIsSearchOpen(true);\n }, []);\n\n // Open keyboard help\n const openKeyboardHelp = useCallback(() => {\n setIsHelpOpen(true);\n }, []);\n\n // Close all overlays\n const closeAllOverlays = useCallback(() => {\n // Close all modals\n setIsSearchOpen(false);\n setIsHelpOpen(false);\n\n // Call all registered overlay close callbacks\n overlayCloseCallbacks.forEach(callback => callback());\n\n // Clear the callbacks\n setOverlayCloseCallbacks([]);\n }, [overlayCloseCallbacks]);\n\n // Register global keyboard shortcuts\n useKeyboardShortcuts([\n {\n key: 'k',\n ctrlOrCmd: true,\n handler: () => {\n openGlobalSearch();\n },\n description: 'Open global search'\n },\n {\n key: 'n',\n ctrlOrCmd: true,\n handler: () => {\n // Navigate to compose page to create new resource\n router.push('/know/compose');\n },\n description: 'Create new resource'\n },\n {\n key: '/',\n handler: () => {\n // Alternative search trigger (like GitHub)\n openGlobalSearch();\n },\n description: 'Open global search (alternative)'\n },\n {\n key: '?',\n shift: true,\n handler: () => {\n // Open keyboard shortcuts help\n openKeyboardHelp();\n },\n description: 'Show keyboard shortcuts help'\n }\n ]);\n\n // Double Escape to close all overlays\n useDoubleKeyPress('Escape', closeAllOverlays, 300);\n\n const contextValue: KeyboardShortcutsContextType = {\n openGlobalSearch,\n openKeyboardHelp,\n closeAllOverlays\n };\n\n return (\n <KeyboardShortcutsContext.Provider value={contextValue}>\n {children}\n {isSearchOpen && (\n <GlobalSearchModal\n isOpen={isSearchOpen}\n onClose={() => setIsSearchOpen(false)}\n />\n )}\n {isHelpOpen && (\n <KeyboardShortcutsHelpModal\n isOpen={isHelpOpen}\n onClose={() => setIsHelpOpen(false)}\n />\n )}\n </KeyboardShortcutsContext.Provider>\n );\n}","import type { CookieCategory, CookieConsent } from './types';\n\n// Cookie categories with descriptions\nexport const COOKIE_CATEGORIES: CookieCategory[] = [\n {\n id: 'necessary',\n name: 'Strictly Necessary',\n description: 'These cookies are essential for the website to function properly. They enable core functionality such as security, network management, and accessibility.',\n required: true,\n cookies: ['semiont-token', 'consent-preferences']\n },\n {\n id: 'analytics',\n name: 'Analytics',\n description: 'These cookies help us understand how visitors interact with our website by collecting and reporting information anonymously.',\n required: false,\n cookies: ['_ga', '_ga_*', '_gid', '_gat', 'lighthouse-*']\n },\n {\n id: 'marketing',\n name: 'Marketing',\n description: 'These cookies are used to track visitors across websites to display relevant advertisements and measure campaign effectiveness.',\n required: false,\n cookies: ['_fbp', '_fbc', 'fr', 'ads-*']\n },\n {\n id: 'preferences',\n name: 'Preferences',\n description: 'These cookies remember your choices and preferences to provide a more personalized experience.',\n required: false,\n cookies: ['theme-preference', 'language-preference', 'ui-settings']\n }\n];\n\n// Current consent version (increment when privacy policy changes)\nexport const CONSENT_VERSION = '1.0';\n\n// Cookie names\nexport const CONSENT_COOKIE_NAME = 'semiont-cookie-consent';\nexport const PREFERENCES_COOKIE_NAME = 'semiont-cookie-preferences';\n\n// Default consent state\nexport const DEFAULT_CONSENT: CookieConsent = {\n necessary: true, // Always true, required for functionality\n analytics: false,\n marketing: false,\n preferences: false,\n timestamp: new Date().toISOString(),\n version: CONSENT_VERSION\n};\n","import type { CookieConsent } from './types';\nimport { COOKIE_CATEGORIES } from './constants';\n\n// Clean up cookies based on consent\nexport const cleanupCookies = (consent: CookieConsent): void => {\n if (typeof window === 'undefined') return;\n\n COOKIE_CATEGORIES.forEach(category => {\n if (category.required) return; // Never clean up required cookies\n\n const hasConsent = consent[category.id];\n if (!hasConsent) {\n // Remove cookies for this category\n category.cookies.forEach(cookieName => {\n if (cookieName.includes('*')) {\n // Handle wildcard cookies\n const prefix = cookieName.replace('*', '');\n document.cookie.split(';').forEach(cookie => {\n const name = cookie.split('=')[0]?.trim();\n if (name && name.startsWith(prefix)) {\n deleteCookie(name);\n }\n });\n } else {\n deleteCookie(cookieName);\n }\n });\n }\n });\n};\n\n// Delete a specific cookie\nexport const deleteCookie = (name: string): void => {\n // Delete for current domain\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n // Delete for parent domain\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`;\n // Delete for root domain\n const rootDomain = window.location.hostname.split('.').slice(-2).join('.');\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${rootDomain}`;\n};\n","import type { CookieConsent } from './types';\nimport { CONSENT_COOKIE_NAME, CONSENT_VERSION, DEFAULT_CONSENT } from './constants';\nimport { cleanupCookies } from './cleanup';\n\nexport const getCookieConsent = (): CookieConsent | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const consent = localStorage.getItem(CONSENT_COOKIE_NAME);\n if (!consent) return null;\n\n const parsed = JSON.parse(consent) as CookieConsent;\n\n // Check if consent is for current version\n if (parsed.version !== CONSENT_VERSION) {\n return null; // Force re-consent for new version\n }\n\n return parsed;\n } catch (error) {\n console.warn('Failed to parse cookie consent:', error);\n return null;\n }\n};\n\nexport const setCookieConsent = (consent: Partial<CookieConsent>): void => {\n if (typeof window === 'undefined') return;\n\n const fullConsent: CookieConsent = {\n ...DEFAULT_CONSENT,\n ...consent,\n necessary: true, // Always true\n timestamp: new Date().toISOString(),\n version: CONSENT_VERSION\n };\n\n try {\n localStorage.setItem(CONSENT_COOKIE_NAME, JSON.stringify(fullConsent));\n\n // Clean up cookies based on consent\n cleanupCookies(fullConsent);\n\n // Dispatch custom event for components to react to consent changes\n window.dispatchEvent(new CustomEvent('cookieConsentChanged', {\n detail: fullConsent\n }));\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n }\n};\n\nexport const hasValidConsent = (): boolean => {\n const consent = getCookieConsent();\n if (!consent) return false;\n\n // Check if consent is less than 13 months old (GDPR requirement)\n const consentDate = new Date(consent.timestamp);\n const thirteenMonthsAgo = new Date();\n thirteenMonthsAgo.setMonth(thirteenMonthsAgo.getMonth() - 13);\n\n return consentDate > thirteenMonthsAgo;\n};\n\nexport const shouldShowBanner = (): boolean => {\n if (typeof window === 'undefined') return false;\n return !hasValidConsent();\n};\n","import { deleteCookie } from './cleanup';\n\n// Get user's location for CCPA vs GDPR detection (simplified)\nexport const getUserLocation = async (): Promise<'EU' | 'CA' | 'US' | 'OTHER'> => {\n try {\n // In a real implementation, you'd use a geolocation service\n // For now, we'll detect based on timezone as a rough approximation\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n if (timezone.includes('Europe/')) return 'EU';\n if (timezone.includes('America/Los_Angeles') || timezone.includes('America/Vancouver')) return 'CA';\n if (timezone.includes('America/')) return 'US';\n\n return 'OTHER';\n } catch {\n return 'OTHER';\n }\n};\n\n// Check if CCPA applies (California residents)\nexport const isCCPAApplicable = async (): Promise<boolean> => {\n const location = await getUserLocation();\n return location === 'CA';\n};\n\n// Check if GDPR applies (EU residents)\nexport const isGDPRApplicable = async (): Promise<boolean> => {\n const location = await getUserLocation();\n return location === 'EU';\n};\n\n// Export all cookies currently set\nexport const exportUserData = (): Record<string, string> => {\n if (typeof window === 'undefined') return {};\n\n const data: Record<string, string> = {};\n\n // Get all cookies\n document.cookie.split(';').forEach(cookie => {\n const [name, value] = cookie.trim().split('=');\n if (name && value) {\n data[`cookie_${name}`] = decodeURIComponent(value);\n }\n });\n\n // Get localStorage data\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n data[`localStorage_${key}`] = localStorage.getItem(key) || '';\n }\n }\n\n // Get sessionStorage data\n for (let i = 0; i < sessionStorage.length; i++) {\n const key = sessionStorage.key(i);\n if (key) {\n data[`sessionStorage_${key}`] = sessionStorage.getItem(key) || '';\n }\n }\n\n return data;\n};\n\n// Delete all user data (GDPR right to be forgotten)\nexport const deleteAllUserData = (): void => {\n if (typeof window === 'undefined') return;\n\n // Clear all localStorage\n localStorage.clear();\n\n // Clear all sessionStorage\n sessionStorage.clear();\n\n // Delete all cookies\n document.cookie.split(';').forEach(cookie => {\n const name = cookie.split('=')[0]?.trim();\n if (name) {\n deleteCookie(name);\n }\n });\n\n // Reload page to ensure clean state\n window.location.reload();\n};\n"],"names":["GlobalSearchModal","isOpen","onClose","router","useRouter","_t","useTranslation","t","k","p","handleNavigate","type","id","jsx","SearchModal","KeyboardShortcutsContext","createContext","KeyboardShortcutsProvider","children","isSearchOpen","setIsSearchOpen","useState","isHelpOpen","setIsHelpOpen","overlayCloseCallbacks","setOverlayCloseCallbacks","openGlobalSearch","useCallback","openKeyboardHelp","closeAllOverlays","callback","useKeyboardShortcuts","useDoubleKeyPress","contextValue","jsxs","KeyboardShortcutsHelpModal","COOKIE_CATEGORIES","CONSENT_VERSION","CONSENT_COOKIE_NAME","DEFAULT_CONSENT","cleanupCookies","consent","category","cookieName","prefix","cookie","name","_a","deleteCookie","rootDomain","getCookieConsent","parsed","error","setCookieConsent","fullConsent","hasValidConsent","consentDate","thirteenMonthsAgo","shouldShowBanner","getUserLocation","timezone","isCCPAApplicable","isGDPRApplicable","exportUserData","data","value","i","key","deleteAllUserData"],"mappings":"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"}
1
+ {"version":3,"file":"privacy-DS6wXZXA.js","sources":["../../src/components/modals/GlobalSearchModal.tsx","../../src/contexts/KeyboardShortcutsContext.tsx","../../src/lib/cookies/constants.ts","../../src/lib/cookies/cleanup.ts","../../src/lib/cookies/consent.ts","../../src/lib/cookies/privacy.ts"],"sourcesContent":["import React from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { SearchModal } from '@semiont/react-ui';\nimport { useTranslation } from 'react-i18next';\n\ninterface GlobalSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function GlobalSearchModal({ isOpen, onClose }: GlobalSearchModalProps) {\n const router = useRouter();\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Search.${k}`, p as any) as string;\n\n const handleNavigate = (type: 'resource' | 'entity', id: string) => {\n if (type === 'resource') {\n router.push(`/know/resource/${encodeURIComponent(id)}`);\n } else {\n router.push(`/know/entity/${id}`);\n }\n };\n\n return (\n <SearchModal\n isOpen={isOpen}\n onClose={onClose}\n onNavigate={handleNavigate}\n translations={{\n placeholder: t('placeholder'),\n searching: t('searching'),\n noResults: t('noResults'),\n startTyping: t('startTyping'),\n navigate: t('navigate'),\n select: t('select'),\n close: t('close'),\n enter: t('enter'),\n esc: t('esc'),\n }}\n />\n );\n}","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useKeyboardShortcuts, useDoubleKeyPress, KeyboardShortcutsHelpModal } from '@semiont/react-ui';\nimport { GlobalSearchModal } from '../components/modals/GlobalSearchModal';\n\ninterface KeyboardShortcutsContextType {\n openGlobalSearch: () => void;\n openKeyboardHelp: () => void;\n closeAllOverlays: () => void;\n}\n\nexport const KeyboardShortcutsContext = createContext<KeyboardShortcutsContextType | null>(null);\n\nexport function useKeyboardShortcutsContext() {\n const context = useContext(KeyboardShortcutsContext);\n if (!context) {\n throw new Error('useKeyboardShortcutsContext must be used within KeyboardShortcutsProvider');\n }\n return context;\n}\n\ninterface KeyboardShortcutsProviderProps {\n children: React.ReactNode;\n}\n\nexport function KeyboardShortcutsProvider({ children }: KeyboardShortcutsProviderProps) {\n const router = useRouter();\n const [isSearchOpen, setIsSearchOpen] = useState(false);\n const [isHelpOpen, setIsHelpOpen] = useState(false);\n const [overlayCloseCallbacks, setOverlayCloseCallbacks] = useState<(() => void)[]>([]);\n\n // Open global search\n const openGlobalSearch = useCallback(() => {\n setIsSearchOpen(true);\n }, []);\n\n // Open keyboard help\n const openKeyboardHelp = useCallback(() => {\n setIsHelpOpen(true);\n }, []);\n\n // Close all overlays\n const closeAllOverlays = useCallback(() => {\n // Close all modals\n setIsSearchOpen(false);\n setIsHelpOpen(false);\n\n // Call all registered overlay close callbacks\n overlayCloseCallbacks.forEach(callback => callback());\n\n // Clear the callbacks\n setOverlayCloseCallbacks([]);\n }, [overlayCloseCallbacks]);\n\n // Register global keyboard shortcuts\n useKeyboardShortcuts([\n {\n key: 'k',\n ctrlOrCmd: true,\n handler: () => {\n openGlobalSearch();\n },\n description: 'Open global search'\n },\n {\n key: 'n',\n ctrlOrCmd: true,\n handler: () => {\n // Navigate to compose page to create new resource\n router.push('/know/compose');\n },\n description: 'Create new resource'\n },\n {\n key: '/',\n handler: () => {\n // Alternative search trigger (like GitHub)\n openGlobalSearch();\n },\n description: 'Open global search (alternative)'\n },\n {\n key: '?',\n shift: true,\n handler: () => {\n // Open keyboard shortcuts help\n openKeyboardHelp();\n },\n description: 'Show keyboard shortcuts help'\n }\n ]);\n\n // Double Escape to close all overlays\n useDoubleKeyPress('Escape', closeAllOverlays, 300);\n\n const contextValue: KeyboardShortcutsContextType = {\n openGlobalSearch,\n openKeyboardHelp,\n closeAllOverlays\n };\n\n return (\n <KeyboardShortcutsContext.Provider value={contextValue}>\n {children}\n {isSearchOpen && (\n <GlobalSearchModal\n isOpen={isSearchOpen}\n onClose={() => setIsSearchOpen(false)}\n />\n )}\n {isHelpOpen && (\n <KeyboardShortcutsHelpModal\n isOpen={isHelpOpen}\n onClose={() => setIsHelpOpen(false)}\n />\n )}\n </KeyboardShortcutsContext.Provider>\n );\n}","import type { CookieCategory, CookieConsent } from './types';\n\n// Cookie categories with descriptions\nexport const COOKIE_CATEGORIES: CookieCategory[] = [\n {\n id: 'necessary',\n name: 'Strictly Necessary',\n description: 'These cookies are essential for the website to function properly. They enable core functionality such as security, network management, and accessibility.',\n required: true,\n cookies: ['semiont-token', 'consent-preferences']\n },\n {\n id: 'analytics',\n name: 'Analytics',\n description: 'These cookies help us understand how visitors interact with our website by collecting and reporting information anonymously.',\n required: false,\n cookies: ['_ga', '_ga_*', '_gid', '_gat', 'lighthouse-*']\n },\n {\n id: 'marketing',\n name: 'Marketing',\n description: 'These cookies are used to track visitors across websites to display relevant advertisements and measure campaign effectiveness.',\n required: false,\n cookies: ['_fbp', '_fbc', 'fr', 'ads-*']\n },\n {\n id: 'preferences',\n name: 'Preferences',\n description: 'These cookies remember your choices and preferences to provide a more personalized experience.',\n required: false,\n cookies: ['theme-preference', 'language-preference', 'ui-settings']\n }\n];\n\n// Current consent version (increment when privacy policy changes)\nexport const CONSENT_VERSION = '1.0';\n\n// Cookie names\nexport const CONSENT_COOKIE_NAME = 'semiont-cookie-consent';\nexport const PREFERENCES_COOKIE_NAME = 'semiont-cookie-preferences';\n\n// Default consent state\nexport const DEFAULT_CONSENT: CookieConsent = {\n necessary: true, // Always true, required for functionality\n analytics: false,\n marketing: false,\n preferences: false,\n timestamp: new Date().toISOString(),\n version: CONSENT_VERSION\n};\n","import type { CookieConsent } from './types';\nimport { COOKIE_CATEGORIES } from './constants';\n\n// Clean up cookies based on consent\nexport const cleanupCookies = (consent: CookieConsent): void => {\n if (typeof window === 'undefined') return;\n\n COOKIE_CATEGORIES.forEach(category => {\n if (category.required) return; // Never clean up required cookies\n\n const hasConsent = consent[category.id];\n if (!hasConsent) {\n // Remove cookies for this category\n category.cookies.forEach(cookieName => {\n if (cookieName.includes('*')) {\n // Handle wildcard cookies\n const prefix = cookieName.replace('*', '');\n document.cookie.split(';').forEach(cookie => {\n const name = cookie.split('=')[0]?.trim();\n if (name && name.startsWith(prefix)) {\n deleteCookie(name);\n }\n });\n } else {\n deleteCookie(cookieName);\n }\n });\n }\n });\n};\n\n// Delete a specific cookie\nexport const deleteCookie = (name: string): void => {\n // Delete for current domain\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n // Delete for parent domain\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`;\n // Delete for root domain\n const rootDomain = window.location.hostname.split('.').slice(-2).join('.');\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${rootDomain}`;\n};\n","import type { CookieConsent } from './types';\nimport { CONSENT_COOKIE_NAME, CONSENT_VERSION, DEFAULT_CONSENT } from './constants';\nimport { cleanupCookies } from './cleanup';\n\nexport const getCookieConsent = (): CookieConsent | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const consent = localStorage.getItem(CONSENT_COOKIE_NAME);\n if (!consent) return null;\n\n const parsed = JSON.parse(consent) as CookieConsent;\n\n // Check if consent is for current version\n if (parsed.version !== CONSENT_VERSION) {\n return null; // Force re-consent for new version\n }\n\n return parsed;\n } catch (error) {\n console.warn('Failed to parse cookie consent:', error);\n return null;\n }\n};\n\nexport const setCookieConsent = (consent: Partial<CookieConsent>): void => {\n if (typeof window === 'undefined') return;\n\n const fullConsent: CookieConsent = {\n ...DEFAULT_CONSENT,\n ...consent,\n necessary: true, // Always true\n timestamp: new Date().toISOString(),\n version: CONSENT_VERSION\n };\n\n try {\n localStorage.setItem(CONSENT_COOKIE_NAME, JSON.stringify(fullConsent));\n\n // Clean up cookies based on consent\n cleanupCookies(fullConsent);\n\n // Dispatch custom event for components to react to consent changes\n window.dispatchEvent(new CustomEvent('cookieConsentChanged', {\n detail: fullConsent\n }));\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n }\n};\n\nexport const hasValidConsent = (): boolean => {\n const consent = getCookieConsent();\n if (!consent) return false;\n\n // Check if consent is less than 13 months old (GDPR requirement)\n const consentDate = new Date(consent.timestamp);\n const thirteenMonthsAgo = new Date();\n thirteenMonthsAgo.setMonth(thirteenMonthsAgo.getMonth() - 13);\n\n return consentDate > thirteenMonthsAgo;\n};\n\nexport const shouldShowBanner = (): boolean => {\n if (typeof window === 'undefined') return false;\n return !hasValidConsent();\n};\n","import { deleteCookie } from './cleanup';\n\n// Get user's location for CCPA vs GDPR detection (simplified)\nexport const getUserLocation = async (): Promise<'EU' | 'CA' | 'US' | 'OTHER'> => {\n try {\n // In a real implementation, you'd use a geolocation service\n // For now, we'll detect based on timezone as a rough approximation\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n if (timezone.includes('Europe/')) return 'EU';\n if (timezone.includes('America/Los_Angeles') || timezone.includes('America/Vancouver')) return 'CA';\n if (timezone.includes('America/')) return 'US';\n\n return 'OTHER';\n } catch {\n return 'OTHER';\n }\n};\n\n// Check if CCPA applies (California residents)\nexport const isCCPAApplicable = async (): Promise<boolean> => {\n const location = await getUserLocation();\n return location === 'CA';\n};\n\n// Check if GDPR applies (EU residents)\nexport const isGDPRApplicable = async (): Promise<boolean> => {\n const location = await getUserLocation();\n return location === 'EU';\n};\n\n// Export all cookies currently set\nexport const exportUserData = (): Record<string, string> => {\n if (typeof window === 'undefined') return {};\n\n const data: Record<string, string> = {};\n\n // Get all cookies\n document.cookie.split(';').forEach(cookie => {\n const [name, value] = cookie.trim().split('=');\n if (name && value) {\n data[`cookie_${name}`] = decodeURIComponent(value);\n }\n });\n\n // Get localStorage data\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n data[`localStorage_${key}`] = localStorage.getItem(key) || '';\n }\n }\n\n // Get sessionStorage data\n for (let i = 0; i < sessionStorage.length; i++) {\n const key = sessionStorage.key(i);\n if (key) {\n data[`sessionStorage_${key}`] = sessionStorage.getItem(key) || '';\n }\n }\n\n return data;\n};\n\n// Delete all user data (GDPR right to be forgotten)\nexport const deleteAllUserData = (): void => {\n if (typeof window === 'undefined') return;\n\n // Clear all localStorage\n localStorage.clear();\n\n // Clear all sessionStorage\n sessionStorage.clear();\n\n // Delete all cookies\n document.cookie.split(';').forEach(cookie => {\n const name = cookie.split('=')[0]?.trim();\n if (name) {\n deleteCookie(name);\n }\n });\n\n // Reload page to ensure clean state\n window.location.reload();\n};\n"],"names":["GlobalSearchModal","isOpen","onClose","router","useRouter","_t","useTranslation","t","k","p","handleNavigate","type","id","jsx","SearchModal","KeyboardShortcutsContext","createContext","KeyboardShortcutsProvider","children","isSearchOpen","setIsSearchOpen","useState","isHelpOpen","setIsHelpOpen","overlayCloseCallbacks","setOverlayCloseCallbacks","openGlobalSearch","useCallback","openKeyboardHelp","closeAllOverlays","callback","useKeyboardShortcuts","useDoubleKeyPress","contextValue","jsxs","KeyboardShortcutsHelpModal","COOKIE_CATEGORIES","CONSENT_VERSION","CONSENT_COOKIE_NAME","DEFAULT_CONSENT","cleanupCookies","consent","category","cookieName","prefix","cookie","name","_a","deleteCookie","rootDomain","getCookieConsent","parsed","error","setCookieConsent","fullConsent","hasValidConsent","consentDate","thirteenMonthsAgo","shouldShowBanner","getUserLocation","timezone","isCCPAApplicable","isGDPRApplicable","exportUserData","data","value","i","key","deleteAllUserData"],"mappings":"mOAUO,SAASA,EAAkB,CAAE,OAAAC,EAAQ,QAAAC,GAAmC,CAC7E,MAAMC,EAASC,EAAA,EACT,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,UAAUG,CAAC,GAAIC,CAAQ,EAE1EC,EAAiB,CAACC,EAA6BC,IAAe,CAC9DD,IAAS,WACXR,EAAO,KAAK,kBAAkB,mBAAmBS,CAAE,CAAC,EAAE,EAEtDT,EAAO,KAAK,gBAAgBS,CAAE,EAAE,CAEpC,EAEA,OACEC,EAAAA,IAACC,EAAA,CACC,OAAAb,EACA,QAAAC,EACA,WAAYQ,EACZ,aAAc,CACZ,YAAaH,EAAE,aAAa,EAC5B,UAAWA,EAAE,WAAW,EACxB,UAAWA,EAAE,WAAW,EACxB,YAAaA,EAAE,aAAa,EAC5B,SAAUA,EAAE,UAAU,EACtB,OAAQA,EAAE,QAAQ,EAClB,MAAOA,EAAE,OAAO,EAChB,MAAOA,EAAE,OAAO,EAChB,IAAKA,EAAE,KAAK,CAAA,CACd,CAAA,CAGN,CC9BO,MAAMQ,EAA2BC,EAAAA,cAAmD,IAAI,EAcxF,SAASC,EAA0B,CAAE,SAAAC,GAA4C,CACtF,MAAMf,EAASC,EAAA,EACT,CAACe,EAAcC,CAAe,EAAIC,EAAAA,SAAS,EAAK,EAChD,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAAS,EAAK,EAC5C,CAACG,EAAuBC,CAAwB,EAAIJ,EAAAA,SAAyB,CAAA,CAAE,EAG/EK,EAAmBC,EAAAA,YAAY,IAAM,CACzCP,EAAgB,EAAI,CACtB,EAAG,CAAA,CAAE,EAGCQ,EAAmBD,EAAAA,YAAY,IAAM,CACzCJ,EAAc,EAAI,CACpB,EAAG,CAAA,CAAE,EAGCM,EAAmBF,EAAAA,YAAY,IAAM,CAEzCP,EAAgB,EAAK,EACrBG,EAAc,EAAK,EAGnBC,EAAsB,QAAQM,GAAYA,EAAA,CAAU,EAGpDL,EAAyB,CAAA,CAAE,CAC7B,EAAG,CAACD,CAAqB,CAAC,EAG1BO,EAAqB,CACnB,CACE,IAAK,IACL,UAAW,GACX,QAAS,IAAM,CACbL,EAAA,CACF,EACA,YAAa,oBAAA,EAEf,CACE,IAAK,IACL,UAAW,GACX,QAAS,IAAM,CAEbvB,EAAO,KAAK,eAAe,CAC7B,EACA,YAAa,qBAAA,EAEf,CACE,IAAK,IACL,QAAS,IAAM,CAEbuB,EAAA,CACF,EACA,YAAa,kCAAA,EAEf,CACE,IAAK,IACL,MAAO,GACP,QAAS,IAAM,CAEbE,EAAA,CACF,EACA,YAAa,8BAAA,CACf,CACD,EAGDI,EAAkB,SAAUH,EAAkB,GAAG,EAEjD,MAAMI,EAA6C,CACjD,iBAAAP,EACA,iBAAAE,EACA,iBAAAC,CAAA,EAGF,OACEK,EAAAA,KAACnB,EAAyB,SAAzB,CAAkC,MAAOkB,EACvC,SAAA,CAAAf,EACAC,GACCN,EAAAA,IAACb,EAAA,CACC,OAAQmB,EACR,QAAS,IAAMC,EAAgB,EAAK,CAAA,CAAA,EAGvCE,GACCT,EAAAA,IAACsB,EAAA,CACC,OAAQb,EACR,QAAS,IAAMC,EAAc,EAAK,CAAA,CAAA,CACpC,EAEJ,CAEJ,CCnHO,MAAMa,EAAsC,CACjD,CACE,GAAI,YACJ,KAAM,qBACN,YAAa,4JACb,SAAU,GACV,QAAS,CAAC,gBAAiB,qBAAqB,CAAA,EAElD,CACE,GAAI,YACJ,KAAM,YACN,YAAa,+HACb,SAAU,GACV,QAAS,CAAC,MAAO,QAAS,OAAQ,OAAQ,cAAc,CAAA,EAE1D,CACE,GAAI,YACJ,KAAM,YACN,YAAa,kIACb,SAAU,GACV,QAAS,CAAC,OAAQ,OAAQ,KAAM,OAAO,CAAA,EAEzC,CACE,GAAI,cACJ,KAAM,cACN,YAAa,iGACb,SAAU,GACV,QAAS,CAAC,mBAAoB,sBAAuB,aAAa,CAAA,CAEtE,EAGaC,EAAkB,MAGlBC,EAAsB,yBAItBC,EAAiC,CAC5C,UAAW,GACX,UAAW,GACX,UAAW,GACX,YAAa,GACb,UAAW,IAAI,KAAA,EAAO,YAAA,EACtB,QAASF,CACX,EC7CaG,EAAkBC,GAAiC,CAC1D,OAAO,OAAW,KAEtBL,EAAkB,QAAQM,GAAY,CACpC,GAAIA,EAAS,SAAU,OAEJD,EAAQC,EAAS,EAAE,GAGpCA,EAAS,QAAQ,QAAQC,GAAc,CACrC,GAAIA,EAAW,SAAS,GAAG,EAAG,CAE5B,MAAMC,EAASD,EAAW,QAAQ,IAAK,EAAE,EACzC,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQE,GAAU,OAC3C,MAAMC,GAAOC,EAAAF,EAAO,MAAM,GAAG,EAAE,CAAC,IAAnB,YAAAE,EAAsB,OAC/BD,GAAQA,EAAK,WAAWF,CAAM,GAChCI,EAAaF,CAAI,CAErB,CAAC,CACH,MACEE,EAAaL,CAAU,CAE3B,CAAC,CAEL,CAAC,CACH,EAGaK,EAAgBF,GAAuB,CAElD,SAAS,OAAS,GAAGA,CAAI,mDAEzB,SAAS,OAAS,GAAGA,CAAI,4DAA4D,OAAO,SAAS,QAAQ,GAE7G,MAAMG,EAAa,OAAO,SAAS,SAAS,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,EACzE,SAAS,OAAS,GAAGH,CAAI,6DAA6DG,CAAU,EAClG,ECpCaC,EAAmB,IAA4B,CAC1D,GAAI,OAAO,OAAW,IAAa,OAAO,KAE1C,GAAI,CACF,MAAMT,EAAU,aAAa,QAAQH,CAAmB,EACxD,GAAI,CAACG,EAAS,OAAO,KAErB,MAAMU,EAAS,KAAK,MAAMV,CAAO,EAGjC,OAAIU,EAAO,UAAYd,EACd,KAGFc,CACT,OAASC,EAAO,CACd,eAAQ,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,EAEaC,EAAoBZ,GAA0C,CACzE,GAAI,OAAO,OAAW,IAAa,OAEnC,MAAMa,EAA6B,CACjC,GAAGf,EACH,GAAGE,EACH,UAAW,GACX,UAAW,IAAI,KAAA,EAAO,YAAA,EACtB,QAASJ,CAAA,EAGX,GAAI,CACF,aAAa,QAAQC,EAAqB,KAAK,UAAUgB,CAAW,CAAC,EAGrEd,EAAec,CAAW,EAG1B,OAAO,cAAc,IAAI,YAAY,uBAAwB,CAC3D,OAAQA,CAAA,CACT,CAAC,CACJ,OAASF,EAAO,CACd,QAAQ,MAAM,iCAAkCA,CAAK,CACvD,CACF,EAEaG,EAAkB,IAAe,CAC5C,MAAMd,EAAUS,EAAA,EAChB,GAAI,CAACT,EAAS,MAAO,GAGrB,MAAMe,EAAc,IAAI,KAAKf,EAAQ,SAAS,EACxCgB,MAAwB,KAC9B,OAAAA,EAAkB,SAASA,EAAkB,SAAA,EAAa,EAAE,EAErDD,EAAcC,CACvB,EAEaC,EAAmB,IAC1B,OAAO,OAAW,IAAoB,GACnC,CAACH,EAAA,EC9DGI,EAAkB,SAAmD,CAChF,GAAI,CAGF,MAAMC,EAAW,KAAK,eAAA,EAAiB,kBAAkB,SAEzD,OAAIA,EAAS,SAAS,SAAS,EAAU,KACrCA,EAAS,SAAS,qBAAqB,GAAKA,EAAS,SAAS,mBAAmB,EAAU,KAC3FA,EAAS,SAAS,UAAU,EAAU,KAEnC,OACT,MAAQ,CACN,MAAO,OACT,CACF,EAGaC,EAAmB,SACb,MAAMF,EAAA,IACH,KAITG,EAAmB,SACb,MAAMH,EAAA,IACH,KAITI,EAAiB,IAA8B,CAC1D,GAAI,OAAO,OAAW,IAAa,MAAO,CAAA,EAE1C,MAAMC,EAA+B,CAAA,EAGrC,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQnB,GAAU,CAC3C,KAAM,CAACC,EAAMmB,CAAK,EAAIpB,EAAO,KAAA,EAAO,MAAM,GAAG,EACzCC,GAAQmB,IACVD,EAAK,UAAUlB,CAAI,EAAE,EAAI,mBAAmBmB,CAAK,EAErD,CAAC,EAGD,QAASC,EAAI,EAAGA,EAAI,aAAa,OAAQA,IAAK,CAC5C,MAAMC,EAAM,aAAa,IAAID,CAAC,EAC1BC,IACFH,EAAK,gBAAgBG,CAAG,EAAE,EAAI,aAAa,QAAQA,CAAG,GAAK,GAE/D,CAGA,QAASD,EAAI,EAAGA,EAAI,eAAe,OAAQA,IAAK,CAC9C,MAAMC,EAAM,eAAe,IAAID,CAAC,EAC5BC,IACFH,EAAK,kBAAkBG,CAAG,EAAE,EAAI,eAAe,QAAQA,CAAG,GAAK,GAEnE,CAEA,OAAOH,CACT,EAGaI,EAAoB,IAAY,CACvC,OAAO,OAAW,MAGtB,aAAa,MAAA,EAGb,eAAe,MAAA,EAGf,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQvB,GAAU,OAC3C,MAAMC,GAAOC,EAAAF,EAAO,MAAM,GAAG,EAAE,CAAC,IAAnB,YAAAE,EAAsB,OAC/BD,GACFE,EAAaF,CAAI,CAErB,CAAC,EAGD,OAAO,SAAS,OAAA,EAClB"}
@@ -1,2 +1,2 @@
1
- import{j as m}from"./query-B6BuIB0M.js";import{b as f,a as c,R as g,L,c as p}from"./vendor-DJo4KD8w.js";import{G as o,H as h}from"./index-CqzrFNnV.js";import{u}from"./i18n-BbpF47i1.js";const k=g.forwardRef(function({to:a,...n},s){const{i18n:t}=u(),e=c(),l=t.language||e.locale||o,i=typeof a=="string"?`/${l}${a.startsWith("/")?a:`/${a}`}`:a;return m.jsx(L,{ref:s,to:i,...n})});function w(){const r=f(),{i18n:a}=u(),n=c();function s(t,e){return`/${e||a.language||n.locale||o}${t.startsWith("/")?t:`/${t}`}`}return{push(t,e){r(s(t,e==null?void 0:e.locale))},replace(t,e){r(s(t,e==null?void 0:e.locale),{replace:!0})},back(){r(-1)},forward(){r(1)},refresh(){window.location.reload()},prefetch(t){}}}function b(){const{pathname:r}=p(),a=r.match(/^\/[a-z]{2}(\/.*)?$/);return a?a[1]??"/":r}function j(){const r=c(),{i18n:a}=u(),n=r.locale;return n&&h(n)?n:a.language||o}export{k as L,j as a,b,w as u};
2
- //# sourceMappingURL=routing-C43HVxNw.js.map
1
+ import{j as m}from"./query-B6BuIB0M.js";import{b as f,a as c,R as g,L,c as p}from"./vendor-DJo4KD8w.js";import{I as o,J as h}from"./index-DESF7by4.js";import{u}from"./i18n-BbpF47i1.js";const k=g.forwardRef(function({to:a,...n},s){const{i18n:t}=u(),e=c(),l=t.language||e.locale||o,i=typeof a=="string"?`/${l}${a.startsWith("/")?a:`/${a}`}`:a;return m.jsx(L,{ref:s,to:i,...n})});function w(){const r=f(),{i18n:a}=u(),n=c();function s(t,e){return`/${e||a.language||n.locale||o}${t.startsWith("/")?t:`/${t}`}`}return{push(t,e){r(s(t,e==null?void 0:e.locale))},replace(t,e){r(s(t,e==null?void 0:e.locale),{replace:!0})},back(){r(-1)},forward(){r(1)},refresh(){window.location.reload()},prefetch(t){}}}function b(){const{pathname:r}=p(),a=r.match(/^\/[a-z]{2}(\/.*)?$/);return a?a[1]??"/":r}function j(){const r=c(),{i18n:a}=u(),n=r.locale;return n&&h(n)?n:a.language||o}export{k as L,j as a,b,w as u};
2
+ //# sourceMappingURL=routing-DDJ3KSPT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routing-C43HVxNw.js","sources":["../../src/i18n/routing.tsx"],"sourcesContent":["/**\n * Routing abstraction layer — React Router implementation\n *\n * All call sites import from @/i18n/routing and do not need to change\n * when the underlying router changes.\n *\n * Key behaviours:\n * - Link: locale-prefixed anchor rendered via react-router-dom\n * - useRouter: locale-aware push/replace/back\n * - usePathname: returns path WITHOUT locale prefix\n * - redirect: programmatic navigation without locale prefix\n */\n\nimport React from 'react';\nimport {\n Link as RouterLink,\n useNavigate,\n useLocation,\n useParams,\n Navigate,\n} from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { SUPPORTED_LOCALES, DEFAULT_LOCALE, isSupportedLocale } from './config';\n\nexport { SUPPORTED_LOCALES, DEFAULT_LOCALE };\n\n// ── Link ─────────────────────────────────────────────────────────────────────\n\ntype LinkProps = React.ComponentProps<typeof RouterLink>;\n\n/**\n * Locale-aware Link. Prepends the current locale to the href.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function Link({ to, ...props }, ref) {\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n const locale = i18n.language || params.locale || DEFAULT_LOCALE;\n const target = typeof to === 'string' ? `/${locale}${to.startsWith('/') ? to : `/${to}`}` : to;\n return <RouterLink ref={ref} to={target} {...props} />;\n },\n);\n\n// ── useRouter ─────────────────────────────────────────────────────────────────\n\ntype RouterOptions = { locale?: string };\n\nexport function useRouter() {\n const navigate = useNavigate();\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n\n function prefixLocale(path: string, locale?: string): string {\n const lang = locale || i18n.language || params.locale || DEFAULT_LOCALE;\n return `/${lang}${path.startsWith('/') ? path : `/${path}`}`;\n }\n\n return {\n push(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale));\n },\n replace(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale), { replace: true });\n },\n back() {\n navigate(-1);\n },\n forward() {\n navigate(1);\n },\n refresh() {\n window.location.reload();\n },\n prefetch(_path: string) {\n // No-op: Vite/React Router handles prefetching differently\n },\n };\n}\n\n// ── usePathname ───────────────────────────────────────────────────────────────\n\n/**\n * Returns the path WITHOUT the locale prefix.\n * e.g. /en/know/discover → /know/discover\n */\nexport function usePathname(): string {\n const { pathname } = useLocation();\n // Strip leading /{locale}\n const match = pathname.match(/^\\/[a-z]{2}(\\/.*)?$/);\n if (match) {\n return match[1] ?? '/';\n }\n return pathname;\n}\n\n// ── redirect ─────────────────────────────────────────────────────────────────\n\n/**\n * Render a redirect component. Pass { href, locale } to redirect with locale,\n * or just a string href to redirect to an absolute path.\n */\nexport function redirect(target: string | { href: string; locale?: string }): React.ReactElement {\n const { i18n } = useTranslation();\n const locale = typeof target === 'string' ? (i18n.language || DEFAULT_LOCALE) : (target.locale || i18n.language || DEFAULT_LOCALE);\n const href = typeof target === 'string' ? target : target.href;\n const to = `/${locale}${href.startsWith('/') ? href : `/${href}`}`;\n return <Navigate to={to} replace />;\n}\n\n// ── useParams with locale ────────────────────────────────────────────────────\n\nexport function useLocale(): string {\n const params = useParams<{ locale?: string }>();\n const { i18n } = useTranslation();\n const localeFromParams = params.locale;\n if (localeFromParams && isSupportedLocale(localeFromParams)) {\n return localeFromParams;\n }\n return i18n.language || DEFAULT_LOCALE;\n}\n"],"names":["Link","React","to","props","ref","i18n","useTranslation","params","useParams","locale","DEFAULT_LOCALE","target","RouterLink","useRouter","navigate","useNavigate","prefixLocale","path","options","_path","usePathname","pathname","useLocation","match","useLocale","localeFromParams","isSupportedLocale"],"mappings":"yLAiCO,MAAMA,EAAOC,EAAM,WACxB,SAAc,CAAE,GAAAC,EAAI,GAAGC,CAAA,EAASC,EAAK,CACnC,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EACTC,EAASJ,EAAK,UAAYE,EAAO,QAAUG,EAC3CC,EAAS,OAAOT,GAAO,SAAW,IAAIO,CAAM,GAAGP,EAAG,WAAW,GAAG,EAAIA,EAAK,IAAIA,CAAE,EAAE,GAAKA,EAC5F,aAAQU,EAAA,CAAW,IAAAR,EAAU,GAAIO,EAAS,GAAGR,EAAO,CACtD,CACF,EAMO,SAASU,GAAY,CAC1B,MAAMC,EAAWC,EAAA,EACX,CAAE,KAAAV,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EAEf,SAASQ,EAAaC,EAAcR,EAAyB,CAE3D,MAAO,IADMA,GAAUJ,EAAK,UAAYE,EAAO,QAAUG,CAC1C,GAAGO,EAAK,WAAW,GAAG,EAAIA,EAAO,IAAIA,CAAI,EAAE,EAC5D,CAEA,MAAO,CACL,KAAKA,EAAcC,EAAyB,CAC1CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,CAAC,CAC9C,EACA,QAAQD,EAAcC,EAAyB,CAC7CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,EAAG,CAAE,QAAS,GAAM,CACjE,EACA,MAAO,CACLJ,EAAS,EAAE,CACb,EACA,SAAU,CACRA,EAAS,CAAC,CACZ,EACA,SAAU,CACR,OAAO,SAAS,OAAA,CAClB,EACA,SAASK,EAAe,CAExB,CAAA,CAEJ,CAQO,SAASC,GAAsB,CACpC,KAAM,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfC,EAAQF,EAAS,MAAM,qBAAqB,EAClD,OAAIE,EACKA,EAAM,CAAC,GAAK,IAEdF,CACT,CAkBO,SAASG,GAAoB,CAClC,MAAMjB,EAASC,EAAA,EACT,CAAE,KAAAH,CAAA,EAASC,EAAA,EACXmB,EAAmBlB,EAAO,OAChC,OAAIkB,GAAoBC,EAAkBD,CAAgB,EACjDA,EAEFpB,EAAK,UAAYK,CAC1B"}
1
+ {"version":3,"file":"routing-DDJ3KSPT.js","sources":["../../src/i18n/routing.tsx"],"sourcesContent":["/**\n * Routing abstraction layer — React Router implementation\n *\n * All call sites import from @/i18n/routing and do not need to change\n * when the underlying router changes.\n *\n * Key behaviours:\n * - Link: locale-prefixed anchor rendered via react-router-dom\n * - useRouter: locale-aware push/replace/back\n * - usePathname: returns path WITHOUT locale prefix\n * - redirect: programmatic navigation without locale prefix\n */\n\nimport React from 'react';\nimport {\n Link as RouterLink,\n useNavigate,\n useLocation,\n useParams,\n Navigate,\n} from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { SUPPORTED_LOCALES, DEFAULT_LOCALE, isSupportedLocale } from './config';\n\nexport { SUPPORTED_LOCALES, DEFAULT_LOCALE };\n\n// ── Link ─────────────────────────────────────────────────────────────────────\n\ntype LinkProps = React.ComponentProps<typeof RouterLink>;\n\n/**\n * Locale-aware Link. Prepends the current locale to the href.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function Link({ to, ...props }, ref) {\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n const locale = i18n.language || params.locale || DEFAULT_LOCALE;\n const target = typeof to === 'string' ? `/${locale}${to.startsWith('/') ? to : `/${to}`}` : to;\n return <RouterLink ref={ref} to={target} {...props} />;\n },\n);\n\n// ── useRouter ─────────────────────────────────────────────────────────────────\n\ntype RouterOptions = { locale?: string };\n\nexport function useRouter() {\n const navigate = useNavigate();\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n\n function prefixLocale(path: string, locale?: string): string {\n const lang = locale || i18n.language || params.locale || DEFAULT_LOCALE;\n return `/${lang}${path.startsWith('/') ? path : `/${path}`}`;\n }\n\n return {\n push(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale));\n },\n replace(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale), { replace: true });\n },\n back() {\n navigate(-1);\n },\n forward() {\n navigate(1);\n },\n refresh() {\n window.location.reload();\n },\n prefetch(_path: string) {\n // No-op: Vite/React Router handles prefetching differently\n },\n };\n}\n\n// ── usePathname ───────────────────────────────────────────────────────────────\n\n/**\n * Returns the path WITHOUT the locale prefix.\n * e.g. /en/know/discover → /know/discover\n */\nexport function usePathname(): string {\n const { pathname } = useLocation();\n // Strip leading /{locale}\n const match = pathname.match(/^\\/[a-z]{2}(\\/.*)?$/);\n if (match) {\n return match[1] ?? '/';\n }\n return pathname;\n}\n\n// ── redirect ─────────────────────────────────────────────────────────────────\n\n/**\n * Render a redirect component. Pass { href, locale } to redirect with locale,\n * or just a string href to redirect to an absolute path.\n */\nexport function redirect(target: string | { href: string; locale?: string }): React.ReactElement {\n const { i18n } = useTranslation();\n const locale = typeof target === 'string' ? (i18n.language || DEFAULT_LOCALE) : (target.locale || i18n.language || DEFAULT_LOCALE);\n const href = typeof target === 'string' ? target : target.href;\n const to = `/${locale}${href.startsWith('/') ? href : `/${href}`}`;\n return <Navigate to={to} replace />;\n}\n\n// ── useParams with locale ────────────────────────────────────────────────────\n\nexport function useLocale(): string {\n const params = useParams<{ locale?: string }>();\n const { i18n } = useTranslation();\n const localeFromParams = params.locale;\n if (localeFromParams && isSupportedLocale(localeFromParams)) {\n return localeFromParams;\n }\n return i18n.language || DEFAULT_LOCALE;\n}\n"],"names":["Link","React","to","props","ref","i18n","useTranslation","params","useParams","locale","DEFAULT_LOCALE","target","RouterLink","useRouter","navigate","useNavigate","prefixLocale","path","options","_path","usePathname","pathname","useLocation","match","useLocale","localeFromParams","isSupportedLocale"],"mappings":"yLAiCO,MAAMA,EAAOC,EAAM,WACxB,SAAc,CAAE,GAAAC,EAAI,GAAGC,CAAA,EAASC,EAAK,CACnC,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EACTC,EAASJ,EAAK,UAAYE,EAAO,QAAUG,EAC3CC,EAAS,OAAOT,GAAO,SAAW,IAAIO,CAAM,GAAGP,EAAG,WAAW,GAAG,EAAIA,EAAK,IAAIA,CAAE,EAAE,GAAKA,EAC5F,aAAQU,EAAA,CAAW,IAAAR,EAAU,GAAIO,EAAS,GAAGR,EAAO,CACtD,CACF,EAMO,SAASU,GAAY,CAC1B,MAAMC,EAAWC,EAAA,EACX,CAAE,KAAAV,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EAEf,SAASQ,EAAaC,EAAcR,EAAyB,CAE3D,MAAO,IADMA,GAAUJ,EAAK,UAAYE,EAAO,QAAUG,CAC1C,GAAGO,EAAK,WAAW,GAAG,EAAIA,EAAO,IAAIA,CAAI,EAAE,EAC5D,CAEA,MAAO,CACL,KAAKA,EAAcC,EAAyB,CAC1CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,CAAC,CAC9C,EACA,QAAQD,EAAcC,EAAyB,CAC7CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,EAAG,CAAE,QAAS,GAAM,CACjE,EACA,MAAO,CACLJ,EAAS,EAAE,CACb,EACA,SAAU,CACRA,EAAS,CAAC,CACZ,EACA,SAAU,CACR,OAAO,SAAS,OAAA,CAClB,EACA,SAASK,EAAe,CAExB,CAAA,CAEJ,CAQO,SAASC,GAAsB,CACpC,KAAM,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfC,EAAQF,EAAS,MAAM,qBAAqB,EAClD,OAAIE,EACKA,EAAM,CAAC,GAAK,IAEdF,CACT,CAkBO,SAASG,GAAoB,CAClC,MAAMjB,EAASC,EAAA,EACT,CAAE,KAAAH,CAAA,EAASC,EAAA,EACXmB,EAAmBlB,EAAO,OAChC,OAAIkB,GAAoBC,EAAkBD,CAAgB,EACjDA,EAEFpB,EAAK,UAAYK,CAC1B"}
@@ -1,2 +1,2 @@
1
- import{j as s}from"./query-B6BuIB0M.js";import{R as a}from"./vendor-DJo4KD8w.js";import{L as n}from"./routing-C43HVxNw.js";const i=a.forwardRef(function({href:e,...o},t){return s.jsx(n,{ref:t,to:e,...o})}),u=i,d={resourceDetail:r=>`/know/resource/${r}`,userProfile:r=>`/users/${r}`,search:r=>`/search?q=${encodeURIComponent(r)}`,home:()=>"/",about:()=>"/about",privacy:()=>"/privacy",terms:()=>"/terms",knowledge:()=>"/know",moderate:()=>"/moderate",admin:()=>"/admin"};export{u as L,d as r};
2
- //# sourceMappingURL=routing-swMLj8Z8.js.map
1
+ import{j as s}from"./query-B6BuIB0M.js";import{R as a}from"./vendor-DJo4KD8w.js";import{L as n}from"./routing-DDJ3KSPT.js";const i=a.forwardRef(function({href:e,...o},t){return s.jsx(n,{ref:t,to:e,...o})}),u=i,d={resourceDetail:r=>`/know/resource/${r}`,userProfile:r=>`/users/${r}`,search:r=>`/search?q=${encodeURIComponent(r)}`,home:()=>"/",about:()=>"/about",privacy:()=>"/privacy",terms:()=>"/terms",knowledge:()=>"/know",moderate:()=>"/moderate",admin:()=>"/admin"};export{u as L,d as r};
2
+ //# sourceMappingURL=routing-NOxgO9NV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routing-swMLj8Z8.js","sources":["../../src/lib/routing.tsx"],"sourcesContent":["/**\n * Routing configuration for Semiont frontend\n *\n * This module provides the concrete implementation of the RoutingContext\n * interface for the React Router-based frontend application.\n */\n\nimport React from 'react';\nimport { Link as NextLink } from '@/i18n/routing';\nimport type { RouteBuilder, LinkComponentProps } from '@semiont/react-ui';\nimport type { ComponentType } from 'react';\n\n/**\n * Adapter: react-ui components pass `href`, but React Router Link expects `to`.\n */\nconst LinkAdapter = React.forwardRef<HTMLAnchorElement, LinkComponentProps>(\n function LinkAdapter({ href, ...props }, ref) {\n return <NextLink ref={ref} to={href} {...props} />;\n }\n);\nexport const Link: ComponentType<LinkComponentProps> = LinkAdapter as any;\n\n/**\n * Route builder for Semiont frontend\n */\nexport const routes: RouteBuilder = {\n resourceDetail: (id: string) => `/know/resource/${id}`,\n userProfile: (id: string) => `/users/${id}`,\n search: (query: string) => `/search?q=${encodeURIComponent(query)}`,\n home: () => '/',\n about: () => '/about',\n privacy: () => '/privacy',\n terms: () => '/terms',\n knowledge: () => '/know',\n moderate: () => '/moderate',\n admin: () => '/admin',\n};\n"],"names":["LinkAdapter","React","href","props","ref","NextLink","Link","routes","id","query"],"mappings":"2HAeA,MAAMA,EAAcC,EAAM,WACxB,SAAqB,CAAE,KAAAC,EAAM,GAAGC,CAAA,EAASC,EAAK,CAC5C,aAAQC,EAAA,CAAS,IAAAD,EAAU,GAAIF,EAAO,GAAGC,EAAO,CAClD,CACF,EACaG,EAA0CN,EAK1CO,EAAuB,CAClC,eAAiBC,GAAe,kBAAkBA,CAAE,GACpD,YAAcA,GAAe,UAAUA,CAAE,GACzC,OAASC,GAAkB,aAAa,mBAAmBA,CAAK,CAAC,GACjE,KAAM,IAAM,IACZ,MAAO,IAAM,SACb,QAAS,IAAM,WACf,MAAO,IAAM,SACb,UAAW,IAAM,QACjB,SAAU,IAAM,YAChB,MAAO,IAAM,QACf"}
1
+ {"version":3,"file":"routing-NOxgO9NV.js","sources":["../../src/lib/routing.tsx"],"sourcesContent":["/**\n * Routing configuration for Semiont frontend\n *\n * This module provides the concrete implementation of the RoutingContext\n * interface for the React Router-based frontend application.\n */\n\nimport React from 'react';\nimport { Link as NextLink } from '@/i18n/routing';\nimport type { RouteBuilder, LinkComponentProps } from '@semiont/react-ui';\nimport type { ComponentType } from 'react';\n\n/**\n * Adapter: react-ui components pass `href`, but React Router Link expects `to`.\n */\nconst LinkAdapter = React.forwardRef<HTMLAnchorElement, LinkComponentProps>(\n function LinkAdapter({ href, ...props }, ref) {\n return <NextLink ref={ref} to={href} {...props} />;\n }\n);\nexport const Link: ComponentType<LinkComponentProps> = LinkAdapter as any;\n\n/**\n * Route builder for Semiont frontend\n */\nexport const routes: RouteBuilder = {\n resourceDetail: (id: string) => `/know/resource/${id}`,\n userProfile: (id: string) => `/users/${id}`,\n search: (query: string) => `/search?q=${encodeURIComponent(query)}`,\n home: () => '/',\n about: () => '/about',\n privacy: () => '/privacy',\n terms: () => '/terms',\n knowledge: () => '/know',\n moderate: () => '/moderate',\n admin: () => '/admin',\n};\n"],"names":["LinkAdapter","React","href","props","ref","NextLink","Link","routes","id","query"],"mappings":"2HAeA,MAAMA,EAAcC,EAAM,WACxB,SAAqB,CAAE,KAAAC,EAAM,GAAGC,CAAA,EAASC,EAAK,CAC5C,aAAQC,EAAA,CAAS,IAAAD,EAAU,GAAIF,EAAO,GAAGC,EAAO,CAClD,CACF,EACaG,EAA0CN,EAK1CO,EAAuB,CAClC,eAAiBC,GAAe,kBAAkBA,CAAE,GACpD,YAAcA,GAAe,UAAUA,CAAE,GACzC,OAASC,GAAkB,aAAa,mBAAmBA,CAAK,CAAC,GACjE,KAAM,IAAM,IACZ,MAAO,IAAM,SACb,QAAS,IAAM,WACf,MAAO,IAAM,SACb,UAAW,IAAM,QACjB,SAAU,IAAM,YAChB,MAAO,IAAM,QACf"}
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
12
12
  <link rel="manifest" href="/favicons/site.webmanifest" />
13
13
  <meta name="theme-color" content="#00FFFF" />
14
- <script type="module" crossorigin src="/assets/index-CqzrFNnV.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-DESF7by4.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-DJo4KD8w.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/query-B6BuIB0M.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/i18n-BbpF47i1.js">