@riebeckite/plugin-flashcards 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -118,7 +118,8 @@ function createDeckUi(doc, prefix) {
118
118
  const answer = doc.createElement("p");
119
119
  answer.className = `${prefix}__answer`;
120
120
  answer.hidden = true;
121
- card.append(question, answer);
121
+ card.appendChild(question);
122
+ card.appendChild(answer);
122
123
  const controls = doc.createElement("div");
123
124
  controls.className = `${prefix}__controls`;
124
125
  const prev = createButton(doc, prefix, "prev", "Previous card");
@@ -126,8 +127,13 @@ function createDeckUi(doc, prefix) {
126
127
  const next = createButton(doc, prefix, "next", "Next card");
127
128
  const shuffle = createButton(doc, prefix, "shuffle", "Shuffle cards");
128
129
  reveal.setAttribute("aria-pressed", "false");
129
- controls.append(prev, reveal, next, shuffle);
130
- root.append(counter, card, controls);
130
+ controls.appendChild(prev);
131
+ controls.appendChild(reveal);
132
+ controls.appendChild(next);
133
+ controls.appendChild(shuffle);
134
+ root.appendChild(counter);
135
+ root.appendChild(card);
136
+ root.appendChild(controls);
131
137
  return { root, counter, question, answer, reveal, prev, next, shuffle };
132
138
  }
133
139
  function createButton(doc, prefix, action, label) {
package/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@ export { parseFlashcards, splitFlashcardGroups } from "./src/parse.js";
5
5
  export { createFlashcardsPlaceholder, createFlashcardsPlaceholderPattern, decodeFlashcardsSource, encodeFlashcardsSource, FLASHCARDS_ATTRIBUTE, } from "./src/placeholder.js";
6
6
  export { remarkFlashcards } from "./src/remark.js";
7
7
  export { renderFlashcards, renderFlashcardsFallback, renderFlashcardsPayload, } from "./src/render.js";
8
- export { createFlashcardsRuntime } from "./src/runtime.js";
9
8
  export type { FlashcardsRuntime } from "./src/runtime.js";
9
+ export { createFlashcardsRuntime } from "./src/runtime.js";
10
10
  export type { FlashcardsCard, FlashcardsOptions, FlashcardsParseFailure, FlashcardsParseResult, FlashcardsParseSuccess, FlashcardsPayload, ResolvedFlashcardsOptions, } from "./src/types.js";
11
11
  export declare function flashcards(options?: FlashcardsOptions): import("@riebeckite/core").RiebeckitePlugin<FlashcardsOptions>;
12
12
  export declare const flashcardsPlugin: typeof flashcards;
package/dist/index.js CHANGED
@@ -20,24 +20,6 @@ function resolveFlashcardsOptions(options = {}) {
20
20
  // src/remark.ts
21
21
  import { visit } from "unist-util-visit";
22
22
 
23
- // src/placeholder.ts
24
- var FLASHCARDS_ATTRIBUTE = "data-rr-flashcards-spec";
25
- function encodeFlashcardsSource(source) {
26
- return encodeURIComponent(source);
27
- }
28
- function decodeFlashcardsSource(encoded) {
29
- return decodeURIComponent(encoded);
30
- }
31
- function createFlashcardsPlaceholder(source) {
32
- return `<div ${FLASHCARDS_ATTRIBUTE}="${encodeFlashcardsSource(source)}"></div>`;
33
- }
34
- function createFlashcardsPlaceholderPattern() {
35
- return new RegExp(
36
- `<div\\b[^>]*\\b${FLASHCARDS_ATTRIBUTE}="([^"]*)"[^>]*>\\s*</div>`,
37
- "g"
38
- );
39
- }
40
-
41
23
  // src/parse.ts
42
24
  var SEPARATOR_LINE = /^[ \t]*-{3,}[ \t]*$/gm;
43
25
  var GROUP_BREAK = /\n[ \t]*\n/;
@@ -73,6 +55,24 @@ function parseCard(group) {
73
55
  return { front, back };
74
56
  }
75
57
 
58
+ // src/placeholder.ts
59
+ var FLASHCARDS_ATTRIBUTE = "data-rr-flashcards-spec";
60
+ function encodeFlashcardsSource(source) {
61
+ return encodeURIComponent(source);
62
+ }
63
+ function decodeFlashcardsSource(encoded) {
64
+ return decodeURIComponent(encoded);
65
+ }
66
+ function createFlashcardsPlaceholder(source) {
67
+ return `<div ${FLASHCARDS_ATTRIBUTE}="${encodeFlashcardsSource(source)}"></div>`;
68
+ }
69
+ function createFlashcardsPlaceholderPattern() {
70
+ return new RegExp(
71
+ `<div\\b[^>]*\\b${FLASHCARDS_ATTRIBUTE}="([^"]*)"[^>]*>\\s*</div>`,
72
+ "g"
73
+ );
74
+ }
75
+
76
76
  // src/remark.ts
77
77
  var FLASHCARDS_DIAGNOSTIC_SOURCE = "@riebeckite/plugin-flashcards";
78
78
  function remarkFlashcards(options = {}) {
@@ -115,7 +115,11 @@ import {
115
115
  } from "@riebeckite/core";
116
116
 
117
117
  // src/render.ts
118
- import { escapeHtml, escapeHtmlAttribute } from "@riebeckite/core";
118
+ import {
119
+ escapeHtml,
120
+ escapeHtmlAttribute,
121
+ escapeScriptJson
122
+ } from "@riebeckite/core";
119
123
  function renderFlashcards(cards, options) {
120
124
  const { className } = options;
121
125
  const attributes = [
@@ -134,7 +138,7 @@ function renderFlashcards(cards, options) {
134
138
  }
135
139
  function renderFlashcardsPayload(cards) {
136
140
  const payload = { cards: [...cards] };
137
- return `<script type="application/json" data-flashcards-payload>${escapeJsonForScript(JSON.stringify(payload))}</script>`;
141
+ return `<script type="application/json" data-flashcards-payload>${escapeScriptJson(JSON.stringify(payload))}</script>`;
138
142
  }
139
143
  function renderFlashcardsFallback(cards, className = "rb-flashcards") {
140
144
  const items = cards.map((card) => renderFallbackItem(card, className)).join("");
@@ -150,9 +154,6 @@ function renderFallbackItem(card, className) {
150
154
  "</li>"
151
155
  ].join("");
152
156
  }
153
- function escapeJsonForScript(json) {
154
- return json.replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
155
- }
156
157
 
157
158
  // src/runtime.ts
158
159
  function createFlashcardsRuntime(options) {
@@ -332,7 +333,8 @@ function createDeckUi(doc, prefix) {
332
333
  const answer = doc.createElement("p");
333
334
  answer.className = `${prefix}__answer`;
334
335
  answer.hidden = true;
335
- card.append(question, answer);
336
+ card.appendChild(question);
337
+ card.appendChild(answer);
336
338
  const controls = doc.createElement("div");
337
339
  controls.className = `${prefix}__controls`;
338
340
  const prev = createButton(doc, prefix, "prev", "Previous card");
@@ -340,8 +342,13 @@ function createDeckUi(doc, prefix) {
340
342
  const next = createButton(doc, prefix, "next", "Next card");
341
343
  const shuffle = createButton(doc, prefix, "shuffle", "Shuffle cards");
342
344
  reveal.setAttribute("aria-pressed", "false");
343
- controls.append(prev, reveal, next, shuffle);
344
- root.append(counter, card, controls);
345
+ controls.appendChild(prev);
346
+ controls.appendChild(reveal);
347
+ controls.appendChild(next);
348
+ controls.appendChild(shuffle);
349
+ root.appendChild(counter);
350
+ root.appendChild(card);
351
+ root.appendChild(controls);
345
352
  return { root, counter, question, answer, reveal, prev, next, shuffle };
346
353
  }
347
354
  function createButton(doc, prefix, action, label) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riebeckite/plugin-flashcards",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,7 +23,7 @@
23
23
  "dependencies": {
24
24
  "@types/mdast": "^4.0.4",
25
25
  "unist-util-visit": "^5.1.0",
26
- "@riebeckite/core": "0.0.5"
26
+ "@riebeckite/core": "0.0.6"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"
package/style.css CHANGED
@@ -1,116 +1,116 @@
1
- .rb-flashcards {
2
- --rb-flashcards-ink: var(--rb-color-ink, #000000);
3
- --rb-flashcards-paper: var(--rb-color-paper, #ffffff);
4
- --rb-flashcards-muted: var(--rb-color-muted, #69645c);
5
- --rb-flashcards-accent: var(--rb-color-accent, #686868);
6
- --rb-flashcards-rule: var(
7
- --rb-color-border,
8
- color-mix(in srgb, var(--rb-flashcards-ink) 18%, transparent)
9
- );
10
-
11
- margin: 1.5rem 0;
12
- color: var(--rb-flashcards-ink);
13
- }
14
-
15
- .rb-flashcards__list {
16
- display: grid;
17
- gap: 0.75rem;
18
- margin: 0;
19
- padding: 0;
20
- list-style: none;
21
- }
22
-
23
- .rb-flashcards__item {
24
- display: grid;
25
- gap: 0.25rem;
26
- padding: 0.75rem 1rem;
27
- border: 1px solid var(--rb-flashcards-rule);
28
- }
29
-
30
- .rb-flashcards__front {
31
- font-weight: 600;
32
- white-space: pre-line;
33
- }
34
-
35
- .rb-flashcards__back {
36
- color: var(--rb-flashcards-muted);
37
- white-space: pre-line;
38
- }
39
-
40
- .rb-flashcards__deck {
41
- display: grid;
42
- gap: 1rem;
43
- outline-offset: 4px;
44
- }
45
-
46
- .rb-flashcards__deck:focus-visible {
47
- outline: 2px solid var(--rb-flashcards-accent);
48
- }
49
-
50
- .rb-flashcards__counter {
51
- margin: 0;
52
- color: var(--rb-flashcards-muted);
53
- font-size: 0.8125rem;
54
- font-variant-numeric: tabular-nums;
55
- }
56
-
57
- .rb-flashcards__card {
58
- padding: 1.25rem 1.5rem;
59
- border: 1px solid var(--rb-flashcards-rule);
60
- }
61
-
62
- .rb-flashcards__question {
63
- margin: 0;
64
- font-size: 1.0625rem;
65
- font-weight: 600;
66
- line-height: 1.6;
67
- white-space: pre-line;
68
- }
69
-
70
- .rb-flashcards__answer {
71
- margin: 0.75rem 0 0;
72
- padding-top: 0.75rem;
73
- border-top: 1px solid var(--rb-flashcards-rule);
74
- line-height: 1.7;
75
- white-space: pre-line;
76
- }
77
-
78
- .rb-flashcards__answer[hidden] {
79
- display: none;
80
- }
81
-
82
- .rb-flashcards__controls {
83
- display: flex;
84
- flex-wrap: wrap;
85
- gap: 0.5rem;
86
- }
87
-
88
- .rb-flashcards__button {
89
- padding: 0.375rem 0.75rem;
90
- border: 1px solid var(--rb-flashcards-ink);
91
- border-radius: 0;
92
- background: transparent;
93
- color: inherit;
94
- font: inherit;
95
- font-size: 0.875rem;
96
- cursor: pointer;
97
- }
98
-
99
- .rb-flashcards__button:hover,
100
- .rb-flashcards__button:focus-visible {
101
- border-color: var(--rb-flashcards-accent);
102
- color: var(--rb-flashcards-accent);
103
- outline: none;
104
- }
105
-
106
- .rb-flashcards--invalid {
107
- padding: 0.75rem 1rem;
108
- border: 1px solid var(--rb-flashcards-ink);
109
- font-size: 0.875rem;
110
- }
111
-
112
- html[data-theme="dark"] .rb-flashcards,
113
- html.dark .rb-flashcards {
114
- --rb-flashcards-ink: var(--rb-color-paper, #ffffff);
115
- --rb-flashcards-paper: var(--rb-color-ink, #000000);
116
- }
1
+ .rb-flashcards {
2
+ --rb-flashcards-ink: var(--rb-color-ink, #000000);
3
+ --rb-flashcards-paper: var(--rb-color-paper, #ffffff);
4
+ --rb-flashcards-muted: var(--rb-color-muted, #69645c);
5
+ --rb-flashcards-accent: var(--rb-color-accent, #686868);
6
+ --rb-flashcards-rule: var(
7
+ --rb-color-border,
8
+ color-mix(in srgb, var(--rb-flashcards-ink) 18%, transparent)
9
+ );
10
+
11
+ margin: 1.5rem 0;
12
+ color: var(--rb-flashcards-ink);
13
+ }
14
+
15
+ .rb-flashcards__list {
16
+ display: grid;
17
+ gap: 0.75rem;
18
+ margin: 0;
19
+ padding: 0;
20
+ list-style: none;
21
+ }
22
+
23
+ .rb-flashcards__item {
24
+ display: grid;
25
+ gap: 0.25rem;
26
+ padding: 0.75rem 1rem;
27
+ border: 1px solid var(--rb-flashcards-rule);
28
+ }
29
+
30
+ .rb-flashcards__front {
31
+ font-weight: 600;
32
+ white-space: pre-line;
33
+ }
34
+
35
+ .rb-flashcards__back {
36
+ color: var(--rb-flashcards-muted);
37
+ white-space: pre-line;
38
+ }
39
+
40
+ .rb-flashcards__deck {
41
+ display: grid;
42
+ gap: 1rem;
43
+ outline-offset: 4px;
44
+ }
45
+
46
+ .rb-flashcards__deck:focus-visible {
47
+ outline: 2px solid var(--rb-flashcards-accent);
48
+ }
49
+
50
+ .rb-flashcards__counter {
51
+ margin: 0;
52
+ color: var(--rb-flashcards-muted);
53
+ font-size: 0.8125rem;
54
+ font-variant-numeric: tabular-nums;
55
+ }
56
+
57
+ .rb-flashcards__card {
58
+ padding: 1.25rem 1.5rem;
59
+ border: 1px solid var(--rb-flashcards-rule);
60
+ }
61
+
62
+ .rb-flashcards__question {
63
+ margin: 0;
64
+ font-size: 1.0625rem;
65
+ font-weight: 600;
66
+ line-height: 1.6;
67
+ white-space: pre-line;
68
+ }
69
+
70
+ .rb-flashcards__answer {
71
+ margin: 0.75rem 0 0;
72
+ padding-top: 0.75rem;
73
+ border-top: 1px solid var(--rb-flashcards-rule);
74
+ line-height: 1.7;
75
+ white-space: pre-line;
76
+ }
77
+
78
+ .rb-flashcards__answer[hidden] {
79
+ display: none;
80
+ }
81
+
82
+ .rb-flashcards__controls {
83
+ display: flex;
84
+ flex-wrap: wrap;
85
+ gap: 0.5rem;
86
+ }
87
+
88
+ .rb-flashcards__button {
89
+ padding: 0.375rem 0.75rem;
90
+ border: 1px solid var(--rb-flashcards-ink);
91
+ border-radius: 0;
92
+ background: transparent;
93
+ color: inherit;
94
+ font: inherit;
95
+ font-size: 0.875rem;
96
+ cursor: pointer;
97
+ }
98
+
99
+ .rb-flashcards__button:hover,
100
+ .rb-flashcards__button:focus-visible {
101
+ border-color: var(--rb-flashcards-accent);
102
+ color: var(--rb-flashcards-accent);
103
+ outline: none;
104
+ }
105
+
106
+ .rb-flashcards--invalid {
107
+ padding: 0.75rem 1rem;
108
+ border: 1px solid var(--rb-flashcards-ink);
109
+ font-size: 0.875rem;
110
+ }
111
+
112
+ html[data-theme="dark"] .rb-flashcards,
113
+ html.dark .rb-flashcards {
114
+ --rb-flashcards-ink: var(--rb-color-paper, #ffffff);
115
+ --rb-flashcards-paper: var(--rb-color-ink, #000000);
116
+ }