studio-engine 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,15 +9,19 @@
9
9
  wallet list; pick() runs a brief connecting state then closes (no real
10
10
  connect). Opened via open('wallet-connect', {...}) or swap()ed to from auth.
11
11
 
12
+ Brand icons ship inline from the engine (studio/modals/blocks/_wallet_brand_sprite,
13
+ rendered once below): brandIcon(name) resolves a known wallet to its <symbol>
14
+ id, and an unknown wallet falls back to a letter tile. No per-app PNG files.
15
+
12
16
  Single root: the outer <div> is the host's required root.
13
17
  %>
14
18
  <div x-data="{
15
19
  get props() { var c = Alpine.store('dsModals').current(); return (c && c.props) || {}; },
16
20
  wallets: [],
17
21
  installs: [
18
- { name: 'Phantom', url: 'https://phantom.app/download', icon: '/wallet-phantom.png' },
19
- { name: 'Solflare', url: 'https://solflare.com/download', icon: '/wallet-solflare.png' },
20
- { name: 'Backpack', url: 'https://backpack.app/downloads', icon: '/wallet-backpack.png' }
22
+ { name: 'Phantom', url: 'https://phantom.app/download' },
23
+ { name: 'Solflare', url: 'https://solflare.com/download' },
24
+ { name: 'Backpack', url: 'https://backpack.app/downloads' }
21
25
  ],
22
26
  connecting: false,
23
27
  picking: '',
@@ -38,6 +42,10 @@
38
42
  refresh() {
39
43
  this.wallets = (window.walletProvider && window.walletProvider.available && window.walletProvider.available()) || [];
40
44
  },
45
+ brandIcon(name) {
46
+ var n = ('' + name).toLowerCase();
47
+ return ['phantom', 'solflare', 'backpack'].indexOf(n) >= 0 ? n : null;
48
+ },
41
49
  get isMobile() { return !!(window.walletProvider && window.walletProvider.isMobile && window.walletProvider.isMobile()); },
42
50
  hasWallet(name) {
43
51
  var n = ('' + name).toLowerCase();
@@ -71,6 +79,9 @@
71
79
  }"
72
80
  class="relative">
73
81
 
82
+ <%# Engine-owned brand-icon sprite — one copy; the <use> refs below paint it. %>
83
+ <%= render "studio/modals/blocks/wallet_brand_sprite" %>
84
+
74
85
  <div class="relative mb-4">
75
86
  <h3 class="text-heading font-bold text-lg text-center pt-1">Connect Wallet</h3>
76
87
  <button @click="$store.dsModals.close()"
@@ -89,7 +100,14 @@
89
100
  <template x-for="w in wallets" :key="w.name">
90
101
  <button type="button" @click="pick(w.name)" :disabled="connecting"
91
102
  class="w-full flex items-center gap-3 p-3 rounded-xl bg-surface-alt border border-strong hover:bg-surface transition text-left disabled:opacity-60 disabled:cursor-wait">
92
- <span class="w-9 h-9 rounded-lg bg-inset flex items-center justify-center text-sm font-bold text-heading" x-text="w.name.slice(0,1)"></span>
103
+ <template x-if="brandIcon(w.name)">
104
+ <span class="w-9 h-9 rounded-lg overflow-hidden flex items-center justify-center shrink-0">
105
+ <svg class="w-9 h-9" aria-hidden="true"><use :href="'#se-wallet-' + brandIcon(w.name)"></use></svg>
106
+ </span>
107
+ </template>
108
+ <template x-if="!brandIcon(w.name)">
109
+ <span class="w-9 h-9 rounded-lg bg-inset flex items-center justify-center text-sm font-bold text-heading shrink-0" x-text="w.name.slice(0,1)"></span>
110
+ </template>
93
111
  <span class="font-semibold text-heading" x-text="w.name"></span>
94
112
  <span class="ml-auto flex items-center gap-2">
95
113
  <span x-show="picking === w.name" class="inline-flex items-center gap-1.5 text-xs text-secondary"><span class="spinner" aria-hidden="true"></span>Connecting…</span>
@@ -105,7 +123,14 @@
105
123
  <template x-for="i in missingInstalls" :key="i.name">
106
124
  <a :href="i.url" target="_blank" rel="noopener noreferrer"
107
125
  class="w-full flex items-center gap-3 p-3 rounded-xl bg-surface-alt border border-strong hover:bg-surface transition no-underline">
108
- <span class="w-9 h-9 rounded-lg bg-inset flex items-center justify-center text-sm font-bold text-muted" x-text="i.name.slice(0,1)"></span>
126
+ <template x-if="brandIcon(i.name)">
127
+ <span class="w-9 h-9 rounded-lg overflow-hidden flex items-center justify-center shrink-0">
128
+ <svg class="w-9 h-9" aria-hidden="true"><use :href="'#se-wallet-' + brandIcon(i.name)"></use></svg>
129
+ </span>
130
+ </template>
131
+ <template x-if="!brandIcon(i.name)">
132
+ <span class="w-9 h-9 rounded-lg bg-inset flex items-center justify-center text-sm font-bold text-muted shrink-0" x-text="i.name.slice(0,1)"></span>
133
+ </template>
109
134
  <span class="font-semibold text-heading" x-text="i.name"></span>
110
135
  <span class="ml-auto flex items-center gap-2">
111
136
  <span class="text-xs text-muted uppercase tracking-wide">Install</span>
@@ -119,7 +144,9 @@
119
144
  <%# Mobile (no extension) — deep-link into the Phantom app. %>
120
145
  <button x-show="isMobile" type="button" @click="deepLink()"
121
146
  class="w-full flex items-center gap-3 p-3 rounded-xl bg-surface-alt border border-strong hover:bg-surface transition text-left">
122
- <span class="w-9 h-9 rounded-lg bg-inset flex items-center justify-center text-sm font-bold text-heading">P</span>
147
+ <span class="w-9 h-9 rounded-lg overflow-hidden flex items-center justify-center shrink-0">
148
+ <svg class="w-9 h-9" aria-hidden="true"><use href="#se-wallet-phantom"></use></svg>
149
+ </span>
123
150
  <span class="font-semibold text-heading">Open in Phantom app</span>
124
151
  <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="ml-auto w-4 h-4 text-muted">
125
152
  <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5" />
@@ -1,3 +1,3 @@
1
1
  module Studio
2
- VERSION = "0.19.0"
2
+ VERSION = "0.21.0"
3
3
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: studio-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McRitchie
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-07-28 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: rails
@@ -242,6 +243,7 @@ files:
242
243
  - app/views/schema/index.html.erb
243
244
  - app/views/sessions/_sso_continue.html.erb
244
245
  - app/views/sessions/new.html.erb
246
+ - app/views/studio/_age_verify_assets.html.erb
245
247
  - app/views/studio/_confirm_interstitial.html.erb
246
248
  - app/views/studio/_cropper_assets.html.erb
247
249
  - app/views/studio/admin_models/_arenas_table.html.erb
@@ -262,16 +264,22 @@ files:
262
264
  - app/views/studio/modals/_image_upload.html.erb
263
265
  - app/views/studio/modals/_saving.html.erb
264
266
  - app/views/studio/modals/auth/_resend_footer.html.erb
267
+ - app/views/studio/modals/blocks/_age_verify.html.erb
265
268
  - app/views/studio/modals/blocks/_card_header.html.erb
266
269
  - app/views/studio/modals/blocks/_cta_redirect.html.erb
270
+ - app/views/studio/modals/blocks/_digit_reel.html.erb
271
+ - app/views/studio/modals/blocks/_entry_confirmed.html.erb
267
272
  - app/views/studio/modals/blocks/_error_card.html.erb
273
+ - app/views/studio/modals/blocks/_free_entry_earned.html.erb
268
274
  - app/views/studio/modals/blocks/_onchain_success.html.erb
269
275
  - app/views/studio/modals/blocks/_processing_card.html.erb
270
276
  - app/views/studio/modals/blocks/_progress_countdown.html.erb
271
277
  - app/views/studio/modals/blocks/_progress_pill.html.erb
278
+ - app/views/studio/modals/blocks/_seeds_bar.html.erb
272
279
  - app/views/studio/modals/blocks/_shell.html.erb
273
280
  - app/views/studio/modals/blocks/_solana_tx_link.html.erb
274
281
  - app/views/studio/modals/blocks/_success_card.html.erb
282
+ - app/views/studio/modals/blocks/_wallet_brand_sprite.html.erb
275
283
  - app/views/studio/modals/shared/_age_attestation.html.erb
276
284
  - app/views/studio/modals/shared/_email_field.html.erb
277
285
  - app/views/studio/modals/templates/_action.html.erb
@@ -287,7 +295,9 @@ files:
287
295
  - app/views/style/_theme.html.erb
288
296
  - app/views/style/_tricks.html.erb
289
297
  - app/views/style/index.html.erb
298
+ - app/views/style/modals/_age_verify.html.erb
290
299
  - app/views/style/modals/_auth.html.erb
300
+ - app/views/style/modals/_entry_tokens.html.erb
291
301
  - app/views/style/modals/_onchain_tx.html.erb
292
302
  - app/views/style/modals/_wallet_connect.html.erb
293
303
  - app/views/style/modals/_wallet_deposit.html.erb
@@ -326,6 +336,7 @@ metadata:
326
336
  source_code_uri: https://github.com/amcritchie/studio-engine/tree/main
327
337
  bug_tracker_uri: https://github.com/amcritchie/studio-engine/issues
328
338
  changelog_uri: https://github.com/amcritchie/studio-engine/blob/main/CHANGELOG.md
339
+ post_install_message:
329
340
  rdoc_options: []
330
341
  require_paths:
331
342
  - lib
@@ -340,7 +351,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
340
351
  - !ruby/object:Gem::Version
341
352
  version: '0'
342
353
  requirements: []
343
- rubygems_version: 4.0.9
354
+ rubygems_version: 3.5.22
355
+ signing_key:
344
356
  specification_version: 4
345
357
  summary: Shared Rails engine providing auth, SSO, error logging, theming, and S3-backed
346
358
  image caching