diff --git a/app/components/card-wrapper.vue b/app/components/card-wrapper.vue
new file mode 100644
index 0000000..a373eb5
--- /dev/null
+++ b/app/components/card-wrapper.vue
@@ -0,0 +1,121 @@
+
+div
+ .card-page(ref='self' :class='wrapperClasses')
+ slot
+ .backdrop(@click.stop='open = false')
+
+
+
+
+
\ No newline at end of file
diff --git a/app/components/pass-card.vue b/app/components/pass-card.vue
index f5c2160..622c0a5 100644
--- a/app/components/pass-card.vue
+++ b/app/components/pass-card.vue
@@ -1,30 +1,35 @@
-v-card.pa-6.pass-card(
- :width='cardSize * 30 - 4 + 48'
- v-bind='$attrs'
-)
- .card-characters
- v-chip(
- v-for='(ch, i) in characters'
- :key='i'
- :variant='cellVariants[isHighlighted(i) ? 1 : 0]'
- :color='ch.color'
- :ripple='!preview'
- @click='highlightRow(i)'
- @dblclick='highlightColumn(i)'
- ) {{ preview ? '·' : ch.value }}
- // ◉ | ▣ | ⬢
- .card-number {{ footer }}
+card-wrapper(v-model:open='isOpen' :zoom-level='zoomLevel')
+ v-card.pa-6.pass-card(
+ :border='isOpen'
+ :ripple='false'
+ v-bind='!isOpen ? { onClick: toggleOpen } : {}'
+ )
+ .card-characters
+ v-chip(
+ v-for='(ch, i) in characters'
+ :key='i'
+ :variant='cellVariants[isHighlighted(i) ? 1 : 0]'
+ :color='ch.color'
+ :ripple='isOpen'
+ v-bind='isOpen ? { onClick: () => highlightRow(i), onDblclick: () => highlightColumn(i) } : {}'
+ ) {{ !isOpen ? '·' : ch.value }}
+ // ◉ | ▣ | ⬢
+ .card-number {{ footer }}
diff --git a/app/pages/index.vue b/app/pages/index.vue
index b6a9f78..813e2cb 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -1,5 +1,5 @@
-v-main
+v-main(scrollable)
.d-flex.align-center.justify-center.pt-6
.d-flex.align-center.position-relative
v-card.py-1.px-2.settings-card(variant='outlined' :class='{ "settings-card--visible": showSettings }')
@@ -36,34 +36,18 @@ v-main
v-else-if='cards.length'
:class='fontClass'
)
- pass-card(
- v-for='card in cards'
- :key='card.index'
- :characters='card.characters'
- :chip-variant='chipVariant'
- :footer='`${card.index + 1} / ${cards.length}`'
- preview
- @click='selectedCard = card; showCard = true'
- ref='cardPreviews'
+ .v-card-outter(
+ v-for='card in cards' :key='card.index'
+ :style='{ width: `${cardSize * 30 - 4 + 48}px` }'
)
-
- v-dialog(
- v-if='selectedCard'
- :model-value='selectedCardVisible'
- @update:model-value='showCard = false'
- :target='cardPreviews[selectedCard.index]'
- :min-width='cardSize * 30 - 4 + 48'
- :width='zoomLevel * (cardSize * 30 - 4 + 48)'
- :content-class='fontClass'
- scrim='#000'
- )
- pass-card(
- :characters='selectedCard.characters'
- :chip-variant='chipVariant'
- :style='{ zoom: zoomLevel }'
- :footer='`${selectedCard.index + 1} / ${cards.length}`'
- border
- )
+ pass-card(
+ :zoom-level='zoomLevel'
+ :characters='card.characters'
+ :chip-variant='chipVariant'
+ :footer='`${card.index + 1} / ${cards.length}`'
+ :ripple='false'
+ ref='cardsRef'
+ )
@@ -186,7 +166,6 @@ onMounted(async () => {
gap: 12px
padding: 12px
- max-width: 100vw
overflow-x: auto
.settings-card
diff --git a/bun.lockb b/bun.lockb
index a20bdeb..9026c3c 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 7cb7d69..ade01d1 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,7 @@
"name": "pass-cards",
"private": true,
"type": "module",
+ "version": "1.0.0",
"scripts": {
"build": "nuxt generate",
"dev": "nuxt dev --port 4000",
@@ -12,6 +13,7 @@
"@pinia/nuxt": "0.7.0",
"@vite-pwa/nuxt": "0.10.6",
"@vueuse/core": "11.2.0",
+ "@vueuse/motion": "^2.2.6",
"@vueuse/nuxt": "11.2.0",
"@vueuse/router": "^12.0.0",
"nuxt": "^3.14.1592",