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,312 @@
1
+ <page pageName="Kempo UI" title="Kempo UI Documentation">
2
+ <content location="header"></content>
3
+ <content>
4
+ <h1 class="ta-center">
5
+ <img
6
+ src="{{pathToRoot}}media/icon64.png"
7
+ alt="Kempo UI Icon"
8
+ />
9
+ <span
10
+ class="d-ib py"
11
+ style="vertical-align: bottom"
12
+ >
13
+ Kempo UI
14
+ </span>
15
+ </h1>
16
+ <p>A lit-based web component library.</p>
17
+ <p>Current Version: <code id="version">unknown</code></p>
18
+
19
+ <h2>Getting Started</h2>
20
+ <div class="row -mx">
21
+ <div class="span-12 t-span-4 d-span-4 px">
22
+ <p>Install using NPM.</p>
23
+ <pre><code class="hljs bash">npm install kempo-ui</code></pre>
24
+ </div>
25
+ <div class="span-12 t-span-4 d-span-4 px">
26
+ <p>or clone the git repo</p>
27
+ <pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> https://github.com/dustinpoissant/kempo-ui.git</code></pre>
28
+ </div>
29
+ <div class="span-12 t-span-6 d-span-4 px">
30
+ <p>or download directly</p>
31
+ <a href="https://github.com/dustinpoissant/kempo-ui/archive/refs/heads/main.zip" target="_blank"
32
+ class="btn primary">Download Zip</a>
33
+ </div>
34
+ </div>
35
+
36
+ <h2>Components</h2>
37
+ <div class="row -mx">
38
+ <div class="span-12 t-span-6 d-span-4 px">
39
+ <a href="{{pathToRoot}}components/accordion.html" class="card mb no-link d-b">
40
+ <h3 class="tc-primary">Accordion</h3>
41
+ <p class="tc-muted">Collapsible sections with smooth animations and toggle controls.</p>
42
+ </a>
43
+ </div>
44
+ <div class="span-12 t-span-6 d-span-4 px">
45
+ <a href="{{pathToRoot}}components/aside.html" class="card mb no-link d-b">
46
+ <h3 class="tc-primary">Aside</h3>
47
+ <p class="tc-muted">Enhanced sidebar component with push and overlay modes.</p>
48
+ </a>
49
+ </div>
50
+ <div class="span-12 t-span-6 d-span-4 px">
51
+ <a href="{{pathToRoot}}components/card.html" class="card mb no-link d-b">
52
+ <h3 class="tc-primary">Card</h3>
53
+ <p class="tc-muted">Container component with optional labels and border styling.</p>
54
+ </a>
55
+ </div>
56
+ <div class="span-12 t-span-6 d-span-4 px">
57
+ <a href="{{pathToRoot}}components/color-picker.html" class="card mb no-link d-b">
58
+ <h3 class="tc-primary">ColorPicker</h3>
59
+ <p class="tc-muted">Advanced color selection supporting all CSS color formats with alpha transparency.</p>
60
+ </a>
61
+ </div>
62
+ <div class="span-12 t-span-6 d-span-4 px">
63
+ <a href="{{pathToRoot}}components/content-slider.html" class="card mb no-link d-b">
64
+ <h3 class="tc-primary">Content Slider</h3>
65
+ <p class="tc-muted">Swipeable carousel for images and content with navigation controls.</p>
66
+ </a>
67
+ </div>
68
+ <div class="span-12 t-span-6 d-span-4 px">
69
+ <a href="{{pathToRoot}}components/context.html" class="card mb no-link d-b">
70
+ <h3 class="tc-primary">Context</h3>
71
+ <p class="tc-muted">Non-rendering state container for sharing data and notifying descendant components of changes.</p>
72
+ </a>
73
+ </div>
74
+ <div class="span-12 t-span-6 d-span-4 px">
75
+ <a href="{{pathToRoot}}components/dialog.html" class="card mb no-link d-b">
76
+ <h3 class="tc-primary">Dialog</h3>
77
+ <p class="tc-muted">Modal dialogs with focus trapping and customizable buttons.</p>
78
+ </a>
79
+ </div>
80
+ <div class="span-12 t-span-6 d-span-4 px">
81
+ <a href="{{pathToRoot}}components/dropdown.html" class="card mb no-link d-b">
82
+ <h3 class="tc-primary">Dropdown</h3>
83
+ <p class="tc-muted">Action menus with keyboard navigation and customizable positioning.</p>
84
+ </a>
85
+ </div>
86
+ <div class="span-12 t-span-6 d-span-4 px">
87
+ <a href="{{pathToRoot}}components/filter-list.html" class="card mb no-link d-b">
88
+ <h3 class="tc-primary">Filter List</h3>
89
+ <p class="tc-muted">Show or hide items based on a search term matching their filter keywords.</p>
90
+ </a>
91
+ </div>
92
+ <div class="span-12 t-span-6 d-span-4 px">
93
+ <a href="{{pathToRoot}}components/focus-capture.html" class="card mb no-link d-b">
94
+ <h3 class="tc-primary">FocusCapture</h3>
95
+ <p class="tc-muted">Trap keyboard focus within a container for accessibility.</p>
96
+ </a>
97
+ </div>
98
+ <div class="span-12 t-span-6 d-span-4 px">
99
+ <a href="{{pathToRoot}}components/html-editor.html" class="card mb no-link d-b">
100
+ <h3 class="tc-primary">HTML Editor</h3>
101
+ <p class="tc-muted">WYSIWYG editor with formatting tools and dual editing modes.</p>
102
+ </a>
103
+ </div>
104
+ <div class="span-12 t-span-6 d-span-4 px">
105
+ <a href="{{pathToRoot}}components/icon.html" class="card mb no-link d-b">
106
+ <h3 class="tc-primary">Icon</h3>
107
+ <p class="tc-muted">Display SVG icons from a collection with customizable size and color.</p>
108
+ </a>
109
+ </div>
110
+ <div class="span-12 t-span-6 d-span-4 px">
111
+ <a href="{{pathToRoot}}components/import.html" class="card mb no-link d-b">
112
+ <h3 class="tc-primary">Import</h3>
113
+ <p class="tc-muted">Dynamically load and include HTML snippets into your pages.</p>
114
+ </a>
115
+ </div>
116
+ <div class="span-12 t-span-6 d-span-4 px">
117
+ <a href="{{pathToRoot}}components/nav.html" class="card mb no-link d-b">
118
+ <h3 class="tc-primary">Nav</h3>
119
+ <p class="tc-muted">Fixed navigation bar with automatic elevation applied at the correct stacking level.</p>
120
+ </a>
121
+ </div>
122
+ <div class="span-12 t-span-6 d-span-4 px">
123
+ <a href="{{pathToRoot}}components/photo-viewer.html" class="card mb no-link d-b">
124
+ <h3 class="tc-primary">Photo Viewer</h3>
125
+ <p class="tc-muted">Lightbox gallery for viewing images with zoom and navigation.</p>
126
+ </a>
127
+ </div>
128
+ <div class="span-12 t-span-6 d-span-4 px">
129
+ <a href="{{pathToRoot}}components/resize.html" class="card mb no-link d-b">
130
+ <h3 class="tc-primary">Resize</h3>
131
+ <p class="tc-muted">Draggable handle to resize adjacent elements dynamically.</p>
132
+ </a>
133
+ </div>
134
+ <div class="span-12 t-span-6 d-span-4 px">
135
+ <a href="{{pathToRoot}}components/show-more.html" class="card mb no-link d-b">
136
+ <h3 class="tc-primary">Show More</h3>
137
+ <p class="tc-muted">Truncate long content with a "show more" button to expand.</p>
138
+ </a>
139
+ </div>
140
+ <div class="span-12 t-span-6 d-span-4 px">
141
+ <a href="{{pathToRoot}}components/sortable.html" class="card mb no-link d-b">
142
+ <h3 class="tc-primary">Sortable</h3>
143
+ <p class="tc-muted">Drag-and-drop lists with reordering and sort events.</p>
144
+ </a>
145
+ </div>
146
+ <div class="span-12 t-span-6 d-span-4 px">
147
+ <a href="{{pathToRoot}}components/spinner.html" class="card mb no-link d-b">
148
+ <h3 class="tc-primary">Spinner</h3>
149
+ <p class="tc-muted">Loading indicators with multiple styles and sizes.</p>
150
+ </a>
151
+ </div>
152
+ <div class="span-12 t-span-6 d-span-4 px">
153
+ <a href="{{pathToRoot}}components/split.html" class="card mb no-link d-b">
154
+ <h3 class="tc-primary">Split</h3>
155
+ <p class="tc-muted">Resizable split panes with horizontal or vertical layouts.</p>
156
+ </a>
157
+ </div>
158
+ <div class="span-12 t-span-6 d-span-4 px">
159
+ <a href="{{pathToRoot}}components/table.html" class="card mb no-link d-b">
160
+ <h3 class="tc-primary">Table</h3>
161
+ <p class="tc-muted">Feature-rich data tables with sorting, filtering, and pagination.</p>
162
+ </a>
163
+ </div>
164
+ <div class="span-12 t-span-6 d-span-4 px">
165
+ <a href="{{pathToRoot}}components/tabs.html" class="card mb no-link d-b">
166
+ <h3 class="tc-primary">Tabs</h3>
167
+ <p class="tc-muted">Tabbed interface for organizing content into switchable panels.</p>
168
+ </a>
169
+ </div>
170
+ <div class="span-12 t-span-6 d-span-4 px">
171
+ <a href="{{pathToRoot}}components/tags.html" class="card mb no-link d-b">
172
+ <h3 class="tc-primary">Tags</h3>
173
+ <p class="tc-muted">Input field for adding and removing tags with keyboard support.</p>
174
+ </a>
175
+ </div>
176
+ <div class="span-12 t-span-6 d-span-4 px">
177
+ <a href="{{pathToRoot}}components/theme-select.html" class="card mb no-link d-b">
178
+ <h3 class="tc-primary">Theme Select</h3>
179
+ <p class="tc-muted">Dropdown select for choosing between Light, Dark, and System Default themes.</p>
180
+ </a>
181
+ </div>
182
+ <div class="span-12 t-span-6 d-span-4 px">
183
+ <a href="{{pathToRoot}}components/theme-switcher.html" class="card mb no-link d-b">
184
+ <h3 class="tc-primary">Theme Switcher</h3>
185
+ <p class="tc-muted">Toggle between light, dark, and auto theme modes.</p>
186
+ </a>
187
+ </div>
188
+ <div class="span-12 t-span-6 d-span-4 px">
189
+ <a href="{{pathToRoot}}components/timestamp.html" class="card mb no-link d-b">
190
+ <h3 class="tc-primary">Timestamp</h3>
191
+ <p class="tc-muted">Display formatted dates and times with relative formatting.</p>
192
+ </a>
193
+ </div>
194
+ <div class="span-12 t-span-6 d-span-4 px">
195
+ <a href="{{pathToRoot}}components/toast.html" class="card mb no-link d-b">
196
+ <h3 class="tc-primary">Toast</h3>
197
+ <p class="tc-muted">Notification messages that appear temporarily at screen corners.</p>
198
+ </a>
199
+ </div>
200
+ <div class="span-12 t-span-6 d-span-4 px">
201
+ <a href="{{pathToRoot}}components/toggle.html" class="card mb no-link d-b">
202
+ <h3 class="tc-primary">Toggle</h3>
203
+ <p class="tc-muted">Switch component for boolean values with custom styling.</p>
204
+ </a>
205
+ </div>
206
+ <div class="span-12 t-span-6 d-span-4 px">
207
+ <a href="{{pathToRoot}}components/tree.html" class="card mb no-link d-b">
208
+ <h3 class="tc-primary">Tree</h3>
209
+ <p class="tc-muted">Hierarchical data visualization with collapsible branches and custom leaf types.</p>
210
+ </a>
211
+ </div>
212
+ </div>
213
+
214
+ <h2>Base Components</h2>
215
+ <div class="row -mx">
216
+ <div class="span-12 t-span-6 d-span-4 px">
217
+ <a href="{{pathToRoot}}components/shadow-component.html" class="card mb no-link d-b">
218
+ <h3 class="tc-primary">Shadow Component</h3>
219
+ <p class="tc-muted">Base class for components with shadow DOM and scoped styles.</p>
220
+ </a>
221
+ </div>
222
+ <div class="span-12 t-span-6 d-span-4 px">
223
+ <a href="{{pathToRoot}}components/light-component.html" class="card mb no-link d-b">
224
+ <h3 class="tc-primary">Light Component</h3>
225
+ <p class="tc-muted">Base class for components that render directly to light DOM.</p>
226
+ </a>
227
+ </div>
228
+ <div class="span-12 t-span-6 d-span-4 px">
229
+ <a href="{{pathToRoot}}components/hybrid-component.html" class="card mb no-link d-b">
230
+ <h3 class="tc-primary">Hybrid Component</h3>
231
+ <p class="tc-muted">Base class combining shadow and light DOM rendering.</p>
232
+ </a>
233
+ </div>
234
+ </div>
235
+
236
+ <h2>Utils</h2>
237
+ <div class="row -mx">
238
+ <div class="span-12 t-span-6 d-span-4 px">
239
+ <a href="{{pathToRoot}}utils/cookie.html" class="card mb no-link d-b">
240
+ <h3 class="tc-primary">cookie</h3>
241
+ <p class="tc-muted">Functions for managing browser cookies.</p>
242
+ </a>
243
+ </div>
244
+ <div class="span-12 t-span-6 d-span-4 px">
245
+ <a href="{{pathToRoot}}utils/context.html" class="card mb no-link d-b">
246
+ <h3 class="tc-primary">context</h3>
247
+ <p class="tc-muted">Global or named shared state for vanilla JS components.</p>
248
+ </a>
249
+ </div>
250
+ <div class="span-12 t-span-6 d-span-4 px">
251
+ <a href="{{pathToRoot}}utils/debounce.html" class="card mb no-link d-b">
252
+ <h3 class="tc-primary">debounce</h3>
253
+ <p class="tc-muted">Delay function execution until after a specified wait period.</p>
254
+ </a>
255
+ </div>
256
+ <div class="span-12 t-span-6 d-span-4 px">
257
+ <a href="{{pathToRoot}}utils/drag.html" class="card mb no-link d-b">
258
+ <h3 class="tc-primary">drag</h3>
259
+ <p class="tc-muted">Handle mouse and touch drag interactions with cleanup.</p>
260
+ </a>
261
+ </div>
262
+ <div class="span-12 t-span-6 d-span-4 px">
263
+ <a href="{{pathToRoot}}utils/formatTimestamp.html" class="card mb no-link d-b">
264
+ <h3 class="tc-primary">formatTimestamp</h3>
265
+ <p class="tc-muted">Format dates into human-readable relative or absolute strings.</p>
266
+ </a>
267
+ </div>
268
+ <div class="span-12 t-span-6 d-span-4 px">
269
+ <a href="{{pathToRoot}}utils/propConverters.html" class="card mb no-link d-b">
270
+ <h3 class="tc-primary">propConverters</h3>
271
+ <p class="tc-muted">Type converters for Lit component properties and attributes.</p>
272
+ </a>
273
+ </div>
274
+ <div class="span-12 t-span-6 d-span-4 px">
275
+ <a href="{{pathToRoot}}utils/string.html" class="card mb no-link d-b">
276
+ <h3 class="tc-primary">string</h3>
277
+ <p class="tc-muted">Collection of functions for string manipulation and conversion.</p>
278
+ </a>
279
+ </div>
280
+ <div class="span-12 t-span-6 d-span-4 px">
281
+ <a href="{{pathToRoot}}utils/theme.html" class="card mb no-link d-b">
282
+ <h3 class="tc-primary">theme</h3>
283
+ <p class="tc-muted">Centralized theme management with persistence and reactive updates.</p>
284
+ </a>
285
+ </div>
286
+ <div class="span-12 t-span-6 d-span-4 px">
287
+ <a href="{{pathToRoot}}utils/type.html" class="card mb no-link d-b">
288
+ <h3 class="tc-primary">type</h3>
289
+ <p class="tc-muted">Functions for checking and identifying JavaScript value types.</p>
290
+ </a>
291
+ </div>
292
+ <div class="span-12 t-span-6 d-span-4 px">
293
+ <a href="{{pathToRoot}}utils/object.html" class="card mb no-link d-b">
294
+ <h3 class="tc-primary">object</h3>
295
+ <p class="tc-muted">Functions for manipulating and analyzing JavaScript objects.</p>
296
+ </a>
297
+ </div>
298
+ <div class="span-12 t-span-6 d-span-4 px">
299
+ <a href="{{pathToRoot}}utils/wait.html" class="card mb no-link d-b">
300
+ <h3 class="tc-primary">wait</h3>
301
+ <p class="tc-muted">Functions for creating delays and waiting for animation frames.</p>
302
+ </a>
303
+ </div>
304
+ </div>
305
+ <div style="height:33vh"></div>
306
+ </content>
307
+ <content location="scripts">
308
+ <script type="module">
309
+ document.getElementById('version').innerHTML = (await (await fetch('https://raw.githubusercontent.com/dustinpoissant/kempo-ui/refs/heads/main/package.json')).json()).version;
310
+ </script>
311
+ </content>
312
+ </page>
@@ -0,0 +1,228 @@
1
+ <fragment>
2
+ <k-nav fixed class="bg-primary">
3
+ <button id="toggleNavSideMenu" class="link">
4
+ <k-icon name="menu"></k-icon>
5
+ </button>
6
+ <a href="{{pathToRoot}}" class="d-if ph" style="align-items: center">
7
+ <img src="{{pathToRoot}}media/icon32.png" alt="Kempo UI Icon" class="pr" />
8
+ Kempo UI
9
+ </a>
10
+ <div style="position:relative;margin:0 .25rem;align-self:center;" theme="light">
11
+ <input id="navSearchInput" type="search" placeholder="Search docs..." autocomplete="off" style="width:11rem;" />
12
+ <div id="navSearchDropdown" hidden theme="light" style="position:absolute;top:calc(100% + 4px);left:0;width:min(480px,90vw);max-height:70vh;background:var(--c_bg);border:1px solid var(--c_border);border-radius:var(--radius);overflow:auto;z-index:9999;box-shadow:0 4px 12px rgba(0,0,0,.3);">
13
+ <k-filter-list id="navSearchList" style="display:block;padding:.25rem 0;">
14
+ <k-filter-item filter-keywords="accordion components"><a href="{{pathToRoot}}components/accordion.html">Accordion<br><small>Component</small></a></k-filter-item>
15
+ <k-filter-item filter-keywords="aside sidebar components"><a href="{{pathToRoot}}components/aside.html">Aside<br><small>Component</small></a></k-filter-item>
16
+ <k-filter-item filter-keywords="card components"><a href="{{pathToRoot}}components/card.html">Card<br><small>Component</small></a></k-filter-item>
17
+ <k-filter-item filter-keywords="color picker colorpicker components"><a href="{{pathToRoot}}components/color-picker.html">Color Picker<br><small>Component</small></a></k-filter-item>
18
+ <k-filter-item filter-keywords="content slider components"><a href="{{pathToRoot}}components/content-slider.html">Content Slider<br><small>Component</small></a></k-filter-item>
19
+ <k-filter-item filter-keywords="context state global components"><a href="{{pathToRoot}}components/context.html">Context<br><small>Component</small></a></k-filter-item>
20
+ <k-filter-item filter-keywords="dialog modal popup components"><a href="{{pathToRoot}}components/dialog.html">Dialog<br><small>Component</small></a></k-filter-item>
21
+ <k-filter-item filter-keywords="dropdown select components"><a href="{{pathToRoot}}components/dropdown.html">Dropdown<br><small>Component</small></a></k-filter-item>
22
+ <k-filter-item filter-keywords="filter list filterlist components"><a href="{{pathToRoot}}components/filter-list.html">Filter List<br><small>Component</small></a></k-filter-item>
23
+ <k-filter-item filter-keywords="focus capture focuscapture components"><a href="{{pathToRoot}}components/focus-capture.html">Focus Capture<br><small>Component</small></a></k-filter-item>
24
+ <k-filter-item filter-keywords="html editor components"><a href="{{pathToRoot}}components/html-editor.html">HTML Editor<br><small>Component</small></a></k-filter-item>
25
+ <k-filter-item filter-keywords="icon components"><a href="{{pathToRoot}}components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
26
+ <k-filter-item filter-keywords="import components"><a href="{{pathToRoot}}components/import.html">Import<br><small>Component</small></a></k-filter-item>
27
+ <k-filter-item filter-keywords="nav navbar navigation components"><a href="{{pathToRoot}}components/nav.html">Nav<br><small>Component</small></a></k-filter-item>
28
+ <k-filter-item filter-keywords="photo viewer photoviewer components"><a href="{{pathToRoot}}components/photo-viewer.html">Photo Viewer<br><small>Component</small></a></k-filter-item>
29
+ <k-filter-item filter-keywords="resize components"><a href="{{pathToRoot}}components/resize.html">Resize<br><small>Component</small></a></k-filter-item>
30
+ <k-filter-item filter-keywords="show more showmore components"><a href="{{pathToRoot}}components/show-more.html">Show More<br><small>Component</small></a></k-filter-item>
31
+ <k-filter-item filter-keywords="sortable drag drop sort components"><a href="{{pathToRoot}}components/sortable.html">Sortable<br><small>Component</small></a></k-filter-item>
32
+ <k-filter-item filter-keywords="spinner loading components"><a href="{{pathToRoot}}components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
33
+ <k-filter-item filter-keywords="split pane components"><a href="{{pathToRoot}}components/split.html">Split<br><small>Component</small></a></k-filter-item>
34
+ <k-filter-item filter-keywords="table data grid components"><a href="{{pathToRoot}}components/table.html">Table<br><small>Component</small></a></k-filter-item>
35
+ <k-filter-item filter-keywords="table controls advanced example"><a href="{{pathToRoot}}components/tableControls.html">Table &mdash; Controls<br><small>Advanced Example</small></a></k-filter-item>
36
+ <k-filter-item filter-keywords="table custom fields advanced example"><a href="{{pathToRoot}}components/tableCustomFields.html">Table &mdash; Custom Fields<br><small>Advanced Example</small></a></k-filter-item>
37
+ <k-filter-item filter-keywords="table fetch records advanced example"><a href="{{pathToRoot}}components/tableFetchRecords.html">Table &mdash; Fetch Records<br><small>Advanced Example</small></a></k-filter-item>
38
+ <k-filter-item filter-keywords="table field sort hide advanced example"><a href="{{pathToRoot}}components/tableFieldSortHide.html">Table &mdash; Field Sort &amp; Hide<br><small>Advanced Example</small></a></k-filter-item>
39
+ <k-filter-item filter-keywords="table pagination advanced example"><a href="{{pathToRoot}}components/tablePagination.html">Table &mdash; Pagination<br><small>Advanced Example</small></a></k-filter-item>
40
+ <k-filter-item filter-keywords="table record editing advanced example"><a href="{{pathToRoot}}components/tableRecordEditing.html">Table &mdash; Record Editing<br><small>Advanced Example</small></a></k-filter-item>
41
+ <k-filter-item filter-keywords="table record filtering advanced example"><a href="{{pathToRoot}}components/tableRecordFiltering.html">Table &mdash; Record Filtering<br><small>Advanced Example</small></a></k-filter-item>
42
+ <k-filter-item filter-keywords="table record hiding advanced example"><a href="{{pathToRoot}}components/tableRecordHiding.html">Table &mdash; Record Hiding<br><small>Advanced Example</small></a></k-filter-item>
43
+ <k-filter-item filter-keywords="table record searching advanced example"><a href="{{pathToRoot}}components/tableRecordSearching.html">Table &mdash; Record Searching<br><small>Advanced Example</small></a></k-filter-item>
44
+ <k-filter-item filter-keywords="table record selection advanced example"><a href="{{pathToRoot}}components/tableRecordSelection.html">Table &mdash; Record Selection<br><small>Advanced Example</small></a></k-filter-item>
45
+ <k-filter-item filter-keywords="table row controls advanced example"><a href="{{pathToRoot}}components/tableRowControls.html">Table &mdash; Row Controls<br><small>Advanced Example</small></a></k-filter-item>
46
+ <k-filter-item filter-keywords="table server sync advanced example"><a href="{{pathToRoot}}components/tableServerSync.html">Table &mdash; Server Sync<br><small>Advanced Example</small></a></k-filter-item>
47
+ <k-filter-item filter-keywords="table sorting advanced example"><a href="{{pathToRoot}}components/tableSorting.html">Table &mdash; Sorting<br><small>Advanced Example</small></a></k-filter-item>
48
+ <k-filter-item filter-keywords="table placeholder advanced example"><a href="{{pathToRoot}}components/tablePlaceholder.html">Table &mdash; Placeholder<br><small>Advanced Example</small></a></k-filter-item>
49
+ <k-filter-item filter-keywords="tabs tab panel components"><a href="{{pathToRoot}}components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
50
+ <k-filter-item filter-keywords="tags tag input components"><a href="{{pathToRoot}}components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
51
+ <k-filter-item filter-keywords="theme select dropdown dark light components"><a href="{{pathToRoot}}components/theme-select.html">Theme Select<br><small>Component</small></a></k-filter-item>
52
+ <k-filter-item filter-keywords="theme switcher dark light components"><a href="{{pathToRoot}}components/theme-switcher.html">Theme Switcher<br><small>Component</small></a></k-filter-item>
53
+ <k-filter-item filter-keywords="timestamp date time components"><a href="{{pathToRoot}}components/timestamp.html">Timestamp<br><small>Component</small></a></k-filter-item>
54
+ <k-filter-item filter-keywords="toast notification alert components"><a href="{{pathToRoot}}components/toast.html">Toast<br><small>Component</small></a></k-filter-item>
55
+ <k-filter-item filter-keywords="toggle switch checkbox components"><a href="{{pathToRoot}}components/toggle.html">Toggle<br><small>Component</small></a></k-filter-item>
56
+ <k-filter-item filter-keywords="tree treeview components"><a href="{{pathToRoot}}components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
57
+ <k-filter-item filter-keywords="shadow component base"><a href="{{pathToRoot}}components/shadow-component.html">Shadow Component<br><small>Base Component</small></a></k-filter-item>
58
+ <k-filter-item filter-keywords="light component base"><a href="{{pathToRoot}}components/light-component.html">Light Component<br><small>Base Component</small></a></k-filter-item>
59
+ <k-filter-item filter-keywords="hybrid component base"><a href="{{pathToRoot}}components/hybrid-component.html">Hybrid Component<br><small>Base Component</small></a></k-filter-item>
60
+ <k-filter-item filter-keywords="cookie utils utility"><a href="{{pathToRoot}}utils/cookie.html">cookie<br><small>Utility</small></a></k-filter-item>
61
+ <k-filter-item filter-keywords="context utils utility"><a href="{{pathToRoot}}utils/context.html">context<br><small>Utility</small></a></k-filter-item>
62
+ <k-filter-item filter-keywords="debounce utils utility"><a href="{{pathToRoot}}utils/debounce.html">debounce<br><small>Utility</small></a></k-filter-item>
63
+ <k-filter-item filter-keywords="drag utils utility"><a href="{{pathToRoot}}utils/drag.html">drag<br><small>Utility</small></a></k-filter-item>
64
+ <k-filter-item filter-keywords="elevation z-index stacking utils"><a href="{{pathToRoot}}utils/elevation.html">elevation<br><small>Utility</small></a></k-filter-item>
65
+ <k-filter-item filter-keywords="formattimestamp timestamp format date time utils utility"><a href="{{pathToRoot}}utils/formatTimestamp.html">formatTimestamp<br><small>Utility</small></a></k-filter-item>
66
+ <k-filter-item filter-keywords="object utils utility"><a href="{{pathToRoot}}utils/object.html">object<br><small>Utility</small></a></k-filter-item>
67
+ <k-filter-item filter-keywords="propconverters prop converters utils utility"><a href="{{pathToRoot}}utils/propConverters.html">propConverters<br><small>Utility</small></a></k-filter-item>
68
+ <k-filter-item filter-keywords="string utils utility"><a href="{{pathToRoot}}utils/string.html">string<br><small>Utility</small></a></k-filter-item>
69
+ <k-filter-item filter-keywords="theme utils utility"><a href="{{pathToRoot}}utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="type utils utility"><a href="{{pathToRoot}}utils/type.html">type<br><small>Utility</small></a></k-filter-item>
71
+ <k-filter-item filter-keywords="wait async utils utility"><a href="{{pathToRoot}}utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
72
+ </k-filter-list>
73
+ </div>
74
+ </div>
75
+ <div class="flex"></div>
76
+ <a href="https://github.com/dustinpoissant/kempo-ui?tab=License-1-ov-file#creative-commons-attribution-noncommercial-sharealike-20" target="_blank"><k-icon name="license"></k-icon></a>
77
+ <a href="https://www.npmjs.com/package/kempo-ui" target="_blank"><k-icon name="npm"></k-icon></a>
78
+ <a href="https://github.com/dustinpoissant/kempo-ui" target="_blank"><k-icon name="github-mark"></k-icon></a>
79
+ <k-theme-switcher></k-theme-switcher>
80
+ </k-nav>
81
+ <div style="width: 100%; height: 4rem;"></div>
82
+ <k-aside id="navSideMenu" main="overlay" state="offscreen">
83
+ <menu>
84
+ <a href="{{pathToRoot}}" class="ta-center bb mb r0">
85
+ <h1 class="tc-primary">Kempo UI</h1>
86
+ <img src="{{pathToRoot}}media/icon128.png" alt="Kempo UI Icon" />
87
+ </a>
88
+
89
+ <div class="pl mb">
90
+ <h3>Components</h3>
91
+ <a href="{{pathToRoot}}components/accordion.html">Accordion</a>
92
+ <a href="{{pathToRoot}}components/aside.html">Aside</a>
93
+ <a href="{{pathToRoot}}components/card.html">Card</a>
94
+ <a href="{{pathToRoot}}components/color-picker.html">ColorPicker</a>
95
+ <a href="{{pathToRoot}}components/content-slider.html">Content Slider</a>
96
+ <a href="{{pathToRoot}}components/context.html">Context</a>
97
+ <a href="{{pathToRoot}}components/dialog.html">Dialog</a>
98
+ <a href="{{pathToRoot}}components/dropdown.html">Dropdown</a>
99
+ <a href="{{pathToRoot}}components/filter-list.html">Filter List</a>
100
+ <a href="{{pathToRoot}}components/focus-capture.html">FocusCapture</a>
101
+ <a href="{{pathToRoot}}components/html-editor.html">HTML Editor</a>
102
+ <a href="{{pathToRoot}}components/icon.html">Icon</a>
103
+ <a href="{{pathToRoot}}components/import.html">Import</a>
104
+ <a href="{{pathToRoot}}components/nav.html">Nav</a>
105
+ <a href="{{pathToRoot}}components/photo-viewer.html">Photo Viewer</a>
106
+ <a href="{{pathToRoot}}components/resize.html">Resize</a>
107
+ <a href="{{pathToRoot}}components/show-more.html">Show More</a>
108
+ <a href="{{pathToRoot}}components/sortable.html">Sortable</a>
109
+ <a href="{{pathToRoot}}components/spinner.html">Spinner</a>
110
+ <a href="{{pathToRoot}}components/split.html">Split</a>
111
+ <a href="{{pathToRoot}}components/table.html">Table</a>
112
+ <a href="{{pathToRoot}}components/tabs.html">Tabs</a>
113
+ <a href="{{pathToRoot}}components/tags.html">Tags</a>
114
+ <a href="{{pathToRoot}}components/theme-select.html">Theme Select</a>
115
+ <a href="{{pathToRoot}}components/theme-switcher.html">Theme Switcher</a>
116
+ <a href="{{pathToRoot}}components/timestamp.html">Timestamp</a>
117
+ <a href="{{pathToRoot}}components/toast.html">Toast</a>
118
+ <a href="{{pathToRoot}}components/toggle.html">Toggle</a>
119
+ <a href="{{pathToRoot}}components/tree.html">Tree</a>
120
+ </div>
121
+
122
+ <h5 class="mb0">Base Components</h5>
123
+ <div class="pl mb">
124
+ <a href="{{pathToRoot}}components/shadow-component.html">Shadow Component</a>
125
+ <a href="{{pathToRoot}}components/light-component.html">Light Component</a>
126
+ <a href="{{pathToRoot}}components/hybrid-component.html">Hybrid Component</a>
127
+ </div>
128
+
129
+ <h5 class="mb0">Utils</h5>
130
+ <div class="pl mb">
131
+ <a href="{{pathToRoot}}utils/cookie.html">cookie</a>
132
+ <a href="{{pathToRoot}}utils/context.html">context</a>
133
+ <a href="{{pathToRoot}}utils/debounce.html">debounce</a>
134
+ <a href="{{pathToRoot}}utils/drag.html">drag</a>
135
+ <a href="{{pathToRoot}}utils/elevation.html">elevation</a>
136
+ <a href="{{pathToRoot}}utils/formatTimestamp.html">formatTimestamp</a>
137
+ <a href="{{pathToRoot}}utils/object.html">object</a>
138
+ <a href="{{pathToRoot}}utils/propConverters.html">propConverters</a>
139
+ <a href="{{pathToRoot}}utils/string.html">string</a>
140
+ <a href="{{pathToRoot}}utils/theme.html">theme</a>
141
+ <a href="{{pathToRoot}}utils/type.html">type</a>
142
+ <a href="{{pathToRoot}}utils/wait.html">wait</a>
143
+ </div>
144
+ </menu>
145
+ </k-aside>
146
+ <style>
147
+ #navSearchList a{display:block;padding:.25rem .5rem;border-radius:var(--radius);text-decoration:none;color:var(--tc);}
148
+ #navSearchList a:hover{background:rgba(128,128,128,.15);}
149
+ #navSearchList a small{display:block;color:var(--tc_muted);}
150
+ </style>
151
+ <script src="{{pathToRoot}}src/components/Nav.js" type="module"></script>
152
+ <script src="{{pathToRoot}}src/components/FilterList.js" type="module"></script>
153
+ <script src="{{pathToRoot}}src/components/FilterItem.js" type="module"></script>
154
+ <script src="{{pathToRoot}}src/components/Aside.js" type="module"></script>
155
+ <script src="{{pathToRoot}}src/components/Icon.js" type="module"></script>
156
+ <script src="{{pathToRoot}}src/components/ThemeSwitcher.js" type="module"></script>
157
+ <script type="module">
158
+ import debounce from '{{pathToRoot}}src/utils/debounce.js';
159
+
160
+ document.getElementById('toggleNavSideMenu').addEventListener('click', async () => {
161
+ await window.customElements.whenDefined('k-aside');
162
+ document.getElementById('navSideMenu').toggle();
163
+ });
164
+
165
+ document.addEventListener('click', function(e) {
166
+ if(e.target.matches('a[href^="#"]')) {
167
+ e.preventDefault();
168
+ const targetId = e.target.getAttribute('href').replace('#', '');
169
+ const target = document.getElementById(targetId);
170
+ if(target) {
171
+ target.scrollIntoView({ behavior: 'smooth' });
172
+ const url = window.location.pathname + window.location.search + '#' + targetId;
173
+ history.replaceState(null, '', url);
174
+ }
175
+ }
176
+ });
177
+
178
+ /*
179
+ Nav Search
180
+ */
181
+ const searchInput = document.getElementById('navSearchInput');
182
+ const searchDropdown = document.getElementById('navSearchDropdown');
183
+ let navSearchList = null;
184
+
185
+ const openSearch = async () => {
186
+ await customElements.whenDefined('k-filter-list');
187
+ if(!navSearchList) navSearchList = document.getElementById('navSearchList');
188
+ navSearchList.filter(searchInput.value);
189
+ searchDropdown.hidden = false;
190
+ };
191
+
192
+ const closeSearch = () => {
193
+ searchDropdown.hidden = true;
194
+ navSearchList?.clearFocus();
195
+ };
196
+
197
+ searchInput.addEventListener('focus', openSearch);
198
+
199
+ searchInput.addEventListener('input', debounce(e => {
200
+ navSearchList?.filter(e.target.value);
201
+ }, 150));
202
+
203
+ searchInput.addEventListener('keydown', e => {
204
+ if(e.key === 'Escape') {
205
+ searchInput.value = '';
206
+ searchInput.blur();
207
+ closeSearch();
208
+ } else if(e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter') {
209
+ navSearchList?.handleKeydown(e);
210
+ }
211
+ });
212
+
213
+ searchInput.addEventListener('blur', () => {
214
+ setTimeout(closeSearch, 150);
215
+ });
216
+
217
+ document.addEventListener('keydown', e => {
218
+ let active = document.activeElement;
219
+ while(active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
220
+ const tag = active?.tagName;
221
+ if(tag === 'INPUT' || tag === 'TEXTAREA' || active?.isContentEditable) return;
222
+ if(e.metaKey || e.ctrlKey || e.altKey) return;
223
+ if(e.key.length === 1) {
224
+ searchInput.focus();
225
+ }
226
+ });
227
+ </script>
228
+ </fragment>