@x-wave/blog 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-wave/blog",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -19,6 +19,10 @@
19
19
  "import": "./types/index.js",
20
20
  "types": "./types/index.d.ts"
21
21
  },
22
+ "./vite-config": {
23
+ "import": "./vite-config/index.js",
24
+ "types": "./vite-config/index.d.ts"
25
+ },
22
26
  "./styles": {
23
27
  "import": "./styles/index.css"
24
28
  }
@@ -32,17 +36,16 @@
32
36
  "dependencies": {
33
37
  "@phosphor-icons/react": "^2.1.7",
34
38
  "i18next": "^25.8.8",
35
- "next-themes": "^0.4.6",
36
39
  "react-markdown": "^10.1.0",
37
40
  "remark-gfm": "^4.0.1",
38
41
  "styles": "workspace:*",
39
42
  "types": "workspace:*"
40
43
  },
41
44
  "peerDependencies": {
42
- "next": ">=15.0.0",
43
45
  "react": "^19.0.0",
44
46
  "react-dom": "^19.0.0",
45
- "react-i18next": "^15.7.3"
47
+ "react-i18next": "^15.7.3",
48
+ "react-router-dom": "^7.9.1"
46
49
  },
47
50
  "devDependencies": {
48
51
  "@vitejs/plugin-react-swc": "^3.10.1",
package/styles/index.css CHANGED
@@ -180,7 +180,7 @@
180
180
  /*
181
181
  Dark mode
182
182
  */
183
- .theme-dark {
183
+ .dark {
184
184
  --xw-background: oklch(0.145 0 0);
185
185
  --xw-foreground: oklch(0.985 0 0);
186
186
  --xw-card: oklch(0.205 0 0);
@@ -214,4 +214,4 @@
214
214
  --xw-sidebar-border: oklch(1 0 0 / 10%);
215
215
  --xw-sidebar-ring: oklch(0.556 0 0);
216
216
  }
217
- ._tabContainer_wncka_1{display:inline-flex;background-color:var(--xw-card);border:1px solid var(--xw-border);border-radius:.5rem;margin-top:.5rem;margin-bottom:.5rem;overflow:hidden}._tab_wncka_1{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._tab_wncka_1:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._tab_wncka_1:disabled{pointer-events:none;opacity:.5}._tab_wncka_1{padding:.5rem 1rem;font-size:.87rem;font-weight:500;background-color:transparent;border:none;border-radius:0;color:var(--xw-muted-foreground);cursor:pointer;white-space:nowrap}._tab_wncka_1:not(:last-child){border-right:1px solid var(--xw-border)}._tab_wncka_1._active_wncka_46{background-color:var(--xw-accent);color:var(--xw-accent-foreground)}._tab_wncka_1:hover:not(._active_wncka_46){background-color:var(--xw-muted);color:var(--xw-foreground)}._tab_wncka_1:focus-visible{outline:2px solid var(--xw-accent);outline-offset:-2px}._articleNavigation_kz84g_1{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--xw-border)}._navContainer_kz84g_7{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:767px){._navContainer_kz84g_7{grid-template-columns:1fr;gap:1rem}}@media(min-width:1024px){._navContainer_kz84g_7{gap:1.5rem}}._navLink_kz84g_24{display:flex;padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;text-decoration:none;color:var(--xw-foreground);background-color:var(--xw-background);transition:all .2s ease;box-shadow:0 1px 3px #0000000d}._navLink_kz84g_24:hover{border-color:var(--xw-ring);background-color:var(--xw-card);transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}._navLink_kz84g_24:first-child{justify-content:flex-start}@media(max-width:767px){._navLink_kz84g_24:first-child{justify-content:center;text-align:center}}._navLink_kz84g_24:last-child{justify-content:flex-end;text-align:right}@media(max-width:767px){._navLink_kz84g_24:last-child{justify-content:center;text-align:center}}._navLinkContent_kz84g_61{display:flex;align-items:center;gap:.75rem;min-width:0;width:100%}@media(max-width:767px){._navLinkContent_kz84g_61{justify-content:center;flex-direction:column;text-align:center}}._navIcon_kz84g_76{display:flex;align-items:center;color:var(--xw-primary);flex-shrink:0}._navText_kz84g_83{display:flex;flex-direction:column;gap:.25rem;min-width:0}._navLabel_kz84g_90{font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--xw-muted-foreground)}._navTitle_kz84g_98{font-size:.875rem;font-weight:400;color:var(--xw-foreground);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;line-height:1.4}@media(min-width:1024px){._navTitle_kz84g_98{font-size:.9rem}}._blogSidebar_1ik3q_1{position:sticky;top:0;align-self:flex-start;height:fit-content;max-height:calc(100vh - 8rem);overflow-y:auto;padding:0 0 2rem 1.5rem;margin-left:2rem;background:transparent;border-left:1px solid var(--xw-border);flex-shrink:0;width:250px}@media(max-width:1024px){._blogSidebar_1ik3q_1{display:none}}._section_1ik3q_21{margin-bottom:2rem}._section_1ik3q_21:last-child{margin-bottom:0}._sectionTitle_1ik3q_28{font-size:.75rem;font-weight:600;color:var(--xw-muted-foreground);letter-spacing:.05em;margin:0 0 1rem}._linksList_1ik3q_36{display:flex;flex-direction:column;gap:.25rem}._link_1ik3q_36{display:flex;align-items:center;gap:.5rem;padding:.5rem;color:var(--xw-foreground);text-decoration:none;border-radius:.25rem;transition:all .15s cubic-bezier(.4,0,.2,1);font-size:.875rem}._link_1ik3q_36:hover{color:var(--xw-primary)}._link_1ik3q_36 svg{flex-shrink:0}._breadcrumb_rarc4_1{margin-bottom:1rem}._breadcrumbList_rarc4_5{display:flex;align-items:center;list-style:none;margin:0;padding:0;font-size:.875rem;color:var(--xw-muted-foreground)}._breadcrumbItem_rarc4_15{display:flex;align-items:center;gap:.25rem}._breadcrumbLink_rarc4_21{background:none;border:none;cursor:pointer;color:var(--xw-link);text-decoration:none;font-size:inherit;padding:0;font-weight:500;transition:color .2s ease}._breadcrumbLink_rarc4_21:hover{color:var(--xw-primary);text-decoration:underline}._breadcrumbLink_rarc4_21:focus-visible{outline:2px solid var(--xw-primary);outline-offset:2px}._breadcrumbSeparator_rarc4_41{color:var(--xw-border);margin:0 .5rem}._breadcrumbCurrent_rarc4_46{color:var(--xw-foreground);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:20rem}@media(max-width:767px){._breadcrumbCurrent_rarc4_46{max-width:10rem}}._metadata_bsge0_1{display:flex;align-items:center;gap:1.5rem;margin-top:1rem;margin-bottom:1rem}._author_bsge0_9,._date_bsge0_10{display:flex;align-items:center;gap:.5rem;font-weight:500;font-size:.9rem}._author_bsge0_9 svg,._date_bsge0_10 svg{flex-shrink:0}._date_bsge0_10{color:var(--xw-text-secondary, #666)}._tableOfContents_9ofak_1{position:sticky;top:5rem;align-self:flex-start;height:fit-content;max-height:calc(100vh - 8rem);overflow-y:auto;padding:2rem 0 2rem 1.5rem;margin-left:2rem;background:transparent;border-left:1px solid var(--xw-border);flex-shrink:0;max-width:250px}@media(max-width:1024px){._tableOfContents_9ofak_1{display:none}}._header_9ofak_21{margin-bottom:1rem}._title_9ofak_25{font-size:.75rem;font-weight:500;color:var(--xw-muted-foreground);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}._nav_9ofak_34 ul{margin:0;padding:0;list-style:none}._list_9ofak_40{display:flex;flex-direction:column;gap:.125rem;margin:0}._link_9ofak_47{display:block;width:100%;padding:.25rem 0;text-align:left;background:none;border:none;cursor:pointer;font-size:.875rem;line-height:1.4;color:var(--xw-muted-foreground);text-decoration:none;border-radius:.25rem;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative;font-family:inherit}._link_9ofak_47:hover{color:var(--xw-foreground)}._link_9ofak_47:focus{outline:none;color:var(--xw-foreground)}._link_9ofak_47._active_9ofak_71{color:var(--xw-primary);font-weight:500}._link_9ofak_47._active_9ofak_71:before{content:"";position:absolute;left:-1.5rem;top:50%;transform:translateY(-50%);width:1px;height:1rem;background-color:var(--xw-primary);border-radius:.5px}._level1_9ofak_87{font-weight:500;padding-left:0;margin-bottom:.125rem}._level2_9ofak_93{padding-left:.5rem;margin-bottom:.0625rem}._level3_9ofak_98{padding-left:1rem;font-size:.8125rem;margin-bottom:.0625rem}._level4_9ofak_104{padding-left:1.5rem;font-size:.8125rem;margin-bottom:.0625rem}._level5_9ofak_110{padding-left:2rem;font-size:.75rem;margin-bottom:.0625rem}._level6_9ofak_116{padding-left:2.5rem;font-size:.75rem;margin-bottom:.0625rem}._tableOfContents_9ofak_1::-webkit-scrollbar{width:4px}._tableOfContents_9ofak_1::-webkit-scrollbar-track{background:transparent}._tableOfContents_9ofak_1::-webkit-scrollbar-thumb{background:var(--xw-border);border-radius:2px}._tableOfContents_9ofak_1::-webkit-scrollbar-thumb:hover{background:var(--xw-muted-foreground)}._overlay_1e1d4_1{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;animation:_fadeIn_1e1d4_1 .2s ease;height:100vh}@keyframes _fadeIn_1e1d4_1{0%{opacity:0}to{opacity:1}}._modal_1e1d4_26{width:90%;max-width:600px;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.75rem;box-shadow:0 20px 60px #0000004d;animation:_slideIn_1e1d4_1 .2s ease;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}@keyframes _slideIn_1e1d4_1{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}._header_1e1d4_50{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--xw-border)}._title_1e1d4_58{font-size:1.125rem;font-weight:600;color:var(--xw-foreground);margin:0}._closeButton_1e1d4_65{background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:.25rem;transition:all .2s ease}._closeButton_1e1d4_65 svg{width:1.25rem;height:1.25rem}._closeButton_1e1d4_65:hover{background:var(--xw-secondary);color:var(--xw-foreground)}._results_1e1d4_86{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}._resultsList_1e1d4_94{list-style:none;padding:0;margin:0}._resultItem_1e1d4_100{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;width:100%;padding:.75rem 1rem;background:none;border:none;border-radius:.5rem;cursor:pointer;text-align:left;transition:all .15s ease;color:var(--xw-foreground)}._resultItem_1e1d4_100:hover{background:var(--xw-secondary)}._resultTitle_1e1d4_119{font-weight:500;font-size:.95rem}._resultSlug_1e1d4_124{font-size:.8rem;color:var(--xw-muted-foreground);opacity:.8}._noResults_1e1d4_130{padding:3rem 1rem;text-align:center;color:var(--xw-muted-foreground);font-size:.9rem}._tags_11t8a_1{display:flex;align-items:center;gap:.75rem;margin:2rem 0 1rem;padding:1rem 0 0;border-top:1px solid var(--xw-border)}._tags_11t8a_1._compact_11t8a_9{margin:2rem 0 1rem;padding:1rem 0 0;border-top:1px solid var(--xw-border)}._tagLabel_11t8a_15{display:flex;align-items:center;gap:.5rem;color:var(--xw-muted-foreground);font-size:.875rem;font-weight:500;white-space:nowrap}._tagIcon_11t8a_25{width:1.125rem;height:1.125rem}._tagList_11t8a_30{display:flex;flex-wrap:wrap;gap:.5rem}._tag_11t8a_1{display:inline-flex;align-items:center;padding:.25rem .75rem;background:none;border:1px solid var(--xw-border);border-radius:.75rem;color:var(--xw-muted-foreground);font-size:.8rem;font-weight:400;cursor:pointer;transition:all .2s ease}._tag_11t8a_1:hover{color:var(--xw-foreground);border-color:var(--xw-ring)}._contentPage_818m0_1{flex:1;max-width:48rem;margin:0;padding:0 0 2rem}@media(max-width:767px){._contentPage_818m0_1{padding:1rem;max-width:none}}@media(max-width:1024px){._contentPage_818m0_1{max-width:none;padding:2rem}}._metadata_818m0_20{display:flex;gap:1rem;align-items:center;padding:.5rem 0 1rem;color:var(--xw-muted-foreground);font-size:.875rem;border-bottom:1px solid var(--xw-border);margin-bottom:1rem}._metadata_818m0_20 ._author_818m0_30,._metadata_818m0_20 ._date_818m0_31{display:flex;align-items:center;gap:.5rem}._metadata_818m0_20 ._author_818m0_30{font-weight:500;color:var(--xw-foreground)}@media(max-width:767px){._metadata_818m0_20{flex-direction:column;align-items:flex-start;gap:.25rem}}._loadingContainer_818m0_48,._errorContainer_818m0_49{display:flex;align-items:center;justify-content:center;height:16rem}._loadingContainer_818m0_48{flex-direction:column;align-items:flex-start;gap:1.5rem;padding:2rem 0}@keyframes _shimmer_818m0_1{0%{background-position:-1000px 0}to{background-position:1000px 0}}._skeletonTitle_818m0_71{width:60%;height:2.5rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.5rem}._skeletonParagraph_818m0_80{width:100%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.25rem;margin-bottom:.5rem}._skeletonParagraph_818m0_80:not(:last-child){margin-bottom:1rem}._skeletonParagraphShort_818m0_93{width:70%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.25rem}._loadingText_818m0_102{color:var(--xw-muted-foreground);font-size:1rem}._errorText_818m0_107{color:var(--xw-destructive);font-size:1rem}._mdxContent_818m0_112{max-width:none}._mdxContent_818m0_112 h1{font-size:1.875rem;font-weight:600;letter-spacing:-.025em;margin-bottom:1.5rem;border-bottom:1px solid var(--xw-border);padding-bottom:.75rem;line-height:1.2;scroll-margin-top:5rem}._mdxContent_818m0_112 h1._withMetadata_818m0_125{border-bottom:none;padding-bottom:0;margin-bottom:.5rem}._mdxContent_818m0_112 h1 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h1 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h1 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h2{font-size:1.5rem;font-weight:500;letter-spacing:-.02em;margin-bottom:1rem;margin-top:2.5rem;border-bottom:1px solid var(--xw-border);padding-bottom:.5rem;line-height:1.3;scroll-margin-top:5rem}._mdxContent_818m0_112 h2 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h2 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h2 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h3{font-size:1.25rem;font-weight:500;letter-spacing:-.015em;margin-bottom:.75rem;margin-top:2rem;line-height:1.4;scroll-margin-top:5rem}._mdxContent_818m0_112 h3 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h3 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h3 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h4{font-size:1.125rem;font-weight:500;letter-spacing:-.01em;margin-bottom:.5rem;margin-top:1.5rem;line-height:1.4;scroll-margin-top:5rem}._mdxContent_818m0_112 h4 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h4 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h4 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h5{font-size:1rem;font-weight:500;margin-bottom:.5rem;margin-top:1.25rem;line-height:1.5}._mdxContent_818m0_112 h6{font-size:.875rem;font-weight:500;margin-bottom:.5rem;margin-top:1rem;line-height:1.5}._mdxContent_818m0_112 p{font-size:1rem;line-height:1.65;margin-bottom:1rem;color:var(--xw-foreground)}._mdxContent_818m0_112 ul,._mdxContent_818m0_112 ol{margin-bottom:1rem;padding-left:1.5rem}._mdxContent_818m0_112 ul li,._mdxContent_818m0_112 ol li{font-size:1rem;line-height:1.65;margin-bottom:.375rem}._mdxContent_818m0_112 ul ul,._mdxContent_818m0_112 ul ol,._mdxContent_818m0_112 ol ul,._mdxContent_818m0_112 ol ol{margin-top:.375rem;margin-bottom:.375rem}._mdxContent_818m0_112 ul{list-style-type:disc}._mdxContent_818m0_112 ol{list-style-type:decimal}._mdxContent_818m0_112 code{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;background-color:var(--xw-muted);padding:.1875rem .4375rem;border-radius:.25rem;color:var(--xw-foreground);font-weight:500}._mdxContent_818m0_112 pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;background-color:var(--xw-muted);padding:1.25rem;border-radius:.75rem;overflow-x:auto;margin:1.5rem 0;position:relative;border:1px solid var(--xw-border)}._mdxContent_818m0_112 pre code{background-color:transparent;padding:0;color:inherit;font-weight:400}._mdxContent_818m0_112 ._codeBlock_818m0_300{position:relative;margin-bottom:1.5rem}._mdxContent_818m0_112 ._codeLanguage_818m0_304{position:absolute;top:.5rem;right:.5rem;font-size:.75rem;color:var(--xw-muted-foreground);background-color:var(--xw-background);padding:.25rem .5rem;border-radius:.25rem;border:1px solid var(--xw-border)}._mdxContent_818m0_112 blockquote{border-left:3px solid var(--xw-accent);padding-left:1rem;font-style:italic;color:var(--xw-muted-foreground);margin-bottom:1rem;margin-top:1rem}._mdxContent_818m0_112 blockquote p{margin-bottom:.5rem}._mdxContent_818m0_112 blockquote p:last-child{margin-bottom:0}._mdxContent_818m0_112 a{color:var(--xw-link);text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1);border-bottom:1px solid transparent}._mdxContent_818m0_112 a:hover{color:color-mix(in oklch,var(--xw-link) 80%,transparent);border-bottom-color:currentColor}._mdxContent_818m0_112 strong{font-weight:600}._mdxContent_818m0_112 em{font-style:italic}._mdxContent_818m0_112 table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.95rem}._mdxContent_818m0_112 table th,._mdxContent_818m0_112 table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--xw-border);line-height:1.4}._mdxContent_818m0_112 table th{font-weight:500;background-color:var(--xw-muted);font-size:.875rem;letter-spacing:.025em}._mdxContent_818m0_112 table tbody tr:hover{background-color:color-mix(in oklch,var(--xw-muted) 50%,transparent)}._mdxContent_818m0_112 img{max-width:100%;height:auto;border-radius:.5rem;margin:1.5rem 0;border:1px solid var(--xw-border)}._mdxContent_818m0_112 hr{border:none;border-top:1px solid var(--xw-border);margin:2rem 0}._searchButton_1k9sl_1{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:.375rem;background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;transition:all .2s ease;font-size:.875rem}._searchButton_1k9sl_1:hover{border-color:var(--xw-input)}._searchButton_1k9sl_1 ._searchIcon_1k9sl_17{width:1rem;height:1rem;opacity:.6}@media(max-width:768px){._searchButton_1k9sl_1 ._searchHint_1k9sl_23{display:none}}._searchButton_1k9sl_1 ._kbd_1k9sl_27{display:none;padding:.125rem .375rem;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.25rem;font-size:.75rem;font-family:monospace}@media(min-width:768px){._searchButton_1k9sl_1 ._kbd_1k9sl_27{display:block}}._searchOverlay_1k9sl_42{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;animation:_fadeIn_1k9sl_1 .2s ease;height:100vh}@keyframes _fadeIn_1k9sl_1{0%{opacity:0}to{opacity:1}}._searchModal_1k9sl_67{width:90%;max-width:600px;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.75rem;box-shadow:0 20px 60px #0000004d;animation:_slideIn_1k9sl_1 .2s ease;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}@keyframes _slideIn_1k9sl_1{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}._searchHeader_1k9sl_91{display:flex;align-items:center;gap:.75rem;padding:1rem 1.25rem;border-bottom:1px solid var(--xw-border)}._searchHeader_1k9sl_91 ._searchIcon_1k9sl_17{width:1.25rem;height:1.25rem;opacity:.5;flex-shrink:0}._searchInput_1k9sl_105{flex:1;border:none;background:transparent;color:var(--xw-foreground);font-size:1rem;outline:none}._searchInput_1k9sl_105:focus{border:none;outline:none;box-shadow:none}._searchInput_1k9sl_105::placeholder{color:var(--xw-muted-foreground);opacity:.6}._closeButton_1k9sl_123{background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:.25rem;transition:all .2s ease}._closeButton_1k9sl_123 svg{width:1.25rem;height:1.25rem}._closeButton_1k9sl_123:hover{background:var(--xw-secondary);color:var(--xw-foreground)}._searchResults_1k9sl_144{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}._resultsList_1k9sl_152{list-style:none;padding:0;margin:0}._resultItem_1k9sl_158{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;width:100%;padding:.75rem 1rem;background:none;border:none;border-radius:.5rem;cursor:pointer;text-align:left;transition:all .15s ease;color:var(--xw-foreground)}._resultItem_1k9sl_158:hover,._resultItem_1k9sl_158._selected_1k9sl_173{background:var(--xw-secondary)}._resultItem_1k9sl_158 ._resultTitle_1k9sl_176{font-weight:500;font-size:.95rem}._resultItem_1k9sl_158 ._resultSlug_1k9sl_180{font-size:.8rem;color:var(--xw-muted-foreground);opacity:.8}._noResults_1k9sl_186{padding:3rem 1rem;text-align:center;color:var(--xw-muted-foreground);font-size:.9rem}._searchHints_1k9sl_193{display:flex;align-items:center;gap:1.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--xw-border);background:var(--xw-secondary);font-size:.8rem;color:var(--xw-muted-foreground)}@media(max-width:768px){._searchHints_1k9sl_193{flex-direction:column;align-items:flex-start;gap:.5rem}}._searchHints_1k9sl_193 ._hint_1k9sl_210{display:flex;align-items:center;gap:.5rem}._searchHints_1k9sl_193 ._hint_1k9sl_210 kbd{padding:.125rem .375rem;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.25rem;font-size:.75rem;font-family:monospace;min-width:1.5rem;text-align:center}._header_ztexv_1{position:sticky;top:0;z-index:1020;background-color:#fffc;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);height:3.5rem;padding-left:16rem}.theme-dark ._header_ztexv_1{background-color:#2020201a}@supports not (backdrop-filter: blur(12px)){._header_ztexv_1{background-color:var(--xw-background)}}@media(max-width:767px){._header_ztexv_1{padding:0}}._container_ztexv_24{width:100%;max-width:1400px;margin:0 auto;padding:0 1.5rem}@media(max-width:767px){._container_ztexv_24{padding:0 1rem}}._content_ztexv_36{display:flex;align-items:center;justify-content:space-between;height:3.5rem}._leftSection_ztexv_43{display:flex;align-items:center;gap:1rem}._mobileMenuButton_ztexv_49{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._mobileMenuButton_ztexv_49:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._mobileMenuButton_ztexv_49:disabled{pointer-events:none;opacity:.5}._mobileMenuButton_ztexv_49{padding:.5rem;background-color:transparent;color:var(--xw-muted-foreground);border-radius:.5rem;display:none}._mobileMenuButton_ztexv_49:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}@media(max-width:767px){._mobileMenuButton_ztexv_49{display:flex}}._burgerIcon_ztexv_87{width:1.25rem;height:1.25rem}._logo_ztexv_92,._nav_ztexv_98{display:flex;align-items:center;gap:.5rem}@media(max-width:767px){._nav_ztexv_98{gap:.25rem}}._navLink_ztexv_109{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);text-decoration:none;transition:all .15s cubic-bezier(.4,0,.2,1)}._navLink_ztexv_109:hover{color:var(--xw-foreground)}._navLink_ztexv_109:focus{outline:none}._githubIcon_ztexv_128{width:1rem;height:1rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}._externalIcon_ztexv_135{width:1rem;height:1rem;flex-shrink:0}._supportDropdown_ztexv_141,._themeDropdown_ztexv_145{position:relative}._themeButton_ztexv_149{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);background:none;border:none;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}._themeButton_ztexv_149:hover{color:var(--xw-foreground);background-color:var(--xw-muted)}._themeButton_ztexv_149:focus{outline:none}._themeIcon_ztexv_171{width:1.125rem;height:1.125rem;flex-shrink:0}._supportButton_ztexv_177{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);background:none;border:none;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}._supportButton_ztexv_177:hover{color:var(--xw-foreground)}._supportButton_ztexv_177:focus{outline:none}._caretIcon_ztexv_198{width:.875rem;height:.875rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}button[aria-expanded=true] ._caretIcon_ztexv_198{transform:rotate(180deg)}._dropdownMenu_ztexv_208{position:absolute;top:calc(100% + .25rem);right:0;min-width:10rem;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;overflow:hidden}._dropdownItem_ztexv_221{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem 1rem;font-size:.875rem;color:var(--xw-popover-foreground);text-decoration:none;background:none;border:none;cursor:pointer;text-align:left;transition:background-color .15s cubic-bezier(.4,0,.2,1)}._dropdownItem_ztexv_221:hover{background-color:var(--xw-muted)}._dropdownItem_ztexv_221:focus{outline:none;background-color:var(--xw-muted)}._dropdownIcon_ztexv_244{width:1rem;height:1rem;flex-shrink:0}@media(max-width:767px){._logoText_ztexv_251{font-size:1rem}._navLink_ztexv_109{padding:.25rem .5rem;font-size:.8rem;gap:.25rem}._githubIcon_ztexv_128{width:.875rem;height:.875rem}}._backdrop_1a7pu_1{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:1040;opacity:0;visibility:hidden;transition:all .15s cubic-bezier(.4,0,.2,1)}._backdrop_1a7pu_1._open_1a7pu_13{opacity:1;visibility:visible}._mobileMenu_1a7pu_18{position:fixed;top:0;left:0;width:320px;height:100vh;background-color:var(--xw-background);border-right:1px solid var(--xw-border);z-index:1050;transform:translate(-100%);transition:transform .15s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden}._mobileMenu_1a7pu_18._open_1a7pu_13{transform:translate(0)}._header_1a7pu_37{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;border-bottom:1px solid var(--xw-border);flex-shrink:0}._brand_1a7pu_46{flex:1;display:flex;align-items:center;gap:.5rem}._cloudIcon_1a7pu_53{width:1.5rem;height:1.5rem;flex-shrink:0}._cloudIcon_1a7pu_53 .accent{fill:#d33079}._title_1a7pu_62{font-size:1.125rem;font-weight:600;color:var(--xw-foreground);margin:0}._closeButton_1a7pu_69{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._closeButton_1a7pu_69:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._closeButton_1a7pu_69:disabled{pointer-events:none;opacity:.5}._closeButton_1a7pu_69{padding:.5rem;background-color:transparent;color:var(--xw-muted-foreground);border-radius:.5rem}._closeButton_1a7pu_69:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._closeIcon_1a7pu_101{width:1.25rem;height:1.25rem}._languageSection_1a7pu_106{padding:1.5rem;border-bottom:1px solid var(--xw-border);flex-shrink:0}._languageSelect_1a7pu_112{position:relative;width:100%}._languageButton_1a7pu_117{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageButton_1a7pu_117:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageButton_1a7pu_117:disabled{pointer-events:none;opacity:.5}._languageButton_1a7pu_117{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem 1rem;background-color:var(--xw-background);border:1px solid var(--xw-border);color:var(--xw-foreground);gap:.5rem}._languageButton_1a7pu_117:hover,._languageButton_1a7pu_117[aria-expanded=true]{background-color:var(--xw-muted)}._icon_1a7pu_156{width:1rem;height:1rem;flex-shrink:0}._chevron_1a7pu_162{width:1rem;height:1rem;transition:transform .15s cubic-bezier(.4,0,.2,1);margin-left:auto}._languageButton_1a7pu_117[aria-expanded=true] ._chevron_1a7pu_162{transform:rotate(180deg)}._languageDropdown_1a7pu_172{position:absolute;top:100%;left:0;right:0;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;margin-top:.25rem}._languageOption_1a7pu_185{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageOption_1a7pu_185:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageOption_1a7pu_185:disabled{pointer-events:none;opacity:.5}._languageOption_1a7pu_185{width:100%;padding:.5rem 1rem;background-color:transparent;color:var(--xw-foreground);text-align:left;justify-content:flex-start;border-radius:0}._languageOption_1a7pu_185:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}._languageOption_1a7pu_185:last-child{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}._languageOption_1a7pu_185:hover{background-color:var(--xw-muted)}._languageOption_1a7pu_185._selected_1a7pu_226{background-color:var(--xw-accent);color:var(--xw-accent-foreground)}._scrollArea_1a7pu_231{flex:1;overflow-y:auto;padding:1.5rem 0}._navigation_1a7pu_237{padding:0 1.5rem}._section_1a7pu_241{margin-bottom:1rem}._sectionButton_1a7pu_245{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._sectionButton_1a7pu_245:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._sectionButton_1a7pu_245:disabled{pointer-events:none;opacity:.5}._sectionButton_1a7pu_245{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem 1rem;background-color:transparent;color:var(--xw-foreground);font-weight:600;gap:.5rem;border-radius:.5rem}._sectionButton_1a7pu_245:hover{background-color:var(--xw-muted)}._sectionButton_1a7pu_245 ._icon_1a7pu_156{transition:transform .15s cubic-bezier(.4,0,.2,1);margin-left:auto}._sectionButton_1a7pu_245._expanded_1a7pu_285 ._icon_1a7pu_156{transform:rotate(90deg)}._sectionItems_1a7pu_289{margin-top:.5rem;margin-left:1rem;display:flex;flex-direction:column;gap:.25rem}._navItem_1a7pu_297{display:block;padding:.5rem 1rem;border-radius:.5rem;color:var(--xw-muted-foreground);text-decoration:none;transition:all .15s cubic-bezier(.4,0,.2,1);font-size:.875rem}._navItem_1a7pu_297:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._navItem_1a7pu_297._active_1a7pu_310{background-color:var(--xw-accent);color:var(--xw-accent-foreground);font-weight:500}._navItemContent_1a7pu_316{display:flex;align-items:center;gap:.5rem}._navItemTitle_1a7pu_322{flex:1}@media(min-width:1024px){._mobileMenu_1a7pu_18,._backdrop_1a7pu_1{display:none}}._sidebar_10z71_1{position:fixed;top:0;left:0;width:16rem;height:100vh;background-color:var(--xw-sidebar);overflow-y:auto;z-index:1020}@media(max-width:767px){._sidebar_10z71_1{display:none}}._header_10z71_17{position:sticky;top:0;z-index:1020;padding:1rem;background-color:var(--xw-sidebar);display:flex;flex-direction:column;gap:.5rem;padding-bottom:0}._brand_10z71_29{display:flex;align-items:center;gap:.5rem}._cloudIcon_10z71_35{width:1.5rem;height:1.5rem;flex-shrink:0}._cloudIcon_10z71_35 .accent{fill:#d33079}._title_10z71_44{font-size:1rem;font-weight:600;line-height:1.5;margin:0;letter-spacing:-.02em;color:var(--xw-foreground)}._languageSelect_10z71_55{position:relative;margin-top:.25rem;width:100%}._languageButton_10z71_61{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageButton_10z71_61:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageButton_10z71_61:disabled{pointer-events:none;opacity:.5}._languageButton_10z71_61{display:flex;align-items:center;justify-content:space-between;padding:.25rem .5rem;width:100%;gap:.25rem;font-size:.8rem;background:transparent;border:1px solid var(--xw-border);border-radius:.25rem;color:var(--xw-muted-foreground)}._languageButton_10z71_61:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._languageButton_10z71_61 ._icon_10z71_99{width:.875rem;height:.875rem;flex-shrink:0}._languageButton_10z71_61 ._chevron_10z71_104{width:.875rem;height:.875rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}._languageButton_10z71_61[aria-expanded=true] ._chevron_10z71_104{transform:rotate(180deg)}._languageDropdown_10z71_114{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;overflow:hidden}._languageOption_10z71_128{display:block;width:100%;padding:.25rem .5rem;text-align:left;background:none;border:none;color:var(--xw-popover-foreground);font-size:.85rem;cursor:pointer;transition:background-color .15s cubic-bezier(.4,0,.2,1)}._languageOption_10z71_128:hover{background-color:var(--xw-muted)}._languageOption_10z71_128:focus{outline:none;background-color:var(--xw-muted)}._languageOption_10z71_128._selected_10z71_147{background-color:var(--xw-muted);color:var(--xw-foreground)}._scrollArea_10z71_152{height:calc(100vh - 120px);padding:1rem .5rem 1rem 1rem;overflow-y:auto}._navigation_10z71_158{display:flex;flex-direction:column;gap:.125rem}._skeletonPulse_10z71_164{background:var(--xw-border);border-radius:.25rem;animation:_skeleton-pulse_10z71_1 1.4s ease-in-out infinite}._skeletonSectionTitle_10z71_170{height:.85rem;margin:.25rem .5rem;width:65%}._skeletonItem_10z71_176{height:.85rem;margin:.25rem .5rem;width:85%}._section_10z71_182{display:flex;flex-direction:column;gap:0}._sectionButton_10z71_188{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._sectionButton_10z71_188:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._sectionButton_10z71_188:disabled{pointer-events:none;opacity:.5}._sectionButton_10z71_188{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.25rem .5rem;font-weight:500;font-size:.85rem;color:var(--xw-muted-foreground);background:transparent;text-align:left;letter-spacing:-.01em;border:none}._sectionButton_10z71_188:hover{color:var(--xw-foreground)}._sectionButton_10z71_188 ._icon_10z71_99{width:.875rem;height:.875rem;transition:transform .15s cubic-bezier(.4,0,.2,1)}._sectionButton_10z71_188._expanded_10z71_231 ._icon_10z71_99{transform:rotate(90deg)}._sectionItems_10z71_235{margin-top:.25rem;padding-left:1rem;display:flex;flex-direction:column;gap:.125rem}._navItem_10z71_243{display:block;width:100%;padding:.25rem .5rem;border-radius:.25rem;font-size:.85rem;color:var(--xw-muted-foreground);text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1)}._navItem_10z71_243:hover{color:var(--xw-foreground)}._navItem_10z71_243._active_10z71_256{color:var(--xw-foreground);font-weight:500}._navItemContent_10z71_261{display:flex;align-items:center;justify-content:space-between;width:100%}@keyframes _skeleton-pulse_10z71_1{0%{opacity:.35}50%{opacity:.75}to{opacity:.35}}._sidebar_10z71_1::-webkit-scrollbar{width:6px}._sidebar_10z71_1::-webkit-scrollbar-track{background:transparent}._sidebar_10z71_1::-webkit-scrollbar-thumb{background:var(--xw-muted-foreground);border-radius:9999px;opacity:.3}._sidebar_10z71_1::-webkit-scrollbar-thumb:hover{opacity:.6}._app_wf6ni_1{min-height:100vh;background-color:var(--xw-background);color:var(--xw-foreground);display:flex;flex-direction:column}._layout_wf6ni_9{display:flex;flex:1;min-height:calc(100vh - 3.5rem)}._main_wf6ni_15{flex:1;display:flex;flex-direction:column;margin-left:16rem}._main_wf6ni_15._fullWidth_wf6ni_21{margin-left:0}@media(max-width:767px){._main_wf6ni_15{margin-left:0}}._contentWrapper_wf6ni_30{display:flex;flex:1;position:relative;width:100%;max-width:80rem;margin:0 auto;padding:2rem}._main_wf6ni_15._fullWidth_wf6ni_21 ._contentWrapper_wf6ni_30{width:auto}@media(max-width:1024px){._contentWrapper_wf6ni_30{padding:1.5rem}}@media(max-width:767px){._contentWrapper_wf6ni_30{padding:1rem}}._homePage_10e4f_1{flex:1;max-width:48rem;margin:0;padding:0 0 2rem}@media(max-width:767px){._homePage_10e4f_1{padding:1rem;max-width:none}}@media(max-width:1024px){._homePage_10e4f_1{max-width:none;padding:2rem}}._header_10e4f_20{margin-bottom:1.5rem}._title_10e4f_24{font-size:2rem;font-weight:700;color:var(--xw-foreground);margin-bottom:0!important}._articlesList_10e4f_31{display:flex;flex-direction:column;gap:1rem}._articleCard_10e4f_37{padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;background:transparent;cursor:pointer;text-align:left;transition:all .2s ease-in-out}._articleCard_10e4f_37:hover{border-color:var(--xw-primary);background-color:var(--xw-card);transform:translateY(-2px)}._articleCard_10e4f_37:focus-visible{outline:2px solid var(--xw-primary);outline-offset:2px}._articleTitle_10e4f_56{font-size:1.25rem;font-weight:600;margin:0 0 .5rem;color:var(--xw-foreground)}._articleDescription_10e4f_63{font-size:.9rem;color:var(--xw-muted-foreground);margin:0 0 .5rem;line-height:1.5}._loading_10e4f_70,._empty_10e4f_71{padding:2rem;text-align:center;color:var(--xw-muted-foreground)}@keyframes _shimmer_10e4f_1{0%{background-position:-1000px 0}to{background-position:1000px 0}}._skeletonCard_10e4f_85{padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;background:transparent;display:flex;flex-direction:column;gap:.5rem}._skeletonTitle_10e4f_95{width:70%;height:1.5rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.5rem}._skeletonText_10e4f_104{width:100%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.25rem}._skeletonMetadata_10e4f_113{width:40%;height:.875rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.25rem;margin-top:.25rem}
217
+ ._tabContainer_zk6h4_1{display:inline-flex;background-color:var(--xw-card);border:1px solid var(--xw-border);border-radius:.5rem;margin-bottom:2rem;overflow:hidden}._tab_zk6h4_1{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._tab_zk6h4_1:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._tab_zk6h4_1:disabled{pointer-events:none;opacity:.5}._tab_zk6h4_1{padding:.5rem 1rem;font-size:.87rem;font-weight:500;background-color:transparent;border:none;border-radius:0;color:var(--xw-muted-foreground);cursor:pointer;white-space:nowrap}._tab_zk6h4_1:not(:last-child){border-right:1px solid var(--xw-border)}._tab_zk6h4_1._active_zk6h4_45{background-color:var(--xw-accent);color:var(--xw-accent-foreground)}._tab_zk6h4_1:hover:not(._active_zk6h4_45){background-color:var(--xw-muted);color:var(--xw-foreground)}._tab_zk6h4_1:focus-visible{outline:2px solid var(--xw-accent);outline-offset:-2px}._articleNavigation_kz84g_1{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--xw-border)}._navContainer_kz84g_7{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:767px){._navContainer_kz84g_7{grid-template-columns:1fr;gap:1rem}}@media(min-width:1024px){._navContainer_kz84g_7{gap:1.5rem}}._navLink_kz84g_24{display:flex;padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;text-decoration:none;color:var(--xw-foreground);background-color:var(--xw-background);transition:all .2s ease;box-shadow:0 1px 3px #0000000d}._navLink_kz84g_24:hover{border-color:var(--xw-ring);background-color:var(--xw-card);transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}._navLink_kz84g_24:first-child{justify-content:flex-start}@media(max-width:767px){._navLink_kz84g_24:first-child{justify-content:center;text-align:center}}._navLink_kz84g_24:last-child{justify-content:flex-end;text-align:right}@media(max-width:767px){._navLink_kz84g_24:last-child{justify-content:center;text-align:center}}._navLinkContent_kz84g_61{display:flex;align-items:center;gap:.75rem;min-width:0;width:100%}@media(max-width:767px){._navLinkContent_kz84g_61{justify-content:center;flex-direction:column;text-align:center}}._navIcon_kz84g_76{display:flex;align-items:center;color:var(--xw-primary);flex-shrink:0}._navText_kz84g_83{display:flex;flex-direction:column;gap:.25rem;min-width:0}._navLabel_kz84g_90{font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--xw-muted-foreground)}._navTitle_kz84g_98{font-size:.875rem;font-weight:400;color:var(--xw-foreground);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;line-height:1.4}@media(min-width:1024px){._navTitle_kz84g_98{font-size:.9rem}}._blogSidebar_1ik3q_1{position:sticky;top:0;align-self:flex-start;height:fit-content;max-height:calc(100vh - 8rem);overflow-y:auto;padding:0 0 2rem 1.5rem;margin-left:2rem;background:transparent;border-left:1px solid var(--xw-border);flex-shrink:0;width:250px}@media(max-width:1024px){._blogSidebar_1ik3q_1{display:none}}._section_1ik3q_21{margin-bottom:2rem}._section_1ik3q_21:last-child{margin-bottom:0}._sectionTitle_1ik3q_28{font-size:.75rem;font-weight:600;color:var(--xw-muted-foreground);letter-spacing:.05em;margin:0 0 1rem}._linksList_1ik3q_36{display:flex;flex-direction:column;gap:.25rem}._link_1ik3q_36{display:flex;align-items:center;gap:.5rem;padding:.5rem;color:var(--xw-foreground);text-decoration:none;border-radius:.25rem;transition:all .15s cubic-bezier(.4,0,.2,1);font-size:.875rem}._link_1ik3q_36:hover{color:var(--xw-primary)}._link_1ik3q_36 svg{flex-shrink:0}._breadcrumb_rarc4_1{margin-bottom:1rem}._breadcrumbList_rarc4_5{display:flex;align-items:center;list-style:none;margin:0;padding:0;font-size:.875rem;color:var(--xw-muted-foreground)}._breadcrumbItem_rarc4_15{display:flex;align-items:center;gap:.25rem}._breadcrumbLink_rarc4_21{background:none;border:none;cursor:pointer;color:var(--xw-link);text-decoration:none;font-size:inherit;padding:0;font-weight:500;transition:color .2s ease}._breadcrumbLink_rarc4_21:hover{color:var(--xw-primary);text-decoration:underline}._breadcrumbLink_rarc4_21:focus-visible{outline:2px solid var(--xw-primary);outline-offset:2px}._breadcrumbSeparator_rarc4_41{color:var(--xw-border);margin:0 .5rem}._breadcrumbCurrent_rarc4_46{color:var(--xw-foreground);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:20rem}@media(max-width:767px){._breadcrumbCurrent_rarc4_46{max-width:10rem}}._metadata_bsge0_1{display:flex;align-items:center;gap:1.5rem;margin-top:1rem;margin-bottom:1rem}._author_bsge0_9,._date_bsge0_10{display:flex;align-items:center;gap:.5rem;font-weight:500;font-size:.9rem}._author_bsge0_9 svg,._date_bsge0_10 svg{flex-shrink:0}._date_bsge0_10{color:var(--xw-text-secondary, #666)}._tableOfContents_9ofak_1{position:sticky;top:5rem;align-self:flex-start;height:fit-content;max-height:calc(100vh - 8rem);overflow-y:auto;padding:2rem 0 2rem 1.5rem;margin-left:2rem;background:transparent;border-left:1px solid var(--xw-border);flex-shrink:0;max-width:250px}@media(max-width:1024px){._tableOfContents_9ofak_1{display:none}}._header_9ofak_21{margin-bottom:1rem}._title_9ofak_25{font-size:.75rem;font-weight:500;color:var(--xw-muted-foreground);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}._nav_9ofak_34 ul{margin:0;padding:0;list-style:none}._list_9ofak_40{display:flex;flex-direction:column;gap:.125rem;margin:0}._link_9ofak_47{display:block;width:100%;padding:.25rem 0;text-align:left;background:none;border:none;cursor:pointer;font-size:.875rem;line-height:1.4;color:var(--xw-muted-foreground);text-decoration:none;border-radius:.25rem;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative;font-family:inherit}._link_9ofak_47:hover{color:var(--xw-foreground)}._link_9ofak_47:focus{outline:none;color:var(--xw-foreground)}._link_9ofak_47._active_9ofak_71{color:var(--xw-primary);font-weight:500}._link_9ofak_47._active_9ofak_71:before{content:"";position:absolute;left:-1.5rem;top:50%;transform:translateY(-50%);width:1px;height:1rem;background-color:var(--xw-primary);border-radius:.5px}._level1_9ofak_87{font-weight:500;padding-left:0;margin-bottom:.125rem}._level2_9ofak_93{padding-left:.5rem;margin-bottom:.0625rem}._level3_9ofak_98{padding-left:1rem;font-size:.8125rem;margin-bottom:.0625rem}._level4_9ofak_104{padding-left:1.5rem;font-size:.8125rem;margin-bottom:.0625rem}._level5_9ofak_110{padding-left:2rem;font-size:.75rem;margin-bottom:.0625rem}._level6_9ofak_116{padding-left:2.5rem;font-size:.75rem;margin-bottom:.0625rem}._tableOfContents_9ofak_1::-webkit-scrollbar{width:4px}._tableOfContents_9ofak_1::-webkit-scrollbar-track{background:transparent}._tableOfContents_9ofak_1::-webkit-scrollbar-thumb{background:var(--xw-border);border-radius:2px}._tableOfContents_9ofak_1::-webkit-scrollbar-thumb:hover{background:var(--xw-muted-foreground)}._overlay_1e1d4_1{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;animation:_fadeIn_1e1d4_1 .2s ease;height:100vh}@keyframes _fadeIn_1e1d4_1{0%{opacity:0}to{opacity:1}}._modal_1e1d4_26{width:90%;max-width:600px;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.75rem;box-shadow:0 20px 60px #0000004d;animation:_slideIn_1e1d4_1 .2s ease;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}@keyframes _slideIn_1e1d4_1{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}._header_1e1d4_50{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--xw-border)}._title_1e1d4_58{font-size:1.125rem;font-weight:600;color:var(--xw-foreground);margin:0}._closeButton_1e1d4_65{background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:.25rem;transition:all .2s ease}._closeButton_1e1d4_65 svg{width:1.25rem;height:1.25rem}._closeButton_1e1d4_65:hover{background:var(--xw-secondary);color:var(--xw-foreground)}._results_1e1d4_86{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}._resultsList_1e1d4_94{list-style:none;padding:0;margin:0}._resultItem_1e1d4_100{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;width:100%;padding:.75rem 1rem;background:none;border:none;border-radius:.5rem;cursor:pointer;text-align:left;transition:all .15s ease;color:var(--xw-foreground)}._resultItem_1e1d4_100:hover{background:var(--xw-secondary)}._resultTitle_1e1d4_119{font-weight:500;font-size:.95rem}._resultSlug_1e1d4_124{font-size:.8rem;color:var(--xw-muted-foreground);opacity:.8}._noResults_1e1d4_130{padding:3rem 1rem;text-align:center;color:var(--xw-muted-foreground);font-size:.9rem}._tags_11t8a_1{display:flex;align-items:center;gap:.75rem;margin:2rem 0 1rem;padding:1rem 0 0;border-top:1px solid var(--xw-border)}._tags_11t8a_1._compact_11t8a_9{margin:2rem 0 1rem;padding:1rem 0 0;border-top:1px solid var(--xw-border)}._tagLabel_11t8a_15{display:flex;align-items:center;gap:.5rem;color:var(--xw-muted-foreground);font-size:.875rem;font-weight:500;white-space:nowrap}._tagIcon_11t8a_25{width:1.125rem;height:1.125rem}._tagList_11t8a_30{display:flex;flex-wrap:wrap;gap:.5rem}._tag_11t8a_1{display:inline-flex;align-items:center;padding:.25rem .75rem;background:none;border:1px solid var(--xw-border);border-radius:.75rem;color:var(--xw-muted-foreground);font-size:.8rem;font-weight:400;cursor:pointer;transition:all .2s ease}._tag_11t8a_1:hover{color:var(--xw-foreground);border-color:var(--xw-ring)}._contentPage_818m0_1{flex:1;max-width:48rem;margin:0;padding:0 0 2rem}@media(max-width:767px){._contentPage_818m0_1{padding:1rem;max-width:none}}@media(max-width:1024px){._contentPage_818m0_1{max-width:none;padding:2rem}}._metadata_818m0_20{display:flex;gap:1rem;align-items:center;padding:.5rem 0 1rem;color:var(--xw-muted-foreground);font-size:.875rem;border-bottom:1px solid var(--xw-border);margin-bottom:1rem}._metadata_818m0_20 ._author_818m0_30,._metadata_818m0_20 ._date_818m0_31{display:flex;align-items:center;gap:.5rem}._metadata_818m0_20 ._author_818m0_30{font-weight:500;color:var(--xw-foreground)}@media(max-width:767px){._metadata_818m0_20{flex-direction:column;align-items:flex-start;gap:.25rem}}._loadingContainer_818m0_48,._errorContainer_818m0_49{display:flex;align-items:center;justify-content:center;height:16rem}._loadingContainer_818m0_48{flex-direction:column;align-items:flex-start;gap:1.5rem;padding:2rem 0}@keyframes _shimmer_818m0_1{0%{background-position:-1000px 0}to{background-position:1000px 0}}._skeletonTitle_818m0_71{width:60%;height:2.5rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.5rem}._skeletonParagraph_818m0_80{width:100%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.25rem;margin-bottom:.5rem}._skeletonParagraph_818m0_80:not(:last-child){margin-bottom:1rem}._skeletonParagraphShort_818m0_93{width:70%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_818m0_1 2s infinite linear;border-radius:.25rem}._loadingText_818m0_102{color:var(--xw-muted-foreground);font-size:1rem}._errorText_818m0_107{color:var(--xw-destructive);font-size:1rem}._mdxContent_818m0_112{max-width:none}._mdxContent_818m0_112 h1{font-size:1.875rem;font-weight:600;letter-spacing:-.025em;margin-bottom:1.5rem;border-bottom:1px solid var(--xw-border);padding-bottom:.75rem;line-height:1.2;scroll-margin-top:5rem}._mdxContent_818m0_112 h1._withMetadata_818m0_125{border-bottom:none;padding-bottom:0;margin-bottom:.5rem}._mdxContent_818m0_112 h1 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h1 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h1 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h2{font-size:1.5rem;font-weight:500;letter-spacing:-.02em;margin-bottom:1rem;margin-top:2.5rem;border-bottom:1px solid var(--xw-border);padding-bottom:.5rem;line-height:1.3;scroll-margin-top:5rem}._mdxContent_818m0_112 h2 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h2 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h2 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h3{font-size:1.25rem;font-weight:500;letter-spacing:-.015em;margin-bottom:.75rem;margin-top:2rem;line-height:1.4;scroll-margin-top:5rem}._mdxContent_818m0_112 h3 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h3 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h3 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h4{font-size:1.125rem;font-weight:500;letter-spacing:-.01em;margin-bottom:.5rem;margin-top:1.5rem;line-height:1.4;scroll-margin-top:5rem}._mdxContent_818m0_112 h4 a{color:inherit;text-decoration:none;border:none;position:relative}._mdxContent_818m0_112 h4 a:hover{color:inherit;border:none}._mdxContent_818m0_112 h4 a:hover:before{content:"#";position:absolute;left:-1.5rem;color:var(--xw-link);opacity:.7;font-weight:400}._mdxContent_818m0_112 h5{font-size:1rem;font-weight:500;margin-bottom:.5rem;margin-top:1.25rem;line-height:1.5}._mdxContent_818m0_112 h6{font-size:.875rem;font-weight:500;margin-bottom:.5rem;margin-top:1rem;line-height:1.5}._mdxContent_818m0_112 p{font-size:1rem;line-height:1.65;margin-bottom:1rem;color:var(--xw-foreground)}._mdxContent_818m0_112 ul,._mdxContent_818m0_112 ol{margin-bottom:1rem;padding-left:1.5rem}._mdxContent_818m0_112 ul li,._mdxContent_818m0_112 ol li{font-size:1rem;line-height:1.65;margin-bottom:.375rem}._mdxContent_818m0_112 ul ul,._mdxContent_818m0_112 ul ol,._mdxContent_818m0_112 ol ul,._mdxContent_818m0_112 ol ol{margin-top:.375rem;margin-bottom:.375rem}._mdxContent_818m0_112 ul{list-style-type:disc}._mdxContent_818m0_112 ol{list-style-type:decimal}._mdxContent_818m0_112 code{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;background-color:var(--xw-muted);padding:.1875rem .4375rem;border-radius:.25rem;color:var(--xw-foreground);font-weight:500}._mdxContent_818m0_112 pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;background-color:var(--xw-muted);padding:1.25rem;border-radius:.75rem;overflow-x:auto;margin:1.5rem 0;position:relative;border:1px solid var(--xw-border)}._mdxContent_818m0_112 pre code{background-color:transparent;padding:0;color:inherit;font-weight:400}._mdxContent_818m0_112 ._codeBlock_818m0_300{position:relative;margin-bottom:1.5rem}._mdxContent_818m0_112 ._codeLanguage_818m0_304{position:absolute;top:.5rem;right:.5rem;font-size:.75rem;color:var(--xw-muted-foreground);background-color:var(--xw-background);padding:.25rem .5rem;border-radius:.25rem;border:1px solid var(--xw-border)}._mdxContent_818m0_112 blockquote{border-left:3px solid var(--xw-accent);padding-left:1rem;font-style:italic;color:var(--xw-muted-foreground);margin-bottom:1rem;margin-top:1rem}._mdxContent_818m0_112 blockquote p{margin-bottom:.5rem}._mdxContent_818m0_112 blockquote p:last-child{margin-bottom:0}._mdxContent_818m0_112 a{color:var(--xw-link);text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1);border-bottom:1px solid transparent}._mdxContent_818m0_112 a:hover{color:color-mix(in oklch,var(--xw-link) 80%,transparent);border-bottom-color:currentColor}._mdxContent_818m0_112 strong{font-weight:600}._mdxContent_818m0_112 em{font-style:italic}._mdxContent_818m0_112 table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.95rem}._mdxContent_818m0_112 table th,._mdxContent_818m0_112 table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--xw-border);line-height:1.4}._mdxContent_818m0_112 table th{font-weight:500;background-color:var(--xw-muted);font-size:.875rem;letter-spacing:.025em}._mdxContent_818m0_112 table tbody tr:hover{background-color:color-mix(in oklch,var(--xw-muted) 50%,transparent)}._mdxContent_818m0_112 img{max-width:100%;height:auto;border-radius:.5rem;margin:1.5rem 0;border:1px solid var(--xw-border)}._mdxContent_818m0_112 hr{border:none;border-top:1px solid var(--xw-border);margin:2rem 0}._searchButton_1k9sl_1{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:.375rem;background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;transition:all .2s ease;font-size:.875rem}._searchButton_1k9sl_1:hover{border-color:var(--xw-input)}._searchButton_1k9sl_1 ._searchIcon_1k9sl_17{width:1rem;height:1rem;opacity:.6}@media(max-width:768px){._searchButton_1k9sl_1 ._searchHint_1k9sl_23{display:none}}._searchButton_1k9sl_1 ._kbd_1k9sl_27{display:none;padding:.125rem .375rem;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.25rem;font-size:.75rem;font-family:monospace}@media(min-width:768px){._searchButton_1k9sl_1 ._kbd_1k9sl_27{display:block}}._searchOverlay_1k9sl_42{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;animation:_fadeIn_1k9sl_1 .2s ease;height:100vh}@keyframes _fadeIn_1k9sl_1{0%{opacity:0}to{opacity:1}}._searchModal_1k9sl_67{width:90%;max-width:600px;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.75rem;box-shadow:0 20px 60px #0000004d;animation:_slideIn_1k9sl_1 .2s ease;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}@keyframes _slideIn_1k9sl_1{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}._searchHeader_1k9sl_91{display:flex;align-items:center;gap:.75rem;padding:1rem 1.25rem;border-bottom:1px solid var(--xw-border)}._searchHeader_1k9sl_91 ._searchIcon_1k9sl_17{width:1.25rem;height:1.25rem;opacity:.5;flex-shrink:0}._searchInput_1k9sl_105{flex:1;border:none;background:transparent;color:var(--xw-foreground);font-size:1rem;outline:none}._searchInput_1k9sl_105:focus{border:none;outline:none;box-shadow:none}._searchInput_1k9sl_105::placeholder{color:var(--xw-muted-foreground);opacity:.6}._closeButton_1k9sl_123{background:none;border:none;color:var(--xw-muted-foreground);cursor:pointer;padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:.25rem;transition:all .2s ease}._closeButton_1k9sl_123 svg{width:1.25rem;height:1.25rem}._closeButton_1k9sl_123:hover{background:var(--xw-secondary);color:var(--xw-foreground)}._searchResults_1k9sl_144{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}._resultsList_1k9sl_152{list-style:none;padding:0;margin:0}._resultItem_1k9sl_158{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;width:100%;padding:.75rem 1rem;background:none;border:none;border-radius:.5rem;cursor:pointer;text-align:left;transition:all .15s ease;color:var(--xw-foreground)}._resultItem_1k9sl_158:hover,._resultItem_1k9sl_158._selected_1k9sl_173{background:var(--xw-secondary)}._resultItem_1k9sl_158 ._resultTitle_1k9sl_176{font-weight:500;font-size:.95rem}._resultItem_1k9sl_158 ._resultSlug_1k9sl_180{font-size:.8rem;color:var(--xw-muted-foreground);opacity:.8}._noResults_1k9sl_186{padding:3rem 1rem;text-align:center;color:var(--xw-muted-foreground);font-size:.9rem}._searchHints_1k9sl_193{display:flex;align-items:center;gap:1.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--xw-border);background:var(--xw-secondary);font-size:.8rem;color:var(--xw-muted-foreground)}@media(max-width:768px){._searchHints_1k9sl_193{flex-direction:column;align-items:flex-start;gap:.5rem}}._searchHints_1k9sl_193 ._hint_1k9sl_210{display:flex;align-items:center;gap:.5rem}._searchHints_1k9sl_193 ._hint_1k9sl_210 kbd{padding:.125rem .375rem;background:var(--xw-card);border:1px solid var(--xw-border);border-radius:.25rem;font-size:.75rem;font-family:monospace;min-width:1.5rem;text-align:center}._header_jrobc_1{position:sticky;top:0;z-index:1020;background-color:#fffc;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);height:3.5rem;padding-left:16rem}.dark ._header_jrobc_1{background-color:#2020201a}@supports not (backdrop-filter: blur(12px)){._header_jrobc_1{background-color:var(--xw-background)}}@media(max-width:767px){._header_jrobc_1{padding:0}}._container_jrobc_24{width:100%;max-width:1400px;margin:0 auto;padding:0 1.5rem}@media(max-width:767px){._container_jrobc_24{padding:0 1rem}}._content_jrobc_36{display:flex;align-items:center;justify-content:space-between;height:3.5rem}._leftSection_jrobc_43{display:flex;align-items:center;gap:1rem}._mobileMenuButton_jrobc_49{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._mobileMenuButton_jrobc_49:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._mobileMenuButton_jrobc_49:disabled{pointer-events:none;opacity:.5}._mobileMenuButton_jrobc_49{padding:.5rem;background-color:transparent;color:var(--xw-muted-foreground);border-radius:.5rem;display:none}._mobileMenuButton_jrobc_49:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}@media(max-width:767px){._mobileMenuButton_jrobc_49{display:flex}}._burgerIcon_jrobc_87{width:1.25rem;height:1.25rem}._logo_jrobc_92,._nav_jrobc_98{display:flex;align-items:center;gap:.5rem}@media(max-width:767px){._nav_jrobc_98{gap:.25rem}}._navLink_jrobc_109{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);text-decoration:none;transition:all .15s cubic-bezier(.4,0,.2,1)}._navLink_jrobc_109:hover{color:var(--xw-foreground)}._navLink_jrobc_109:focus{outline:none}._githubIcon_jrobc_128{width:1rem;height:1rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}._externalIcon_jrobc_135{width:1rem;height:1rem;flex-shrink:0}._supportDropdown_jrobc_141,._themeDropdown_jrobc_145{position:relative}._themeButton_jrobc_149{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);background:none;border:none;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}._themeButton_jrobc_149:hover{color:var(--xw-foreground);background-color:var(--xw-muted)}._themeButton_jrobc_149:focus{outline:none}._themeIcon_jrobc_171{width:1.125rem;height:1.125rem;flex-shrink:0}._supportButton_jrobc_177{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:.5rem;font-size:.875rem;font-weight:500;color:var(--xw-muted-foreground);background:none;border:none;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}._supportButton_jrobc_177:hover{color:var(--xw-foreground)}._supportButton_jrobc_177:focus{outline:none}._caretIcon_jrobc_198{width:.875rem;height:.875rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}button[aria-expanded=true] ._caretIcon_jrobc_198{transform:rotate(180deg)}._dropdownMenu_jrobc_208{position:absolute;top:calc(100% + .25rem);right:0;min-width:10rem;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;overflow:hidden}._dropdownItem_jrobc_221{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem 1rem;font-size:.875rem;color:var(--xw-popover-foreground);text-decoration:none;background:none;border:none;cursor:pointer;text-align:left;transition:background-color .15s cubic-bezier(.4,0,.2,1)}._dropdownItem_jrobc_221:hover{background-color:var(--xw-muted)}._dropdownItem_jrobc_221:focus{outline:none;background-color:var(--xw-muted)}._dropdownIcon_jrobc_244{width:1rem;height:1rem;flex-shrink:0}@media(max-width:767px){._logoText_jrobc_251{font-size:1rem}._navLink_jrobc_109{padding:.25rem .5rem;font-size:.8rem;gap:.25rem}._githubIcon_jrobc_128{width:.875rem;height:.875rem}}._backdrop_1a7pu_1{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:1040;opacity:0;visibility:hidden;transition:all .15s cubic-bezier(.4,0,.2,1)}._backdrop_1a7pu_1._open_1a7pu_13{opacity:1;visibility:visible}._mobileMenu_1a7pu_18{position:fixed;top:0;left:0;width:320px;height:100vh;background-color:var(--xw-background);border-right:1px solid var(--xw-border);z-index:1050;transform:translate(-100%);transition:transform .15s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden}._mobileMenu_1a7pu_18._open_1a7pu_13{transform:translate(0)}._header_1a7pu_37{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;border-bottom:1px solid var(--xw-border);flex-shrink:0}._brand_1a7pu_46{flex:1;display:flex;align-items:center;gap:.5rem}._cloudIcon_1a7pu_53{width:1.5rem;height:1.5rem;flex-shrink:0}._cloudIcon_1a7pu_53 .accent{fill:#d33079}._title_1a7pu_62{font-size:1.125rem;font-weight:600;color:var(--xw-foreground);margin:0}._closeButton_1a7pu_69{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._closeButton_1a7pu_69:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._closeButton_1a7pu_69:disabled{pointer-events:none;opacity:.5}._closeButton_1a7pu_69{padding:.5rem;background-color:transparent;color:var(--xw-muted-foreground);border-radius:.5rem}._closeButton_1a7pu_69:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._closeIcon_1a7pu_101{width:1.25rem;height:1.25rem}._languageSection_1a7pu_106{padding:1.5rem;border-bottom:1px solid var(--xw-border);flex-shrink:0}._languageSelect_1a7pu_112{position:relative;width:100%}._languageButton_1a7pu_117{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageButton_1a7pu_117:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageButton_1a7pu_117:disabled{pointer-events:none;opacity:.5}._languageButton_1a7pu_117{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem 1rem;background-color:var(--xw-background);border:1px solid var(--xw-border);color:var(--xw-foreground);gap:.5rem}._languageButton_1a7pu_117:hover,._languageButton_1a7pu_117[aria-expanded=true]{background-color:var(--xw-muted)}._icon_1a7pu_156{width:1rem;height:1rem;flex-shrink:0}._chevron_1a7pu_162{width:1rem;height:1rem;transition:transform .15s cubic-bezier(.4,0,.2,1);margin-left:auto}._languageButton_1a7pu_117[aria-expanded=true] ._chevron_1a7pu_162{transform:rotate(180deg)}._languageDropdown_1a7pu_172{position:absolute;top:100%;left:0;right:0;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;margin-top:.25rem}._languageOption_1a7pu_185{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageOption_1a7pu_185:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageOption_1a7pu_185:disabled{pointer-events:none;opacity:.5}._languageOption_1a7pu_185{width:100%;padding:.5rem 1rem;background-color:transparent;color:var(--xw-foreground);text-align:left;justify-content:flex-start;border-radius:0}._languageOption_1a7pu_185:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}._languageOption_1a7pu_185:last-child{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}._languageOption_1a7pu_185:hover{background-color:var(--xw-muted)}._languageOption_1a7pu_185._selected_1a7pu_226{background-color:var(--xw-accent);color:var(--xw-accent-foreground)}._scrollArea_1a7pu_231{flex:1;overflow-y:auto;padding:1.5rem 0}._navigation_1a7pu_237{padding:0 1.5rem}._section_1a7pu_241{margin-bottom:1rem}._sectionButton_1a7pu_245{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._sectionButton_1a7pu_245:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._sectionButton_1a7pu_245:disabled{pointer-events:none;opacity:.5}._sectionButton_1a7pu_245{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem 1rem;background-color:transparent;color:var(--xw-foreground);font-weight:600;gap:.5rem;border-radius:.5rem}._sectionButton_1a7pu_245:hover{background-color:var(--xw-muted)}._sectionButton_1a7pu_245 ._icon_1a7pu_156{transition:transform .15s cubic-bezier(.4,0,.2,1);margin-left:auto}._sectionButton_1a7pu_245._expanded_1a7pu_285 ._icon_1a7pu_156{transform:rotate(90deg)}._sectionItems_1a7pu_289{margin-top:.5rem;margin-left:1rem;display:flex;flex-direction:column;gap:.25rem}._navItem_1a7pu_297{display:block;padding:.5rem 1rem;border-radius:.5rem;color:var(--xw-muted-foreground);text-decoration:none;transition:all .15s cubic-bezier(.4,0,.2,1);font-size:.875rem}._navItem_1a7pu_297:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._navItem_1a7pu_297._active_1a7pu_310{background-color:var(--xw-accent);color:var(--xw-accent-foreground);font-weight:500}._navItemContent_1a7pu_316{display:flex;align-items:center;gap:.5rem}._navItemTitle_1a7pu_322{flex:1}@media(min-width:1024px){._mobileMenu_1a7pu_18,._backdrop_1a7pu_1{display:none}}._sidebar_1tdxt_1{position:fixed;top:0;left:0;width:16rem;height:100vh;background-color:var(--xw-sidebar);overflow-y:auto;z-index:1020}@media(max-width:767px){._sidebar_1tdxt_1{display:none}}._header_1tdxt_17{position:sticky;top:0;z-index:1020;padding:1rem;background-color:var(--xw-sidebar);display:flex;flex-direction:column;gap:.5rem;padding-bottom:0}._brand_1tdxt_29{display:flex;align-items:center;gap:.5rem}._cloudIcon_1tdxt_35{width:1.5rem;height:1.5rem;flex-shrink:0}._cloudIcon_1tdxt_35 .accent{fill:#d33079}._title_1tdxt_44{font-size:1rem;font-weight:600;line-height:1.5;margin:0;letter-spacing:-.02em;color:var(--xw-foreground)}._languageSelect_1tdxt_55{position:relative;margin-top:.25rem;width:100%}._languageButton_1tdxt_61{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._languageButton_1tdxt_61:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._languageButton_1tdxt_61:disabled{pointer-events:none;opacity:.5}._languageButton_1tdxt_61{display:flex;align-items:center;justify-content:space-between;padding:.25rem .5rem;width:100%;gap:.25rem;font-size:.8rem;background:transparent;border:1px solid var(--xw-border);border-radius:.25rem;color:var(--xw-muted-foreground)}._languageButton_1tdxt_61:hover{background-color:var(--xw-muted);color:var(--xw-foreground)}._languageButton_1tdxt_61 ._icon_1tdxt_99{width:.875rem;height:.875rem;flex-shrink:0}._languageButton_1tdxt_61 ._chevron_1tdxt_104{width:.875rem;height:.875rem;flex-shrink:0;transition:transform .15s cubic-bezier(.4,0,.2,1)}._languageButton_1tdxt_61[aria-expanded=true] ._chevron_1tdxt_104{transform:rotate(180deg)}._languageDropdown_1tdxt_114{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background-color:var(--xw-popover);border:1px solid var(--xw-border);border-radius:.5rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;z-index:1000;overflow:hidden}._languageOption_1tdxt_128{display:block;width:100%;padding:.25rem .5rem;text-align:left;background:none;border:none;color:var(--xw-popover-foreground);font-size:.85rem;cursor:pointer;transition:background-color .15s cubic-bezier(.4,0,.2,1)}._languageOption_1tdxt_128:hover{background-color:var(--xw-muted)}._languageOption_1tdxt_128:focus{outline:none;background-color:var(--xw-muted)}._languageOption_1tdxt_128._selected_1tdxt_147{background-color:var(--xw-muted);color:var(--xw-foreground)}._scrollArea_1tdxt_152{height:calc(100vh - 120px);padding:1rem .5rem 1rem 1rem;overflow-y:auto}._navigation_1tdxt_158{display:flex;flex-direction:column;gap:.125rem}._section_1tdxt_164{display:flex;flex-direction:column;gap:0}._sectionButton_1tdxt_170{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.5rem;font-size:.875rem;font-weight:500;transition:.15s cubic-bezier(.4,0,.2,1);cursor:pointer;border:none;outline:none}._sectionButton_1tdxt_170:focus-visible{outline:2px solid var(--xw-ring);outline-offset:2px}._sectionButton_1tdxt_170:disabled{pointer-events:none;opacity:.5}._sectionButton_1tdxt_170{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.25rem .5rem;font-weight:500;font-size:.85rem;color:var(--xw-muted-foreground);background:transparent;text-align:left;letter-spacing:-.01em;border:none}._sectionButton_1tdxt_170:hover{color:var(--xw-foreground)}._sectionButton_1tdxt_170 ._icon_1tdxt_99{width:.875rem;height:.875rem;transition:transform .15s cubic-bezier(.4,0,.2,1)}._sectionButton_1tdxt_170._expanded_1tdxt_213 ._icon_1tdxt_99{transform:rotate(90deg)}._sectionItems_1tdxt_217{margin-top:.25rem;padding-left:1rem;display:flex;flex-direction:column;gap:.125rem}._navItem_1tdxt_225{display:block;width:100%;padding:.25rem .5rem;border-radius:.25rem;font-size:.85rem;color:var(--xw-muted-foreground);text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1)}._navItem_1tdxt_225:hover{color:var(--xw-foreground)}._navItem_1tdxt_225._active_1tdxt_238{color:var(--xw-foreground);font-weight:500}._navItemContent_1tdxt_243{display:flex;align-items:center;justify-content:space-between;width:100%}._sidebar_1tdxt_1::-webkit-scrollbar{width:6px}._sidebar_1tdxt_1::-webkit-scrollbar-track{background:transparent}._sidebar_1tdxt_1::-webkit-scrollbar-thumb{background:var(--xw-muted-foreground);border-radius:9999px;opacity:.3}._sidebar_1tdxt_1::-webkit-scrollbar-thumb:hover{opacity:.6}._app_wf6ni_1{min-height:100vh;background-color:var(--xw-background);color:var(--xw-foreground);display:flex;flex-direction:column}._layout_wf6ni_9{display:flex;flex:1;min-height:calc(100vh - 3.5rem)}._main_wf6ni_15{flex:1;display:flex;flex-direction:column;margin-left:16rem}._main_wf6ni_15._fullWidth_wf6ni_21{margin-left:0}@media(max-width:767px){._main_wf6ni_15{margin-left:0}}._contentWrapper_wf6ni_30{display:flex;flex:1;position:relative;width:100%;max-width:80rem;margin:0 auto;padding:2rem}._main_wf6ni_15._fullWidth_wf6ni_21 ._contentWrapper_wf6ni_30{width:auto}@media(max-width:1024px){._contentWrapper_wf6ni_30{padding:1.5rem}}@media(max-width:767px){._contentWrapper_wf6ni_30{padding:1rem}}._homePage_10e4f_1{flex:1;max-width:48rem;margin:0;padding:0 0 2rem}@media(max-width:767px){._homePage_10e4f_1{padding:1rem;max-width:none}}@media(max-width:1024px){._homePage_10e4f_1{max-width:none;padding:2rem}}._header_10e4f_20{margin-bottom:1.5rem}._title_10e4f_24{font-size:2rem;font-weight:700;color:var(--xw-foreground);margin-bottom:0!important}._articlesList_10e4f_31{display:flex;flex-direction:column;gap:1rem}._articleCard_10e4f_37{padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;background:transparent;cursor:pointer;text-align:left;transition:all .2s ease-in-out}._articleCard_10e4f_37:hover{border-color:var(--xw-primary);background-color:var(--xw-card);transform:translateY(-2px)}._articleCard_10e4f_37:focus-visible{outline:2px solid var(--xw-primary);outline-offset:2px}._articleTitle_10e4f_56{font-size:1.25rem;font-weight:600;margin:0 0 .5rem;color:var(--xw-foreground)}._articleDescription_10e4f_63{font-size:.9rem;color:var(--xw-muted-foreground);margin:0 0 .5rem;line-height:1.5}._loading_10e4f_70,._empty_10e4f_71{padding:2rem;text-align:center;color:var(--xw-muted-foreground)}@keyframes _shimmer_10e4f_1{0%{background-position:-1000px 0}to{background-position:1000px 0}}._skeletonCard_10e4f_85{padding:1rem;border:1px solid var(--xw-border);border-radius:.5rem;background:transparent;display:flex;flex-direction:column;gap:.5rem}._skeletonTitle_10e4f_95{width:70%;height:1.5rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.5rem}._skeletonText_10e4f_104{width:100%;height:1rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.25rem}._skeletonMetadata_10e4f_113{width:40%;height:.875rem;background:linear-gradient(90deg,var(--xw-muted) 0%,color-mix(in oklch,var(--xw-muted) 50%,white) 50%,var(--xw-muted) 100%);background-size:1000px 100%;animation:_shimmer_10e4f_1 2s infinite linear;border-radius:.25rem;margin-top:.25rem}
@@ -0,0 +1,15 @@
1
+ import type { BlogDiscoveryResult, BlogPostMetadata, BlogSSGConfig } from './types.js';
2
+ /**
3
+ * Discover all blog posts from Vite glob import
4
+ *
5
+ * @param mdxFiles - Object from import.meta.glob('./docs/**\/*.mdx', { query: '?raw', import: 'default', eager: false })
6
+ * @param config - SSG configuration options
7
+ * @returns Collection of discovered blog posts organized by language and slug
8
+ */
9
+ export declare function discoverBlogPosts(mdxFiles: Record<string, () => Promise<unknown>>, config?: BlogSSGConfig): Promise<BlogDiscoveryResult>;
10
+ /**
11
+ * Filter blog posts by specific criteria
12
+ * Useful for separating blog posts from docs
13
+ */
14
+ export declare function filterBlogPosts(posts: BlogPostMetadata[], predicate: (post: BlogPostMetadata) => boolean): BlogPostMetadata[];
15
+ //# sourceMappingURL=blog-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-discovery.d.ts","sourceRoot":"","sources":["../src/blog-discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,MAAM,YAAY,CAAA;AAgFnB;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAChD,MAAM,GAAE,aAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAqD9B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,gBAAgB,EAAE,EACzB,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,GAC5C,gBAAgB,EAAE,CAEpB"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Parse YAML frontmatter from MDX content
3
+ */
4
+ function parseFrontmatter(content) {
5
+ const match = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
6
+ if (!match)
7
+ return {};
8
+ const frontmatter = {};
9
+ const frontmatterText = match[1];
10
+ let currentKey = '';
11
+ let isArrayContext = false;
12
+ const arrayValues = [];
13
+ for (const line of frontmatterText.split('\n')) {
14
+ const trimmed = line.trim();
15
+ // Handle array items (lines starting with -)
16
+ if (trimmed.startsWith('-')) {
17
+ if (isArrayContext) {
18
+ const value = trimmed.substring(1).trim();
19
+ arrayValues.push(value);
20
+ }
21
+ continue;
22
+ }
23
+ // If we were in array context and hit a non-array line, save the array
24
+ if (isArrayContext && !trimmed.startsWith('-')) {
25
+ frontmatter[currentKey] = arrayValues.slice();
26
+ arrayValues.length = 0;
27
+ isArrayContext = false;
28
+ }
29
+ // Handle key-value pairs
30
+ if (trimmed?.includes(':')) {
31
+ const [key, ...valueParts] = trimmed.split(':');
32
+ const value = valueParts.join(':').trim();
33
+ currentKey = key.trim();
34
+ // If value is empty, this might be an array declaration
35
+ if (!value) {
36
+ isArrayContext = true;
37
+ continue;
38
+ }
39
+ // Parse boolean values
40
+ if (value === 'true')
41
+ frontmatter[currentKey] = true;
42
+ else if (value === 'false')
43
+ frontmatter[currentKey] = false;
44
+ else
45
+ frontmatter[currentKey] = value;
46
+ }
47
+ }
48
+ // Save any remaining array
49
+ if (isArrayContext) {
50
+ frontmatter[currentKey] = arrayValues.slice();
51
+ }
52
+ return frontmatter;
53
+ }
54
+ /**
55
+ * Extract language from file path based on doc structure
56
+ * Expected: docs/[language]/[slug].mdx
57
+ */
58
+ function extractLanguageFromPath(filePath) {
59
+ const match = filePath.match(/\/docs\/([a-z]{2})\//);
60
+ return match ? match[1] : 'en';
61
+ }
62
+ /**
63
+ * Extract slug from file path
64
+ * Expected: docs/[language]/[slug].mdx
65
+ */
66
+ function extractSlugFromPath(filePath) {
67
+ const match = filePath.match(/\/([a-z0-9-]+)\.mdx$/);
68
+ return match ? match[1] : '';
69
+ }
70
+ /**
71
+ * Discover all blog posts from Vite glob import
72
+ *
73
+ * @param mdxFiles - Object from import.meta.glob('./docs/**\/*.mdx', { query: '?raw', import: 'default', eager: false })
74
+ * @param config - SSG configuration options
75
+ * @returns Collection of discovered blog posts organized by language and slug
76
+ */
77
+ export async function discoverBlogPosts(mdxFiles, config = {}) {
78
+ const posts = [];
79
+ const postsByLanguage = {};
80
+ const postsBySlug = {};
81
+ // Iterate through all MDX files
82
+ for (const [filePath, getContent] of Object.entries(mdxFiles)) {
83
+ try {
84
+ // Load content
85
+ const content = (await getContent());
86
+ // Extract language and slug
87
+ const language = extractLanguageFromPath(filePath);
88
+ const slug = extractSlugFromPath(filePath);
89
+ if (!slug)
90
+ continue;
91
+ // Parse frontmatter
92
+ const frontmatter = parseFrontmatter(content);
93
+ // Create metadata object
94
+ const metadata = {
95
+ slug,
96
+ title: frontmatter.title || slug,
97
+ description: frontmatter.description,
98
+ ogImage: frontmatter.ogImage,
99
+ keywords: frontmatter.keywords,
100
+ date: frontmatter.date,
101
+ author: frontmatter.author,
102
+ language,
103
+ filePath,
104
+ };
105
+ posts.push(metadata);
106
+ // Index by language
107
+ if (!postsByLanguage[language]) {
108
+ postsByLanguage[language] = [];
109
+ }
110
+ postsByLanguage[language].push(metadata);
111
+ // Index by slug (use [language-slug] composite key to avoid conflicts)
112
+ postsBySlug[`${language}:${slug}`] = metadata;
113
+ }
114
+ catch (error) {
115
+ console.warn(`Warning: Failed to process ${filePath}:`, error);
116
+ }
117
+ }
118
+ return {
119
+ posts,
120
+ postsByLanguage,
121
+ postsBySlug,
122
+ };
123
+ }
124
+ /**
125
+ * Filter blog posts by specific criteria
126
+ * Useful for separating blog posts from docs
127
+ */
128
+ export function filterBlogPosts(posts, predicate) {
129
+ return posts.filter(predicate);
130
+ }
131
+ //# sourceMappingURL=blog-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-discovery.js","sourceRoot":"","sources":["../src/blog-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { discoverBlogPosts, filterBlogPosts } from './blog-discovery.js';
2
+ export { generateHtmlWithMetaTags, generateMetaTags, generateMetaTagsObject, type MetaTagsOptions, } from './meta-tags.js';
3
+ export { type SetupSSGOptions, setupSSG } from './setup-ssg.js';
4
+ export { createStaticGenPlugin, type StaticGenPluginOptions, } from './static-gen-plugin.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGxE,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,eAAe,GACpB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,EACN,qBAAqB,EACrB,KAAK,sBAAsB,GAC3B,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,9 @@
1
+ // Blog discovery
2
+ export { discoverBlogPosts, filterBlogPosts } from './blog-discovery.js';
3
+ // Meta tag generation
4
+ export { generateHtmlWithMetaTags, generateMetaTags, generateMetaTagsObject, } from './meta-tags.js';
5
+ // SSG setup utilities (recommended for consumers)
6
+ export { setupSSG } from './setup-ssg.js';
7
+ // Vite plugin
8
+ export { createStaticGenPlugin, } from './static-gen-plugin.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAExE,sBAAsB;AACtB,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,GAEtB,MAAM,gBAAgB,CAAA;AACvB,kDAAkD;AAClD,OAAO,EAAwB,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC/D,cAAc;AACd,OAAO,EACN,qBAAqB,GAErB,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import type { BlogPostMetadata } from './types.js';
2
+ export interface MetaTagsOptions {
3
+ /** Base URL for absolute OG image URLs */
4
+ baseUrl?: string;
5
+ /** Default OG image URL if post doesn't have one */
6
+ defaultOgImage?: string;
7
+ /** Site title for Twitter Card */
8
+ siteTitle?: string;
9
+ /** Site name for OG tags */
10
+ siteName?: string;
11
+ /** Twitter handle for Twitter Card */
12
+ twitterHandle?: string;
13
+ }
14
+ /**
15
+ * Generate meta tags HTML string from blog post metadata
16
+ */
17
+ export declare function generateMetaTags(post: BlogPostMetadata, options?: MetaTagsOptions): string;
18
+ /**
19
+ * Generate an HTML template with injected meta tags
20
+ * Used for static page generation
21
+ */
22
+ export declare function generateHtmlWithMetaTags(baseHtml: string, post: BlogPostMetadata, options?: MetaTagsOptions): string;
23
+ /**
24
+ * Generate meta tags as a JSON object for dynamic injection
25
+ * Useful if you want to update meta tags on client-side navigation
26
+ */
27
+ export declare function generateMetaTagsObject(post: BlogPostMetadata, options?: MetaTagsOptions): Record<string, string>;
28
+ //# sourceMappingURL=meta-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-tags.d.ts","sourceRoot":"","sources":["../src/meta-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,eAAe;IAC/B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,eAAoB,GAC3B,MAAM,CA4DR;AAgBD;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,eAAoB,GAC3B,MAAM,CA8BR;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,eAAoB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCxB"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Generate meta tags HTML string from blog post metadata
3
+ */
4
+ export function generateMetaTags(post, options = {}) {
5
+ const { baseUrl = 'https://docs.staking.polkadot.cloud', defaultOgImage = '/img/og-image.png', siteTitle = 'Polkadot Cloud Staking', siteName = 'Polkadot Cloud Staking Documentation', twitterHandle = '@PolkadotCloud', } = options;
6
+ const postUrl = `${baseUrl}/${post.language}/docs/${post.slug}`;
7
+ const ogImage = post.ogImage
8
+ ? `${baseUrl}${post.ogImage.startsWith('/') ? '' : '/'}${post.ogImage}`
9
+ : `${baseUrl}${defaultOgImage}`;
10
+ // Normalize keywords
11
+ let keywordsString = '';
12
+ if (post.keywords) {
13
+ if (Array.isArray(post.keywords)) {
14
+ keywordsString = post.keywords.join(', ');
15
+ }
16
+ else {
17
+ keywordsString = post.keywords;
18
+ }
19
+ }
20
+ const tags = [
21
+ // Basic meta tags
22
+ `<meta name="description" content="${escapeHtml(post.description || siteTitle)}">`,
23
+ `<meta name="viewport" content="width=device-width, initial-scale=1.0">`,
24
+ // Open Graph (OG) tags
25
+ `<meta property="og:type" content="article">`,
26
+ `<meta property="og:title" content="${escapeHtml(post.title)} | ${escapeHtml(siteName)}">`,
27
+ `<meta property="og:description" content="${escapeHtml(post.description || siteTitle)}">`,
28
+ `<meta property="og:url" content="${escapeHtml(postUrl)}">`,
29
+ `<meta property="og:image" content="${escapeHtml(ogImage)}">`,
30
+ `<meta property="og:site_name" content="${escapeHtml(siteName)}">`,
31
+ // Article-specific meta tags
32
+ `<meta property="article:published_time" content="${post.date || new Date().toISOString()}">`,
33
+ post.author
34
+ ? `<meta property="article:author" content="${escapeHtml(post.author)}">`
35
+ : '',
36
+ // Twitter Card tags
37
+ `<meta name="twitter:card" content="summary_large_image">`,
38
+ `<meta name="twitter:site" content="${twitterHandle}">`,
39
+ `<meta name="twitter:title" content="${escapeHtml(post.title)} | ${escapeHtml(siteName)}">`,
40
+ `<meta name="twitter:description" content="${escapeHtml(post.description || siteTitle)}">`,
41
+ `<meta name="twitter:image" content="${escapeHtml(ogImage)}">`,
42
+ // Keywords
43
+ keywordsString
44
+ ? `<meta name="keywords" content="${escapeHtml(keywordsString)}">`
45
+ : '',
46
+ // Canonical URL
47
+ `<link rel="canonical" href="${escapeHtml(postUrl)}">`,
48
+ ];
49
+ return tags.filter(Boolean).join('\n\t');
50
+ }
51
+ /**
52
+ * Escape HTML special characters in attribute values
53
+ */
54
+ function escapeHtml(text) {
55
+ const map = {
56
+ '&': '&amp;',
57
+ '<': '&lt;',
58
+ '>': '&gt;',
59
+ '"': '&quot;',
60
+ "'": '&#039;',
61
+ };
62
+ return text.replace(/[&<>"']/g, (char) => map[char]);
63
+ }
64
+ /**
65
+ * Generate an HTML template with injected meta tags
66
+ * Used for static page generation
67
+ */
68
+ export function generateHtmlWithMetaTags(baseHtml, post, options = {}) {
69
+ const metaTags = generateMetaTags(post, options);
70
+ // Remove default OG and Twitter meta tags to replace them with custom ones
71
+ let html = baseHtml
72
+ // Remove default og:* meta tags (handles multiline)
73
+ .replace(/<meta\s+property="og:[^"]*"[^>]*>/gis, '')
74
+ // Remove default article:* meta tags (handles multiline)
75
+ .replace(/<meta\s+property="article:[^"]*"[^>]*>/gis, '')
76
+ // Remove default twitter:* meta tags with either 'name' or 'property' attribute (handles multiline)
77
+ .replace(/<meta\s+(?:name|property)="twitter:[^"]*"[^>]*>/gis, '')
78
+ // Remove default description tag
79
+ .replace(/<meta\s+name="description"[^>]*>/gis, '')
80
+ // Remove canonical link if present
81
+ .replace(/<link\s+rel="canonical"[^>]*>/gis, '');
82
+ // Clean up excess blank lines left by removed tags
83
+ html = html.replace(/\n\s*\n\s*\n/g, '\n\n');
84
+ // Remove orphaned section comments followed by blank lines
85
+ html = html.replace(/\s*<!--\s*(?:Open Graph|Facebook|Twitter)[^>]*-->\s*\n/g, '');
86
+ // Final cleanup: remove any remaining multiple blank lines
87
+ html = html.replace(/\n\s*\n\s*\n/g, '\n\n');
88
+ // Inject custom meta tags before closing </head> tag
89
+ return html.replace('</head>', `\t${metaTags}\n</head>`);
90
+ }
91
+ /**
92
+ * Generate meta tags as a JSON object for dynamic injection
93
+ * Useful if you want to update meta tags on client-side navigation
94
+ */
95
+ export function generateMetaTagsObject(post, options = {}) {
96
+ const { baseUrl = 'https://docs.staking.polkadot.cloud', defaultOgImage = '/img/og-image.png', siteName = 'Polkadot Cloud Staking Documentation', } = options;
97
+ const postUrl = `${baseUrl}/${post.language}/docs/${post.slug}`;
98
+ const ogImage = post.ogImage
99
+ ? `${baseUrl}${post.ogImage.startsWith('/') ? '' : '/'}${post.ogImage}`
100
+ : `${baseUrl}${defaultOgImage}`;
101
+ // Normalize keywords
102
+ let keywordsArray = [];
103
+ if (post.keywords) {
104
+ if (Array.isArray(post.keywords)) {
105
+ keywordsArray = post.keywords;
106
+ }
107
+ else {
108
+ keywordsArray = post.keywords.split(',').map((k) => k.trim());
109
+ }
110
+ }
111
+ return {
112
+ description: post.description || siteName,
113
+ 'og:type': 'article',
114
+ 'og:title': `${post.title} | ${siteName}`,
115
+ 'og:description': post.description || siteName,
116
+ 'og:url': postUrl,
117
+ 'og:image': ogImage,
118
+ 'og:site_name': siteName,
119
+ 'article:published_time': post.date || new Date().toISOString(),
120
+ ...(post.author && { 'article:author': post.author }),
121
+ 'twitter:card': 'summary_large_image',
122
+ 'twitter:title': `${post.title} | ${siteName}`,
123
+ 'twitter:description': post.description || siteName,
124
+ 'twitter:image': ogImage,
125
+ ...(keywordsArray.length > 0 && { keywords: keywordsArray.join(', ') }),
126
+ canonical: postUrl,
127
+ };
128
+ }
129
+ //# sourceMappingURL=meta-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-tags.js","sourceRoot":"","sources":["../src/meta-tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { PluginOption } from 'vite';
2
+ import type { MetaTagsOptions } from './meta-tags.js';
3
+ export interface SetupSSGOptions {
4
+ /** Path to the docs directory (e.g., 'src/docs') */
5
+ docsPath: string;
6
+ /** Output directory for generated static pages (default: 'dist/docs') */
7
+ outputDir?: string;
8
+ /** Meta tags configuration */
9
+ metaTagsOptions?: MetaTagsOptions;
10
+ }
11
+ /**
12
+ * Setup static site generation for blog posts
13
+ *
14
+ * This is a convenience function that handles the entire SSG setup process.
15
+ * It discovers blog posts from your docs directory and creates a Vite plugin.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { setupSSG } from '@x-wave/blog/vite-config'
20
+ *
21
+ * export default defineConfig(async (env) => {
22
+ * const ssgPlugin = env.command === 'build'
23
+ * ? await setupSSG({
24
+ * docsPath: 'src/docs',
25
+ * outputDir: 'dist/docs',
26
+ * metaTagsOptions: {
27
+ * baseUrl: 'https://example.com',
28
+ * siteName: 'My Documentation',
29
+ * }
30
+ * })
31
+ * : undefined
32
+ *
33
+ * return {
34
+ * plugins: [react(), ssgPlugin].filter(Boolean),
35
+ * // ... rest of config
36
+ * }
37
+ * })
38
+ * ```
39
+ */
40
+ export declare function setupSSG(options: SetupSSGOptions): Promise<PluginOption | undefined>;
41
+ //# sourceMappingURL=setup-ssg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-ssg.d.ts","sourceRoot":"","sources":["../src/setup-ssg.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,MAAM,WAAW,eAAe;IAC/B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAA;CACjC;AAkCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAyBnC"}