kempo-ui 0.3.14 → 0.3.16

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 (82) hide show
  1. package/dist/components/Combobox.js +97 -0
  2. package/dist/components/Option.js +1 -0
  3. package/dist/components/ThemeSwitcher.js +77 -14
  4. package/docs/components/accordion.html +282 -94
  5. package/docs/components/aside.html +282 -94
  6. package/docs/components/card.html +282 -94
  7. package/docs/components/code-editor.html +282 -94
  8. package/docs/components/color-picker.html +282 -94
  9. package/docs/components/combobox.html +798 -0
  10. package/docs/components/content-slider.html +282 -94
  11. package/docs/components/context.html +282 -94
  12. package/docs/components/dialog.html +282 -94
  13. package/docs/components/dropdown.html +282 -94
  14. package/docs/components/filter-list.html +282 -94
  15. package/docs/components/focus-capture.html +282 -94
  16. package/docs/components/html-editor.html +282 -94
  17. package/docs/components/hybrid-component.html +282 -94
  18. package/docs/components/icon.html +282 -94
  19. package/docs/components/import.html +282 -94
  20. package/docs/components/light-component.html +282 -94
  21. package/docs/components/nav-spacer.html +282 -94
  22. package/docs/components/nav.html +282 -94
  23. package/docs/components/photo-viewer.html +282 -94
  24. package/docs/components/resize.html +282 -94
  25. package/docs/components/shadow-component.html +282 -94
  26. package/docs/components/show-more.html +282 -94
  27. package/docs/components/sortable.html +282 -94
  28. package/docs/components/spinner.html +282 -94
  29. package/docs/components/split.html +282 -94
  30. package/docs/components/table.html +282 -94
  31. package/docs/components/tableControls.html +282 -94
  32. package/docs/components/tableCustomFields.html +282 -94
  33. package/docs/components/tableFetchRecords.html +282 -94
  34. package/docs/components/tableFieldSortHide.html +282 -94
  35. package/docs/components/tablePagination.html +282 -94
  36. package/docs/components/tablePlaceholder.html +282 -94
  37. package/docs/components/tableRecordEditing.html +282 -94
  38. package/docs/components/tableRecordFiltering.html +282 -94
  39. package/docs/components/tableRecordHiding.html +282 -94
  40. package/docs/components/tableRecordSearching.html +282 -94
  41. package/docs/components/tableRecordSelection.html +282 -94
  42. package/docs/components/tableRowControls.html +282 -94
  43. package/docs/components/tableServerSync.html +282 -94
  44. package/docs/components/tableSorting.html +282 -94
  45. package/docs/components/tabs.html +282 -94
  46. package/docs/components/tags.html +282 -94
  47. package/docs/components/theme-select.html +282 -94
  48. package/docs/components/theme-switcher-aside.html +47 -0
  49. package/docs/components/theme-switcher.html +441 -101
  50. package/docs/components/timestamp.html +282 -94
  51. package/docs/components/toast.html +282 -94
  52. package/docs/components/toggle.html +282 -94
  53. package/docs/components/tree.html +282 -94
  54. package/docs/index.html +288 -94
  55. package/docs/src/components/Combobox.js +97 -0
  56. package/docs/src/components/Option.js +1 -0
  57. package/docs/src/components/ThemeSwitcher.js +77 -14
  58. package/docs/utils/context.html +282 -94
  59. package/docs/utils/cookie.html +282 -94
  60. package/docs/utils/debounce.html +282 -94
  61. package/docs/utils/drag.html +282 -94
  62. package/docs/utils/elevation.html +282 -94
  63. package/docs/utils/formatTimestamp.html +282 -94
  64. package/docs/utils/object.html +282 -94
  65. package/docs/utils/propConverters.html +282 -94
  66. package/docs/utils/string.html +282 -94
  67. package/docs/utils/theme.html +282 -94
  68. package/docs/utils/toTitleCase.html +282 -94
  69. package/docs/utils/type.html +282 -94
  70. package/docs/utils/wait.html +282 -94
  71. package/docs-src/components/combobox.page.html +358 -0
  72. package/docs-src/components/theme-switcher-aside.page.html +35 -0
  73. package/docs-src/components/theme-switcher.page.html +159 -7
  74. package/docs-src/index.page.html +6 -0
  75. package/docs-src/nav.fragment.html +283 -95
  76. package/llms.txt +2 -1
  77. package/package.json +1 -1
  78. package/src/components/Combobox.js +338 -0
  79. package/src/components/Option.js +19 -0
  80. package/src/components/ThemeSwitcher.js +171 -24
  81. package/tests/components/Combobox.browser-test.js +790 -0
  82. package/tests/components/ThemeSwitcher.browser-test.js +361 -33
@@ -1,91 +1,247 @@
1
1
  <fragment>
2
- <k-nav fixed class="bg-primary">
3
- <button id="toggleNavSideMenu" class="link">
2
+ <k-nav
3
+ fixed
4
+ class="bg-primary"
5
+ >
6
+ <button
7
+ id="toggleNavSideMenu"
8
+ class="link"
9
+ >
4
10
  <k-icon name="menu"></k-icon>
5
11
  </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" />
12
+ <a
13
+ href="{{pathToRoot}}"
14
+ class="d-if ph"
15
+ style="align-items: center"
16
+ >
17
+ <img
18
+ src="{{pathToRoot}}media/icon32.png"
19
+ alt="Kempo UI Icon"
20
+ class="pr"
21
+ />
8
22
  Kempo UI
9
23
  </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="code editor codeeditor monaco components"><a href="{{pathToRoot}}components/code-editor.html">Code Editor<br><small>Component</small></a></k-filter-item>
18
- <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>
19
- <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>
20
- <k-filter-item filter-keywords="context state global components"><a href="{{pathToRoot}}components/context.html">Context<br><small>Component</small></a></k-filter-item>
21
- <k-filter-item filter-keywords="dialog modal popup components"><a href="{{pathToRoot}}components/dialog.html">Dialog<br><small>Component</small></a></k-filter-item>
22
- <k-filter-item filter-keywords="dropdown select components"><a href="{{pathToRoot}}components/dropdown.html">Dropdown<br><small>Component</small></a></k-filter-item>
23
- <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>
24
- <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>
25
- <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>
26
- <k-filter-item filter-keywords="icon components"><a href="{{pathToRoot}}components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
27
- <k-filter-item filter-keywords="import components"><a href="{{pathToRoot}}components/import.html">Import<br><small>Component</small></a></k-filter-item>
28
- <k-filter-item filter-keywords="nav navbar navigation components"><a href="{{pathToRoot}}components/nav.html">Nav<br><small>Component</small></a></k-filter-item>
29
- <k-filter-item filter-keywords="nav spacer navbar spacer navspacer components"><a href="{{pathToRoot}}components/nav-spacer.html">Nav Spacer<br><small>Component</small></a></k-filter-item>
30
- <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>
31
- <k-filter-item filter-keywords="resize components"><a href="{{pathToRoot}}components/resize.html">Resize<br><small>Component</small></a></k-filter-item>
32
- <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>
33
- <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>
34
- <k-filter-item filter-keywords="spinner loading components"><a href="{{pathToRoot}}components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
35
- <k-filter-item filter-keywords="split pane components"><a href="{{pathToRoot}}components/split.html">Split<br><small>Component</small></a></k-filter-item>
36
- <k-filter-item filter-keywords="table data grid components"><a href="{{pathToRoot}}components/table.html">Table<br><small>Component</small></a></k-filter-item>
37
- <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>
38
- <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>
39
- <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>
40
- <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>
41
- <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>
42
- <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>
43
- <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>
44
- <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>
45
- <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>
46
- <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>
47
- <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>
48
- <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>
49
- <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>
50
- <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>
51
- <k-filter-item filter-keywords="tabs tab panel components"><a href="{{pathToRoot}}components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
52
- <k-filter-item filter-keywords="tags tag input components"><a href="{{pathToRoot}}components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
53
- <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>
54
- <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>
55
- <k-filter-item filter-keywords="timestamp date time components"><a href="{{pathToRoot}}components/timestamp.html">Timestamp<br><small>Component</small></a></k-filter-item>
56
- <k-filter-item filter-keywords="toast notification alert components"><a href="{{pathToRoot}}components/toast.html">Toast<br><small>Component</small></a></k-filter-item>
57
- <k-filter-item filter-keywords="toggle switch checkbox components"><a href="{{pathToRoot}}components/toggle.html">Toggle<br><small>Component</small></a></k-filter-item>
58
- <k-filter-item filter-keywords="tree treeview components"><a href="{{pathToRoot}}components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
59
- <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>
60
- <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>
61
- <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>
62
- <k-filter-item filter-keywords="cookie utils utility"><a href="{{pathToRoot}}utils/cookie.html">cookie<br><small>Utility</small></a></k-filter-item>
63
- <k-filter-item filter-keywords="context utils utility"><a href="{{pathToRoot}}utils/context.html">context<br><small>Utility</small></a></k-filter-item>
64
- <k-filter-item filter-keywords="debounce utils utility"><a href="{{pathToRoot}}utils/debounce.html">debounce<br><small>Utility</small></a></k-filter-item>
65
- <k-filter-item filter-keywords="drag utils utility"><a href="{{pathToRoot}}utils/drag.html">drag<br><small>Utility</small></a></k-filter-item>
66
- <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>
67
- <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>
68
- <k-filter-item filter-keywords="object utils utility"><a href="{{pathToRoot}}utils/object.html">object<br><small>Utility</small></a></k-filter-item>
69
- <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>
70
- <k-filter-item filter-keywords="string utils utility"><a href="{{pathToRoot}}utils/string.html">string<br><small>Utility</small></a></k-filter-item>
71
- <k-filter-item filter-keywords="theme utils utility"><a href="{{pathToRoot}}utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
72
- <k-filter-item filter-keywords="type utils utility"><a href="{{pathToRoot}}utils/type.html">type<br><small>Utility</small></a></k-filter-item>
73
- <k-filter-item filter-keywords="wait async utils utility"><a href="{{pathToRoot}}utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
24
+ <div
25
+ style="position:relative;margin:0 .25rem;align-self:center;"
26
+ theme="light"
27
+ >
28
+ <input
29
+ id="navSearchInput"
30
+ type="search"
31
+ placeholder="Search docs..."
32
+ autocomplete="off"
33
+ style="width:11rem;"
34
+ />
35
+ <div
36
+ id="navSearchDropdown"
37
+ hidden
38
+ theme="light"
39
+ 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);"
40
+ >
41
+ <k-filter-list
42
+ id="navSearchList"
43
+ style="display:block;padding:.25rem 0;"
44
+ >
45
+ <k-filter-item filter-keywords="accordion components"><a
46
+ href="{{pathToRoot}}components/accordion.html">Accordion<br><small>Component</small></a></k-filter-item>
47
+ <k-filter-item filter-keywords="aside sidebar components"><a
48
+ href="{{pathToRoot}}components/aside.html">Aside<br><small>Component</small></a></k-filter-item>
49
+ <k-filter-item filter-keywords="card components"><a
50
+ href="{{pathToRoot}}components/card.html">Card<br><small>Component</small></a></k-filter-item>
51
+ <k-filter-item filter-keywords="code editor codeeditor monaco components"><a
52
+ href="{{pathToRoot}}components/code-editor.html"
53
+ >Code Editor<br><small>Component</small></a></k-filter-item>
54
+ <k-filter-item filter-keywords="combobox combo box search autocomplete components"><a
55
+ href="{{pathToRoot}}components/combobox.html"
56
+ >Combobox<br><small>Component</small></a></k-filter-item>
57
+ <k-filter-item filter-keywords="color picker colorpicker components"><a
58
+ href="{{pathToRoot}}components/color-picker.html"
59
+ >Color Picker<br><small>Component</small></a></k-filter-item>
60
+ <k-filter-item filter-keywords="content slider components"><a
61
+ href="{{pathToRoot}}components/content-slider.html"
62
+ >Content Slider<br><small>Component</small></a></k-filter-item>
63
+ <k-filter-item filter-keywords="context state global components"><a
64
+ href="{{pathToRoot}}components/context.html"
65
+ >Context<br><small>Component</small></a></k-filter-item>
66
+ <k-filter-item filter-keywords="dialog modal popup components"><a
67
+ href="{{pathToRoot}}components/dialog.html">Dialog<br><small>Component</small></a></k-filter-item>
68
+ <k-filter-item filter-keywords="dropdown select components"><a
69
+ href="{{pathToRoot}}components/dropdown.html">Dropdown<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="filter list filterlist components"><a
71
+ href="{{pathToRoot}}components/filter-list.html"
72
+ >Filter List<br><small>Component</small></a></k-filter-item>
73
+ <k-filter-item filter-keywords="focus capture focuscapture components"><a
74
+ href="{{pathToRoot}}components/focus-capture.html"
75
+ >Focus Capture<br><small>Component</small></a></k-filter-item>
76
+ <k-filter-item filter-keywords="html editor components"><a
77
+ href="{{pathToRoot}}components/html-editor.html">HTML
78
+ Editor<br><small>Component</small></a></k-filter-item>
79
+ <k-filter-item filter-keywords="icon components"><a
80
+ href="{{pathToRoot}}components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
81
+ <k-filter-item filter-keywords="import components"><a
82
+ href="{{pathToRoot}}components/import.html">Import<br><small>Component</small></a></k-filter-item>
83
+ <k-filter-item filter-keywords="nav navbar navigation components"><a
84
+ href="{{pathToRoot}}components/nav.html">Nav<br><small>Component</small></a></k-filter-item>
85
+ <k-filter-item filter-keywords="nav spacer navbar spacer navspacer components"><a
86
+ href="{{pathToRoot}}components/nav-spacer.html"
87
+ >Nav Spacer<br><small>Component</small></a></k-filter-item>
88
+ <k-filter-item filter-keywords="photo viewer photoviewer components"><a
89
+ href="{{pathToRoot}}components/photo-viewer.html"
90
+ >Photo Viewer<br><small>Component</small></a></k-filter-item>
91
+ <k-filter-item filter-keywords="resize components"><a
92
+ href="{{pathToRoot}}components/resize.html">Resize<br><small>Component</small></a></k-filter-item>
93
+ <k-filter-item filter-keywords="show more showmore components"><a
94
+ href="{{pathToRoot}}components/show-more.html"
95
+ >Show More<br><small>Component</small></a></k-filter-item>
96
+ <k-filter-item filter-keywords="sortable drag drop sort components"><a
97
+ href="{{pathToRoot}}components/sortable.html"
98
+ >Sortable<br><small>Component</small></a></k-filter-item>
99
+ <k-filter-item filter-keywords="spinner loading components"><a
100
+ href="{{pathToRoot}}components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
101
+ <k-filter-item filter-keywords="split pane components"><a
102
+ href="{{pathToRoot}}components/split.html">Split<br><small>Component</small></a></k-filter-item>
103
+ <k-filter-item filter-keywords="table data grid components"><a
104
+ href="{{pathToRoot}}components/table.html">Table<br><small>Component</small></a></k-filter-item>
105
+ <k-filter-item filter-keywords="table controls advanced example"><a
106
+ href="{{pathToRoot}}components/tableControls.html"
107
+ >Table &mdash; Controls<br><small>Advanced Example</small></a></k-filter-item>
108
+ <k-filter-item filter-keywords="table custom fields advanced example"><a
109
+ href="{{pathToRoot}}components/tableCustomFields.html"
110
+ >Table &mdash; Custom Fields<br><small>Advanced Example</small></a></k-filter-item>
111
+ <k-filter-item filter-keywords="table fetch records advanced example"><a
112
+ href="{{pathToRoot}}components/tableFetchRecords.html"
113
+ >Table &mdash; Fetch Records<br><small>Advanced Example</small></a></k-filter-item>
114
+ <k-filter-item filter-keywords="table field sort hide advanced example"><a
115
+ href="{{pathToRoot}}components/tableFieldSortHide.html"
116
+ >Table &mdash; Field Sort &amp; Hide<br><small>Advanced Example</small></a></k-filter-item>
117
+ <k-filter-item filter-keywords="table pagination advanced example"><a
118
+ href="{{pathToRoot}}components/tablePagination.html"
119
+ >Table &mdash; Pagination<br><small>Advanced Example</small></a></k-filter-item>
120
+ <k-filter-item filter-keywords="table record editing advanced example"><a
121
+ href="{{pathToRoot}}components/tableRecordEditing.html"
122
+ >Table &mdash; Record Editing<br><small>Advanced Example</small></a></k-filter-item>
123
+ <k-filter-item filter-keywords="table record filtering advanced example"><a
124
+ href="{{pathToRoot}}components/tableRecordFiltering.html"
125
+ >Table &mdash; Record Filtering<br><small>Advanced Example</small></a></k-filter-item>
126
+ <k-filter-item filter-keywords="table record hiding advanced example"><a
127
+ href="{{pathToRoot}}components/tableRecordHiding.html"
128
+ >Table &mdash; Record Hiding<br><small>Advanced Example</small></a></k-filter-item>
129
+ <k-filter-item filter-keywords="table record searching advanced example"><a
130
+ href="{{pathToRoot}}components/tableRecordSearching.html"
131
+ >Table &mdash; Record Searching<br><small>Advanced Example</small></a></k-filter-item>
132
+ <k-filter-item filter-keywords="table record selection advanced example"><a
133
+ href="{{pathToRoot}}components/tableRecordSelection.html"
134
+ >Table &mdash; Record Selection<br><small>Advanced Example</small></a></k-filter-item>
135
+ <k-filter-item filter-keywords="table row controls advanced example"><a
136
+ href="{{pathToRoot}}components/tableRowControls.html"
137
+ >Table &mdash; Row Controls<br><small>Advanced Example</small></a></k-filter-item>
138
+ <k-filter-item filter-keywords="table server sync advanced example"><a
139
+ href="{{pathToRoot}}components/tableServerSync.html"
140
+ >Table &mdash; Server Sync<br><small>Advanced Example</small></a></k-filter-item>
141
+ <k-filter-item filter-keywords="table sorting advanced example"><a
142
+ href="{{pathToRoot}}components/tableSorting.html"
143
+ >Table &mdash; Sorting<br><small>Advanced Example</small></a></k-filter-item>
144
+ <k-filter-item filter-keywords="table placeholder advanced example"><a
145
+ href="{{pathToRoot}}components/tablePlaceholder.html"
146
+ >Table &mdash; Placeholder<br><small>Advanced Example</small></a></k-filter-item>
147
+ <k-filter-item filter-keywords="tabs tab panel components"><a
148
+ href="{{pathToRoot}}components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
149
+ <k-filter-item filter-keywords="tags tag input components"><a
150
+ href="{{pathToRoot}}components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
151
+ <k-filter-item filter-keywords="theme select dropdown dark light components"><a
152
+ href="{{pathToRoot}}components/theme-select.html"
153
+ >Theme Select<br><small>Component</small></a></k-filter-item>
154
+ <k-filter-item filter-keywords="theme switcher dark light components"><a
155
+ href="{{pathToRoot}}components/theme-switcher.html"
156
+ >Theme Switcher<br><small>Component</small></a></k-filter-item>
157
+ <k-filter-item filter-keywords="timestamp date time components"><a
158
+ href="{{pathToRoot}}components/timestamp.html"
159
+ >Timestamp<br><small>Component</small></a></k-filter-item>
160
+ <k-filter-item filter-keywords="toast notification alert components"><a
161
+ href="{{pathToRoot}}components/toast.html"
162
+ >Toast<br><small>Component</small></a></k-filter-item>
163
+ <k-filter-item filter-keywords="toggle switch checkbox components"><a
164
+ href="{{pathToRoot}}components/toggle.html"
165
+ >Toggle<br><small>Component</small></a></k-filter-item>
166
+ <k-filter-item filter-keywords="tree treeview components"><a
167
+ href="{{pathToRoot}}components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
168
+ <k-filter-item filter-keywords="shadow component base"><a
169
+ href="{{pathToRoot}}components/shadow-component.html"
170
+ >Shadow Component<br><small>Base Component</small></a></k-filter-item>
171
+ <k-filter-item filter-keywords="light component base"><a
172
+ href="{{pathToRoot}}components/light-component.html">Light Component<br><small>Base
173
+ Component</small></a></k-filter-item>
174
+ <k-filter-item filter-keywords="hybrid component base"><a
175
+ href="{{pathToRoot}}components/hybrid-component.html"
176
+ >Hybrid Component<br><small>Base Component</small></a></k-filter-item>
177
+ <k-filter-item filter-keywords="cookie utils utility"><a
178
+ href="{{pathToRoot}}utils/cookie.html">cookie<br><small>Utility</small></a></k-filter-item>
179
+ <k-filter-item filter-keywords="context utils utility"><a
180
+ href="{{pathToRoot}}utils/context.html">context<br><small>Utility</small></a></k-filter-item>
181
+ <k-filter-item filter-keywords="debounce utils utility"><a
182
+ href="{{pathToRoot}}utils/debounce.html">debounce<br><small>Utility</small></a></k-filter-item>
183
+ <k-filter-item filter-keywords="drag utils utility"><a
184
+ href="{{pathToRoot}}utils/drag.html">drag<br><small>Utility</small></a></k-filter-item>
185
+ <k-filter-item filter-keywords="elevation z-index stacking utils"><a
186
+ href="{{pathToRoot}}utils/elevation.html">elevation<br><small>Utility</small></a></k-filter-item>
187
+ <k-filter-item filter-keywords="formattimestamp timestamp format date time utils utility"><a
188
+ href="{{pathToRoot}}utils/formatTimestamp.html"
189
+ >formatTimestamp<br><small>Utility</small></a></k-filter-item>
190
+ <k-filter-item filter-keywords="object utils utility"><a
191
+ href="{{pathToRoot}}utils/object.html">object<br><small>Utility</small></a></k-filter-item>
192
+ <k-filter-item filter-keywords="propconverters prop converters utils utility"><a
193
+ href="{{pathToRoot}}utils/propConverters.html"
194
+ >propConverters<br><small>Utility</small></a></k-filter-item>
195
+ <k-filter-item filter-keywords="string utils utility"><a
196
+ href="{{pathToRoot}}utils/string.html">string<br><small>Utility</small></a></k-filter-item>
197
+ <k-filter-item filter-keywords="theme utils utility"><a
198
+ href="{{pathToRoot}}utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
199
+ <k-filter-item filter-keywords="type utils utility"><a
200
+ href="{{pathToRoot}}utils/type.html">type<br><small>Utility</small></a></k-filter-item>
201
+ <k-filter-item filter-keywords="wait async utils utility"><a
202
+ href="{{pathToRoot}}utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
74
203
  </k-filter-list>
75
204
  </div>
76
205
  </div>
77
206
  <div class="flex"></div>
78
- <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>
79
- <a href="https://www.npmjs.com/package/kempo-ui" target="_blank"><k-icon name="npm"></k-icon></a>
80
- <a href="https://github.com/dustinpoissant/kempo-ui" target="_blank"><k-icon name="github-mark"></k-icon></a>
81
- <k-theme-switcher></k-theme-switcher>
207
+ <a
208
+ href="https://github.com/dustinpoissant/kempo-ui?tab=License-1-ov-file#creative-commons-attribution-noncommercial-sharealike-20"
209
+ target="_blank"
210
+ ><k-icon name="license"></k-icon></a>
211
+ <a
212
+ href="https://www.npmjs.com/package/kempo-ui"
213
+ target="_blank"
214
+ ><k-icon name="npm"></k-icon></a>
215
+ <a
216
+ href="https://github.com/dustinpoissant/kempo-ui"
217
+ target="_blank"
218
+ ><k-icon name="github-mark"></k-icon></a>
219
+ <k-theme-switcher
220
+ class="mr"
221
+ style="
222
+ --padding: 0.5rem;
223
+ --c_active: var(--tc_on_primary);
224
+ --tc_active: var(--c_primary);
225
+ --c_inactive__hover: rgba(255, 255, 255, 0.1);
226
+ "
227
+ ></k-theme-switcher>
82
228
  </k-nav>
83
229
  <div style="width: 100%; height: 4rem;"></div>
84
- <k-aside id="navSideMenu" main="overlay" state="offscreen">
230
+ <k-aside
231
+ id="navSideMenu"
232
+ main="overlay"
233
+ state="offscreen"
234
+ >
85
235
  <menu>
86
- <a href="{{pathToRoot}}" class="ta-center bb mb r0">
236
+ <a
237
+ href="{{pathToRoot}}"
238
+ class="ta-center bb mb r0"
239
+ >
87
240
  <h1 class="tc-primary">Kempo UI</h1>
88
- <img src="{{pathToRoot}}media/icon128.png" alt="Kempo UI Icon" />
241
+ <img
242
+ src="{{pathToRoot}}media/icon128.png"
243
+ alt="Kempo UI Icon"
244
+ />
89
245
  </a>
90
246
 
91
247
  <div class="pl mb">
@@ -94,6 +250,7 @@
94
250
  <a href="{{pathToRoot}}components/aside.html">Aside</a>
95
251
  <a href="{{pathToRoot}}components/card.html">Card</a>
96
252
  <a href="{{pathToRoot}}components/code-editor.html">Code Editor</a>
253
+ <a href="{{pathToRoot}}components/combobox.html">Combobox</a>
97
254
  <a href="{{pathToRoot}}components/color-picker.html">ColorPicker</a>
98
255
  <a href="{{pathToRoot}}components/content-slider.html">Content Slider</a>
99
256
  <a href="{{pathToRoot}}components/context.html">Context</a>
@@ -148,16 +305,47 @@
148
305
  </menu>
149
306
  </k-aside>
150
307
  <style>
151
- #navSearchList a{display:block;padding:.25rem .5rem;border-radius:var(--radius);text-decoration:none;color:var(--tc);}
152
- #navSearchList a:hover{background:rgba(128,128,128,.15);}
153
- #navSearchList a small{display:block;color:var(--tc_muted);}
308
+ #navSearchList a {
309
+ display: block;
310
+ padding: .25rem .5rem;
311
+ border-radius: var(--radius);
312
+ text-decoration: none;
313
+ color: var(--tc);
314
+ }
315
+
316
+ #navSearchList a:hover {
317
+ background: rgba(128, 128, 128, .15);
318
+ }
319
+
320
+ #navSearchList a small {
321
+ display: block;
322
+ color: var(--tc_muted);
323
+ }
154
324
  </style>
155
- <script src="{{pathToRoot}}src/components/Nav.js" type="module"></script>
156
- <script src="{{pathToRoot}}src/components/FilterList.js" type="module"></script>
157
- <script src="{{pathToRoot}}src/components/FilterItem.js" type="module"></script>
158
- <script src="{{pathToRoot}}src/components/Aside.js" type="module"></script>
159
- <script src="{{pathToRoot}}src/components/Icon.js" type="module"></script>
160
- <script src="{{pathToRoot}}src/components/ThemeSwitcher.js" type="module"></script>
325
+ <script
326
+ src="{{pathToRoot}}src/components/Nav.js"
327
+ type="module"
328
+ ></script>
329
+ <script
330
+ src="{{pathToRoot}}src/components/FilterList.js"
331
+ type="module"
332
+ ></script>
333
+ <script
334
+ src="{{pathToRoot}}src/components/FilterItem.js"
335
+ type="module"
336
+ ></script>
337
+ <script
338
+ src="{{pathToRoot}}src/components/Aside.js"
339
+ type="module"
340
+ ></script>
341
+ <script
342
+ src="{{pathToRoot}}src/components/Icon.js"
343
+ type="module"
344
+ ></script>
345
+ <script
346
+ src="{{pathToRoot}}src/components/ThemeSwitcher.js"
347
+ type="module"
348
+ ></script>
161
349
  <script type="module">
162
350
  import debounce from '{{pathToRoot}}src/utils/debounce.js';
163
351
 
@@ -166,12 +354,12 @@
166
354
  document.getElementById('navSideMenu').toggle();
167
355
  });
168
356
 
169
- document.addEventListener('click', function(e) {
170
- if(e.target.matches('a[href^="#"]')) {
357
+ document.addEventListener('click', function (e) {
358
+ if (e.target.matches('a[href^="#"]')) {
171
359
  e.preventDefault();
172
360
  const targetId = e.target.getAttribute('href').replace('#', '');
173
361
  const target = document.getElementById(targetId);
174
- if(target) {
362
+ if (target) {
175
363
  target.scrollIntoView({ behavior: 'smooth' });
176
364
  const url = window.location.pathname + window.location.search + '#' + targetId;
177
365
  history.replaceState(null, '', url);
@@ -188,7 +376,7 @@
188
376
 
189
377
  const openSearch = async () => {
190
378
  await customElements.whenDefined('k-filter-list');
191
- if(!navSearchList) navSearchList = document.getElementById('navSearchList');
379
+ if (!navSearchList) navSearchList = document.getElementById('navSearchList');
192
380
  navSearchList.filter(searchInput.value);
193
381
  searchDropdown.hidden = false;
194
382
  };
@@ -205,11 +393,11 @@
205
393
  }, 150));
206
394
 
207
395
  searchInput.addEventListener('keydown', e => {
208
- if(e.key === 'Escape') {
396
+ if (e.key === 'Escape') {
209
397
  searchInput.value = '';
210
398
  searchInput.blur();
211
399
  closeSearch();
212
- } else if(e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter') {
400
+ } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter') {
213
401
  navSearchList?.handleKeydown(e);
214
402
  }
215
403
  });
@@ -220,13 +408,13 @@
220
408
 
221
409
  document.addEventListener('keydown', e => {
222
410
  let active = document.activeElement;
223
- while(active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
411
+ while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
224
412
  const tag = active?.tagName;
225
- if(tag === 'INPUT' || tag === 'TEXTAREA' || active?.isContentEditable) return;
226
- if(e.metaKey || e.ctrlKey || e.altKey) return;
227
- if(e.key.length === 1) {
413
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || active?.isContentEditable) return;
414
+ if (e.metaKey || e.ctrlKey || e.altKey) return;
415
+ if (e.key.length === 1) {
228
416
  searchInput.focus();
229
417
  }
230
418
  });
231
419
  </script>
232
- </fragment>
420
+ </fragment>
package/llms.txt CHANGED
@@ -57,6 +57,7 @@ import { html, css, LitElement } from 'kempo-ui/src/lit-all.min.js';
57
57
  | `<k-card>` | `Card.js` | Bordered container; optional `label` attribute | [card.html](https://dustinpoissant.github.io/kempo-ui/components/card.html) |
58
58
  | `<k-code-editor>` | `CodeEditor.js` | Monaco-powered code editor; `value`, `language`, `controls` attributes; form-associated; theme-aware | [code-editor.html](https://dustinpoissant.github.io/kempo-ui/components/code-editor.html) |
59
59
  | `<k-color-picker>` | `ColorPicker.js` | Full color picker (hex, rgb, hsl, hsv, alpha); `value` property | [color-picker.html](https://dustinpoissant.github.io/kempo-ui/components/color-picker.html) |
60
+ | `<k-combobox>` | `Combobox.js` | Searchable dropdown with debounced `search` event, dynamic `setOptions()`, `searching` indicator, keyboard nav; options are strings or `{label, value}` objects | [combobox.html](https://dustinpoissant.github.io/kempo-ui/components/combobox.html) |
60
61
  | `<k-content-slider>` | `ContentSlider.js` | Swipeable carousel | [content-slider.html](https://dustinpoissant.github.io/kempo-ui/components/content-slider.html) |
61
62
  | `<k-context>` | `Context.js` | Non-rendering state container; `set(key,value)`, `get(key)`, `delete(key)`, `clear()`, `getData()`; fires `context:create`, `context:set`, `context:delete` | [context.html](https://dustinpoissant.github.io/kempo-ui/components/context.html) |
62
63
  | `<k-dialog>` | `Dialog.js` | Modal dialog with focus trapping; call `.open()` / `.close()` | [dialog.html](https://dustinpoissant.github.io/kempo-ui/components/dialog.html) |
@@ -79,7 +80,7 @@ import { html, css, LitElement } from 'kempo-ui/src/lit-all.min.js';
79
80
  | `<k-tabs>` `<k-tab>` `<k-tab-content>` `<k-tab-spacer>` | `Tabs.js` | Tabbed interface; `<k-tab for-content="id">` links to `<k-tab-content name="id">` | [tabs.html](https://dustinpoissant.github.io/kempo-ui/components/tabs.html) |
80
81
  | `<k-tags>` `<k-tag>` | `Tags.js` | Tag input; add/remove tags; fires `change` | [tags.html](https://dustinpoissant.github.io/kempo-ui/components/tags.html) |
81
82
  | `<k-theme-select>` | `ThemeSelect.js` | Dropdown to pick a theme | [theme-select.html](https://dustinpoissant.github.io/kempo-ui/components/theme-select.html) |
82
- | `<k-theme-switcher>` | `ThemeSwitcher.js` | Light/dark/auto toggle button | [theme-switcher.html](https://dustinpoissant.github.io/kempo-ui/components/theme-switcher.html) |
83
+ | `<k-theme-switcher>` | `ThemeSwitcher.js` | Theme switcher with segmented and toggle display modes | [theme-switcher.html](https://dustinpoissant.github.io/kempo-ui/components/theme-switcher.html) |
83
84
  | `<k-timestamp>` | `Timestamp.js` | Displays a `value` timestamp as human-readable relative time | [timestamp.html](https://dustinpoissant.github.io/kempo-ui/components/timestamp.html) |
84
85
  | `<k-toast>` `<k-toast-container>` | `Toast.js` | Toast notifications; use `<k-toast-container>` once in page, call `.addToast(options)` | [toast.html](https://dustinpoissant.github.io/kempo-ui/components/toast.html) |
85
86
  | `<k-toggle>` | `Toggle.js` | On/off toggle; `value` (Boolean, reflects); methods: `on()`, `off()`, `toggle()`; fires `change`, `on`, `off` | [toggle.html](https://dustinpoissant.github.io/kempo-ui/components/toggle.html) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kempo-ui",
3
- "version": "0.3.14",
3
+ "version": "0.3.16",
4
4
  "type": "module",
5
5
  "description": "A Lit based web-component library",
6
6
  "main": "index.js",