@colletdev/core 0.1.3

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 (119) hide show
  1. package/README.md +77 -0
  2. package/custom-elements.json +6037 -0
  3. package/generated/.gitattributes +2 -0
  4. package/generated/index.d.ts +120 -0
  5. package/generated/index.js +521 -0
  6. package/generated/styles.js +2845 -0
  7. package/package.json +56 -0
  8. package/src/elements/accordion.d.ts +20 -0
  9. package/src/elements/accordion.js +92 -0
  10. package/src/elements/activity_group.d.ts +19 -0
  11. package/src/elements/activity_group.js +27 -0
  12. package/src/elements/alert.d.ts +24 -0
  13. package/src/elements/alert.js +40 -0
  14. package/src/elements/autocomplete.d.ts +30 -0
  15. package/src/elements/autocomplete.js +671 -0
  16. package/src/elements/avatar.d.ts +18 -0
  17. package/src/elements/avatar.js +28 -0
  18. package/src/elements/backdrop.d.ts +14 -0
  19. package/src/elements/backdrop.js +28 -0
  20. package/src/elements/badge.d.ts +21 -0
  21. package/src/elements/badge.js +42 -0
  22. package/src/elements/breadcrumb.d.ts +17 -0
  23. package/src/elements/breadcrumb.js +41 -0
  24. package/src/elements/button.d.ts +24 -0
  25. package/src/elements/button.js +36 -0
  26. package/src/elements/card.d.ts +21 -0
  27. package/src/elements/card.js +67 -0
  28. package/src/elements/carousel.d.ts +23 -0
  29. package/src/elements/carousel.js +895 -0
  30. package/src/elements/chat_input.d.ts +22 -0
  31. package/src/elements/chat_input.js +78 -0
  32. package/src/elements/checkbox.d.ts +21 -0
  33. package/src/elements/checkbox.js +114 -0
  34. package/src/elements/code_block.d.ts +21 -0
  35. package/src/elements/code_block.js +27 -0
  36. package/src/elements/collapsible.d.ts +20 -0
  37. package/src/elements/collapsible.js +93 -0
  38. package/src/elements/date_picker.d.ts +30 -0
  39. package/src/elements/date_picker.js +528 -0
  40. package/src/elements/dialog.d.ts +20 -0
  41. package/src/elements/dialog.js +314 -0
  42. package/src/elements/drawer.d.ts +20 -0
  43. package/src/elements/drawer.js +318 -0
  44. package/src/elements/fab.d.ts +22 -0
  45. package/src/elements/fab.js +36 -0
  46. package/src/elements/file_upload.d.ts +26 -0
  47. package/src/elements/file_upload.js +59 -0
  48. package/src/elements/listbox.d.ts +19 -0
  49. package/src/elements/listbox.js +250 -0
  50. package/src/elements/menu.d.ts +20 -0
  51. package/src/elements/menu.js +224 -0
  52. package/src/elements/message_bubble.d.ts +23 -0
  53. package/src/elements/message_bubble.js +29 -0
  54. package/src/elements/message_group.d.ts +18 -0
  55. package/src/elements/message_group.js +28 -0
  56. package/src/elements/message_part.d.ts +35 -0
  57. package/src/elements/message_part.js +153 -0
  58. package/src/elements/pagination.d.ts +22 -0
  59. package/src/elements/pagination.js +36 -0
  60. package/src/elements/popover.d.ts +26 -0
  61. package/src/elements/popover.js +191 -0
  62. package/src/elements/profile_menu.d.ts +20 -0
  63. package/src/elements/profile_menu.js +213 -0
  64. package/src/elements/progress.d.ts +18 -0
  65. package/src/elements/progress.js +31 -0
  66. package/src/elements/radio_group.d.ts +22 -0
  67. package/src/elements/radio_group.js +70 -0
  68. package/src/elements/scrollbar.d.ts +19 -0
  69. package/src/elements/scrollbar.js +299 -0
  70. package/src/elements/search_bar.d.ts +27 -0
  71. package/src/elements/search_bar.js +98 -0
  72. package/src/elements/select.d.ts +26 -0
  73. package/src/elements/select.js +485 -0
  74. package/src/elements/sidebar.d.ts +21 -0
  75. package/src/elements/sidebar.js +322 -0
  76. package/src/elements/skeleton.d.ts +17 -0
  77. package/src/elements/skeleton.js +31 -0
  78. package/src/elements/slider.d.ts +28 -0
  79. package/src/elements/slider.js +93 -0
  80. package/src/elements/speed_dial.d.ts +23 -0
  81. package/src/elements/speed_dial.js +370 -0
  82. package/src/elements/spinner.d.ts +15 -0
  83. package/src/elements/spinner.js +28 -0
  84. package/src/elements/split_button.d.ts +23 -0
  85. package/src/elements/split_button.js +281 -0
  86. package/src/elements/stepper.d.ts +20 -0
  87. package/src/elements/stepper.js +31 -0
  88. package/src/elements/switch.d.ts +22 -0
  89. package/src/elements/switch.js +129 -0
  90. package/src/elements/table.d.ts +29 -0
  91. package/src/elements/table.js +371 -0
  92. package/src/elements/tabs.d.ts +19 -0
  93. package/src/elements/tabs.js +139 -0
  94. package/src/elements/text.d.ts +26 -0
  95. package/src/elements/text.js +32 -0
  96. package/src/elements/text_input.d.ts +36 -0
  97. package/src/elements/text_input.js +121 -0
  98. package/src/elements/thinking.d.ts +17 -0
  99. package/src/elements/thinking.js +28 -0
  100. package/src/elements/toast.d.ts +23 -0
  101. package/src/elements/toast.js +209 -0
  102. package/src/elements/toggle_group.d.ts +22 -0
  103. package/src/elements/toggle_group.js +176 -0
  104. package/src/elements/tooltip.d.ts +18 -0
  105. package/src/elements/tooltip.js +64 -0
  106. package/src/markdown.d.ts +24 -0
  107. package/src/markdown.js +66 -0
  108. package/src/runtime.d.ts +35 -0
  109. package/src/runtime.js +790 -0
  110. package/src/server.d.ts +69 -0
  111. package/src/server.js +176 -0
  112. package/src/streaming-markdown.js +43 -0
  113. package/src/vite-plugin.d.ts +46 -0
  114. package/src/vite-plugin.js +221 -0
  115. package/wasm/package.json +16 -0
  116. package/wasm/wasm_api.d.ts +72 -0
  117. package/wasm/wasm_api.js +593 -0
  118. package/wasm/wasm_api_bg.wasm +0 -0
  119. package/wasm/wasm_api_bg.wasm.d.ts +10 -0
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@colletdev/core",
3
+ "version": "0.1.3",
4
+ "description": "Rust/WASM Custom Elements — 48 production-grade UI components",
5
+ "type": "module",
6
+ "main": "generated/index.js",
7
+ "module": "generated/index.js",
8
+ "types": "generated/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./generated/index.d.ts",
12
+ "import": "./generated/index.js",
13
+ "default": "./generated/index.js"
14
+ },
15
+ "./runtime": {
16
+ "types": "./src/runtime.d.ts",
17
+ "import": "./src/runtime.js",
18
+ "default": "./src/runtime.js"
19
+ },
20
+ "./vite-plugin": {
21
+ "types": "./src/vite-plugin.d.ts",
22
+ "import": "./src/vite-plugin.js",
23
+ "default": "./src/vite-plugin.js"
24
+ },
25
+ "./server": {
26
+ "types": "./src/server.d.ts",
27
+ "import": "./src/server.js",
28
+ "default": "./src/server.js"
29
+ },
30
+ "./markdown": {
31
+ "types": "./src/markdown.d.ts",
32
+ "import": "./src/markdown.js",
33
+ "default": "./src/markdown.js"
34
+ },
35
+ "./elements/*": "./src/elements/*"
36
+ },
37
+ "files": [
38
+ "src/",
39
+ "generated/",
40
+ "wasm/",
41
+ "custom-elements.json"
42
+ ],
43
+ "customElements": "custom-elements.json",
44
+ "keywords": ["web-components", "custom-elements", "rust", "wasm", "ui", "design-system"],
45
+ "author": "Dan",
46
+ "license": "MIT",
47
+ "sideEffects": false,
48
+ "devDependencies": {
49
+ "@tailwindcss/cli": "4.2.1"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/Danrozen87/collet",
54
+ "directory": "packages/core"
55
+ }
56
+ }
@@ -0,0 +1,20 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/accordion.rs
3
+
4
+ export interface CxAccordionAttributes {
5
+ id?: string;
6
+ label?: string;
7
+ items?: string;
8
+ mode?: 'single' | 'multiple';
9
+ collapsible?: boolean;
10
+ headingLevel?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
11
+ defaultExpanded?: string;
12
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
13
+ disabled?: boolean;
14
+ }
15
+
16
+ declare global {
17
+ interface HTMLElementTagNameMap {
18
+ 'cx-accordion': HTMLElement & CxAccordionAttributes;
19
+ }
20
+ }
@@ -0,0 +1,92 @@
1
+ // Custom behavior for <cx-accordion> — toggle panels within shadow DOM.
2
+ // Mirrors static/_behaviors/accordion.js but operates inside the shadow root.
3
+ // Source: crates/wasm-api/src/accordion.rs
4
+
5
+ export function defineCxAccordion(wasmFn, baseClass) {
6
+ class CxAccordion extends baseClass {
7
+ static observedAttributes = ['id', 'label', 'items', 'mode', 'collapsible', 'heading-level', 'default-expanded', 'size', 'disabled'];
8
+ static _booleanAttrs = new Set(['collapsible', 'disabled']);
9
+
10
+ connectedCallback() {
11
+ if (!this._isInitialized) {
12
+ this._markInitialized();
13
+ const shadow = this._shadow;
14
+
15
+ shadow.addEventListener('click', (e) => {
16
+ const trigger = e.target.closest('[data-accordion-trigger]');
17
+ if (!trigger || trigger.disabled) return;
18
+
19
+ const acc = shadow.querySelector('[data-accordion]');
20
+ if (!acc) return;
21
+
22
+ const idx = parseInt(trigger.getAttribute('data-item-index'), 10);
23
+ if (isNaN(idx)) return;
24
+
25
+ const mode = acc.getAttribute('data-mode');
26
+ const isRadio = mode === 'single';
27
+ const inputs = acc.querySelectorAll(':scope > input');
28
+ const input = inputs[idx];
29
+ if (!input || input.disabled) return;
30
+
31
+ if (isRadio) {
32
+ if (input.checked && acc.hasAttribute('data-collapsible')) {
33
+ input.checked = false;
34
+ } else {
35
+ input.checked = true;
36
+ }
37
+ } else {
38
+ input.checked = !input.checked;
39
+ }
40
+
41
+ // Sync aria-expanded on all triggers
42
+ const triggers = acc.querySelectorAll('[data-accordion-trigger]');
43
+ triggers.forEach((t, i) => {
44
+ t.setAttribute('aria-expanded', inputs[i] && inputs[i].checked ? 'true' : 'false');
45
+ });
46
+
47
+ // Sync host prop — single source of truth for WASM re-renders.
48
+ // Direct _props mutation avoids triggering a re-render that would
49
+ // destroy DOM state and kill the panel animation.
50
+ const expanded = [];
51
+ inputs.forEach((inp, i) => { if (inp.checked) expanded.push(String(i)); });
52
+ this._props.default_expanded = expanded.join(',');
53
+
54
+ this._emit('cx-change', { index: idx, expanded: input.checked });
55
+ });
56
+
57
+ // Keyboard navigation: ArrowUp/Down, Home/End
58
+ shadow.addEventListener('keydown', (e) => {
59
+ const trigger = e.target.closest('[data-accordion-trigger]');
60
+ if (!trigger) return;
61
+
62
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {
63
+ e.preventDefault();
64
+ const all = Array.from(shadow.querySelectorAll('[data-accordion-trigger]:not([disabled])'));
65
+ const cur = all.indexOf(trigger);
66
+ if (cur === -1) return;
67
+
68
+ let ni = cur;
69
+ if (e.key === 'ArrowDown') ni = (cur + 1) % all.length;
70
+ else if (e.key === 'ArrowUp') ni = (cur - 1 + all.length) % all.length;
71
+ else if (e.key === 'Home') ni = 0;
72
+ else if (e.key === 'End') ni = all.length - 1;
73
+ all[ni].focus();
74
+ }
75
+ });
76
+ } // end _isInitialized guard
77
+ super.connectedCallback();
78
+ }
79
+
80
+ _doRender() {
81
+ try {
82
+ const result = wasmFn(this._props);
83
+ this._injectHtml(result);
84
+ } catch (e) {
85
+ console.error('[cx-accordion]', e);
86
+ }
87
+ }
88
+ }
89
+
90
+ customElements.define('cx-accordion', CxAccordion);
91
+ return CxAccordion;
92
+ }
@@ -0,0 +1,19 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/activity_group.rs
3
+
4
+ export interface CxActivityGroupAttributes {
5
+ id?: string;
6
+ status?: string;
7
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
8
+ border?: string;
9
+ summary?: string;
10
+ action?: string;
11
+ expanded?: boolean;
12
+ parts?: string;
13
+ }
14
+
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'cx-activity-group': HTMLElement & CxActivityGroupAttributes;
18
+ }
19
+ }
@@ -0,0 +1,27 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/activity_group.rs
3
+
4
+ export function defineCxActivityGroup(wasmFn, baseClass) {
5
+ class CxActivityGroup extends baseClass {
6
+ static observedAttributes = ['id', 'status', 'size', 'border', 'summary', 'action', 'expanded', 'parts'];
7
+ static _booleanAttrs = new Set(['expanded']);
8
+ static _hostDisplay = 'block';
9
+
10
+
11
+ connectedCallback() {
12
+ super.connectedCallback();
13
+ }
14
+
15
+ _doRender() {
16
+ try {
17
+ const result = wasmFn(this._props);
18
+ this._injectHtml(result);
19
+ } catch (e) {
20
+ console.error('[cx-activity-group]', e);
21
+ }
22
+ }
23
+ }
24
+
25
+ customElements.define('cx-activity-group', CxActivityGroup);
26
+ return CxActivityGroup;
27
+ }
@@ -0,0 +1,24 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/alert.rs
3
+
4
+ export interface CxAlertAttributes {
5
+ id?: string;
6
+ title?: string;
7
+ description?: string;
8
+ variant?: 'subtle' | 'filled' | 'outline';
9
+ intent?: 'neutral' | 'primary' | 'info' | 'success' | 'warning' | 'danger';
10
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
11
+ showIcon?: boolean;
12
+ icon?: string;
13
+ dismissible?: boolean;
14
+ dismissLabel?: string;
15
+ compact?: boolean;
16
+ dynamic?: boolean;
17
+ actionsHtml?: string;
18
+ }
19
+
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ 'cx-alert': HTMLElement & CxAlertAttributes;
23
+ }
24
+ }
@@ -0,0 +1,40 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/alert.rs
3
+
4
+ export function defineCxAlert(wasmFn, baseClass) {
5
+ class CxAlert extends baseClass {
6
+ static observedAttributes = ['id', 'title', 'description', 'variant', 'intent', 'size', 'show-icon', 'icon', 'dismissible', 'dismiss-label', 'compact', 'dynamic', 'actions-html'];
7
+ static _booleanAttrs = new Set(['show-icon', 'dismissible', 'compact', 'dynamic']);
8
+ static _focusable = false;
9
+ static _hostDisplay = 'block';
10
+
11
+
12
+ connectedCallback() {
13
+ if (!this._isInitialized) {
14
+ this._markInitialized();
15
+ // Delegate dismiss button click
16
+ // Badge/Alert use data-handler="...-dismiss", Toast uses data-toast-dismiss
17
+ this._shadow.addEventListener('click', (e) => {
18
+ const btn = e.target.closest('[data-handler*="dismiss"], [data-toast-dismiss]');
19
+ if (btn) {
20
+ this._emit('cx-dismiss', {});
21
+ }
22
+ });
23
+ }
24
+ super.connectedCallback();
25
+ }
26
+
27
+ _doRender() {
28
+ try {
29
+ this._props.slotted = true;
30
+ const result = wasmFn(this._props);
31
+ this._injectHtml(result);
32
+ } catch (e) {
33
+ console.error('[cx-alert]', e);
34
+ }
35
+ }
36
+ }
37
+
38
+ customElements.define('cx-alert', CxAlert);
39
+ return CxAlert;
40
+ }
@@ -0,0 +1,30 @@
1
+ // Auto-generated by scripts/generate-elements.mjs — DO NOT EDIT
2
+ // Source: crates/wasm-api/src/autocomplete.rs
3
+
4
+ export interface CxAutocompleteAttributes {
5
+ id?: string;
6
+ label?: string;
7
+ variant?: 'outline' | 'filled' | 'ghost';
8
+ shape?: 'sharp' | 'rounded' | 'pill';
9
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
+ mode?: 'single' | 'multiple';
11
+ selected?: string;
12
+ query?: string;
13
+ placeholder?: string;
14
+ helperText?: string;
15
+ error?: string;
16
+ disabled?: boolean;
17
+ required?: boolean;
18
+ readonly?: boolean;
19
+ name?: string;
20
+ allowCustom?: boolean;
21
+ clearable?: boolean;
22
+ items?: string;
23
+ groups?: string;
24
+ }
25
+
26
+ declare global {
27
+ interface HTMLElementTagNameMap {
28
+ 'cx-autocomplete': HTMLElement & CxAutocompleteAttributes;
29
+ }
30
+ }