(() => {
diff --git a/composables/useShoppingCartIcon.ts b/composables/useShoppingCartIcon.ts
index d35bedac74..7f6fc14115 100644
--- a/composables/useShoppingCartIcon.ts
+++ b/composables/useShoppingCartIcon.ts
@@ -1,16 +1,16 @@
-import shoppingCarteDark from '@/assets/shopping-cart-outline-sharp_dark.svg'
-import shoppingCart from '@/assets/shopping-cart-outline-sharp.svg'
-import strikedOutShoppingCart from '@/assets/striked-out-cart-shopping.svg'
-import strikedOutShoppingCartDark from '@/assets/striked-out-cart-shopping_dark.svg'
import { useShoppingCartStore } from '@/stores/shoppingCart'
export const useShoppingCartIcon = (nftId?: string) => {
const { isDarkMode } = useTheme()
const shoppingCartIcon = computed(() =>
- isDarkMode.value ? shoppingCarteDark : shoppingCart
+ isDarkMode.value
+ ? '/shopping-cart-outline-sharp_dark.svg'
+ : '/shopping-cart-outline-sharp.svg'
)
const strikedOutShoppingCartIcon = computed(() =>
- isDarkMode.value ? strikedOutShoppingCartDark : strikedOutShoppingCart
+ isDarkMode.value
+ ? '/striked-out-cart-shopping_dark.svg'
+ : '/striked-out-cart-shopping.svg'
)
const cartIcon = computed(() => {
diff --git a/composables/useUnlockableIcon.ts b/composables/useUnlockableIcon.ts
index 999bf88d74..1ff6fc47f9 100644
--- a/composables/useUnlockableIcon.ts
+++ b/composables/useUnlockableIcon.ts
@@ -1,10 +1,7 @@
-import unloackableDark from '@/assets/unlockable-dark.svg'
-import unloackable from '@/assets/unlockable.svg'
-
export const useUnlockableIcon = () => {
const { isDarkMode } = useTheme()
const unlockableIcon = computed(() =>
- isDarkMode.value ? unloackableDark : unloackable
+ isDarkMode.value ? '/unlockable-dark.svg' : '/unlockable.svg'
)
return { unlockableIcon }
diff --git a/content/blog/first-time.md b/content/blog/first-time.md
index cd159ee53a..e555b293a8 100644
--- a/content/blog/first-time.md
+++ b/content/blog/first-time.md
@@ -15,7 +15,7 @@ We are using a `pnpm` workspace, as installing things via npm **will result in b
## Prerequisites 🎒
```MD
-node >=18
+node >= 18.17
pnpm
```
@@ -54,6 +54,10 @@ docker-compose up --build
docker ps
```
+- Getting couldn't find .env file error?
+
+In some cases, you may get an error similar to `ERROR: Couldn't find env file: /full/path/nft-gallery/.env`; This is because docker may be looking for a `.env` file when there is none. To fix this issue, create an empty `.env` file then build the docker image again.
+
### From next time
- Run:
diff --git a/content/blog/kodadot's-drop-page-explained.md b/content/blog/kodadot's-drop-page-explained.md
index b263b3cc39..020f5bd0ea 100644
--- a/content/blog/kodadot's-drop-page-explained.md
+++ b/content/blog/kodadot's-drop-page-explained.md
@@ -28,9 +28,9 @@ _Kudos to [Vikival](https://twitter.com/vikiival), who spent hours programming,
But that was just the beginning. Many events and versions passed till we got to our current Drop Page. Created by who else - [Vikival](https://twitter.com/vikiival) and with the help of our excellent designer [Exez](https://twitter.com/OndraPulc), we managed to get to the point we were satisfied. But Im sure we are not done yet.
-## So, what is the KodaDot Drop Page?
+## So, what is the KodaDot Drop Page?
-When you go to https://kodadot.xyz/ and in the right-up corner select [Drops](https://kodadot.xyz/stmn/drops), you will see drops that are happening at the moment. They are time-limited collections that are created for a specific audience. The goal of these is to create a unique experience for people visiting our platform. Artists, creators, and collectors can use and, in some cases, obtain free NFTs, with extra surprises coming with each one.
+When you go to https://kodadot.xyz/ and in the right-up corner select [Drops](https://kodadot.xyz/ahk/drops), you will see drops that are happening at the moment. They are time-limited collections that are created for a specific audience. The goal of these is to create a unique experience for people visiting our platform. Artists, creators, and collectors can use and, in some cases, obtain free NFTs, with extra surprises coming with each one.
@@ -46,7 +46,7 @@ And there's more! We've added unlockables so you can enjoy the thrill of discove
-On the [Upcoming](https://kodadot.xyz/stmn/drops) page, you can view scheduled releases and discover drop pages for those interested in obtaining them. Additionally, your page may be featured on this page.
+On the [Upcoming](https://kodadot.xyz/ahk/drops) page, you can view scheduled releases and discover drop pages for those interested in obtaining them. Additionally, your page may be featured on this page.
@@ -57,7 +57,7 @@ We already mentioned some of the features we implemented in this article. All of
1. Dedicated times for minting
Select what day your minting starts, what hours will be available, and how long. We can adjust this to your needs. Minting one hour every day for one week? No problem. We can also include an attractive countdown so your audience can better understand upcoming events.
2. Limits
- The basic limit is selecting how many NFTs in total can be minted. This varies on your collection size, but in some cases (AI minting, generative art), this number can be adjusted regarding your preferences.
+ The basic limit is selecting how many NFTs in total can be minted. This varies on your collection size, but in some cases (AI minting, generative art), this number can be adjusted regarding your preferences.
You can also limit mints by the number of NFTs that can be minted at various times. Choose how many can be minted max during different phases. And, of course, we can show the availability of your NFTs so people know how much of them are left.
3. AI tools
We had anime waifus in our previous campaigns created by a highly trained AI model. Im sure we can also use it in your case. You just need to tell us [your idea](https://form.kodadot.xyz/drop-page-interest).
diff --git a/content/blog/why-are-nfts-valuable-investment.md b/content/blog/why-are-nfts-valuable-investment.md
new file mode 100644
index 0000000000..d5d9709276
--- /dev/null
+++ b/content/blog/why-are-nfts-valuable-investment.md
@@ -0,0 +1,53 @@
+---
+date: 2023-08-03
+tags: NFTs
+image: '/blog/why-are-nfts-valuable-investment-1.webp'
+title: 'Why are NFTs valuable investment?'
+subtitle: Learn about the elements that influence NFT value. From historical significance and rarity to cultural relevance and ownership, understand what makes an NFT valuable in the dynamic digital realm.
+---
+
+## Understanding the Value Drivers of NFTs
+
+In the ever-evolving world of Non-Fungible Tokens (NFTs), understanding what influences their value is crucial for both creators and collectors. Here's a breakdown of some primary elements that drive the value of NFTs.
+
+### Commemorative
+NFTs often commemorate a particular event, person, or moment in time. This intrinsic value can significantly influence its worth.
+
+### Virtue Signalling
+NFTs can be used as a means of expressing support or alignment with a cause or group, adding to their value based on the benefactor's reputability or significance.
+
+### Historical Appreciation
+
+The value of an NFT may increase over time depending on the historical significance of its content.
+
+### Speculation Premium
+
+The speculative nature of NFTs can play a considerable role in their value. Potential future value can drive up the current price.
+
+### Collectibles
+
+Some NFTs become valuable because they are part of a collection. The importance of that collection or the rarity of the NFT within it can drive up its value.
+
+### Rarity
+
+Often, the rarer an NFT is, the more valuable it is. Rarity can come from the unique properties of the NFT, or the limited number issued.
+
+### Ownership
+
+If an NFT was previously owned by a famous individual or influential person, its value might increase due to this association.
+
+### Subcultures
+
+NFTs related to specific subcultures or niches often gain value based on their significance within those groups.
+
+### Art from X
+
+The value of an NFT can significantly increase if it is found out later that it was created by a famous or culturally significant artist.
+
+### Intrinsic vs. Extrinsic Value Drivers
+
+The value of an NFT can also be driven by intrinsic factors like the complexity of its creation process or the popularity of its creator. Extrinsic factors that affect an NFT's value might include trends in the NFT market, laws, and regulations.
+
+## Conclusion
+
+Understanding these value drivers can help creators and collectors make more informed decisions when minting or purchasing NFTs.
\ No newline at end of file
diff --git a/layouts/error.vue b/layouts/error.vue
index 8fce0b4fb1..0d2e8bebc9 100644
--- a/layouts/error.vue
+++ b/layouts/error.vue
@@ -8,9 +8,10 @@
alt="Internal error cat"
class="mb-5" />
- If you think this should't happen, report it to us by
+ If you think this shouldn't happen, report it to us by
creating a bug issue with steps and screenshot to reproduce. = {
),
movr: toChainProperty(1285, 18, 'MOVR', 'https://moonriver.subscan.io/'),
glmr: toChainProperty(1284, 18, 'GLMR', 'https://moonbeam.subscan.io/'),
- stmn: toChainProperty(2, 12, 'KSM', 'https://statemine.subscan.io/'),
+ ahk: toChainProperty(2, 12, 'KSM', 'https://statemine.subscan.io/'),
dot: toChainProperty(0, 10, 'DOT', 'https://polkadot.subscan.io/'),
- stt: toChainProperty(0, 10, 'DOT', 'https://statemint.subscan.io/'),
+ ahp: toChainProperty(0, 10, 'DOT', 'https://statemint.subscan.io/'),
}
export const DEFAULT_PREFIX: Prefix = 'ksm'
@@ -48,9 +48,9 @@ export const chainPrefixes: Prefix[] = [
'movr',
'glmr',
'ksm',
- 'stmn',
+ 'ahk',
'dot',
- 'stt',
+ 'ahp',
]
export const chainPrefixesMap = chainPrefixes.reduce(
(acc: Partial>, prefix: Prefix) => ({
@@ -67,9 +67,9 @@ export const chainInfo: Record = {
movr: 'moonriver',
glmr: 'moonbeam',
ksm: 'rmrk',
- stmn: 'statemine',
+ ahk: 'statemine',
dot: 'polkadot',
- stt: 'statemint',
+ ahp: 'statemint',
}
export const chainNames: Record = {
@@ -79,9 +79,9 @@ export const chainNames: Record = {
movr: 'Moonriver',
glmr: 'Moonbeam',
ksm: 'Kusama',
- stmn: 'Statemine',
+ ahk: 'Kusama AssetHub',
dot: 'Polkadot',
- stt: 'Statemint',
+ ahp: 'Polkadot AssetHub',
}
export const chainList = (): Option[] => {
diff --git a/libs/static/src/endpoints.ts b/libs/static/src/endpoints.ts
index 002fa29ce1..35e29dc849 100644
--- a/libs/static/src/endpoints.ts
+++ b/libs/static/src/endpoints.ts
@@ -30,7 +30,7 @@ export const ALTERNATIVE_ENDPOINT_MAP: Config = {
movr: ['wss://wss.api.moonriver.moonbeam.network'],
ksm: KUSAMA_ENDPOINTS,
snek: ['wss://basilisk-rococo-rpc.play.hydration.cloud'],
- stmn: [
+ ahk: [
'wss://kusama-asset-hub-rpc.polkadot.io',
'wss://statemine-rpc.dwellir.com',
'wss://sys.ibp.network/statemine',
@@ -40,7 +40,7 @@ export const ALTERNATIVE_ENDPOINT_MAP: Config = {
'wss://statemine.public.curie.radiumblock.co/ws',
],
dot: POLKADOT_ENDPOINTS,
- stt: [
+ ahp: [
'wss://polkadot-asset-hub-rpc.polkadot.io',
'wss://statemint-rpc.dwellir.com',
'wss://statemint-rpc-tn.dwellir.com',
@@ -57,7 +57,7 @@ export const ENDPOINT_MAP: Config = {
movr: 'wss://wss.api.moonriver.moonbeam.network',
ksm: KUSAMA_ENDPOINTS[0],
snek: 'wss://basilisk-rococo-rpc.play.hydration.cloud',
- stmn: 'wss://kusama-asset-hub-rpc.polkadot.io',
+ ahk: 'wss://kusama-asset-hub-rpc.polkadot.io',
dot: POLKADOT_ENDPOINTS[0],
- stt: 'wss://polkadot-asset-hub-rpc.polkadot.io',
+ ahp: 'wss://polkadot-asset-hub-rpc.polkadot.io',
}
diff --git a/libs/static/src/indexers.ts b/libs/static/src/indexers.ts
index 966d96f0c9..0ea229579f 100644
--- a/libs/static/src/indexers.ts
+++ b/libs/static/src/indexers.ts
@@ -10,10 +10,10 @@ export const INDEXERS: Config = {
rmrk: 'https://squid.subsquid.io/rubick/graphql',
movr: 'https://squid.subsquid.io/antick/v/001-rc0/graphql',
ksm: 'https://squid.subsquid.io/marck/v/v2/graphql',
- snek: 'https://squid.subsquid.io/snekk/v/004/graphql',
- stmn: 'https://squid.subsquid.io/stick/graphql',
+ snek: 'https://squid.subsquid.io/sneck/graphql',
+ ahk: 'https://squid.subsquid.io/stick/graphql',
dot: 'https://squid.subsquid.io/rubick/graphql', // TODO: change to dot indexer when available
- stt: 'https://squid.subsquid.io/speck/graphql',
+ ahp: 'https://squid.subsquid.io/speck/graphql',
}
export const toApolloEndpoint = (httpEndpoint: string): ApolloEndpoint => ({
diff --git a/libs/static/src/names.ts b/libs/static/src/names.ts
index 6710f8b8d8..5e891ca7c8 100644
--- a/libs/static/src/names.ts
+++ b/libs/static/src/names.ts
@@ -7,7 +7,7 @@ export const NAMES: Record = {
ksm: 'RMRK2',
movr: 'Moonriver [Beta]',
snek: 'Snek [Rococo]',
- stmn: 'Statemine [Beta]',
+ ahk: 'KusamaHub [Beta]',
dot: 'Polkadot',
- stt: 'Statemint [Beta]',
+ ahp: 'PolkadotHub [Beta]',
}
diff --git a/libs/static/src/services.ts b/libs/static/src/services.ts
index de9a96e2a1..4073db5977 100644
--- a/libs/static/src/services.ts
+++ b/libs/static/src/services.ts
@@ -16,9 +16,9 @@ export const EXPLORERS: Record = {
snek: 'https://calamar.play.hydration.cloud/rococo%20basilisk/search?query=',
movr: 'https://moonriver.subscan.io/account/',
glmr: 'https://moonbeam.subscan.io/account/',
- stmn: 'https://assethub-kusama.subscan.io/account/',
+ ahk: 'https://assethub-kusama.subscan.io/account/',
dot: 'https://polkadot.subscan.io/account/',
- stt: 'https://assethub-polkadot.subscan.io/account/',
+ ahp: 'https://assethub-polkadot.subscan.io/account/',
}
export const hasExplorer = (prefix: Prefix): boolean => {
diff --git a/libs/static/src/types.ts b/libs/static/src/types.ts
index ea608451f9..32bc7598af 100644
--- a/libs/static/src/types.ts
+++ b/libs/static/src/types.ts
@@ -5,9 +5,9 @@ export type Prefix =
| 'movr'
| 'ksm'
| 'snek'
- | 'stmn'
+ | 'ahk'
| 'dot'
- | 'stt'
+ | 'ahp'
// | 'wst'
export type Squid =
diff --git a/libs/ui/package.json b/libs/ui/package.json
index 39606284a4..5f329487dc 100644
--- a/libs/ui/package.json
+++ b/libs/ui/package.json
@@ -10,12 +10,12 @@
"story:preview": "histoire preview"
},
"devDependencies": {
- "@histoire/plugin-vue2": "^0.16.1",
+ "@histoire/plugin-vue2": "^0.16.4",
"@vitejs/plugin-vue2": "^2.2.0",
"@oruga-ui/oruga": "^0.6.0",
- "eslint": "^8.45.0",
+ "eslint": "^8.47.0",
"eslint-plugin-vue": "^8.7.1",
- "histoire": "^0.16.2",
+ "histoire": "^0.16.4",
"vite": "^3.2.7",
"vue": "2.7.14"
},
diff --git a/libs/ui/src/components/CardArticle/CardArticle.story.vue b/libs/ui/src/components/CardArticle/CardArticle.story.vue
index 2206a29cb4..d4d08fad65 100644
--- a/libs/ui/src/components/CardArticle/CardArticle.story.vue
+++ b/libs/ui/src/components/CardArticle/CardArticle.story.vue
@@ -1,8 +1,8 @@
diff --git a/libs/ui/src/components/CardArticle/CardArticle.vue b/libs/ui/src/components/CardArticle/CardArticle.vue
index 8660bf24c4..0ec107d14c 100644
--- a/libs/ui/src/components/CardArticle/CardArticle.vue
+++ b/libs/ui/src/components/CardArticle/CardArticle.vue
@@ -1,7 +1,7 @@
diff --git a/libs/ui/src/components/NeoButton/NeoButton.scss b/libs/ui/src/components/NeoButton/NeoButton.scss
index 36c62c48ef..67697c9947 100644
--- a/libs/ui/src/components/NeoButton/NeoButton.scss
+++ b/libs/ui/src/components/NeoButton/NeoButton.scss
@@ -188,6 +188,28 @@
}
}
}
+
+ &.loading-with-label.o-btn--loading {
+ @include ktheme() {
+ color: theme('k-grey') !important;
+
+ :deep .o-btn__label {
+ margin: 0 3px !important;
+ }
+
+ &::after {
+ position: relative !important;
+ left: 0px !important ;
+ border: 2px solid theme('k-grey') !important;
+ border-radius: 9999px !important;
+ border-right-color: transparent !important;
+ border-top-color: transparent !important;
+ margin: 0 3px;
+ height: 1em !important;
+ width: 1em !important;
+ }
+ }
+ }
}
.is-fixed-width {
diff --git a/libs/ui/src/components/NeoButton/NeoButton.vue b/libs/ui/src/components/NeoButton/NeoButton.vue
index 2d1f0ab7b6..28e81fdbc5 100644
--- a/libs/ui/src/components/NeoButton/NeoButton.vue
+++ b/libs/ui/src/components/NeoButton/NeoButton.vue
@@ -4,6 +4,7 @@
active: active,
'is-fixed-width': fixedWidth,
'no-shadow': noShadow,
+ 'loading-with-label': loadingWithLabel,
}"
:size="size"
:icon-right="icon"
@@ -24,20 +25,21 @@
import { OButton } from '@oruga-ui/oruga'
import { NeoButtonVariant } from '@kodadot1/brick'
-defineProps<{
- size?: 'small' | 'medium' | 'large'
- disabled?: boolean
- expanded?: boolean
- icon?: string
- iconPack?: string
- label?: string
- active?: boolean
- fixedWidth?: boolean
- noShadow?: boolean
- variant?: NeoButtonVariant
- rounded?: boolean
- tag?: string
-}>()
+ defineProps<{
+ size?: 'small' | 'medium' | 'large'
+ disabled?: boolean
+ expanded?: boolean
+ icon?: string
+ iconPack?: string
+ label?: string
+ active?: boolean
+ fixedWidth?: boolean
+ noShadow?: boolean
+ variant?: NeoButtonVariant
+ rounded?: boolean
+ tag?: string
+ loadingWithLabel?: boolean
+ }>()
diff --git a/libs/ui/src/components/NeoModalExtend/plugin.js b/libs/ui/src/components/NeoModalExtend/plugin.js
new file mode 100644
index 0000000000..70b3b3b5ee
--- /dev/null
+++ b/libs/ui/src/components/NeoModalExtend/plugin.js
@@ -0,0 +1,58 @@
+import Vue from 'vue'
+import Modal from './NeoModalExtend.vue'
+
+import { merge } from '@oruga-ui/oruga/src/utils/helpers'
+import InstanceRegistry from '@oruga-ui/oruga/src/utils/InstanceRegistry'
+
+let instances = new InstanceRegistry()
+
+// fork https://github.com/oruga-ui/oruga/blob/4915c4dbcb1a6c2cd39bc7660d41916b330bc0cd/packages/oruga/src/components/modal/index.js#L12 implementation
+const ModalProgrammatic = {
+ open(params) {
+ let parent
+ if (typeof params === 'string') {
+ params = {
+ content: params,
+ }
+ }
+
+ const defaultParam = {
+ programmatic: { instances },
+ }
+ if (params.parent) {
+ parent = params.parent
+ delete params.parent
+ }
+ let slot
+ if (Array.isArray(params.content)) {
+ slot = params.content
+ delete params.content
+ }
+ const propsData = merge(defaultParam, params)
+
+ if (window.Promise) {
+ propsData.promise = new Promise((p1, p2) => {
+ propsData.programmatic.resolve = p1
+ propsData.programmatic.reject = p2
+ })
+ }
+
+ const ModalComponent = Vue.extend(Modal)
+ const instance = new ModalComponent({
+ parent,
+ el: document.createElement('div'),
+ propsData,
+ })
+ if (slot) {
+ instance.$slots.default = slot
+ }
+ return instance
+ },
+ closeAll() {
+ instances.walk((entry) => {
+ entry.close(...arguments)
+ })
+ },
+}
+
+export default ModalProgrammatic
diff --git a/libs/ui/src/components/NeoNftCard/NeoNftCard.scss b/libs/ui/src/components/NeoNftCard/NeoNftCard.scss
index 3ce617bcbb..c151a6f7d2 100644
--- a/libs/ui/src/components/NeoNftCard/NeoNftCard.scss
+++ b/libs/ui/src/components/NeoNftCard/NeoNftCard.scss
@@ -20,12 +20,12 @@
a:hover {
color: unset !important;
- .show-on-hover {
+ .show-on-hover, .show-always {
display: flex !important;
}
}
- .hover-action-container {
+ .action-container {
position: absolute;
bottom: 1rem;
}
diff --git a/libs/ui/src/components/NeoNftCard/NeoNftCard.vue b/libs/ui/src/components/NeoNftCard/NeoNftCard.vue
index c75fc88f89..edaf242b9e 100644
--- a/libs/ui/src/components/NeoNftCard/NeoNftCard.vue
+++ b/libs/ui/src/components/NeoNftCard/NeoNftCard.vue
@@ -19,8 +19,9 @@
:placeholder="placeholder"
:title="nft?.name" />
-
+ :class="[showActionOnHover ? 'show-on-hover' : 'show-always']"
+ class="w-full is-flex is-justify-content-center action-container">
+
{{ nft.collection.name || '--' }}
@@ -116,6 +117,7 @@ withDefaults(
unloackableIcon?: string
link?: string
bindKey?: string
+ showActionOnHover?: boolean
}>(),
{
collectionPopoverShowDelay: 500,
@@ -123,6 +125,7 @@ withDefaults(
unloackableIcon: undefined,
link: 'a',
bindKey: 'href',
+ showActionOnHover: true,
}
)
diff --git a/libs/ui/src/components/NeoTooltip/NeoTooltip.vue b/libs/ui/src/components/NeoTooltip/NeoTooltip.vue
index 899f3dab36..f1aa9dd635 100644
--- a/libs/ui/src/components/NeoTooltip/NeoTooltip.vue
+++ b/libs/ui/src/components/NeoTooltip/NeoTooltip.vue
@@ -44,7 +44,7 @@ export interface Props {
multilineWidth?: string | number
fullWidth?: boolean
stopEvents?: boolean
- autoClose?: any | boolean
+ autoClose?: string[] | boolean
contentClass?: string
}
const props = withDefaults(defineProps(), {
diff --git a/libs/ui/src/index.ts b/libs/ui/src/index.ts
index b8b4b8767d..d3d42a92f1 100644
--- a/libs/ui/src/index.ts
+++ b/libs/ui/src/index.ts
@@ -47,3 +47,6 @@ export { default as NeoUpload } from './components/NeoUpload/NeoUpload.vue'
export { default as NeoCollapse } from './components/NeoCollapse/NeoCollapse.vue'
export { default as Neo } from '@oruga-ui/oruga'
+
+export { default as NeoModalExtend } from './components/NeoModalExtend/NeoModalExtend.vue'
+export { default as NeoModalExtendProgrammatic } from './components/NeoModalExtend/plugin'
diff --git a/locales/en.json b/locales/en.json
index a7ab1e5de8..4755fa4ea4 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -98,6 +98,9 @@
"addAddress": "Add recipient",
"payMeLink": "Pay me link",
"setSameAmount": "Set one amount that will be sent to all recipients",
+ "sendTo": "Sending to",
+ "recipients": "recipients",
+ "totalAmount": "Total Amount",
"transferable": "Transferable"
},
"topCollections": {
@@ -1049,6 +1052,7 @@
"tokenStandard": "Token Standard",
"royalties": "Royalties",
"media": "Media",
+ "animatedMedia": "Animated Media",
"metadata": "Metadata"
},
"tabActivity": {
@@ -1235,6 +1239,7 @@
},
"exploreNfts": "Explore NFTs",
"gotToCart": "Go To Cart",
- "buyNow": "Buy Now"
+ "buyNow": "Buy Now",
+ "wallet": "Wallet"
}
}
diff --git a/middleware/redirects.ts b/middleware/redirects.ts
index 443d0a9c94..6b2649561c 100644
--- a/middleware/redirects.ts
+++ b/middleware/redirects.ts
@@ -2,7 +2,7 @@ export default function ({ redirect, route }): void {
const { urlPrefix } = usePrefix()
if (route.path === '/drops') {
- return redirect('/stmn/drops')
+ return redirect('/ahk/drops')
}
if (route.path.startsWith(`/${urlPrefix.value}`)) {
@@ -14,6 +14,10 @@ export default function ({ redirect, route }): void {
}
}
+ if (route.path.includes('/stmn/')) {
+ return redirect(window.location.href.replace('/stmn/', '/ahk/'))
+ }
+
if (route.path.includes('/rmrk2/')) {
return redirect(window.location.href.replace('/rmrk2/', '/ksm/'))
}
diff --git a/nuxt.config.js b/nuxt.config.js
index adac31a667..33510798d2 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -1,7 +1,6 @@
import path from 'path'
import * as fs from 'fs'
import { defineNuxtConfig } from '@nuxt/bridge'
-import SentryWebpackPlugin from '@sentry/webpack-plugin'
import Mode from 'frontmatter-markdown-loader/mode'
import { manifestIcons } from './utils/config/pwa'
@@ -164,6 +163,7 @@ export default defineNuxtConfig({
{ src: '~/plugins/icons', mode: 'client' },
{ src: '~/plugins/consola', mode: 'client' },
{ src: '~/plugins/piniaPersistedState', mode: 'client' },
+ { src: '~/plugins/oruga-modal', mode: 'client' },
'~/plugins/filters',
'~/plugins/globalVariables',
'~/plugins/pwa',
@@ -171,6 +171,7 @@ export default defineNuxtConfig({
'~/plugins/vueClipboard',
'~/plugins/vueSocialSharing',
'~/plugins/vueTippy',
+ '~/plugins/safeHref',
],
router: {
@@ -242,41 +243,13 @@ export default defineNuxtConfig({
],
'@nuxtjs/apollo',
'@nuxtjs/i18n',
- '@nuxtjs/sentry',
'@kevinmarrec/nuxt-pwa',
'@nuxtjs/color-mode',
'@vueuse/nuxt',
- ['@pinia/nuxt', { disableVuex: false }],
+ '@pinia/nuxt',
'@nuxtjs/sitemap',
],
- sentry: {
- disabled: process.env.NODE_ENV === 'development',
- lazy: true,
- dsn: 'https://6fc80708bf024dc8b43c3058f8260dd6@o4503930691256320.ingest.sentry.io/4503930702331904', // Enter your project's DSN here
- customClientIntegrations:
- process.platform !== 'win32' ? '@/plugins/sentry' : undefined,
- // Additional Module Options go here
- // https://sentry.nuxtjs.org/sentry/options
- config: {
- // Add native Sentry config here
- // https://docs.sentry.io/platforms/javascript/guides/vue/configuration/options/
- sampleRate: 0.25,
- whitelistUrls: [/kodadot\.xyz/],
- beforeSend(event) {
- if (window.navigator.userAgent.indexOf('prerender') !== -1) {
- return null
- }
-
- if (window.navigator.userAgent.indexOf('Headless') !== -1) {
- return null
- }
-
- return event
- },
- },
- },
-
pwa: {
manifest: {
name: 'KodaDot - Polkadot NFT explorer',
@@ -361,6 +334,24 @@ export default defineNuxtConfig({
},
},
+ buildModules: ['nuxt-webpack-optimisations'],
+
+ webpackOptimisations: {
+ features: {
+ esbuildLoader: process.env.NODE_ENV !== 'development',
+ },
+ // https://github.com/privatenumber/esbuild-loader#%EF%B8%8F-options
+ esbuildLoaderOptions: {
+ client: {
+ target: 'esnext',
+ legalComments: 'none',
+ },
+ modern: {
+ target: 'esnext',
+ },
+ },
+ },
+
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
babel: {
@@ -398,22 +389,8 @@ export default defineNuxtConfig({
'@google/model-viewer', // TODO check to see if it works without transpilation in future nuxt releases
],
extend(config) {
- if (
- process.env.NODE_ENV !== 'development' &&
- process.env.SENTRY_AUTH_TOKEN
- ) {
- // https://community.cloudflare.com/t/recurring-deployment-issue-on-pages-which-works-on-preview-branch-but-doesnt-on-production-branch/540278/10
- // config.devtool = 'source-map'
-
- config.plugins.push(
- new SentryWebpackPlugin({
- org: 'kodadot',
- project: 'nft-gallery',
- include: './dist',
- authToken: process.env.SENTRY_AUTH_TOKEN,
- })
- )
- }
+ // for debugging
+ // config.devtool = 'source-map'
// add frontmatter-markdown-loader
config.module.rules.push({
@@ -439,7 +416,7 @@ export default defineNuxtConfig({
include: [path.resolve(__dirname, 'node_modules')],
use: [
{ loader: require.resolve('@open-wc/webpack-import-meta-loader') },
- { loader: require.resolve('babel-loader') },
+ { loader: require.resolve('babel-loader'), query: { compact: true } },
],
})
@@ -448,7 +425,12 @@ export default defineNuxtConfig({
fs: 'empty',
}
},
- postcss: null,
+
+ postcss: {
+ postcssOptions: {
+ plugins: {},
+ },
+ },
},
// env: {
diff --git a/package.json b/package.json
index 7cfd2c8338..5d9a5b71fa 100644
--- a/package.json
+++ b/package.json
@@ -26,14 +26,12 @@
"locales:check": "node ./script/checkLocale.mjs",
"start": "nuxi preview",
"start:static": "npx --yes serve@14.2.0 -L -l 9090 -s dist",
- "generate:pnpm": "npx pnpm@latest-8 i --store=node_modules/.pnpm-store && npx pnpm@latest-8 generate",
- "generate": "node ./script/substack.mjs && cross-env NODE_OPTIONS=--openssl-legacy-provider NITRO_PRESET=netlify nuxi generate",
+ "generate:script": "node ./script/substack.mjs && cross-env NODE_OPTIONS=--openssl-legacy-provider NITRO_PRESET=netlify nuxi generate",
+ "generate": "node script/generate.mjs",
"lint": "eslint --ignore-path .gitignore --ext .js,.ts,.vue .",
"lint:quiet": "eslint --quiet --ignore-path .gitignore --ext .js,.ts,.vue .",
"lint:fix": "eslint --fix --quiet --ignore-path .gitignore --ext .js,.ts,.vue .",
"test": "vitest run --reporter verbose --allowOnly",
- "test:e2e": "cypress run -q --project tests",
- "test:e2e-gui": "cypress open --project tests",
"test:watch": "vitest --reporter verbose",
"test:coverage": "vitest run --coverage",
"prepare": "pnpm -F static build && nuxi prepare && husky install"
@@ -61,6 +59,7 @@
},
"packageManager": "pnpm@8.6.0",
"dependencies": {
+ "@braintree/sanitize-url": "^6.0.4",
"@chenfengyuan/vue-qrcode": "1",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/free-brands-svg-icons": "^6.2.1",
@@ -70,12 +69,11 @@
"@google/model-viewer": "^1.12.1",
"@kodadot1/brick": "workspace:*",
"@kodadot1/minimark": "^0.1.10",
+ "@kodadot1/minipfs": "0.4.0-rc.0",
"@kodadot1/static": "workspace:*",
"@kodadot1/sub-api": "^0.1.2",
- "@kodadot1/vuex-options": "0.1.5",
"@nuxtjs/apollo": "^4.0.1-rc.5",
"@nuxtjs/i18n": "^7.3.1",
- "@nuxtjs/sentry": "^7.3.1",
"@nuxtjs/sitemap": "thisismydesign/sitemap-module#cd4dc22293b9b67e8ebb5b3c49840e67c108e312",
"@paraspell/sdk": "^2.0.5",
"@pinia/nuxt": "^0.4.11",
@@ -88,7 +86,6 @@
"@polkadot/ui-keyring": "^3.3.1",
"@polkadot/vue-identicon": "^3.3.1",
"@ramp-network/ramp-instant-sdk": "^3.2.3",
- "@sentry/browser": "7.42.0",
"apollo-boost": "^0.4.9",
"axios": "^0.27.2",
"buefy": "^0.9.23",
@@ -99,7 +96,7 @@
"css-loader": "5.2.7",
"date-fns": "^2.30.0",
"emoji-unicode": "^2.0.1",
- "graphql": "^16.7.1",
+ "graphql": "^16.8.0",
"graphql-ws": "^5.14.0",
"highlight.js": "^11.8.0",
"keen-slider": "^6.8.6",
@@ -110,7 +107,7 @@
"nuxt-edge": "2.16.0-27720022.54e852f",
"nuxt-property-decorator": "^2.9.1",
"ohmyfetch": "^0.4.21",
- "pinia-plugin-persistedstate": "^3.1.0",
+ "pinia-plugin-persistedstate": "^3.2.0",
"setimmediate": "^1.0.5",
"slugify": "^1.6.6",
"unzipit": "^1.4.3",
@@ -126,13 +123,13 @@
"workbox-window": "^6.6.0"
},
"devDependencies": {
- "@babel/core": "^7.22.9",
+ "@babel/core": "^7.22.10",
"@babel/helper-define-map": "^7.18.6",
"@babel/helper-regex": "^7.10.5",
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
- "@babel/plugin-transform-runtime": "^7.22.9",
- "@babel/preset-env": "^7.22.9",
+ "@babel/plugin-transform-runtime": "^7.22.10",
+ "@babel/preset-env": "^7.22.10",
"@kevinmarrec/nuxt-pwa": "0.15.0",
"@nuxt/bridge": "npm:@nuxt/bridge-edge@3.0.0-27889410.9247608",
"@nuxt/test-utils": "^0.2.2",
@@ -140,7 +137,6 @@
"@nuxtjs/color-mode": "^3.3.0",
"@open-wc/webpack-import-meta-loader": "^0.4.7",
"@rollup/plugin-graphql": "^1.1.0",
- "@sentry/webpack-plugin": "^1.20.1",
"@types/jest": "^27.5.2",
"@types/markdown-it": "^12.2.3",
"@typescript-eslint/eslint-plugin": "^5.62.0",
@@ -152,12 +148,8 @@
"c8": "^7.14.0",
"consola": "^3.2.3",
"cross-env": "^7.0.3",
- "cypress": "^12.17.1",
- "cypress-file-upload": "^5.0.8",
- "cypress-network-idle": "^1.14.2",
- "cypress-real-events": "^1.9.1",
- "eslint": "^8.45.0",
- "eslint-config-prettier": "^8.8.0",
+ "eslint": "^8.47.0",
+ "eslint-config-prettier": "^8.10.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-unicorn": "^42.0.0",
"eslint-plugin-vue": "^8.7.1",
@@ -167,12 +159,13 @@
"husky": "^7.0.4",
"jsdom": "^19.0.0",
"lint-staged": "^12.5.0",
+ "nuxt-webpack-optimisations": "^2.2.8",
"prettier": "^2.8.8",
- "sass": "^1.64.0",
+ "sass": "^1.65.1",
"sass-loader": "^10.4.1",
"typescript": "^4.9.5",
"vite-plugin-vue2": "^2.0.3",
- "vitest": "^0.33.0",
+ "vitest": "^0.34.1",
"vue-debounce-decorator": "^1.0.1",
"vue-eslint-parser": "^9.3.1",
"vue-gtag": "^2.0.1",
diff --git a/pages/stmn/create.vue b/pages/ahk/create.vue
similarity index 98%
rename from pages/stmn/create.vue
rename to pages/ahk/create.vue
index 88a84d2ff8..d1ee4a4af6 100644
--- a/pages/stmn/create.vue
+++ b/pages/ahk/create.vue
@@ -37,7 +37,7 @@ export default {
title,
type: 'article',
description: 'Create carbonless NFTs with low on-chain fees',
- url: '/stmn/create',
+ url: '/ahk/create',
image: `${this.$config.public.baseUrl}/k_card.png`,
}
return {
diff --git a/pages/stmn/waifu.vue b/pages/ahk/waifu.vue
similarity index 100%
rename from pages/stmn/waifu.vue
rename to pages/ahk/waifu.vue
diff --git a/pages/stt/create.vue b/pages/ahp/create.vue
similarity index 98%
rename from pages/stt/create.vue
rename to pages/ahp/create.vue
index 007a61c131..c1c8588fcd 100644
--- a/pages/stt/create.vue
+++ b/pages/ahp/create.vue
@@ -37,7 +37,7 @@ export default {
title,
type: 'article',
description: 'Create carbonless NFTs with low on-chain fees',
- url: '/stt/create',
+ url: '/ahp/create',
image: `${this.$config.public.baseUrl}/k_card.png`,
}
return {
diff --git a/pages/blog/index.vue b/pages/blog/index.vue
index 41db5b9023..6b5fa942fc 100644
--- a/pages/blog/index.vue
+++ b/pages/blog/index.vue
@@ -32,10 +32,10 @@
View Article
diff --git a/pages/qrCode.vue b/pages/qrCode.vue
index e084eb2682..340b831195 100644
--- a/pages/qrCode.vue
+++ b/pages/qrCode.vue
@@ -4,37 +4,32 @@
v-for="item in qrCodeList"
:key="item.title"
class="column is-half has-text-centered mb-3">
-
{{ item.title }}
+
{{ item.title }}