@nyaruka/temba-components 0.123.0 → 0.124.1

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 (146) hide show
  1. package/.github/copilot-instructions.md +22 -4
  2. package/CHANGELOG.md +21 -0
  3. package/TEST_OPTIMIZATION.md +158 -0
  4. package/demo/alert/example.html +65 -0
  5. package/demo/button/example.html +71 -0
  6. package/demo/chart/example.html +56 -0
  7. package/demo/checkbox/example.html +72 -0
  8. package/demo/compose/example.html +72 -0
  9. package/demo/data/images/gus.png +0 -0
  10. package/demo/data/images/purrington.jpg +0 -0
  11. package/demo/data/server/opened-tickets.json +40 -0
  12. package/demo/data/server/response-time.json +27 -0
  13. package/demo/datepicker/example.html +69 -0
  14. package/demo/dialog/example.html +107 -0
  15. package/demo/dropdown/example.html +99 -0
  16. package/demo/index.html +152 -430
  17. package/demo/misc/example.html +72 -0
  18. package/demo/progress/example.html +59 -0
  19. package/demo/select/drag-and-drop.html +142 -0
  20. package/demo/select/example.html +82 -0
  21. package/demo/select/multi.html +73 -0
  22. package/demo/slider/example.html +59 -0
  23. package/demo/sortable-list/example.html +99 -0
  24. package/demo/styles.css +183 -0
  25. package/demo/tabs/example.html +91 -0
  26. package/demo/textinput/completion.html +56 -0
  27. package/demo/textinput/example.html +61 -0
  28. package/dist/temba-components.js +323 -191
  29. package/dist/temba-components.js.map +1 -1
  30. package/out-tsc/src/chart/TembaChart.js +19 -16
  31. package/out-tsc/src/chart/TembaChart.js.map +1 -1
  32. package/out-tsc/src/fields/FieldManager.js +27 -34
  33. package/out-tsc/src/fields/FieldManager.js.map +1 -1
  34. package/out-tsc/src/flow/Editor.js +1 -1
  35. package/out-tsc/src/flow/Editor.js.map +1 -1
  36. package/out-tsc/src/list/SortableList.js +257 -60
  37. package/out-tsc/src/list/SortableList.js.map +1 -1
  38. package/out-tsc/src/omnibox/Omnibox.js +1 -1
  39. package/out-tsc/src/omnibox/Omnibox.js.map +1 -1
  40. package/out-tsc/src/select/Select.js +198 -38
  41. package/out-tsc/src/select/Select.js.map +1 -1
  42. package/out-tsc/src/thumbnail/Thumbnail.js +1 -1
  43. package/out-tsc/src/thumbnail/Thumbnail.js.map +1 -1
  44. package/out-tsc/src/webchat/WebChat.js +5 -2
  45. package/out-tsc/src/webchat/WebChat.js.map +1 -1
  46. package/out-tsc/test/temba-chart.test.js +1 -1
  47. package/out-tsc/test/temba-chart.test.js.map +1 -1
  48. package/out-tsc/test/temba-compose.test.js +6 -30
  49. package/out-tsc/test/temba-compose.test.js.map +1 -1
  50. package/out-tsc/test/temba-contact-chat.test.js +1 -2
  51. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  52. package/out-tsc/test/temba-dropdown.test.js +1 -1
  53. package/out-tsc/test/temba-dropdown.test.js.map +1 -1
  54. package/out-tsc/test/temba-flow-editor-node.test.js +273 -0
  55. package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -0
  56. package/out-tsc/test/temba-flow-editor.test.js +244 -0
  57. package/out-tsc/test/temba-flow-editor.test.js.map +1 -0
  58. package/out-tsc/test/temba-flow-plumber.test.js +145 -0
  59. package/out-tsc/test/temba-flow-plumber.test.js.map +1 -0
  60. package/out-tsc/test/temba-flow-render.test.js +171 -0
  61. package/out-tsc/test/temba-flow-render.test.js.map +1 -0
  62. package/out-tsc/test/temba-omnibox.test.js +6 -3
  63. package/out-tsc/test/temba-omnibox.test.js.map +1 -1
  64. package/out-tsc/test/temba-select.test.js +183 -53
  65. package/out-tsc/test/temba-select.test.js.map +1 -1
  66. package/out-tsc/test/temba-sortable-list.test.js +91 -15
  67. package/out-tsc/test/temba-sortable-list.test.js.map +1 -1
  68. package/out-tsc/test/temba-toast.test.js +1 -2
  69. package/out-tsc/test/temba-toast.test.js.map +1 -1
  70. package/out-tsc/test/temba-utils-index.test.js +2 -2
  71. package/out-tsc/test/temba-utils-index.test.js.map +1 -1
  72. package/out-tsc/test/temba-webchat-lightbox-fix.test.js +42 -0
  73. package/out-tsc/test/temba-webchat-lightbox-fix.test.js.map +1 -0
  74. package/out-tsc/test/utils.test.js +58 -0
  75. package/out-tsc/test/utils.test.js.map +1 -1
  76. package/package.json +2 -3
  77. package/screenshots/truth/flow/editor-basic.png +0 -0
  78. package/screenshots/truth/list/fields-dragging.png +0 -0
  79. package/screenshots/truth/list/sortable-dragging.png +0 -0
  80. package/screenshots/truth/list/sortable-dropped.png +0 -0
  81. package/screenshots/truth/list/sortable.png +0 -0
  82. package/screenshots/truth/omnibox/selected.png +0 -0
  83. package/screenshots/truth/select/disabled-multi-selection.png +0 -0
  84. package/screenshots/truth/select/disabled-selection.png +0 -0
  85. package/screenshots/truth/select/disabled.png +0 -0
  86. package/screenshots/truth/select/embedded.png +0 -0
  87. package/screenshots/truth/select/empty-options.png +0 -0
  88. package/screenshots/truth/select/expression-selected.png +0 -0
  89. package/screenshots/truth/select/expressions.png +0 -0
  90. package/screenshots/truth/select/functions.png +0 -0
  91. package/screenshots/truth/select/local-options.png +0 -0
  92. package/screenshots/truth/select/multi-reorder-final.png +0 -0
  93. package/screenshots/truth/select/multi-reorder-initial.png +0 -0
  94. package/screenshots/truth/select/multi-with-endpoint.png +0 -0
  95. package/screenshots/truth/select/multiple-initial-values.png +0 -0
  96. package/screenshots/truth/select/remote-options.png +0 -0
  97. package/screenshots/truth/select/search-enabled.png +0 -0
  98. package/screenshots/truth/select/search-multi-no-matches.png +0 -0
  99. package/screenshots/truth/select/search-selected-focus.png +0 -0
  100. package/screenshots/truth/select/search-selected.png +0 -0
  101. package/screenshots/truth/select/search-with-selected.png +0 -0
  102. package/screenshots/truth/select/searching.png +0 -0
  103. package/screenshots/truth/select/selected-multi-maxitems-reached.png +0 -0
  104. package/screenshots/truth/select/selected-multi.png +0 -0
  105. package/screenshots/truth/select/selected-single.png +0 -0
  106. package/screenshots/truth/select/selection-clearable.png +0 -0
  107. package/screenshots/truth/select/static-initial-value.png +0 -0
  108. package/screenshots/truth/select/static-initial-via-selected.png +0 -0
  109. package/screenshots/truth/select/truncated-selection.png +0 -0
  110. package/screenshots/truth/select/with-placeholder.png +0 -0
  111. package/screenshots/truth/select/without-placeholder.png +0 -0
  112. package/screenshots/truth/templates/default.png +0 -0
  113. package/screenshots/truth/templates/unapproved.png +0 -0
  114. package/screenshots/truth/webchat/connected-state.png +0 -0
  115. package/src/chart/TembaChart.ts +20 -16
  116. package/src/fields/FieldManager.ts +30 -38
  117. package/src/flow/Editor.ts +1 -1
  118. package/src/list/SortableList.ts +291 -67
  119. package/src/omnibox/Omnibox.ts +1 -1
  120. package/src/select/Select.ts +213 -42
  121. package/src/thumbnail/Thumbnail.ts +1 -1
  122. package/src/webchat/WebChat.ts +5 -2
  123. package/test/temba-chart.test.ts +1 -1
  124. package/test/temba-compose.test.ts +11 -38
  125. package/test/temba-contact-chat.test.ts +4 -6
  126. package/test/temba-dropdown.test.ts +1 -1
  127. package/test/temba-flow-editor-node.test.ts +344 -0
  128. package/test/temba-flow-editor.test.ts +301 -0
  129. package/test/temba-flow-plumber.test.ts +189 -0
  130. package/test/temba-flow-render.test.ts +220 -0
  131. package/test/temba-omnibox.test.ts +7 -3
  132. package/test/temba-select.test.ts +247 -79
  133. package/test/temba-sortable-list.test.ts +108 -15
  134. package/test/temba-toast.test.ts +2 -2
  135. package/test/temba-utils-index.test.ts +2 -2
  136. package/test/temba-webchat-lightbox-fix.test.ts +57 -0
  137. package/test/utils.test.ts +88 -0
  138. package/web-test-runner.config.mjs +4 -2
  139. package/.storybook/main.js +0 -14
  140. package/.storybook/preview-head.html +0 -1
  141. package/.storybook/preview.js +0 -17
  142. package/demo/agents.html +0 -147
  143. package/demo/old.html +0 -573
  144. package/demo/remote.html +0 -3
  145. package/screenshots/truth/compose/attachments-with-files-focused.png +0 -0
  146. package/stories/temba-checkbox.stories.md +0 -37
@@ -0,0 +1,72 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Miscellaneous Components</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link href="../styles.css" rel="stylesheet" type="text/css" />
16
+ </head>
17
+ <body>
18
+ <temba-lightbox> </temba-lightbox>
19
+ <h1>Miscellaneous Components</h1>
20
+ <p><a href="../index.html">← Back to main demo</a></p>
21
+
22
+ <div class="example">
23
+ <h3>Loading Component</h3>
24
+ <p>A loading spinner for async operations</p>
25
+ <temba-loading></temba-loading>
26
+ </div>
27
+
28
+ <div class="example">
29
+ <h3>Thumbnail Component</h3>
30
+ <p>Image thumbnails with autozooming and downloading</p>
31
+ <div style="display: flex; gap: 15px; align-items: center">
32
+ <!-- normally a server would provide the content type, but our demo doesn't so we do it manually-->
33
+ <temba-thumbnail
34
+ url="../data/images/gus.png"
35
+ size="small"
36
+ contentType="image"
37
+ ></temba-thumbnail>
38
+ </div>
39
+ </div>
40
+
41
+ <div class="example">
42
+ <h3>Tip Component</h3>
43
+ <p>Tooltip components for additional information</p>
44
+ <div style="display: flex; gap: 20px; flex-wrap: wrap">
45
+ <div>
46
+ <temba-tip text="This is a basic tooltip"
47
+ ><span>Hover me</span></temba-tip
48
+ >
49
+ </div>
50
+ <div>
51
+ <temba-tip text="This tooltip appears above" position="top">
52
+ <span>Top tip</span></temba-tip
53
+ >
54
+ </div>
55
+ <div>
56
+ <temba-tip text="This tooltip appears to the right" position="right"
57
+ ><span>Right tip</span></temba-tip
58
+ >
59
+ </div>
60
+ <div>
61
+ <temba-tip text="This tooltip appears to the bottom" position="bottom"
62
+ ><span>Bottom tip</span></temba-tip
63
+ >
64
+ </div>
65
+ </div>
66
+ </div>
67
+
68
+ <script type="module">
69
+ import '../../out-tsc/temba-modules.js';
70
+ </script>
71
+ </body>
72
+ </html>
@@ -0,0 +1,59 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Progress Examples</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link
16
+ href="../styles.css"
17
+ rel="stylesheet"
18
+ type="text/css"
19
+ />
20
+ </head>
21
+ <body>
22
+ <h1>Progress Examples</h1>
23
+ <p><a href="../index.html">← Back to main demo</a></p>
24
+
25
+ <div class="example">
26
+ <h3>Progress with ETA</h3>
27
+ <p>A progress bar showing current progress with an estimated completion time</p>
28
+ <temba-progress total="100" current="25" eta="2030-09-17T07:00:00.000Z"></temba-progress>
29
+ </div>
30
+
31
+ <div class="example">
32
+ <h3>Progress 50%</h3>
33
+ <p>A progress bar at 50% completion</p>
34
+ <temba-progress total="100" current="50"></temba-progress>
35
+ </div>
36
+
37
+ <div class="example">
38
+ <h3>Progress 75%</h3>
39
+ <p>A progress bar at 75% completion</p>
40
+ <temba-progress total="100" current="75"></temba-progress>
41
+ </div>
42
+
43
+ <div class="example">
44
+ <h3>Progress Complete</h3>
45
+ <p>A completed progress bar</p>
46
+ <temba-progress total="100" current="100"></temba-progress>
47
+ </div>
48
+
49
+ <div class="example">
50
+ <h3>Progress with Different Scale</h3>
51
+ <p>A progress bar using a different total value</p>
52
+ <temba-progress total="200" current="150"></temba-progress>
53
+ </div>
54
+
55
+ <script type="module">
56
+ import '../../out-tsc/temba-modules.js';
57
+ </script>
58
+ </body>
59
+ </html>
@@ -0,0 +1,142 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Multi-Select Drag and Drop Demo</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <style>
12
+ body {
13
+ font-family: sans-serif;
14
+ padding: 20px;
15
+ max-width: 800px;
16
+ margin: 0 auto;
17
+ }
18
+ .example {
19
+ margin: 30px 0;
20
+ padding: 20px;
21
+ border: 1px solid #ddd;
22
+ border-radius: 8px;
23
+ }
24
+ .example h3 {
25
+ margin-top: 0;
26
+ color: #333;
27
+ }
28
+ .example p {
29
+ color: #666;
30
+ margin-bottom: 15px;
31
+ }
32
+ .expected {
33
+ background-color: #f0f8ff;
34
+ padding: 10px;
35
+ border-radius: 4px;
36
+ margin-top: 10px;
37
+ }
38
+ .expected strong {
39
+ color: #006400;
40
+ }
41
+ </style>
42
+ </head>
43
+ <body>
44
+ <h1>Multi-Select Drag and Drop Demo</h1>
45
+ <p><a href="../index.html">← Back to main demo</a> | <a href="example.html">Basic Examples</a> | <a href="multi.html">Multi-Select</a></p>
46
+ <p>This demo shows the drag and drop reordering functionality for multi-select components.</p>
47
+
48
+ <div class="example">
49
+ <h3>With 3 items (drag and drop enabled)</h3>
50
+ <p>This multi-select has 3 pre-selected items. You should be able to drag and drop to reorder them.</p>
51
+ <temba-select multi searchable id="test3" placeholder="Select colors">
52
+ <temba-option name="Red" value="0" selected></temba-option>
53
+ <temba-option name="Green" value="1" selected></temba-option>
54
+ <temba-option name="Blue" value="2" selected></temba-option>
55
+ </temba-select>
56
+ <div class="expected">
57
+ <strong>Expected behavior:</strong>
58
+ <ul>
59
+ <li>Items should be wrapped in a sortable container</li>
60
+ <li>Drag an item to see a ghost element following the mouse</li>
61
+ <li>Drop on another item to swap their positions</li>
62
+ <li>Drop outside to cancel the operation</li>
63
+ <li>Items should maintain cursor style when hovering</li>
64
+ </ul>
65
+ </div>
66
+ </div>
67
+
68
+ <div class="example">
69
+ <h3>With 2 items (drag and drop enabled)</h3>
70
+ <p>This multi-select has 2 pre-selected items. You should be able to drag and drop to reorder them.</p>
71
+ <temba-select multi id="test2" placeholder="Select fruits">
72
+ <temba-option name="Apple" value="apple" selected></temba-option>
73
+ <temba-option name="Banana" value="banana" selected></temba-option>
74
+ </temba-select>
75
+ <div class="expected">
76
+ <strong>Expected behavior:</strong>
77
+ <ul>
78
+ <li>Same drag and drop functionality as above</li>
79
+ <li>Swapping the two items should work</li>
80
+ </ul>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="example">
85
+ <h3>With 1 item (no drag and drop)</h3>
86
+ <p>This multi-select has only 1 pre-selected item. Drag and drop should not be enabled.</p>
87
+ <temba-select multi id="test1" placeholder="Select an item">
88
+ <temba-option name="Solo" value="solo" selected></temba-option>
89
+ </temba-select>
90
+ <div class="expected">
91
+ <strong>Expected behavior:</strong>
92
+ <ul>
93
+ <li>No sortable container should be present</li>
94
+ <li>Normal multi-select appearance and behavior</li>
95
+ </ul>
96
+ </div>
97
+ </div>
98
+
99
+ <div class="example">
100
+ <h3>Regular single select (no drag and drop)</h3>
101
+ <p>This is a regular single-select. Drag and drop should not be enabled.</p>
102
+ <temba-select id="single">
103
+ <temba-option name="Option 1" value="1" selected></temba-option>
104
+ </temba-select>
105
+ <div class="expected">
106
+ <strong>Expected behavior:</strong>
107
+ <ul>
108
+ <li>Normal single-select appearance and behavior</li>
109
+ <li>No sortable functionality</li>
110
+ </ul>
111
+ </div>
112
+ </div>
113
+
114
+ <script>
115
+ // Add event listeners to monitor changes
116
+ document.querySelectorAll('temba-select[multi]').forEach(select => {
117
+ select.addEventListener('change', () => {
118
+ console.log(`${select.id} values changed:`, select.values);
119
+ });
120
+ });
121
+
122
+ // Log initial state after components load
123
+ window.addEventListener('load', () => {
124
+ setTimeout(() => {
125
+ console.log('=== Initial State ===');
126
+ document.querySelectorAll('temba-select').forEach(select => {
127
+ const sortableList = select.shadowRoot?.querySelector('temba-sortable-list');
128
+ console.log(`${select.id}:`, {
129
+ values: select.values,
130
+ hasSortableList: !!sortableList,
131
+ isMulti: select.hasAttribute('multi')
132
+ });
133
+ });
134
+ }, 500);
135
+ });
136
+ </script>
137
+
138
+ <script type="module">
139
+ import '../../out-tsc/temba-modules.js';
140
+ </script>
141
+ </body>
142
+ </html>
@@ -0,0 +1,82 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Select Component Examples</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link
16
+ href="../styles.css"
17
+ rel="stylesheet"
18
+ type="text/css"
19
+ />
20
+ </head>
21
+ <body>
22
+ <h1>Select Component Examples</h1>
23
+ <p><a href="../index.html">← Back to main demo</a></p>
24
+
25
+ <div class="example">
26
+ <h3>Basic Select</h3>
27
+ <p>A simple dropdown selection with info text</p>
28
+ <temba-select
29
+ placeholder="Select a color"
30
+ info_text="Some colors are very dangerous, choose wisely"
31
+ >
32
+ <temba-option name="Red" value="0"></temba-option>
33
+ <temba-option name="Green" value="1"></temba-option>
34
+ <temba-option name="Blue" value="2"></temba-option>
35
+ </temba-select>
36
+ </div>
37
+
38
+ <div class="example">
39
+ <h3>Clearable Select</h3>
40
+ <p>A select that can be cleared after selection</p>
41
+ <temba-select placeholder="Select a color" clearable>
42
+ <temba-option name="Red" value="0"></temba-option>
43
+ <temba-option name="Green" value="1"></temba-option>
44
+ <temba-option name="Blue" value="2"></temba-option>
45
+ </temba-select>
46
+ </div>
47
+
48
+ <div class="example">
49
+ <h3>Empty Select</h3>
50
+ <p>A select with no options to show empty state</p>
51
+ <temba-select placeholder="Click to see empty state">
52
+ </temba-select>
53
+ </div>
54
+
55
+ <div class="example">
56
+ <h3>Empty Searchable Select</h3>
57
+ <p>A searchable select with no options</p>
58
+ <temba-select placeholder="Search for options" searchable>
59
+ </temba-select>
60
+ </div>
61
+
62
+ <div class="example">
63
+ <h3>Pre-selected Option</h3>
64
+ <p>A select with a pre-selected value</p>
65
+ <temba-select placeholder="Select a color" clearable>
66
+ <temba-option name="Red" value="0"></temba-option>
67
+ <temba-option name="Green" value="1" selected></temba-option>
68
+ <temba-option name="Blue" value="2"></temba-option>
69
+ </temba-select>
70
+ </div>
71
+
72
+ <script>
73
+ function handleColorChange(event) {
74
+ console.log('Color changed:', event.target.value);
75
+ }
76
+ </script>
77
+
78
+ <script type="module">
79
+ import '../../out-tsc/temba-modules.js';
80
+ </script>
81
+ </body>
82
+ </html>
@@ -0,0 +1,73 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Multi-Select Examples</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link
16
+ href="../styles.css"
17
+ rel="stylesheet"
18
+ type="text/css"
19
+ />
20
+ </head>
21
+ <body>
22
+ <h1>Multi-Select Examples</h1>
23
+ <p><a href="../index.html">← Back to main demo</a> | <a href="example.html">Basic Examples</a> | <a href="drag-and-drop.html">Drag & Drop</a></p>
24
+
25
+ <div class="example">
26
+ <h3>Multi-Select with Expressions</h3>
27
+ <p>A multi-select that supports expressions and is searchable</p>
28
+ <temba-select
29
+ placeholder="Select a color"
30
+ expressions="message"
31
+ values='[{"name":"Red","value":"0"}]'
32
+ searchable
33
+ multi
34
+ >
35
+ <temba-option name="Red" value="0"></temba-option>
36
+ <temba-option name="Green" value="1"></temba-option>
37
+ <temba-option name="Blue" value="2"></temba-option>
38
+ </temba-select>
39
+ </div>
40
+
41
+ <div class="example">
42
+ <h3>Limited Multi-Select</h3>
43
+ <p>A multi-select with a maximum number of items (2)</p>
44
+ <temba-select
45
+ placeholder="Select 2 colors"
46
+ name="Color2"
47
+ label="Select up to 2 colors"
48
+ expressions="message"
49
+ maxItems="2"
50
+ values='[{"name":"Red","value":"0"}]'
51
+ searchable
52
+ multi
53
+ >
54
+ <temba-option name="Red" value="0"></temba-option>
55
+ <temba-option name="Green" value="1"></temba-option>
56
+ <temba-option name="Blue" value="2"></temba-option>
57
+ <temba-option name="Yellow" value="3"></temba-option>
58
+ <temba-option name="Purple" value="4"></temba-option>
59
+ </temba-select>
60
+ </div>
61
+
62
+ <div class="example">
63
+ <h3>Empty Multi-Select</h3>
64
+ <p>A multi-select with no options to show empty state</p>
65
+ <temba-select placeholder="Select multiple options" multi>
66
+ </temba-select>
67
+ </div>
68
+
69
+ <script type="module">
70
+ import '../../out-tsc/temba-modules.js';
71
+ </script>
72
+ </body>
73
+ </html>
@@ -0,0 +1,59 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Slider Examples</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link
16
+ href="../styles.css"
17
+ rel="stylesheet"
18
+ type="text/css"
19
+ />
20
+ </head>
21
+ <body>
22
+ <h1>Slider Examples</h1>
23
+ <p><a href="../index.html">← Back to main demo</a></p>
24
+
25
+ <div class="example">
26
+ <h3>Slider with Range</h3>
27
+ <p>A slider that shows the full range</p>
28
+ <temba-slider value="50" min="0" max="100" range></temba-slider>
29
+ </div>
30
+
31
+ <div class="example">
32
+ <h3>Slider without Range</h3>
33
+ <p>A slider that only shows the selected value</p>
34
+ <temba-slider value="50" min="0" max="100"></temba-slider>
35
+ </div>
36
+
37
+ <div class="example">
38
+ <h3>Slider with Different Range</h3>
39
+ <p>A slider with a different min/max range</p>
40
+ <temba-slider value="25" min="10" max="50" range></temba-slider>
41
+ </div>
42
+
43
+ <div class="example">
44
+ <h3>Slider at Minimum</h3>
45
+ <p>A slider set to its minimum value</p>
46
+ <temba-slider value="0" min="0" max="100" range></temba-slider>
47
+ </div>
48
+
49
+ <div class="example">
50
+ <h3>Slider at Maximum</h3>
51
+ <p>A slider set to its maximum value</p>
52
+ <temba-slider value="100" min="0" max="100" range></temba-slider>
53
+ </div>
54
+
55
+ <script type="module">
56
+ import '../../out-tsc/temba-modules.js';
57
+ </script>
58
+ </body>
59
+ </html>
@@ -0,0 +1,99 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Sortable List Examples</title>
6
+ <link
7
+ href="/static/css/temba-components.css"
8
+ rel="stylesheet"
9
+ type="text/css"
10
+ />
11
+ <link
12
+ href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
+ rel="stylesheet"
14
+ />
15
+ <link href="../styles.css" rel="stylesheet" type="text/css" />
16
+ </head>
17
+ <body>
18
+ <h1>Sortable List Examples</h1>
19
+ <p><a href="../index.html">← Back to main demo</a></p>
20
+
21
+ <h2>
22
+ This component relies on a consumer component that manages the actual
23
+ order of things. So this demo doesn't do anything after you drag items.
24
+ </h2>
25
+ <div class="example">
26
+ <h3>Basic Sortable List</h3>
27
+ <p>A list where items can be reordered by dragging</p>
28
+ <temba-sortable-list>
29
+ <div class="sortable">First Item</div>
30
+ <div class="sortable">Second Item</div>
31
+ <div class="sortable">Third Item</div>
32
+ <div class="sortable">Fourth Item</div>
33
+ </temba-sortable-list>
34
+ </div>
35
+
36
+ <div class="example">
37
+ <h3>Sortable List with Complex Items</h3>
38
+ <p>A sortable list containing more complex content</p>
39
+ <temba-sortable-list>
40
+ <div class="sortable">
41
+ <h4>Task 1</h4>
42
+ <p>Complete the user interface design</p>
43
+ </div>
44
+ <div class="sortable">
45
+ <h4>Task 2</h4>
46
+ <p>Implement backend API endpoints</p>
47
+ </div>
48
+ <div class="sortable">
49
+ <h4>Task 3</h4>
50
+ <p>Write comprehensive tests</p>
51
+ </div>
52
+ <div class="sortable">
53
+ <h4>Task 4</h4>
54
+ <p>Deploy to production environment</p>
55
+ </div>
56
+ </temba-sortable-list>
57
+ </div>
58
+
59
+ <div class="example">
60
+ <h3>Disabled Sortable List</h3>
61
+ <p>A list that cannot be reordered</p>
62
+ <temba-sortable-list disabled>
63
+ <div class="sortable">Fixed Item 1</div>
64
+ <div class="sortable">Fixed Item 2</div>
65
+ <div class="sortable">Fixed Item 3</div>
66
+ </temba-sortable-list>
67
+ </div>
68
+
69
+ <style>
70
+ .sortable {
71
+ padding: 12px;
72
+ margin: 4px 4px;
73
+ background: #f5f5f5;
74
+ border: 1px solid #ddd;
75
+ border-radius: 4px;
76
+ cursor: grab;
77
+ }
78
+
79
+ .sortable:active {
80
+ cursor: grabbing;
81
+ }
82
+
83
+ .sortable h4 {
84
+ margin: 0 0 8px 0;
85
+ color: #333;
86
+ }
87
+
88
+ .sortable p {
89
+ margin: 0;
90
+ color: #666;
91
+ font-size: 0.9em;
92
+ }
93
+ </style>
94
+
95
+ <script type="module">
96
+ import '../../out-tsc/temba-modules.js';
97
+ </script>
98
+ </body>
99
+ </html>