kempo-ui 0.3.4 → 0.3.6

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 (143) hide show
  1. package/AGENTS.md +2 -1
  2. package/dist/components/Aside.js +2 -0
  3. package/docs/components/accordion.html +240 -8
  4. package/docs/components/aside-items.html +13 -9
  5. package/docs/components/aside-menu.html +13 -9
  6. package/docs/components/aside-push.html +11 -6
  7. package/docs/components/aside.html +239 -8
  8. package/docs/components/card.html +238 -7
  9. package/docs/components/color-picker.html +245 -14
  10. package/docs/components/content-slider.html +240 -8
  11. package/docs/components/context.html +241 -7
  12. package/docs/components/dialog.html +238 -7
  13. package/docs/components/dropdown.html +238 -7
  14. package/docs/components/filter-list.html +239 -10
  15. package/docs/components/focus-capture.html +241 -10
  16. package/docs/components/html-editor.html +266 -35
  17. package/docs/components/hybrid-component.html +238 -6
  18. package/docs/components/icon.html +239 -9
  19. package/docs/components/import.html +239 -8
  20. package/docs/components/light-component.html +239 -7
  21. package/docs/components/nav.html +240 -8
  22. package/docs/components/photo-viewer.html +239 -9
  23. package/docs/components/resize.html +240 -9
  24. package/docs/components/shadow-component.html +239 -7
  25. package/docs/components/show-more.html +237 -8
  26. package/docs/components/sortable.html +239 -8
  27. package/docs/components/spinner.html +237 -6
  28. package/docs/components/split.html +241 -10
  29. package/docs/components/table.html +241 -11
  30. package/docs/components/tableControls.html +240 -7
  31. package/docs/components/tableCustomFields.html +241 -8
  32. package/docs/components/tableFetchRecords.html +239 -7
  33. package/docs/components/tableFieldSortHide.html +239 -7
  34. package/docs/components/tablePagination.html +246 -13
  35. package/docs/components/tablePlaceholder.html +241 -8
  36. package/docs/components/tableRecordEditing.html +241 -8
  37. package/docs/components/tableRecordFiltering.html +239 -7
  38. package/docs/components/tableRecordHiding.html +241 -9
  39. package/docs/components/tableRecordSearching.html +239 -7
  40. package/docs/components/tableRecordSelection.html +240 -7
  41. package/docs/components/tableRowControls.html +241 -8
  42. package/docs/components/tableServerSync.html +245 -11
  43. package/docs/components/tableSorting.html +239 -7
  44. package/docs/components/tabs.html +240 -7
  45. package/docs/components/tags.html +239 -7
  46. package/docs/components/theme-select.html +239 -7
  47. package/docs/components/theme-switcher.html +240 -8
  48. package/docs/components/timestamp.html +239 -8
  49. package/docs/components/toast.html +240 -8
  50. package/docs/components/toggle.html +240 -9
  51. package/docs/components/tree.html +239 -8
  52. package/docs/index.html +244 -6
  53. package/docs/prod.config.json +0 -4
  54. package/docs/src/components/Aside.js +2 -0
  55. package/docs/utils/context.html +237 -6
  56. package/docs/utils/cookie.html +251 -21
  57. package/docs/utils/debounce.html +236 -5
  58. package/docs/utils/drag.html +236 -5
  59. package/docs/utils/elevation.html +238 -6
  60. package/docs/utils/formatTimestamp.html +233 -3
  61. package/docs/utils/object.html +236 -5
  62. package/docs/utils/propConverters.html +233 -3
  63. package/docs/utils/string.html +236 -5
  64. package/docs/utils/theme.html +237 -6
  65. package/docs/utils/toTitleCase.html +233 -3
  66. package/docs/utils/type.html +236 -5
  67. package/docs/utils/wait.html +236 -5
  68. package/docs-src/.config.js +16 -0
  69. package/docs-src/bare.template.html +16 -0
  70. package/docs-src/components/accordion.page.html +201 -0
  71. package/docs-src/components/aside-items.page.html +36 -0
  72. package/docs-src/components/aside-menu.page.html +36 -0
  73. package/docs-src/components/aside-push.page.html +20 -0
  74. package/docs-src/components/aside.page.html +551 -0
  75. package/docs-src/components/card.page.html +78 -0
  76. package/docs-src/components/color-picker.page.html +559 -0
  77. package/docs-src/components/content-slider.page.html +266 -0
  78. package/docs-src/components/context.page.html +214 -0
  79. package/docs-src/components/dialog.page.html +365 -0
  80. package/docs-src/components/dropdown.page.html +300 -0
  81. package/docs-src/components/filter-list.page.html +117 -0
  82. package/docs-src/components/focus-capture.page.html +97 -0
  83. package/docs-src/components/html-editor.page.html +423 -0
  84. package/docs-src/components/hybrid-component.page.html +96 -0
  85. package/docs-src/components/icon.page.html +208 -0
  86. package/docs-src/components/import.page.html +76 -0
  87. package/docs-src/components/light-component.page.html +99 -0
  88. package/docs-src/components/nav.page.html +106 -0
  89. package/docs-src/components/photo-viewer.page.html +253 -0
  90. package/docs-src/components/resize.page.html +161 -0
  91. package/docs-src/components/shadow-component.page.html +84 -0
  92. package/docs-src/components/show-more.page.html +113 -0
  93. package/docs-src/components/sortable.page.html +117 -0
  94. package/docs-src/components/spinner.page.html +197 -0
  95. package/docs-src/components/split.page.html +195 -0
  96. package/docs-src/components/table.page.html +283 -0
  97. package/docs-src/components/tableControls.page.html +64 -0
  98. package/docs-src/components/tableCustomFields.page.html +124 -0
  99. package/docs-src/components/tableFetchRecords.page.html +95 -0
  100. package/docs-src/components/tableFieldSortHide.page.html +56 -0
  101. package/docs-src/components/tablePagination.page.html +85 -0
  102. package/docs-src/components/tablePlaceholder.page.html +73 -0
  103. package/docs-src/components/tableRecordEditing.page.html +161 -0
  104. package/docs-src/components/tableRecordFiltering.page.html +69 -0
  105. package/docs-src/components/tableRecordHiding.page.html +65 -0
  106. package/docs-src/components/tableRecordSearching.page.html +56 -0
  107. package/docs-src/components/tableRecordSelection.page.html +60 -0
  108. package/docs-src/components/tableRowControls.page.html +62 -0
  109. package/docs-src/components/tableServerSync.page.html +129 -0
  110. package/docs-src/components/tableSorting.page.html +54 -0
  111. package/docs-src/components/tabs.page.html +201 -0
  112. package/docs-src/components/tags.page.html +157 -0
  113. package/docs-src/components/theme-select.page.html +106 -0
  114. package/docs-src/components/theme-switcher.page.html +122 -0
  115. package/docs-src/components/timestamp.page.html +109 -0
  116. package/docs-src/components/toast.page.html +338 -0
  117. package/docs-src/components/toggle.page.html +177 -0
  118. package/docs-src/components/tree.page.html +356 -0
  119. package/docs-src/default.template.html +28 -0
  120. package/docs-src/index.page.html +312 -0
  121. package/docs-src/nav.fragment.html +228 -0
  122. package/docs-src/utils/context.page.html +143 -0
  123. package/docs-src/utils/cookie.page.html +128 -0
  124. package/docs-src/utils/debounce.page.html +42 -0
  125. package/docs-src/utils/drag.page.html +64 -0
  126. package/docs-src/utils/elevation.page.html +144 -0
  127. package/docs-src/utils/formatTimestamp.page.html +76 -0
  128. package/docs-src/utils/object.page.html +76 -0
  129. package/docs-src/utils/propConverters.page.html +73 -0
  130. package/docs-src/utils/string.page.html +66 -0
  131. package/docs-src/utils/theme.page.html +136 -0
  132. package/docs-src/utils/toTitleCase.page.html +52 -0
  133. package/docs-src/utils/type.page.html +31 -0
  134. package/docs-src/utils/wait.page.html +31 -0
  135. package/package.json +4 -4
  136. package/scripts/build.js +5 -0
  137. package/scripts/docs.js +5 -52
  138. package/src/components/Aside.js +2 -0
  139. package/tests/components/Aside.browser-test.js +35 -0
  140. package/docs/dev.config.json +0 -20
  141. package/docs/nav-1.inc.html +0 -168
  142. package/docs/nav.inc.html +0 -168
  143. package/docs/nav.inc.js +0 -70
@@ -0,0 +1,161 @@
1
+ <page pageName="Table - Record Editing" title="Record Editing - Table - Kempo Docs - A Web Components Solution">
2
+ <content location="head">
3
+ <script>
4
+ window.contacts = [];
5
+ function generateContact(){
6
+ const maleNames = [
7
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
8
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
9
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
10
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
11
+ "Wyatt", "Matthew"
12
+ ];
13
+ const femaleNames = [
14
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
15
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
16
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
17
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
18
+ "Grace", "Nora", "Riley", "Zoey"
19
+ ];
20
+ const lastNames = [
21
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
22
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
23
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
24
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
25
+ "Ramirez", "Lewis", "Robinson"
26
+ ];
27
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
28
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
29
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
30
+ const name = `${firstName} ${lastName}`;
31
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
32
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
33
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
34
+ return { name, email, birthday, phoneNumber, gender };
35
+ }
36
+ for (let i = 0; i < 10; i++) {
37
+ contacts.push(generateContact());
38
+ };
39
+ </script>
40
+ </content>
41
+ <content>
42
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
43
+
44
+ <p>The table component supports record editing. To allow for editing add the "edit" control to the "before" or "after" controls. You may define a "type" on the field, which will tell the table to use a specific editor for that field. If you do not define a "type" it will attempt to find the correct type using the value.</p>
45
+ <p>You can also define a custom editor by adding a generator function to the <code>Table.editors</code> object that will generate an input (or select). This will be global to all tables on the page.</p>
46
+ <p>You can also define a custom editor on a per-field basis by adding an "editor" generator function to the field object. This will override the global editor for that field.</p>
47
+
48
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span><br /> <span class="hljs-attr">id</span>=<span class="hljs-string">"recordEditingExample"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-edit</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"after"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-edit</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-keyword">import</span> Table <span class="hljs-keyword">from</span> <span class="hljs-string">'/src/components/Table.js'</span>;<br /> <span class="hljs-keyword">await</span> <span class="hljs-built_in">window</span>.customElements.whenDefined(<span class="hljs-string">'k-table'</span>);<br /> Table.editors.tel = <span class="hljs-function">(<span class="hljs-params">v</span>) =&gt;</span> {<br /> <span class="hljs-keyword">const</span> $input = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"input"</span>);<br /> $input.value = v;<br /> $input.addEventListener(<span class="hljs-string">'change'</span>, () =&gt; {<br /> $input.value = $input.value.replace(<span class="hljs-regexp">/\D/g</span>, <span class="hljs-string">''</span>); <span class="hljs-comment">// Remove all non-digit characters</span><br /> <span class="hljs-keyword">if</span> ($input.value.length === <span class="hljs-number">7</span>) {<br /> $input.value = $input.value.replace(<span class="hljs-regexp">/(\d{3})(\d{4})/</span>, <span class="hljs-string">'$1-$2'</span>);<br /> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> ($input.value.length === <span class="hljs-number">10</span>) {<br /> $input.value = $input.value.replace(<span class="hljs-regexp">/(\d{3})(\d{3})(\d{4})/</span>, <span class="hljs-string">'($1) $2-$3'</span>);<br /> } <span class="hljs-keyword">else</span> {<br /> $input.value = v; <span class="hljs-comment">// Reset to default value if not 7 or 10 digits</span><br /> }<br /> });<br /> <span class="hljs-keyword">return</span> $input;<br /> };<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'recordEditingExample'</span>).setData({<br /> <span class="hljs-attr">records</span>: contacts,<br /> <span class="hljs-attr">fields</span>: [<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"name"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Name"</span><br /> },<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"email"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Email"</span><br /> },<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"birthday"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Birthday"</span>,<br /> <span class="hljs-attr">type</span>: <span class="hljs-string">"date"</span>,<br /> },<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"phoneNumber"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Phone Number"</span>,<br /> <span class="hljs-attr">type</span>: <span class="hljs-string">"tel"</span><br /> },<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"age"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Age"</span>,<br /> <span class="hljs-attr">calculator</span>: <span class="hljs-function">(<span class="hljs-params">record</span>) =&gt;</span> {<br /> <span class="hljs-keyword">const</span> today = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>();<br /> <span class="hljs-keyword">const</span> birthDate = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(record.birthday);<br /> <span class="hljs-keyword">let</span> age = today.getFullYear() - birthDate.getFullYear();<br /> <span class="hljs-keyword">const</span> monthDifference = today.getMonth() - birthDate.getMonth();<br /> <span class="hljs-keyword">if</span> (monthDifference &lt; <span class="hljs-number">0</span> || (monthDifference === <span class="hljs-number">0</span> &amp;&amp; today.getDate() &lt; birthDate.getDate())) {<br /> age--;<br /> }<br /> <span class="hljs-keyword">return</span> age;<br /> }<br /> },<br /> {<br /> <span class="hljs-attr">name</span>: <span class="hljs-string">"gender"</span>,<br /> <span class="hljs-attr">label</span>: <span class="hljs-string">"Gender"</span>,<br /> <span class="hljs-attr">formatter</span>: <span class="hljs-function">(<span class="hljs-params">v</span>) =&gt;</span> v === <span class="hljs-string">"m"</span> ? <span class="hljs-string">"Male"</span> : <span class="hljs-string">"Female"</span>,<br /> <span class="hljs-attr">editor</span>: <span class="hljs-function">(<span class="hljs-params">v</span>) =&gt;</span> {<br /> <span class="hljs-keyword">const</span> $select = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"select"</span>);<br /> $select.innerHTML = <span class="hljs-string">`<br /> &lt;option value="m"&gt;Male&lt;/option&gt;<br /> &lt;option value="f"&gt;Female&lt;/option&gt;<br /> `</span>;<br /> $select.value = v;<br /> <span class="hljs-keyword">return</span> $select;<br /> }<br /> }<br /> ]<br /> });<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
49
+
50
+ <k-table
51
+ id="recordEditingExample"
52
+ >
53
+ <k-tc-edit slot="after"></k-tc-edit>
54
+ </k-table>
55
+ <script type="module">
56
+ import Table from '{{pathToRoot}}src/components/Table.js';
57
+ await window.customElements.whenDefined('k-table');
58
+ Table.editors.tel = (v) => {
59
+ const $input = document.createElement("input");
60
+ $input.value = v;
61
+ $input.addEventListener('change', () => {
62
+ $input.value = $input.value.replace(/\D/g, ''); // Remove all non-digit characters
63
+ if ($input.value.length === 7) {
64
+ $input.value = $input.value.replace(/(\d{3})(\d{4})/, '$1-$2');
65
+ } else if ($input.value.length === 10) {
66
+ $input.value = $input.value.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
67
+ } else {
68
+ $input.value = v; // Reset to default value if not 7 or 10 digits
69
+ }
70
+ });
71
+ return $input;
72
+ };
73
+ document.getElementById('recordEditingExample').setData({
74
+ records: contacts,
75
+ fields: [
76
+ {
77
+ name: "name",
78
+ label: "Name"
79
+ },
80
+ {
81
+ name: "email",
82
+ label: "Email"
83
+ },
84
+ {
85
+ name: "birthday",
86
+ label: "Birthday",
87
+ type: "date",
88
+ },
89
+ {
90
+ name: "phoneNumber",
91
+ label: "Phone Number",
92
+ type: "tel"
93
+ },
94
+ {
95
+ name: "age",
96
+ label: "Age",
97
+ calculator: (record) => {
98
+ const today = new Date();
99
+ const birthDate = new Date(record.birthday);
100
+ let age = today.getFullYear() - birthDate.getFullYear();
101
+ const monthDifference = today.getMonth() - birthDate.getMonth();
102
+ if (monthDifference < 0 || (monthDifference === 0 && today.getDate() < birthDate.getDate())) {
103
+ age--;
104
+ }
105
+ return age;
106
+ }
107
+ },
108
+ {
109
+ name: "gender",
110
+ label: "Gender",
111
+ formatter: (v) => v === "m" ? "Male" : "Female",
112
+ editor: (v) => {
113
+ const $select = document.createElement("select");
114
+ $select.innerHTML = `
115
+ <option value="m">Male</option>
116
+ <option value="f">Female</option>
117
+ `;
118
+ $select.value = v;
119
+ return $select;
120
+ }
121
+ }
122
+ ]
123
+ });
124
+ </script>
125
+
126
+ <h3>Non-Editable Fields</h3>
127
+ <p>Set <code>editable: false</code> on a field definition to make it read-only during record editing. The cell will display its value normally while the row is in edit mode. This is useful for fields like IDs or calculated values that should not be changed directly.</p>
128
+
129
+ <pre><code class="hljs javascript"><span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&#x27;nonEditableFieldExample&#x27;</span>).<span class="hljs-title function_">setData</span>({<br> <span class="hljs-attr">records</span>: contacts,<br> <span class="hljs-attr">fields</span>: [{<br> <span class="hljs-attr">name</span>: <span class="hljs-string">&#x27;name&#x27;</span>,<br> <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Name&#x27;</span>,<br> <span class="hljs-attr">editable</span>: <span class="hljs-literal">false</span><br> }, {<br> <span class="hljs-attr">name</span>: <span class="hljs-string">&#x27;email&#x27;</span>,<br> <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Email&#x27;</span><br> }, {<br> <span class="hljs-attr">name</span>: <span class="hljs-string">&#x27;birthday&#x27;</span>,<br> <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Birthday&#x27;</span>,<br> <span class="hljs-attr">type</span>: <span class="hljs-string">&#x27;date&#x27;</span><br> }]<br>});</code></pre>
130
+
131
+ <k-table id="nonEditableFieldExample">
132
+ <k-tc-edit slot="after"></k-tc-edit>
133
+ </k-table>
134
+ <script type="module">
135
+ await window.customElements.whenDefined('k-table');
136
+ document.getElementById('nonEditableFieldExample').setData({
137
+ records: contacts,
138
+ fields: [
139
+ {
140
+ name: 'name',
141
+ label: 'Name',
142
+ editable: false
143
+ },
144
+ {
145
+ name: 'email',
146
+ label: 'Email'
147
+ },
148
+ {
149
+ name: 'birthday',
150
+ label: 'Birthday',
151
+ type: 'date'
152
+ }
153
+ ]
154
+ });
155
+ </script>
156
+ </content>
157
+ <content location="scripts">
158
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
159
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/Edit.js"></script>
160
+ </content>
161
+ </page>
@@ -0,0 +1,69 @@
1
+ <page pageName="Table - Record Filtering" title="Record Filtering - Table - Kempo Docs">
2
+ <content location="head">
3
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
4
+ <script>
5
+ window.contacts = [];
6
+ function generateContact(){
7
+ const maleNames = [
8
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
9
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
10
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
11
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
12
+ "Wyatt", "Matthew"
13
+ ];
14
+ const femaleNames = [
15
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
16
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
17
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
18
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
19
+ "Grace", "Nora", "Riley", "Zoey"
20
+ ];
21
+ const lastNames = [
22
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
23
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
24
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
25
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
26
+ "Ramirez", "Lewis", "Robinson"
27
+ ];
28
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
29
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
30
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
31
+ const name = `${firstName} ${lastName}`;
32
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
33
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
34
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
35
+ return { name, email, birthday, phoneNumber, gender };
36
+ }
37
+ for (let i = 0; i < 10; i++) {
38
+ contacts.push(generateContact());
39
+ };
40
+ </script>
41
+ </content>
42
+ <content>
43
+
44
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
45
+
46
+ <p>Record filtering is a feature that allows users to filter the records displayed in the table. The table component provides a filter control that can be used to filter records based on the values in the columns. This control uses a Dialog to display the current filters and allows the user to create filters.</p>
47
+
48
+ <h3>Basic Filtering (Case-Insensitive)</h3>
49
+ <p>By default, filters are case-insensitive. This means that filtering for "smith" will match "Smith", "SMITH", and "smith".</p>
50
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"recordFilteringExample"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-filters</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"top"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-filters</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/src/components/tableControls/Filters.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'recordFilteringExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
51
+ <k-table id="recordFilteringExample">
52
+ <k-tc-filters slot="top"></k-tc-filters>
53
+ </k-table>
54
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/Filters.js"></script>
55
+ <script type="module">
56
+ document.getElementById('recordFilteringExample').setRecords(contacts);
57
+ </script>
58
+
59
+ <h3>Case-Sensitive Filtering</h3>
60
+ <p>You can enable case-sensitive filtering by adding the <code>case-sensitive-filters</code> attribute. With this enabled, filtering for "smith" will only match "smith", not "Smith" or "SMITH".</p>
61
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"caseSensitiveExample"</span> <span class="hljs-attr">case-sensitive-filters</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-filters</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"top"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-filters</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'caseSensitiveExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
62
+ <k-table id="caseSensitiveExample" case-sensitive-filters>
63
+ <k-tc-filters slot="top"></k-tc-filters>
64
+ </k-table>
65
+ <script type="module">
66
+ document.getElementById('caseSensitiveExample').setRecords(contacts);
67
+ </script>
68
+ </content>
69
+ </page>
@@ -0,0 +1,65 @@
1
+ <page pageName="Table - Record Hiding" title="Row Controls - Table - Kempo Docs">
2
+ <content location="head">
3
+ <script>
4
+ window.contacts = [];
5
+ function generateContact(){
6
+ const maleNames = [
7
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
8
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
9
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
10
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
11
+ "Wyatt", "Matthew"
12
+ ];
13
+ const femaleNames = [
14
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
15
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
16
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
17
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
18
+ "Grace", "Nora", "Riley", "Zoey"
19
+ ];
20
+ const lastNames = [
21
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
22
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
23
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
24
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
25
+ "Ramirez", "Lewis", "Robinson"
26
+ ];
27
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
28
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
29
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
30
+ const name = `${firstName} ${lastName}`;
31
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
32
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
33
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
34
+ return { name, email, birthday, phoneNumber, gender };
35
+ }
36
+ for (let i = 0; i < 10; i++) {
37
+ contacts.push(generateContact());
38
+ };
39
+ </script>
40
+ </content>
41
+ <content>
42
+
43
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
44
+
45
+ <p>The table component supports record hiding. To allow for hiding add the "hide" control to the "before" or "after" controls. There is a built-in "showAll" control that can be added to the "top" or "bottom" controls to reveal previously hidden fields.</p>
46
+
47
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"recordHidingExample"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-hide</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"after"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-hide</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-hidden-count</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-hidden-count</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-show-all</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-show-all</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-keyword">await</span> <span class="hljs-built_in">window</span>.customElements.whenDefined(<span class="hljs-string">'k-table'</span>);<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'recordHidingExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
48
+
49
+ <k-table id="recordHidingExample">
50
+ <k-tc-hide slot="after"></k-tc-hide>
51
+ <k-tc-hidden-count></k-tc-hidden-count>
52
+ <k-tc-show-all></k-tc-show-all>
53
+ </k-table>
54
+ <script type="module">
55
+ await window.customElements.whenDefined('k-table');
56
+ document.getElementById('recordHidingExample').setRecords(contacts);
57
+ </script>
58
+ </content>
59
+ <content location="scripts">
60
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
61
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/Hide.js"></script>
62
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/HiddenCount.js"></script>
63
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/ShowAll.js"></script>
64
+ </content>
65
+ </page>
@@ -0,0 +1,56 @@
1
+ <page pageName="Table - Record Searching" title="Record Searching - Table - Kempo Docs">
2
+ <content location="head">
3
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
4
+ <script>
5
+ window.contacts = [];
6
+ function generateContact(){
7
+ const maleNames = [
8
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
9
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
10
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
11
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
12
+ "Wyatt", "Matthew"
13
+ ];
14
+ const femaleNames = [
15
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
16
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
17
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
18
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
19
+ "Grace", "Nora", "Riley", "Zoey"
20
+ ];
21
+ const lastNames = [
22
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
23
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
24
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
25
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
26
+ "Ramirez", "Lewis", "Robinson"
27
+ ];
28
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
29
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
30
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
31
+ const name = `${firstName} ${lastName}`;
32
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
33
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
34
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
35
+ return { name, email, birthday, phoneNumber, gender };
36
+ }
37
+ for (let i = 0; i < 10; i++) {
38
+ contacts.push(generateContact());
39
+ };
40
+ </script>
41
+ </content>
42
+ <content>
43
+
44
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
45
+
46
+ <p>The search control (aka quick filter) is a feature that allows users to filter the records displayed in the table. The control is a search input that can be used to filter records based on the values in the columns.</p>
47
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"quickFilterExample"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-search</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"top"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"width: 20rem"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-search</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/src/components/tableControls/Search.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'quickFilterExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
48
+ <k-table id="quickFilterExample">
49
+ <k-tc-search slot="top" style="width: 20rem"></k-tc-search>
50
+ </k-table>
51
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/Search.js"></script>
52
+ <script type="module">
53
+ document.getElementById('quickFilterExample').setRecords(contacts);
54
+ </script>
55
+ </content>
56
+ </page>
@@ -0,0 +1,60 @@
1
+ <page pageName="Table - Record Selection" title="Record Selection - Table - Kempo Docs - A Web Components Solution">
2
+ <content location="head">
3
+ <script>
4
+ window.contacts = [];
5
+ function generateContact(){
6
+ const maleNames = [
7
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
8
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
9
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
10
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
11
+ "Wyatt", "Matthew"
12
+ ];
13
+ const femaleNames = [
14
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
15
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
16
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
17
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
18
+ "Grace", "Nora", "Riley", "Zoey"
19
+ ];
20
+ const lastNames = [
21
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
22
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
23
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
24
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
25
+ "Ramirez", "Lewis", "Robinson"
26
+ ];
27
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
28
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
29
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
30
+ const name = `${firstName} ${lastName}`;
31
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
32
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
33
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
34
+ return { name, email, birthday, phoneNumber, gender };
35
+ }
36
+ for (let i = 0; i < 10; i++) {
37
+ contacts.push(generateContact());
38
+ };
39
+ </script>
40
+ </content>
41
+ <content>
42
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
43
+
44
+ <p>The table component supports record selection. You can enable selection by setting the <code>enable-selection</code> attribute to <code>true</code>. This will add a checkbox to each row and a "Select All" checkbox to the header.</p>
45
+
46
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span><br /> <span class="hljs-attr">id</span>=<span class="hljs-string">"recordSelectionExample"</span><br /> <span class="hljs-attr">enable-selection</span><br />&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-keyword">await</span> <span class="hljs-built_in">window</span>.customElements.whenDefined(<span class="hljs-string">'k-table'</span>);<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'recordSelectionExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
47
+
48
+ <k-table
49
+ id="recordSelectionExample"
50
+ enable-selection
51
+ ></k-table>
52
+ <script type="module">
53
+ await window.customElements.whenDefined('k-table');
54
+ document.getElementById('recordSelectionExample').setRecords(contacts);
55
+ </script>
56
+ </content>
57
+ <content location="scripts">
58
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
59
+ </content>
60
+ </page>
@@ -0,0 +1,62 @@
1
+ <page pageName="Table - Row Controls" title="Row Controls - Table - Kempo Docs">
2
+ <content location="head">
3
+ <script>
4
+ window.contacts = [];
5
+ function generateContact(){
6
+ const maleNames = [
7
+ "Liam", "Noah", "Oliver", "Elijah", "William", "James", "Benjamin",
8
+ "Lucas", "Henry", "Alexander", "Mason", "Michael", "Ethan", "Daniel",
9
+ "Jacob", "Logan", "Jackson", "Levi", "Sebastian", "Mateo", "Jack",
10
+ "Owen", "Theodore", "Aiden", "Samuel", "Joseph", "John", "David",
11
+ "Wyatt", "Matthew"
12
+ ];
13
+ const femaleNames = [
14
+ "Olivia", "Emma", "Ava", "Sophia", "Isabella", "Mia", "Amelia",
15
+ "Harper", "Evelyn", "Abigail", "Emily", "Ella", "Elizabeth",
16
+ "Camila", "Luna", "Sofia", "Avery", "Mila", "Aria", "Scarlett",
17
+ "Penelope", "Layla", "Chloe", "Victoria", "Madison", "Eleanor",
18
+ "Grace", "Nora", "Riley", "Zoey"
19
+ ];
20
+ const lastNames = [
21
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller",
22
+ "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez",
23
+ "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin",
24
+ "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark",
25
+ "Ramirez", "Lewis", "Robinson"
26
+ ];
27
+ const gender = Math.random() > 0.5 ? 'm' : 'f';
28
+ const firstName = gender === 'm' ? maleNames[Math.floor(Math.random() * maleNames.length)] : femaleNames[Math.floor(Math.random() * femaleNames.length)];
29
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
30
+ const name = `${firstName} ${lastName}`;
31
+ const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@mailserver.com`;
32
+ const birthday = `${Math.floor(Math.random() * 100) + 1920}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`;
33
+ const phoneNumber = `(${Math.floor(Math.random() * 900) + 100}) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;
34
+ return { name, email, birthday, phoneNumber, gender };
35
+ }
36
+ for (let i = 0; i < 5; i++) {
37
+ contacts.push(generateContact());
38
+ };
39
+ </script>
40
+ </content>
41
+ <content>
42
+
43
+ <a href="./table.html"><h5>Back to Table Component Documentation</h5></a>
44
+ <p>The table component can display controls before or after each row. Each control is defined by an icon name, a callback function, and optionally an HTML string or a render function. Use <code>slot="before"</code> to add the control before each row, and use <code>slot="after"</code> to add the control after each row.</p>
45
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"rowControlsExample"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-export-json</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"before"</span> <span class="hljs-attr">max-width</span>=<span class="hljs-string">"40"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-icon</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"export-file"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-icon</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-export-json</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-tc-delete-record</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"after"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">k-tc-delete-record</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-table</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript"><br /> <span class="hljs-keyword">await</span> <span class="hljs-built_in">window</span>.customElements.whenDefined(<span class="hljs-string">'k-table'</span>);<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'rowControlsExample'</span>).setRecords(contacts);<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
46
+ <k-table id="rowControlsExample">
47
+ <k-tc-export-json slot="before" max-width="40">
48
+ <k-icon name="export-file"></k-icon>
49
+ </k-tc-export-json>
50
+ <k-tc-delete-record slot="after"></k-tc-delete-record>
51
+ </k-table>
52
+ <script type="module">
53
+ await window.customElements.whenDefined('k-table');
54
+ document.getElementById('rowControlsExample').setRecords(contacts);
55
+ </script>
56
+ </content>
57
+ <content location="scripts">
58
+ <script type="module" src="{{pathToRoot}}src/components/Table.js"></script>
59
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/ExportJson.js"></script>
60
+ <script type="module" src="{{pathToRoot}}src/components/tableControls/DeleteRecord.js"></script>
61
+ </content>
62
+ </page>