@goodandready/dsh-image-gen 0.8.3 → 0.8.5

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.
Files changed (2) hide show
  1. package/lib/client.js +41 -23
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -20,38 +20,38 @@ window.__ModuleLoader__.load({
20
20
 
21
21
  // ---------------------------------------------------------------- css
22
22
  const css =
23
- '.fal_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;list-style:none;transition:border-color .16s,background .16s;overflow:hidden}' +
23
+ '.fal_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none}' +
24
24
  '.fal_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}' +
25
- '.fal_header{cursor:pointer;text-align:left;width:100%;font:inherit;background:0 0;border:0;align-items:center;gap:8px;padding:10px 14px;display:flex}' +
26
- '.fal_header:hover{background:var(--dsw-alias-interactive-bg-hover)}' +
25
+ '.fal_head{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;display:flex;align-items:center;gap:12px;padding:14px 16px}' +
26
+ '.fal_head:hover{background:var(--dsw-alias-interactive-bg-hover)}' +
27
27
  '.fal_headText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}' +
28
- '.fal_name{color:var(--dsw-alias-label-primary);font-weight:600}' +
29
- '.fal_description{color:var(--dsw-alias-label-tertiary);font-size:12px}' +
30
- '.fal_pending{color:var(--dsw-alias-state-warn-primary);font-size:12px}' +
28
+ '.fal_title{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}' +
29
+ '.fal_sub{color:var(--dsw-alias-label-secondary);font-size:13px}' +
30
+ '.fal_pending{color:var(--dsw-alias-state-warn-primary);font-size:13px}' +
31
31
  '.fal_chevron{color:var(--dsw-alias-label-tertiary);transition:transform .12s}' +
32
32
  '.fal_chevronOpen{transform:rotate(180deg)}' +
33
- '.fal_body{flex-direction:column;gap:12px;padding:0 14px 14px;display:flex}' +
34
- '.fal_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}' +
35
- '.fal_footer{justify-content:flex-end;align-items:center;gap:8px;display:flex}' +
36
- '.fal_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:12px}' +
37
- '.fal_discard,.fal_save{font:inherit;cursor:pointer;border-radius:6px;padding:5px 12px;font-size:13px}' +
33
+ '.fal_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}' +
34
+ '.fal_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:13px;padding:12px 0}' +
35
+ '.fal_foot{border-top:1px solid var(--dsw-alias-border-l2);display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px}' +
36
+ '.fal_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:13px}' +
37
+ '.fal_discard,.fal_save{appearance:none;font:inherit;cursor:pointer;border-radius:8px;padding:5px 14px;font-size:13px}' +
38
38
  '.fal_discard{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}' +
39
39
  '.fal_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}' +
40
- '.fal_save{border:1px solid var(--dsw-alias-button-info-fill);background:var(--dsw-alias-button-info-fill);color:var(--dsw-alias-label-primary-foreground)}' +
41
- '.fal_save:hover:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover)}' +
40
+ '.fal_save{border:1px solid transparent;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}' +
41
+ '.fal_save:hover:not(:disabled){opacity:.9}' +
42
42
  '.fal_discard:active:not(:disabled),.fal_save:active:not(:disabled){transform:translateY(1px)}' +
43
43
  '.fal_discard:focus-visible:not(:disabled),.fal_save:focus-visible:not(:disabled){outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}' +
44
44
  '.fal_discard:disabled,.fal_save:disabled{opacity:.5;cursor:default}' +
45
- '.fal_field{flex-direction:column;gap:4px;display:flex}' +
46
- '.fal_head{align-items:center;gap:8px;display:flex}' +
45
+ '.fal_field{display:flex;flex-direction:column;gap:6px;padding:12px 0}' +
46
+ '.fal_fieldHead{align-items:center;gap:12px;display:flex}' +
47
47
  '.fal_label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500}' +
48
48
  '.fal_badges{align-items:center;gap:6px;display:flex}' +
49
49
  '.fal_badge{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-state-business-primary);border-radius:999px;padding:1px 6px;font-size:11px}' +
50
50
  '.fal_reset{color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;padding:0;font-size:11px}' +
51
51
  '.fal_reset:hover:not(:disabled){text-decoration:underline}' +
52
52
  '.fal_reset:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}' +
53
- '.fal_input,.fal_select{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:6px;padding:6px 8px;font-size:13px;min-height:32px}' +
54
- '.fal_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:13px}' +
53
+ '.fal_input,.fal_select{height:34px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px}' +
54
+ '.fal_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px}' +
55
55
  '.fal_input:disabled,.fal_select:disabled{opacity:.6}' +
56
56
  '.fal_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}' +
57
57
  '.fal_invalid{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}' +
@@ -72,20 +72,20 @@ window.__ModuleLoader__.load({
72
72
  cardOpen: 'fal_cardOpen',
73
73
  chevron: 'fal_chevron',
74
74
  chevronOpen: 'fal_chevronOpen',
75
- description: 'fal_description',
75
+ description: 'fal_sub',
76
76
  discard: 'fal_discard',
77
77
  failed: 'fal_failed',
78
78
  field: 'fal_field',
79
- footer: 'fal_footer',
80
- head: 'fal_head',
81
- header: 'fal_header',
79
+ footer: 'fal_foot',
80
+ head: 'fal_fieldHead',
81
+ header: 'fal_head',
82
82
  headText: 'fal_headText',
83
83
  hint: 'fal_hint',
84
84
  input: 'fal_input',
85
85
  inputInvalid: 'fal_inputInvalid',
86
86
  invalid: 'fal_invalid',
87
87
  label: 'fal_label',
88
- name: 'fal_name',
88
+ name: 'fal_title',
89
89
  pending: 'fal_pending',
90
90
  readOnly: 'fal_readOnly',
91
91
  reset: 'fal_reset',
@@ -769,7 +769,25 @@ window.__ModuleLoader__.load({
769
769
  }
770
770
 
771
771
  function apply(ctx) {
772
- ctx.effect(() => ctx.locale.register(NS, { en, ru }), 'dsh-image-gen: dictionaries')
772
+ // Язык может принести не только плагин: словарные пакеты объявляют
773
+ // русский для чужих пространств. Ядро на повторное объявление той же
774
+ // пары «пространство + язык» бросает исключение, и незащищённый вызов
775
+ // уносил с собой весь плагин — в интерфейсе это выглядело как «Failed to
776
+ // load plugins» с перечнем ни в чём не повинных соседей.
777
+ //
778
+ // Поэтому каждый язык объявляется отдельно и по-хорошему: заняли до нас —
779
+ // уступаем, свой английский при этом всё равно встаёт на место.
780
+ const addLocale = (locale, dictionary) => {
781
+ try {
782
+ return ctx.locale.register(NS, locale, dictionary)
783
+ } catch (alreadyTaken) {
784
+ return () => {}
785
+ }
786
+ }
787
+ ctx.effect(() => {
788
+ const undo = [addLocale('en', en), addLocale('ru', ru)]
789
+ return () => { for (const off of undo) off() }
790
+ }, 'dsh-image-gen: dictionaries')
773
791
  // Подпись раздела рисует не наш компонент, а боковой список, поэтому
774
792
  // props.t сюда не доедет: берём переводчик, привязанный к namespace.
775
793
  const t = ctx.locale.bind(NS)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-image-gen",
3
- "version": "0.8.3",
3
+ "version": "0.8.5",
4
4
  "description": "Image generation for DeepSeek Harness: a generate_image tool with pluggable providers — the FAL queue, any OpenAI-compatible images API, or a ChatGPT/Grok subscription with no API key at all. The picture is shown inline in the conversation; the model receives either a link (works with any chat model) or the image itself (needs dsh-vision-bridge or a vision-capable model).",
5
5
  "keywords": [
6
6
  "deepseek-harness",