diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..e4fd40d --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "MD013": false, + "MD025": false, + "MD033": false +} \ No newline at end of file diff --git a/components.d.ts b/components.d.ts index 469b144..6809e9e 100644 --- a/components.d.ts +++ b/components.d.ts @@ -4,16 +4,9 @@ declare module 'vue' { export interface GlobalComponents { - CommunityIcon: typeof import('./src/components/icons/CommunityIcon.vue')['default'] - DocumentationIcon: typeof import('./src/components/icons/DocumentationIcon.vue')['default'] - EcosystemIcon: typeof import('./src/components/icons/EcosystemIcon.vue')['default'] - FrameworkLink: typeof import('./src/components/FrameworkLink.vue')['default'] - HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] - Island: typeof import('./node_modules/.pnpm/iles@0.7.32/node_modules/iles/dist/client/app/components/Island.vue')['default'] - SupportIcon: typeof import('./src/components/icons/SupportIcon.vue')['default'] - ToolingIcon: typeof import('./src/components/icons/ToolingIcon.vue')['default'] + Island: typeof import("./node_modules/.pnpm/iles@0.7.32/node_modules/iles/dist/client/app/components/Island.vue")["default"]; + ProductionFlow: typeof import('./src/components/flow/ProductionFlow.vue')['default'] Welcome: typeof import('./src/components/Welcome.vue')['default'] - WelcomeItem: typeof import('./src/components/WelcomeItem.vue')['default'] } } diff --git a/iles.config.ts b/iles.config.ts index 4a9ab2f..c11fd91 100644 --- a/iles.config.ts +++ b/iles.config.ts @@ -1,3 +1,5 @@ -import { defineConfig } from 'iles' +import { defineConfig } from "iles"; -export default defineConfig({}) +export default defineConfig({ + modules: ["@islands/headings"], +}); diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..413dd1e --- /dev/null +++ b/netlify.toml @@ -0,0 +1,6 @@ +[build] + publish = "dist" + command = "npm run build" + +[build.environment] + NODE_VERSION = "16" \ No newline at end of file diff --git a/package.json b/package.json index 6aa12d7..bdf7431 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,15 @@ "node": "^14.18 || >= 16.0.0" }, "devDependencies": { + "@islands/headings": "^0.1.1", + "@islands/prism": "^0.1.1", "iles": "^0.7.19", + "sass": "^1.49.9", "typescript": "^4.5", "vitest": "*", "vue-tsc": "^0.29" + }, + "dependencies": { + "pinia": "^2.0.11" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e9f5cb..aab337c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,15 +1,25 @@ lockfileVersion: 5.3 specifiers: + '@islands/headings': ^0.1.1 + '@islands/prism': ^0.1.1 iles: ^0.7.19 + pinia: ^2.0.11 + sass: ^1.49.9 typescript: ^4.5 vitest: '*' vue-tsc: ^0.29 +dependencies: + pinia: 2.0.11_typescript@4.5.5 + devDependencies: - iles: 0.7.32 + '@islands/headings': 0.1.1 + '@islands/prism': 0.1.1 + iles: 0.7.32_sass@1.49.9 + sass: 1.49.9 typescript: 4.5.5 - vitest: 0.5.5 + vitest: 0.5.5_sass@1.49.9 vue-tsc: 0.29.8_typescript@4.5.5 packages: @@ -86,6 +96,14 @@ packages: - webpack dev: true + /@islands/headings/0.1.1: + resolution: {integrity: sha512-sDMDQD6b9d48psagYBt5MbWm0wonJ4t7BJV/hzln45Xg+h4RxBUT9d/R66UaAmHiPx5b/Q+4c3VvXq9HYciMvg==} + dependencies: + estree-util-value-to-estree: 1.3.0 + hast-util-heading-rank: 2.1.0 + hast-util-to-string: 2.0.0 + dev: true + /@islands/hydration/0.3.8: resolution: {integrity: sha512-3cjMM0Zk/AiBq0uPc2rjUsT2qNrsAvdS8MJvLHqNAnKf0BdWrqesdOJLCUHmqFqR1GmIElzUN+MoS7+9VPTr8A==} dev: true @@ -125,6 +143,13 @@ packages: '@islands/hydration': 0.3.8 dev: true + /@islands/prism/0.1.1: + resolution: {integrity: sha512-kTkQo/qBfgIXeb0unuEazCZEVyWnuIJX81j/QSqjQliX5MAlg/f6THJUJVyQvgKcXipR/TkQutiBXoGXRz208w==} + dependencies: + prismjs: 1.27.0 + unist-util-visit: 4.1.0 + dev: true + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -278,7 +303,7 @@ packages: vite: ^2.5.10 vue: ^3.2.25 dependencies: - vite: 2.8.4 + vite: 2.8.4_sass@1.49.9 vue: 3.2.31 dev: true @@ -382,7 +407,6 @@ packages: /@vue/devtools-api/6.0.12: resolution: {integrity: sha512-iO/4FIezHKXhiDBdKySCvJVh8/mZPxHpiQrTy+PXVqJZgpTPTdHy4q8GXulaY+UKEagdkBb0onxNQZ0LNiqVhw==} - dev: true /@vue/reactivity-transform/3.2.31: resolution: {integrity: sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==} @@ -1059,6 +1083,13 @@ packages: resolution: {integrity: sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ==} dev: true + /estree-util-value-to-estree/1.3.0: + resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} + engines: {node: '>=12.0.0'} + dependencies: + is-plain-obj: 3.0.0 + dev: true + /estree-util-visit/1.1.0: resolution: {integrity: sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==} dependencies: @@ -1229,6 +1260,12 @@ packages: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true + /hast-util-heading-rank/2.1.0: + resolution: {integrity: sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==} + dependencies: + '@types/hast': 2.3.4 + dev: true + /hast-util-is-element/2.1.2: resolution: {integrity: sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==} dependencies: @@ -1272,6 +1309,12 @@ packages: unist-util-is: 5.1.1 dev: true + /hast-util-to-string/2.0.0: + resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} + dependencies: + '@types/hast': 2.3.4 + dev: true + /hast-util-whitespace/2.0.0: resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} dev: true @@ -1301,7 +1344,7 @@ packages: resolve-alpn: 1.2.1 dev: true - /iles/0.7.32: + /iles/0.7.32_sass@1.49.9: resolution: {integrity: sha512-mXN+Phm2krOBk1jvSxFfRdL3lIVelcoBXuRm7z5W0GLr/0oyzBAtZAfnD/DPY1UnLDcJPCXBH5dDEP/lrzjVpA==} engines: {node: ^14.18 || >= 16.0.0} hasBin: true @@ -1325,7 +1368,7 @@ packages: picocolors: 1.0.0 unist-util-visit: 4.1.0 unplugin-vue-components: /@islands/components/0.17.0_vite@2.8.4+vue@3.2.31 - vite: 2.8.4 + vite: 2.8.4_sass@1.49.9 vue: 3.2.31 vue-router: 4.0.12_vue@3.2.31 xdm: 3.3.1 @@ -1340,6 +1383,10 @@ packages: - webpack dev: true + /immutable/4.0.0: + resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} + dev: true + /import-meta-resolve/1.1.1: resolution: {integrity: sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==} dependencies: @@ -1475,6 +1522,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: true + /is-plain-obj/4.0.0: resolution: {integrity: sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==} engines: {node: '>=12'} @@ -2187,6 +2239,23 @@ packages: engines: {node: '>=8.6'} dev: true + /pinia/2.0.11_typescript@4.5.5: + resolution: {integrity: sha512-JzcmnMqu28PNWOjDgEDK6fTrIzX8eQZKPPKvu/fpHdpXARUj1xeVdFi3YFIMOWswqaBd589cpmAMdSSTryI9iw==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + dependencies: + '@vue/devtools-api': 6.0.12 + typescript: 4.5.5 + vue-demi: 0.12.1 + dev: false + /postcss/8.4.7: resolution: {integrity: sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A==} engines: {node: ^10 || ^12 || >=14} @@ -2196,6 +2265,11 @@ packages: source-map-js: 1.0.2 dev: true + /prismjs/1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: true + /promise/7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: @@ -2405,6 +2479,16 @@ packages: mri: 1.2.0 dev: true + /sass/1.49.9: + resolution: {integrity: sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.0.0 + source-map-js: 1.0.2 + dev: true + /section-matter/1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -2636,7 +2720,7 @@ packages: webpack: optional: true dependencies: - vite: 2.8.4 + vite: 2.8.4_sass@1.49.9 webpack-virtual-modules: 0.4.3 dev: true @@ -2672,7 +2756,7 @@ packages: vfile-message: 3.1.0 dev: true - /vite/2.8.4: + /vite/2.8.4_sass@1.49.9: resolution: {integrity: sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==} engines: {node: '>=12.2.0'} hasBin: true @@ -2692,11 +2776,12 @@ packages: postcss: 8.4.7 resolve: 1.22.0 rollup: 2.68.0 + sass: 1.49.9 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest/0.5.5: + /vitest/0.5.5_sass@1.49.9: resolution: {integrity: sha512-oBKIXpFOGN7jDdK0MO4uWcB+UOPRyEJveB8XDx74XsFNbjGF7vHmHqwAomNE8MGtDW8hBKvSSbr58hibFiQc5Q==} engines: {node: '>=14.14.0'} hasBin: true @@ -2721,7 +2806,7 @@ packages: local-pkg: 0.4.1 tinypool: 0.1.2 tinyspy: 0.3.0 - vite: 2.8.4 + vite: 2.8.4_sass@1.49.9 transitivePeerDependencies: - less - sass @@ -2849,6 +2934,19 @@ packages: vscode-typescript-languageservice: 0.29.8 dev: true + /vue-demi/0.12.1: + resolution: {integrity: sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dev: false + /vue-router/4.0.12_vue@3.2.31: resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==} peerDependencies: diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 index e862d1c..e62028e Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/src/app.ts b/src/app.ts index af31745..26840e0 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,3 +1,8 @@ -import { defineApp } from 'iles' +import { defineApp } from "iles"; +import { createPinia } from "pinia"; -export default defineApp({}) +export default defineApp({ + enhanceApp({ app }) { + app.use(createPinia()); + }, +}); diff --git a/src/assets/base.css b/src/assets/base.css index 71dc55a..b1cd8a3 100644 --- a/src/assets/base.css +++ b/src/assets/base.css @@ -1,4 +1,6 @@ /* color palette from */ +@import url("https://fonts.googleapis.com/css2?family=Courier+Prime&family=Fenix&display=swap"); + :root { --vt-c-white: #ffffff; --vt-c-white-soft: #f8f8f8; @@ -36,7 +38,7 @@ --section-gap: 160px; } -@media (prefers-color-scheme: dark) { +/* @media (prefers-color-scheme: dark) { :root { --color-background: var(--vt-c-black); --color-background-soft: var(--vt-c-black-soft); @@ -48,7 +50,7 @@ --color-heading: var(--vt-c-text-dark-1); --color-text: var(--vt-c-text-dark-2); } -} +} */ *, *::before, @@ -65,8 +67,8 @@ body { background: var(--color-background); transition: color 0.5s, background-color 0.5s; line-height: 1.6; - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-family: "Fenix", BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, + serif; font-size: 15px; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; diff --git a/src/assets/logo.svg b/src/assets/logo.svg deleted file mode 100644 index d34b462..0000000 --- a/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/FrameworkLink.vue b/src/components/FrameworkLink.vue deleted file mode 100644 index 23dd6a8..0000000 --- a/src/components/FrameworkLink.vue +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue deleted file mode 100644 index 7176c52..0000000 --- a/src/components/HelloWorld.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - - diff --git a/src/components/Welcome.vue b/src/components/Welcome.vue index 9f167f9..449338e 100644 --- a/src/components/Welcome.vue +++ b/src/components/Welcome.vue @@ -1 +1,23 @@ - + + + diff --git a/src/components/flow/ProductionFlow.vue b/src/components/flow/ProductionFlow.vue new file mode 100644 index 0000000..2a4ffb0 --- /dev/null +++ b/src/components/flow/ProductionFlow.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/hooks/usePosts.hook.ts b/src/hooks/usePosts.hook.ts new file mode 100644 index 0000000..ab7e439 --- /dev/null +++ b/src/hooks/usePosts.hook.ts @@ -0,0 +1,35 @@ +import { computed } from "vue"; + +interface Post { + filename: string; + lastUpdated: Date; + href: string; + title: string; + meta: { + filename: string; + lastUpdated: Date; + href: string; + }; + frontmatter: { + title: string; + publishedAt?: Date; + }; +} + +const byDate = (a: Post, b: Post) => { + if (!b.frontmatter.publishedAt) { + return -1; + } + + if (!a.frontmatter.publishedAt) { + return 1; + } + + return a.frontmatter.publishedAt <= b.frontmatter.publishedAt ? -1 : 1; +}; + +export const usePosts = () => { + const posts = $(useDocuments("@/pages/posts")); + + return computed(() => posts.sort(byDate)); +}; diff --git a/src/layouts/default.vue b/src/layouts/default.vue index d7dd1a2..d69aa91 100644 --- a/src/layouts/default.vue +++ b/src/layouts/default.vue @@ -1,5 +1,5 @@ diff --git a/src/modules/flow/components/AddFlow.vue b/src/modules/flow/components/AddFlow.vue new file mode 100644 index 0000000..de4ecb9 --- /dev/null +++ b/src/modules/flow/components/AddFlow.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/modules/flow/components/FlowStep.vue b/src/modules/flow/components/FlowStep.vue new file mode 100644 index 0000000..3d3c983 --- /dev/null +++ b/src/modules/flow/components/FlowStep.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/src/modules/flow/store/useProductionFlow.store.ts b/src/modules/flow/store/useProductionFlow.store.ts new file mode 100644 index 0000000..909acfb --- /dev/null +++ b/src/modules/flow/store/useProductionFlow.store.ts @@ -0,0 +1,30 @@ +import { defineStore } from "pinia"; + +interface Step { + name: string; + prerequisites: string[]; + outputs: string[]; +} + +interface State { + steps: Step[]; +} + +const initialState: State = { + steps: [ + { + name: "In production", + prerequisites: [], + outputs: ["Users can use the app"], + }, + ], +}; + +export const useProductionFlow = defineStore("production-flow", { + state: () => ({ ...initialState }), + actions: { + addStep(step: Step) { + this.$state.steps = [step, ...this.$state.steps]; + }, + }, +}); diff --git a/src/pages/index.mdx b/src/pages/index.mdx index 384981d..a1b49b9 100644 --- a/src/pages/index.mdx +++ b/src/pages/index.mdx @@ -1,5 +1,5 @@ --- -title: Julien Calixte +title: Hi! ---
diff --git a/src/pages/posts/production-flow.mdx b/src/pages/posts/production-flow.mdx new file mode 100644 index 0000000..5e04efb --- /dev/null +++ b/src/pages/posts/production-flow.mdx @@ -0,0 +1,24 @@ +--- +title: An introduction to production flow +--- + +# {title} + +Dear developers, how clear is it for you the way you build an app? + +You may answer "Easy! There are few steps:" + +1. Talking to the client +2. Getting the design +3. Coding +4. deploying to users + +But how exactly? What does "talking to the client" really mean? And "coding" ? + +In lean, one particular important concept is **Visual Management**: *doing by seeing*. For that, we want to be clear on how we work. + +May I ask you some questions? + +First, can you name your different step before having your app in production? + + diff --git a/src/site.ts b/src/site.ts index eca7117..9a60dbf 100644 --- a/src/site.ts +++ b/src/site.ts @@ -1,4 +1,4 @@ export default { - title: 'îles', - description: 'Islands of interactivity with Vue in Vite.js' -} + title: "Julien Calixte", + description: `Julien Calixte's blog`, +}; diff --git a/tsconfig.json b/tsconfig.json index 3913ca5..fef3d2b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,7 @@ "resolveJsonModule": true, "esModuleInterop": true, "paths": { - "@/*": ["src/*"], - "~/*": ["src/*"] + "@/*": ["src/*"] }, "lib": ["esnext", "dom", "dom.iterable", "scripthost"], "skipLibCheck": true