From c7050cb91e027df36780d6a8927da9dd7443a7b7 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 15 Sep 2025 12:14:46 +0100 Subject: [PATCH] feat: Created base set of components --- .gitignore | 2 + package.json | 20 +++ pnpm-lock.yaml | 266 ++++++++++++++++++++++++++++ src/components/Cards/Card.svelte | 23 +++ src/components/Collapsible.svelte | 33 ++++ src/components/Gallery.svelte | 91 ++++++++++ src/components/GridGallery.svelte | 7 + src/components/Loading.svelte | 73 ++++++++ src/components/PageIcon.svelte | 9 + src/components/Section.svelte | 26 +++ src/components/SkillProgress.svelte | 17 ++ src/components/Timeline.svelte | 29 +++ src/index.ts | 9 + svelte.config.js | 13 ++ 14 files changed, 618 insertions(+) create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/components/Cards/Card.svelte create mode 100644 src/components/Collapsible.svelte create mode 100644 src/components/Gallery.svelte create mode 100644 src/components/GridGallery.svelte create mode 100644 src/components/Loading.svelte create mode 100644 src/components/PageIcon.svelte create mode 100644 src/components/Section.svelte create mode 100644 src/components/SkillProgress.svelte create mode 100644 src/components/Timeline.svelte create mode 100644 src/index.ts create mode 100644 svelte.config.js diff --git a/.gitignore b/.gitignore index 8c2b884..5d7e994 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ # Built Visual Studio Code Extensions *.vsix +# ---> Node.js +node_modules/ \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..3e2ae2d --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "component-lib", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "package": "svelte-package", + "build": "pnpm run package", + "release": "pnpm run build && npm publish" + }, + "keywords": [], + "author": "", + "license": "ISC", + "packageManager": "pnpm@10.15.1", + "devDependencies": { + "@sveltejs/package": "^2.5.1", + "svelte": "^5.38.10", + "typescript": "^5.9.2" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..e641a47 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,266 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@sveltejs/package': + specifier: ^2.5.1 + version: 2.5.1(svelte@5.38.10)(typescript@5.9.2) + svelte: + specifier: ^5.38.10 + version: 5.38.10 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + +packages: + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@sveltejs/acorn-typescript@1.0.5': + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/package@2.5.1': + resolution: {integrity: sha512-n0XRW7H7rD2AbdDsTD1KjXBztU96eMMuxPYwL9C+ZS8H8M1mS5NgmqFaSe8wKR40RU1KjLsqSWMnzsxRfG2j+A==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + svelte2tsx@0.7.43: + resolution: {integrity: sha512-TtxMuk520th4ZEvUQrhbDAyyQ1I+kc5dZCA4ChOLlbVXZfqenrY45iTH27DpLyx/u4STEz8O3hkGm5goTS8JhQ==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.38.10: + resolution: {integrity: sha512-UY+OhrWK7WI22bCZ00P/M3HtyWgwJPi9IxSRkoAE2MeAy6kl7ZlZWJZ8RaB+X4KD/G+wjis+cGVnVYaoqbzBqg==} + engines: {node: '>=18'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + +snapshots: + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/package@2.5.1(svelte@5.38.10)(typescript@5.9.2)': + dependencies: + chokidar: 4.0.3 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.7.2 + svelte: 5.38.10 + svelte2tsx: 0.7.43(svelte@5.38.10)(typescript@5.9.2) + transitivePeerDependencies: + - typescript + + '@types/estree@1.0.8': {} + + acorn@8.15.0: {} + + aria-query@5.3.2: {} + + axobject-query@4.1.0: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + clsx@2.1.1: {} + + dedent-js@1.0.1: {} + + esm-env@1.2.2: {} + + esrap@2.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + kleur@4.1.5: {} + + locate-character@3.0.0: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mri@1.2.0: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + readdirp@4.1.2: {} + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + semver@7.7.2: {} + + svelte2tsx@0.7.43(svelte@5.38.10)(typescript@5.9.2): + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.38.10 + typescript: 5.9.2 + + svelte@5.38.10: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.0 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.19 + zimmerframe: 1.1.4 + + tslib@2.8.1: {} + + typescript@5.9.2: {} + + zimmerframe@1.1.4: {} diff --git a/src/components/Cards/Card.svelte b/src/components/Cards/Card.svelte new file mode 100644 index 0000000..7cfe334 --- /dev/null +++ b/src/components/Cards/Card.svelte @@ -0,0 +1,23 @@ + + +
+
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+
diff --git a/src/components/Collapsible.svelte b/src/components/Collapsible.svelte new file mode 100644 index 0000000..b45e247 --- /dev/null +++ b/src/components/Collapsible.svelte @@ -0,0 +1,33 @@ + + +
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/src/components/Gallery.svelte b/src/components/Gallery.svelte new file mode 100644 index 0000000..0024b70 --- /dev/null +++ b/src/components/Gallery.svelte @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/components/GridGallery.svelte b/src/components/GridGallery.svelte new file mode 100644 index 0000000..801ff62 --- /dev/null +++ b/src/components/GridGallery.svelte @@ -0,0 +1,7 @@ + + + +
+ +
\ No newline at end of file diff --git a/src/components/Loading.svelte b/src/components/Loading.svelte new file mode 100644 index 0000000..4ccf026 --- /dev/null +++ b/src/components/Loading.svelte @@ -0,0 +1,73 @@ + + +
+
+
+
+
\ No newline at end of file diff --git a/src/components/PageIcon.svelte b/src/components/PageIcon.svelte new file mode 100644 index 0000000..5fbbf7a --- /dev/null +++ b/src/components/PageIcon.svelte @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/src/components/Section.svelte b/src/components/Section.svelte new file mode 100644 index 0000000..2789f22 --- /dev/null +++ b/src/components/Section.svelte @@ -0,0 +1,26 @@ + + +
+ + + +
+ +
+ {label} +
+
+
+ +
+
+
\ No newline at end of file diff --git a/src/components/SkillProgress.svelte b/src/components/SkillProgress.svelte new file mode 100644 index 0000000..e72437d --- /dev/null +++ b/src/components/SkillProgress.svelte @@ -0,0 +1,17 @@ + + +
+
+ Competency Level + {value}% +
+
+
+
+
\ No newline at end of file diff --git a/src/components/Timeline.svelte b/src/components/Timeline.svelte new file mode 100644 index 0000000..ab0ee3b --- /dev/null +++ b/src/components/Timeline.svelte @@ -0,0 +1,29 @@ + + +
+
+ {#each timelineData as entry, i} +
+ {#if i == 0} +
+ {:else} +
+ {/if} +

{entry.duration}

+ + + {entry.title} + {@html entry.description} + +
+ {/each} +
+
\ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..4692a8f --- /dev/null +++ b/src/index.ts @@ -0,0 +1,9 @@ +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SkillProgress } from './components/SkillProgress.svelte'; +export { default as Section } from './components/Section.svelte'; +export { default as PageIcon } from './components/PageIcon.svelte'; +export { default as Loading } from './components/Loading.svelte'; +export { default as GridGallery } from './components/GridGallery.svelte'; +export { default as Gallery } from './components/Gallery.svelte'; +export { default as Collapsible } from './components/Collapsible.svelte'; +export { default as Card } from './components/Cards/Card.svelte'; \ No newline at end of file diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..88e5765 --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,13 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + preprocess: vitePreprocess(), + kit: { + package: { + dir: 'dist', + emitTypes: true, + // only export index.ts + exports: (filepath) => filepath === 'index.ts' + } + } +};