diff --git a/2025/astro.config.mjs b/2025/astro.config.mjs
index cb9dd38..a6a1fd8 100644
--- a/2025/astro.config.mjs
+++ b/2025/astro.config.mjs
@@ -1,5 +1,6 @@
import react from '@astrojs/react';
import tailwindcss from '@tailwindcss/vite';
+import dsv from '@rollup/plugin-dsv';
// @ts-check
import { defineConfig } from 'astro/config';
@@ -19,6 +20,7 @@ export default defineConfig({
plugins: [
Macros(),
tailwindcss(),
+ dsv(),
],
},
diff --git a/2025/package.json b/2025/package.json
index 483bee9..eb82032 100644
--- a/2025/package.json
+++ b/2025/package.json
@@ -33,6 +33,7 @@
"devDependencies": {
"@antfu/ni": "^25.0.0",
"@astrojs/ts-plugin": "^1.10.4",
+ "@rollup/plugin-dsv": "^3.0.5",
"@ryoppippi/eslint-config": "npm:@jsr/ryoppippi__eslint-config@^0.0.25",
"eslint": "^9.28.0",
"eslint-plugin-astro": "^1.3.1",
diff --git a/2025/pnpm-lock.yaml b/2025/pnpm-lock.yaml
index 7902983..b05697f 100644
--- a/2025/pnpm-lock.yaml
+++ b/2025/pnpm-lock.yaml
@@ -54,6 +54,9 @@ importers:
'@astrojs/ts-plugin':
specifier: ^1.10.4
version: 1.10.4
+ '@rollup/plugin-dsv':
+ specifier: ^3.0.5
+ version: 3.0.5(rollup@4.42.0)
'@ryoppippi/eslint-config':
specifier: npm:@jsr/ryoppippi__eslint-config@^0.0.25
version: '@jsr/ryoppippi__eslint-config@0.0.25(@typescript-eslint/utils@8.24.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.2.1)(eslint-plugin-astro@1.3.1(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-format@1.0.1(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(prettier-plugin-astro@0.14.1)(typescript@5.8.3)'
@@ -854,6 +857,14 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.9':
resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
+ '@rollup/plugin-dsv@3.0.5':
+ resolution: {integrity: sha512-q1U4vu7voJkgeltujKya7ByxuWaHg9lYqCFQfWkqcgvIeOlUh52VrQSlgEe1JhN4wIaw5FOflRX3Jv0nqrw9uQ==}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/pluginutils@5.1.4':
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
engines: {node: '>=14.0.0'}
@@ -1100,6 +1111,9 @@ packages:
'@types/babel__traverse@7.20.7':
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
@@ -1509,6 +1523,9 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
comment-parser@1.4.1:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
@@ -1574,6 +1591,10 @@ packages:
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ d3-dsv@2.0.0:
+ resolution: {integrity: sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==}
+ hasBin: true
+
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
@@ -2117,6 +2138,10 @@ packages:
http-cache-semantics@4.2.0:
resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -2977,9 +3002,15 @@ packages:
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+
s.color@0.0.15:
resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==}
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
sass-formatter@0.7.9:
resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==}
@@ -3091,6 +3122,10 @@ packages:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
@@ -3153,6 +3188,10 @@ packages:
resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ tosource@2.0.0-alpha.3:
+ resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==}
+ engines: {node: '>=10'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -4414,6 +4453,16 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.9': {}
+ '@rollup/plugin-dsv@3.0.5(rollup@4.42.0)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.4(rollup@4.42.0)
+ '@types/d3-dsv': 3.0.7
+ d3-dsv: 2.0.0
+ strip-bom: 4.0.0
+ tosource: 2.0.0-alpha.3
+ optionalDependencies:
+ rollup: 4.42.0
+
'@rollup/pluginutils@5.1.4(rollup@4.42.0)':
dependencies:
'@types/estree': 1.0.8
@@ -4628,6 +4677,8 @@ snapshots:
dependencies:
'@babel/types': 7.27.6
+ '@types/d3-dsv@3.0.7': {}
+
'@types/debug@4.1.12':
dependencies:
'@types/ms': 2.1.0
@@ -5194,6 +5245,8 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ commander@2.20.3: {}
+
comment-parser@1.4.1: {}
common-ancestor-path@1.0.1: {}
@@ -5251,6 +5304,12 @@ snapshots:
csstype@3.1.3: {}
+ d3-dsv@2.0.0:
+ dependencies:
+ commander: 2.20.3
+ iconv-lite: 0.4.24
+ rw: 1.3.3
+
debug@3.2.7:
dependencies:
ms: 2.1.3
@@ -5932,6 +5991,10 @@ snapshots:
http-cache-semantics@4.2.0: {}
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
ignore@5.3.2: {}
import-fresh@3.3.1:
@@ -6922,8 +6985,12 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
+ rw@1.3.3: {}
+
s.color@0.0.15: {}
+ safer-buffer@2.1.2: {}
+
sass-formatter@0.7.9:
dependencies:
suf-log: 2.5.3
@@ -7092,6 +7159,8 @@ snapshots:
dependencies:
ansi-regex: 6.1.0
+ strip-bom@4.0.0: {}
+
strip-indent@3.0.0:
dependencies:
min-indent: 1.0.1
@@ -7151,6 +7220,8 @@ snapshots:
dependencies:
eslint-visitor-keys: 3.4.3
+ tosource@2.0.0-alpha.3: {}
+
tr46@0.0.3: {}
trim-lines@3.0.1: {}
diff --git a/2025/src/components/Sponsors/Individual.astro b/2025/src/components/Sponsors/Individual.astro
new file mode 100644
index 0000000..81e5e3d
--- /dev/null
+++ b/2025/src/components/Sponsors/Individual.astro
@@ -0,0 +1,46 @@
+---
+import Card from "../Card.astro";
+
+type Props = {
+ name: string;
+ src: string;
+ comment: string;
+};
+
+const { name, src, comment } = Astro.props;
+
+let iconUrl = "";
+try {
+ const module = await import(
+ `../../assets/individual-sponsors/${src && src !== "" ? src : "no-icon"}.png?url`
+ );
+ iconUrl = module.default;
+} catch (e) {
+ console.error(`Icon not found: ${src}`);
+}
+---
+
+
+
個人スポンサーになりませんか?
++ VimConf 2025 Smallの成功を一緒に作り上げましょう! +
+ + + + + +