@turnipxenon/pineapple 5.0.0-alpha.9 → 5.1.0

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 (92) hide show
  1. package/README.md +11 -11
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/remoteIndex.remote.d.ts +2 -0
  6. package/dist/remoteIndex.remote.d.ts.map +1 -0
  7. package/dist/remoteIndex.remote.js +2 -0
  8. package/dist/styles/app.css +0 -82
  9. package/dist/styles/tailwind.css +0 -12
  10. package/dist/styles/turnip-theme.css +1 -0
  11. package/dist/ui/components/FourPartCard.svelte +9 -0
  12. package/dist/ui/components/MeltToaster/MeltToaster.svelte +4 -1
  13. package/dist/ui/components/MeltToaster/MeltToaster.svelte.d.ts.map +1 -1
  14. package/dist/ui/components/NestedNavigation.svelte +0 -1
  15. package/dist/ui/components/NestedNavigation.svelte.d.ts.map +1 -1
  16. package/dist/ui/components/SortDropdown.svelte +50 -0
  17. package/dist/ui/components/SortDropdown.svelte.d.ts +9 -0
  18. package/dist/ui/components/SortDropdown.svelte.d.ts.map +1 -0
  19. package/dist/ui/components/TagFilter.svelte +32 -0
  20. package/dist/ui/components/TagFilter.svelte.d.ts +9 -0
  21. package/dist/ui/components/TagFilter.svelte.d.ts.map +1 -0
  22. package/dist/ui/components/accordion/PinyaAccordion.svelte +5 -3
  23. package/dist/ui/components/accordion/PinyaAccordion.svelte.d.ts.map +1 -1
  24. package/dist/ui/elements/CodeBlock/CodeBlock.svelte +167 -18
  25. package/dist/ui/elements/CodeBlock/CodeBlock.svelte.d.ts.map +1 -1
  26. package/dist/ui/elements/PineappleSwitch.svelte +2 -2
  27. package/dist/ui/elements/PineappleSwitch.svelte.d.ts +1 -1
  28. package/dist/ui/elements/PineappleSwitch.svelte.d.ts.map +1 -1
  29. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +170 -27
  30. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte.d.ts.map +1 -1
  31. package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts +6 -7
  32. package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts.map +1 -1
  33. package/dist/ui/modules/experience/ExampleJob1.svelte +79 -0
  34. package/dist/ui/modules/experience/ExampleJob1.svelte.d.ts +26 -0
  35. package/dist/ui/modules/experience/ExampleJob1.svelte.d.ts.map +1 -0
  36. package/dist/ui/modules/experience/ExampleJob2.svelte +74 -0
  37. package/dist/ui/modules/experience/ExampleJob2.svelte.d.ts +25 -0
  38. package/dist/ui/modules/experience/ExampleJob2.svelte.d.ts.map +1 -0
  39. package/dist/ui/modules/experience/index.d.ts +3 -0
  40. package/dist/ui/modules/experience/index.d.ts.map +1 -0
  41. package/dist/ui/modules/experience/index.js +2 -0
  42. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +7 -9
  43. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte.d.ts.map +1 -1
  44. package/dist/ui/modules/projects/Hepcat.svelte +5 -1
  45. package/dist/ui/modules/projects/Hepcat.svelte.d.ts +4 -1
  46. package/dist/ui/modules/projects/Hepcat.svelte.d.ts.map +1 -1
  47. package/dist/ui/modules/projects/Pengi.svelte +4 -1
  48. package/dist/ui/modules/projects/Pengi.svelte.d.ts +4 -1
  49. package/dist/ui/modules/projects/Pengi.svelte.d.ts.map +1 -1
  50. package/dist/ui/modules/projects/Soulwork.svelte +4 -1
  51. package/dist/ui/modules/projects/Soulwork.svelte.d.ts +4 -1
  52. package/dist/ui/modules/projects/Soulwork.svelte.d.ts.map +1 -1
  53. package/dist/ui/modules/projects/ThisWebpage.svelte +13 -2
  54. package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts +3 -1
  55. package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts.map +1 -1
  56. package/dist/ui/modules/universal-overlay/SettingsPanel.svelte +29 -24
  57. package/dist/ui/modules/universal-overlay/SettingsPanel.svelte.d.ts.map +1 -1
  58. package/dist/ui/modules/universal-overlay/UniversalOverlay.svelte +6 -2
  59. package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte +32 -21
  60. package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte.d.ts +1 -1
  61. package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte.d.ts.map +1 -1
  62. package/dist/ui/templates/PinyaPageLayout/pinyaPageLayoutRunes.svelte.d.ts.map +1 -1
  63. package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte +177 -29
  64. package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte.d.ts.map +1 -1
  65. package/dist/ui/templates/SeaweedLayout/ProjectGroupConfig.svelte +1 -3
  66. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte +188 -44
  67. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte.d.ts.map +1 -1
  68. package/dist/ui/templates/SeaweedLayout/props.d.ts +18 -2
  69. package/dist/ui/templates/SeaweedLayout/props.d.ts.map +1 -1
  70. package/dist/ui/templates/SeaweedLayout/props.js +8 -1
  71. package/dist/ui/templates/blog_template/BlogTemplate.svelte +5 -2
  72. package/dist/ui/templates/blog_template/BlogTemplate.svelte.d.ts.map +1 -1
  73. package/dist/ui/templates/pinya-base/PinyaBase.svelte +45 -4
  74. package/dist/ui/templates/pinya-base/PinyaBase.svelte.d.ts +15 -3
  75. package/dist/ui/templates/pinya-base/PinyaBase.svelte.d.ts.map +1 -1
  76. package/dist/ui/templates/pinya-base/menuPageServerLoadRemote.remote.svelte +1 -0
  77. package/dist/ui/templates/pinya-base/menuPageServerLoadRemote.remote.svelte.d.ts +27 -0
  78. package/dist/ui/templates/pinya-base/menuPageServerLoadRemote.remote.svelte.d.ts.map +1 -0
  79. package/dist/util/context/PineappleBaseContext.svelte +20 -8
  80. package/dist/util/context/PineappleBaseContext.svelte.d.ts.map +1 -1
  81. package/dist/util/context/pineappleBaseContextDefinitions.svelte.d.ts +21 -13
  82. package/dist/util/context/pineappleBaseContextDefinitions.svelte.d.ts.map +1 -1
  83. package/dist/util/context/pineappleBaseContextDefinitions.svelte.js +21 -19
  84. package/dist/util/getParsnipData.remote.d.ts +12 -0
  85. package/dist/util/getParsnipData.remote.d.ts.map +1 -0
  86. package/dist/util/getParsnipData.remote.js +3 -0
  87. package/dist/util/localStore.svelte.d.ts +10 -3
  88. package/dist/util/localStore.svelte.d.ts.map +1 -1
  89. package/dist/util/localStore.svelte.js +56 -38
  90. package/dist/util/util.js +1 -1
  91. package/package.json +17 -8
  92. package/src/lib/styles/app.css +0 -82
@@ -1,21 +1,23 @@
1
- import { getContext, setContext } from "svelte";
2
- const enablePortraitKey = Symbol("enable-portrait");
3
- const enableDialogPreferenceKey = Symbol("enable-dialog-preference");
4
- const enableDialogOverlayKey = Symbol("enable-dialog-overlay");
5
- const overlayTypeKey = Symbol("overlay-type");
6
- const ignoreOverlayOverrideKey = Symbol("ignore-overlay-override");
7
- const siteLayoutKey = Symbol("site-layout");
8
- export const getEnablePortraitContext = () => getContext(enablePortraitKey);
9
- export const setEnablePortraitContext = (value) => setContext(enablePortraitKey, value);
10
- export const getEnableDialogPreferenceContext = () => getContext(enableDialogPreferenceKey);
11
- export const setEnableDialogPreferenceContext = (value) => setContext(enableDialogPreferenceKey, value);
1
+ import { enableUniversalOverlaySvelte4 } from "../..";
2
+ import {} from "../localStore.svelte";
3
+ import { createContext } from "svelte";
4
+ export const [getEnablePortraitContext, setEnablePortraitContext] = createContext();
5
+ export const [getEnableDialogPreferenceContext, setEnableDialogPreferenceContext] = createContext();
12
6
  // note to self: proper two way binding is seen with the variables below
13
7
  // see https://svelte.dev/docs/svelte/context#Using-context-with-state
14
- export const getEnableDialogOverlayContext = () => getContext(enableDialogOverlayKey);
15
- export const setEnableDialogOverlayContext = (value) => setContext(enableDialogOverlayKey, value);
16
- export const getOverlayTypeContext = () => getContext(overlayTypeKey);
17
- export const setOverlayTypeContext = (value) => setContext(overlayTypeKey, value);
18
- export const getIgnoreOverlayOverride = () => getContext(ignoreOverlayOverrideKey);
19
- export const setIgnoreOverlayOverride = (value) => setContext(ignoreOverlayOverrideKey, value);
20
- export const getSiteLayout = () => getContext(siteLayoutKey);
21
- export const setSiteLayout = (value) => setContext(siteLayoutKey, value);
8
+ export const [getEnableDialogOverlayContext, setEnableDialogOverlayContext] = createContext();
9
+ export const [getOverlayTypeContext, setOverlayTypeContext] = createContext();
10
+ export const [getIgnoreOverlayOverride, setIgnoreOverlayOverride] = createContext();
11
+ export const [getSiteLayout, setSiteLayout] = createContext();
12
+ /**
13
+ * useful for on-start dialog appearance
14
+ *
15
+ * use on onMount
16
+ *
17
+ * @param value
18
+ */
19
+ export const forceSetDialog = (value) => {
20
+ const ignoreOverride = getIgnoreOverlayOverride();
21
+ ignoreOverride.value = false;
22
+ enableUniversalOverlaySvelte4.set(value);
23
+ };
@@ -0,0 +1,12 @@
1
+ export declare const getParsnipDataRemote: import("@sveltejs/kit").RemoteQueryFunction<void, {
2
+ parsnipOverall: {
3
+ files: never[];
4
+ tags: never[];
5
+ baseUrl: any;
6
+ };
7
+ } | {
8
+ parsnipOverall: import("../modules/parsnip/ParsnipOverall").ParsnipOverall;
9
+ } | {
10
+ parsnipOverall?: undefined;
11
+ }>;
12
+ //# sourceMappingURL=getParsnipData.remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getParsnipData.remote.d.ts","sourceRoot":"","sources":["getParsnipData.remote.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB;;;;;;;;;;EAA4B,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { query } from "$app/server";
2
+ import { menuPageServerLoad } from "..";
3
+ export const getParsnipDataRemote = query(menuPageServerLoad);
@@ -1,10 +1,17 @@
1
1
  import type { OverlayType } from "..";
2
- import { type Writable } from "svelte/store";
3
- export type LocalStore<T> = Writable<T>;
2
+ export declare class LocalStore<T> {
3
+ value: T;
4
+ key: string;
5
+ valueType: "undefined" | "object" | "boolean" | "number" | "string" | "function" | "symbol" | "bigint";
6
+ defaultValue: T;
7
+ constructor(key: string, defaultValue: T);
8
+ serialize(value: T): string;
9
+ deserialize(item: string): T;
10
+ }
4
11
  export interface LocalStoreRestriction {
5
12
  "enable-portrait": boolean;
6
13
  "enable-dialog-preference": boolean;
7
14
  "overlay-type": OverlayType;
8
15
  }
9
- export declare const createLocalStore: <k extends keyof LocalStoreRestriction>(key: k) => Writable<Readonly<LocalStoreRestriction>[k]>;
16
+ export declare const createLocalStore: <k extends keyof LocalStoreRestriction>(key: k) => LocalStore<Readonly<LocalStoreRestriction>[k]>;
10
17
  //# sourceMappingURL=localStore.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localStore.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/util/localStore.svelte.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAKvD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAExC,MAAM,WAAW,qBAAqB;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0BAA0B,EAAE,OAAO,CAAC;IACpC,cAAc,EAAE,WAAW,CAAC;CAC5B;AAQD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,CAAC,iDAqD7E,CAAC"}
1
+ {"version":3,"file":"localStore.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/util/localStore.svelte.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAOxC,qBAAa,UAAU,CAAC,CAAC;IACxB,KAAK,EAAkB,CAAC,CAAC;IACzB,GAAG,SAAM;IACT,SAAS,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvG,YAAY,EAAE,CAAC,CAAC;gBAEJ,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAmCxC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAQ3B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC;CAc5B;AAED,MAAM,WAAW,qBAAqB;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0BAA0B,EAAE,OAAO,CAAC;IACpC,cAAc,EAAE,WAAW,CAAC;CAC5B;AAQD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,CAAC,mDAE7E,CAAC"}
@@ -1,27 +1,51 @@
1
1
  /** from https://www.reddit.com/r/sveltejs/comments/1d43d8p/svelte_5_runes_with_localstorage_thanks_to_joy_of/ */
2
2
  import { browser } from "$app/environment";
3
- import { writable } from "svelte/store";
4
3
  // const localConsole = console;
5
4
  const localConsole = undefined;
6
- const localStoreDefault = {
7
- "enable-portrait": true,
8
- "enable-dialog-preference": true,
9
- "overlay-type": "dialog"
10
- };
11
- export const createLocalStore = (key) => {
12
- const defaultValue = localStoreDefault[key];
13
- const valueType = typeof defaultValue;
14
- const store = writable(defaultValue);
15
- const storageKey = `pinya-local-${key}`;
16
- const serialize = (value) => {
17
- if (valueType !== "object") {
18
- return `${value}`;
5
+ export class LocalStore {
6
+ constructor(key, defaultValue) {
7
+ this.value = $state();
8
+ this.key = "";
9
+ this.key = key;
10
+ this.defaultValue = defaultValue;
11
+ this.value = defaultValue;
12
+ this.valueType = typeof defaultValue;
13
+ let localStorageState = $state('initial');
14
+ if (browser) {
15
+ const item = localStorage.getItem(`pinya-local-${key}`);
16
+ if (item) {
17
+ this.value = this.deserialize(item);
18
+ localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`initializing initial ${this.key}: ${this.value}`);
19
+ }
20
+ localStorageState = 'accessed';
21
+ }
22
+ $effect(() => {
23
+ localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`updating ${this.key}: ${this.value}`);
24
+ switch (localStorageState) {
25
+ case "initial":
26
+ // completely ignore all next changes
27
+ break;
28
+ case "accessed":
29
+ // for the initial change, we ignore it but allow the next changes to be writable
30
+ localStorageState = 'writable';
31
+ localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`setting writable for ${this.key}`);
32
+ break;
33
+ case "writable":
34
+ localStorage.setItem(`pinya-local-${this.key}`, this.serialize(this.value));
35
+ localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`initializing after ${this.key}: ${this.value}`);
36
+ break;
37
+ }
38
+ });
39
+ }
40
+ serialize(value) {
41
+ if (this.valueType !== "object") {
42
+ return value;
19
43
  }
20
44
  return JSON.stringify(value);
21
- };
22
- const deserialize = (item) => {
45
+ }
46
+ deserialize(item) {
23
47
  localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`deserializing item ${item}`);
24
- if (valueType === "string") {
48
+ if (this.valueType === "string") {
25
49
  localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`deserializing string ${item}`);
26
50
  return item;
27
51
  }
@@ -30,27 +54,21 @@ export const createLocalStore = (key) => {
30
54
  }
31
55
  catch (error) {
32
56
  console.error(error);
33
- return defaultValue;
34
- }
35
- };
36
- if (browser) {
37
- const item = localStorage.getItem(storageKey);
38
- if (item) {
39
- store.set(deserialize(item));
40
- localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`initializing initial ${storageKey}: ${item}`);
57
+ return this.defaultValue;
41
58
  }
42
59
  }
43
- let skipWrite = true;
44
- store.subscribe((value) => {
45
- if (!browser) {
46
- return;
47
- }
48
- if (skipWrite) {
49
- skipWrite = false;
50
- return;
51
- }
52
- localStorage.setItem(storageKey, serialize(value));
53
- localConsole === null || localConsole === void 0 ? void 0 : localConsole.log(`initializing after ${storageKey}: ${value}`);
54
- });
55
- return store;
60
+ }
61
+ const localStoreDefault = {
62
+ "enable-portrait": true,
63
+ "enable-dialog-preference": true,
64
+ "overlay-type": 'dialog',
65
+ };
66
+ export const createLocalStore = (key) => {
67
+ return new LocalStore(key, localStoreDefault[key]);
56
68
  };
69
+ // export const createAllLocalStore = () => {
70
+ // let enablePortrait = $state(createLocalStore('enablePortrait'));
71
+ // return {
72
+ // enablePortrait
73
+ // }
74
+ // }
package/dist/util/util.js CHANGED
@@ -7,7 +7,7 @@ export const generatedDailySeed = () => {
7
7
  // from https://stackoverflow.com/a/47593316
8
8
  export const mulberry32Generator = (a) => {
9
9
  return function () {
10
- var t = (a += 0x6d2b79f5);
10
+ let t = (a += 0x6d2b79f5);
11
11
  t = Math.imul(t ^ (t >>> 15), t | 1);
12
12
  t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
13
13
  return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
package/package.json CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "name": "@turnipxenon/pineapple",
3
3
  "description": "personal package for base styling for other personal projects",
4
- "version": "5.0.0-alpha.9",
4
+ "version": "5.1.0",
5
5
  "devDependencies": {
6
6
  "@commitlint/cli": "^19.8.1",
7
7
  "@commitlint/config-conventional": "^19.8.1",
8
8
  "@eslint/compat": "^1.4.1",
9
9
  "@eslint/js": "^9.39.2",
10
+ "@inlang/paraglide-js": "~2.4.0",
11
+ "@prisma/client": "^5.22.0",
10
12
  "@sveltejs/adapter-cloudflare": "^7.2.6",
13
+ "@sveltejs/kit": "2.49.5",
11
14
  "@sveltejs/package": "^2.5.7",
15
+ "@sveltejs/vite-plugin-svelte": "^6.2.4",
12
16
  "@types/htmlparser2": "^3.10.7",
13
17
  "@types/mdast": "^4.0.4",
14
- "@types/node": "^20.19.30",
18
+ "@types/node": "^20.19.31",
15
19
  "eslint": "^9.39.2",
16
20
  "eslint-config-prettier": "^10.1.8",
17
21
  "eslint-plugin-svelte": "^3.14.0",
@@ -29,21 +33,18 @@
29
33
  "publint": "^0.2.12",
30
34
  "sass": "^1.97.3",
31
35
  "string-width": "^7.2.0",
32
- "svelte": "^5.49.1",
36
+ "svelte": "^5.49.2",
33
37
  "svelte-check": "^4.3.6",
34
38
  "svelte2tsx": "^0.7.47",
35
39
  "ts-node": "^10.9.2",
36
40
  "tslib": "^2.8.1",
37
41
  "typescript": "^5.9.3",
38
42
  "typescript-eslint": "^8.54.0",
39
- "@sveltejs/vite-plugin-svelte": "^6.2.4",
40
43
  "vite": "^7.3.1",
41
- "wrangler": "4.59.1",
42
- "@sveltejs/kit": "2.49.5",
43
- "@inlang/paraglide-js": "~2.4.0",
44
- "@prisma/client": "^5.22.0"
44
+ "wrangler": "4.59.1"
45
45
  },
46
46
  "dependencies": {
47
+ "@shikijs/transformers": "^3.22.0",
47
48
  "melt": "^0.44.0",
48
49
  "mode-watcher": "^0.5.1",
49
50
  "shiki": "^3.22.0",
@@ -60,6 +61,12 @@
60
61
  "import": "./dist/index.js",
61
62
  "default": "./dist/index.js"
62
63
  },
64
+ "./remote": {
65
+ "types": "./dist/remoteIndex.remote.d.ts",
66
+ "svelte": "./dist/remoteIndex.remote.js",
67
+ "import": "./dist/remoteIndex.remote.js",
68
+ "default": "./dist/remoteIndex.remote.js"
69
+ },
63
70
  "./components": {
64
71
  "types": "./dist/ui/components/index.d.ts",
65
72
  "svelte": "./dist/ui/components/index.js",
@@ -87,6 +94,8 @@
87
94
  },
88
95
  "files": [
89
96
  "dist",
97
+ "!dist/**/*.test.*",
98
+ "!dist/**/*.spec.*",
90
99
  "src/lib/styles/app.css",
91
100
  "src/lib/theme.css"
92
101
  ],
@@ -76,88 +76,6 @@ a.external-link {
76
76
  }
77
77
  }
78
78
 
79
- /*https://shiki.style/guide/dual-themes*/
80
- html.dark .shiki,
81
- html.dark .shiki span {
82
- color: var(--shiki-dark) !important;
83
- background-color: var(--shiki-dark-bg) !important;
84
- /* Optional, if you also want font styles */
85
- font-style: var(--shiki-dark-font-style) !important;
86
- font-weight: var(--shiki-dark-font-weight) !important;
87
- text-decoration: var(--shiki-dark-text-decoration) !important;
88
- }
89
-
90
- .inline-code {
91
- background-color: aliceblue;
92
- padding: 0.2rem;
93
- border-radius: 0.2rem;
94
- }
95
-
96
- html.dark .inline-code {
97
- background-color: #303446;
98
- }
99
-
100
- .shiki {
101
- span {
102
- white-space: pre-wrap;
103
- word-wrap: break-word;
104
- }
105
- }
106
-
107
- /* region shiki copy button */
108
- pre:has(code) {
109
- position: relative;
110
- }
111
-
112
- pre button.copy {
113
- position: absolute;
114
- right: 16px;
115
- top: 16px;
116
- height: 28px;
117
- width: 28px;
118
- padding: 0;
119
- display: flex;
120
-
121
- & span {
122
- width: 100%;
123
- aspect-ratio: 1 / 1;
124
- background-repeat: no-repeat;
125
- background-position: center;
126
- background-size: cover;
127
- }
128
-
129
- & .ready {
130
- background-image: url("$pkg/assets/icons/icon-copy-light-contrast.svg");
131
- /*todo*/
132
- /*@variant dark {*/
133
- /* background-image: url("$pkg/assets/icons/icon-copy-dark-contrast.svg");*/
134
- /*}*/
135
- }
136
-
137
- & .success {
138
- display: none;
139
- background-image: url("$pkg/assets/icons/icon-check-light-contrast.svg");
140
-
141
- /*todo: migration*/
142
- /*@variant dark {*/
143
- /* background-image: url("$pkg/assets/icons/icon-check-dark-contrast.svg");*/
144
- /*}*/
145
- }
146
-
147
- &.copied {
148
- & .success {
149
- display: block;
150
- }
151
-
152
- & .ready {
153
- display: none;
154
- }
155
- }
156
- }
157
-
158
- /* endregion shiki copy button */
159
-
160
-
161
79
  ul + h2, ol + h2 {
162
80
  margin-top: 1rlh;
163
81
  }