@onetype/framework 2.0.41 → 2.0.42

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/addons/ai/agents/addon.js +23 -0
  2. package/addons/ai/agents/functions/parse.js +129 -0
  3. package/addons/ai/agents/item/functions/run.js +218 -0
  4. package/addons/ai/agents/load.js +8 -0
  5. package/addons/ai/orchestrator/addon.js +25 -0
  6. package/addons/ai/orchestrator/item/functions/run.js +277 -0
  7. package/addons/ai/orchestrator/item/functions/state/agent.js +41 -0
  8. package/addons/ai/orchestrator/item/functions/state/conclusion.js +27 -0
  9. package/addons/ai/orchestrator/item/functions/state/done.js +40 -0
  10. package/addons/ai/orchestrator/item/functions/state/execute.js +16 -0
  11. package/addons/ai/orchestrator/item/functions/state/goal.js +34 -0
  12. package/addons/ai/orchestrator/item/functions/state/input.js +55 -0
  13. package/addons/ai/orchestrator/item/functions/state/summary.js +26 -0
  14. package/addons/ai/orchestrator/items/agents/achievable.js +37 -0
  15. package/addons/ai/orchestrator/items/agents/agent.js +46 -0
  16. package/addons/ai/orchestrator/items/agents/conclusion.js +41 -0
  17. package/addons/ai/orchestrator/items/agents/done.js +40 -0
  18. package/addons/ai/orchestrator/items/agents/goal.js +58 -0
  19. package/addons/ai/orchestrator/items/agents/input.js +34 -0
  20. package/addons/ai/orchestrator/items/agents/planner.js +30 -0
  21. package/addons/ai/orchestrator/items/agents/summary.js +29 -0
  22. package/addons/ai/orchestrator/items/chat.js +10 -0
  23. package/addons/ai/orchestrator/load.js +25 -0
  24. package/addons/ai/providers/addon.js +16 -0
  25. package/addons/ai/providers/functions/default.js +14 -0
  26. package/addons/ai/providers/item/functions/request.js +62 -0
  27. package/addons/ai/providers/items/nue.js +98 -0
  28. package/addons/ai/providers/load.js +10 -0
  29. package/addons/render/elements/front/functions/runtime.js +25 -0
  30. package/lib/browser.js +1 -24
  31. package/lib/items/directives/160-slot.js +1 -1
  32. package/lib/items/directives/500-click-outside.js +43 -43
  33. package/lib/items/elements/ai/chat/chat.css +710 -0
  34. package/lib/items/elements/ai/chat/chat.js +429 -0
  35. package/lib/items/elements/cards/pricing/pricing.css +174 -0
  36. package/lib/items/elements/{sections → cards}/pricing/pricing.js +30 -11
  37. package/lib/items/elements/form/button/button.css +250 -0
  38. package/lib/items/elements/form/button/button.js +15 -20
  39. package/lib/items/elements/form/checkbox/checkbox.css +109 -0
  40. package/lib/items/elements/form/checkbox/checkbox.js +58 -54
  41. package/lib/items/elements/form/color/color.css +128 -0
  42. package/lib/items/elements/form/color/color.js +100 -0
  43. package/lib/items/elements/form/date/date.css +84 -0
  44. package/lib/items/elements/form/date/date.js +69 -0
  45. package/lib/items/elements/form/field/field.css +33 -57
  46. package/lib/items/elements/form/field/field.js +4 -4
  47. package/lib/items/elements/form/input/input.css +59 -84
  48. package/lib/items/elements/form/input/input.js +84 -75
  49. package/lib/items/elements/form/radio/radio.css +118 -0
  50. package/lib/items/elements/form/radio/radio.js +58 -54
  51. package/lib/items/elements/form/rating/rating.css +28 -66
  52. package/lib/items/elements/form/rating/rating.js +17 -21
  53. package/lib/items/elements/form/section/section.css +30 -73
  54. package/lib/items/elements/form/section/section.js +5 -5
  55. package/lib/items/elements/form/select/select.css +186 -0
  56. package/lib/items/elements/form/select/select.js +165 -0
  57. package/lib/items/elements/form/slider/slider.css +55 -176
  58. package/lib/items/elements/form/slider/slider.js +14 -10
  59. package/lib/items/elements/form/tags/tags.css +152 -0
  60. package/lib/items/elements/form/tags/tags.js +166 -0
  61. package/lib/items/elements/form/textarea/textarea.css +55 -92
  62. package/lib/items/elements/form/textarea/textarea.js +74 -66
  63. package/lib/items/elements/form/toggle/toggle.css +101 -0
  64. package/lib/items/elements/form/toggle/toggle.js +67 -0
  65. package/lib/items/elements/global/code/code.css +39 -8
  66. package/lib/items/elements/global/code/code.js +7 -2
  67. package/lib/items/elements/global/faq/faq.css +38 -16
  68. package/lib/items/elements/global/faq/faq.js +14 -2
  69. package/lib/items/elements/global/heading/heading.css +37 -14
  70. package/lib/items/elements/global/heading/heading.js +9 -4
  71. package/lib/items/elements/global/markdown/markdown.css +22 -15
  72. package/lib/items/elements/global/markdown/markdown.js +4 -4
  73. package/lib/items/elements/global/menu/menu.css +173 -0
  74. package/lib/items/elements/global/menu/menu.js +103 -0
  75. package/lib/items/elements/global/notice/notice.css +27 -61
  76. package/lib/items/elements/global/notice/notice.js +4 -4
  77. package/lib/items/elements/global/parameters/parameters.css +33 -14
  78. package/lib/items/elements/global/parameters/parameters.js +15 -6
  79. package/lib/items/elements/global/tags/tags.css +18 -5
  80. package/lib/items/elements/global/tags/tags.js +10 -2
  81. package/lib/items/elements/navigation/navbar/navbar.css +39 -17
  82. package/lib/items/elements/navigation/navbar/navbar.js +19 -9
  83. package/lib/items/elements/navigation/sidebar/sidebar.css +25 -39
  84. package/lib/items/elements/navigation/sidebar/sidebar.js +28 -6
  85. package/lib/items/elements/navigation/tabs/tabs.css +35 -16
  86. package/lib/items/elements/navigation/tabs/tabs.js +16 -2
  87. package/lib/items/elements/status/code/code.css +21 -12
  88. package/lib/items/elements/status/empty/empty.css +22 -17
  89. package/lib/items/elements/status/empty/empty.js +1 -1
  90. package/lib/items/elements/status/error/error.css +22 -12
  91. package/lib/items/elements/status/error/error.js +1 -1
  92. package/lib/items/elements/status/loading/loading.css +24 -14
  93. package/lib/items/elements/status/loading/loading.js +4 -4
  94. package/lib/load.js +14 -6
  95. package/lib/styles/reset.css +1 -1
  96. package/lists.md +586 -0
  97. package/orchestrator.md +288 -0
  98. package/package.json +9 -3
  99. package/lib/items/elements/form/button/styles/base.css +0 -176
  100. package/lib/items/elements/form/button/styles/sizes.css +0 -78
  101. package/lib/items/elements/form/button/styles/variants.css +0 -421
  102. package/lib/items/elements/form/checkbox/styles/base.css +0 -52
  103. package/lib/items/elements/form/checkbox/styles/sizes.css +0 -39
  104. package/lib/items/elements/form/checkbox/styles/variants.css +0 -121
  105. package/lib/items/elements/form/input/styles/base.css +0 -26
  106. package/lib/items/elements/form/input/styles/sizes.css +0 -15
  107. package/lib/items/elements/form/input/styles/variants.css +0 -98
  108. package/lib/items/elements/form/radio/styles/base.css +0 -48
  109. package/lib/items/elements/form/radio/styles/sizes.css +0 -36
  110. package/lib/items/elements/form/radio/styles/variants.css +0 -121
  111. package/lib/items/elements/global/card/card.css +0 -57
  112. package/lib/items/elements/global/card/card.js +0 -48
  113. package/lib/items/elements/sections/footer/footer.css +0 -205
  114. package/lib/items/elements/sections/footer/footer.js +0 -109
  115. package/lib/items/elements/sections/hero/hero.css +0 -100
  116. package/lib/items/elements/sections/hero/hero.js +0 -54
  117. package/lib/items/elements/sections/pricing/pricing.css +0 -148
  118. package/lib/items/elements/sections/stats/stats.css +0 -34
  119. package/lib/items/elements/sections/stats/stats.js +0 -74
@@ -1,79 +1,88 @@
1
1
  onetype.AddonReady('elements', (elements) =>
2
2
  {
3
- elements.ItemAdd({
4
- id: 'form-input',
5
- icon: 'input',
6
- name: 'Input',
7
- description: 'Text input field with variant support, placeholder, validation, and built-in error states. Supports all standard input types.',
8
- category: 'Form',
9
- author: 'OneType',
10
- config: {
11
- value: {
12
- type: 'string'
13
- },
14
- name: {
15
- type: 'string'
16
- },
17
- type: {
18
- type: 'string',
19
- value: 'text'
20
- },
21
- placeholder: {
22
- type: 'string'
23
- },
24
- maxLength: {
25
- type: 'number'
26
- },
27
- disabled: {
28
- type: 'boolean'
29
- },
30
- readonly: {
31
- type: 'boolean'
32
- },
33
- variant: {
34
- type: 'array',
35
- value: ['bg-2', 'border-full'],
36
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border-full']
37
- },
38
- size: {
39
- type: 'string',
40
- value: 'm',
41
- options: ['s', 'm', 'l']
42
- },
43
- _input: {
44
- type: 'function'
45
- },
46
- _change: {
47
- type: 'function'
48
- },
49
- _focus: {
50
- type: 'function'
51
- },
52
- _blur: {
53
- type: 'function'
54
- }
55
- },
56
- render: function()
57
- {
58
- return `
59
- <input
60
- class="holder"
61
- :variant="variant.join(' ')"
62
- :size="size"
63
- :value="value"
64
- :type="type"
65
- :placeholder="placeholder"
66
- :name="name"
67
- :maxlength="maxLength"
68
- :disabled="disabled"
69
- :readonly="readonly"
70
- autocomplete="off"
71
- ot-input="_input"
72
- ot-change="_change"
73
- ot-focus="_focus"
74
- ot-blur="_blur"
75
- />
76
- `;
77
- }
3
+ elements.ItemAdd({
4
+ id: 'form-input',
5
+ icon: 'input',
6
+ name: 'Input',
7
+ description: 'Text input field with icon support and variant options.',
8
+ category: 'Form',
9
+ author: 'OneType',
10
+ config: {
11
+ value: {
12
+ type: 'string',
13
+ value: ''
14
+ },
15
+ name: {
16
+ type: 'string',
17
+ value: ''
18
+ },
19
+ type: {
20
+ type: 'string',
21
+ value: 'text'
22
+ },
23
+ placeholder: {
24
+ type: 'string',
25
+ value: ''
26
+ },
27
+ icon: {
28
+ type: 'string',
29
+ value: ''
30
+ },
31
+ iconRight: {
32
+ type: 'string',
33
+ value: ''
34
+ },
35
+ maxlength: {
36
+ type: 'number'
37
+ },
38
+ disabled: {
39
+ type: 'boolean',
40
+ value: false
41
+ },
42
+ readonly: {
43
+ type: 'boolean',
44
+ value: false
45
+ },
46
+ variant: {
47
+ type: 'array',
48
+ value: ['bg-2', 'border', 'size-m'],
49
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border', 'size-s', 'size-m', 'size-l']
50
+ },
51
+ _input: {
52
+ type: 'function'
53
+ },
54
+ _change: {
55
+ type: 'function'
56
+ },
57
+ _focus: {
58
+ type: 'function'
59
+ },
60
+ _blur: {
61
+ type: 'function'
62
+ }
63
+ },
64
+ render: function()
65
+ {
66
+ return `
67
+ <div :class="'holder ' + variant.join(' ')">
68
+ <i ot-if="icon" class="icon">{{ icon }}</i>
69
+ <input
70
+ :value="value"
71
+ :type="type"
72
+ :placeholder="placeholder"
73
+ :name="name"
74
+ :maxlength="maxlength"
75
+ :disabled="disabled"
76
+ :readonly="readonly"
77
+ autocomplete="off"
78
+ ot-input="_input"
79
+ ot-change="_change"
80
+ ot-focus="_focus"
81
+ ot-blur="_blur"
82
+ />
83
+ <i ot-if="iconRight" class="icon">{{ iconRight }}</i>
84
+ </div>
85
+ `;
86
+ }
78
87
  });
79
88
  });
@@ -0,0 +1,118 @@
1
+ /* Root */
2
+
3
+ .e-206433b8
4
+ {
5
+ display: flex;
6
+ }
7
+
8
+ /* Holder */
9
+
10
+ .e-206433b8 > .holder
11
+ {
12
+ position: relative;
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: var(--ot-spacing-s);
16
+ cursor: pointer;
17
+ }
18
+
19
+ /* Input */
20
+
21
+ .e-206433b8 > .holder > input
22
+ {
23
+ position: absolute;
24
+ opacity: 0;
25
+ cursor: pointer;
26
+ width: 0;
27
+ height: 0;
28
+ }
29
+
30
+ /* Label */
31
+
32
+ .e-206433b8 > .holder > .label
33
+ {
34
+ font-size: var(--ot-size-m);
35
+ color: var(--ot-text-1);
36
+ user-select: none;
37
+ }
38
+
39
+ /* Mark */
40
+
41
+ .e-206433b8 > .holder > .mark
42
+ {
43
+ display: block;
44
+ border-radius: 50%;
45
+ border: 1px solid;
46
+ position: relative;
47
+ transition: background 0.15s ease, border-color 0.15s ease;
48
+ }
49
+
50
+ .e-206433b8 > .holder > .mark::after
51
+ {
52
+ content: '';
53
+ position: absolute;
54
+ top: 50%;
55
+ left: 50%;
56
+ transform: translate(-50%, -50%) scale(0);
57
+ border-radius: 50%;
58
+ transition: transform 0.15s ease;
59
+ }
60
+
61
+ .e-206433b8 > .holder > input:checked ~ .mark::after
62
+ {
63
+ transform: translate(-50%, -50%) scale(1);
64
+ }
65
+
66
+ .e-206433b8 > .holder > input:disabled ~ .mark
67
+ {
68
+ opacity: 0.5;
69
+ cursor: not-allowed;
70
+ }
71
+
72
+ /* Transparent variant */
73
+
74
+ .e-206433b8 > .holder.transparent > .mark { background: transparent; border-color: transparent; }
75
+ .e-206433b8 > .holder.transparent > .mark::after { background: var(--ot-text-1); }
76
+
77
+ /* Border variant */
78
+
79
+ .e-206433b8 > .holder.border > .mark { background: transparent; border-color: var(--ot-bg-1-border); }
80
+ .e-206433b8 > .holder.border:hover > .mark { border-color: var(--ot-bg-2-border); }
81
+ .e-206433b8 > .holder.border > input:checked ~ .mark { border-color: var(--ot-brand); background: var(--ot-brand); }
82
+ .e-206433b8 > .holder.border > .mark::after { background: white; }
83
+
84
+ /* Background variants */
85
+
86
+ .e-206433b8 > .holder.bg-1 > .mark { background: var(--ot-bg-1); border-color: var(--ot-bg-1-border); }
87
+ .e-206433b8 > .holder.bg-1:hover > .mark { background: var(--ot-bg-1-hover); }
88
+ .e-206433b8 > .holder.bg-1 > input:checked ~ .mark { border-color: var(--ot-brand); background: var(--ot-brand); }
89
+ .e-206433b8 > .holder.bg-1 > .mark::after { background: white; }
90
+
91
+ .e-206433b8 > .holder.bg-2 > .mark { background: var(--ot-bg-2); border-color: var(--ot-bg-2-border); }
92
+ .e-206433b8 > .holder.bg-2:hover > .mark { background: var(--ot-bg-2-hover); }
93
+ .e-206433b8 > .holder.bg-2 > input:checked ~ .mark { border-color: var(--ot-brand); background: var(--ot-brand); }
94
+ .e-206433b8 > .holder.bg-2 > .mark::after { background: white; }
95
+
96
+ .e-206433b8 > .holder.bg-3 > .mark { background: var(--ot-bg-3); border-color: var(--ot-bg-3-border); }
97
+ .e-206433b8 > .holder.bg-3:hover > .mark { background: var(--ot-bg-3-hover); }
98
+ .e-206433b8 > .holder.bg-3 > input:checked ~ .mark { border-color: var(--ot-brand); background: var(--ot-brand); }
99
+ .e-206433b8 > .holder.bg-3 > .mark::after { background: white; }
100
+
101
+ .e-206433b8 > .holder.bg-4 > .mark { background: var(--ot-bg-4); border-color: var(--ot-bg-4-border); }
102
+ .e-206433b8 > .holder.bg-4:hover > .mark { background: var(--ot-bg-4-hover); }
103
+ .e-206433b8 > .holder.bg-4 > input:checked ~ .mark { border-color: var(--ot-brand); background: var(--ot-brand); }
104
+ .e-206433b8 > .holder.bg-4 > .mark::after { background: white; }
105
+
106
+ /* Size variants */
107
+
108
+ .e-206433b8 > .holder.size-s > .mark { width: 16px; height: 16px; }
109
+ .e-206433b8 > .holder.size-s > .mark::after { width: 6px; height: 6px; }
110
+ .e-206433b8 > .holder.size-s > .label { font-size: var(--ot-size-s); }
111
+
112
+ .e-206433b8 > .holder.size-m > .mark { width: 20px; height: 20px; }
113
+ .e-206433b8 > .holder.size-m > .mark::after { width: 8px; height: 8px; }
114
+ .e-206433b8 > .holder.size-m > .label { font-size: var(--ot-size-m); }
115
+
116
+ .e-206433b8 > .holder.size-l > .mark { width: 24px; height: 24px; }
117
+ .e-206433b8 > .holder.size-l > .mark::after { width: 10px; height: 10px; }
118
+ .e-206433b8 > .holder.size-l > .label { font-size: var(--ot-size-m); }
@@ -1,58 +1,62 @@
1
1
  onetype.AddonReady('elements', (elements) =>
2
2
  {
3
- elements.ItemAdd({
4
- id: 'form-radio',
5
- icon: 'radio_button_checked',
6
- name: 'Radio',
7
- description: 'Radio button input with custom styling, group support, and multiple size options for different form contexts.',
8
- category: 'Form',
9
- author: 'OneType',
10
- config: {
11
- name: {
12
- type: 'string'
13
- },
14
- value: {
15
- type: 'string'
16
- },
17
- checked: {
18
- type: 'boolean'
19
- },
20
- disabled: {
21
- type: 'boolean'
22
- },
23
- variant: {
24
- type: 'array',
25
- value: ['bg-1'],
26
- options: ['transparent', 'border', 'bg-1', 'bg-2', 'bg-3', 'bg-4']
27
- },
28
- size: {
29
- type: 'string',
30
- value: 'm',
31
- options: ['s', 'm', 'l']
32
- },
33
- onChange: {
34
- type: 'function'
35
- },
36
- onClick: {
37
- type: 'function'
38
- }
39
- },
40
- render: function()
41
- {
42
- return `
43
- <div class="holder" :variant="variant.join(' ')" :size="size">
44
- <input
45
- type="radio"
46
- :name="name"
47
- :value="value"
48
- :checked="checked"
49
- :disabled="disabled"
50
- ot-change="onChange"
51
- ot-click="onClick"
52
- />
53
- <span class="radio-mark"></span>
54
- </div>
55
- `;
56
- }
3
+ elements.ItemAdd({
4
+ id: 'form-radio',
5
+ icon: 'radio_button_checked',
6
+ name: 'Radio',
7
+ description: 'Radio button with custom styling and group support.',
8
+ category: 'Form',
9
+ author: 'OneType',
10
+ config: {
11
+ label: {
12
+ type: 'string',
13
+ value: ''
14
+ },
15
+ name: {
16
+ type: 'string',
17
+ value: ''
18
+ },
19
+ value: {
20
+ type: 'string',
21
+ value: ''
22
+ },
23
+ checked: {
24
+ type: 'boolean',
25
+ value: false
26
+ },
27
+ disabled: {
28
+ type: 'boolean',
29
+ value: false
30
+ },
31
+ variant: {
32
+ type: 'array',
33
+ value: ['bg-1', 'size-m'],
34
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'transparent', 'border', 'size-s', 'size-m', 'size-l']
35
+ },
36
+ _change: {
37
+ type: 'function'
38
+ },
39
+ _click: {
40
+ type: 'function'
41
+ }
42
+ },
43
+ render: function()
44
+ {
45
+ return `
46
+ <label :class="'holder ' + variant.join(' ')">
47
+ <input
48
+ type="radio"
49
+ :name="name"
50
+ :value="value"
51
+ :checked="checked"
52
+ :disabled="disabled"
53
+ ot-change="_change"
54
+ ot-click="_click"
55
+ />
56
+ <span class="mark"></span>
57
+ <span ot-if="label" class="label">{{ label }}</span>
58
+ </label>
59
+ `;
60
+ }
57
61
  });
58
62
  });
@@ -1,4 +1,12 @@
1
- /* Base */
1
+ /* Root */
2
+
3
+ .e-13e502f0
4
+ {
5
+ display: flex;
6
+ }
7
+
8
+ /* Holder */
9
+
2
10
  .e-13e502f0 > .holder
3
11
  {
4
12
  display: inline-flex;
@@ -6,90 +14,44 @@
6
14
  gap: var(--ot-spacing-x);
7
15
  }
8
16
 
17
+ /* Star */
18
+
9
19
  .e-13e502f0 > .holder > .star
10
20
  {
11
- font-size: 24px;
12
21
  color: var(--ot-bg-3);
13
22
  cursor: pointer;
14
- transition: color 0.2s ease, transform 0.2s ease;
23
+ transition: color 0.15s ease, transform 0.15s ease;
15
24
  user-select: none;
16
25
  }
17
26
 
18
- .e-13e502f0 > .holder > .star.filled
19
- {
20
- color: var(--ot-brand);
21
- }
22
-
23
27
  .e-13e502f0 > .holder > .star:hover
24
28
  {
25
29
  transform: scale(1.1);
26
30
  }
27
31
 
28
- /* Variants - Readonly */
29
- .e-13e502f0 > .holder[variant*="readonly"] > .star
32
+ /* Readonly */
33
+
34
+ .e-13e502f0 > .holder.readonly > .star
30
35
  {
31
36
  cursor: default;
32
37
  pointer-events: none;
33
38
  }
34
39
 
35
- .e-13e502f0 > .holder[variant*="readonly"] > .star:hover
36
- {
37
- transform: none;
38
- }
40
+ /* Color variants */
39
41
 
40
- /* Variants - Colors */
41
- .e-13e502f0 > .holder[variant*="brand"] > .star.filled
42
- {
43
- color: var(--ot-brand);
44
- }
42
+ .e-13e502f0 > .holder.brand > .star.filled { color: var(--ot-brand); }
43
+ .e-13e502f0 > .holder.blue > .star.filled { color: var(--ot-blue); }
44
+ .e-13e502f0 > .holder.red > .star.filled { color: var(--ot-red); }
45
+ .e-13e502f0 > .holder.orange > .star.filled { color: var(--ot-orange); }
46
+ .e-13e502f0 > .holder.green > .star.filled { color: var(--ot-green); }
45
47
 
46
- .e-13e502f0 > .holder[variant*="blue"] > .star.filled
47
- {
48
- color: var(--ot-blue);
49
- }
48
+ /* Size variants */
50
49
 
51
- .e-13e502f0 > .holder[variant*="red"] > .star.filled
52
- {
53
- color: var(--ot-red);
54
- }
50
+ .e-13e502f0 > .holder.size-s { gap: 2px; }
51
+ .e-13e502f0 > .holder.size-s > .star { font-size: 16px; }
55
52
 
56
- .e-13e502f0 > .holder[variant*="orange"] > .star.filled
57
- {
58
- color: var(--ot-orange);
59
- }
53
+ .e-13e502f0 > .holder.size-m { gap: var(--ot-spacing-x); }
54
+ .e-13e502f0 > .holder.size-m > .star { font-size: 24px; }
60
55
 
61
- .e-13e502f0 > .holder[variant*="green"] > .star.filled
62
- {
63
- color: var(--ot-green);
64
- }
65
-
66
- /* Variants - Sizes */
67
- .e-13e502f0 > .holder[variant*="size-s"]
68
- {
69
- gap: 2px;
70
- }
71
-
72
- .e-13e502f0 > .holder[variant*="size-s"] > .star
73
- {
74
- font-size: 16px;
75
- }
76
-
77
- .e-13e502f0 > .holder[variant*="size-m"]
78
- {
79
- gap: var(--ot-spacing-x);
80
- }
81
-
82
- .e-13e502f0 > .holder[variant*="size-m"] > .star
83
- {
84
- font-size: 24px;
85
- }
86
-
87
- .e-13e502f0 > .holder[variant*="size-l"]
88
- {
89
- gap: var(--ot-spacing-s);
90
- }
91
-
92
- .e-13e502f0 > .holder[variant*="size-l"] > .star
93
- {
94
- font-size: 32px;
95
- }
56
+ .e-13e502f0 > .holder.size-l { gap: var(--ot-spacing-s); }
57
+ .e-13e502f0 > .holder.size-l > .star { font-size: 32px; }
@@ -4,7 +4,7 @@ onetype.AddonReady('elements', (elements) =>
4
4
  id: 'form-rating',
5
5
  icon: 'star',
6
6
  name: 'Rating',
7
- description: 'Star rating input with interactive and readonly modes.',
7
+ description: 'Star rating with interactive and readonly modes.',
8
8
  category: 'Form',
9
9
  author: 'OneType',
10
10
  config: {
@@ -25,7 +25,7 @@ onetype.AddonReady('elements', (elements) =>
25
25
  value: ['brand', 'size-m'],
26
26
  options: ['brand', 'blue', 'red', 'orange', 'green', 'size-s', 'size-m', 'size-l']
27
27
  },
28
- onChange: {
28
+ _change: {
29
29
  type: 'function'
30
30
  }
31
31
  },
@@ -33,54 +33,50 @@ onetype.AddonReady('elements', (elements) =>
33
33
  {
34
34
  this.hover = null;
35
35
 
36
- this.getStars = () =>
36
+ this.stars = () =>
37
37
  {
38
- const stars = [];
38
+ const result = [];
39
39
  for (let i = 0; i < this.max; i++)
40
40
  {
41
- stars.push(i);
41
+ result.push(i);
42
42
  }
43
- return stars;
43
+ return result;
44
44
  };
45
45
 
46
- this.isFilled = (index) =>
46
+ this.filled = (index) =>
47
47
  {
48
48
  return this.hover !== null ? index <= this.hover : index < this.value;
49
49
  };
50
50
 
51
- this.handleClick = (index) =>
51
+ this.select = (index) =>
52
52
  {
53
53
  if (this.readonly) return;
54
54
  this.value = index + 1;
55
- if (this.onChange)
55
+ if (this._change)
56
56
  {
57
- this.onChange(this.value);
57
+ this._change(this.value);
58
58
  }
59
59
  };
60
60
 
61
- this.handleMouseEnter = (index) =>
61
+ this.enter = (index) =>
62
62
  {
63
63
  if (this.readonly) return;
64
64
  this.hover = index;
65
65
  };
66
66
 
67
- this.handleMouseLeave = () =>
67
+ this.leave = () =>
68
68
  {
69
69
  if (this.readonly) return;
70
70
  this.hover = null;
71
71
  };
72
72
 
73
73
  return `
74
- <div
75
- class="holder"
76
- :variant="variant.join(' ') + (readonly ? ' readonly' : '')"
77
- ot-mouse-leave="handleMouseLeave"
78
- >
74
+ <div :class="'holder ' + variant.join(' ') + (readonly ? ' readonly' : '')" ot-mouse-leave="leave">
79
75
  <i
80
- ot-for="index in getStars()"
81
- :class="'star' + (isFilled(index) ? ' filled' : '')"
82
- ot-click="() => handleClick(index)"
83
- ot-mouse-enter="() => handleMouseEnter(index)"
76
+ ot-for="index in stars()"
77
+ :class="'star' + (filled(index) ? ' filled' : '')"
78
+ ot-click="() => select(index)"
79
+ ot-mouse-enter="() => enter(index)"
84
80
  >star</i>
85
81
  </div>
86
82
  `;