@nocturnium/svelte-ide 1.4.0 → 1.5.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.
@@ -18,7 +18,7 @@ const JS_SNIPPETS = [
18
18
  prefix: 'log',
19
19
  body: 'console.log($1);$0',
20
20
  description: 'Log to console',
21
- languages: ['javascript', 'typescript', 'javascriptreact', 'typescriptreact'],
21
+ languages: ['javascript', 'typescript'],
22
22
  category: 'Debug',
23
23
  isUserDefined: false,
24
24
  usageCount: 0,
@@ -42,7 +42,7 @@ const JS_SNIPPETS = [
42
42
  prefix: 'af',
43
43
  body: 'const ${1:name} = (${2:params}) => {\n\t$0\n};',
44
44
  description: 'Arrow function',
45
- languages: ['javascript', 'typescript', 'javascriptreact', 'typescriptreact'],
45
+ languages: ['javascript', 'typescript'],
46
46
  category: 'Functions',
47
47
  isUserDefined: false,
48
48
  usageCount: 0,
@@ -126,7 +126,7 @@ const JS_SNIPPETS = [
126
126
  prefix: 'imp',
127
127
  body: "import { $2 } from '$1';$0",
128
128
  description: 'Named import',
129
- languages: ['javascript', 'typescript', 'javascriptreact', 'typescriptreact'],
129
+ languages: ['javascript', 'typescript'],
130
130
  category: 'Modules',
131
131
  isUserDefined: false,
132
132
  usageCount: 0,
@@ -68,7 +68,9 @@
68
68
  {#if installed}
69
69
  <Button variant="danger" size="xs" onclick={onUninstall}>Uninstall</Button>
70
70
  {:else if plugin.status === 'deployed'}
71
- <Button variant="primary" size="xs" onclick={onInstall}>Install</Button>
71
+ <Button variant="primary" size="xs" class="plugin-card__install" onclick={onInstall}>
72
+ Install
73
+ </Button>
72
74
  {/if}
73
75
  </div>
74
76
  </div>
@@ -141,4 +143,22 @@
141
143
  display: flex;
142
144
  align-items: flex-start;
143
145
  }
146
+
147
+ /*
148
+ * Install CTA: keep the embedded panel in ONE accent story (wave-blue),
149
+ * instead of the ember-orange `primary` fill competing with the surrounding
150
+ * blue chrome. White-on-blue uses --ide-interactive-strong (deep ocean) for
151
+ * AA-safe contrast (~5.3:1), not the lighter wave (~3.4:1, fails AA). The
152
+ * accent stays BLUE per the owner brand decision.
153
+ */
154
+ .plugin-card__actions :global(.ide-button.plugin-card__install) {
155
+ background: var(--ide-interactive-strong);
156
+ color: #fff;
157
+ border-color: var(--ide-interactive-strong);
158
+ }
159
+
160
+ .plugin-card__actions :global(.ide-button.plugin-card__install:hover:not(:disabled)) {
161
+ background: color-mix(in srgb, var(--ide-interactive-strong) 88%, white);
162
+ border-color: color-mix(in srgb, var(--ide-interactive-strong) 88%, white);
163
+ }
144
164
  </style>
@@ -54,7 +54,13 @@
54
54
  <Badge variant="success" size="sm" dot>Live</Badge>
55
55
  {/if}
56
56
  </div>
57
- <Button variant="ghost" size="xs" onclick={() => (showCreateForm = true)}>
57
+ <Button
58
+ variant="ghost"
59
+ size="xs"
60
+ title="Demo only — the create-proposal flow is illustrative on this static host"
61
+ aria-label="New plugin proposal (demo only)"
62
+ onclick={() => (showCreateForm = true)}
63
+ >
58
64
  {#snippet icon()}<Icon name="plus" size={14} />{/snippet}
59
65
  New
60
66
  </Button>
@@ -110,7 +116,9 @@
110
116
  {:else if activeTab === 'installed'}
111
117
  {#if installedPlugins.length === 0}
112
118
  <div class="plugin-panel__empty">
113
- <Icon name="plugin" size={32} />
119
+ <!-- Static container glyph, not the radial `plugin` spoke (which mirrors
120
+ the `loading` glyph and reads as a spinner over this empty copy). -->
121
+ <Icon name="folder" size={32} />
114
122
  <p>No plugins installed</p>
115
123
  <Button variant="secondary" size="sm" onclick={() => (activeTab = 'available')}>
116
124
  Browse Available
@@ -162,7 +170,13 @@
162
170
  <div class="plugin-panel__empty">
163
171
  <Icon name="file" size={32} />
164
172
  <p>No proposals yet</p>
165
- <Button variant="primary" size="sm" onclick={() => (showCreateForm = true)}>
173
+ <Button
174
+ variant="primary"
175
+ size="sm"
176
+ title="Demo only — the create-proposal flow is illustrative on this static host"
177
+ aria-label="Create plugin proposal (demo only)"
178
+ onclick={() => (showCreateForm = true)}
179
+ >
166
180
  Create Plugin
167
181
  </Button>
168
182
  </div>
@@ -64,12 +64,19 @@
64
64
  --ide-interactive-focus: var(--color-nocturnium-aurora-blue);
65
65
  --ide-interactive-muted: color-mix(in srgb, var(--ide-interactive) 70%, transparent);
66
66
  --ide-interactive-rgb: 74, 141, 183;
67
+ /* Deeper blue for FILLED active/selected states paired with white text:
68
+ white on --ide-interactive (#4a8db7) is only ~3.4:1, below WCAG AA; white on
69
+ this ocean blue (#2d5a7b) is ~5.3:1. Use for active pills/toggles/tabs. */
70
+ --ide-interactive-strong: var(--color-nocturnium-ocean);
67
71
 
68
72
  /* Primary action — the signature warm ember accent, shared as a single
69
73
  source of truth by primary buttons and badges so "primary" reads the
70
74
  same everywhere. */
71
75
  --ide-primary: var(--ide-interactive-active);
72
- --ide-primary-hover: var(--ide-interactive-hover);
76
+ /* Primary hover is a controlled lift of the SAME ember (one deliberate primary),
77
+ not a jump to the separate flame hue — keeps the action color cohesive and
78
+ keeps dark-ink (--ide-text-inverse) label contrast comfortably above AA. */
79
+ --ide-primary-hover: color-mix(in srgb, var(--ide-primary) 85%, white);
73
80
 
74
81
  /* IDE Accent Colors */
75
82
  --ide-accent: var(--color-nocturnium-wave);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocturnium/svelte-ide",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Svelte 5 code editor and IDE building blocks — custom editor, syntax highlighting, code folding, multi-cursor, LSP client, and optional realtime collaboration.",
5
5
  "author": "Nocturnium & Jordan Dziat <hello@nocturnium.ai> (https://nocturnium.ai)",
6
6
  "license": "MIT",