datalog-theme 0.8.0 → 0.9.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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +84 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +4 -2
  5. data/_data/i18n/en.yml +321 -0
  6. data/_data/i18n/es.yml +321 -0
  7. data/_data/i18n/pt.yml +321 -0
  8. data/_data/js_manifest.json +16 -0
  9. data/_includes/components/academic-dashboard.html +4 -4
  10. data/_includes/components/author-bio.html +21 -11
  11. data/_includes/components/author-list.html +32 -0
  12. data/_includes/components/breadcrumbs.html +6 -4
  13. data/_includes/components/citation-tools.html +18 -58
  14. data/_includes/components/comments-thread.html +90 -0
  15. data/_includes/components/contact-form.html +120 -0
  16. data/_includes/components/correction-report.html +82 -0
  17. data/_includes/components/enhanced-toc.html +6 -7
  18. data/_includes/components/hero.html +1 -1
  19. data/_includes/components/license-link.html +13 -0
  20. data/_includes/components/license-notice.html +28 -0
  21. data/_includes/components/moderation-inbox.html +139 -0
  22. data/_includes/components/post-hero.html +2 -2
  23. data/_includes/components/reactions.html +49 -0
  24. data/_includes/components/reading-list.html +34 -0
  25. data/_includes/components/reading-mode-toggle.html +67 -0
  26. data/_includes/components/reading-state-bookmark.html +27 -0
  27. data/_includes/components/reading-state-panel.html +62 -0
  28. data/_includes/components/reading-state-resume.html +17 -0
  29. data/_includes/components/reproducibility.html +61 -0
  30. data/_includes/components/responsive-image.html +3 -3
  31. data/_includes/components/revision-history.html +39 -0
  32. data/_includes/components/revision-notice.html +35 -0
  33. data/_includes/components/series-nav.html +64 -0
  34. data/_includes/components/subscribe-form.html +88 -0
  35. data/_includes/components/subscription-manage.html +69 -0
  36. data/_includes/components/visualization-card.html +1 -1
  37. data/_includes/components/webmentions.html +48 -0
  38. data/_includes/csp-meta.html +21 -1
  39. data/_includes/footer/nav-column.html +1 -1
  40. data/_includes/footer.html +5 -2
  41. data/_includes/head.html +64 -52
  42. data/_includes/header/navigation.html +2 -2
  43. data/_includes/header.html +1 -1
  44. data/_includes/layouts/default/article.html +6 -8
  45. data/_includes/meta/dynamic-services-config.html +14 -0
  46. data/_includes/meta/math-config.html +12 -5
  47. data/_includes/meta/person-json.html +27 -0
  48. data/_includes/meta/publisher.html +45 -0
  49. data/_includes/meta/schema.html +84 -48
  50. data/_includes/meta/scholarly.html +122 -0
  51. data/_includes/meta/scripts-loader.html +2 -0
  52. data/_includes/meta/webmention-discovery.html +14 -0
  53. data/_includes/post/related-posts.html +1 -1
  54. data/_includes/scripts.html +57 -0
  55. data/_layouts/dataset.html +5 -4
  56. data/_layouts/default.html +1 -1
  57. data/_layouts/home.html +2 -2
  58. data/_layouts/notebook.html +1 -1
  59. data/_layouts/package.html +8 -7
  60. data/_layouts/page.html +15 -0
  61. data/_layouts/portfolio.html +1 -1
  62. data/_layouts/post.html +94 -25
  63. data/_layouts/project.html +5 -5
  64. data/_layouts/research.html +27 -75
  65. data/_plugins/authors.rb +151 -0
  66. data/_plugins/citation_exports.rb +93 -0
  67. data/_plugins/config_validator.rb +223 -20
  68. data/_plugins/critical_css_check.rb +42 -0
  69. data/_plugins/i18n.rb +6 -4
  70. data/_plugins/image_optimizer.rb +240 -186
  71. data/_plugins/licenses.rb +147 -0
  72. data/_plugins/math_preprocessor.rb +55 -11
  73. data/_plugins/references.rb +260 -0
  74. data/_plugins/reproducibility.rb +167 -0
  75. data/_plugins/responsive_content.rb +40 -0
  76. data/_plugins/revisions.rb +102 -0
  77. data/_plugins/scholarly.rb +55 -0
  78. data/_plugins/series.rb +104 -0
  79. data/_plugins/statements.rb +87 -0
  80. data/_sass/_base.scss +13 -1
  81. data/_sass/_comments-thread.scss +159 -0
  82. data/_sass/_layout.scss +402 -1
  83. data/_sass/_mathematical.scss +38 -1
  84. data/_sass/_moderation.scss +222 -0
  85. data/_sass/_post-components.scss +4 -2
  86. data/_sass/_print.scss +299 -0
  87. data/_sass/_reactions.scss +89 -0
  88. data/_sass/_reading-state.scss +290 -0
  89. data/_sass/_service-forms.scss +204 -0
  90. data/_sass/_subscriptions.scss +140 -0
  91. data/_sass/_syntax-highlighting.scss +3 -3
  92. data/_sass/_theme.scss +11 -0
  93. data/_sass/_typography.scss +116 -0
  94. data/_sass/_utilities.scss +5 -0
  95. data/_sass/_variables.scss +6 -0
  96. data/_sass/_webmentions.scss +125 -0
  97. data/assets/js/dist/academic.js +1 -1
  98. data/assets/js/dist/analytics-dashboard.js +1 -1
  99. data/assets/js/dist/chunks/chunk-PATLC23F.js +1 -0
  100. data/assets/js/dist/chunks/chunk-VZ5WKQVA.js +1 -0
  101. data/assets/js/dist/chunks/chunk-WIRUK3OZ.js +1 -0
  102. data/assets/js/dist/comments.js +2 -0
  103. data/assets/js/dist/contact.js +1 -0
  104. data/assets/js/dist/core.js +1 -1
  105. data/assets/js/dist/corrections.js +1 -0
  106. data/assets/js/dist/loader.js +1 -1
  107. data/assets/js/dist/math.js +1 -1
  108. data/assets/js/dist/moderation.js +1 -0
  109. data/assets/js/dist/notebook.js +1 -1
  110. data/assets/js/dist/reactions.js +1 -0
  111. data/assets/js/dist/reading-state.js +1 -0
  112. data/assets/js/dist/search.js +1 -1
  113. data/assets/js/dist/sources.json +52 -0
  114. data/assets/js/dist/subscriptions.js +1 -0
  115. data/assets/js/dist/visualizations.js +2 -2
  116. data/assets/js/dist/webmentions.js +1 -0
  117. data/assets/js/loader.js +34 -0
  118. data/datalog-theme.gemspec +1 -2
  119. data/lib/datalog/cli.rb +9 -1
  120. data/lib/datalog/critical_css.rb +168 -0
  121. data/lib/datalog/plugins/comments.rb +33 -3
  122. data/lib/datalog/theme/installed_files.rb +113 -0
  123. data/lib/datalog/theme/repository_checkout.rb +6 -2
  124. data/lib/datalog/theme/version.rb +5 -1
  125. data/lib/datalog-theme.rb +1 -0
  126. metadata +60 -23
  127. data/assets/js/dist/chunks/chunk-225H5YXE.js +0 -1
@@ -95,6 +95,122 @@ figcaption {
95
95
  margin-top: map.get($spacing, 2);
96
96
  }
97
97
 
98
+ // Numbered figures and tables, and the references to them (_plugins/references.rb).
99
+ .datalog-figure img {
100
+ display: block;
101
+ max-width: 100%;
102
+ height: auto;
103
+ margin: 0 auto;
104
+ }
105
+
106
+ table > caption {
107
+ caption-side: top;
108
+ text-align: left;
109
+ font-size: map.get($font-size-scale, sm);
110
+ color: $color-ink-500;
111
+ margin-bottom: map.get($spacing, 2);
112
+ }
113
+
114
+ body.dark-mode table > caption {
115
+ color: rgba($dark-ink-500, 0.85);
116
+ }
117
+
118
+ .datalog-ref-label {
119
+ font-weight: 600;
120
+ }
121
+
122
+ // A reference scrolls its target clear of the sticky header.
123
+ [data-ref-target] {
124
+ scroll-margin-top: calc(var(--header-height, 96px) + #{map.get($spacing, 4)});
125
+ }
126
+
127
+ @media print {
128
+ [data-ref-target] {
129
+ break-inside: avoid;
130
+ }
131
+ }
132
+
133
+ // Theorems, definitions and the other statements, and proofs (_plugins/statements.rb).
134
+ .datalog-statement {
135
+ @include callout($color-accent-primary);
136
+ margin: map.get($spacing, 5) 0;
137
+ max-width: $max-width-reading;
138
+ }
139
+
140
+ .datalog-statement--definition,
141
+ .datalog-statement--assumption {
142
+ @include callout($color-accent-secondary);
143
+ }
144
+
145
+ .datalog-statement--example,
146
+ .datalog-statement--remark {
147
+ @include callout($color-neutral-500);
148
+ }
149
+
150
+ .datalog-statement__heading,
151
+ .datalog-proof__heading {
152
+ margin: 0 0 map.get($spacing, 2);
153
+ }
154
+
155
+ .datalog-statement__body > :last-child,
156
+ .datalog-proof__body > :last-child {
157
+ margin-bottom: 0;
158
+ }
159
+
160
+ .datalog-proof {
161
+ margin: map.get($spacing, 5) 0;
162
+ max-width: $max-width-reading;
163
+ }
164
+
165
+ .datalog-proof__heading {
166
+ font-style: italic;
167
+ }
168
+
169
+ .datalog-proof__end {
170
+ margin: 0;
171
+ text-align: right;
172
+ }
173
+
174
+ // On the tinted background, a link is a shade darker to keep its contrast, and
175
+ // a code block sits on the page background, which the highlighter's colours
176
+ // are set for.
177
+ .datalog-statement a {
178
+ color: $color-accent-primary-text;
179
+
180
+ &:hover,
181
+ &:focus {
182
+ color: $color-accent-secondary-text;
183
+ }
184
+ }
185
+
186
+ .datalog-statement pre.highlight,
187
+ .datalog-statement pre[class*='language-'] {
188
+ background: $color-surface-50;
189
+ }
190
+
191
+ body.dark-mode {
192
+ .datalog-statement {
193
+ border-left-color: $dark-accent-primary;
194
+ }
195
+
196
+ .datalog-statement--definition,
197
+ .datalog-statement--assumption {
198
+ border-left-color: $dark-accent-secondary;
199
+ }
200
+
201
+ .datalog-statement--example,
202
+ .datalog-statement--remark {
203
+ border-left-color: $dark-ink-500;
204
+ }
205
+ }
206
+
207
+ @media print {
208
+ .datalog-statement {
209
+ border-left-color: currentColor;
210
+ background: none;
211
+ }
212
+ }
213
+
98
214
  body.dark-mode figcaption {
99
215
  color: rgba($dark-ink-500, 0.85);
100
216
  }
@@ -328,6 +328,11 @@ body.dark-mode .analytics-alert {
328
328
  background: rgba($color-surface, 0.65);
329
329
  }
330
330
 
331
+ // The intro's colour is the light ink; on the dark background it was invisible (1.02:1).
332
+ body.dark-mode .post-comments-intro {
333
+ color: $dark-ink-700;
334
+ }
335
+
331
336
  body.dark-mode .datalog-comments {
332
337
  background: rgba($color-surface-dark, 0.35);
333
338
  border-color: rgba($color-border-dark, 0.6);
@@ -45,9 +45,15 @@ $color-accent-secondary: #0d9488; // teal — fills, borders and other non-text
45
45
  // #0d9488 reaches only 3.1:1 to 3.7:1 against white and against its own
46
46
  // tinted backgrounds, so it fails WCAG AA wherever it is used as text.
47
47
  $color-accent-secondary-text: #115e59; // teal — the same accent as readable text
48
+ // #2563eb reaches only 4.4:1 against its own 8% tint on the page background,
49
+ // where a theorem's links sit.
50
+ $color-accent-primary-text: #1d4ed8; // blue — links on a tinted background
48
51
  $color-accent-tertiary: #7c3aed; // purple — charts, visual accents
49
52
  $color-success: #16a34a;
53
+ $color-success-text: #166534; // green — the success colour as readable text
50
54
  $color-warning: #d97706;
55
+ $color-warning-text: #92400e; // amber — the warning colour as readable text
56
+ $dark-warning: #fbbf24; // lighter amber for dark bg
51
57
  $color-critical: #dc2626;
52
58
  $color-neutral-50: #fafaf9 !default;
53
59
  $color-neutral-100: #f5f5f4;
@@ -0,0 +1,125 @@
1
+ @use 'sass:map';
2
+
3
+ @use 'variables' as *;
4
+
5
+ // "Mentioned elsewhere" (components/webmentions.html, assets/js/webmentions/list.js):
6
+ // what other websites said about the article, apart from the comments hosted here.
7
+
8
+ .webmentions {
9
+ max-width: $max-width-reading;
10
+ margin-top: map.get($spacing, 6);
11
+ padding-top: map.get($spacing, 4);
12
+ border-top: 1px solid rgba($color-neutral-500, 0.25);
13
+ }
14
+
15
+ .webmentions__heading {
16
+ margin: 0 0 map.get($spacing, 2);
17
+ font-size: map.get($font-size-scale, lg);
18
+ }
19
+
20
+ .webmentions__intro,
21
+ .webmentions__status {
22
+ margin: 0 0 map.get($spacing, 3);
23
+ font-size: map.get($font-size-scale, sm);
24
+ color: $color-ink-500;
25
+ }
26
+
27
+ .webmentions[data-state='error'] .webmentions__status {
28
+ color: $color-danger-700;
29
+ }
30
+
31
+ .webmentions__list {
32
+ list-style: none;
33
+ margin: 0;
34
+ padding: 0;
35
+ display: grid;
36
+ gap: map.get($spacing, 3);
37
+ }
38
+
39
+ // display: grid would override the hidden attribute.
40
+ .webmentions__list[hidden] {
41
+ display: none;
42
+ }
43
+
44
+ .webmention {
45
+ padding-left: map.get($spacing, 4);
46
+ border-left: 3px solid rgba($color-neutral-500, 0.35);
47
+ font-size: map.get($font-size-scale, sm);
48
+ }
49
+
50
+ .webmention--reply {
51
+ border-left-color: $color-accent-secondary;
52
+ }
53
+
54
+ .webmention__type {
55
+ display: inline-block;
56
+ margin-right: map.get($spacing, 2);
57
+ padding: 0 map.get($spacing, 2);
58
+ border-radius: map.get($radius, sm);
59
+ background: rgba($color-neutral-500, 0.15);
60
+ color: $color-ink-700;
61
+ font-size: map.get($font-size-scale, xs);
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.04em;
64
+ }
65
+
66
+ .webmention__title {
67
+ font-weight: 600;
68
+ overflow-wrap: anywhere;
69
+ }
70
+
71
+ .webmention__meta {
72
+ display: block;
73
+ margin-top: map.get($spacing, 1);
74
+ color: $color-ink-500;
75
+
76
+ > * + *::before {
77
+ content: '·';
78
+ margin: 0 map.get($spacing, 1);
79
+ }
80
+ }
81
+
82
+ .webmention__excerpt {
83
+ margin: map.get($spacing, 2) 0 0;
84
+ color: $color-ink-700;
85
+ overflow-wrap: anywhere;
86
+ }
87
+
88
+ body.dark-mode {
89
+ .webmentions {
90
+ border-top-color: rgba($dark-ink-500, 0.35);
91
+ }
92
+
93
+ .webmentions__intro,
94
+ .webmentions__status,
95
+ .webmention__meta {
96
+ color: $dark-ink-500;
97
+ }
98
+
99
+ .webmentions[data-state='error'] .webmentions__status {
100
+ color: $color-danger-300;
101
+ }
102
+
103
+ .webmention {
104
+ border-left-color: rgba($dark-ink-500, 0.45);
105
+ }
106
+
107
+ .webmention--reply {
108
+ border-left-color: $dark-accent-secondary;
109
+ }
110
+
111
+ .webmention__type {
112
+ background: rgba($dark-ink-500, 0.2);
113
+ color: $dark-ink-700;
114
+ }
115
+
116
+ .webmention__excerpt {
117
+ color: $dark-ink-700;
118
+ }
119
+ }
120
+
121
+ @media print {
122
+ .webmentions {
123
+ display: none !important;
124
+ }
125
+ }
@@ -1 +1 @@
1
- import"./chunks/chunk-225H5YXE.js";function d(){let a=window.DatalogAcademic||{},c=window.DatalogPublications||{},t=c.metrics||(a.citations?a.citations.metrics:{})||{},o=c.yearly_totals||(a.citations?a.citations.yearly_totals:{})||{};document.querySelectorAll("[data-citation-metric]").forEach(e=>{let n=e.getAttribute("data-citation-metric");if(!n)return;let i;switch(n){case"total":i=t.total;break;case"h_index":case"h-index":i=t.h_index;break;case"i10_index":case"i10-index":i=t.i10_index;break;case"since_total":i=t.since_2019?t.since_2019.total:void 0;break;case"since_h_index":i=t.since_2019?t.since_2019.h_index:void 0;break;case"since_i10":i=t.since_2019?t.since_2019.i10_index:void 0;break;default:if(n.startsWith("year_")){let s=n.replace("year_","");i=o[s]}break}typeof i=="number"?e.textContent=i.toLocaleString():i&&(e.textContent=i)})}function u(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).citation_totals||(a.citations?a.citations.per_publication:{})||{};document.querySelectorAll("[data-publication-citations]").forEach(o=>{let e=o.getAttribute("data-publication-citations");if(!e)return;let n=e.toLowerCase(),i;t[e]?i=t[e].total||t[e]:t[n]&&(i=t[n].total||t[n]),typeof i=="number"&&(o.textContent=i.toLocaleString())})}function f(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).yearly_totals||(a.citations?a.citations.yearly_totals:{})||{},o=document.querySelector("[data-citation-timeline]");o&&t&&o.querySelectorAll("li[data-year]").forEach(n=>{let i=n.getAttribute("data-year");if(!i)return;let s=n.querySelector("[data-year-total]"),r=t[i];s&&typeof r!="undefined"&&(s.textContent=Number(r).toLocaleString(),n.style.setProperty("--timeline-value",Math.min(Number(r)/5,100)))})}function y(){let a=document.querySelector("[data-submission-filter]");if(a){let c=document.querySelectorAll(".submission-card"),t=()=>{let o=a.value;c.forEach(e=>{if(!o){e.hidden=!1;return}let n=e.getAttribute("data-submission-status");e.hidden=n!==o})};a.addEventListener("change",t),t()}}function p(){let a=document.querySelector("[data-calendar-filter]"),c=document.querySelector("[data-academic-calendar]");if(a&&c){let t=c.querySelectorAll("li[data-event-type]"),o=()=>{let e=a.value;t.forEach(n=>{if(!e){n.hidden=!1;return}let i=n.getAttribute("data-event-type");n.hidden=i!==e})};a.addEventListener("change",o),o()}}function b(){document.querySelectorAll(".open-science-badge").forEach(c=>{let t=c.querySelector(".open-science-badge__description"),o=c.querySelector(".open-science-badge__criteria"),e=[];t&&e.push(t.textContent.trim()),o&&e.push(o.textContent.trim()),e.length&&c.setAttribute("title",e.join(" \u2022 "))})}function l(){d(),u(),f(),y(),p(),b()}typeof window!="undefined"&&document.readyState!=="loading"?l():typeof window!="undefined"&&document.addEventListener("DOMContentLoaded",l);export{l as initAcademicFeatures,p as initCalendarFilter,b as initOpenScienceBadges,y as initSubmissionFilter,d as populateCitationMetrics,f as populateCitationTimeline,u as populatePublicationCitations};
1
+ import"./chunks/chunk-PATLC23F.js";function d(){let a=window.DatalogAcademic||{},c=window.DatalogPublications||{},t=c.metrics||(a.citations?a.citations.metrics:{})||{},o=c.yearly_totals||(a.citations?a.citations.yearly_totals:{})||{};document.querySelectorAll("[data-citation-metric]").forEach(e=>{let n=e.getAttribute("data-citation-metric");if(!n)return;let i;switch(n){case"total":i=t.total;break;case"h_index":case"h-index":i=t.h_index;break;case"i10_index":case"i10-index":i=t.i10_index;break;case"since_total":i=t.since_2019?t.since_2019.total:void 0;break;case"since_h_index":i=t.since_2019?t.since_2019.h_index:void 0;break;case"since_i10":i=t.since_2019?t.since_2019.i10_index:void 0;break;default:if(n.startsWith("year_")){let s=n.replace("year_","");i=o[s]}break}typeof i=="number"?e.textContent=i.toLocaleString():i&&(e.textContent=i)})}function u(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).citation_totals||(a.citations?a.citations.per_publication:{})||{};document.querySelectorAll("[data-publication-citations]").forEach(o=>{let e=o.getAttribute("data-publication-citations");if(!e)return;let n=e.toLowerCase(),i;t[e]?i=t[e].total||t[e]:t[n]&&(i=t[n].total||t[n]),typeof i=="number"&&(o.textContent=i.toLocaleString())})}function f(){let a=window.DatalogAcademic||{},t=(window.DatalogPublications||{}).yearly_totals||(a.citations?a.citations.yearly_totals:{})||{},o=document.querySelector("[data-citation-timeline]");o&&t&&o.querySelectorAll("li[data-year]").forEach(n=>{let i=n.getAttribute("data-year");if(!i)return;let s=n.querySelector("[data-year-total]"),r=t[i];s&&typeof r!="undefined"&&(s.textContent=Number(r).toLocaleString(),n.style.setProperty("--timeline-value",Math.min(Number(r)/5,100)))})}function y(){let a=document.querySelector("[data-submission-filter]");if(a){let c=document.querySelectorAll(".submission-card"),t=()=>{let o=a.value;c.forEach(e=>{if(!o){e.hidden=!1;return}let n=e.getAttribute("data-submission-status");e.hidden=n!==o})};a.addEventListener("change",t),t()}}function p(){let a=document.querySelector("[data-calendar-filter]"),c=document.querySelector("[data-academic-calendar]");if(a&&c){let t=c.querySelectorAll("li[data-event-type]"),o=()=>{let e=a.value;t.forEach(n=>{if(!e){n.hidden=!1;return}let i=n.getAttribute("data-event-type");n.hidden=i!==e})};a.addEventListener("change",o),o()}}function b(){document.querySelectorAll(".open-science-badge").forEach(c=>{let t=c.querySelector(".open-science-badge__description"),o=c.querySelector(".open-science-badge__criteria"),e=[];t&&e.push(t.textContent.trim()),o&&e.push(o.textContent.trim()),e.length&&c.setAttribute("title",e.join(" \u2022 "))})}function l(){d(),u(),f(),y(),p(),b()}typeof window!="undefined"&&document.readyState!=="loading"?l():typeof window!="undefined"&&document.addEventListener("DOMContentLoaded",l);export{l as initAcademicFeatures,p as initCalendarFilter,b as initOpenScienceBadges,y as initSubmissionFilter,d as populateCitationMetrics,f as populateCitationTimeline,u as populatePublicationCitations};
@@ -1 +1 @@
1
- import"./chunks/chunk-225H5YXE.js";function m(){return window.__DATALOG_ANALYTICS__||{}}function E(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function f(e){return!e||!Array.isArray(e.rows)?[]:e.rows}function d(e,a){return new Intl.NumberFormat(void 0,a||{maximumFractionDigits:0}).format(e||0)}function h(e,a,n){var r;if(!e)return;let c=n||((r=e.closest("table"))==null?void 0:r.querySelectorAll("th").length)||1,i=document.createElement("tr");i.className="placeholder";let s=document.createElement("td");s.setAttribute("colspan",c),s.textContent=a,i.appendChild(s),e.replaceChildren(i)}function v(){let e=document.getElementById("analytics-top-posts"),a=f(m().top_posts);if(e){if(!a.length){h(e,e.dataset.emptyMessage||"No data available",3);return}e.replaceChildren(),a.forEach(n=>{var b,y,C;let c=n.dimensionValues||[],i=n.metricValues||[],s=((b=c[0])==null?void 0:b.value)||"",r=Number(((y=i[0])==null?void 0:y.value)||0),t=Number(((C=i[1])==null?void 0:C.value)||0),o=document.createElement("tr"),l=document.createElement("a");l.href=s.startsWith("/")?s:`/${s}`,l.textContent=s||"\u2014",l.rel="noopener",l.className="analytics-link";let u=document.createElement("td");u.appendChild(l);let p=document.createElement("td");p.textContent=d(r);let g=document.createElement("td");g.textContent=d(t,{maximumFractionDigits:0}),o.append(u,p,g),e.appendChild(o)})}}function w(){let e=document.getElementById("analytics-search-terms");if(!e)return;let a=f(m().search_terms);if(!a.length){h(e,e.dataset.emptyMessage||"No search queries recorded",2);return}e.replaceChildren(),a.forEach(n=>{var u,p;let c=n.dimensionValues||[],i=n.metricValues||[],s=((u=c[0])==null?void 0:u.value)||"(not provided)",r=Number(((p=i[0])==null?void 0:p.value)||0),t=document.createElement("tr"),o=document.createElement("td");o.textContent=s;let l=document.createElement("td");l.textContent=d(r),t.append(o,l),e.appendChild(t)})}function N(e){return!e||e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}function _(){let e=document.getElementById("analytics-visitors-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().visitor_trends);if(!a.length)return;let n=a.map(t=>{var o,l;return N((l=(o=t.dimensionValues)==null?void 0:o[0])==null?void 0:l.value)}),c=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[0])==null?void 0:l.value)||0)}),i=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[1])==null?void 0:l.value)||0)}),s=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[2])==null?void 0:l.value)||0)}),r=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[3])==null?void 0:l.value)||0)});new Chart(e,{type:"line",data:{labels:n,datasets:[{label:"Total users",data:c,borderColor:"#2563eb",backgroundColor:"rgba(37, 99, 235, 0.15)",tension:.35,fill:!0},{label:"New users",data:i,borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.12)",tension:.35,fill:!1},{label:"Sessions",data:s,borderColor:"#9333ea",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.35,fill:!1},{label:"Page views",data:r,borderColor:"#f97316",backgroundColor:"rgba(249, 115, 22, 0.1)",borderDash:[6,6],tension:.35,fill:!1}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}},plugins:{legend:{position:"top"}}}})}function A(){let e=document.getElementById("analytics-engagement-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().engagement_by_page).slice(0,10);if(!a.length)return;let n=a.map(s=>{var r,t;return((t=(r=s.dimensionValues)==null?void 0:r[0])==null?void 0:t.value)||"\u2014"}),c=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[2])==null?void 0:t.value)||0)}),i=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[0])==null?void 0:t.value)||0)});new Chart(e,{type:"bar",data:{labels:n,datasets:[{label:"Engaged sessions",data:c,backgroundColor:"rgba(59, 130, 246, 0.7)"},{label:"Page views",data:i,backgroundColor:"rgba(14, 165, 233, 0.5)"}]},options:{responsive:!0,maintainAspectRatio:!1,indexAxis:"y",scales:{x:{beginAtZero:!0,ticks:{callback:s=>d(s)}}},plugins:{legend:{position:"top"}}}})}function k(){let e=document.getElementById("analytics-key-events");if(!e)return;let a=f(m().key_events);if(!a.length){let n=document.createElement("li");n.className="placeholder",n.textContent="No tracked events in the selected window.",e.replaceChildren(n);return}e.replaceChildren(),a.forEach(n=>{var t,o,l,u;let c=((o=(t=n.dimensionValues)==null?void 0:t[0])==null?void 0:o.value)||"event",i=Number(((u=(l=n.metricValues)==null?void 0:l[0])==null?void 0:u.value)||0),s=document.createElement("li"),r=document.createElement("strong");r.textContent=d(i),s.appendChild(r),s.appendChild(document.createTextNode(` ${c.replace(/_/g," ")}`)),e.appendChild(s)})}function x(){let e=m().scholar||{},a=document.querySelector('[data-field="scholar-total"]'),n=document.querySelector('[data-field="scholar-h-index"]'),c=document.querySelector('[data-field="scholar-i10-index"]');a&&(a.textContent=e.total?d(Number(e.total)):"\u2014"),n&&(n.textContent=e.h_index?d(Number(e.h_index)):"\u2014"),c&&(c.textContent=e.i10_index?d(Number(e.i10_index)):"\u2014");let i=document.getElementById("analytics-scholar-chart");if(!i||typeof Chart=="undefined")return;let s=e.yearly_totals||{},r=Object.entries(s).map(([t,o])=>[Number(t),Number(o)]).sort((t,o)=>t[0]-o[0]);r.length&&new Chart(i,{type:"bar",data:{labels:r.map(t=>t[0]),datasets:[{label:"Citations",data:r.map(t=>t[1]),backgroundColor:"rgba(99, 102, 241, 0.8)"}]},options:{responsive:!0,maintainAspectRatio:!1,scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}}}})}function V(){let e=document.getElementById("analytics-monthly-reports");if(!e)return;let a=Array.isArray(m().monthly_reports)?m().monthly_reports:[];if(!a.length){h(e,e.dataset.emptyMessage||"No monthly reports available",5);return}e.replaceChildren(),a.forEach(n=>{let c=document.createElement("tr"),i=document.createElement("td");i.textContent=n.month||"\u2014";let s=document.createElement("td");s.textContent=d(n.total_users||0);let r=document.createElement("td");r.textContent=d(n.new_users||0);let t=document.createElement("td");t.textContent=d(n.sessions||0);let o=document.createElement("td");o.textContent=d(n.page_views||0),c.append(i,s,r,t,o),e.appendChild(c)})}function I(){if(m().status!=="ok"){["analytics-top-posts","analytics-search-terms","analytics-monthly-reports"].forEach(n=>{let c=document.getElementById(n);c&&h(c,m().message||"Analytics data unavailable.")});let a=document.getElementById("analytics-key-events");if(a){let n=document.createElement("li");n.className="placeholder",n.textContent=m().message||"Analytics data unavailable.",a.replaceChildren(n)}x();return}v(),w(),_(),A(),k(),x(),V()}typeof window!="undefined"&&!window.__VITEST__&&E(I);export{h as ensurePlaceholder,N as formatDateLabel,d as formatNumber,E as onReady,f as parseRows,I as render,A as renderEngagementChart,k as renderKeyEvents,V as renderMonthlyReports,x as renderScholar,w as renderSearchTerms,v as renderTopPosts,_ as renderVisitorChart};
1
+ import"./chunks/chunk-PATLC23F.js";function m(){return window.__DATALOG_ANALYTICS__||{}}function E(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function f(e){return!e||!Array.isArray(e.rows)?[]:e.rows}function d(e,a){return new Intl.NumberFormat(void 0,a||{maximumFractionDigits:0}).format(e||0)}function h(e,a,n){var r;if(!e)return;let c=n||((r=e.closest("table"))==null?void 0:r.querySelectorAll("th").length)||1,i=document.createElement("tr");i.className="placeholder";let s=document.createElement("td");s.setAttribute("colspan",c),s.textContent=a,i.appendChild(s),e.replaceChildren(i)}function v(){let e=document.getElementById("analytics-top-posts"),a=f(m().top_posts);if(e){if(!a.length){h(e,e.dataset.emptyMessage||"No data available",3);return}e.replaceChildren(),a.forEach(n=>{var b,y,C;let c=n.dimensionValues||[],i=n.metricValues||[],s=((b=c[0])==null?void 0:b.value)||"",r=Number(((y=i[0])==null?void 0:y.value)||0),t=Number(((C=i[1])==null?void 0:C.value)||0),o=document.createElement("tr"),l=document.createElement("a");l.href=s.startsWith("/")?s:`/${s}`,l.textContent=s||"\u2014",l.rel="noopener",l.className="analytics-link";let u=document.createElement("td");u.appendChild(l);let p=document.createElement("td");p.textContent=d(r);let g=document.createElement("td");g.textContent=d(t,{maximumFractionDigits:0}),o.append(u,p,g),e.appendChild(o)})}}function w(){let e=document.getElementById("analytics-search-terms");if(!e)return;let a=f(m().search_terms);if(!a.length){h(e,e.dataset.emptyMessage||"No search queries recorded",2);return}e.replaceChildren(),a.forEach(n=>{var u,p;let c=n.dimensionValues||[],i=n.metricValues||[],s=((u=c[0])==null?void 0:u.value)||"(not provided)",r=Number(((p=i[0])==null?void 0:p.value)||0),t=document.createElement("tr"),o=document.createElement("td");o.textContent=s;let l=document.createElement("td");l.textContent=d(r),t.append(o,l),e.appendChild(t)})}function N(e){return!e||e.includes("-")?e:e.length===8?`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`:e}function _(){let e=document.getElementById("analytics-visitors-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().visitor_trends);if(!a.length)return;let n=a.map(t=>{var o,l;return N((l=(o=t.dimensionValues)==null?void 0:o[0])==null?void 0:l.value)}),c=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[0])==null?void 0:l.value)||0)}),i=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[1])==null?void 0:l.value)||0)}),s=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[2])==null?void 0:l.value)||0)}),r=a.map(t=>{var o,l;return Number(((l=(o=t.metricValues)==null?void 0:o[3])==null?void 0:l.value)||0)});new Chart(e,{type:"line",data:{labels:n,datasets:[{label:"Total users",data:c,borderColor:"#2563eb",backgroundColor:"rgba(37, 99, 235, 0.15)",tension:.35,fill:!0},{label:"New users",data:i,borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.12)",tension:.35,fill:!1},{label:"Sessions",data:s,borderColor:"#9333ea",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.35,fill:!1},{label:"Page views",data:r,borderColor:"#f97316",backgroundColor:"rgba(249, 115, 22, 0.1)",borderDash:[6,6],tension:.35,fill:!1}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}},plugins:{legend:{position:"top"}}}})}function A(){let e=document.getElementById("analytics-engagement-chart");if(!e||typeof Chart=="undefined")return;let a=f(m().engagement_by_page).slice(0,10);if(!a.length)return;let n=a.map(s=>{var r,t;return((t=(r=s.dimensionValues)==null?void 0:r[0])==null?void 0:t.value)||"\u2014"}),c=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[2])==null?void 0:t.value)||0)}),i=a.map(s=>{var r,t;return Number(((t=(r=s.metricValues)==null?void 0:r[0])==null?void 0:t.value)||0)});new Chart(e,{type:"bar",data:{labels:n,datasets:[{label:"Engaged sessions",data:c,backgroundColor:"rgba(59, 130, 246, 0.7)"},{label:"Page views",data:i,backgroundColor:"rgba(14, 165, 233, 0.5)"}]},options:{responsive:!0,maintainAspectRatio:!1,indexAxis:"y",scales:{x:{beginAtZero:!0,ticks:{callback:s=>d(s)}}},plugins:{legend:{position:"top"}}}})}function k(){let e=document.getElementById("analytics-key-events");if(!e)return;let a=f(m().key_events);if(!a.length){let n=document.createElement("li");n.className="placeholder",n.textContent="No tracked events in the selected window.",e.replaceChildren(n);return}e.replaceChildren(),a.forEach(n=>{var t,o,l,u;let c=((o=(t=n.dimensionValues)==null?void 0:t[0])==null?void 0:o.value)||"event",i=Number(((u=(l=n.metricValues)==null?void 0:l[0])==null?void 0:u.value)||0),s=document.createElement("li"),r=document.createElement("strong");r.textContent=d(i),s.appendChild(r),s.appendChild(document.createTextNode(` ${c.replace(/_/g," ")}`)),e.appendChild(s)})}function x(){let e=m().scholar||{},a=document.querySelector('[data-field="scholar-total"]'),n=document.querySelector('[data-field="scholar-h-index"]'),c=document.querySelector('[data-field="scholar-i10-index"]');a&&(a.textContent=e.total?d(Number(e.total)):"\u2014"),n&&(n.textContent=e.h_index?d(Number(e.h_index)):"\u2014"),c&&(c.textContent=e.i10_index?d(Number(e.i10_index)):"\u2014");let i=document.getElementById("analytics-scholar-chart");if(!i||typeof Chart=="undefined")return;let s=e.yearly_totals||{},r=Object.entries(s).map(([t,o])=>[Number(t),Number(o)]).sort((t,o)=>t[0]-o[0]);r.length&&new Chart(i,{type:"bar",data:{labels:r.map(t=>t[0]),datasets:[{label:"Citations",data:r.map(t=>t[1]),backgroundColor:"rgba(99, 102, 241, 0.8)"}]},options:{responsive:!0,maintainAspectRatio:!1,scales:{y:{beginAtZero:!0,ticks:{callback:t=>d(t)}}}}})}function V(){let e=document.getElementById("analytics-monthly-reports");if(!e)return;let a=Array.isArray(m().monthly_reports)?m().monthly_reports:[];if(!a.length){h(e,e.dataset.emptyMessage||"No monthly reports available",5);return}e.replaceChildren(),a.forEach(n=>{let c=document.createElement("tr"),i=document.createElement("td");i.textContent=n.month||"\u2014";let s=document.createElement("td");s.textContent=d(n.total_users||0);let r=document.createElement("td");r.textContent=d(n.new_users||0);let t=document.createElement("td");t.textContent=d(n.sessions||0);let o=document.createElement("td");o.textContent=d(n.page_views||0),c.append(i,s,r,t,o),e.appendChild(c)})}function I(){if(m().status!=="ok"){["analytics-top-posts","analytics-search-terms","analytics-monthly-reports"].forEach(n=>{let c=document.getElementById(n);c&&h(c,m().message||"Analytics data unavailable.")});let a=document.getElementById("analytics-key-events");if(a){let n=document.createElement("li");n.className="placeholder",n.textContent=m().message||"Analytics data unavailable.",a.replaceChildren(n)}x();return}v(),w(),_(),A(),k(),x(),V()}typeof window!="undefined"&&!window.__VITEST__&&E(I);export{h as ensurePlaceholder,N as formatDateLabel,d as formatNumber,E as onReady,f as parseRows,I as render,A as renderEngagementChart,k as renderKeyEvents,V as renderMonthlyReports,x as renderScholar,w as renderSearchTerms,v as renderTopPosts,_ as renderVisitorChart};
@@ -0,0 +1 @@
1
+ var f=Object.defineProperty,g=Object.defineProperties;var h=Object.getOwnPropertyDescriptors;var d=Object.getOwnPropertySymbols;var i=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var e=(c,a,b)=>a in c?f(c,a,{enumerable:!0,configurable:!0,writable:!0,value:b}):c[a]=b,k=(c,a)=>{for(var b in a||(a={}))i.call(a,b)&&e(c,b,a[b]);if(d)for(var b of d(a))j.call(a,b)&&e(c,b,a[b]);return c},l=(c,a)=>g(c,h(a));export{k as a,l as b};
@@ -0,0 +1 @@
1
+ import{a as k,b as D}from"./chunk-PATLC23F.js";var B="/capabilities",G="/health",K={401:"unauthorized",403:"forbidden",404:"not_found",409:"conflict",422:"invalid",429:"rate_limited"},J=new Set(["timeout","network","rate_limited","server"]),j=new Set(["GET","HEAD","OPTIONS"]),I={disabled:"This feature is not set up on this site.",unsupported:"The service behind this site does not offer this feature.",version:"This site and its service expect different API versions.",timeout:"The service took too long to answer. Try again in a moment.",network:"The service could not be reached. Check your connection and try again.",malformed:"The service answered in a way this site could not read.",unauthorized:"You need to sign in for this.",forbidden:"You are not allowed to do this.",not_found:"The service has nothing at that address.",conflict:"This was already done, or something changed in the meantime.",invalid:"Some of what you entered needs a correction.",rate_limited:"Too many requests for now. Please wait a little and try again.",server:"The service ran into a problem. Try again later.",http:"The service refused the request.",aborted:"The request was cancelled.",reference:"Reference: {{id}}",retry_after:"Try again in {{seconds}} seconds."},a=class extends Error{constructor(r,i,n={}){var u,c,y,p,w,b,g,_;super(i),this.name="ServiceError",this.kind=r,this.status=(u=n.status)!=null?u:null,this.code=(c=n.code)!=null?c:null,this.requestId=(y=n.requestId)!=null?y:null,this.retryAfter=(p=n.retryAfter)!=null?p:null,this.errors=(w=n.errors)!=null?w:null,this.expected=(b=n.expected)!=null?b:null,this.actual=(g=n.actual)!=null?g:null,this.retryable=(_=n.retryable)!=null?_:J.has(r)}};function X(e=globalThis){let r=e.DatalogDynamicServices;return r&&typeof r=="object"?r:{}}function z(e){let r=String(e!=null?e:"1").trim()||"1";return/^v/i.test(r)?`v${r.slice(1)}`:`v${r}`}function W(e,r=Date.now()){if(!e)return null;let i=Number(e);if(Number.isFinite(i))return Math.max(0,i);let n=Date.parse(e);return Number.isNaN(n)?null:Math.max(0,Math.round((n-r)/1e3))}function Q(e,r){if(!e||typeof e.cookie!="string")return null;let i=e.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${r}=`));return i?decodeURIComponent(i.slice(r.length+1)):null}function V(e,r,i){let n=e.status,u=K[n]||(n>=500?"server":"http"),c=r&&typeof r=="object"?r.error||r:{},y=c&&(c.message||c.title)||`The service answered ${n}`;return new a(u,y,{status:n,code:c&&c.code||null,requestId:i,retryAfter:W(e.headers.get("Retry-After")),errors:c&&c.errors||null})}function ee(e,r={}){let i=e&&e.kind?e.kind:"http",n=r[i]||I[i]||r.http||I.http;if((e==null?void 0:e.retryAfter)!=null&&Number.isFinite(e.retryAfter)){let u=r.retry_after||I.retry_after;n+=` ${u.split("{{seconds}}").join(String(Math.ceil(e.retryAfter)))}`}if(e&&e.requestId){let u=r.reference||I.reference;return`${n} ${u.split("{{id}}").join(e.requestId)}`}return n}function Z(e=X(),r={}){let i=r.fetch||((...t)=>globalThis.fetch(...t)),n=r.delay||(t=>new Promise(s=>setTimeout(s,t))),u=r.document===void 0?globalThis.document:r.document,c=String(e.base_url||"").trim(),y=c.replace(/\/+$/,""),p=z(e.api_version),w=Number(e.timeout_ms)>0?Number(e.timeout_ms):8e3,b=["omit","same-origin","include"].includes(e.credentials)?e.credentials:"omit",g=e.features&&typeof e.features=="object"?e.features:{},_=e.paths&&typeof e.paths=="object"?e.paths:{},$=c!=="",E=null;function C(t){return/^https?:\/\//i.test(t)?t:`${y}/${p}${t.startsWith("/")?t:`/${t}`}`}function U(t){let s=_[t];return typeof s=="string"&&s!==""?s:`/${t}`}async function H(t,s,o){var P,F,M,O;if((P=o.signal)!=null&&P.aborted)throw new a("aborted","The request was cancelled",{retryable:!1});let d=new AbortController,N=setTimeout(()=>d.abort(),w),T=!1,A=()=>{T=!0,d.abort()};(F=o.signal)==null||F.addEventListener("abort",A,{once:!0});let l=k({Accept:"application/json"},o.headers||{}),x={method:t,headers:l,credentials:b,signal:d.signal};if(o.body!==void 0&&(l["Content-Type"]="application/json",x.body=JSON.stringify(o.body)),o.idempotencyKey&&(l["Idempotency-Key"]=o.idempotencyKey),!j.has(t)&&e.csrf_header&&e.csrf_cookie){let S=Q(u,e.csrf_cookie);S&&(l[e.csrf_header]=S)}let f,q;try{f=await i(C(s),x),q=await f.text()}catch(S){throw T?new a("aborted","The request was cancelled",{retryable:!1}):d.signal.aborted?new a("timeout",`No answer within ${w} ms`):new a("network","The service could not be reached")}finally{clearTimeout(N),(M=o.signal)==null||M.removeEventListener("abort",A)}let v=f.headers.get("X-Request-Id")||null,h=null;if(q)try{h=JSON.parse(q)}catch(S){if(f.ok)throw new a("malformed","The service did not answer with JSON",{status:f.status,requestId:v,retryable:!1})}if(v=v||(h==null?void 0:h.request_id)||((O=h==null?void 0:h.error)==null?void 0:O.request_id)||null,!f.ok)throw V(f,h,v);return{data:h,status:f.status,requestId:v,headers:f.headers}}async function m(t,s,o={}){var A;if(!$)throw new a("disabled","Dynamic services are not configured for this site",{retryable:!1});let d=String(t).toUpperCase(),N=(A=o.retries)!=null?A:j.has(d)?2:0,T=0;for(;;)try{return await H(d,s,o)}catch(l){let x=l.retryAfter!==null&&l.retryAfter>10;if(!(l instanceof a)||!l.retryable||T>=N||x)throw l;T+=1,await n(l.retryAfter!==null?l.retryAfter*1e3:300*T)}}function L(){return E||(E=m("GET",B).then(({data:t})=>{var d;let s=String((d=t&&t.api_version)!=null?d:"").replace(/^v/i,""),o=p.slice(1);if(s!==o)throw new a("version",`The service speaks API version ${s||"unknown"}; this site expects ${o}`,{expected:o,actual:s,retryable:!1});return t}).catch(t=>{throw E=null,t})),E}async function Y(t){if(!$)throw new a("disabled","Dynamic services are not configured for this site",{retryable:!1});if(g[t]===!1)throw new a("disabled",`${t} is off in this site's settings`,{retryable:!1});let s=await L();if(!s||!s.features||!s.features[t])throw new a("unsupported",`The service does not offer ${t}`,{retryable:!1});return!0}return{enabled:$,base:y,version:p,timeout:w,credentials:b,urlFor:C,pathFor:U,request:m,get:(t,s)=>m("GET",t,s),post:(t,s,o={})=>m("POST",t,D(k({},o),{body:s})),patch:(t,s,o={})=>m("PATCH",t,D(k({},o),{body:s})),delete:(t,s)=>m("DELETE",t,s),capabilities:L,feature:Y,health:()=>m("GET",G).then(({data:t})=>t)}}var R=null;function te(){return R||(R=Z()),R}export{ee as a,Z as b,te as c};
@@ -0,0 +1 @@
1
+ import{a as c}from"./chunk-VZ5WKQVA.js";var b=["idle","pending","success","invalid","error","disabled"];function g(r=null){let t=new Map,i=()=>t.clear();return r&&["input","change","reset"].forEach(e=>r.addEventListener(e,i)),{key(e,n=""){var a,o,d;let s=JSON.stringify(e);if(((a=t.get(n))==null?void 0:a.fingerprint)!==s){let u=((d=(o=globalThis.crypto)==null?void 0:o.randomUUID)==null?void 0:d.call(o))||`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;t.set(n,{fingerprint:s,key:u})}return t.get(n).key},clear(e=""){t.delete(e)},reset:i}}function S(r,t,i,e={}){let n=null;return()=>(n||(n=r.feature(t).then(s=>(i.dataset.state==="error"&&l(i,"idle"),s)).catch(s=>{throw n=null,["disabled","unsupported","version"].includes(s.kind)?l(i,"disabled",c(s,e)):h(i,s,e),s})),n)}function f(r,t){let i=r.elements.namedItem(t);return i?typeof i.setAttribute=="function"?[i]:Array.from(i):[]}function y(r){r.querySelectorAll("[aria-invalid]").forEach(t=>{t.removeAttribute("aria-invalid");let i=(t.getAttribute("aria-describedby")||"").split(/\s+/).filter(e=>e&&!e.endsWith("-error")).join(" ");i?t.setAttribute("aria-describedby",i):t.removeAttribute("aria-describedby")}),r.querySelectorAll("[data-error-for]").forEach(t=>{t.textContent="",t.hidden=!0})}function p(r,t){let i=0,e=null;return Object.keys(t||{}).forEach(n=>{let s=Array.isArray(t[n])?t[n].join(" "):String(t[n]),a=r.querySelector(`[data-error-for="${n}"]`);a&&(a.textContent=s,a.hidden=!1,a.id||(a.id=`${r.id||"form"}-${n}-error`)),f(r,n).forEach(o=>{if(o.setAttribute("aria-invalid","true"),a){let d=(o.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean);d.includes(a.id)||d.push(a.id),o.setAttribute("aria-describedby",d.join(" "))}e=e||o,i+=1})}),e&&typeof e.focus=="function"&&e.focus(),i}function l(r,t,i="",e=null){r.dataset.state=b.includes(t)?t:"idle";let n=t==="pending";r.setAttribute("aria-busy",n?"true":"false"),r.querySelectorAll("button[type=submit], [data-form-submit]").forEach(a=>{a.disabled=n||t==="disabled"}),r.querySelectorAll("fieldset").forEach(a=>{a.disabled=t==="disabled"});let s=r.querySelector("[data-form-status]");s&&(s.setAttribute("role",t==="error"||t==="invalid"?"alert":"status"),s.textContent=i,s.hidden=i===""),y(r),t==="invalid"&&e&&p(r,e)}function v(r){let t={};return new FormData(r).forEach((i,e)=>{let n=typeof i=="string"?i.trim():i;e in t?t[e]=[].concat(t[e],n):t[e]=n}),t}function h(r,t,i={}){let e=c(t,i);t&&t.kind==="invalid"?l(r,"invalid",e,t.errors||null):l(r,"error",e)}export{g as a,S as b,l as c,v as d,h as e};
@@ -0,0 +1,2 @@
1
+ import{a as J,c as x,d as K,e as P}from"./chunks/chunk-WIRUK3OZ.js";import{a as F,b as U,c as B}from"./chunks/chunk-VZ5WKQVA.js";import{a as O,b as T}from"./chunks/chunk-PATLC23F.js";var L="comments",X=3,V=/^https?:\/\//i,Z=new Set(["disabled","unsupported","version"]);function ee(e,t){let n=e.querySelector(t);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(a){return{}}}function te(e,t){return Object.keys(t).reduce((n,a)=>n.split(`{{${a}}}`).join(t[a]),e)}function ne(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return String(e||"");try{return n.toLocaleString(t||void 0,{dateStyle:"medium",timeStyle:"short"})}catch(a){return n.toISOString()}}function re(e,t=!0){let n=Array.isArray(e)?e.filter(o=>o&&typeof o=="object"):[],a=new Map;n.forEach(o=>a.set(String(o.id),{comment:o,replies:[]}));let f=[];a.forEach(o=>{let s=o.comment.parent_id,u=t&&s!==null&&s!==void 0?a.get(String(s)):null;u&&u!==o?u.replies.push(o):f.push(o)});let p=(o,s)=>(Date.parse(o.comment.created_at)||0)-(Date.parse(s.comment.created_at)||0),y=o=>(o.sort(p),o.forEach(s=>y(s.replies)),o);return y(f)}function Y(e,t,n={}){let{labels:a={},lang:f,replies:p=!1,onReply:y}=n,o=t.status==="pending",s=e.createElement("li");s.className=o?"comment comment--pending":"comment",t.id!==null&&t.id!==void 0&&(s.id=`comment-${t.id}`);let u=e.createElement("article");u.className="comment__card";let _=e.createElement("header");_.className="comment__meta";let h=t.author&&typeof t.author=="object"?t.author:{},g=String(h.name||"").trim()||a.anonymous||"Anonymous",i;if(V.test(String(h.url||""))?(i=e.createElement("a"),i.href=h.url,i.rel="nofollow noopener ugc"):i=e.createElement("span"),i.className="comment__author",i.textContent=g,_.appendChild(i),t.created_at){let l=e.createElement("time");l.className="comment__time",l.dateTime=String(t.created_at),l.textContent=ne(t.created_at,f),_.appendChild(l)}if(o){let l=e.createElement("span");l.className="comment__pending",l.textContent=a.pending||"Awaiting moderation",_.appendChild(l)}u.appendChild(_);let S=e.createElement("div");if(S.className="comment__body",String(t.body||"").split(/\n{2,}/).forEach(l=>{let b=e.createElement("p");l.split(`
2
+ `).forEach((v,C)=>{C>0&&b.appendChild(e.createElement("br")),b.appendChild(e.createTextNode(v))}),S.appendChild(b)}),u.appendChild(S),p&&y&&!o&&t.id!==null&&t.id!==void 0){let l=e.createElement("button");l.type="button",l.className="comment__reply post-tool",l.textContent=a.reply||"Reply",l.addEventListener("click",()=>y(t)),u.appendChild(l)}return s.appendChild(u),s}function z(e,t){let n=t.querySelector(":scope > .comments-thread__replies");return n||(n=e.createElement("ol"),n.className="comments-thread__replies",t.appendChild(n)),n}function G(e,t,n,a){n.forEach(f=>{let p=Y(e,f.comment,a);f.replies.length>0&&G(e,z(e,p),f.replies,a),t.appendChild(p)})}function ae(e,t){let n={name:e.name||""};return e.email&&(n.email=e.email),e.url&&(n.url=e.url),{path:t,parent_id:e.parent_id||null,author:n,body:e.body||""}}function se(e,t,n={}){let a={};return e.author.name||(a.name=n.name_required||"Say who you are."),e.author.email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.author.email)&&(a.email=n.email_invalid||"That does not look like an email address."),e.author.url&&!V.test(e.author.url)&&(a.url=n.url_invalid||"A website address starts with http:// or https://."),e.body.trim().length<X&&(a.body=n.body_short||"Say a little more."),t.website&&(a.website="spam"),Object.keys(a).length>0?a:null}function oe(e,t={}){let n=e.ownerDocument,a=t.window||n.defaultView,f=e.dataset.commentsEndpoint||"",p=t.client||(f?U(T(O({},a&&a.DatalogDynamicServices||{}),{base_url:f})):B()),y=e.dataset.commentsPath||"/",o=e.dataset.commentsReplies!=="false",s=ee(e,"[data-comments-labels]"),u=s.errors||{},_=n.documentElement.lang||void 0,h=e.querySelector("[data-comments-status]"),g=e.querySelector("[data-comments-list]"),i=e.querySelector("form"),S=J(i),l=i?i.elements.namedItem("parent_id"):null,b=e.querySelector("[data-comments-replying]"),v=e.querySelector("[data-comments-replying-to]"),C=null,q=!1,I=!1,w=(r,c="",d={})=>{if(e.dataset.state=r,!!h&&(h.textContent=c,h.hidden=c==="",h.setAttribute("role",d.alert?"alert":"status"),d.retry)){let m=n.createElement("button");m.type="button",m.className="post-tool",m.setAttribute("data-comments-retry",""),m.textContent=s.retry||"Try again",m.addEventListener("click",()=>N.load()),h.appendChild(n.createTextNode(" ")),h.appendChild(m)}},R=()=>(C||(C=p.feature(L).catch(r=>{throw C=null,r})),C),j=r=>{if(!l)return;if(l.value=String(r.id),v){let d=r.author&&r.author.name?r.author.name:s.anonymous||"Anonymous";v.textContent=te(s.replying_to||"Replying to {{name}}",{name:d})}b&&(b.hidden=!1);let c=i.elements.namedItem("body");c&&typeof c.focus=="function"&&c.focus()},D=()=>{l&&(l.value=""),b&&(b.hidden=!0)},k={labels:s,lang:_,replies:o,onReply:j},W=(r,c)=>{let d=o&&c!==null&&c!==void 0?g.querySelector(`#comment-${CSS.escape(String(c))}`):null;(d?z(n,d):g).appendChild(r),g.hidden=!1,e.dataset.state==="empty"&&w("loaded")},N={root:e,form:i,reply:j,cancelReply:D,async load(){if(q)return null;q=!0,w("loading",s.loading||"");try{await R();let r=await p.get(`${p.pathFor(L)}?path=${encodeURIComponent(y)}`),c=r&&r.data&&Array.isArray(r.data.comments)?r.data.comments:[];g.textContent="";let d=re(c,o);return G(n,g,d,k),g.hidden=d.length===0,w(d.length>0?"loaded":"empty",d.length>0?"":s.empty||""),I=!0,c}catch(r){return r&&Z.has(r.kind)?(w("disabled",F(r,u)),i&&(i.hidden=!0)):w("error",F(r,u),{alert:!0,retry:!0}),null}finally{q=!1}},async submit(){let r=K(i),c=ae(r,y),d=se(c,r,s);if(d)return d.website?(x(i,"success",s.posted_pending||""),null):(x(i,"invalid",u.invalid||"",d),null);x(i,"pending",s.sending||"");try{await R();let m=await p.post(p.pathFor(L),c,{idempotencyKey:S.key(c)}),A=m&&m.data&&typeof m.data=="object"?m.data:{},E=A.comment&&typeof A.comment=="object"?A.comment:null,M=A.status==="pending"||E!==null&&E.status==="pending";return E&&W(Y(n,M?T(O({},E),{status:"pending"}):E,k),E.parent_id),S.clear(),i.reset(),D(),x(i,"success",M?s.posted_pending||"":s.posted||""),m}catch(m){return P(i,m,u),null}}};i&&(i.addEventListener("submit",r=>{r.preventDefault(),N.submit()}),e.querySelectorAll("[data-comments-cancel-reply]").forEach(r=>{r.addEventListener("click",D)}));let $=()=>{I||N.load()};if(t.immediate||!a||typeof a.IntersectionObserver!="function")$();else{let r=new a.IntersectionObserver(c=>{c.some(d=>d.isIntersecting)&&(r.disconnect(),$())},{rootMargin:"400px 0px"});r.observe(e)}return N}function H(e=document){return Array.from(e.querySelectorAll("[data-comments-thread]")).map(t=>oe(t))}function Q(){H(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Q,{once:!0}):Q();
@@ -0,0 +1 @@
1
+ import{a as g,b as v,c as a,d as S,e as j}from"./chunks/chunk-WIRUK3OZ.js";import{c as h}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var w="contact",x=20;function C(t,r){let n=t.querySelector(r);if(!n)return{};try{return JSON.parse(n.textContent)||{}}catch(e){return{}}}function _(t,r){let n={category:t.category||"other",name:t.name||"",email:t.email||"",subject:t.subject||"",message:t.message||"",source_url:r};return t.affiliation&&(n.affiliation=t.affiliation),n}function k(t,r,n={}){let e={};return t.name||(e.name=n.name_required||"Say who you are."),/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.email)||(e.email=n.email_invalid||"That does not look like an email address."),t.subject||(e.subject=n.subject_required||"Give the message a subject."),t.message.length<x&&(e.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(x))),r.website&&(e.website="spam"),Object.keys(e).length>0?e:null}function M(t,r={}){let n=r.client||h(),e=t.querySelector("form"),o=C(t,"[data-contact-labels]"),q=C(t,"[data-contact-prompts]"),s=o.errors||{},A=t.dataset.sourceUrl||"",c=e.elements.namedItem("category"),i=t.querySelector("[data-contact-hint]"),L=i?i.textContent:"",b=g(e),m=()=>{i&&(i.textContent=c&&q[c.value]||L)};if(c&&(c.addEventListener("change",m),m()),!n.enabled)return a(e,"disabled",s.disabled||""),{form:e,available:!1,submit:async()=>null};let p=v(n,w,e,s);e.addEventListener("focusin",()=>p().catch(()=>{}),{once:!0});let y={form:e,available:!0,async submit(){let u=S(e),d=_(u,A),f=k(d,u,o);if(f)return f.website?(a(e,"success",o.success||""),null):(a(e,"invalid",s.invalid||"",f),null);a(e,"pending",o.pending||"");try{await p()}catch(l){return null}try{let l=await n.post(n.pathFor(w),d,{idempotencyKey:b.key(d)});return b.clear(),e.reset(),m(),a(e,"success",o.success||""),l}catch(l){return j(e,l,s),null}}};return e.addEventListener("submit",u=>{u.preventDefault(),y.submit()}),y}function E(t=document){return Array.from(t.querySelectorAll("[data-contact-form]")).map(r=>M(r))}function F(){E(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",F,{once:!0}):F();
@@ -1 +1 @@
1
- import{a as h}from"./chunks/chunk-225H5YXE.js";var _="[data-copy-citation], [data-copy-bibliography]";var p=!1;function G(t){let e=t.getAttribute("data-target"),n=e?document.getElementById(e):null;return n?"value"in n?n.value:n.textContent||"":""}async function O(t){let e=G(t);if(!(!e||!navigator.clipboard||!navigator.clipboard.writeText)){t.dataset.originalText===void 0&&(t.dataset.originalText=t.textContent);try{await navigator.clipboard.writeText(e),t.dataset.copied="true",t.textContent="Copied!",setTimeout(()=>{t.dataset.copied="false",t.textContent=t.dataset.originalText},2e3)}catch(n){t.dataset.copied="error",t.textContent="Error"}}}function g(){p||(p=!0,document.addEventListener("click",t=>{let e=t.target instanceof Element?t.target.closest(_):null;e&&O(e)}))}var y="datalog-color-mode",l="dark-mode";function b(){try{return localStorage.getItem(y)}catch(t){return null}}function $(t){try{localStorage.setItem(y,t)}catch(e){}}function q(t){let e=b();return e==="dark"?!0:e==="light"?!1:t.matches}function E(){let t=document.querySelector("[data-toggle-dark-mode]"),e=document.body,n=window.matchMedia("(prefers-color-scheme: dark)");q(n)&&e.classList.add(l);let r=()=>{let a=e.classList.contains(l)?"dark":"light";e.dataset.theme=a,document.documentElement.dataset.theme=a},o=()=>{r(),t&&t.setAttribute("aria-pressed",e.classList.contains(l))};o(),t&&t.addEventListener("click",()=>{let a=e.classList.toggle(l);t.setAttribute("aria-pressed",String(a)),$(a?"dark":"light"),r()}),n.addEventListener("change",a=>{b()||(a.matches?e.classList.add(l):e.classList.remove(l),o())})}var H="datalog-github-";var S=Symbol("recently-failed");function f(t,e){return`${H}${t}-${e}`}function K(t,e,n){try{let r=localStorage.getItem(f(t,e));if(!r)return null;let o=JSON.parse(r);if(!o||typeof o!="object")return null;let a=o.failed?6e5:n;return Date.now()-o.timestamp>a?(localStorage.removeItem(f(t,e)),null):o.failed?S:o.data}catch(r){return null}}function L(t,e,n){try{localStorage.setItem(f(t,e),JSON.stringify(h({timestamp:Date.now()},n)))}catch(r){}}async function M(t,e,n,r){let o=K(t,e,r);if(o===S)return null;if(o)return o;try{let a=await fetch(`${n}/${t}/${e}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let s=await a.json();return L(t,e,{data:s}),s}catch(a){return L(t,e,{failed:!0}),null}}function B(t,e){t.querySelectorAll("[data-github-stat]").forEach(r=>{let o=r.getAttribute("data-github-stat");if(!o)return;let a=e[o];typeof a=="number"?r.textContent=a.toLocaleString():typeof a=="string"&&a.length>0&&(r.textContent=a)})}function F(t){t.dataset.githubState="error";let e=t.getAttribute("data-github-unavailable");e&&t.querySelectorAll("[data-github-stat]").forEach(n=>{n.textContent=e})}function v(){let t=document.querySelectorAll("[data-github-owner][data-github-repo]");if(!t.length)return Promise.resolve();let n=(window.DatalogIntegrations||{}).github||{};if(n.enabled===!1)return Promise.resolve();let r=n.api_base||"https://api.github.com/repos",o=Number(n.cache_ttl||43200)*1e3,a=Array.from(t).map(s=>{let u=s.getAttribute("data-github-owner"),d=s.getAttribute("data-github-repo");return!u||!d?Promise.resolve():(s.dataset.githubState="loading",M(u,d,r,o).then(i=>{if(!i){F(s);return}B(s,i),s.dataset.githubState="ready"}))});return Promise.all(a)}var z="[data-language-filter], [data-navigate-on-change]";function U(t){if(typeof t!="string")return null;let e=Array.from(t).filter(r=>{let o=r.codePointAt(0);return o>31&&o!==127}).join("").trim();if(!e)return null;let n=/^[a-z][a-z0-9+.-]*:/i.exec(e);return n&&!/^https?:$/i.test(n[0])?null:e}function A(){let t=document.querySelectorAll(z);t.length!==0&&t.forEach(e=>{e.addEventListener("change",n=>{let r=U(n.target&&n.target.value);r&&(window.location.href=r)})})}var V="(min-width: 48rem)",T="#site-nav",k=".nav-toggle",m="nav-open";function w(t){return t.replace(/index\.html$/,"").replace(/\/$/,"")}function j(t){let e=t.getAttribute("href");if(!e)return null;try{let n=new URL(e,window.location.origin);if(!n.hash)return null;let r=new URL(window.location.href);return w(n.pathname)!==w(r.pathname)?null:n.hash.replace("#","")}catch(n){return null}}function Y(t){if(!t)return!1;let e=document.getElementById(t);return e?(e.scrollIntoView({behavior:"smooth",block:"start"}),!0):!1}function x(){let t=document.querySelector(T);if(!t)return;let e=document.querySelector(k),n=document.body,r=window.matchMedia(V),o=i=>{if(i){t.dataset.open="true",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"));return}let c=t.dataset.open==="true";c||(t.dataset.open="false"),e&&(e.setAttribute("aria-expanded",String(c)),e.classList.toggle("is-active",c))},a=({focusToggle:i=!1}={})=>{r.matches||(t.dataset.open="false",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"),i&&e.focus()))},s=()=>{r.matches||(t.dataset.open="true",n.classList.add(m),e&&(e.setAttribute("aria-expanded","true"),e.classList.add("is-active")))},u=()=>{r.matches||(t.dataset.open==="true"?a():s())};r.matches||(t.dataset.open="false"),o(r.matches),r.addEventListener("change",i=>{i.matches?o(!0):(a(),t.dataset.open="false",o(!1))}),t.querySelectorAll(".nav-link").forEach(i=>{let c=j(i);i.addEventListener("click",R=>{r.matches||a(),c&&Y(c)&&R.preventDefault()})}),e&&e.addEventListener("click",()=>{u()}),document.addEventListener("keydown",i=>{i.key==="Escape"&&t.dataset.open==="true"&&a({focusToggle:!0})}),document.addEventListener("click",i=>{if(r.matches||t.dataset.open!=="true")return;let c=i.target;!c||typeof c.closest!="function"||c.closest(T)||e&&c.closest(k)||a()})}function J(t,e){let n=window.pageYOffset||document.documentElement.scrollTop,r=document.documentElement.scrollHeight-window.innerHeight,o=r>0?Math.min(n/r*100,100):0;t.tagName==="PROGRESS"?t.setAttribute("value",String(o)):t.style.setProperty("--progress",`${o}%`),e&&(e.textContent=Math.round(o))}function C(){let t=document.querySelector("[data-scroll-progress]");if(!t)return;let e=document.querySelector("[data-scroll-progress-value]"),n=()=>J(t,e);n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)}function I(t){if(!t)return;let e=t.querySelector("input[type='search']"),n=t.getAttribute("action");e?(e.focus(),e.select()):n&&(window.location.href=n)}function X(t){if(!t)return!1;if(t.isContentEditable)return!0;let e=t.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function N(){let t=document.querySelector(".site-search");t&&document.addEventListener("keydown",e=>{X(document.activeElement)||(e.key==="/"&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),I(t)),(e.key==="k"||e.key==="K")&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),I(t)))})}function Q(t){if(!t)return;t.getAttribute("tabindex")===null&&(t.setAttribute("tabindex","-1"),t.dataset.skipLinkTempTabindex="true"),t.addEventListener("blur",()=>{t.dataset.skipLinkTempTabindex&&(t.removeAttribute("tabindex"),delete t.dataset.skipLinkTempTabindex)},{once:!0}),t.focus()}function P(){let t=document.querySelectorAll(".skip-link[href^='#']");t.length&&t.forEach(e=>{e.addEventListener("click",n=>{let o=(e.getAttribute("href")||"").slice(1);if(!o)return;let a=document.getElementById(o);a&&(n.preventDefault(),Q(a))})})}var Z=[P,x,E,A,C,N,v,g];function D(t=Z){t.forEach(e=>{try{e()}catch(n){}})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>D()):D();export{D as initializeCore};
1
+ import{a as p}from"./chunks/chunk-PATLC23F.js";var _="[data-copy-citation], [data-copy-bibliography]";var g=!1;function G(t){let e=t.getAttribute("data-target"),n=e?document.getElementById(e):null;return n?"value"in n?n.value:n.textContent||"":""}async function O(t){let e=G(t);if(!(!e||!navigator.clipboard||!navigator.clipboard.writeText)){t.dataset.originalText===void 0&&(t.dataset.originalText=t.textContent);try{await navigator.clipboard.writeText(e),t.dataset.copied="true",t.textContent="Copied!",setTimeout(()=>{t.dataset.copied="false",t.textContent=t.dataset.originalText},2e3)}catch(n){t.dataset.copied="error",t.textContent="Error"}}}function h(){g||(g=!0,document.addEventListener("click",t=>{let e=t.target instanceof Element?t.target.closest(_):null;e&&O(e)}))}var y="datalog-color-mode",l="dark-mode";function b(){try{return localStorage.getItem(y)}catch(t){return null}}function $(t){try{localStorage.setItem(y,t)}catch(e){}}function q(t){let e=b();return e==="dark"?!0:e==="light"?!1:t.matches}function E(){let t=document.querySelector("[data-toggle-dark-mode]"),e=document.body,n=window.matchMedia("(prefers-color-scheme: dark)");q(n)&&e.classList.add(l);let r=()=>{let a=e.classList.contains(l)?"dark":"light";e.dataset.theme=a,document.documentElement.dataset.theme=a},o=()=>{r(),t&&t.setAttribute("aria-pressed",e.classList.contains(l))};o(),t&&t.addEventListener("click",()=>{let a=e.classList.toggle(l);t.setAttribute("aria-pressed",String(a)),$(a?"dark":"light"),r()}),n.addEventListener("change",a=>{b()||(a.matches?e.classList.add(l):e.classList.remove(l),o())})}var H="datalog-github-";var S=Symbol("recently-failed");function f(t,e){return`${H}${t}-${e}`}function K(t,e,n){try{let r=localStorage.getItem(f(t,e));if(!r)return null;let o=JSON.parse(r);if(!o||typeof o!="object")return null;let a=o.failed?6e5:n;return Date.now()-o.timestamp>a?(localStorage.removeItem(f(t,e)),null):o.failed?S:o.data}catch(r){return null}}function L(t,e,n){try{localStorage.setItem(f(t,e),JSON.stringify(p({timestamp:Date.now()},n)))}catch(r){}}async function M(t,e,n,r){let o=K(t,e,r);if(o===S)return null;if(o)return o;try{let a=await fetch(`${n}/${t}/${e}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let s=await a.json();return L(t,e,{data:s}),s}catch(a){return L(t,e,{failed:!0}),null}}function B(t,e){t.querySelectorAll("[data-github-stat]").forEach(r=>{let o=r.getAttribute("data-github-stat");if(!o)return;let a=e[o];typeof a=="number"?r.textContent=a.toLocaleString():typeof a=="string"&&a.length>0&&(r.textContent=a)})}function F(t){t.dataset.githubState="error";let e=t.getAttribute("data-github-unavailable");e&&t.querySelectorAll("[data-github-stat]").forEach(n=>{n.textContent=e})}function v(){let t=document.querySelectorAll("[data-github-owner][data-github-repo]");if(!t.length)return Promise.resolve();let n=(window.DatalogIntegrations||{}).github||{};if(n.enabled===!1)return Promise.resolve();let r=n.api_base||"https://api.github.com/repos",o=Number(n.cache_ttl||43200)*1e3,a=Array.from(t).map(s=>{let u=s.getAttribute("data-github-owner"),d=s.getAttribute("data-github-repo");return!u||!d?Promise.resolve():(s.dataset.githubState="loading",M(u,d,r,o).then(i=>{if(!i){F(s);return}B(s,i),s.dataset.githubState="ready"}))});return Promise.all(a)}var z="[data-language-filter], [data-navigate-on-change]";function U(t){if(typeof t!="string")return null;let e=Array.from(t).filter(r=>{let o=r.codePointAt(0);return o>31&&o!==127}).join("").trim();if(!e)return null;let n=/^[a-z][a-z0-9+.-]*:/i.exec(e);return n&&!/^https?:$/i.test(n[0])?null:e}function A(){let t=document.querySelectorAll(z);t.length!==0&&t.forEach(e=>{e.addEventListener("change",n=>{let r=U(n.target&&n.target.value);r&&(window.location.href=r)})})}var V="(min-width: 48rem)",T="#site-nav",k=".nav-toggle",m="nav-open";function w(t){return t.replace(/index\.html$/,"").replace(/\/$/,"")}function j(t){let e=t.getAttribute("href");if(!e)return null;try{let n=new URL(e,window.location.origin);if(!n.hash)return null;let r=new URL(window.location.href);return w(n.pathname)!==w(r.pathname)?null:n.hash.replace("#","")}catch(n){return null}}function Y(t){if(!t)return!1;let e=document.getElementById(t);return e?(e.scrollIntoView({block:"start"}),!0):!1}function x(){let t=document.querySelector(T);if(!t)return;let e=document.querySelector(k),n=document.body,r=window.matchMedia(V),o=i=>{if(i){t.dataset.open="true",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"));return}let c=t.dataset.open==="true";c||(t.dataset.open="false"),e&&(e.setAttribute("aria-expanded",String(c)),e.classList.toggle("is-active",c))},a=({focusToggle:i=!1}={})=>{r.matches||(t.dataset.open="false",n.classList.remove(m),e&&(e.setAttribute("aria-expanded","false"),e.classList.remove("is-active"),i&&e.focus()))},s=()=>{r.matches||(t.dataset.open="true",n.classList.add(m),e&&(e.setAttribute("aria-expanded","true"),e.classList.add("is-active")))},u=()=>{r.matches||(t.dataset.open==="true"?a():s())};r.matches||(t.dataset.open="false"),o(r.matches),r.addEventListener("change",i=>{i.matches?o(!0):(a(),t.dataset.open="false",o(!1))}),t.querySelectorAll(".nav-link").forEach(i=>{let c=j(i);i.addEventListener("click",R=>{r.matches||a(),c&&Y(c)&&R.preventDefault()})}),e&&e.addEventListener("click",()=>{u()}),document.addEventListener("keydown",i=>{i.key==="Escape"&&t.dataset.open==="true"&&a({focusToggle:!0})}),document.addEventListener("click",i=>{if(r.matches||t.dataset.open!=="true")return;let c=i.target;!c||typeof c.closest!="function"||c.closest(T)||e&&c.closest(k)||a()})}function J(t,e){let n=window.pageYOffset||document.documentElement.scrollTop,r=document.documentElement.scrollHeight-window.innerHeight,o=r>0?Math.min(n/r*100,100):0;t.tagName==="PROGRESS"?t.setAttribute("value",String(o)):t.style.setProperty("--progress",`${o}%`),e&&(e.textContent=Math.round(o))}function C(){let t=document.querySelector("[data-scroll-progress]");if(!t)return;let e=document.querySelector("[data-scroll-progress-value]"),n=()=>J(t,e);n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)}function I(t){if(!t)return;let e=t.querySelector("input[type='search']"),n=t.getAttribute("action");e?(e.focus(),e.select()):n&&(window.location.href=n)}function X(t){if(!t)return!1;if(t.isContentEditable)return!0;let e=t.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function N(){let t=document.querySelector(".site-search");t&&document.addEventListener("keydown",e=>{X(document.activeElement)||(e.key==="/"&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),I(t)),(e.key==="k"||e.key==="K")&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),I(t)))})}function Q(t){if(!t)return;t.getAttribute("tabindex")===null&&(t.setAttribute("tabindex","-1"),t.dataset.skipLinkTempTabindex="true"),t.addEventListener("blur",()=>{t.dataset.skipLinkTempTabindex&&(t.removeAttribute("tabindex"),delete t.dataset.skipLinkTempTabindex)},{once:!0}),t.focus()}function P(){let t=document.querySelectorAll(".skip-link[href^='#']");t.length&&t.forEach(e=>{e.addEventListener("click",n=>{let o=(e.getAttribute("href")||"").slice(1);if(!o)return;let a=document.getElementById(o);a&&(n.preventDefault(),Q(a))})})}var Z=[P,x,E,A,C,N,v,h];function D(t=Z){t.forEach(e=>{try{e()}catch(n){}})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>D()):D();export{D as initializeCore};
@@ -0,0 +1 @@
1
+ import{a as C,b as w,c as s,d as E,e as A}from"./chunks/chunk-WIRUK3OZ.js";import{c as q}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var _="corrections",L=20,k=500;function D(e){let t=e.querySelector("[data-correction-labels]");if(!t)return{};try{return JSON.parse(t.textContent)||{}}catch(n){return{}}}function O(e,t){!e||!t||t.querySelectorAll("h2[id], h3[id]").forEach(n=>{let o=e.ownerDocument.createElement("option");o.value=n.id,o.textContent=n.textContent.trim(),e.appendChild(o)})}function F(e,t){let n=e.getSelection&&e.getSelection();if(!n||n.isCollapsed||n.rangeCount===0||!t)return"";let o=n.getRangeAt(0);return t.contains(o.commonAncestorContainer)?n.toString().trim().slice(0,k):""}function T(e,t){let n={category:e.category||"other",message:e.message||"",article:{url:t.url,title:t.title}};return e.section&&(n.section=e.section),e.contact_email&&(n.contact_email=e.contact_email),e.quote&&(n.quote=e.quote),n}function I(e,t,n={}){let o={};return e.message.length<L&&(o.message=(n.message_short||"Say a little more: at least {{min}} characters.").split("{{min}}").join(String(L))),e.contact_email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.contact_email)&&(o.contact_email=n.email_invalid||"That does not look like an email address."),t.website&&(o.website="spam"),Object.keys(o).length>0?o:null}function M(e,t={}){var x;let n=e.ownerDocument,o=t.window||n.defaultView,u=t.client||q(),y=t.content===void 0?n.querySelector(".post-content"):t.content,r=e.querySelector("form"),l=D(e),m=l.errors||{},R={url:e.dataset.articleUrl||"",title:e.dataset.articleTitle||""},d=r.elements.namedItem("quote"),a=e.querySelector("[data-correction-quote]"),b=C(r);if(O(r.elements.namedItem("section"),y),!u.enabled)return s(r,"disabled",m.disabled||""),{form:r,available:!1,submit:async()=>null};let h=w(u,_,r,m),f=e.tagName==="DETAILS"?e:e.querySelector("details");if(f){let i="";(x=f.querySelector("summary"))==null||x.addEventListener("pointerdown",()=>{i=F(o,y)}),f.addEventListener("toggle",()=>{if(!f.open)return;let c=F(o,y)||i;i="",d&&c&&(d.value=c,a&&(a.textContent=c,a.hidden=!1)),h().catch(()=>{})})}let v={form:r,available:!0,async submit(){let i=E(r),c=T(i,R),g=I(c,i,l);if(g)return g.website?(s(r,"success",l.success||""),null):(s(r,"invalid",m.invalid||"",g),null);s(r,"pending",l.pending||"");try{await h()}catch(p){return null}try{let p=await u.post(u.pathFor(_),c,{idempotencyKey:b.key(c)});return b.clear(),r.reset(),d&&(d.value=""),a&&(a.textContent="",a.hidden=!0),s(r,"success",l.success||""),p}catch(p){return A(r,p,m),null}}};return r.addEventListener("submit",i=>{i.preventDefault(),v.submit()}),v}function S(e=document){return Array.from(e.querySelectorAll("[data-correction-report]")).map(t=>M(t))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>S()):S();export{S as initCorrectionReports};
@@ -1 +1 @@
1
- import"./chunks/chunk-225H5YXE.js";function y(){let e=document.getElementById("datalog-js-manifest");if(!e||!e.textContent)return{};try{return JSON.parse(e.textContent)}catch(n){return{}}}function l(e){return`feature${e.replace(/(^|-)([a-z])/g,(n,o,s)=>s.toUpperCase())}`}function r(e,n){let o=document.body;if(!o)return;let s=`${l(e)}State`;o.dataset[s]=n}async function u(e){return import(e)}var p=[{name:"search",test:()=>document.querySelector("[data-search-app]")},{name:"visualizations",test:()=>document.querySelector("[data-viz-type]")},{name:"math",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureMath)==="true"}},{name:"academic",test:()=>document.querySelector("[data-citation-metric], [data-citation-table], [data-citation-chart]")},{name:"notebook",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureNotebook)==="true"||document.querySelector(".notebook-output")}}];async function i(e){let n=e||y(),{core:o,features:s={}}=n;if(!o)return;try{r("core","loading"),await u(o),r("core","ready")}catch(t){r("core","error");return}let d=document.body;if(!d)return;let f=p.filter(t=>{let c=l(t.name),a=d.dataset[c];return a==="true"||a==="auto"?a==="auto"&&typeof t.test=="function"?!!t.test():!0:!1}).map(async({name:t,test:c})=>{let a=s[t];if(a){r(t,"loading");try{if(typeof c=="function"&&!c()){r(t,"skipped");return}await u(a),r(t,"ready")}catch(m){r(t,"error")}}});await Promise.all(f)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>i()):i();export{i as bootstrapFeatures};
1
+ import"./chunks/chunk-PATLC23F.js";function f(){let e=document.getElementById("datalog-js-manifest");if(!e||!e.textContent)return{};try{return JSON.parse(e.textContent)}catch(n){return{}}}function m(e){return`feature${e.replace(/(^|-)([a-z])/g,(n,r,c)=>c.toUpperCase())}`}function o(e,n){let r=document.body;if(!r)return;let c=`${m(e)}State`;r.dataset[c]=n}async function u(e){return import(e)}var b=[{name:"search",test:()=>document.querySelector("[data-search-app]")},{name:"visualizations",test:()=>document.querySelector("[data-viz-type]")},{name:"math",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureMath)==="true"}},{name:"academic",test:()=>document.querySelector("[data-citation-metric], [data-citation-table], [data-citation-chart]")},{name:"notebook",test:()=>{var e;return((e=document.body)==null?void 0:e.dataset.featureNotebook)==="true"||document.querySelector(".notebook-output")}},{name:"reading-state",test:()=>document.querySelector("[data-reading-state], [data-reading-list]")},{name:"corrections",test:()=>document.querySelector("[data-correction-report]")},{name:"contact",test:()=>document.querySelector("[data-contact-form]")},{name:"comments",test:()=>document.querySelector("[data-comments-thread]")},{name:"reactions",test:()=>document.querySelector("[data-reactions]")},{name:"webmentions",test:()=>document.querySelector("[data-webmentions]")},{name:"subscriptions",test:()=>document.querySelector("[data-subscribe], [data-subscription-manage]")},{name:"moderation",test:()=>document.querySelector("[data-moderation-inbox]")}];async function i(e){let n=e||f(),{core:r,features:c={}}=n;if(!r)return;try{o("core","loading"),await u(r),o("core","ready")}catch(t){o("core","error");return}let d=document.body;if(!d)return;let l=b.filter(t=>{let s=m(t.name),a=d.dataset[s];return a==="true"||a==="auto"?a==="auto"&&typeof t.test=="function"?!!t.test():!0:!1}).map(async({name:t,test:s})=>{let a=c[t];if(a){o(t,"loading");try{if(typeof s=="function"&&!s()){o(t,"skipped");return}await u(a),o(t,"ready")}catch(y){o(t,"error")}}});await Promise.all(l)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>i()):i();export{i as bootstrapFeatures};
@@ -1 +1 @@
1
- (function(){let u={init(e){this.MathJax=e,this.displayCounter=0,this.anchorCounter=0,this.equationMap=new Map,this.editor=null,this.editorOpen=!1,this.messageTimeout=null,this.initialized=!0,this.pendingTypeset=[],this.setupEditor(),e.startup.promise.then(()=>{if(this.decorateExisting(e.startup.document.math||[]),this.updateEquationReferences(),this.pendingTypeset.length>0){let t=[...this.pendingTypeset];this.pendingTypeset=[],t.forEach(a=>{this.renderLatex(a.target,a.latex,a.options||{})})}}).catch(t=>{}),document.addEventListener("click",t=>this.handleClick(t)),document.addEventListener("keydown",t=>this.handleKeydown(t))},onPageReady(){this.updateEquationReferences()},decorateExisting(e){!e||e.length===0||(this.displayCounter=0,this.anchorCounter=0,this.equationMap.clear(),e.forEach(t=>{try{this.decorateMathItem(t)}catch(a){}}))},decorateMathItem(e){if(!e||!e.typesetRoot)return;let t=e.typesetRoot,a=e.math||"",i=t.closest("[data-math-alt]")||t,n=this.resolveAltText(i,a);t.dataset.mathLatex=a,t.setAttribute("tabindex","0"),t.setAttribute("role","math"),this.syncAltAttributes(i,t,n),e.display?this.decorateDisplay(t,a):this.decorateInline(t,a)},decorateInline(e,t){e&&(e.classList.contains("math-expression__inline")||e.classList.add("math-expression__inline"),e.dataset.mathLatexClean=this.cleanLatex(t))},decorateDisplay(e,t){if(!e)return;let i=e.parentElement&&e.parentElement.classList.contains("math-expression")?e.parentElement:null;i||(i=document.createElement("figure"),i.className="math-expression math-expression--display",e.parentNode.insertBefore(i,e),i.appendChild(e));let n=this.extractEquationInfo(t);this.anchorCounter+=1;let r=`eq:auto-${this.anchorCounter}`,s=n.tag||"";n.skipNumber||(this.displayCounter+=1,s||(s=String(this.displayCounter)));let o=s?`(${s})`:"",l=this.buildAnchorId(n.label,r);if(i.dataset.mathLatex=t,i.dataset.mathLatexClean=this.cleanLatex(t),e.dataset.mathAlt&&!i.dataset.mathAlt&&(i.dataset.mathAlt=e.dataset.mathAlt),o?i.dataset.equationNumber=o:i.removeAttribute("data-equation-number"),i.dataset.equationLabel=n.label||"",l){i.id=l;let c=o||n.label||l;if((o||n.label)&&(this.setEquationReference(l,c),n.label&&n.label!==l&&this.setEquationReference(n.label,c,l),n.label&&n.label.startsWith("eq:"))){let h=n.label.replace(/^eq:/,"");this.setEquationReference(h,c,l)}}this.attachNumberBadge(i,o),this.attachToolbar(i)},extractEquationInfo(e){let t=(e||"").trim(),a=t.match(/\\tag\*?\{([^}]*)\}/),i=t.match(/\\label\{([^}]*)\}/),n=/\\notag|\\nonumber/.test(t);return{tag:a?a[1].trim():"",label:i?i[1].trim():"",skipNumber:n}},buildAnchorId(e,t){return e?e.startsWith("eq:")?e:`eq:${e}`:t||""},setEquationReference(e,t,a){if(!e)return;let i=a||e,n=t||e;this.equationMap.set(e,{anchor:i,label:e,number:n}),e.startsWith("eq:")||this.equationMap.set(`eq:${e}`,{anchor:i,label:e,number:n})},attachNumberBadge(e,t){let a=e.querySelector(".math-expression__number"),i=e.querySelector(".math-expression__sr");if(!t){a&&a.remove(),i&&i.remove();return}a||(a=document.createElement("span"),a.className="math-expression__number",a.setAttribute("aria-hidden","true"),e.appendChild(a)),a.textContent=t,i||(i=document.createElement("span"),i.className="visually-hidden math-expression__sr",e.appendChild(i)),i.textContent=`Equation ${t.replace(/[()]/g,"")}`},attachToolbar(e){let t=e.querySelector(".math-expression__toolbar");if(!t){t=document.createElement("div"),t.className="math-expression__toolbar";let a=document.createElement("button");a.type="button",a.className="math-expression__button",a.setAttribute("data-math-copy","true"),a.setAttribute("aria-label","Copy LaTeX code");let i=document.createElement("span");i.setAttribute("aria-hidden","true"),i.textContent="\u29C9";let n=document.createElement("span");n.className="visually-hidden",n.textContent="Copy equation",a.appendChild(i),a.appendChild(n);let r=document.createElement("button");r.type="button",r.className="math-expression__button",r.setAttribute("data-math-edit","true"),r.setAttribute("aria-label","Open equation editor");let s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.textContent="\u270E";let o=document.createElement("span");o.className="visually-hidden",o.textContent="Edit equation",r.appendChild(s),r.appendChild(o);let l=document.createElement("span");l.className="math-expression__message",l.setAttribute("aria-live","polite"),l.hidden=!0,t.appendChild(a),t.appendChild(r),t.appendChild(l),e.appendChild(t)}},handleClick(e){let t=e.target.closest("[data-math-copy]");if(t){e.preventDefault();let s=t.closest(".math-expression"),o=s?s.dataset.mathLatexClean||s.dataset.mathLatex:null;this.copyLatex(o,s);return}let a=e.target.closest("[data-math-edit]");if(a){e.preventDefault();let s=a.closest(".math-expression"),o=s&&s.dataset.mathLatex||"";this.openEditor(o);return}if(e.target.closest("[data-math-editor-close]")){e.preventDefault(),this.closeEditor();return}if(e.target.closest("[data-math-editor-copy]")){e.preventDefault(),this.editor&&this.editor.textarea&&this.copyLatex(this.editor.textarea.value,null,this.editor.status);return}let r=e.target.closest("[data-symbol-insert]");if(r){e.preventDefault();let s=r.getAttribute("data-symbol-insert");this.insertSymbol(s||"")}},handleKeydown(e){let t=document.activeElement,a=t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable);if((e.ctrlKey||e.metaKey)&&e.altKey&&(e.key==="e"||e.key==="E")){e.preventDefault();let i=a&&t&&t.value||"";this.openEditor(i);return}e.key==="Escape"&&this.editorOpen&&(e.preventDefault(),this.closeEditor())},copyLatex(e,t,a){if(!e)return;let i=r=>{if(a)a.hidden=!1,a.textContent=r,clearTimeout(this.messageTimeout),this.messageTimeout=window.setTimeout(()=>{a.hidden=!0,a.textContent=""},2e3);else if(t){let s=t.querySelector(".math-expression__message");s&&(s.hidden=!1,s.textContent=r,clearTimeout(this.messageTimeout),this.messageTimeout=window.setTimeout(()=>{s.hidden=!0,s.textContent=""},2e3))}},n=()=>{let r=document.createElement("textarea");r.value=e,r.setAttribute("aria-hidden","true"),r.style.position="fixed",r.style.opacity="0",document.body.appendChild(r),r.select();try{document.execCommand("copy"),i("Copied equation")}catch(s){i("Unable to copy")}document.body.removeChild(r)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(e).then(()=>i("Copied equation")).catch(()=>n()):n()},setupEditor(){if(this.editor)return;let e=document.createElement("div");e.id="math-tooling-panel",e.hidden=!0;let t=document.createElement("div");t.className="math-tooling",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","math-tooling-title");let a=document.createElement("h2");a.id="math-tooling-title",a.className="math-tooling__title",a.textContent="Equation editor";let i=document.createElement("p");i.className="math-tooling__description",i.innerHTML="Craft LaTeX expressions with live preview, quick statistical symbols, and chemistry support.";let n=document.createElement("textarea");n.className="math-tooling__input",n.setAttribute("data-math-editor-input","true"),n.setAttribute("spellcheck","false"),n.rows=10;let r=document.createElement("div");r.className="math-tooling__actions";let s=document.createElement("div");s.className="math-tooling__preview",s.setAttribute("data-math-editor-preview","true"),s.setAttribute("aria-live","polite");let o=document.createElement("span");o.className="math-tooling__status",o.hidden=!0;let l=document.createElement("div");l.className="math-tooling__library";let c=document.createElement("h3");c.className="math-tooling__library-title",c.textContent="Quick insert";let h=document.createElement("div");h.className="math-tooling__symbols",[{label:"Mean \u03BC",value:"\\mu"},{label:"Variance \u03C3\xB2",value:"\\sigma^2"},{label:"Std. dev \u03C3",value:"\\sigma"},{label:"Probability",value:"\\mathbb{P}(A)"},{label:"Expectation",value:"\\mathbb{E}[X]"},{label:"Covariance",value:"\\mathrm{Cov}(X, Y)"},{label:"Vector",value:"\\mathbf{x}"},{label:"Norm",value:"\\lVert x \\rVert_2"},{label:"Inner product",value:"\\langle x, y \\rangle"},{label:"Derivative",value:"\\frac{\\mathrm{d}}{\\mathrm{d}t}"},{label:"Integral",value:"\\int_0^1 f(x) \\, \\mathrm{d}x"},{label:"Bayes",value:"\\mathbb{P}(A \\mid B)"},{label:"Chemical H\u2082O",value:"\\ce{H2O}"},{label:"Chemical CO\u2082",value:"\\ce{CO2}"}].forEach(g=>{let p=document.createElement("button");p.type="button",p.className="math-tooling__symbol",p.setAttribute("data-symbol-insert",g.value),p.textContent=g.label,h.appendChild(p)});let d=document.createElement("button");d.type="button",d.className="math-tooling__close",d.setAttribute("data-math-editor-close","true");let b=document.createElement("span");b.setAttribute("aria-hidden","true"),b.textContent="\u2715";let f=document.createElement("span");f.className="visually-hidden",f.textContent="Close equation editor",d.appendChild(b),d.appendChild(f);let m=document.createElement("button");m.type="button",m.className="math-tooling__copy",m.setAttribute("data-math-editor-copy","true"),m.textContent="Copy LaTeX",r.appendChild(m),r.appendChild(d),r.appendChild(o),l.appendChild(c),l.appendChild(h),t.appendChild(a),t.appendChild(i),t.appendChild(n),t.appendChild(s),t.appendChild(r),t.appendChild(l),e.appendChild(t),document.body.appendChild(e),n.addEventListener("input",()=>this.updateEditorPreview()),this.editor={overlay:e,dialog:t,textarea:n,preview:s,status:o}},openEditor(e){if(!this.editor)return;let t=(e||"").trim();this.editor.overlay.hidden=!1,document.body.classList.add("math-tooling-open"),this.editor.textarea.value=t,this.editor.textarea.focus(),this.editor.textarea.setSelectionRange(t.length,t.length),this.editorOpen=!0,this.updateEditorPreview()},closeEditor(){this.editor&&(this.editor.overlay.hidden=!0,document.body.classList.remove("math-tooling-open"),this.editorOpen=!1)},updateEditorPreview(){if(!this.editor||!this.MathJax)return;let e=this.editor.textarea.value.trim();if(!e){this.editor.preview.replaceChildren();let t=document.createElement("p");t.className="math-tooling__placeholder",t.textContent="Preview will appear here.",this.editor.preview.appendChild(t);return}this.renderLatex(this.editor.preview,e,{display:!0,enhance:!1})},insertSymbol(e){if(!this.editor||!this.editor.textarea)return;let t=this.editor.textarea,a=t.selectionStart||0,i=t.selectionEnd||0,n=t.value,r=`${n.slice(0,a)}${e}${n.slice(i)}`;t.value=r;let s=a+e.length;t.focus(),t.setSelectionRange(s,s),this.updateEditorPreview()},updateEquationReferences(){if(!this.equationMap||this.equationMap.size===0)return;document.querySelectorAll("[data-equation-ref]").forEach(a=>{let i=a.getAttribute("data-equation-ref");if(!i)return;let n=this.lookupEquation(i.replace(/^#/,""));if(!n)return;a.setAttribute("href",`#${n.anchor}`);let r=a.textContent.trim();(!r||r===i||r===n.anchor||r===`(${i})`)&&(a.textContent=n.number||n.anchor),a.classList.add("math-reference"),a.setAttribute("aria-label",`Jump to equation ${n.number||n.anchor}`)}),document.querySelectorAll('a[href^="#eq:"]').forEach(a=>{let i=a.getAttribute("href");if(!i)return;let n=i.replace(/^#/,""),r=this.lookupEquation(n);if(!r)return;a.setAttribute("href",`#${r.anchor}`);let s=a.textContent.trim();(!s||s===i||s===n)&&(a.textContent=r.number||r.anchor),a.dataset.equationRef=r.anchor,a.classList.add("math-reference")})},lookupEquation(e){if(!e)return null;if(this.equationMap.has(e))return this.equationMap.get(e);let t=e.startsWith("eq:")?e:`eq:${e}`;return this.equationMap.get(t)||null},renderLatex(e,t,a={}){if(!e)return Promise.resolve();let i=a.display!==!1;if(!this.MathJax)return e.textContent=t,this.pendingTypeset||(this.pendingTypeset=[]),this.pendingTypeset.push({target:e,latex:t,options:a}),Promise.resolve();let n=i?`\\[${t}\\]`:`\\(${t}\\)`;return e.innerHTML=n,this.MathJax.typesetPromise([e]).catch(r=>{})},cleanLatex(e){return(e||"").replace(/%\s*alt:.*$/gm,"").replace(/\\label\{[^}]*\}/g,"").replace(/\\tag\*?\{[^}]*\}/g,"").trim()},resolveAltText(e,t){let a=e||null,i=this.findDatasetAlt(a);if(i)return i;let n=this.extractAltComment(t);if(n)return n;let s=(a&&a.getAttribute?a.getAttribute("data-math-source"):null)||t;return this.generateAltFromLatex(s)},findDatasetAlt(e){let t=e;for(;t;){if(t.dataset&&t.dataset.mathAlt){let a=t.dataset.mathAlt.trim();if(a)return a}t=t.parentElement}return""},extractAltComment(e){if(!e)return"";let t=String(e).split(/\r?\n/);for(let a=0;a<t.length;a+=1){let i=t[a];if(!i)continue;let n=i.match(/%\s*alt:\s*(.+)$/i);if(n)return n[1].trim()}return""},generateAltFromLatex(e){if(!e)return"";let t=String(e).replace(/%.*$/gm,"");return t=t.replace(/\\frac\s*\{([^{}]+)\}\s*\{([^{}]+)\}/g,(a,i,n)=>{let r=this.sanitizeSegment(i),s=this.sanitizeSegment(n);return`${r} over ${s}`.trim()}),t=t.replace(/\\int(?:_\{([^}]*)\}|_([^\s^{}]+))?(?:\^\{([^}]*)\}|\^([^\s_{}]+))?/g,(a,i,n,r,s)=>{let o=this.sanitizeSegment(i||n),l=this.sanitizeSegment(r||s),c="integral";return o&&(c+=` from ${o}`),l&&(c+=` to ${l}`),c}),t=t.replace(/\\sum(?:_\{([^}]*)\}|_([^\s^{}]+))?(?:\^\{([^}]*)\}|\^([^\s_{}]+))?/g,(a,i,n,r,s)=>{let o=this.sanitizeSegment(i||n),l=this.sanitizeSegment(r||s),c="summation";return o&&(c+=` from ${o}`),l&&(c+=` to ${l}`),c}),t=t.replace(/\\sqrt\s*\{([^{}]+)\}/g,(a,i)=>`square root of ${this.sanitizeSegment(i)}`),t=t.replace(/\\mathrm\s*\{([^{}]+)\}/g,(a,i)=>this.sanitizeSegment(i)),t=t.replace(/\\operatorname\*?\s*\{([^{}]+)\}/g,(a,i)=>this.sanitizeSegment(i)),t=t.replace(/\\[a-zA-Z]+/g," "),t=t.replace(/[{}]/g," "),t=t.replace(/\s+/g," ").trim(),t||"Mathematical expression"},sanitizeSegment(e){return e?String(e).replace(/\\[a-zA-Z]+/g," ").replace(/[{}]/g," ").replace(/\s+/g," ").trim():""},syncAltAttributes(e,t,a){a&&(e&&e.setAttribute&&(e.setAttribute("aria-label",a),e.dataset&&(e.dataset.mathAlt=a)),t&&t.setAttribute&&(t.setAttribute("aria-label",a),t.dataset&&(t.dataset.mathAlt=a)))}};typeof globalThis!="undefined"&&(globalThis.__DATALOG_MATH_INTERNALS__=u),window.DatalogMath={init(e){u.init(e)},onPageReady(){u.initialized&&u.onPageReady()},renderLatex(e,t,a){return u.renderLatex(e,t,a)}}})();
1
+ (function(){let d={init(t){this.MathJax=t,this.displayCounter=0,this.anchorCounter=0,this.equationMap=new Map,this.editor=null,this.editorOpen=!1,this.messageTimeout=null,this.initialized=!0,this.pendingTypeset=[],this.setupEditor(),t.startup.promise.then(()=>{if(this.decorateExisting(t.startup.document.math||[]),this.updateEquationReferences(),this.pendingTypeset.length>0){let e=[...this.pendingTypeset];this.pendingTypeset=[],e.forEach(a=>{this.renderLatex(a.target,a.latex,a.options||{})})}}).catch(e=>{}),document.addEventListener("click",e=>this.handleClick(e)),document.addEventListener("keydown",e=>this.handleKeydown(e))},onPageReady(){this.updateEquationReferences()},decorateExisting(t){!t||t.length===0||(this.displayCounter=0,this.anchorCounter=0,this.equationMap.clear(),t.forEach(e=>{try{this.decorateMathItem(e)}catch(a){}}))},decorateMathItem(t){if(!t||!t.typesetRoot)return;let e=t.typesetRoot,a=t.math||"",n=e.closest("[data-math-alt]")||e,i=this.resolveAltText(n,a);e.dataset.mathLatex=a,e.setAttribute("tabindex","0"),e.setAttribute("role","math"),this.syncAltAttributes(n,e,i),t.display?this.decorateDisplay(e,a):this.decorateInline(e,a),this.exposeReferenceLinks(e)},exposeAllReferenceLinks(t){(t&&typeof t.querySelectorAll=="function"?t:document).querySelectorAll("mjx-container").forEach(a=>this.exposeReferenceLinks(a))},exposeReferenceLinks(t){if(!t||typeof t.querySelectorAll!="function")return;let e=Array.from(t.querySelectorAll("mjx-assistive-mml [href]")),a=t;t.querySelectorAll('[aria-hidden="true"] a[href]').forEach(n=>{n.setAttribute("tabindex","-1");let i=n.getAttribute("href")||"";if(!i.startsWith("#")||n.dataset.mathReferenceExposed==="true")return;n.dataset.mathReferenceExposed="true";let r=e.find(l=>l.getAttribute("href")===i),s=(r&&r.textContent||n.textContent||"").replace(/\s+/g," ").trim(),o=document.createElement("a");o.className="math-reference-link",o.href=i,o.textContent=s?`Equation ${s}`:"Equation",a.insertAdjacentElement("afterend",o),a=o})},decorateInline(t,e){t&&(t.classList.contains("math-expression__inline")||t.classList.add("math-expression__inline"),t.dataset.mathLatexClean=this.cleanLatex(e))},decorateDisplay(t,e){if(!t)return;let n=t.parentElement&&t.parentElement.classList.contains("math-expression")?t.parentElement:null;n||(n=document.createElement("figure"),n.className="math-expression math-expression--display",t.parentNode.insertBefore(n,t),n.appendChild(t));let i=this.extractEquationInfo(e);this.anchorCounter+=1;let r=`eq:auto-${this.anchorCounter}`,s=i.tag||"";i.skipNumber||(this.displayCounter+=1,s||(s=String(this.displayCounter)));let o=s?`(${s})`:"",l=this.buildAnchorId(i.label,r);if(n.dataset.mathLatex=e,n.dataset.mathLatexClean=this.cleanLatex(e),t.dataset.mathAlt&&!n.dataset.mathAlt&&(n.dataset.mathAlt=t.dataset.mathAlt),o?n.dataset.equationNumber=o:n.removeAttribute("data-equation-number"),n.dataset.equationLabel=i.label||"",l){n.id=l;let c=o||i.label||l;if((o||i.label)&&(this.setEquationReference(l,c),i.label&&i.label!==l&&this.setEquationReference(i.label,c,l),i.label&&i.label.startsWith("eq:"))){let h=i.label.replace(/^eq:/,"");this.setEquationReference(h,c,l)}}this.attachNumberBadge(n,o),this.attachToolbar(n)},extractEquationInfo(t){let e=(t||"").trim(),a=e.match(/\\tag\*?\{([^}]*)\}/),n=e.match(/\\label\{([^}]*)\}/),i=/\\notag|\\nonumber/.test(e);return{tag:a?a[1].trim():"",label:n?n[1].trim():"",skipNumber:i}},buildAnchorId(t,e){return t?t.startsWith("eq:")?t:`eq:${t}`:e||""},setEquationReference(t,e,a){if(!t)return;let n=a||t,i=e||t;this.equationMap.set(t,{anchor:n,label:t,number:i}),t.startsWith("eq:")||this.equationMap.set(`eq:${t}`,{anchor:n,label:t,number:i})},attachNumberBadge(t,e){let a=t.querySelector(".math-expression__number"),n=t.querySelector(".math-expression__sr");if(!e){a&&a.remove(),n&&n.remove();return}a||(a=document.createElement("span"),a.className="math-expression__number",a.setAttribute("aria-hidden","true"),t.appendChild(a)),a.textContent=e,n||(n=document.createElement("span"),n.className="visually-hidden math-expression__sr",t.appendChild(n)),n.textContent=`Equation ${e.replace(/[()]/g,"")}`},attachToolbar(t){let e=t.querySelector(".math-expression__toolbar");if(!e){e=document.createElement("div"),e.className="math-expression__toolbar";let a=document.createElement("button");a.type="button",a.className="math-expression__button",a.setAttribute("data-math-copy","true"),a.setAttribute("aria-label","Copy LaTeX code");let n=document.createElement("span");n.setAttribute("aria-hidden","true"),n.textContent="\u29C9";let i=document.createElement("span");i.className="visually-hidden",i.textContent="Copy equation",a.appendChild(n),a.appendChild(i);let r=document.createElement("button");r.type="button",r.className="math-expression__button",r.setAttribute("data-math-edit","true"),r.setAttribute("aria-label","Open equation editor");let s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.textContent="\u270E";let o=document.createElement("span");o.className="visually-hidden",o.textContent="Edit equation",r.appendChild(s),r.appendChild(o);let l=document.createElement("span");l.className="math-expression__message",l.setAttribute("aria-live","polite"),l.hidden=!0,e.appendChild(a),e.appendChild(r),e.appendChild(l),t.appendChild(e)}},handleClick(t){let e=t.target.closest("[data-math-copy]");if(e){t.preventDefault();let s=e.closest(".math-expression"),o=s?s.dataset.mathLatexClean||s.dataset.mathLatex:null;this.copyLatex(o,s);return}let a=t.target.closest("[data-math-edit]");if(a){t.preventDefault();let s=a.closest(".math-expression"),o=s&&s.dataset.mathLatex||"";this.openEditor(o);return}if(t.target.closest("[data-math-editor-close]")){t.preventDefault(),this.closeEditor();return}if(t.target.closest("[data-math-editor-copy]")){t.preventDefault(),this.editor&&this.editor.textarea&&this.copyLatex(this.editor.textarea.value,null,this.editor.status);return}let r=t.target.closest("[data-symbol-insert]");if(r){t.preventDefault();let s=r.getAttribute("data-symbol-insert");this.insertSymbol(s||"")}},handleKeydown(t){let e=document.activeElement,a=e&&(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable);if((t.ctrlKey||t.metaKey)&&t.altKey&&(t.key==="e"||t.key==="E")){t.preventDefault();let n=a&&e&&e.value||"";this.openEditor(n);return}t.key==="Escape"&&this.editorOpen&&(t.preventDefault(),this.closeEditor())},copyLatex(t,e,a){if(!t)return;let n=r=>{if(a)a.hidden=!1,a.textContent=r,clearTimeout(this.messageTimeout),this.messageTimeout=window.setTimeout(()=>{a.hidden=!0,a.textContent=""},2e3);else if(e){let s=e.querySelector(".math-expression__message");s&&(s.hidden=!1,s.textContent=r,clearTimeout(this.messageTimeout),this.messageTimeout=window.setTimeout(()=>{s.hidden=!0,s.textContent=""},2e3))}},i=()=>{let r=document.createElement("textarea");r.value=t,r.setAttribute("aria-hidden","true"),r.style.position="fixed",r.style.opacity="0",document.body.appendChild(r),r.select();try{document.execCommand("copy"),n("Copied equation")}catch(s){n("Unable to copy")}document.body.removeChild(r)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(t).then(()=>n("Copied equation")).catch(()=>i()):i()},setupEditor(){if(this.editor)return;let t=document.createElement("div");t.id="math-tooling-panel",t.hidden=!0;let e=document.createElement("div");e.className="math-tooling",e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-labelledby","math-tooling-title");let a=document.createElement("h2");a.id="math-tooling-title",a.className="math-tooling__title",a.textContent="Equation editor";let n=document.createElement("p");n.className="math-tooling__description",n.innerHTML="Craft LaTeX expressions with live preview, quick statistical symbols, and chemistry support.";let i=document.createElement("textarea");i.className="math-tooling__input",i.setAttribute("data-math-editor-input","true"),i.setAttribute("spellcheck","false"),i.rows=10;let r=document.createElement("div");r.className="math-tooling__actions";let s=document.createElement("div");s.className="math-tooling__preview",s.setAttribute("data-math-editor-preview","true"),s.setAttribute("aria-live","polite");let o=document.createElement("span");o.className="math-tooling__status",o.hidden=!0;let l=document.createElement("div");l.className="math-tooling__library";let c=document.createElement("h3");c.className="math-tooling__library-title",c.textContent="Quick insert";let h=document.createElement("div");h.className="math-tooling__symbols",[{label:"Mean \u03BC",value:"\\mu"},{label:"Variance \u03C3\xB2",value:"\\sigma^2"},{label:"Std. dev \u03C3",value:"\\sigma"},{label:"Probability",value:"\\mathbb{P}(A)"},{label:"Expectation",value:"\\mathbb{E}[X]"},{label:"Covariance",value:"\\mathrm{Cov}(X, Y)"},{label:"Vector",value:"\\mathbf{x}"},{label:"Norm",value:"\\lVert x \\rVert_2"},{label:"Inner product",value:"\\langle x, y \\rangle"},{label:"Derivative",value:"\\frac{\\mathrm{d}}{\\mathrm{d}t}"},{label:"Integral",value:"\\int_0^1 f(x) \\, \\mathrm{d}x"},{label:"Bayes",value:"\\mathbb{P}(A \\mid B)"},{label:"Chemical H\u2082O",value:"\\ce{H2O}"},{label:"Chemical CO\u2082",value:"\\ce{CO2}"}].forEach(g=>{let p=document.createElement("button");p.type="button",p.className="math-tooling__symbol",p.setAttribute("data-symbol-insert",g.value),p.textContent=g.label,h.appendChild(p)});let u=document.createElement("button");u.type="button",u.className="math-tooling__close",u.setAttribute("data-math-editor-close","true");let f=document.createElement("span");f.setAttribute("aria-hidden","true"),f.textContent="\u2715";let b=document.createElement("span");b.className="visually-hidden",b.textContent="Close equation editor",u.appendChild(f),u.appendChild(b);let m=document.createElement("button");m.type="button",m.className="math-tooling__copy",m.setAttribute("data-math-editor-copy","true"),m.textContent="Copy LaTeX",r.appendChild(m),r.appendChild(u),r.appendChild(o),l.appendChild(c),l.appendChild(h),e.appendChild(a),e.appendChild(n),e.appendChild(i),e.appendChild(s),e.appendChild(r),e.appendChild(l),t.appendChild(e),document.body.appendChild(t),i.addEventListener("input",()=>this.updateEditorPreview()),this.editor={overlay:t,dialog:e,textarea:i,preview:s,status:o}},openEditor(t){if(!this.editor)return;let e=(t||"").trim();this.editor.overlay.hidden=!1,document.body.classList.add("math-tooling-open"),this.editor.textarea.value=e,this.editor.textarea.focus(),this.editor.textarea.setSelectionRange(e.length,e.length),this.editorOpen=!0,this.updateEditorPreview()},closeEditor(){this.editor&&(this.editor.overlay.hidden=!0,document.body.classList.remove("math-tooling-open"),this.editorOpen=!1)},updateEditorPreview(){if(!this.editor||!this.MathJax)return;let t=this.editor.textarea.value.trim();if(!t){this.editor.preview.replaceChildren();let e=document.createElement("p");e.className="math-tooling__placeholder",e.textContent="Preview will appear here.",this.editor.preview.appendChild(e);return}this.renderLatex(this.editor.preview,t,{display:!0,enhance:!1})},insertSymbol(t){if(!this.editor||!this.editor.textarea)return;let e=this.editor.textarea,a=e.selectionStart||0,n=e.selectionEnd||0,i=e.value,r=`${i.slice(0,a)}${t}${i.slice(n)}`;e.value=r;let s=a+t.length;e.focus(),e.setSelectionRange(s,s),this.updateEditorPreview()},updateEquationReferences(){if(!this.equationMap||this.equationMap.size===0)return;document.querySelectorAll("[data-equation-ref]").forEach(a=>{let n=a.getAttribute("data-equation-ref");if(!n)return;let i=this.lookupEquation(n.replace(/^#/,""));if(!i)return;a.setAttribute("href",`#${i.anchor}`);let r=a.textContent.trim();(!r||r===n||r===i.anchor||r===`(${n})`)&&(a.textContent=i.number||i.anchor),a.classList.add("math-reference"),a.setAttribute("aria-label",`Jump to equation ${i.number||i.anchor}`)}),document.querySelectorAll('a[href^="#eq:"]').forEach(a=>{let n=a.getAttribute("href");if(!n)return;let i=n.replace(/^#/,""),r=this.lookupEquation(i);if(!r)return;a.setAttribute("href",`#${r.anchor}`);let s=a.textContent.trim();(!s||s===n||s===i)&&(a.textContent=r.number||r.anchor),a.dataset.equationRef=r.anchor,a.classList.add("math-reference")})},lookupEquation(t){if(!t)return null;if(this.equationMap.has(t))return this.equationMap.get(t);let e=t.startsWith("eq:")?t:`eq:${t}`;return this.equationMap.get(e)||null},renderLatex(t,e,a={}){if(!t)return Promise.resolve();let n=a.display!==!1;if(!this.MathJax)return t.textContent=e,this.pendingTypeset||(this.pendingTypeset=[]),this.pendingTypeset.push({target:t,latex:e,options:a}),Promise.resolve();let i=n?`\\[${e}\\]`:`\\(${e}\\)`;return t.innerHTML=i,this.MathJax.typesetPromise([t]).catch(r=>{})},cleanLatex(t){return(t||"").replace(/%\s*alt:.*$/gm,"").replace(/\\label\{[^}]*\}/g,"").replace(/\\tag\*?\{[^}]*\}/g,"").trim()},resolveAltText(t,e){let a=t||null,n=this.findDatasetAlt(a);if(n)return n;let i=this.extractAltComment(e);if(i)return i;let s=(a&&a.getAttribute?a.getAttribute("data-math-source"):null)||e;return this.generateAltFromLatex(s)},findDatasetAlt(t){let e=t;for(;e;){if(e.dataset&&e.dataset.mathAlt){let a=e.dataset.mathAlt.trim();if(a)return a}e=e.parentElement}return""},extractAltComment(t){if(!t)return"";let e=String(t).split(/\r?\n/);for(let a=0;a<e.length;a+=1){let n=e[a];if(!n)continue;let i=n.match(/%\s*alt:\s*(.+)$/i);if(i)return i[1].trim()}return""},generateAltFromLatex(t){if(!t)return"";let e=String(t).replace(/%.*$/gm,"");return e=e.replace(/\\frac\s*\{([^{}]+)\}\s*\{([^{}]+)\}/g,(a,n,i)=>{let r=this.sanitizeSegment(n),s=this.sanitizeSegment(i);return`${r} over ${s}`.trim()}),e=e.replace(/\\int(?:_\{([^}]*)\}|_([^\s^{}]+))?(?:\^\{([^}]*)\}|\^([^\s_{}]+))?/g,(a,n,i,r,s)=>{let o=this.sanitizeSegment(n||i),l=this.sanitizeSegment(r||s),c="integral";return o&&(c+=` from ${o}`),l&&(c+=` to ${l}`),c}),e=e.replace(/\\sum(?:_\{([^}]*)\}|_([^\s^{}]+))?(?:\^\{([^}]*)\}|\^([^\s_{}]+))?/g,(a,n,i,r,s)=>{let o=this.sanitizeSegment(n||i),l=this.sanitizeSegment(r||s),c="summation";return o&&(c+=` from ${o}`),l&&(c+=` to ${l}`),c}),e=e.replace(/\\sqrt\s*\{([^{}]+)\}/g,(a,n)=>`square root of ${this.sanitizeSegment(n)}`),e=e.replace(/\\mathrm\s*\{([^{}]+)\}/g,(a,n)=>this.sanitizeSegment(n)),e=e.replace(/\\operatorname\*?\s*\{([^{}]+)\}/g,(a,n)=>this.sanitizeSegment(n)),e=e.replace(/\\[a-zA-Z]+/g," "),e=e.replace(/[{}]/g," "),e=e.replace(/\s+/g," ").trim(),e||"Mathematical expression"},sanitizeSegment(t){return t?String(t).replace(/\\[a-zA-Z]+/g," ").replace(/[{}]/g," ").replace(/\s+/g," ").trim():""},syncAltAttributes(t,e,a){a&&(t&&t.setAttribute&&(t.setAttribute("aria-label",a),t.dataset&&(t.dataset.mathAlt=a)),e&&e.setAttribute&&(e.setAttribute("aria-label",a),e.dataset&&(e.dataset.mathAlt=a)))}};typeof globalThis!="undefined"&&(globalThis.__DATALOG_MATH_INTERNALS__=d),typeof document!="undefined"&&(document.addEventListener("datalog:math-ready",()=>d.exposeAllReferenceLinks(document)),d.exposeAllReferenceLinks(document)),window.DatalogMath={init(t){d.init(t)},onPageReady(){d.initialized&&d.onPageReady()},renderLatex(t,e,a){return d.renderLatex(t,e,a)}}})();
@@ -0,0 +1 @@
1
+ import{a as Q}from"./chunks/chunk-WIRUK3OZ.js";import{a as T,b as P}from"./chunks/chunk-VZ5WKQVA.js";import{a as R,b as M}from"./chunks/chunk-PATLC23F.js";var O="moderation",Z=["comment","correction","abuse"],tt={approve:"approved",spam:"spam",hide:"hidden",delete:"deleted",reviewed:"reviewed",accept:"accepted",reject:"rejected",resolve:"resolved",dismiss:"dismissed"},et={comment:{pending:["approve","spam","delete"],approved:["hide","spam","delete"],spam:["approve","delete"],hidden:["approve","delete"]},correction:{new:["reviewed","accept","reject"],reviewed:["accept","reject"],accepted:["resolve","reject"]},abuse:{open:["dismiss","hide","delete"]}},nt={comment:["pending"],correction:["new","reviewed","accepted"],abuse:["open"]},K=/^https?:\/\//i,ot=new Set(["unauthorized","forbidden"]),rt=new Set(["disabled","unsupported","version"]);function at(t,e){let a=t.querySelector(e);if(!a)return{};try{return JSON.parse(a.textContent)||{}}catch(i){return{}}}function r(t){return typeof t=="string"?t:""}function V(t){return(et[t.type]||{})[t.status]||[]}function W(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=r(t.type).toLowerCase();if(t.id===null||t.id===void 0||!Z.includes(e))return null;let a=t.author&&typeof t.author=="object"?t.author:{},i=t.context&&typeof t.context=="object"?t.context:{},u=i.parent&&typeof i.parent=="object"?i.parent:null,m=t.resolution&&typeof t.resolution=="object"?t.resolution:{},y=Array.isArray(t.history)?t.history:[];return{id:String(t.id),type:e,status:r(t.status).toLowerCase(),created_at:r(t.created_at),path:r(t.path),title:r(t.title),author:{name:r(a.name),email:r(a.email)},body:r(t.body)||r(t.message),category:r(t.category),section:r(t.section),quote:r(t.quote),reason:r(t.reason),parent:u?{author:r(u.author&&u.author.name),body:r(u.body)}:null,link:K.test(r(m.url))?m.url:"",history:y.filter(_=>_&&typeof _=="object").map(_=>({action:r(_.action),at:r(_.at),moderator:r(_.moderator),note:r(_.note)}))}}function it(t={},e=""){let a=new URLSearchParams;["type","status","path","category","since","q"].forEach(u=>{let m=r(t[u]).trim();m&&m!=="all"&&a.set(u,m)}),e&&a.set("cursor",e);let i=a.toString();return i?`?${i}`:""}function H(t,e){let a=new Date(t);if(Number.isNaN(a.getTime()))return t;try{return a.toLocaleString(e||void 0,{dateStyle:"medium",timeStyle:"short"})}catch(i){return a.toISOString()}}function o(t,e,a,i,u){let m=t.createElement(a);return i&&(m.className=i),u!==void 0&&(m.textContent=u),e.appendChild(m),m}function J(t,e,a={}){let{labels:i={},lang:u,siteUrl:m="",onAction:y}=a,_=i.types||{},p=i.statuses||{},$=i.actions||{},q=t.createElement("li");q.className=`moderation-item moderation-item--${e.type}`,q.dataset.itemId=e.id,q.dataset.itemStatus=e.status;let h=o(t,q,"article","moderation-item__card"),w=o(t,h,"header","moderation-item__meta");if(o(t,w,"span","moderation-item__type",_[e.type]||e.type),o(t,w,"span","moderation-item__status",p[e.status]||e.status),e.category&&o(t,w,"span","moderation-item__category",(i.categories||{})[e.category]||e.category),e.created_at){let d=o(t,w,"time","moderation-item__time",H(e.created_at,u));d.dateTime=e.created_at}if(e.path){let d=o(t,h,"p","moderation-item__where"),c=o(t,d,"a","",e.title||e.path);e.path.startsWith("/")&&!e.path.startsWith("//")&&(c.href=`${m.replace(/\/+$/,"")}${e.path}${e.section?`#${encodeURIComponent(e.section)}`:""}`)}if((e.author.name||e.author.email)&&o(t,h,"p","moderation-item__author",[e.author.name,e.author.email].filter(Boolean).join(" \xB7 ")),e.parent){let d=o(t,h,"blockquote","moderation-item__context");o(t,d,"p","",`${i.in_reply_to||"In reply to"} ${e.parent.author||""}`.trim()),o(t,d,"p","",e.parent.body)}e.quote&&o(t,h,"blockquote","moderation-item__quote",e.quote),e.reason&&o(t,h,"p","moderation-item__reason",e.reason);let g=o(t,h,"div","moderation-item__body");if(e.body.split(/\n{2,}/).forEach(d=>o(t,g,"p","",d)),e.link){let d=o(t,h,"p","moderation-item__link"),c=o(t,d,"a","",e.link);c.href=e.link,c.rel="noopener"}if(e.history.length>0){let d=o(t,h,"ol","moderation-item__history");e.history.forEach(c=>{let j=[$[c.action]||c.action,c.moderator,c.at?H(c.at,u):"",c.note].filter(Boolean).join(" \xB7 ");o(t,d,"li","",j)})}let x=V(e);if(x.length>0&&y){let d=o(t,h,"div","moderation-item__actions"),c=`moderation-note-${e.id}`,j=o(t,d,"label","moderation-item__note-label",i.note||"Note");j.htmlFor=c;let A=o(t,d,"input","moderation-item__note");A.type="text",A.id=c,A.name="note";let S=null;if(x.includes("resolve")){let E=`moderation-link-${e.id}`,C=o(t,d,"label","moderation-item__note-label",i.link||"Issue, pull request or revision");C.htmlFor=E,S=o(t,d,"input","moderation-item__note"),S.type="url",S.id=E,S.name="link"}let k=o(t,d,"div","moderation-item__buttons");x.forEach(E=>{let C=o(t,k,"button","post-tool",$[E]||E);C.type="button",C.dataset.moderationAction=E,C.addEventListener("click",()=>y(e,E,{note:A.value.trim(),link:S?S.value.trim():""}))})}let v=o(t,h,"p","moderation-item__message");return v.setAttribute("data-item-message",""),v.setAttribute("role","status"),v.hidden=!0,q}function st(t,e={}){let a=t.ownerDocument,i=a.defaultView,u=i&&i.DatalogDynamicServices||{},m=t.dataset.moderationEndpoint||"",y=e.client||P(M(R({},u),{features:m?{}:u.features,base_url:m||u.base_url||"",credentials:t.dataset.moderationCredentials||"include"})),_=Q(),p=at(t,"[data-moderation-labels]"),$=p.errors||{},q=a.documentElement.lang||void 0,h=t.dataset.moderationSite||"",w=t.querySelector("[data-moderation-status]"),g=t.querySelector("[data-moderation-list]"),x=t.querySelector("[data-moderation-filters]"),v=t.querySelector("[data-moderation-more]"),d=t.querySelector("[data-moderation-sign-in]"),c="",j=!1,A=0,S={},k=(n,s="",b=!1)=>{t.dataset.state=n,t.setAttribute("aria-busy",n==="loading"?"true":"false"),w&&(w.textContent=s,w.hidden=s==="",w.setAttribute("role",b?"alert":"status")),d&&(d.hidden=n!=="unauthorized")},E=()=>{let n={};return x&&new FormData(x).forEach((s,b)=>{n[b]=String(s)}),n},C=n=>{g.textContent="",v&&(v.hidden=!0),n&&n.kind==="unauthorized"?k("unauthorized",p.unauthorized||"",!0):n&&n.kind==="forbidden"?k("forbidden",p.forbidden||"",!0):n&&rt.has(n.kind)?k("disabled",T(n,$)):k("error",T(n,$),!0)},U=(n,s,b=!1)=>{let l=n.querySelector("[data-item-message]");l&&(l.textContent=s,l.hidden=s==="",l.setAttribute("role",b?"alert":"status"))},X=n=>{let s=r(S.status).trim();return s?s===n.status:(nt[n.type]||[]).includes(n.status)},I={root:t,client:y,async load(n=!1){if(j&&n)return null;let s=++A,b=n?S:E();j=!0,n||(c=""),k("loading",p.loading||"");try{await y.feature(O);let l=await y.get(`${y.pathFor(O)}/items${it(b,n?c:"")}`);if(s!==A)return null;S=b;let F=l&&l.data&&typeof l.data=="object"?l.data:{},L=(Array.isArray(F.items)?F.items:[]).map(W).filter(Boolean);n||(g.textContent=""),L.forEach(D=>g.appendChild(J(a,D,{labels:p,lang:q,siteUrl:h,onAction:I.act}))),c=r(F.next_cursor),v&&(v.hidden=c==="");let f=g.children.length;return k(f>0?"loaded":"empty",f>0?"":p.empty||""),L}catch(l){return s!==A||C(l),null}finally{s===A&&(j=!1)}},async act(n,s,b={}){let l=Array.from(g.children).find(f=>f.dataset.itemId===n.id);if(!l||!V(n).includes(s))return null;if(s==="resolve"&&!K.test(b.link||""))return U(l,p.link_required||"",!0),null;let F=Array.from(l.querySelectorAll("button"));F.forEach(f=>{f.disabled=!0}),l.setAttribute("aria-busy","true"),U(l,p.working||"");let L={action:s};b.note&&(L.note=b.note),s==="resolve"&&(L.link=b.link);try{let f=await y.post(`${y.pathFor(O)}/items/${encodeURIComponent(n.id)}/actions`,L,{idempotencyKey:_.key(L,n.id)});_.clear(n.id);let N=W(f&&f.data&&f.data.item)||M(R({},n),{status:tt[s]||n.status});if(!g.contains(l))return N;let z=(p.done||"{{action}}").split("{{action}}").join((p.actions||{})[s]||s);if(X(N)){let B=J(a,N,{labels:p,lang:q,siteUrl:h,onAction:I.act});g.replaceChild(B,l),U(B,z)}else l.remove(),k(g.children.length>0?"loaded":"empty",g.children.length>0?z:`${z} ${p.empty||""}`.trim());return N}catch(f){return f&&ot.has(f.kind)?C(f):(l.setAttribute("aria-busy","false"),F.forEach(D=>{D.disabled=!1}),U(l,T(f,$),!0)),null}}};return x&&(x.addEventListener("submit",n=>{n.preventDefault(),I.load()}),x.addEventListener("reset",()=>{Promise.resolve().then(()=>I.load())})),v&&v.addEventListener("click",()=>I.load(!0)),y.enabled?(I.load(),I):(k("disabled",$.disabled||""),I)}function Y(t=document){return Array.from(t.querySelectorAll("[data-moderation-inbox]")).map(e=>st(e))}function G(){Y(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",G,{once:!0}):G();
@@ -1 +1 @@
1
- import"./chunks/chunk-225H5YXE.js";var a=t=>new Promise((r,o)=>{if(document.querySelector(`script[src="${t}"]`)){r();return}let e=document.createElement("script");e.src=t,e.async=!0,e.onload=()=>r(),e.onerror=n=>o(n),document.head.appendChild(e)}),i=()=>{let t=document.querySelectorAll(".notebook-output-plotly");return t.length?(typeof window.Plotly!="undefined"?Promise.resolve(window.Plotly):a("https://cdn.jsdelivr.net/npm/plotly.js-dist-min@2.27.0/plotly.min.js").then(()=>window.Plotly)).then(o=>{t.forEach(e=>{try{let n=JSON.parse(e.dataset.plotly||"{}"),l=n.layout||{},s=Array.isArray(n.data)?n.data:Array.isArray(n)?n:[];o.newPlot(e,s,l,{responsive:!0})}catch(n){e.replaceChildren(),e.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly figure could not be rendered. Open in Binder or Colab to interact.</p>')}})}):Promise.resolve()},d=()=>{let t=document.querySelectorAll(".notebook-output-vega");return t.length?a("https://cdn.jsdelivr.net/npm/vega@5").then(()=>a("https://cdn.jsdelivr.net/npm/vega-lite@5")).then(()=>a("https://cdn.jsdelivr.net/npm/vega-embed@6")).then(()=>{t.forEach(o=>{try{let e=JSON.parse(o.dataset.vega||"{}");window.vegaEmbed(o,e,{actions:!1})}catch(e){o.replaceChildren(),o.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega specification could not be parsed. Open in Binder for the interactive version.</p>')}})}):Promise.resolve()},p=()=>{document.querySelectorAll(".notebook-segment").forEach((r,o)=>{let e=r.id||`cell-${o+1}`;r.id=e,r.setAttribute("data-cell-anchor",e)})},u=()=>{let t={root:null,rootMargin:"0px 0px -65%",threshold:0},r=document.querySelectorAll(".notebook-segment"),o=document.querySelectorAll("[data-cell-anchor-link]");if(!r.length||!o.length)return;let e=new IntersectionObserver(n=>{n.forEach(l=>{l.isIntersecting&&o.forEach(s=>{s.classList.toggle("is-active",s.hash===`#${l.target.id}`)})})},t);r.forEach(n=>e.observe(n))},c=()=>{p(),i().catch(()=>{document.querySelectorAll(".notebook-output-plotly").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),d().catch(()=>{document.querySelectorAll(".notebook-output-vega").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),u()};typeof window!="undefined"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",c):typeof window!="undefined"&&c();export{p as annotateCells,u as handleScrollSpy,c as initNotebookFeatures,i as initPlotly,d as initVega,a as loadScript};
1
+ import"./chunks/chunk-PATLC23F.js";var a=t=>new Promise((r,o)=>{if(document.querySelector(`script[src="${t}"]`)){r();return}let e=document.createElement("script");e.src=t,e.async=!0,e.onload=()=>r(),e.onerror=n=>o(n),document.head.appendChild(e)}),i=()=>{let t=document.querySelectorAll(".notebook-output-plotly");return t.length?(typeof window.Plotly!="undefined"?Promise.resolve(window.Plotly):a("https://cdn.jsdelivr.net/npm/plotly.js-dist-min@2.27.0/plotly.min.js").then(()=>window.Plotly)).then(o=>{t.forEach(e=>{try{let n=JSON.parse(e.dataset.plotly||"{}"),l=n.layout||{},s=Array.isArray(n.data)?n.data:Array.isArray(n)?n:[];o.newPlot(e,s,l,{responsive:!0})}catch(n){e.replaceChildren(),e.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly figure could not be rendered. Open in Binder or Colab to interact.</p>')}})}):Promise.resolve()},d=()=>{let t=document.querySelectorAll(".notebook-output-vega");return t.length?a("https://cdn.jsdelivr.net/npm/vega@5").then(()=>a("https://cdn.jsdelivr.net/npm/vega-lite@5")).then(()=>a("https://cdn.jsdelivr.net/npm/vega-embed@6")).then(()=>{t.forEach(o=>{try{let e=JSON.parse(o.dataset.vega||"{}");window.vegaEmbed(o,e,{actions:!1})}catch(e){o.replaceChildren(),o.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega specification could not be parsed. Open in Binder for the interactive version.</p>')}})}):Promise.resolve()},p=()=>{document.querySelectorAll(".notebook-segment").forEach((r,o)=>{let e=r.id||`cell-${o+1}`;r.id=e,r.setAttribute("data-cell-anchor",e)})},u=()=>{let t={root:null,rootMargin:"0px 0px -65%",threshold:0},r=document.querySelectorAll(".notebook-segment"),o=document.querySelectorAll("[data-cell-anchor-link]");if(!r.length||!o.length)return;let e=new IntersectionObserver(n=>{n.forEach(l=>{l.isIntersecting&&o.forEach(s=>{s.classList.toggle("is-active",s.hash===`#${l.target.id}`)})})},t);r.forEach(n=>e.observe(n))},c=()=>{p(),i().catch(()=>{document.querySelectorAll(".notebook-output-plotly").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Plotly assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),d().catch(()=>{document.querySelectorAll(".notebook-output-vega").forEach(t=>{t.replaceChildren(),t.insertAdjacentHTML("afterbegin",'<p class="notebook-output__warning">Vega assets failed to load. Launch Binder/Colab to view the interactive chart.</p>')})}),u()};typeof window!="undefined"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",c):typeof window!="undefined"&&c();export{p as annotateCells,u as handleScrollSpy,c as initNotebookFeatures,i as initPlotly,d as initVega,a as loadScript};
@@ -0,0 +1 @@
1
+ import{a as L}from"./chunks/chunk-WIRUK3OZ.js";import{a as A,c as j}from"./chunks/chunk-VZ5WKQVA.js";import"./chunks/chunk-PATLC23F.js";var x="reactions",M="datalog-reaction:",N=new Set(["disabled","unsupported","version"]);function $(n,r){let s=n.querySelector(r);if(!s)return{};try{return JSON.parse(s.textContent)||{}}catch(o){return{}}}function B(n,r){try{return n?n.getItem(M+r):null}catch(s){return null}}function G(n,r,s){try{n&&n.setItem(M+r,s)}catch(o){}}function D(n){let r=n&&typeof n=="object"?n.counts:null;if(!r||typeof r!="object"||Array.isArray(r))return null;let s={};return Object.keys(r).forEach(o=>{let c=r[o];Number.isInteger(c)&&c>=0&&(s[o]=c)}),s}function J(n,r={}){let s=n.ownerDocument,o=r.window||s.defaultView,c=r.client||j(),E=r.storage===void 0?K(o):r.storage,d=n.dataset.reactionsPath||"/",U=n.dataset.reactionsCounts!=="false",C=L(),f=$(n,"[data-reactions-labels]"),I=f.errors||{},b=n.querySelector("[data-reactions-status]"),i=Array.from(n.querySelectorAll("[data-reaction]")),m=null,p=!1,h=!1,y=B(E,d),g=0,u=(e,t=!1)=>{b&&(b.textContent=e,b.hidden=e==="",b.setAttribute("role",t?"alert":"status"))},l=e=>{n.dataset.state=e},w=()=>{i.forEach(e=>{e.setAttribute("aria-pressed",e.dataset.reaction===y?"true":"false")})},S=e=>{i.forEach(t=>{let a=t.querySelector("[data-reaction-count]");if(!a)return;let F=U&&e?e[t.dataset.reaction]:void 0;Number.isInteger(F)?(a.textContent=String(F),a.hidden=!1):(a.textContent="",a.hidden=!0)})},O=e=>{n.setAttribute("aria-busy",e?"true":"false"),i.forEach(t=>{t.disabled=e})},q=e=>{l("disabled"),S(null),i.forEach(t=>{t.disabled=!0}),u(A(e,I))},R=()=>(m||(m=c.feature(x).catch(e=>{throw m=null,e})),m),v={root:n,get selected(){return y},async load(){let e=++g;l("loading");try{await R();let t=await c.get(`${c.pathFor(x)}?path=${encodeURIComponent(d)}`);if(e!==g||h)return null;let a=D(t&&t.data);return S(a),l("loaded"),p=!0,a}catch(t){return e!==g||h||(t&&N.has(t.kind)?q(t):(S(null),l("unavailable"))),null}},async react(e){if(h||!i.some(t=>t.dataset.reaction===e))return null;if(e===y)return u(f.already||""),null;h=!0,g+=1,O(!0),l("pending"),u(f.sending||"");try{await R();let t=await c.post(c.pathFor(x),{path:d,reaction:e},{idempotencyKey:C.key({path:d,reaction:e})});C.clear(),y=e,G(E,d,e),w();let a=D(t&&t.data);return a&&S(a),l("selected"),u(f.thanks||""),t}catch(t){return t&&N.has(t.kind)?q(t):t&&t.kind==="conflict"?(w(),l(y?"selected":p?"loaded":"unavailable"),u(f.already||"")):(l(p?"loaded":"unavailable"),u(A(t,I),!0)),null}finally{h=!1,n.dataset.state!=="disabled"&&O(!1)}}};w(),i.forEach(e=>{e.addEventListener("click",()=>{v.react(e.dataset.reaction)})});let k=()=>{p||v.load()};if(r.immediate||!o||typeof o.IntersectionObserver!="function")k();else{let e=new o.IntersectionObserver(t=>{t.some(a=>a.isIntersecting)&&(e.disconnect(),k())},{rootMargin:"400px 0px"});e.observe(n)}return v}function K(n){try{return n&&n.localStorage?n.localStorage:null}catch(r){return null}}function P(n=document){return Array.from(n.querySelectorAll("[data-reactions]")).map(r=>J(r))}function T(){P(document)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",T,{once:!0}):T();