@abcnews/components-builder 0.0.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 (32) hide show
  1. package/README.md +134 -0
  2. package/dist/BuilderStyleRoot/BuilderStyleRoot.svelte +175 -0
  3. package/dist/BuilderStyleRoot/BuilderStyleRoot.svelte.d.ts +5 -0
  4. package/dist/ContextMenu/ContextMenu.stories.svelte +66 -0
  5. package/dist/ContextMenu/ContextMenu.stories.svelte.d.ts +27 -0
  6. package/dist/ContextMenu/ContextMenu.svelte +111 -0
  7. package/dist/ContextMenu/ContextMenu.svelte.d.ts +7 -0
  8. package/dist/GoogleDocScrollyteller/GoogleDocScrollyteller.stories.svelte +24 -0
  9. package/dist/GoogleDocScrollyteller/GoogleDocScrollyteller.stories.svelte.d.ts +27 -0
  10. package/dist/GoogleDocScrollyteller/GoogleDocScrollyteller.svelte +211 -0
  11. package/dist/GoogleDocScrollyteller/GoogleDocScrollyteller.svelte.d.ts +9 -0
  12. package/dist/GoogleDocScrollyteller/utils.d.ts +23 -0
  13. package/dist/GoogleDocScrollyteller/utils.js +94 -0
  14. package/dist/Modal/Modal.stories.svelte +32 -0
  15. package/dist/Modal/Modal.stories.svelte.d.ts +27 -0
  16. package/dist/Modal/Modal.svelte +116 -0
  17. package/dist/Modal/Modal.svelte.d.ts +8 -0
  18. package/dist/ScreenshotTool/ScreenshotTool.stories.svelte +26 -0
  19. package/dist/ScreenshotTool/ScreenshotTool.stories.svelte.d.ts +27 -0
  20. package/dist/ScreenshotTool/ScreenshotTool.svelte +292 -0
  21. package/dist/ScreenshotTool/ScreenshotTool.svelte.d.ts +17 -0
  22. package/dist/Typeahead/Typeahead.stories.svelte +26 -0
  23. package/dist/Typeahead/Typeahead.stories.svelte.d.ts +27 -0
  24. package/dist/Typeahead/Typeahead.svelte +177 -0
  25. package/dist/Typeahead/Typeahead.svelte.d.ts +12 -0
  26. package/dist/UpdateChecker/UpdateChecker.stories.svelte +27 -0
  27. package/dist/UpdateChecker/UpdateChecker.stories.svelte.d.ts +27 -0
  28. package/dist/UpdateChecker/UpdateChecker.svelte +127 -0
  29. package/dist/UpdateChecker/UpdateChecker.svelte.d.ts +11 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +2 -0
  32. package/package.json +71 -0
@@ -0,0 +1,127 @@
1
+ <script lang="ts">
2
+ import Modal from "../Modal/Modal.svelte";
3
+ import { onMount } from "svelte";
4
+
5
+ type NewVersion = {
6
+ newVersion: string;
7
+ thisVersion: string;
8
+ };
9
+
10
+ let {
11
+ overrideNewVersion,
12
+ buttonText = "Open new builder",
13
+ }: { overrideNewVersion: NewVersion; buttonText: string } = $props();
14
+
15
+ let newVersion = $state<NewVersion>(overrideNewVersion);
16
+ let isOpen = $state(!!newVersion);
17
+
18
+ /**
19
+ * Check for a new version of the given project
20
+ * @param {string} projectName - Project name (e.g. 'globey')
21
+ * @param {string} startingAt - Version to start checking at (e.g. '1.0.0')
22
+ */
23
+ async function newVersionCheck(projectName = "", startingAt = "") {
24
+ console.log("checking for new version of", projectName, { startingAt });
25
+ const baseUrl = `https://www.abc.net.au/res/sites/news-projects/${projectName}/`;
26
+ let newVersion;
27
+ let latestVersion = startingAt;
28
+ let i = 0;
29
+ do {
30
+ if (i++ > 30) {
31
+ // just in case something messes up
32
+ break;
33
+ }
34
+ const [major, minor, patch] = latestVersion.split(".");
35
+ const nextVersions = [
36
+ [1 + Number(major), 0, 0],
37
+ [major, 1 + Number(minor), 0],
38
+ [major, minor, 1 + Number(patch)],
39
+ ].map((version) => version.join("."));
40
+ const newVersions = await Promise.all(
41
+ nextVersions.map((version) => {
42
+ const url = `${baseUrl}${version}/index.html`;
43
+ console.info("checking new version at", url);
44
+ return fetch(url, { cache: "no-store" })
45
+ .then((response) => (response.status !== 200 ? false : version))
46
+ .catch(() => false);
47
+ }),
48
+ );
49
+
50
+ // @ts-ignore - there is no way for latestVersion to be `true`, only truthy.
51
+ latestVersion = newVersions.find(Boolean) || "";
52
+ if (latestVersion) {
53
+ newVersion = latestVersion;
54
+ }
55
+ } while (latestVersion);
56
+
57
+ return {
58
+ thisVersion: startingAt,
59
+ newVersion,
60
+ };
61
+ }
62
+
63
+ async function check() {
64
+ if (newVersion?.newVersion) {
65
+ return;
66
+ }
67
+ const [projectName, thisVersion] =
68
+ window.location.pathname
69
+ .match(/\/news-projects\/([^/]+)\/(\d+\.\d+\.\d+)/)
70
+ ?.slice(1) || [];
71
+ if (!thisVersion) {
72
+ return;
73
+ }
74
+ const result = await newVersionCheck(projectName, thisVersion);
75
+
76
+ if (result.newVersion) {
77
+ newVersion = { ...result, newVersion: String(result.newVersion) };
78
+ isOpen = true;
79
+ }
80
+ }
81
+
82
+ onMount(() => {
83
+ check();
84
+ window.addEventListener("focus", check);
85
+ const timeout = setInterval(check, 1000 * 60 * 10);
86
+ return () => {
87
+ window.removeEventListener("focus", check);
88
+ clearInterval(timeout);
89
+ };
90
+ });
91
+
92
+ function onClick() {
93
+ // @ts-ignore
94
+ window.location = String(Window.location).replace(
95
+ `/${newVersion?.thisVersion}/`,
96
+ `/${newVersion?.newVersion}/`,
97
+ );
98
+ }
99
+
100
+ function onClose() {
101
+ isOpen = false;
102
+ }
103
+ </script>
104
+
105
+ {#snippet Buttons()}
106
+ <button onclick={onClick}>{buttonText}</button>
107
+ {/snippet}
108
+
109
+ {#if isOpen && newVersion?.newVersion}
110
+ <Modal title="New version available" {onClose} footerChildren={Buttons}>
111
+ <p>
112
+ You are using <code>{newVersion.thisVersion}</code> but
113
+ <code>{newVersion.newVersion}</code> is available.
114
+ </p>
115
+
116
+ <p>
117
+ Your current state will be brought across to the new version, and you can
118
+ always click back to return to this page.
119
+ </p>
120
+ </Modal>
121
+ {/if}
122
+
123
+ <style>
124
+ p {
125
+ max-width: 32em;
126
+ }
127
+ </style>
@@ -0,0 +1,11 @@
1
+ type NewVersion = {
2
+ newVersion: string;
3
+ thisVersion: string;
4
+ };
5
+ type $$ComponentProps = {
6
+ overrideNewVersion: NewVersion;
7
+ buttonText: string;
8
+ };
9
+ declare const UpdateChecker: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type UpdateChecker = ReturnType<typeof UpdateChecker>;
11
+ export default UpdateChecker;
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ // Reexport your entry components here
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@abcnews/components-builder",
3
+ "version": "0.0.1",
4
+ "scripts": {
5
+ "dev": "vite dev",
6
+ "build": "vite build && npm run prepack",
7
+ "preview": "vite preview",
8
+ "prepare": "svelte-kit sync || echo ''",
9
+ "prepack": "svelte-kit sync && svelte-package && publint",
10
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
12
+ "format": "prettier --write .",
13
+ "lint": "prettier --check .",
14
+ "storybook": "storybook dev -p 6006 --ci",
15
+ "build-storybook": "storybook build"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "!dist/**/*.test.*",
20
+ "!dist/**/*.spec.*"
21
+ ],
22
+ "sideEffects": [
23
+ "**/*.css"
24
+ ],
25
+ "svelte": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "svelte": "./dist/index.js"
32
+ }
33
+ },
34
+ "peerDependencies": {
35
+ "svelte": "^5.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@storybook/addon-essentials": "^8.6.12",
39
+ "@storybook/addon-interactions": "^8.6.12",
40
+ "@storybook/addon-svelte-csf": "^5.0.0-next.0",
41
+ "@storybook/blocks": "^8.6.12",
42
+ "@storybook/svelte": "^8.6.12",
43
+ "@storybook/sveltekit": "^8.6.12",
44
+ "@storybook/test": "^8.6.12",
45
+ "@sveltejs/adapter-auto": "^6.0.0",
46
+ "@sveltejs/kit": "^2.16.0",
47
+ "@sveltejs/package": "^2.0.0",
48
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
49
+ "@types/node": "^20",
50
+ "prettier": "^3.4.2",
51
+ "prettier-plugin-svelte": "^3.3.3",
52
+ "publint": "^0.3.2",
53
+ "storybook": "^8.6.12",
54
+ "svelte": "^5.0.0",
55
+ "svelte-check": "^4.0.0",
56
+ "typescript": "^5.0.0",
57
+ "vite": "^6.2.6"
58
+ },
59
+ "keywords": [
60
+ "svelte"
61
+ ],
62
+ "dependencies": {
63
+ "@abcnews/alternating-case-to-object": "^3.2.0",
64
+ "@abcnews/svelte-scrollyteller": "github:abcnews/svelte-scrollyteller#feature/future-news",
65
+ "async": "^3.2.6",
66
+ "bootstrap-icons": "^1.11.3",
67
+ "file-saver": "^2.0.5",
68
+ "jszip": "^3.10.1",
69
+ "svelte-bootstrap-icons": "^3.1.2"
70
+ }
71
+ }