@ryanhelsing/ry-ui 1.0.1 → 1.0.2

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/README.md CHANGED
@@ -19,6 +19,8 @@ ry-ui normalizes this. No decisions to make. No architecture to debate. An LLM c
19
19
 
20
20
  - [ ] Slider, Knob, Menu, Placeholder, Step/Wizard, Loader/Progress, Breadcrumb, Comment/Feed, Statistic/Graph, Hero, Calendar, Rating , Search, Shape, Sticky, color-picker, dialog/alert, tree, carousel, qr-code, diff, split-panel, format-bytes-number-currency(rails things), mutation-observer and resize observer,
21
21
 
22
+ - [ ] This is a theme on its own: https://codepen.io/oathanrex/pen/EayVMqZ
23
+
22
24
  - [ ] bring in examples and extract and normalize - Flat Clean (accord/tailwind) / Flat Fun Waves (zevo) / Game (mario/astrobot/stardew/animal crossing) / Brute (square game) / Skeuomorphic / Glass ( dark and light, color sets 1,2,3 )
23
25
  - [ ] cross-platform transpiler - Swift/SwiftUI (see `docs/arch/cross-platform-transpiler.md`)
24
26
  - [ ] animation system with GSAP (see `docs/plans/animation-system.md`)
package/USING_CDN.md CHANGED
@@ -388,3 +388,204 @@ ry-ui targets ES2022 and modern browsers:
388
388
  - Safari 15.4+
389
389
 
390
390
  No IE11 support. No polyfills included.
391
+
392
+ ---
393
+
394
+ ## LLM Quick Reference
395
+
396
+ Every component with copy-paste examples.
397
+
398
+ ### Layout (CSS-only, no JS)
399
+ ```html
400
+ <ry-page>
401
+ <ry-header sticky>Header</ry-header>
402
+ <ry-main>
403
+ <ry-section>Content</ry-section>
404
+ </ry-main>
405
+ <ry-footer>Footer</ry-footer>
406
+ </ry-page>
407
+
408
+ <ry-grid cols="3">
409
+ <div>1</div><div>2</div><div>3</div>
410
+ </ry-grid>
411
+
412
+ <ry-stack>Vertical stack</ry-stack>
413
+ <ry-cluster>Horizontal cluster</ry-cluster>
414
+ <ry-card>Card container</ry-card>
415
+ <ry-divider></ry-divider>
416
+ ```
417
+
418
+ ### Button
419
+ ```html
420
+ <ry-button>Default</ry-button>
421
+ <ry-button variant="primary">Primary</ry-button>
422
+ <ry-button variant="secondary">Secondary</ry-button>
423
+ <ry-button variant="danger">Danger</ry-button>
424
+ <ry-button disabled>Disabled</ry-button>
425
+ <ry-button modal="modal-id">Opens modal</ry-button>
426
+ <ry-button drawer="drawer-id">Opens drawer</ry-button>
427
+ ```
428
+
429
+ ### Modal
430
+ ```html
431
+ <ry-button modal="my-modal">Open</ry-button>
432
+ <ry-modal id="my-modal" title="Title">
433
+ Content here
434
+ <div slot="footer"><ry-button>Close</ry-button></div>
435
+ </ry-modal>
436
+ ```
437
+
438
+ ### Drawer
439
+ ```html
440
+ <ry-button drawer="my-drawer">Open</ry-button>
441
+ <ry-drawer id="my-drawer" side="left" title="Menu">
442
+ <!-- side: left | right | bottom -->
443
+ Drawer content
444
+ </ry-drawer>
445
+ ```
446
+
447
+ ### Accordion
448
+ ```html
449
+ <ry-accordion multiple>
450
+ <!-- multiple: allow many open at once -->
451
+ <ry-accordion-item title="Section 1" open>Content 1</ry-accordion-item>
452
+ <ry-accordion-item title="Section 2">Content 2</ry-accordion-item>
453
+ </ry-accordion>
454
+ ```
455
+
456
+ ### Tabs
457
+ ```html
458
+ <ry-tabs>
459
+ <ry-tab title="Tab 1" active>Content 1</ry-tab>
460
+ <ry-tab title="Tab 2">Content 2</ry-tab>
461
+ </ry-tabs>
462
+ ```
463
+
464
+ ### Dropdown
465
+ ```html
466
+ <ry-dropdown>
467
+ <ry-button slot="trigger">Menu</ry-button>
468
+ <ry-menu>
469
+ <ry-menu-item>Item 1</ry-menu-item>
470
+ <ry-menu-item>Item 2</ry-menu-item>
471
+ </ry-menu>
472
+ </ry-dropdown>
473
+ ```
474
+
475
+ ### Select
476
+ ```html
477
+ <ry-select placeholder="Choose..." name="field" value="preselected">
478
+ <ry-option value="a">Option A</ry-option>
479
+ <ry-option value="b" disabled>Option B</ry-option>
480
+ </ry-select>
481
+ ```
482
+
483
+ ### Switch
484
+ ```html
485
+ <ry-switch name="notifications" checked></ry-switch>
486
+ <ry-switch disabled></ry-switch>
487
+ ```
488
+
489
+ ### Field (form wrapper)
490
+ ```html
491
+ <ry-field label="Email">
492
+ <input type="email" name="email">
493
+ </ry-field>
494
+ ```
495
+
496
+ ### Tooltip
497
+ ```html
498
+ <ry-tooltip content="Help text" position="top">
499
+ <!-- position: top | bottom | left | right -->
500
+ <span>Hover me</span>
501
+ </ry-tooltip>
502
+ ```
503
+
504
+ ### Alert
505
+ ```html
506
+ <ry-alert type="info">Info message</ry-alert>
507
+ <ry-alert type="success">Success!</ry-alert>
508
+ <ry-alert type="warning">Warning!</ry-alert>
509
+ <ry-alert type="danger" dismissible>Error (can dismiss)</ry-alert>
510
+ ```
511
+
512
+ ### Badge
513
+ ```html
514
+ <ry-badge>Default</ry-badge>
515
+ <ry-badge variant="success">Active</ry-badge>
516
+ ```
517
+
518
+ ### Toast (JS only)
519
+ ```javascript
520
+ RyToast.success('Saved!');
521
+ RyToast.error('Failed!');
522
+ RyToast.info('FYI');
523
+ RyToast.warning('Careful!');
524
+ RyToast.show({ message: 'Custom', variant: 'info', duration: 5000 });
525
+ ```
526
+
527
+ ### Slider
528
+ ```html
529
+ <ry-slider min="0" max="100" value="50" step="1"></ry-slider>
530
+ <ry-slider range start="20" end="80"></ry-slider>
531
+ <ry-slider labeled tooltip vertical></ry-slider>
532
+ ```
533
+
534
+ ### Knob
535
+ ```html
536
+ <ry-knob min="0" max="100" value="50" label="Volume"></ry-knob>
537
+ <ry-knob labels="Off,Low,Med,High" step="1"></ry-knob>
538
+ ```
539
+
540
+ ### Color Picker
541
+ ```html
542
+ <ry-color-picker value="#ff0000" format="hex"></ry-color-picker>
543
+ <ry-color-picker opacity inline swatches="#f00;#0f0;#00f"></ry-color-picker>
544
+
545
+ <ry-color-input value="#ff0000" placeholder="Pick color"></ry-color-input>
546
+ ```
547
+
548
+ ### Toggle Button (radio group)
549
+ ```html
550
+ <ry-toggle-button name="align" value="left" pressed>Left</ry-toggle-button>
551
+ <ry-toggle-button name="align" value="center">Center</ry-toggle-button>
552
+ <ry-toggle-button name="align" value="right">Right</ry-toggle-button>
553
+ ```
554
+
555
+ ### Icon
556
+ ```html
557
+ <ry-icon name="check" size="24" label="Checkmark"></ry-icon>
558
+ ```
559
+
560
+ ### Code Block
561
+ ```html
562
+ <ry-code language="js" title="Example" line-numbers>
563
+ const x = 1;
564
+ </ry-code>
565
+ <!-- language: js | css | html | json | text -->
566
+ ```
567
+
568
+ ### Theme Toggle
569
+ ```html
570
+ <ry-theme-toggle themes="light,dark,ocean"></ry-theme-toggle>
571
+ ```
572
+
573
+ ### Events (all components)
574
+ ```javascript
575
+ // All events prefixed with ry:
576
+ element.addEventListener('ry:change', (e) => console.log(e.detail));
577
+ element.addEventListener('ry:open', () => {});
578
+ element.addEventListener('ry:close', () => {});
579
+ ```
580
+
581
+ ### Programmatic Control
582
+ ```javascript
583
+ // Most components have open/close/toggle methods
584
+ document.querySelector('ry-modal').open();
585
+ document.querySelector('ry-modal').close();
586
+ document.querySelector('ry-drawer').toggle();
587
+
588
+ // Get/set values
589
+ document.querySelector('ry-select').value = 'new-value';
590
+ document.querySelector('ry-slider').value;
591
+ ```
@@ -1 +1 @@
1
- {"version":3,"file":"ry-dropdown.d.ts","sourceRoot":"","sources":["../../src/ts/components/ry-dropdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,qBAAa,UAAW,SAAQ,SAAS;;IACvC,KAAK,IAAI,IAAI;IAmFb,IAAI,IAAI,IAAI;IAgBZ,KAAK,IAAI,IAAI;IAUb,MAAM,IAAI,IAAI;CAOf"}
1
+ {"version":3,"file":"ry-dropdown.d.ts","sourceRoot":"","sources":["../../src/ts/components/ry-dropdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,qBAAa,UAAW,SAAQ,SAAS;;IACvC,KAAK,IAAI,IAAI;IAmFb,IAAI,IAAI,IAAI;IAkBZ,KAAK,IAAI,IAAI;IA2Bb,MAAM,IAAI,IAAI;CAOf"}
@@ -14,7 +14,7 @@
14
14
  * </accordion>
15
15
  * </template>
16
16
  * <!-- Optional: JS usage examples in collapsible section -->
17
- * <script slot="js">
17
+ * <script slot="js" type="text/plain">
18
18
  * // Listen for changes
19
19
  * element.addEventListener('ry:change', (e) => {
20
20
  * console.log(e.detail.value);
@@ -0,0 +1,39 @@
1
+ /**
2
+ * <ry-gradient-picker>
3
+ *
4
+ * Gradient editor with draggable color stops, type toggle, and inline color picker.
5
+ * Supports linear and radial gradients with unlimited stops.
6
+ *
7
+ * Usage:
8
+ * <ry-gradient-picker value="linear-gradient(90deg, #ff0000 0%, #0000ff 100%)"></ry-gradient-picker>
9
+ * <ry-gradient-picker value="radial-gradient(circle, #ff0000 0%, #00ff00 50%, #0000ff 100%)"></ry-gradient-picker>
10
+ */
11
+ import { RyElement } from '../core/ry-element.js';
12
+ export interface GradientStop {
13
+ id: string;
14
+ color: string;
15
+ position: number;
16
+ }
17
+ export type GradientType = 'solid' | 'linear' | 'radial';
18
+ export type RadialShape = 'circle' | 'ellipse';
19
+ export declare class RyGradientPicker extends RyElement {
20
+ #private;
21
+ static observedAttributes: readonly ["value", "disabled", "output"];
22
+ setup(): void;
23
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
24
+ get value(): string;
25
+ set value(val: string);
26
+ get type(): GradientType;
27
+ set type(val: GradientType);
28
+ get angle(): number;
29
+ set angle(val: number);
30
+ get shape(): RadialShape;
31
+ set shape(val: RadialShape);
32
+ get stops(): GradientStop[];
33
+ get selectedStop(): GradientStop | null;
34
+ get disabled(): boolean;
35
+ set disabled(val: boolean);
36
+ addStop(color: string, position: number): void;
37
+ removeStop(id: string): boolean;
38
+ }
39
+ //# sourceMappingURL=ry-gradient-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ry-gradient-picker.d.ts","sourceRoot":"","sources":["../../src/ts/components/ry-gradient-picker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACzD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAuF/C,qBAAa,gBAAiB,SAAQ,SAAS;;IAkB7C,MAAM,CAAC,kBAAkB,2CAA4C;IAErE,KAAK,IAAI,IAAI;IA8rBb,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgB9F,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,YAAY,EAEzB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAKpB;IAED,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,WAAW,EAEzB;IAED,IAAI,KAAK,IAAI,YAAY,EAAE,CAE1B;IAED,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAGtC;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAMxB;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO9C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAShC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * <ry-number-select>
3
+ *
4
+ * Numeric input with buttons, drag, keyboard, wheel, and optional typing.
5
+ *
6
+ * Usage:
7
+ * <ry-number-select min="0" max="100" value="50" step="1"></ry-number-select>
8
+ * <ry-number-select min="0" max="10" step="0.5" arrows="end" editable></ry-number-select>
9
+ */
10
+ import { RyElement } from '../core/ry-element.js';
11
+ export declare class RyNumberSelect extends RyElement {
12
+ #private;
13
+ static observedAttributes: readonly ["min", "max", "step", "value", "disabled", "arrows", "icons", "drag", "editable", "wrap", "label", "prefix", "suffix"];
14
+ setup(): void;
15
+ get value(): number;
16
+ set value(val: number);
17
+ get min(): number;
18
+ set min(val: number);
19
+ get max(): number;
20
+ set max(val: number);
21
+ get step(): number;
22
+ set step(val: number);
23
+ get drag(): 'x' | 'y' | 'none';
24
+ set drag(val: 'x' | 'y' | 'none');
25
+ get disabled(): boolean;
26
+ set disabled(val: boolean);
27
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
28
+ teardown(): void;
29
+ }
30
+ //# sourceMappingURL=ry-number-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ry-number-select.d.ts","sourceRoot":"","sources":["../../src/ts/components/ry-number-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD,qBAAa,cAAe,SAAQ,SAAS;;IAgB3C,MAAM,CAAC,kBAAkB,mIAAoI;IAE7J,KAAK,IAAI,IAAI;IAicb,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAEpB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,EAEnB;IAED,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,MAAM,CAE7B;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,EAE/B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAED,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO9F,QAAQ,IAAI,IAAI;CAGjB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * <ry-tree>
3
+ *
4
+ * Tree view with CSS-only expand/collapse using hidden checkboxes
5
+ * and grid-template-rows animation. Supports drag-and-drop rearranging
6
+ * and JSON serialization.
7
+ *
8
+ * Usage:
9
+ * <ry-tree>
10
+ * <ry-tree-item label="src" open>
11
+ * <ry-tree-item label="app" open>
12
+ * <ry-tree-item label="layout.tsx"></ry-tree-item>
13
+ * </ry-tree-item>
14
+ * </ry-tree-item>
15
+ * </ry-tree>
16
+ *
17
+ * Drag and drop:
18
+ * <ry-tree draggable>...</ry-tree>
19
+ *
20
+ * JS uses data-ry-target for queries, CSS uses .ry-tree__* for styling.
21
+ */
22
+ import { RyElement } from '../core/ry-element.js';
23
+ export interface TreeNode {
24
+ label: string;
25
+ children?: TreeNode[];
26
+ open?: boolean;
27
+ selected?: boolean;
28
+ }
29
+ export declare class RyTree extends RyElement {
30
+ #private;
31
+ setup(): void;
32
+ /** Serialize the current tree state to JSON. */
33
+ toJSON(): TreeNode[];
34
+ /** Alias for toJSON(). */
35
+ get value(): TreeNode[];
36
+ /** Create a tree element from JSON data. */
37
+ static from(data: TreeNode[]): RyTree;
38
+ }
39
+ export declare class RyTreeItem extends RyElement {
40
+ }
41
+ //# sourceMappingURL=ry-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ry-tree.d.ts","sourceRoot":"","sources":["../../src/ts/components/ry-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAclD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,MAAO,SAAQ,SAAS;;IAWnC,KAAK,IAAI,IAAI;IAoHb,gDAAgD;IAChD,MAAM,IAAI,QAAQ,EAAE;IAMpB,0BAA0B;IAC1B,IAAI,KAAK,IAAI,QAAQ,EAAE,CAEtB;IA+BD,4CAA4C;IAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM;CAgOtC;AAED,qBAAa,UAAW,SAAQ,SAAS;CAExC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ry-icons.d.ts","sourceRoot":"","sources":["../../src/ts/core/ry-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmFH;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
1
+ {"version":3,"file":"ry-icons.d.ts","sourceRoot":"","sources":["../../src/ts/core/ry-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA2GH;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ry-transform.d.ts","sourceRoot":"","sources":["../../src/ts/core/ry-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAwCH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAgBxC"}
1
+ {"version":3,"file":"ry-transform.d.ts","sourceRoot":"","sources":["../../src/ts/core/ry-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA4CH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAgBxC"}