diff --git a/.publish/ai/package.json b/.publish/ai/package.json
index 0e740363..dcdbc935 100644
--- a/.publish/ai/package.json
+++ b/.publish/ai/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
"license": "MIT",
diff --git a/.publish/authz/package.json b/.publish/authz/package.json
index c9cee6f5..304d41a8 100644
--- a/.publish/authz/package.json
+++ b/.publish/authz/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/authz — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/cli/package.json b/.publish/cli/package.json
index 5b78e238..53b06814 100644
--- a/.publish/cli/package.json
+++ b/.publish/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/cli — part of the WrNexus framework.",
"license": "MIT",
@@ -28,18 +28,18 @@
"wrnexus": "./dist/index.js"
},
"dependencies": {
- "@wrnexus/core": "^0.3.2",
- "@wrnexus/router": "^0.3.2",
- "@wrnexus/csr": "^0.3.2",
- "@wrnexus/compiler": "^0.3.2",
- "@wrnexus/styles": "^0.3.2",
- "@wrnexus/dev-server": "^0.3.2",
- "@wrnexus/ui": "^0.3.2",
- "@wrnexus/validation": "^0.3.2",
- "@wrnexus/i18n": "^0.3.2",
- "@wrnexus/db": "^0.3.2",
- "@wrnexus/plugin": "^0.3.2",
- "@wrnexus/syntax": "^0.3.2"
+ "@wrnexus/core": "^0.3.3",
+ "@wrnexus/router": "^0.3.3",
+ "@wrnexus/csr": "^0.3.3",
+ "@wrnexus/compiler": "^0.3.3",
+ "@wrnexus/styles": "^0.3.3",
+ "@wrnexus/dev-server": "^0.3.3",
+ "@wrnexus/ui": "^0.3.3",
+ "@wrnexus/validation": "^0.3.3",
+ "@wrnexus/i18n": "^0.3.3",
+ "@wrnexus/db": "^0.3.3",
+ "@wrnexus/plugin": "^0.3.3",
+ "@wrnexus/syntax": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/compiler/package.json b/.publish/compiler/package.json
index 7e399b9b..907bd150 100644
--- a/.publish/compiler/package.json
+++ b/.publish/compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/compiler — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/syntax": "^0.3.2"
+ "@wrnexus/syntax": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/core/package.json b/.publish/core/package.json
index 14ceec83..d71fe40c 100644
--- a/.publish/core/package.json
+++ b/.publish/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/core — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/csr/package.json b/.publish/csr/package.json
index be1b3f62..8adabfe3 100644
--- a/.publish/csr/package.json
+++ b/.publish/csr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/csr — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/db/package.json b/.publish/db/package.json
index e923e530..275d7206 100644
--- a/.publish/db/package.json
+++ b/.publish/db/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/db — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/dev-server/package.json b/.publish/dev-server/package.json
index 62ea29ee..3fc56209 100644
--- a/.publish/dev-server/package.json
+++ b/.publish/dev-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/dev-server — part of the WrNexus framework.",
"license": "MIT",
@@ -25,20 +25,20 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2",
- "@wrnexus/dev-toolbar": "^0.3.2",
- "@wrnexus/router": "^0.3.2",
- "@wrnexus/ssr": "^0.3.2",
- "@wrnexus/csr": "^0.3.2",
- "@wrnexus/compiler": "^0.3.2",
- "@wrnexus/styles": "^0.3.2",
- "@wrnexus/ui": "^0.3.2",
- "@wrnexus/validation": "^0.3.2",
- "@wrnexus/i18n": "^0.3.2",
- "@wrnexus/db": "^0.3.2",
- "@wrnexus/pubsub": "^0.3.2",
- "@wrnexus/uploader": "^0.3.2",
- "@wrnexus/plugin": "^0.3.2"
+ "@wrnexus/core": "^0.3.3",
+ "@wrnexus/dev-toolbar": "^0.3.3",
+ "@wrnexus/router": "^0.3.3",
+ "@wrnexus/ssr": "^0.3.3",
+ "@wrnexus/csr": "^0.3.3",
+ "@wrnexus/compiler": "^0.3.3",
+ "@wrnexus/styles": "^0.3.3",
+ "@wrnexus/ui": "^0.3.3",
+ "@wrnexus/validation": "^0.3.3",
+ "@wrnexus/i18n": "^0.3.3",
+ "@wrnexus/db": "^0.3.3",
+ "@wrnexus/pubsub": "^0.3.3",
+ "@wrnexus/uploader": "^0.3.3",
+ "@wrnexus/plugin": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/dev-toolbar/package.json b/.publish/dev-toolbar/package.json
index 47417b07..8debb5ff 100644
--- a/.publish/dev-toolbar/package.json
+++ b/.publish/dev-toolbar/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-toolbar",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/dev-toolbar — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/encryption/package.json b/.publish/encryption/package.json
index 0ded4bd6..79870d23 100644
--- a/.publish/encryption/package.json
+++ b/.publish/encryption/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/encryption — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/helpers/package.json b/.publish/helpers/package.json
index 29668556..4976ddbb 100644
--- a/.publish/helpers/package.json
+++ b/.publish/helpers/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/i18n/package.json b/.publish/i18n/package.json
index 6578ee00..d1a35553 100644
--- a/.publish/i18n/package.json
+++ b/.publish/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/i18n — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/jwt/package.json b/.publish/jwt/package.json
index 9a43e657..e19095f8 100644
--- a/.publish/jwt/package.json
+++ b/.publish/jwt/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/jwt — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/mobile/package.json b/.publish/mobile/package.json
index 6563b82e..8a86f743 100644
--- a/.publish/mobile/package.json
+++ b/.publish/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/mobile — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/native": "^0.3.2"
+ "@wrnexus/native": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/native/package.json b/.publish/native/package.json
index 33fb2199..1b583a08 100644
--- a/.publish/native/package.json
+++ b/.publish/native/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/native — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/oauth/package.json b/.publish/oauth/package.json
index 65078a05..f682b0cd 100644
--- a/.publish/oauth/package.json
+++ b/.publish/oauth/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/oauth — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/plugin/package.json b/.publish/plugin/package.json
index 962679ba..c8ba135a 100644
--- a/.publish/plugin/package.json
+++ b/.publish/plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/plugin",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/plugin — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/syntax": "^0.3.2"
+ "@wrnexus/syntax": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/pubsub/package.json b/.publish/pubsub/package.json
index a3ddba3e..fe4c636f 100644
--- a/.publish/pubsub/package.json
+++ b/.publish/pubsub/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/pubsub — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/queue/package.json b/.publish/queue/package.json
index aa28e9eb..61e83fdf 100644
--- a/.publish/queue/package.json
+++ b/.publish/queue/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/queue — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/reactive/package.json b/.publish/reactive/package.json
index a60bf804..97892da0 100644
--- a/.publish/reactive/package.json
+++ b/.publish/reactive/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/reactive — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/router/package.json b/.publish/router/package.json
index 0971030c..65d732c5 100644
--- a/.publish/router/package.json
+++ b/.publish/router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/router — part of the WrNexus framework.",
"license": "MIT",
@@ -21,8 +21,8 @@
}
},
"dependencies": {
- "@wrnexus/compiler": "^0.3.2",
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/compiler": "^0.3.3",
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/ssr/package.json b/.publish/ssr/package.json
index 77f280bb..96613eb3 100644
--- a/.publish/ssr/package.json
+++ b/.publish/ssr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/ssr — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/styles/package.json b/.publish/styles/package.json
index 69499203..1e3f7676 100644
--- a/.publish/styles/package.json
+++ b/.publish/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/styles — part of the WrNexus framework.",
"license": "MIT",
@@ -21,9 +21,9 @@
}
},
"dependencies": {
- "@wrnexus/uploader": "^0.3.2",
- "@wrnexus/core": "^0.3.2",
- "@wrnexus/plugin": "^0.3.2"
+ "@wrnexus/uploader": "^0.3.3",
+ "@wrnexus/core": "^0.3.3",
+ "@wrnexus/plugin": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/syntax/package.json b/.publish/syntax/package.json
index 7fdeecd4..7e20c376 100644
--- a/.publish/syntax/package.json
+++ b/.publish/syntax/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/syntax",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/syntax — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/test/package.json b/.publish/test/package.json
index 0d196dfc..fd832e23 100644
--- a/.publish/test/package.json
+++ b/.publish/test/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/test — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/tracking/package.json b/.publish/tracking/package.json
index 960ef664..6a20aacc 100644
--- a/.publish/tracking/package.json
+++ b/.publish/tracking/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/tracking — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/ui/components/ChannelCard.wrn b/.publish/ui/components/ChannelCard.wrn
index 32aab3a0..6e9b4ce7 100644
--- a/.publish/ui/components/ChannelCard.wrn
+++ b/.publish/ui/components/ChannelCard.wrn
@@ -4,31 +4,50 @@ component ChannelCard {
description = ""
href = ""
icon = ""
+ actionLabel = ""
class = ""
}
view {
{#if icon}
-
+
+
+
{/if}
-
+
+
+
+
- {#if title}{title}
{/if}
- {#if description}{description}
{/if}
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
{#if href}
-
- Explore {title}→
-
+
+ {actionLabel || "Explore " + title}
+ →
+
{/if}
}
diff --git a/.publish/ui/components/PricingComparisonTable.wrn b/.publish/ui/components/PricingComparisonTable.wrn
index 39b53112..a54f0b54 100644
--- a/.publish/ui/components/PricingComparisonTable.wrn
+++ b/.publish/ui/components/PricingComparisonTable.wrn
@@ -3,7 +3,33 @@ component PricingComparisonTable {
caption = "Plan comparison"
plans = []
features = []
+ featuredPlan = ""
class = ""
}
- view {
{caption}| Feature | {#each plans as plan}{plan.name} | {/each}
{#each features as feature}| {feature.label} | {#each feature.values as value}{value} | {/each}
{/each}
}
+
+ view {
+
+
+ {caption}
+
+
+ | Feature |
+ {#each plans as plan}
+ {plan.name} |
+ {/each}
+
+
+
+ {#each features as feature}
+
+ | {feature.label} |
+ {#each feature.values as value}
+ {value} |
+ {/each}
+
+ {/each}
+
+
+
+ }
}
diff --git a/.publish/ui/components/PricingHero.wrn b/.publish/ui/components/PricingHero.wrn
index 2abd536a..f7aaaac0 100644
--- a/.publish/ui/components/PricingHero.wrn
+++ b/.publish/ui/components/PricingHero.wrn
@@ -6,5 +6,61 @@ component PricingHero {
align = "start"
class = ""
}
- view { {eyebrow}{title}
{description}
}
+
+ view {
+
+
+
+
+ {#if align === "center"}
+
+ {#if eyebrow}
+
+ {eyebrow}
+
+ {/if}
+
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+ {:else}
+
+ {#if eyebrow}
+
+ {eyebrow}
+
+ {/if}
+
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+ {/if}
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/PricingPlanCard.wrn b/.publish/ui/components/PricingPlanCard.wrn
index 390ab051..529e7a5e 100644
--- a/.publish/ui/components/PricingPlanCard.wrn
+++ b/.publish/ui/components/PricingPlanCard.wrn
@@ -6,10 +6,59 @@ component PricingPlanCard {
price = "₹0"
period = "/month"
featured = false
+ badgeLabel = "Most popular"
ctaLabel = "Choose plan"
ctaHref = "#"
}
+
view {
- {name}
{description}
{price}{period}
{ctaLabel}
+
+ {#if featured}
+
+
+
+ {/if}
+
+
+ {name}
+
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+
+
+ {price}
+
+ {#if period}
+
+ {period}
+
+ {/if}
+
+
+
+
+
+
+ {#if featured}
+
+ {ctaLabel}
+
+ {:else}
+
+ {ctaLabel}
+
+ {/if}
+
}
}
diff --git a/.publish/ui/components/badge.wrn b/.publish/ui/components/badge.wrn
index 875f9362..889cfdf4 100644
--- a/.publish/ui/components/badge.wrn
+++ b/.publish/ui/components/badge.wrn
@@ -3,8 +3,25 @@ component Badge {
class = ""
label = ""
variant = "neutral"
+ size = "md"
}
+
view {
- {label}
+
+ {#if variant === "success"}
+
+ {/if}
+ {#if variant === "warning"}
+
+ {/if}
+ {#if variant === "danger"}
+
+ {/if}
+ {#if variant === "brand"}
+
+ {/if}
+ {label}
+
+
}
}
diff --git a/.publish/ui/components/button.wrn b/.publish/ui/components/button.wrn
index 3f6b857c..f722001e 100644
--- a/.publish/ui/components/button.wrn
+++ b/.publish/ui/components/button.wrn
@@ -7,6 +7,8 @@ component Button {
disabled = false
loading = false
icon = ""
+ iconPosition = "start"
+ fullWidth = false
className = ""
}
@@ -16,16 +18,23 @@ component Button {
disabled="{disabled || loading}"
aria-busy="{loading}"
class="wire-btn wire-btn--{variant} wire-btn--{size} {className}"
+ class:w-full='{fullWidth}'
>
{#if loading}
{/if}
- {#if icon && !loading}
-
+ {#if icon && !loading && iconPosition === "start"}
+
{/if}
{label}
+
+ {#if icon && !loading && iconPosition === "end"}
+
+ {/if}
+
+
}
-}
\ No newline at end of file
+}
diff --git a/.publish/ui/components/table.wrn b/.publish/ui/components/table.wrn
index d276601d..517cfcec 100644
--- a/.publish/ui/components/table.wrn
+++ b/.publish/ui/components/table.wrn
@@ -3,8 +3,22 @@ component Table {
class = ""
caption = "Data table"
responsive = true
+ striped = false
+ hoverable = true
+ compact = false
}
+
view {
-
+
}
}
diff --git a/.publish/ui/package.json b/.publish/ui/package.json
index 60af84b9..8c2b8a02 100644
--- a/.publish/ui/package.json
+++ b/.publish/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/ui — part of the WrNexus framework.",
"license": "MIT",
@@ -25,7 +25,7 @@
"./ui.css": "./ui.css"
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist",
diff --git a/.publish/ui/ui.css b/.publish/ui/ui.css
index 67bc7356..44950f06 100644
--- a/.publish/ui/ui.css
+++ b/.publish/ui/ui.css
@@ -1819,3 +1819,368 @@
position: static;
}
}
+
+/* --- Theme-safe pricing, action, badge, table and channel refinements ------ */
+:where([data-wrn-component]) {
+ color: var(--wire-color-text);
+ font-family: var(--wire-font-sans);
+}
+
+.wire-page-shell {
+ min-height: 100%;
+ background: var(--wire-color-bg);
+ color: var(--wire-color-text);
+}
+
+.wire-section {
+ padding-block: var(--wire-space-section-sm, 3.5rem);
+}
+
+@media (min-width: 1024px) {
+ .wire-section {
+ padding-block: var(--wire-space-section, 5rem);
+ }
+}
+
+.wire-container {
+ max-width: var(--wire-container-max, 80rem);
+ padding-inline: clamp(1rem, 2.5vw, 2rem);
+}
+
+.wire-btn {
+ min-height: 2.75rem;
+ border-radius: 0.75rem;
+ padding-inline: 1rem;
+ font-size: 0.875rem;
+ font-weight: 650;
+ letter-spacing: -0.01em;
+ box-shadow: none;
+}
+
+.wire-btn--primary {
+ border-color: var(--wire-color-primary);
+ background: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+ box-shadow: var(--wire-shadow-sm, var(--wire-shadow-1));
+}
+
+.wire-btn--primary:hover:not(:disabled) {
+ border-color: var(--wire-color-primary-hover);
+ background: var(--wire-color-primary-hover);
+ color: var(--wire-color-primary-contrast);
+ transform: translateY(-1px);
+ box-shadow: var(--wire-shadow-md, var(--wire-shadow-1));
+}
+
+.wire-btn--secondary,
+.wire-btn--default {
+ border-color: var(--wire-color-border-strong, var(--wire-color-border));
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ box-shadow: var(--wire-shadow-sm, var(--wire-shadow-1));
+}
+
+.wire-btn--secondary:hover:not(:disabled),
+.wire-btn--default:hover:not(:disabled) {
+ border-color: var(--wire-color-primary);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-primary);
+ transform: translateY(-1px);
+}
+
+.wire-btn--ghost {
+ border-color: transparent;
+ background: transparent;
+ color: var(--wire-color-text);
+}
+
+.wire-btn--ghost:hover:not(:disabled) {
+ border-color: var(--wire-color-border);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-primary);
+}
+
+.wire-btn--danger {
+ border-color: var(--wire-color-danger);
+ background: var(--wire-color-danger);
+ color: #fff;
+}
+
+.wire-btn--danger:hover:not(:disabled) {
+ filter: brightness(0.94);
+ transform: translateY(-1px);
+}
+
+.wire-btn--sm {
+ min-height: 2.25rem;
+ padding: 0.45rem 0.75rem;
+ font-size: 0.8125rem;
+}
+
+.wire-btn--md {
+ min-height: 2.75rem;
+ padding: 0.625rem 1rem;
+}
+
+.wire-btn--lg {
+ min-height: 3rem;
+ padding: 0.75rem 1.25rem;
+ font-size: 0.9375rem;
+}
+
+.wire-badge {
+ display: inline-flex;
+ width: fit-content;
+ align-items: center;
+ gap: 0.375rem;
+ border: 1px solid var(--wire-color-border);
+ border-radius: 9999px;
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+ font-weight: 650;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.wire-badge--sm {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.6875rem;
+}
+
+.wire-badge--md {
+ padding: 0.375rem 0.625rem;
+ font-size: 0.75rem;
+}
+
+.wire-badge--lg {
+ padding: 0.45rem 0.75rem;
+ font-size: 0.8125rem;
+}
+
+.wire-badge--neutral {
+ border-color: var(--wire-color-border);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+}
+
+.wire-badge--brand {
+ border-color: color-mix(in srgb, var(--wire-color-primary) 30%, transparent);
+ background: var(--wire-color-primary-soft);
+ color: var(--wire-color-primary);
+}
+
+.wire-badge--success {
+ border-color: color-mix(in srgb, var(--wire-color-success) 30%, transparent);
+ background: var(
+ --wire-color-success-soft,
+ color-mix(in srgb, var(--wire-color-success) 12%, transparent)
+ );
+ color: var(--wire-color-success);
+}
+
+.wire-badge--warning {
+ border-color: color-mix(in srgb, var(--wire-color-warning) 30%, transparent);
+ background: var(
+ --wire-color-warning-soft,
+ color-mix(in srgb, var(--wire-color-warning) 12%, transparent)
+ );
+ color: var(--wire-color-warning);
+}
+
+.wire-badge--danger {
+ border-color: color-mix(in srgb, var(--wire-color-danger) 30%, transparent);
+ background: var(
+ --wire-color-danger-soft,
+ color-mix(in srgb, var(--wire-color-danger) 12%, transparent)
+ );
+ color: var(--wire-color-danger);
+}
+
+.wire-table-wrap {
+ width: 100%;
+ max-width: 100%;
+ overflow-x: auto;
+ scrollbar-gutter: stable;
+ border: 1px solid var(--wire-color-border);
+ border-radius: var(--wire-radius, 1rem);
+ background: var(--wire-color-surface);
+}
+
+.wire-table {
+ width: 100%;
+ border-collapse: separate;
+ border-spacing: 0;
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ font-size: 0.875rem;
+}
+
+.wire-table th,
+.wire-table td {
+ padding: 1rem 1.25rem;
+ border-bottom: 1px solid var(--wire-color-border);
+ vertical-align: middle;
+}
+
+.wire-table thead th {
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text);
+ font-size: 0.75rem;
+ font-weight: 700;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+
+.wire-table tbody th {
+ color: var(--wire-color-text);
+ font-weight: 650;
+}
+
+.wire-table tbody td {
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+}
+
+.wire-table tbody tr:last-child > * {
+ border-bottom: 0;
+}
+
+.wire-table--hoverable tbody tr:hover > *,
+.wire-comparison-table tbody tr:hover > * {
+ background: var(--wire-color-surface-2);
+}
+
+.wire-table--striped tbody tr:nth-child(even) > * {
+ background: color-mix(in srgb, var(--wire-color-surface-2) 72%, transparent);
+}
+
+.wire-table--compact th,
+.wire-table--compact td {
+ padding: 0.7rem 0.9rem;
+}
+
+.wire-comparison-table th:not(:first-child),
+.wire-comparison-table td:not(:first-child) {
+ text-align: center;
+}
+
+.wire-comparison-table thead th:first-child,
+.wire-comparison-table tbody th {
+ position: sticky;
+ left: 0;
+ z-index: 1;
+ background: var(--wire-color-surface);
+}
+
+.wire-comparison-table thead th:first-child {
+ z-index: 2;
+ background: var(--wire-color-surface-2);
+}
+
+.wire-channel-card {
+ isolation: isolate;
+}
+
+.wire-channel-card__icon {
+ position: relative;
+ overflow: hidden;
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--wire-color-primary) 5%, transparent);
+}
+
+.wire-channel-card__icon::after {
+ content: "";
+ position: absolute;
+ inset: auto -0.5rem -0.75rem auto;
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 999px;
+ background: color-mix(in srgb, var(--wire-color-primary) 14%, transparent);
+ pointer-events: none;
+}
+
+.wire-channel-card__icon > span {
+ position: relative;
+ z-index: 1;
+ display: block;
+ width: 1.25rem;
+ height: 1.25rem;
+ color: currentColor;
+}
+
+.wire-channel-card__icon > span::before {
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+
+/* --- Channel card --------------------------------------------------------- */
+
+.wire-channel-card__icon {
+ display: grid;
+ width: 3rem;
+ height: 3rem;
+ flex: 0 0 3rem;
+ place-items: center;
+ overflow: hidden;
+
+ color: color-mix(in srgb, var(--wire-color-primary) 72%, var(--wire-color-text));
+
+ border: 1px solid color-mix(in srgb, var(--wire-color-primary) 38%, var(--wire-color-border));
+
+ border-radius: 0.875rem;
+
+ background: linear-gradient(
+ 145deg,
+ color-mix(in srgb, var(--wire-color-primary) 18%, var(--wire-color-surface)),
+ color-mix(in srgb, var(--wire-color-primary) 8%, var(--wire-color-surface-2))
+ );
+
+ box-shadow:
+ inset 0 1px 0 color-mix(in srgb, var(--wire-color-text) 8%, transparent),
+ 0 0.75rem 1.75rem color-mix(in srgb, var(--wire-color-primary) 12%, transparent);
+}
+
+.wire-channel-card__icon-glyph {
+ display: block;
+ width: 1.5rem;
+ height: 1.5rem;
+ color: inherit;
+ font-size: 1.5rem;
+ line-height: 1;
+}
+
+.wire-channel-card__icon-glyph::before {
+ display: block;
+ width: 100%;
+ height: 100%;
+ color: inherit;
+}
+
+/* Improve contrast when the current theme uses a dark primary color. */
+[data-theme="dark"] .wire-channel-card__icon,
+.dark .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 48%, white);
+
+ border-color: color-mix(in srgb, var(--wire-color-primary) 42%, var(--wire-color-border));
+
+ background: linear-gradient(
+ 145deg,
+ color-mix(in srgb, var(--wire-color-primary) 24%, var(--wire-color-surface)),
+ color-mix(in srgb, var(--wire-color-primary) 12%, var(--wire-color-surface-2))
+ );
+}
+
+@media (hover: hover) and (pointer: fine) {
+ .wire-channel-card:hover .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 82%, var(--wire-color-text));
+
+ border-color: color-mix(in srgb, var(--wire-color-primary) 62%, var(--wire-color-border));
+
+ transform: translateY(-2px);
+ }
+
+ [data-theme="dark"] .wire-channel-card:hover .wire-channel-card__icon,
+ .dark .wire-channel-card:hover .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 58%, white);
+ }
+}
diff --git a/.publish/uploader/package.json b/.publish/uploader/package.json
index 9877b64f..2a5934e4 100644
--- a/.publish/uploader/package.json
+++ b/.publish/uploader/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/uploader — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.3.2"
+ "@wrnexus/core": "^0.3.3"
},
"files": [
"dist"
diff --git a/.publish/validation/package.json b/.publish/validation/package.json
index 74c3159c..b47a3f80 100644
--- a/.publish/validation/package.json
+++ b/.publish/validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"description": "@wrnexus/validation — part of the WrNexus framework.",
"license": "MIT",
diff --git a/packages/ai/package.json b/packages/ai/package.json
index 73fdab0a..323284a5 100644
--- a/packages/ai/package.json
+++ b/packages/ai/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
diff --git a/packages/authz/package.json b/packages/authz/package.json
index b3f23f1a..801607b6 100644
--- a/packages/authz/package.json
+++ b/packages/authz/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index d70d9a88..9988ef1d 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/cli/src/update.ts b/packages/cli/src/update.ts
index 9ea465b9..f8a105ce 100644
--- a/packages/cli/src/update.ts
+++ b/packages/cli/src/update.ts
@@ -969,6 +969,14 @@ const MIGRATIONS: Migration[] = [
// Compiler-only fix. Existing WRN source files require no migration.
},
},
+ {
+ version: "0.3.3",
+ id: "component-fix",
+ description: "UI component fixes.",
+ apply() {
+ // Compiler-only fix. Existing WRN source files require no migration.
+ },
+ },
];
/** Release tooling uses this to require an explicit migration entry per version. */
diff --git a/packages/compiler/package.json b/packages/compiler/package.json
index 2756cb03..cd81581e 100644
--- a/packages/compiler/package.json
+++ b/packages/compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/core/package.json b/packages/core/package.json
index 66c618d8..b497aae9 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/csr/package.json b/packages/csr/package.json
index 77848b94..dce32785 100644
--- a/packages/csr/package.json
+++ b/packages/csr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/db/package.json b/packages/db/package.json
index ae36d03b..e22f988a 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json
index 59e8c744..ff983378 100644
--- a/packages/dev-server/package.json
+++ b/packages/dev-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/dev-toolbar/package.json b/packages/dev-toolbar/package.json
index 61a7201c..738b2df5 100644
--- a/packages/dev-toolbar/package.json
+++ b/packages/dev-toolbar/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-toolbar",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"sideEffects": false,
diff --git a/packages/encryption/package.json b/packages/encryption/package.json
index 20c620ed..0b2b58e8 100644
--- a/packages/encryption/package.json
+++ b/packages/encryption/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/helpers/package.json b/packages/helpers/package.json
index 614f853b..2d016e64 100644
--- a/packages/helpers/package.json
+++ b/packages/helpers/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 66d2db1a..1714c892 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/jwt/package.json b/packages/jwt/package.json
index 0080be30..defa874d 100644
--- a/packages/jwt/package.json
+++ b/packages/jwt/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/mobile/package.json b/packages/mobile/package.json
index 8d4fd0d0..ecd7975b 100644
--- a/packages/mobile/package.json
+++ b/packages/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/native/package.json b/packages/native/package.json
index f670aa50..9122d78b 100644
--- a/packages/native/package.json
+++ b/packages/native/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/oauth/package.json b/packages/oauth/package.json
index bc37eb12..fe029dbb 100644
--- a/packages/oauth/package.json
+++ b/packages/oauth/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/plugin/package.json b/packages/plugin/package.json
index cf673c19..60bd95c4 100644
--- a/packages/plugin/package.json
+++ b/packages/plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/plugin",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json
index 521dfa55..b8ff1ed3 100644
--- a/packages/pubsub/package.json
+++ b/packages/pubsub/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/queue/package.json b/packages/queue/package.json
index cb303eeb..e0187335 100644
--- a/packages/queue/package.json
+++ b/packages/queue/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/reactive/package.json b/packages/reactive/package.json
index a64ddb45..269aa694 100644
--- a/packages/reactive/package.json
+++ b/packages/reactive/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/router/package.json b/packages/router/package.json
index 1a1bca6d..84909ebb 100644
--- a/packages/router/package.json
+++ b/packages/router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/ssr/package.json b/packages/ssr/package.json
index 639924e0..ac3347dc 100644
--- a/packages/ssr/package.json
+++ b/packages/ssr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/styles/package.json b/packages/styles/package.json
index f2c98050..9edfeb37 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/syntax/package.json b/packages/syntax/package.json
index 25b8c76f..f43580c1 100644
--- a/packages/syntax/package.json
+++ b/packages/syntax/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/syntax",
- "version": "0.3.2",
+ "version": "0.3.3",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/test/package.json b/packages/test/package.json
index f57dd12a..4e9e681f 100644
--- a/packages/test/package.json
+++ b/packages/test/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/tracking/package.json b/packages/tracking/package.json
index cf239367..d2a18dc6 100644
--- a/packages/tracking/package.json
+++ b/packages/tracking/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/ui/components/ChannelCard.wrn b/packages/ui/components/ChannelCard.wrn
index 32aab3a0..6e9b4ce7 100644
--- a/packages/ui/components/ChannelCard.wrn
+++ b/packages/ui/components/ChannelCard.wrn
@@ -4,31 +4,50 @@ component ChannelCard {
description = ""
href = ""
icon = ""
+ actionLabel = ""
class = ""
}
view {
{#if icon}
-
+
+
+
{/if}
-
+
+
+
+
- {#if title}{title}
{/if}
- {#if description}{description}
{/if}
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
{#if href}
-
- Explore {title}→
-
+
+ {actionLabel || "Explore " + title}
+ →
+
{/if}
}
diff --git a/packages/ui/components/PricingComparisonTable.wrn b/packages/ui/components/PricingComparisonTable.wrn
index 39b53112..a54f0b54 100644
--- a/packages/ui/components/PricingComparisonTable.wrn
+++ b/packages/ui/components/PricingComparisonTable.wrn
@@ -3,7 +3,33 @@ component PricingComparisonTable {
caption = "Plan comparison"
plans = []
features = []
+ featuredPlan = ""
class = ""
}
- view { {caption}| Feature | {#each plans as plan}{plan.name} | {/each}
{#each features as feature}| {feature.label} | {#each feature.values as value}{value} | {/each}
{/each}
}
+
+ view {
+
+
+ {caption}
+
+
+ | Feature |
+ {#each plans as plan}
+ {plan.name} |
+ {/each}
+
+
+
+ {#each features as feature}
+
+ | {feature.label} |
+ {#each feature.values as value}
+ {value} |
+ {/each}
+
+ {/each}
+
+
+
+ }
}
diff --git a/packages/ui/components/PricingHero.wrn b/packages/ui/components/PricingHero.wrn
index 2abd536a..f7aaaac0 100644
--- a/packages/ui/components/PricingHero.wrn
+++ b/packages/ui/components/PricingHero.wrn
@@ -6,5 +6,61 @@ component PricingHero {
align = "start"
class = ""
}
- view { {eyebrow}{title}
{description}
}
+
+ view {
+
+
+
+
+ {#if align === "center"}
+
+ {#if eyebrow}
+
+ {eyebrow}
+
+ {/if}
+
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+ {:else}
+
+ {#if eyebrow}
+
+ {eyebrow}
+
+ {/if}
+
+ {#if title}
+
+ {title}
+
+ {/if}
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+ {/if}
+
+
+
+
+ }
}
diff --git a/packages/ui/components/PricingPlanCard.wrn b/packages/ui/components/PricingPlanCard.wrn
index 390ab051..529e7a5e 100644
--- a/packages/ui/components/PricingPlanCard.wrn
+++ b/packages/ui/components/PricingPlanCard.wrn
@@ -6,10 +6,59 @@ component PricingPlanCard {
price = "₹0"
period = "/month"
featured = false
+ badgeLabel = "Most popular"
ctaLabel = "Choose plan"
ctaHref = "#"
}
+
view {
- {name}
{description}
{price}{period}
{ctaLabel}
+
+ {#if featured}
+
+
+
+ {/if}
+
+
+ {name}
+
+
+ {#if description}
+
+ {description}
+
+ {/if}
+
+
+
+ {price}
+
+ {#if period}
+
+ {period}
+
+ {/if}
+
+
+
+
+
+
+ {#if featured}
+
+ {ctaLabel}
+
+ {:else}
+
+ {ctaLabel}
+
+ {/if}
+
}
}
diff --git a/packages/ui/components/badge.wrn b/packages/ui/components/badge.wrn
index 875f9362..889cfdf4 100644
--- a/packages/ui/components/badge.wrn
+++ b/packages/ui/components/badge.wrn
@@ -3,8 +3,25 @@ component Badge {
class = ""
label = ""
variant = "neutral"
+ size = "md"
}
+
view {
- {label}
+
+ {#if variant === "success"}
+
+ {/if}
+ {#if variant === "warning"}
+
+ {/if}
+ {#if variant === "danger"}
+
+ {/if}
+ {#if variant === "brand"}
+
+ {/if}
+ {label}
+
+
}
}
diff --git a/packages/ui/components/button.wrn b/packages/ui/components/button.wrn
index 3f6b857c..f722001e 100644
--- a/packages/ui/components/button.wrn
+++ b/packages/ui/components/button.wrn
@@ -7,6 +7,8 @@ component Button {
disabled = false
loading = false
icon = ""
+ iconPosition = "start"
+ fullWidth = false
className = ""
}
@@ -16,16 +18,23 @@ component Button {
disabled="{disabled || loading}"
aria-busy="{loading}"
class="wire-btn wire-btn--{variant} wire-btn--{size} {className}"
+ class:w-full='{fullWidth}'
>
{#if loading}
{/if}
- {#if icon && !loading}
-
+ {#if icon && !loading && iconPosition === "start"}
+
{/if}
{label}
+
+ {#if icon && !loading && iconPosition === "end"}
+
+ {/if}
+
+
}
-}
\ No newline at end of file
+}
diff --git a/packages/ui/components/table.wrn b/packages/ui/components/table.wrn
index d276601d..517cfcec 100644
--- a/packages/ui/components/table.wrn
+++ b/packages/ui/components/table.wrn
@@ -3,8 +3,22 @@ component Table {
class = ""
caption = "Data table"
responsive = true
+ striped = false
+ hoverable = true
+ compact = false
}
+
view {
-
+
}
}
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 27f98fa4..750b1e84 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/ui/ui.css b/packages/ui/ui.css
index 67bc7356..44950f06 100644
--- a/packages/ui/ui.css
+++ b/packages/ui/ui.css
@@ -1819,3 +1819,368 @@
position: static;
}
}
+
+/* --- Theme-safe pricing, action, badge, table and channel refinements ------ */
+:where([data-wrn-component]) {
+ color: var(--wire-color-text);
+ font-family: var(--wire-font-sans);
+}
+
+.wire-page-shell {
+ min-height: 100%;
+ background: var(--wire-color-bg);
+ color: var(--wire-color-text);
+}
+
+.wire-section {
+ padding-block: var(--wire-space-section-sm, 3.5rem);
+}
+
+@media (min-width: 1024px) {
+ .wire-section {
+ padding-block: var(--wire-space-section, 5rem);
+ }
+}
+
+.wire-container {
+ max-width: var(--wire-container-max, 80rem);
+ padding-inline: clamp(1rem, 2.5vw, 2rem);
+}
+
+.wire-btn {
+ min-height: 2.75rem;
+ border-radius: 0.75rem;
+ padding-inline: 1rem;
+ font-size: 0.875rem;
+ font-weight: 650;
+ letter-spacing: -0.01em;
+ box-shadow: none;
+}
+
+.wire-btn--primary {
+ border-color: var(--wire-color-primary);
+ background: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+ box-shadow: var(--wire-shadow-sm, var(--wire-shadow-1));
+}
+
+.wire-btn--primary:hover:not(:disabled) {
+ border-color: var(--wire-color-primary-hover);
+ background: var(--wire-color-primary-hover);
+ color: var(--wire-color-primary-contrast);
+ transform: translateY(-1px);
+ box-shadow: var(--wire-shadow-md, var(--wire-shadow-1));
+}
+
+.wire-btn--secondary,
+.wire-btn--default {
+ border-color: var(--wire-color-border-strong, var(--wire-color-border));
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ box-shadow: var(--wire-shadow-sm, var(--wire-shadow-1));
+}
+
+.wire-btn--secondary:hover:not(:disabled),
+.wire-btn--default:hover:not(:disabled) {
+ border-color: var(--wire-color-primary);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-primary);
+ transform: translateY(-1px);
+}
+
+.wire-btn--ghost {
+ border-color: transparent;
+ background: transparent;
+ color: var(--wire-color-text);
+}
+
+.wire-btn--ghost:hover:not(:disabled) {
+ border-color: var(--wire-color-border);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-primary);
+}
+
+.wire-btn--danger {
+ border-color: var(--wire-color-danger);
+ background: var(--wire-color-danger);
+ color: #fff;
+}
+
+.wire-btn--danger:hover:not(:disabled) {
+ filter: brightness(0.94);
+ transform: translateY(-1px);
+}
+
+.wire-btn--sm {
+ min-height: 2.25rem;
+ padding: 0.45rem 0.75rem;
+ font-size: 0.8125rem;
+}
+
+.wire-btn--md {
+ min-height: 2.75rem;
+ padding: 0.625rem 1rem;
+}
+
+.wire-btn--lg {
+ min-height: 3rem;
+ padding: 0.75rem 1.25rem;
+ font-size: 0.9375rem;
+}
+
+.wire-badge {
+ display: inline-flex;
+ width: fit-content;
+ align-items: center;
+ gap: 0.375rem;
+ border: 1px solid var(--wire-color-border);
+ border-radius: 9999px;
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+ font-weight: 650;
+ line-height: 1;
+ white-space: nowrap;
+}
+
+.wire-badge--sm {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.6875rem;
+}
+
+.wire-badge--md {
+ padding: 0.375rem 0.625rem;
+ font-size: 0.75rem;
+}
+
+.wire-badge--lg {
+ padding: 0.45rem 0.75rem;
+ font-size: 0.8125rem;
+}
+
+.wire-badge--neutral {
+ border-color: var(--wire-color-border);
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+}
+
+.wire-badge--brand {
+ border-color: color-mix(in srgb, var(--wire-color-primary) 30%, transparent);
+ background: var(--wire-color-primary-soft);
+ color: var(--wire-color-primary);
+}
+
+.wire-badge--success {
+ border-color: color-mix(in srgb, var(--wire-color-success) 30%, transparent);
+ background: var(
+ --wire-color-success-soft,
+ color-mix(in srgb, var(--wire-color-success) 12%, transparent)
+ );
+ color: var(--wire-color-success);
+}
+
+.wire-badge--warning {
+ border-color: color-mix(in srgb, var(--wire-color-warning) 30%, transparent);
+ background: var(
+ --wire-color-warning-soft,
+ color-mix(in srgb, var(--wire-color-warning) 12%, transparent)
+ );
+ color: var(--wire-color-warning);
+}
+
+.wire-badge--danger {
+ border-color: color-mix(in srgb, var(--wire-color-danger) 30%, transparent);
+ background: var(
+ --wire-color-danger-soft,
+ color-mix(in srgb, var(--wire-color-danger) 12%, transparent)
+ );
+ color: var(--wire-color-danger);
+}
+
+.wire-table-wrap {
+ width: 100%;
+ max-width: 100%;
+ overflow-x: auto;
+ scrollbar-gutter: stable;
+ border: 1px solid var(--wire-color-border);
+ border-radius: var(--wire-radius, 1rem);
+ background: var(--wire-color-surface);
+}
+
+.wire-table {
+ width: 100%;
+ border-collapse: separate;
+ border-spacing: 0;
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ font-size: 0.875rem;
+}
+
+.wire-table th,
+.wire-table td {
+ padding: 1rem 1.25rem;
+ border-bottom: 1px solid var(--wire-color-border);
+ vertical-align: middle;
+}
+
+.wire-table thead th {
+ background: var(--wire-color-surface-2);
+ color: var(--wire-color-text);
+ font-size: 0.75rem;
+ font-weight: 700;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+
+.wire-table tbody th {
+ color: var(--wire-color-text);
+ font-weight: 650;
+}
+
+.wire-table tbody td {
+ color: var(--wire-color-text-muted, var(--wire-color-muted));
+}
+
+.wire-table tbody tr:last-child > * {
+ border-bottom: 0;
+}
+
+.wire-table--hoverable tbody tr:hover > *,
+.wire-comparison-table tbody tr:hover > * {
+ background: var(--wire-color-surface-2);
+}
+
+.wire-table--striped tbody tr:nth-child(even) > * {
+ background: color-mix(in srgb, var(--wire-color-surface-2) 72%, transparent);
+}
+
+.wire-table--compact th,
+.wire-table--compact td {
+ padding: 0.7rem 0.9rem;
+}
+
+.wire-comparison-table th:not(:first-child),
+.wire-comparison-table td:not(:first-child) {
+ text-align: center;
+}
+
+.wire-comparison-table thead th:first-child,
+.wire-comparison-table tbody th {
+ position: sticky;
+ left: 0;
+ z-index: 1;
+ background: var(--wire-color-surface);
+}
+
+.wire-comparison-table thead th:first-child {
+ z-index: 2;
+ background: var(--wire-color-surface-2);
+}
+
+.wire-channel-card {
+ isolation: isolate;
+}
+
+.wire-channel-card__icon {
+ position: relative;
+ overflow: hidden;
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--wire-color-primary) 5%, transparent);
+}
+
+.wire-channel-card__icon::after {
+ content: "";
+ position: absolute;
+ inset: auto -0.5rem -0.75rem auto;
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 999px;
+ background: color-mix(in srgb, var(--wire-color-primary) 14%, transparent);
+ pointer-events: none;
+}
+
+.wire-channel-card__icon > span {
+ position: relative;
+ z-index: 1;
+ display: block;
+ width: 1.25rem;
+ height: 1.25rem;
+ color: currentColor;
+}
+
+.wire-channel-card__icon > span::before {
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+
+/* --- Channel card --------------------------------------------------------- */
+
+.wire-channel-card__icon {
+ display: grid;
+ width: 3rem;
+ height: 3rem;
+ flex: 0 0 3rem;
+ place-items: center;
+ overflow: hidden;
+
+ color: color-mix(in srgb, var(--wire-color-primary) 72%, var(--wire-color-text));
+
+ border: 1px solid color-mix(in srgb, var(--wire-color-primary) 38%, var(--wire-color-border));
+
+ border-radius: 0.875rem;
+
+ background: linear-gradient(
+ 145deg,
+ color-mix(in srgb, var(--wire-color-primary) 18%, var(--wire-color-surface)),
+ color-mix(in srgb, var(--wire-color-primary) 8%, var(--wire-color-surface-2))
+ );
+
+ box-shadow:
+ inset 0 1px 0 color-mix(in srgb, var(--wire-color-text) 8%, transparent),
+ 0 0.75rem 1.75rem color-mix(in srgb, var(--wire-color-primary) 12%, transparent);
+}
+
+.wire-channel-card__icon-glyph {
+ display: block;
+ width: 1.5rem;
+ height: 1.5rem;
+ color: inherit;
+ font-size: 1.5rem;
+ line-height: 1;
+}
+
+.wire-channel-card__icon-glyph::before {
+ display: block;
+ width: 100%;
+ height: 100%;
+ color: inherit;
+}
+
+/* Improve contrast when the current theme uses a dark primary color. */
+[data-theme="dark"] .wire-channel-card__icon,
+.dark .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 48%, white);
+
+ border-color: color-mix(in srgb, var(--wire-color-primary) 42%, var(--wire-color-border));
+
+ background: linear-gradient(
+ 145deg,
+ color-mix(in srgb, var(--wire-color-primary) 24%, var(--wire-color-surface)),
+ color-mix(in srgb, var(--wire-color-primary) 12%, var(--wire-color-surface-2))
+ );
+}
+
+@media (hover: hover) and (pointer: fine) {
+ .wire-channel-card:hover .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 82%, var(--wire-color-text));
+
+ border-color: color-mix(in srgb, var(--wire-color-primary) 62%, var(--wire-color-border));
+
+ transform: translateY(-2px);
+ }
+
+ [data-theme="dark"] .wire-channel-card:hover .wire-channel-card__icon,
+ .dark .wire-channel-card:hover .wire-channel-card__icon {
+ color: color-mix(in srgb, var(--wire-color-primary) 58%, white);
+ }
+}
diff --git a/packages/uploader/package.json b/packages/uploader/package.json
index 2947b1b6..7b923faf 100644
--- a/packages/uploader/package.json
+++ b/packages/uploader/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/validation/package.json b/packages/validation/package.json
index 3576911b..f0abd16b 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
- "version": "0.3.2",
+ "version": "0.3.3",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/update-package-versions.mjs b/update-package-versions.mjs
index d5a17ffd..453b5e30 100644
--- a/update-package-versions.mjs
+++ b/update-package-versions.mjs
@@ -1,7 +1,7 @@
import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
import { join } from "node:path";
-const version = "0.3.2";
+const version = "0.3.3";
const dependencyGroups = [
"dependencies",