@5even7/dlc-ui 0.2.17 → 0.2.18

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5even7/dlc-ui",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -72,7 +72,8 @@
72
72
  "types",
73
73
  "README.md",
74
74
  "LICENSE",
75
- "CHANGELOG.md"
75
+ "CHANGELOG.md",
76
+ "THIRD_PARTY_NOTICES.md"
76
77
  ],
77
78
  "peerDependencies": {
78
79
  "vue": ">=2.7.0"
package/styles/emo.css CHANGED
@@ -28,6 +28,62 @@
28
28
  overflow: hidden;
29
29
  }
30
30
 
31
- .dlc-emo-root[data-paused='true'] {
32
- --dlc-emo-play-state: paused;
31
+
32
+ /* Grok SVG renderer */
33
+
34
+ .dlc-grok {
35
+ display: block;
36
+ width: 100% !important;
37
+ height: 100% !important;
38
+ will-change: transform;
39
+ }
40
+
41
+ .dlc-grok__body {
42
+ fill: #2f86ed;
43
+ }
44
+
45
+ .dlc-grok__eye {
46
+ fill: #fffdf7;
47
+ }
48
+
49
+ .dlc-grok.act-bounce { animation: dlc-grok-bounce 0.85s ease; }
50
+ .dlc-grok.act-tilt { animation: dlc-grok-tilt 0.8s ease; }
51
+ .dlc-grok.act-scan .dlc-grok__eyes { animation: dlc-grok-scan 0.8s ease; }
52
+ .dlc-grok.act-turn { animation: dlc-grok-turn 0.9s ease; }
53
+ .dlc-grok.act-pulse { animation: dlc-grok-pulse 0.9s ease; }
54
+ .dlc-grok.act-glitch { animation: dlc-grok-glitch 0.55s steps(2); }
55
+
56
+ @keyframes dlc-grok-bounce {
57
+ 0%, 100% { transform: translateY(0); }
58
+ 40% { transform: translateY(-34px) scale(0.96, 1.04); }
59
+ 65% { transform: translateY(4px) scale(1.05, 0.94); }
60
+ }
61
+
62
+ @keyframes dlc-grok-tilt {
63
+ 35% { transform: rotate(-19deg) translate(-8px, 5px); }
64
+ 70% { transform: rotate(8deg); }
65
+ }
66
+
67
+ @keyframes dlc-grok-scan {
68
+ 0%, 100% { transform: translate(0); }
69
+ 30% { transform: translate(-24px, 2px); }
70
+ 70% { transform: translate(24px, -2px); }
71
+ }
72
+
73
+ @keyframes dlc-grok-turn {
74
+ 0%, 100% { transform: rotateY(0); }
75
+ 48% { transform: rotateY(180deg) scale(0.82); }
76
+ }
77
+
78
+ @keyframes dlc-grok-pulse {
79
+ 0%, 100% { transform: scale(1); }
80
+ 35% { transform: scale(1.08, 0.92); }
81
+ 65% { transform: scale(0.94, 1.08); }
82
+ }
83
+
84
+ @keyframes dlc-grok-glitch {
85
+ 0%, 100% { transform: translate(0); }
86
+ 25% { transform: translate(-9px, 3px); filter: drop-shadow(8px 0 #ff9500); }
87
+ 50% { transform: translate(10px, -3px); filter: drop-shadow(-8px 0 #79e2d0); }
88
+ 75% { transform: translate(-4px, 1px); }
33
89
  }
package/types/emo.d.ts CHANGED
@@ -1,14 +1,37 @@
1
1
  export {
2
2
  EmoOptions,
3
+ MiaoEmoOptions,
4
+ GrokEmoOptions,
5
+ EmoCommonOptions,
3
6
  EmoPreset,
4
7
  EmoTypeDefinition,
5
8
  EmoController,
9
+ EmoType,
10
+ EmoEngine,
11
+ EmoPartColors,
6
12
  MiaoPartColors,
7
13
  MiaoPartColorKey,
14
+ MiaoName,
15
+ GrokPartColors,
16
+ GrokPartColorKey,
17
+ GrokShape,
18
+ GrokName,
19
+ GrokStateCategory,
20
+ GrokStateMeta,
21
+ GrokCategoryDef,
22
+ EmoPreviewCardOptions,
23
+ EmoPreviewCardController,
8
24
  EMO_TYPES,
9
25
  EMO_PRESETS,
10
26
  EMO_CATEGORIES,
27
+ GROK_CATEGORIES,
28
+ GROK_NAMES,
29
+ GROK_STATE_META,
30
+ getGrokNamesFor,
31
+ getGrokStateMeta,
32
+ getEmoType,
11
33
  getEmoPreset,
12
34
  getEmoAnimation,
13
- createEmo
35
+ createEmo,
36
+ createEmoPreviewCard
14
37
  } from './index.js';
package/types/index.d.ts CHANGED
@@ -27,6 +27,115 @@ export type MiaoPartColorKey =
27
27
  */
28
28
  export type MiaoPartColors = Partial<Record<MiaoPartColorKey, string | null>>;
29
29
 
30
+ export type EmoType = 'miao' | 'grok';
31
+ export type EmoEngine = 'lottie' | 'grok';
32
+
33
+ export type GrokPartColorKey = 'body' | 'eyes';
34
+
35
+ /**
36
+ * Per-part color overrides for a Grok emoji. Values are any CSS color;
37
+ * null or missing keys keep the original color.
38
+ */
39
+ export type GrokPartColors = Partial<Record<GrokPartColorKey, string | null>>;
40
+
41
+ export type EmoPartColors = MiaoPartColors | GrokPartColors;
42
+
43
+ export type GrokShape =
44
+ | 'blob'
45
+ | 'pebble'
46
+ | 'squircle'
47
+ | 'capsule'
48
+ | 'triangle'
49
+ | 'hex'
50
+ | 'cloud'
51
+ | 'drop';
52
+
53
+ export type MiaoName =
54
+ | 'angry'
55
+ | 'cry'
56
+ | 'sad'
57
+ | 'sigh'
58
+ | 'investigate'
59
+ | 'mute'
60
+ | 'ponder'
61
+ | 'question'
62
+ | 'static'
63
+ | 'asleep'
64
+ | 'yawn'
65
+ | 'badminton'
66
+ | 'confident'
67
+ | 'laugh'
68
+ | 'leisure'
69
+ | 'music'
70
+ | 'smile'
71
+ | 'yummy'
72
+ | 'mock'
73
+ | 'shy'
74
+ | 'snigger'
75
+ | 'panic'
76
+ | 'shocked';
77
+
78
+ export type GrokName =
79
+ | 'sleeping'
80
+ | 'idle'
81
+ | 'listening'
82
+ | 'thinking'
83
+ | 'searching'
84
+ | 'working'
85
+ | 'happy'
86
+ | 'surprised'
87
+ | 'angry'
88
+ | 'sad'
89
+ | 'loading'
90
+ | 'confused'
91
+ | 'receiving';
92
+
93
+ /**
94
+ * Grok state presentation categories. Only organizes Docs / Playground
95
+ * display; all 13 public names stay valid regardless of category.
96
+ */
97
+ export type GrokStateCategory = 'emotion' | 'agent' | 'lifecycle';
98
+
99
+ /**
100
+ * Presentation metadata for one Grok state. A Grok `name` is a dynamic state
101
+ * module (expression pool + cadence + blink + body motion), so its static
102
+ * first frame may look similar to other states even when the dynamics differ.
103
+ */
104
+ export interface GrokStateMeta {
105
+ category: GrokStateCategory;
106
+ /** Chinese display name. */
107
+ label: string;
108
+ /** Short usage note shown on Docs cards. */
109
+ description?: string;
110
+ /** 'upstream' = ported from LaoA-GrokBot; 'dlc' reserved for DLC extensions. */
111
+ source: 'upstream' | 'dlc';
112
+ }
113
+
114
+ export interface GrokCategoryDef {
115
+ key: GrokStateCategory;
116
+ label: string;
117
+ }
118
+
119
+ export interface EmoPreviewCardOptions {
120
+ container: HTMLElement;
121
+ options: EmoOptions;
122
+ /** Auto-pause after this many ms of preview (default 2800). */
123
+ playFor?: number;
124
+ /** Keep the card static when the user prefers reduced motion (default true). */
125
+ respectReducedMotion?: boolean;
126
+ /** Pause the preview when the card leaves the viewport (default false). */
127
+ trackViewport?: boolean;
128
+ }
129
+
130
+ export interface EmoPreviewCardController {
131
+ element: HTMLElement;
132
+ controller: EmoController;
133
+ start(): void;
134
+ stop(): void;
135
+ setViewportVisible(visible: boolean): void;
136
+ dispose(): void;
137
+ }
138
+
30
139
  export interface CapsulePreset {
31
140
  id: string;
32
141
  code: string;
@@ -51,21 +160,25 @@ export interface ProgressPreset {
51
160
  }
52
161
 
53
162
  export interface EmoPreset {
54
- type: string;
163
+ type: EmoType;
55
164
  name: string;
56
165
  label: string;
57
166
  category: string;
58
167
  width: number;
59
168
  height: number;
60
- frames: number;
61
- fps: number;
169
+ engine: EmoEngine;
170
+ frames?: number;
171
+ fps?: number;
62
172
  }
63
173
 
64
174
  export interface EmoTypeDefinition {
65
- type: string;
175
+ type: EmoType;
66
176
  label: string;
177
+ defaultName: string;
178
+ engine: EmoEngine;
67
179
  names: string[];
68
180
  partColors: string[];
181
+ shapes?: string[];
69
182
  }
70
183
 
71
184
  export interface Copy {
@@ -154,21 +267,15 @@ export interface ColorBackgroundOptions {
154
267
  [key: string]: unknown;
155
268
  }
156
269
 
157
- export interface EmoOptions {
158
- type?: string;
159
- name?: string;
270
+ export interface EmoCommonOptions {
160
271
  width?: number | string;
161
272
  height?: number | string;
162
- partColors?: MiaoPartColors;
163
273
  speed?: number;
164
274
  loop?: boolean;
165
275
  autoplay?: boolean;
166
- direction?: 'forward' | 'reverse' | 1 | -1;
276
+ paused?: boolean;
167
277
  opacity?: number;
168
278
  fit?: 'contain' | 'cover' | 'fill';
169
- renderer?: 'svg' | 'canvas';
170
- paused?: boolean;
171
- segment?: [number, number] | null;
172
279
  background?: string;
173
280
  label?: string;
174
281
  instanceName?: string;
@@ -176,6 +283,25 @@ export interface EmoOptions {
176
283
  [key: string]: unknown;
177
284
  }
178
285
 
286
+ export interface MiaoEmoOptions extends EmoCommonOptions {
287
+ type?: 'miao';
288
+ name?: MiaoName;
289
+ partColors?: MiaoPartColors;
290
+ renderer?: 'svg' | 'canvas';
291
+ direction?: 'forward' | 'reverse' | 1 | -1;
292
+ segment?: [number, number] | null;
293
+ }
294
+
295
+ export interface GrokEmoOptions extends EmoCommonOptions {
296
+ type: 'grok';
297
+ name?: GrokName;
298
+ partColors?: GrokPartColors;
299
+ shape?: GrokShape;
300
+ interactive?: boolean;
301
+ }
302
+
303
+ export type EmoOptions = MiaoEmoOptions | GrokEmoOptions;
304
+
179
305
  export interface Emitter {
180
306
  on(event: string, handler: (...args: any[]) => void): () => void;
181
307
  off(event: string, handler: (...args: any[]) => void): boolean;
@@ -299,18 +425,20 @@ export interface EmoController extends Emitter {
299
425
  stop(): this;
300
426
  setPaused(value: boolean): this;
301
427
  setSpeed(value: number): this;
302
- setDirection(value: EmoOptions['direction']): this;
303
- setSegment(value: EmoOptions['segment']): this;
428
+ setDirection(value: MiaoEmoOptions['direction']): this;
429
+ setSegment(value: [number, number] | null): this;
304
430
  setName(value: string): this;
305
- setType(value: string): this;
306
- setPartColors(value: MiaoPartColors): this;
431
+ setType(value: EmoType): this;
432
+ setPartColors(value: EmoPartColors): this;
307
433
  setOpacity(value: number): this;
308
434
  setBackground(value: string): this;
309
435
  setSize(width?: number | string, height?: number | string): this;
310
- setFit(value: EmoOptions['fit']): this;
311
- setRenderer(value: EmoOptions['renderer']): this;
436
+ setFit(value: EmoCommonOptions['fit']): this;
437
+ setRenderer(value: 'svg' | 'canvas'): this;
312
438
  setLoop(value: boolean): this;
313
439
  setAutoplay(value: boolean): this;
440
+ setShape(value: GrokShape): this;
441
+ setInteractive(value: boolean): this;
314
442
  setLabel(value: string): this;
315
443
  dispose(): void;
316
444
  readonly speed: number;
@@ -322,8 +450,10 @@ export interface EmoController extends Emitter {
322
450
  readonly renderer: 'svg' | 'canvas';
323
451
  readonly paused: boolean;
324
452
  readonly segment: [number, number] | null;
325
- readonly partColors: MiaoPartColors;
453
+ readonly partColors: EmoPartColors;
326
454
  readonly background: string;
455
+ readonly shape: GrokShape;
456
+ readonly interactive: boolean;
327
457
  }
328
458
 
329
459
  export declare class ProgressCapsuleController {
@@ -350,6 +480,7 @@ export declare function createCapsule(container: HTMLElement, options?: CapsuleO
350
480
  export declare function createProgressCapsule(container: HTMLElement, options?: ProgressOptions): ProgressController;
351
481
  export declare function createColorBackground(host: HTMLElement, options?: ColorBackgroundOptions): ColorBackgroundController;
352
482
  export declare function createEmo(container: HTMLElement, options?: EmoOptions): EmoController;
483
+ export declare function createEmoPreviewCard(options: EmoPreviewCardOptions): EmoPreviewCardController;
353
484
 
354
485
  export declare const PRESETS: CapsulePreset[];
355
486
  export declare const PROGRESS_PRESETS: ProgressPreset[];
@@ -358,13 +489,19 @@ export declare function getPreset(kind: 'capsule' | 'progress', ref: string): Ca
358
489
  export declare const EMO_TYPES: EmoTypeDefinition[];
359
490
  export declare const EMO_PRESETS: EmoPreset[];
360
491
  export declare const EMO_CATEGORIES: Record<string, string>;
492
+ export declare function getEmoType(type?: string): EmoTypeDefinition;
361
493
  export declare function getEmoPreset(type?: string, name?: string): EmoPreset;
362
494
  export declare function getEmoAnimation(type?: string, name?: string): any;
495
+ export declare const GROK_CATEGORIES: GrokCategoryDef[];
496
+ export declare const GROK_NAMES: GrokName[];
497
+ export declare const GROK_STATE_META: Record<GrokName, GrokStateMeta>;
498
+ export declare function getGrokNamesFor(tab: GrokStateCategory | 'all' | string): GrokName[];
499
+ export declare function getGrokStateMeta(name: string): GrokStateMeta;
363
500
 
364
501
  export declare const DEFAULTS: {
365
502
  capsule: Required<Pick<CapsuleOptions, 'width' | 'height' | 'quality' | 'respectReducedMotion' | 'mouseColor' | 'renderer' | 'textRatio' | 'renderScale' | 'powerPreference' | 'fps' | 'paused' | 'static'>>;
366
503
  progress: Required<Pick<ProgressOptions, 'width' | 'height' | 'min' | 'max' | 'step' | 'draggable' | 'keyboard' | 'disabled' | 'readonly' | 'direction' | 'precision' | 'valueSuffix' | 'edgeStyle' | 'quality' | 'respectReducedMotion' | 'renderer' | 'textRatio' | 'showValue' | 'renderScale' | 'powerPreference' | 'fps' | 'paused' | 'static'>>;
367
- emo: Required<Pick<EmoOptions, 'type' | 'name' | 'width' | 'height' | 'partColors' | 'speed' | 'loop' | 'autoplay' | 'direction' | 'opacity' | 'fit' | 'renderer' | 'paused' | 'background' | 'respectReducedMotion'>> & Pick<EmoOptions, 'segment'>;
504
+ emo: Required<Pick<EmoCommonOptions, 'width' | 'height' | 'speed' | 'loop' | 'autoplay' | 'paused' | 'opacity' | 'fit' | 'background' | 'respectReducedMotion'>> & Pick<MiaoEmoOptions, 'type' | 'name' | 'partColors' | 'direction' | 'renderer' | 'segment'>;
368
505
  };
369
506
 
370
507
  export declare const COPY: Copy;
package/types/vue3.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CapsuleOptions, ProgressOptions, EmoOptions } from './index.js';
1
+ import { CapsuleOptions, ProgressOptions, MiaoEmoOptions, GrokEmoOptions, EmoCommonOptions } from './index.js';
2
2
 
3
3
  export interface CosmicCapsuleComponent {
4
4
  name: 'dlc-capsule';
@@ -95,7 +95,7 @@ export interface ColorBackgroundComponent {
95
95
 
96
96
  export interface EmoComponent {
97
97
  name: 'dlc-emo';
98
- props: (keyof EmoOptions)[];
98
+ props: (keyof MiaoEmoOptions | keyof GrokEmoOptions)[];
99
99
  emits: string[];
100
100
  mounted: () => void;
101
101
  beforeUnmount: () => void;
@@ -106,18 +106,20 @@ export interface EmoComponent {
106
106
  stop(): any;
107
107
  setPaused(value: boolean): any;
108
108
  setSpeed(value: number): any;
109
- setDirection(value: EmoOptions['direction']): any;
110
- setSegment(value: EmoOptions['segment']): any;
109
+ setDirection(value: MiaoEmoOptions['direction']): any;
110
+ setSegment(value: [number, number] | null): any;
111
111
  setName(value: string): any;
112
112
  setType(value: string): any;
113
- setPartColors(value: import('./index').MiaoPartColors): any;
113
+ setPartColors(value: import('./index').EmoPartColors): any;
114
114
  setOpacity(value: number): any;
115
115
  setBackground(value: string): any;
116
116
  setSize(width?: number | string, height?: number | string): any;
117
- setFit(value: EmoOptions['fit']): any;
118
- setRenderer(value: EmoOptions['renderer']): any;
117
+ setFit(value: EmoCommonOptions['fit']): any;
118
+ setRenderer(value: 'svg' | 'canvas'): any;
119
119
  setLoop(value: boolean): any;
120
120
  setAutoplay(value: boolean): any;
121
+ setShape(value: import('./index').GrokShape): any;
122
+ setInteractive(value: boolean): any;
121
123
  setLabel(value: string): any;
122
124
  getController(): any;
123
125
  };