@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,117 +1,80 @@
1
- /* Base */
2
- .e-5973ffcd > .holder
3
- {
4
- position: relative;
5
- width: 100%;
6
- padding: var(--ot-spacing-s) var(--ot-spacing-m);
7
- border-radius: var(--ot-radius-m);
8
- border: none;
9
- background: transparent;
10
- transition: all 0.2s;
11
- }
1
+ /* Root */
12
2
 
13
- .e-5973ffcd > .holder > textarea
3
+ .e-5973ffcd
14
4
  {
15
- width: 100%;
16
- background: transparent;
17
- border: none;
18
- outline: none;
19
- min-height: 100px;
20
- resize: none;
21
- color: var(--ot-text-1);
22
- padding: 0;
5
+ display: flex;
6
+ width: 100%;
23
7
  }
24
8
 
25
- .e-5973ffcd > .holder > textarea::placeholder
26
- {
27
- color: var(--ot-text-2);
28
- }
29
-
30
- .e-5973ffcd > .holder > textarea:disabled
31
- {
32
- opacity: 0.5;
33
- cursor: not-allowed;
34
- }
9
+ /* Holder */
35
10
 
36
- /* Variants - Background */
37
- .e-5973ffcd > .holder[variant*="transparent"]
38
- {
39
- background: transparent;
40
- padding: 0;
41
- }
42
-
43
- .e-5973ffcd > .holder[variant*="border"]
44
- {
45
- background: transparent;
46
- }
47
-
48
- .e-5973ffcd > .holder[variant*="bg-1"]
49
- {
50
- background: var(--ot-bg-1);
51
- }
52
-
53
- .e-5973ffcd > .holder[variant*="bg-1"]:hover
11
+ .e-5973ffcd > .holder
54
12
  {
55
- background: var(--ot-bg-1-hover);
13
+ display: flex;
14
+ width: 100%;
15
+ padding: var(--ot-spacing-s) var(--ot-spacing-m);
16
+ border-radius: var(--ot-radius-m);
17
+ border: 1px solid transparent;
18
+ background: transparent;
19
+ transition: background 0.15s ease, border-color 0.15s ease;
56
20
  }
57
21
 
58
- .e-5973ffcd > .holder[variant*="bg-2"]
59
- {
60
- background: var(--ot-bg-2);
61
- }
22
+ /* Textarea */
62
23
 
63
- .e-5973ffcd > .holder[variant*="bg-2"]:hover
24
+ .e-5973ffcd > .holder > textarea
64
25
  {
65
- background: var(--ot-bg-2-hover);
26
+ width: 100%;
27
+ background: transparent;
28
+ border: none;
29
+ outline: none;
30
+ resize: none;
31
+ color: var(--ot-text-1);
32
+ font-size: var(--ot-size-m);
33
+ font-family: inherit;
34
+ line-height: 1.6;
35
+ padding: 0;
66
36
  }
67
37
 
68
- .e-5973ffcd > .holder[variant*="bg-3"]
38
+ .e-5973ffcd > .holder > textarea::placeholder
69
39
  {
70
- background: var(--ot-bg-3);
40
+ color: var(--ot-text-2);
71
41
  }
72
42
 
73
- .e-5973ffcd > .holder[variant*="bg-3"]:hover
43
+ .e-5973ffcd > .holder > textarea:disabled
74
44
  {
75
- background: var(--ot-bg-3-hover);
45
+ opacity: 0.5;
46
+ cursor: not-allowed;
76
47
  }
77
48
 
78
- .e-5973ffcd > .holder[variant*="bg-4"]
79
- {
80
- background: var(--ot-bg-4);
81
- }
49
+ /* Background variants */
82
50
 
83
- .e-5973ffcd > .holder[variant*="bg-4"]:hover
84
- {
85
- background: var(--ot-bg-4-hover);
86
- }
51
+ .e-5973ffcd > .holder.bg-1 { background: var(--ot-bg-1); }
52
+ .e-5973ffcd > .holder.bg-1:hover { background: var(--ot-bg-1-hover); }
53
+ .e-5973ffcd > .holder.bg-1.border { border-color: var(--ot-bg-1-border); }
54
+ .e-5973ffcd > .holder.bg-2 { background: var(--ot-bg-2); }
55
+ .e-5973ffcd > .holder.bg-2:hover { background: var(--ot-bg-2-hover); }
56
+ .e-5973ffcd > .holder.bg-2.border { border-color: var(--ot-bg-2-border); }
57
+ .e-5973ffcd > .holder.bg-3 { background: var(--ot-bg-3); }
58
+ .e-5973ffcd > .holder.bg-3:hover { background: var(--ot-bg-3-hover); }
59
+ .e-5973ffcd > .holder.bg-3.border { border-color: var(--ot-bg-3-border); }
60
+ .e-5973ffcd > .holder.bg-4 { background: var(--ot-bg-4); }
61
+ .e-5973ffcd > .holder.bg-4:hover { background: var(--ot-bg-4-hover); }
62
+ .e-5973ffcd > .holder.bg-4.border { border-color: var(--ot-bg-4-border); }
87
63
 
88
- /* Variants - Border */
89
- .e-5973ffcd > .holder[variant*="border"]
90
- {
91
- border: 1px solid var(--ot-bg-2-border);
92
- }
64
+ /* Transparent variant */
93
65
 
94
- .e-5973ffcd > .holder[variant*="bg-1"][variant*="border"]
95
- {
96
- border: 1px solid var(--ot-bg-1-border);
97
- }
66
+ .e-5973ffcd > .holder.transparent { background: transparent; padding: 0; }
98
67
 
99
- .e-5973ffcd > .holder[variant*="bg-2"][variant*="border"]
100
- {
101
- border: 1px solid var(--ot-bg-2-border);
102
- }
68
+ /* Border variant */
103
69
 
104
- .e-5973ffcd > .holder[variant*="bg-3"][variant*="border"]
105
- {
106
- border: 1px solid var(--ot-bg-3-border);
107
- }
70
+ .e-5973ffcd > .holder.border { border: 1px solid var(--ot-bg-2-border); }
71
+ .e-5973ffcd > .holder.border:focus-within { border-color: var(--ot-brand); }
108
72
 
109
- .e-5973ffcd > .holder[variant*="bg-4"][variant*="border"]
110
- {
111
- border: 1px solid var(--ot-bg-4-border);
112
- }
73
+ /* Size variants */
113
74
 
114
- .e-5973ffcd > .holder[variant*="border"]:focus-within
115
- {
116
- border-color: var(--ot-brand);
117
- }
75
+ .e-5973ffcd > .holder.size-s { padding: var(--ot-spacing-x) var(--ot-spacing-s); }
76
+ .e-5973ffcd > .holder.size-s > textarea { font-size: var(--ot-size-s); }
77
+ .e-5973ffcd > .holder.size-m { padding: var(--ot-spacing-s) var(--ot-spacing-m); }
78
+ .e-5973ffcd > .holder.size-m > textarea { font-size: var(--ot-size-m); }
79
+ .e-5973ffcd > .holder.size-l { padding: var(--ot-spacing-m) var(--ot-spacing-l); }
80
+ .e-5973ffcd > .holder.size-l > textarea { font-size: var(--ot-size-m); }
@@ -1,70 +1,78 @@
1
1
  onetype.AddonReady('elements', (elements) =>
2
2
  {
3
- elements.ItemAdd({
4
- id: 'form-textarea',
5
- icon: 'notes',
6
- name: 'Textarea',
7
- description: 'Multi-line text input with auto-resize option, character counting, and variant support for different UI contexts.',
8
- category: 'Form',
9
- author: 'OneType',
10
- config: {
11
- value: {
12
- type: 'string'
13
- },
14
- name: {
15
- type: 'string'
16
- },
17
- placeholder: {
18
- type: 'string'
19
- },
20
- rows: {
21
- type: 'number',
22
- value: 4
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'],
36
- options: ['transparent', 'border', 'bg-1', 'bg-2', 'bg-3', 'bg-4']
37
- },
38
- size: {
39
- type: 'string',
40
- value: 'm',
41
- options: ['s', 'm', 'l']
42
- },
43
- onInput: {
44
- type: 'function'
45
- },
46
- onChange: {
47
- type: 'function'
48
- }
49
- },
50
- render: function()
51
- {
52
- return `
53
- <div class="holder" :variant="variant.join(' ')" :size="size">
54
- <textarea
55
- :value="value"
56
- :placeholder="placeholder"
57
- :name="name"
58
- :rows="rows"
59
- :maxlength="maxLength"
60
- :disabled="disabled"
61
- :readonly="readonly"
62
- autocomplete="off"
63
- ot-input="onInput"
64
- ot-change="onChange"
65
- ></textarea>
66
- </div>
67
- `;
68
- }
3
+ elements.ItemAdd({
4
+ id: 'form-textarea',
5
+ icon: 'notes',
6
+ name: 'Textarea',
7
+ description: 'Multi-line text input with variant support.',
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
+ placeholder: {
20
+ type: 'string',
21
+ value: ''
22
+ },
23
+ rows: {
24
+ type: 'number',
25
+ value: 4
26
+ },
27
+ maxlength: {
28
+ type: 'number'
29
+ },
30
+ disabled: {
31
+ type: 'boolean',
32
+ value: false
33
+ },
34
+ readonly: {
35
+ type: 'boolean',
36
+ value: false
37
+ },
38
+ variant: {
39
+ type: 'array',
40
+ value: ['bg-2', 'border', 'size-m'],
41
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'transparent', 'border', 'size-s', 'size-m', 'size-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
+ <div :class="'holder ' + variant.join(' ')">
60
+ <textarea
61
+ :value="value"
62
+ :placeholder="placeholder"
63
+ :name="name"
64
+ :rows="rows"
65
+ :maxlength="maxlength"
66
+ :disabled="disabled"
67
+ :readonly="readonly"
68
+ autocomplete="off"
69
+ ot-input="_input"
70
+ ot-change="_change"
71
+ ot-focus="_focus"
72
+ ot-blur="_blur"
73
+ ></textarea>
74
+ </div>
75
+ `;
76
+ }
69
77
  });
70
78
  });
@@ -0,0 +1,101 @@
1
+ /* Root */
2
+
3
+ .e-180e0ca7
4
+ {
5
+ display: flex;
6
+ }
7
+
8
+ /* Holder */
9
+
10
+ .e-180e0ca7 > .holder
11
+ {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ gap: var(--ot-spacing-s);
15
+ cursor: pointer;
16
+ user-select: none;
17
+ }
18
+
19
+ .e-180e0ca7 > .holder.disabled
20
+ {
21
+ opacity: 0.5;
22
+ cursor: not-allowed;
23
+ }
24
+
25
+ /* Input */
26
+
27
+ .e-180e0ca7 > .holder > input
28
+ {
29
+ position: absolute;
30
+ opacity: 0;
31
+ width: 0;
32
+ height: 0;
33
+ }
34
+
35
+ /* Track */
36
+
37
+ .e-180e0ca7 > .holder > .track
38
+ {
39
+ position: relative;
40
+ display: flex;
41
+ align-items: center;
42
+ border-radius: 100px;
43
+ transition: background 0.15s ease;
44
+ }
45
+
46
+ /* Thumb */
47
+
48
+ .e-180e0ca7 > .holder > .track > .thumb
49
+ {
50
+ position: absolute;
51
+ border-radius: 50%;
52
+ background: var(--ot-text-2);
53
+ transition: transform 0.15s ease, background 0.15s ease;
54
+ }
55
+
56
+ /* Active */
57
+
58
+ .e-180e0ca7 > .holder.active > .track > .thumb
59
+ {
60
+ background: var(--ot-brand);
61
+ }
62
+
63
+ /* Label */
64
+
65
+ .e-180e0ca7 > .holder > .label
66
+ {
67
+ font-size: var(--ot-size-m);
68
+ color: var(--ot-text-1);
69
+ }
70
+
71
+ /* Background variants */
72
+
73
+ .e-180e0ca7 > .holder.bg-1 > .track { background: var(--ot-bg-1); }
74
+ .e-180e0ca7 > .holder.bg-1.active > .track { background: var(--ot-brand-opacity); }
75
+ .e-180e0ca7 > .holder.bg-2 > .track { background: var(--ot-bg-2); }
76
+ .e-180e0ca7 > .holder.bg-2.active > .track { background: var(--ot-brand-opacity); }
77
+ .e-180e0ca7 > .holder.bg-3 > .track { background: var(--ot-bg-3); }
78
+ .e-180e0ca7 > .holder.bg-3.active > .track { background: var(--ot-brand-opacity); }
79
+ .e-180e0ca7 > .holder.bg-4 > .track { background: var(--ot-bg-4); }
80
+ .e-180e0ca7 > .holder.bg-4.active > .track { background: var(--ot-brand-opacity); }
81
+
82
+ /* Size small */
83
+
84
+ .e-180e0ca7 > .holder.size-s > .track { width: 28px; height: 16px; }
85
+ .e-180e0ca7 > .holder.size-s > .track > .thumb { width: 12px; height: 12px; left: 2px; }
86
+ .e-180e0ca7 > .holder.size-s.active > .track > .thumb { transform: translateX(12px); }
87
+ .e-180e0ca7 > .holder.size-s > .label { font-size: var(--ot-size-s); }
88
+
89
+ /* Size medium */
90
+
91
+ .e-180e0ca7 > .holder.size-m > .track { width: 36px; height: 20px; }
92
+ .e-180e0ca7 > .holder.size-m > .track > .thumb { width: 16px; height: 16px; left: 2px; }
93
+ .e-180e0ca7 > .holder.size-m.active > .track > .thumb { transform: translateX(16px); }
94
+ .e-180e0ca7 > .holder.size-m > .label { font-size: var(--ot-size-m); }
95
+
96
+ /* Size large */
97
+
98
+ .e-180e0ca7 > .holder.size-l > .track { width: 44px; height: 24px; }
99
+ .e-180e0ca7 > .holder.size-l > .track > .thumb { width: 20px; height: 20px; left: 2px; }
100
+ .e-180e0ca7 > .holder.size-l.active > .track > .thumb { transform: translateX(20px); }
101
+ .e-180e0ca7 > .holder.size-l > .label { font-size: var(--ot-size-m); }
@@ -0,0 +1,67 @@
1
+ onetype.AddonReady('elements', (elements) =>
2
+ {
3
+ elements.ItemAdd({
4
+ id: 'form-toggle',
5
+ icon: 'toggle_on',
6
+ name: 'Toggle',
7
+ description: 'On/off switch toggle.',
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
+ checked: {
20
+ type: 'boolean',
21
+ value: false
22
+ },
23
+ disabled: {
24
+ type: 'boolean',
25
+ value: false
26
+ },
27
+ variant: {
28
+ type: 'array',
29
+ value: ['bg-3', 'size-m'],
30
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'size-s', 'size-m', 'size-l']
31
+ },
32
+ _change: {
33
+ type: 'function'
34
+ }
35
+ },
36
+ render: function()
37
+ {
38
+ this.handle = (event) =>
39
+ {
40
+ event.preventDefault();
41
+
42
+ if (this.disabled)
43
+ {
44
+ return;
45
+ }
46
+
47
+ this.checked = !this.checked;
48
+ this.Update();
49
+
50
+ if (this._change)
51
+ {
52
+ this._change(this.checked);
53
+ }
54
+ };
55
+
56
+ return `
57
+ <div :class="'holder ' + variant.join(' ') + (checked ? ' active' : '') + (disabled ? ' disabled' : '')" ot-click="handle">
58
+ <input type="hidden" :name="name" :value="checked ? 'on' : 'off'" />
59
+ <span class="track">
60
+ <span class="thumb"></span>
61
+ </span>
62
+ <span ot-if="label" class="label">{{ label }}</span>
63
+ </div>
64
+ `;
65
+ }
66
+ });
67
+ });
@@ -1,19 +1,25 @@
1
+ /* Root */
2
+
1
3
  .e-4a15b201
2
4
  {
3
5
  display: flex;
4
6
  width: 100%;
5
7
  }
6
8
 
9
+ /* Holder */
10
+
7
11
  .e-4a15b201 > .holder
8
12
  {
9
13
  display: flex;
10
14
  flex-direction: column;
11
15
  width: 100%;
12
- border: 1px solid var(--ot-bg-2-border);
13
- border-radius: 8px;
16
+ border: 1px solid transparent;
17
+ border-radius: var(--ot-radius-m);
14
18
  overflow: hidden;
15
19
  }
16
20
 
21
+ /* Label */
22
+
17
23
  .e-4a15b201 > .holder > .label
18
24
  {
19
25
  display: flex;
@@ -24,10 +30,11 @@
24
30
  font-weight: 600;
25
31
  font-family: monospace;
26
32
  color: var(--ot-text-2);
27
- background: var(--ot-bg-3);
28
- border-bottom: 1px solid var(--ot-bg-2-border);
33
+ border-bottom: 1px solid transparent;
29
34
  }
30
35
 
36
+ /* Copy */
37
+
31
38
  .e-4a15b201 > .holder > .label > .copy
32
39
  {
33
40
  display: flex;
@@ -38,7 +45,7 @@
38
45
  border: none;
39
46
  color: var(--ot-text-2);
40
47
  cursor: pointer;
41
- transition: color 0.2s ease;
48
+ transition: color 0.15s ease;
42
49
  }
43
50
 
44
51
  .e-4a15b201 > .holder > .label > .copy:hover
@@ -48,19 +55,43 @@
48
55
 
49
56
  .e-4a15b201 > .holder > .label > .copy > i
50
57
  {
51
- font-size: 16px;
58
+ font-size: var(--ot-size-m);
52
59
  }
53
60
 
61
+ /* Content */
62
+
54
63
  .e-4a15b201 > .holder > .content
55
64
  {
56
65
  padding: var(--ot-spacing-m);
57
66
  margin: 0;
58
- font-size: 12px;
67
+ font-size: var(--ot-size-s);
59
68
  font-family: monospace;
60
69
  color: var(--ot-text-2);
61
70
  line-height: 1.6;
62
- background: var(--ot-bg-2);
63
71
  overflow-x: auto;
64
72
  white-space: break-spaces;
65
73
  tab-size: 4;
66
74
  }
75
+
76
+ /* Background variants */
77
+
78
+ .e-4a15b201 > .holder.bg-1 { background: var(--ot-bg-1); border-color: var(--ot-bg-1-border); }
79
+ .e-4a15b201 > .holder.bg-1 > .label { background: var(--ot-bg-2); border-bottom-color: var(--ot-bg-1-border); }
80
+ .e-4a15b201 > .holder.bg-2 { background: var(--ot-bg-2); border-color: var(--ot-bg-2-border); }
81
+ .e-4a15b201 > .holder.bg-2 > .label { background: var(--ot-bg-3); border-bottom-color: var(--ot-bg-2-border); }
82
+ .e-4a15b201 > .holder.bg-3 { background: var(--ot-bg-3); border-color: var(--ot-bg-3-border); }
83
+ .e-4a15b201 > .holder.bg-3 > .label { background: var(--ot-bg-4); border-bottom-color: var(--ot-bg-3-border); }
84
+ .e-4a15b201 > .holder.bg-4 { background: var(--ot-bg-4); border-color: var(--ot-bg-4-border); }
85
+ .e-4a15b201 > .holder.bg-4 > .label { border-bottom-color: var(--ot-bg-4-border); }
86
+
87
+ /* Size variants */
88
+
89
+ .e-4a15b201 > .holder.size-s > .label { padding: var(--ot-spacing-x) var(--ot-spacing-s); }
90
+ .e-4a15b201 > .holder.size-s > .content { padding: var(--ot-spacing-s); font-size: var(--ot-size-s); }
91
+ .e-4a15b201 > .holder.size-m > .content { padding: var(--ot-spacing-m); font-size: var(--ot-size-s); }
92
+ .e-4a15b201 > .holder.size-l > .label { padding: var(--ot-spacing-s) var(--ot-spacing-l); }
93
+ .e-4a15b201 > .holder.size-l > .content { padding: var(--ot-spacing-l); font-size: var(--ot-size-m); }
94
+
95
+ /* Border variant */
96
+
97
+ .e-4a15b201 > .holder.border { border: 1px solid var(--ot-bg-2-border); }
@@ -15,6 +15,11 @@ onetype.AddonReady('elements', (elements) =>
15
15
  source: {
16
16
  type: 'string',
17
17
  value: ''
18
+ },
19
+ variant: {
20
+ type: 'array',
21
+ value: ['bg-2'],
22
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border', 'size-s', 'size-m', 'size-l']
18
23
  }
19
24
  },
20
25
  render: function()
@@ -32,10 +37,10 @@ onetype.AddonReady('elements', (elements) =>
32
37
  };
33
38
 
34
39
  return `
35
- <div class="holder">
40
+ <div :class="'holder ' + variant.join(' ')">
36
41
  <div class="label">
37
42
  <span ot-if="label">{{ label }}</span>
38
- <button class="copy" ot-click="copy"><i ot-if="!copied">content_copy</i><i ot-if="copied">check</i></button>
43
+ <button class="copy" ot-click="copy"><i>{{ copied ? 'check' : 'content_copy' }}</i></button>
39
44
  </div>
40
45
  <pre ot-if="escaped" class="content"><div ot-html="escaped"></div></pre>
41
46
  <pre ot-if="!escaped" class="content"><slot name="content"></slot></pre>