├── .github
└── workflows
│ └── deploy.yaml
├── .gitignore
├── .sassrc.js
├── App.vue
├── cards
├── c01.jpg
├── c02.jpg
├── c03.jpg
├── c04.jpg
├── c05.jpg
├── c06.jpg
├── c07.jpg
├── c08.jpg
├── c09.jpg
├── c10.jpg
├── c11.jpg
├── c12.jpg
├── c13.jpg
├── c14.jpg
├── m00.jpg
├── m01.jpg
├── m02.jpg
├── m03.jpg
├── m04.jpg
├── m05.jpg
├── m06.jpg
├── m07.jpg
├── m08.jpg
├── m09.jpg
├── m10.jpg
├── m11.jpg
├── m12.jpg
├── m13.jpg
├── m14.jpg
├── m15.jpg
├── m16.jpg
├── m17.jpg
├── m18.jpg
├── m19.jpg
├── m20.jpg
├── m21.jpg
├── p01.jpg
├── p02.jpg
├── p03.jpg
├── p04.jpg
├── p05.jpg
├── p06.jpg
├── p07.jpg
├── p08.jpg
├── p09.jpg
├── p10.jpg
├── p11.jpg
├── p12.jpg
├── p13.jpg
├── p14.jpg
├── s01.jpg
├── s02.jpg
├── s03.jpg
├── s04.jpg
├── s05.jpg
├── s06.jpg
├── s07.jpg
├── s08.jpg
├── s09.jpg
├── s10.jpg
├── s11.jpg
├── s12.jpg
├── s13.jpg
├── s14.jpg
├── w01.jpg
├── w02.jpg
├── w03.jpg
├── w04.jpg
├── w05.jpg
├── w06.jpg
├── w07.jpg
├── w08.jpg
├── w09.jpg
├── w10.jpg
├── w11.jpg
├── w12.jpg
├── w13.jpg
└── w14.jpg
├── colorThemes.mjs
├── components
├── GlobalHeader.vue
├── Icon.vue
├── SpreadItem.vue
└── TarotCard.vue
├── cup.svg
├── defaultSpreads.js
├── index.html
├── models
├── card.ts
├── size.ts
└── spread.ts
├── package-lock.json
├── package.json
├── pages
├── About.vue
├── Input.vue
├── Meanings.vue
├── Settings.vue
├── Spread.vue
└── Spreads.vue
├── pentacles.svg
├── script.ts
├── suits cropped.afdesign
├── suits.afdesign
├── sword.svg
├── tarot.mjs
├── variables.scss
├── vue-shim.d.ts
└── wand.svg
/.github/workflows/deploy.yaml:
--------------------------------------------------------------------------------
1 | name: Node.js CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | workflow_dispatch:
8 |
9 | jobs:
10 | build:
11 |
12 | runs-on: ubuntu-latest
13 |
14 | steps:
15 | - uses: actions/checkout@v2
16 | - name: Build with Node 12
17 | uses: actions/setup-node@v1
18 | with:
19 | node-version: 12.x
20 | - run: npm install
21 | - run: npx parcel build index.html
22 | env:
23 | CI: true
24 | - name: Deploy to S3
25 | uses: jakejarvis/s3-sync-action@master
26 | with:
27 | args: --acl public-read --delete
28 | env:
29 | AWS_S3_BUCKET: ${{ secrets.AWS_PRODUCTION_BUCKET_NAME }}
30 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
31 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
32 | AWS_REGION: ${{ secrets.AWS_REGION }}
33 | SOURCE_DIR: "dist"
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | node_modules/
3 | .cache/
4 | dist/
5 | .parcel-cache/
--------------------------------------------------------------------------------
/.sassrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | data: '@import "./variables.scss";'
3 | }
--------------------------------------------------------------------------------
/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
49 |
50 |
--------------------------------------------------------------------------------
/cards/c01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c01.jpg
--------------------------------------------------------------------------------
/cards/c02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c02.jpg
--------------------------------------------------------------------------------
/cards/c03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c03.jpg
--------------------------------------------------------------------------------
/cards/c04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c04.jpg
--------------------------------------------------------------------------------
/cards/c05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c05.jpg
--------------------------------------------------------------------------------
/cards/c06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c06.jpg
--------------------------------------------------------------------------------
/cards/c07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c07.jpg
--------------------------------------------------------------------------------
/cards/c08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c08.jpg
--------------------------------------------------------------------------------
/cards/c09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c09.jpg
--------------------------------------------------------------------------------
/cards/c10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c10.jpg
--------------------------------------------------------------------------------
/cards/c11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c11.jpg
--------------------------------------------------------------------------------
/cards/c12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c12.jpg
--------------------------------------------------------------------------------
/cards/c13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c13.jpg
--------------------------------------------------------------------------------
/cards/c14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c14.jpg
--------------------------------------------------------------------------------
/cards/m00.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m00.jpg
--------------------------------------------------------------------------------
/cards/m01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m01.jpg
--------------------------------------------------------------------------------
/cards/m02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m02.jpg
--------------------------------------------------------------------------------
/cards/m03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m03.jpg
--------------------------------------------------------------------------------
/cards/m04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m04.jpg
--------------------------------------------------------------------------------
/cards/m05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m05.jpg
--------------------------------------------------------------------------------
/cards/m06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m06.jpg
--------------------------------------------------------------------------------
/cards/m07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m07.jpg
--------------------------------------------------------------------------------
/cards/m08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m08.jpg
--------------------------------------------------------------------------------
/cards/m09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m09.jpg
--------------------------------------------------------------------------------
/cards/m10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m10.jpg
--------------------------------------------------------------------------------
/cards/m11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m11.jpg
--------------------------------------------------------------------------------
/cards/m12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m12.jpg
--------------------------------------------------------------------------------
/cards/m13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m13.jpg
--------------------------------------------------------------------------------
/cards/m14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m14.jpg
--------------------------------------------------------------------------------
/cards/m15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m15.jpg
--------------------------------------------------------------------------------
/cards/m16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m16.jpg
--------------------------------------------------------------------------------
/cards/m17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m17.jpg
--------------------------------------------------------------------------------
/cards/m18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m18.jpg
--------------------------------------------------------------------------------
/cards/m19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m19.jpg
--------------------------------------------------------------------------------
/cards/m20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m20.jpg
--------------------------------------------------------------------------------
/cards/m21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m21.jpg
--------------------------------------------------------------------------------
/cards/p01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p01.jpg
--------------------------------------------------------------------------------
/cards/p02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p02.jpg
--------------------------------------------------------------------------------
/cards/p03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p03.jpg
--------------------------------------------------------------------------------
/cards/p04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p04.jpg
--------------------------------------------------------------------------------
/cards/p05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p05.jpg
--------------------------------------------------------------------------------
/cards/p06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p06.jpg
--------------------------------------------------------------------------------
/cards/p07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p07.jpg
--------------------------------------------------------------------------------
/cards/p08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p08.jpg
--------------------------------------------------------------------------------
/cards/p09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p09.jpg
--------------------------------------------------------------------------------
/cards/p10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p10.jpg
--------------------------------------------------------------------------------
/cards/p11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p11.jpg
--------------------------------------------------------------------------------
/cards/p12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p12.jpg
--------------------------------------------------------------------------------
/cards/p13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p13.jpg
--------------------------------------------------------------------------------
/cards/p14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p14.jpg
--------------------------------------------------------------------------------
/cards/s01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s01.jpg
--------------------------------------------------------------------------------
/cards/s02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s02.jpg
--------------------------------------------------------------------------------
/cards/s03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s03.jpg
--------------------------------------------------------------------------------
/cards/s04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s04.jpg
--------------------------------------------------------------------------------
/cards/s05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s05.jpg
--------------------------------------------------------------------------------
/cards/s06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s06.jpg
--------------------------------------------------------------------------------
/cards/s07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s07.jpg
--------------------------------------------------------------------------------
/cards/s08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s08.jpg
--------------------------------------------------------------------------------
/cards/s09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s09.jpg
--------------------------------------------------------------------------------
/cards/s10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s10.jpg
--------------------------------------------------------------------------------
/cards/s11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s11.jpg
--------------------------------------------------------------------------------
/cards/s12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s12.jpg
--------------------------------------------------------------------------------
/cards/s13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s13.jpg
--------------------------------------------------------------------------------
/cards/s14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s14.jpg
--------------------------------------------------------------------------------
/cards/w01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w01.jpg
--------------------------------------------------------------------------------
/cards/w02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w02.jpg
--------------------------------------------------------------------------------
/cards/w03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w03.jpg
--------------------------------------------------------------------------------
/cards/w04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w04.jpg
--------------------------------------------------------------------------------
/cards/w05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w05.jpg
--------------------------------------------------------------------------------
/cards/w06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w06.jpg
--------------------------------------------------------------------------------
/cards/w07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w07.jpg
--------------------------------------------------------------------------------
/cards/w08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w08.jpg
--------------------------------------------------------------------------------
/cards/w09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w09.jpg
--------------------------------------------------------------------------------
/cards/w10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w10.jpg
--------------------------------------------------------------------------------
/cards/w11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w11.jpg
--------------------------------------------------------------------------------
/cards/w12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w12.jpg
--------------------------------------------------------------------------------
/cards/w13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w13.jpg
--------------------------------------------------------------------------------
/cards/w14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w14.jpg
--------------------------------------------------------------------------------
/colorThemes.mjs:
--------------------------------------------------------------------------------
1 | export default [
2 | { name: 'The Fool', colors: { bg: '#2d678b', mid: '#7dc4e3', fg: '#f6b93b' }},
3 | { name: 'The Magician', colors: { bg: '#60395f', mid: '#c2f6ff', fg: '#ff85cc' }},
4 | { name: 'The High Priestess', colors: { bg: '#abc176', mid: '#b92da8', fg: '#000000' }},
5 | { name: 'The Empress', colors: { bg: '#2c1d2f', mid: '#f6b93b', fg: '#ffffff' }},
6 | { name: 'The Emperor', colors: { bg: '#ffffff', mid: '#ffae00', fg: '#9e16d0' }},
7 | { name: 'The Hierophant', colors: { bg: '#151b23', mid: '#ffc800', fg: '#ffffff' }},
8 | { name: 'The Lovers', colors: { bg: '#2f090f', mid: '#dd97ce', fg: '#ff0095' }},
9 | { name: 'The Chariot', colors: { bg: '#e1a056', mid: '#cd3c18', fg: '#42546c' }},
10 | { name: 'Strength', colors: { bg: '#000000', mid: '#d82234', fg: '#ffffff' }},
11 | { name: 'The Hermit', colors: { bg: '#326c5b', mid: '#52dcff', fg: '#ecc8a7' }},
12 | { name: 'Wheel of Fortune', colors: { bg: '#ccf9ff', mid: '#e68d28', fg: '#2b5a97' }},
13 | { name: 'Justice', colors: { bg: '#fafafa', mid: '#b0b0b0', fg: '#545454' }},
14 | { name: 'The Hanged Man', colors: { bg: '#080808', mid: '#616161', fg: '#d6d6d6' }},
15 | { name: 'Death', colors: { bg: '#c52020', mid: '#ffffff', fg: '#ffffff' }},
16 | { name: 'Temperance', colors: { bg: '#f9f5e1', mid: '#40be27', fg: '#684e22' }},
17 | { name: 'The Devil', colors: { bg: '#ffd500', mid: '#ff0000', fg: '#000000' }},
18 | { name: 'The Tower', colors: { bg: '#104221', mid: '#fbff00', fg: '#00ffb7' }},
19 | { name: 'The Star', colors: { bg: '#231f1f', mid: '#9f332d', fg: '#eeafa0' }},
20 | { name: 'The Moon', colors: { bg: '#070709', mid: '#618198', fg: '#2bb5e3' }},
21 | { name: 'Temperance', colors: { bg: '#d4ede2', mid: '#db7629', fg: '#493218' }},
22 | { name: 'The World', colors: { bg: '#f8f8f8', mid: '#6ecd0e', fg: '#f08a8a' }},
23 | ]
--------------------------------------------------------------------------------
/components/GlobalHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
70 |
71 |
--------------------------------------------------------------------------------
/components/Icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
184 |
185 |
--------------------------------------------------------------------------------
/components/SpreadItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ spread.name }}
5 |
6 |
7 | {{ card.name }}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
27 |
28 |
--------------------------------------------------------------------------------
/components/TarotCard.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
{{ card.name }}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
{{ card.symbol() }}
20 |
21 |
reversed
22 |
23 |
24 |
25 |
{{ card.name }}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
72 |
73 |
--------------------------------------------------------------------------------
/cup.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/defaultSpreads.js:
--------------------------------------------------------------------------------
1 | import { Spread, SpreadCard } from './models/spread'
2 |
3 | function slugify(text) {
4 | text = text.replace(/\s/g, '-')
5 | text = text.replace(/[^\w-]/g, '')
6 | text = text.toLowerCase()
7 |
8 | return text
9 | }
10 |
11 | function simpleNCardSpreadGenerator(cards, group) {
12 | let spread = {
13 | id: slugify(cards.join(' ')),
14 | group: group,
15 | // name: `${card1}, ${card2} & ${card3}`,
16 | cards: cards.map((card, index) => {
17 | return {
18 | number: index + 1,
19 | name: card,
20 | position: {
21 | x: index + 1,
22 | y: 1,
23 | },
24 | }
25 | })
26 | }
27 |
28 | return spread
29 | }
30 |
31 | let threeCardSpreads = [
32 | ['Past', 'Present', 'Future'],
33 | ['Nature', 'Cause', 'Solution'],
34 | ['Current Situation', 'Obstacle', 'Advice'],
35 | ['Situation', 'Action', 'Outcome'],
36 | ['Context', 'Where To Focus', 'Outcome'],
37 | ['What I Think', 'What I Feel', 'What I Do'],
38 | ].map(a => simpleNCardSpreadGenerator(a))
39 |
40 | let spreads = []
41 |
42 | spreads.push(simpleNCardSpreadGenerator(['Past', 'Present', 'Future']))
43 | spreads.push(simpleNCardSpreadGenerator(['Nature', 'Cause', 'Solution']))
44 | spreads.push(simpleNCardSpreadGenerator(['Current Situation', 'Obstacle', 'Advice']))
45 | spreads.push(simpleNCardSpreadGenerator(['Situation', 'Action', 'Outcome']))
46 | spreads.push(simpleNCardSpreadGenerator(['Context', 'Where To Focus', 'Outcome']))
47 | spreads.push(simpleNCardSpreadGenerator(['What I Think', 'What I Feel', 'What I Do']))
48 |
49 | spreads.push(simpleNCardSpreadGenerator(['Where you stand now', 'What you aspire to', 'How to get there']))
50 | spreads.push(simpleNCardSpreadGenerator(['What you aspire to', 'What is standing in your way', 'How you can overcome this']))
51 | spreads.push(simpleNCardSpreadGenerator(['What will help you', 'What will hinder you', 'What is your unrealised potential']))
52 |
53 | spreads.push(simpleNCardSpreadGenerator(['What you can change', 'What you can\'t change', 'What you may not be aware of']))
54 | spreads.push(simpleNCardSpreadGenerator(['What worked well', 'What didn\'t work well', 'Key learnings']))
55 |
56 | spreads.push(simpleNCardSpreadGenerator(['Strengths', 'Weaknesses', 'Advice']))
57 | spreads.push(simpleNCardSpreadGenerator(['Opportunities', 'Challenges', 'Outcome']))
58 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2', 'Option 3']))
59 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2', 'What you need to know to make a decision']))
60 | spreads.push(simpleNCardSpreadGenerator(['A solution', 'An alternate solution', 'How to choose']))
61 |
62 | function simple3CardBalancedGenerator(card1, card2, card3) {
63 | return {
64 | id: slugify(`${card1} ${card2} ${card3}`),
65 | // name: `Balanced Spread`,
66 | group: 'Balanced',
67 | cards: [
68 | {
69 | number: 1,
70 | name: card1,
71 | position: {
72 | x: 2,
73 | y: 1,
74 | },
75 | },
76 | {
77 | number: 2,
78 | name: card2,
79 | rotation: 225,
80 | position: {
81 | x: 1,
82 | y: 2,
83 | },
84 | },
85 | {
86 | number: 3,
87 | name: card3,
88 | rotation: 135,
89 | position: {
90 | x: 3,
91 | y: 2,
92 | },
93 | }
94 | ]
95 | }
96 | }
97 |
98 | spreads.push(simple3CardBalancedGenerator('Mind', 'Body', 'Soul'))
99 | spreads.push(simple3CardBalancedGenerator('Physical State', 'Emotional State', 'Spiritual State'))
100 | spreads.push(simple3CardBalancedGenerator('Subconscious', 'Conscious', 'Super Conscious'))
101 | spreads.push(simple3CardBalancedGenerator('Option 1', 'Option 2', 'Option 3'))
102 | spreads.push(simple3CardBalancedGenerator('What I Think', 'What I Feel', 'What I Do'))
103 |
104 | spreads.push({
105 | id: slugify(`single card reading`),
106 | name: `Draw a single card`,
107 | cards: [
108 | {
109 | number: 1,
110 | name: 'Card',
111 | position: {
112 | x: 1,
113 | y: 0,
114 | },
115 | }
116 | ]
117 | })
118 |
119 | function simple2CardCrossGenerator(card1, card2) {
120 | return {
121 | id: slugify(`${card1}, ${card2}`),
122 | group: `Cross`,
123 | cards: [
124 | {
125 | number: 1,
126 | name: card1,
127 | position: {
128 | x: 1,
129 | y: 1,
130 | },
131 | },
132 | {
133 | number: 2,
134 | name: card2,
135 | position: {
136 | x: 1,
137 | y: 1,
138 | },
139 | rotation: 90,
140 | layer: 1,
141 | }
142 | ]
143 | }
144 | }
145 |
146 | spreads.push(simpleNCardSpreadGenerator(['Situation', 'Advice']))
147 | spreads.push(simpleNCardSpreadGenerator(['Yes', 'No']))
148 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2']))
149 | spreads.push(simpleNCardSpreadGenerator(['Accept', 'Reject']))
150 |
151 | spreads.push(simple2CardCrossGenerator('Situation', 'Challenge'))
152 | spreads.push(simple2CardCrossGenerator('Aim', 'Blockage'))
153 | spreads.push(simple2CardCrossGenerator('Blockage', 'Solution'))
154 | spreads.push(simple2CardCrossGenerator('Ideal', 'Settling for'))
155 | spreads.push(simple2CardCrossGenerator('Situation', 'Extra Info'))
156 | spreads.push(simple2CardCrossGenerator('Querent', 'Adversary'))
157 |
158 | spreads.push(simpleNCardSpreadGenerator(['Positive', 'Negative', 'Result', 'Advice']))
159 |
160 | module.exports = spreads.map(spread => Spread.fromObject(spread))
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Document
7 |
8 |
9 |
10 |
11 |
12 |
41 |
42 |
--------------------------------------------------------------------------------
/models/card.ts:
--------------------------------------------------------------------------------
1 | export enum Arcana {
2 | Major,
3 | Minor,
4 | }
5 |
6 | export enum Suit {
7 | Trump,
8 | Swords,
9 | Wands,
10 | Cups,
11 | Pentacles,
12 | }
13 |
14 | export class Card {
15 | id: string
16 | name: string
17 | number: number
18 | arcana: Arcana
19 | suit: Suit
20 | // reversed: boolean
21 | meanings: {
22 | upright: string[],
23 | reversed: string[],
24 | }
25 | searchKey: string
26 | questions: string[]
27 | fortunes: string[]
28 | archetype: string | null
29 | element: string | null
30 | hebrewAlphabet: string | null
31 | spiritual: string | null
32 | numerology: string | null
33 | affirmation: string | null
34 |
35 | isMajorArcana() {
36 | return this.arcana == Arcana.Major
37 | }
38 |
39 | suitName() {
40 | return Suit[+this.suit]
41 | }
42 |
43 | suitSymbol() {
44 | return ['swords', 'wands', 'cups', 'pentacles'][this.suit - 1]
45 | }
46 |
47 | numberSymbol() {
48 | return ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'P', 'N', 'Q', 'K'][this.number - 1]
49 | }
50 |
51 | majorArcanaRomanNumeral() {
52 | let n = this.number
53 |
54 | if (n == 0) {
55 | return '0'
56 | }
57 |
58 | const lookup = [
59 | { symbol: 'X', number: 10 },
60 | { symbol: 'IX', number: 9 },
61 | { symbol: 'V', number: 5 },
62 | { symbol: 'IV', number: 4 },
63 | { symbol: 'I', number: 1 },
64 | ]
65 |
66 | let roman = ''
67 | for (let pair of lookup) {
68 | while (n >= pair.number) {
69 | roman += pair.symbol
70 | n -= pair.number
71 | }
72 | }
73 |
74 | return roman
75 | }
76 |
77 | symbol() {
78 | if(this.isMajorArcana()) {
79 | return this.majorArcanaRomanNumeral()
80 | } else {
81 | return this.numberSymbol()
82 | }
83 | }
84 |
85 | static fromObject(object: any) {
86 | let card: Card = new Card()
87 | card.id = object.id
88 | card.name = object.name
89 | card.number = object.number
90 | // card.reversed = false
91 | card.meanings = {
92 | upright: object.meanings.new.upright,
93 | reversed: object.meanings.new.reversed,
94 | },
95 |
96 | card.arcana = object.arcana == 'Major Arcana' ? Arcana.Major : Arcana.Minor
97 |
98 | let suits = {
99 | Trump: Suit.Trump,
100 | Swords: Suit.Swords,
101 | Wands: Suit.Wands,
102 | Cups: Suit.Cups,
103 | Pentacles: Suit.Pentacles,
104 | }
105 |
106 | card.suit = suits[object.suit]
107 |
108 | card.searchKey = object.searchKey
109 | card.questions = object.questions
110 | card.fortunes = object.fortuneTelling
111 | card.archetype = object.archetype
112 | card.element = object.elemental
113 | card.hebrewAlphabet = object.hebrewAlphabet
114 | card.spiritual = object.spiritual
115 | card.numerology = object.numerology
116 | card.affirmation = object.affirmation
117 |
118 | return card
119 | }
120 | }
--------------------------------------------------------------------------------
/models/size.ts:
--------------------------------------------------------------------------------
1 | export enum Size {
2 | Small,
3 | Medium,
4 | Large,
5 | }
--------------------------------------------------------------------------------
/models/spread.ts:
--------------------------------------------------------------------------------
1 | import { Card } from "./card"
2 | import { Size } from "./size"
3 |
4 | export class SpreadCard {
5 | position: {
6 | x: number,
7 | y: number
8 | }
9 | rotation: number
10 | size: Size
11 | layer: number
12 | number: number
13 | name: string
14 | description: string
15 | card?: [Card, boolean]
16 |
17 | draw(deck) {
18 | let index = Math.floor(Math.random() * deck.length)
19 |
20 | let drawn = deck.splice(index, 1)[0]
21 | this.card = [drawn, Math.round(Math.random()) > 0.5]
22 | }
23 |
24 | set(card, reversed) {
25 | this.card = [card, reversed]
26 | }
27 |
28 | static fromObject(object: any) {
29 | let card = new SpreadCard()
30 |
31 | card.position = {
32 | x: object.position.x,
33 | y: object.position.y,
34 | }
35 |
36 | card.rotation = object.rotation || 0
37 |
38 | let sizes = {
39 | small: Size.Small,
40 | medium: Size.Medium,
41 | large: Size.Large
42 | }
43 |
44 | card.size = object.size ? sizes[object.size] : Size.Medium
45 |
46 | card.layer = object.layer || 0
47 | card.number = object.number || 1
48 | card.name = object.name
49 | card.description = object.description || ''
50 | card.card = undefined
51 | return card
52 | }
53 | }
54 |
55 | export class Spread {
56 | id: string
57 | cards: SpreadCard[]
58 | name: string
59 | group: string
60 | description: string
61 |
62 | constructor(id, name?, description?, group?) {
63 | this.id = id
64 | this.name = name || ''
65 | this.group = group || ''
66 | this.description = description || ''
67 | this.cards = []
68 | }
69 |
70 | addCard(card: SpreadCard) {
71 | this.cards.push(card)
72 | }
73 |
74 | reset() {
75 | for(let card of this.cards) {
76 | card.card = undefined
77 | }
78 | }
79 |
80 | draw(deck) {
81 | // just in case, we don't want to modify the base deck
82 | let deckCopy = deck.slice()
83 |
84 | for(let card of this.cards) {
85 | card.draw(deckCopy)
86 | }
87 | }
88 |
89 | static fromObject(object: any) {
90 | let spread = new Spread(object.id)
91 |
92 | spread.cards = []
93 | for(let card of object.cards) {
94 | spread.cards.push(SpreadCard.fromObject(card))
95 | }
96 |
97 | spread.name = object.name
98 | spread.description = object.description
99 | spread.group = object.group
100 |
101 | return spread
102 | }
103 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "fuse.js": "^6.4.0",
4 | "vue": "^2.6.11",
5 | "vue-hot-reload-api": "^2.3.4",
6 | "vue-router": "^3.3.4",
7 | "vuex": "^3.5.1"
8 | },
9 | "devDependencies": {
10 | "@parcel/transformer-vue": "^2.0.0-beta.2",
11 | "@vue/component-compiler-utils": "^3.1.2",
12 | "cssnano": "^4.1.10",
13 | "parcel": "^1.12.4",
14 | "parcel-plugin-nuke-dist": "^1.0.1",
15 | "sass": "^1.26.10",
16 | "typescript": "^3.9.7",
17 | "vue-template-compiler": "^2.6.11"
18 | },
19 | "browserslist": [
20 | "last 2 Chrome versions"
21 | ],
22 | "name": "tarot",
23 | "version": "0.5.1",
24 | "main": "index.html",
25 | "scripts": {
26 | "start": "npx parcel start index.html",
27 | "build": "npx parcel build index.html --public-url=./"
28 | },
29 | "repository": {
30 | "type": "git",
31 | "url": "git+https://github.com/cesque/tarot.git"
32 | },
33 | "author": "",
34 | "license": "ISC",
35 | "bugs": {
36 | "url": "https://github.com/cesque/tarot/issues"
37 | },
38 | "homepage": "https://github.com/cesque/tarot#readme",
39 | "description": ""
40 | }
41 |
--------------------------------------------------------------------------------
/pages/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
What?
5 |
6 |
7 | hierophant.app is a tarot card meaning reference site, with
8 | a clean, minimalist interface. You can also use the site to read
9 | full tarot spreads (under construction!) .
10 | There are also customisable styling options, with site color and
11 | fonts being editable in the settings menu.
12 |
13 |
14 |
15 | If you have any ideas for what could make this site better,
16 | please send me a message on
17 | twitter , or
18 | email me !
19 |
20 |
21 |
Why?
22 |
23 |
24 | I realised that I wanted a deck-agnostic tarot site where I
25 | could look up meanings very quickly. With so many different
26 | and wildly varying decks available, I wanted to not force one
27 | specific type of artwork, and instead let the user spend more
28 | time looking at their own deck!
29 |
30 |
31 |
32 | I also love personalisation, and with such a simple color palette
33 | it seemed obvious to try to include some customisation of the
34 | site's colors so that users can tweak it to match their own
35 | preference.
36 |
37 |
38 |
39 | Personally, I use this site every day when I do my single card
40 | reading for the day. It helps me quickly jot down the rough
41 | meaning behind a card, and can serve as a jumping off point for
42 | me to reference other resources for more information in greater
43 | detail.
44 |
45 |
46 |
47 | If you find the site useful, I'd love to hear about your experience
48 | with it! You can contact me on twitter or by email, as noted above.
49 | Also, if you feel like it, sending a tip my way on
50 | ko-fi would be greatly
51 | appreciated!
52 |
53 |
54 |
Who?
55 |
56 |
57 | I'm cesque , a front-end web
58 | developer from Birmingham, UK. I'm interested in creating beautiful
59 | things, acquiring niche knowledge, solving Rubik's cubes and
60 | amassing as much cute stationery as I can.
61 |
62 |
63 | You can follow me on twitter ,
64 | or listen to my music on Spotify .
65 |
66 |
67 |
68 |
69 |
70 | The tarot card data used on this site is modified from tarot-json by equokka , under the MIT License .
71 |
72 |
73 |
74 | Settings icon by i cons from the Noun Project.
75 |
76 |
77 |
78 | Help icon by Shiva from the Noun Project
79 |
80 |
81 | Cards by Dmitriy Ivanov from the Noun Project
82 |
83 |
84 |
85 |
86 |
87 | Site version: {{ siteVersion }}
88 |
89 |
90 |
91 |
92 |
93 |
110 |
111 |
--------------------------------------------------------------------------------
/pages/Input.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
44 |
45 |
--------------------------------------------------------------------------------
/pages/Meanings.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
16 |
click card to reverse
17 |
18 |
19 |
20 |
start by typing the name of your card in the search bar above.
21 |
22 |
23 |
24 |
25 | {{ card.name }} (reversed)
26 |
27 |
{{ meaning }}
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
44 |
48 |
52 |
56 |
62 |
63 |
71 |
72 |
73 |
74 |
75 |
212 |
213 |
--------------------------------------------------------------------------------
/pages/Settings.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
17 |
21 |
22 |
23 |
Background
24 |
25 |
26 |
27 |
28 |
29 |
Midtone
30 |
31 |
32 |
33 |
34 |
35 |
Foreground
36 |
37 |
38 |
39 |
40 |
41 |
62 |
63 |
64 |
75 |
76 |
77 |
80 |
81 |
82 | Save Settings
83 |
84 |
85 |
Settings saved successfully!
86 |
Error saving settings!
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
203 |
204 |
--------------------------------------------------------------------------------
/pages/Spread.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
15 |
16 |
17 |
{{ $store.getters.romanNumeral(card.number) }}
18 |
{{ card.name }}
19 |
20 |
21 |
22 |
23 |
24 |
25 | Draw Card{{ spread.cards.length > 1 ? 's' : '' }}
26 |
27 |
28 |
29 |
{{ spread.description }}
30 |
31 |
32 |
33 |
53 |
54 |
55 |
56 | {{ card.description }}
57 |
58 |
59 |
60 |
61 |
62 | {{ meaning }}
63 |
64 |
65 |
More information
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
301 |
302 |
--------------------------------------------------------------------------------
/pages/Spreads.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Spreads
5 |
6 |
9 |
10 |
19 |
20 |
21 |
22 |
23 |
64 |
65 |
--------------------------------------------------------------------------------
/pentacles.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/script.ts:
--------------------------------------------------------------------------------
1 | import packageJSON from "./package.json"
2 |
3 | import Vue from 'vue'
4 | import Vuex from 'vuex'
5 | import VueRouter from 'vue-router'
6 |
7 | import Tarot from './tarot'
8 | import DefaultSpreads from './defaultSpreads'
9 | import ColorThemes from './colorThemes'
10 |
11 | import App from './App.vue'
12 | import Meanings from './pages/Meanings.vue'
13 | import About from './pages/About.vue'
14 | import Input from './pages/Input.vue'
15 | import Spreads from './pages/Spreads.vue'
16 | import Spread from './pages/Spread.vue'
17 | import Settings from './pages/Settings.vue'
18 |
19 | import { Card } from './models/card'
20 |
21 | Vue.use(VueRouter)
22 | Vue.use(Vuex)
23 |
24 | let cards: Card[] = Tarot.cards.map(card => Card.fromObject(card))
25 |
26 | function makePageTitle(name) {
27 | let siteName = 'hierophant.app'
28 | if (!name) {
29 | return siteName
30 | }
31 |
32 | return siteName + ' | ' + name
33 | }
34 |
35 | let defaults = {
36 | useColoredFavicon: false,
37 | fonts: {
38 | mono: "'Overpass Mono', monospace"
39 | },
40 | colors: {
41 | bg: '#ffffff',
42 | mid: '#ff0033',
43 | fg: '#000000',
44 | },
45 | }
46 |
47 | let loadedConfig = JSON.parse(localStorage.getItem('config'))
48 |
49 | // let config = {
50 | // useColoredFavicon: loadedConfig?.useColoredFavicon,
51 | // fonts: {
52 | // mono: loadedConfig?.fonts?.mono ?? defaults.fonts.mono
53 | // },
54 | // colors: {
55 | // bg: loadedConfig?.colors?.bg ?? defaults.colors.bg,
56 | // mid: loadedConfig?.colors?.mid ?? defaults.colors.mid,
57 | // fg: loadedConfig?.colors?.fg ?? defaults.colors.fg,
58 | // },
59 | // }
60 |
61 | // this line is a way better version of the above
62 | let config = { ...defaults, ...loadedConfig }
63 |
64 | document.addEventListener('DOMContentLoaded', () => {
65 | const store = new Vuex.Store({
66 | state: {
67 | cards: cards,
68 | spreads: DefaultSpreads,
69 | siteVersion: packageJSON.version,
70 | colorThemes: ColorThemes,
71 | config: {
72 | useColoredFavicon: config.useColoredFavicon,
73 | fonts: {
74 | mono: config.fonts.mono
75 | },
76 | colors: {
77 | bg: config.colors.bg,
78 | mid: config.colors.mid,
79 | fg: config.colors.fg,
80 | },
81 | },
82 | defaults: {
83 | useColoredFavicon: config.useColoredFavicon,
84 | fonts: {
85 | mono: config.fonts.mono
86 | },
87 | colors: {
88 | bg: config.colors.bg,
89 | mid: config.colors.mid,
90 | fg: config.colors.fg,
91 | },
92 | },
93 | temporaryConfig: null
94 | },
95 | mutations: {
96 | saveConfig: (state, config) => {
97 | console.log(config)
98 | state.config.useColoredFavicon = config.useColoredFavicon
99 |
100 | for(let key in config.colors) {
101 | state.config.colors[key] = config.colors[key]
102 | }
103 |
104 | if(config.fonts.mono) {
105 | state.config.fonts.mono = config.fonts.mono
106 | }
107 | },
108 | setTemporaryConfig: (state, config) => {
109 | state.temporaryConfig = config
110 | },
111 | clearTemporaryConfig: state => {
112 | state.temporaryConfig = null
113 | }
114 | },
115 | getters: {
116 | test: state => param => {
117 | return param
118 | },
119 | romanNumeral: state => n => {
120 | if (n == 0) {
121 | return '0'
122 | }
123 |
124 | const lookup = [
125 | { symbol: 'X', number: 10 },
126 | { symbol: 'IX', number: 9 },
127 | { symbol: 'V', number: 5 },
128 | { symbol: 'IV', number: 4 },
129 | { symbol: 'I', number: 1 },
130 | ]
131 |
132 | let roman = ''
133 | for (let pair of lookup) {
134 | while (n >= pair.number) {
135 | roman += pair.symbol
136 | n -= pair.number
137 | }
138 | }
139 | return roman
140 | },
141 | pageTitle: state => makePageTitle,
142 | },
143 | actions: {
144 | saveConfig (context, config) {
145 | context.commit('saveConfig', config)
146 | try {
147 | localStorage.setItem('config', JSON.stringify(context.state.config))
148 | return true
149 | } catch(e) {
150 | console.error('failed to save config to localstorage!')
151 | console.error(e)
152 | return false
153 | }
154 | }
155 | }
156 | })
157 |
158 | let router = new VueRouter({
159 | // mode: 'history',
160 | routes: [
161 | {
162 | path: '/',
163 | component: Meanings,
164 | meta: {
165 | title: makePageTitle('home')
166 | }
167 | },
168 | {
169 | path: '/meanings/',
170 | component: Meanings,
171 | meta: {
172 | title: makePageTitle('card meanings')
173 | }
174 | },
175 | {
176 | path: '/meanings/:id',
177 | component: Meanings,
178 | meta: {
179 | title: makePageTitle('card meanings')
180 | }
181 | },
182 | {
183 | path: '/spreads',
184 | component: Spreads,
185 | meta: {
186 | title: makePageTitle('spreads')
187 | }
188 | },
189 | {
190 | path: '/spread/:id',
191 | component: Spread,
192 | meta: {
193 | title: makePageTitle('spread')
194 | }
195 | },
196 | {
197 | path: '/spread/:id/*',
198 | component: Spread,
199 | meta: {
200 | title: makePageTitle('spread')
201 | }
202 | },
203 | {
204 | path: '/about',
205 | component: About,
206 | meta: {
207 | title: makePageTitle('about')
208 | }
209 | },
210 | {
211 | path: '/settings',
212 | component: Settings,
213 | meta: {
214 | title: makePageTitle('settings')
215 | }
216 | },
217 | {
218 | path: '/input',
219 | component: Input,
220 | }
221 | ]
222 | })
223 |
224 | router.beforeEach((to, from, next) => {
225 | document.title = to.meta.title
226 |
227 | next()
228 | })
229 |
230 | new Vue({
231 | el: '#app',
232 | store,
233 | router,
234 | render: h => h(App)
235 | })
236 | })
--------------------------------------------------------------------------------
/suits cropped.afdesign:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/suits cropped.afdesign
--------------------------------------------------------------------------------
/suits.afdesign:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/suits.afdesign
--------------------------------------------------------------------------------
/sword.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/variables.scss:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Overpass+Mono:wght@300;400;600;700&display=swap');
2 |
3 | $font-mono: var(--font-mono);
4 | $breakpoint-sm: 500px;
5 | $breakpoint-lg: 900px;
6 | $breakpoint-xl: 1200px;
7 |
8 | * {
9 | box-sizing: border-box;
10 | }
11 |
12 | body {
13 | margin: 0;
14 | padding: 0;
15 | font-family: $font-mono;
16 | }
17 |
18 | .content {
19 | padding: 50px;
20 | max-width: 800px;
21 | width: 100%;
22 | margin: 0 auto;
23 | }
24 |
--------------------------------------------------------------------------------
/vue-shim.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import Vue from 'vue'
3 | export default Vue
4 | }
--------------------------------------------------------------------------------
/wand.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------