@livenetworks/ashlar 2.0.7 → 2.0.8

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 (207) hide show
  1. package/LICENSE +641 -641
  2. package/components/COMPONENTS.md +1116 -1116
  3. package/components/index.js +81 -81
  4. package/components/ln-accordion/ln-accordion-dev.scss +8 -8
  5. package/components/ln-accordion/ln-accordion.js +1 -1
  6. package/components/ln-accordion/ln-accordion.schema.json +30 -30
  7. package/components/ln-ajax/ln-ajax-dev.scss +8 -8
  8. package/components/ln-ajax/ln-ajax.js +1 -1
  9. package/components/ln-ajax/ln-ajax.schema.json +30 -30
  10. package/components/ln-api-connector/ln-api-connector.js +1 -1
  11. package/components/ln-api-connector/ln-api-connector.schema.json +96 -96
  12. package/components/ln-api-connector/src/ln-api-connector.js +1 -0
  13. package/components/ln-api-queue/ln-api-queue.js +1 -1
  14. package/components/ln-api-queue/ln-api-queue.schema.json +34 -34
  15. package/components/ln-api-queue/src/ln-api-queue.js +3 -13
  16. package/components/ln-autoresize/ln-autoresize-dev.scss +8 -8
  17. package/components/ln-autoresize/ln-autoresize.js +1 -1
  18. package/components/ln-autoresize/ln-autoresize.schema.json +22 -22
  19. package/components/ln-autosave/ln-autosave-dev.scss +13 -13
  20. package/components/ln-autosave/ln-autosave.js +1 -1
  21. package/components/ln-autosave/ln-autosave.schema.json +48 -48
  22. package/components/ln-autosave/src/autosave-model.js +34 -34
  23. package/components/ln-chart/ln-chart.js +1 -1
  24. package/components/ln-chart/ln-chart.schema.json +146 -146
  25. package/components/ln-chart/src/chart-model.js +154 -154
  26. package/components/ln-circular-progress/ln-circular-progress.js +1 -1
  27. package/components/ln-circular-progress/ln-circular-progress.schema.json +42 -42
  28. package/components/ln-confirm/ln-confirm-dev.scss +24 -24
  29. package/components/ln-confirm/ln-confirm.js +1 -1
  30. package/components/ln-confirm/ln-confirm.schema.json +66 -66
  31. package/components/ln-confirm/src/ln-confirm.js +178 -178
  32. package/components/ln-core/crypto.js +286 -265
  33. package/components/ln-core/dom.js +115 -115
  34. package/components/ln-core/form.js +136 -136
  35. package/components/ln-core/helpers.js +33 -33
  36. package/components/ln-core/http.js +48 -48
  37. package/components/ln-core/index.js +1 -1
  38. package/components/ln-core/ln-core.schema.json +109 -109
  39. package/components/ln-core/locale.js +55 -55
  40. package/components/ln-core/matching.js +78 -78
  41. package/components/ln-core/number.js +125 -125
  42. package/components/ln-core/template.js +206 -206
  43. package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -1
  44. package/components/ln-couchdb-connector/ln-couchdb-connector.schema.json +50 -50
  45. package/components/ln-couchdb-connector/src/ln-couchdb-connector.js +1 -0
  46. package/components/ln-data-coordinator/README.md +9 -38
  47. package/components/ln-data-coordinator/ln-data-coordinator-dev.scss +8 -8
  48. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  49. package/components/ln-data-coordinator/ln-data-coordinator.schema.json +16 -16
  50. package/components/ln-data-coordinator/src/data-read-policy.js +0 -7
  51. package/components/ln-data-coordinator/src/ln-data-coordinator.js +428 -1308
  52. package/components/ln-data-store/ln-data-store-dev.scss +13 -13
  53. package/components/ln-data-store/ln-data-store.js +1 -1
  54. package/components/ln-data-store/ln-data-store.schema.json +84 -84
  55. package/components/ln-data-store/src/data-store-model.js +184 -184
  56. package/components/ln-data-store/src/ln-data-store.js +1 -1
  57. package/components/ln-date/ln-date.js +1 -1
  58. package/components/ln-date/ln-date.schema.json +92 -92
  59. package/components/ln-date/src/date-model.js +186 -186
  60. package/components/ln-debug/ln-debug.js +1 -1
  61. package/components/ln-debug/ln-debug.schema.json +28 -28
  62. package/components/ln-debug/src/console-sink.js +19 -19
  63. package/components/ln-debug/src/gate.js +95 -95
  64. package/components/ln-debug/src/generated-attributes.js +2 -2
  65. package/components/ln-dropdown/ln-dropdown-dev.scss +13 -13
  66. package/components/ln-dropdown/ln-dropdown.js +1 -1
  67. package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
  68. package/components/ln-editor/ln-editor.js +1 -1
  69. package/components/ln-editor/ln-editor.schema.json +58 -58
  70. package/components/ln-external-links/ln-external-links.js +1 -1
  71. package/components/ln-external-links/ln-external-links.schema.json +18 -18
  72. package/components/ln-fill/ln-fill.js +1 -1
  73. package/components/ln-fill/ln-fill.schema.json +23 -23
  74. package/components/ln-filter/ln-filter.js +1 -1
  75. package/components/ln-filter/ln-filter.schema.json +153 -153
  76. package/components/ln-filter/src/filter-model.js +185 -185
  77. package/components/ln-form/ln-form-dev.scss +8 -8
  78. package/components/ln-form/ln-form.js +1 -1
  79. package/components/ln-form/ln-form.schema.json +45 -45
  80. package/components/ln-http/ln-http.js +1 -1
  81. package/components/ln-http/ln-http.schema.json +6 -6
  82. package/components/ln-icon/ln-icon.schema.json +6 -6
  83. package/components/ln-include/ln-include.js +1 -1
  84. package/components/ln-include/ln-include.schema.json +23 -23
  85. package/components/ln-key/ln-key-dev.scss +18 -18
  86. package/components/ln-key/ln-key.js +1 -1
  87. package/components/ln-key/ln-key.schema.json +56 -56
  88. package/components/ln-key/src/ln-key.js +10 -10
  89. package/components/ln-link/ln-link-dev.scss +8 -8
  90. package/components/ln-link/ln-link.js +1 -1
  91. package/components/ln-link/ln-link.schema.json +22 -22
  92. package/components/ln-list/README.md +152 -152
  93. package/components/ln-list/ln-list-dev.scss +8 -8
  94. package/components/ln-list/ln-list.js +1 -1
  95. package/components/ln-list/ln-list.schema.json +166 -166
  96. package/components/ln-modal/ln-modal.js +1 -1
  97. package/components/ln-modal/ln-modal.schema.json +65 -65
  98. package/components/ln-nav/ln-nav.js +1 -1
  99. package/components/ln-nav/ln-nav.schema.json +25 -25
  100. package/components/ln-number/ln-number.js +1 -1
  101. package/components/ln-number/ln-number.schema.json +63 -63
  102. package/components/ln-number/src/number-model.js +31 -31
  103. package/components/ln-obfuscator/README.md +60 -60
  104. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  105. package/components/ln-obfuscator/ln-obfuscator.schema.json +49 -49
  106. package/components/ln-obfuscator/src/ln-obfuscator.js +159 -159
  107. package/components/ln-obfuscator/src/obfuscator-model.js +250 -250
  108. package/components/ln-options/ln-options.js +1 -1
  109. package/components/ln-options/ln-options.schema.json +41 -41
  110. package/components/ln-persist/README.md +151 -151
  111. package/components/ln-persist/ln-persist.js +1 -1
  112. package/components/ln-persist/ln-persist.schema.json +28 -28
  113. package/components/ln-persist/src/ln-persist.js +83 -83
  114. package/components/ln-picklist/README.md +230 -230
  115. package/components/ln-picklist/ln-picklist-dev.scss +22 -22
  116. package/components/ln-picklist/ln-picklist.js +1 -1
  117. package/components/ln-picklist/ln-picklist.schema.json +49 -49
  118. package/components/ln-picklist/src/ln-picklist.js +228 -228
  119. package/components/ln-popover/ln-popover-dev.scss +13 -13
  120. package/components/ln-popover/ln-popover.js +1 -1
  121. package/components/ln-popover/ln-popover.schema.json +82 -82
  122. package/components/ln-progress/ln-progress-dev.scss +8 -8
  123. package/components/ln-progress/ln-progress.js +1 -1
  124. package/components/ln-progress/ln-progress.schema.json +40 -40
  125. package/components/ln-router/ln-router.js +1 -1
  126. package/components/ln-router/ln-router.schema.json +76 -76
  127. package/components/ln-scroll/README.md +45 -45
  128. package/components/ln-scroll/ln-scroll.js +1 -1
  129. package/components/ln-scroll/ln-scroll.schema.json +85 -85
  130. package/components/ln-scroll/src/ln-scroll.js +150 -150
  131. package/components/ln-search/README.md +188 -188
  132. package/components/ln-search/ln-search.js +1 -1
  133. package/components/ln-search/ln-search.schema.json +103 -103
  134. package/components/ln-slug/ln-slug.js +1 -1
  135. package/components/ln-slug/ln-slug.schema.json +23 -23
  136. package/components/ln-sort/ln-sort.js +1 -1
  137. package/components/ln-sort/ln-sort.schema.json +104 -104
  138. package/components/ln-sort/src/ln-sort.js +321 -321
  139. package/components/ln-sort/src/sort-model.js +117 -117
  140. package/components/ln-sortable/ln-sortable-dev.scss +13 -13
  141. package/components/ln-sortable/ln-sortable.js +1 -1
  142. package/components/ln-sortable/ln-sortable.schema.json +36 -36
  143. package/components/ln-stat/ln-stat-dev.scss +8 -8
  144. package/components/ln-stat/ln-stat.js +1 -1
  145. package/components/ln-stat/ln-stat.schema.json +32 -32
  146. package/components/ln-stat/src/stat-model.js +28 -28
  147. package/components/ln-table/ln-table.js +1 -1
  148. package/components/ln-table/ln-table.schema.json +211 -211
  149. package/components/ln-table/src/table-model.js +98 -98
  150. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  151. package/components/ln-table-coordinator/ln-table-coordinator.schema.json +93 -93
  152. package/components/ln-tabs/ln-tabs.js +1 -1
  153. package/components/ln-tabs/ln-tabs.schema.json +75 -75
  154. package/components/ln-tabs/src/ln-tabs.js +208 -208
  155. package/components/ln-tabs/src/tabs-model.js +82 -82
  156. package/components/ln-time/ln-time-dev.scss +13 -13
  157. package/components/ln-time/ln-time.js +1 -1
  158. package/components/ln-time/ln-time.schema.json +38 -38
  159. package/components/ln-toast/ln-toast.js +1 -1
  160. package/components/ln-toast/ln-toast.schema.json +65 -65
  161. package/components/ln-toggle/ln-toggle.js +1 -1
  162. package/components/ln-toggle/ln-toggle.schema.json +52 -52
  163. package/components/ln-tooltip/ln-tooltip.js +1 -1
  164. package/components/ln-tooltip/ln-tooltip.schema.json +86 -86
  165. package/components/ln-translations/ln-translations.js +1 -1
  166. package/components/ln-translations/ln-translations.schema.json +120 -120
  167. package/components/ln-ui-coordinator/README.md +62 -62
  168. package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -1
  169. package/components/ln-ui-coordinator/ln-ui-coordinator.schema.json +28 -28
  170. package/components/ln-ui-coordinator/src/ln-ui-coordinator.js +140 -140
  171. package/components/ln-upload/ln-upload.js +1 -1
  172. package/components/ln-upload/ln-upload.schema.json +193 -193
  173. package/components/ln-upload/src/upload-model.js +78 -78
  174. package/components/ln-validate/ln-validate.js +1 -1
  175. package/components/ln-validate/ln-validate.schema.json +50 -50
  176. package/components/ln-validate/src/validate-model.js +64 -64
  177. package/components/ln-websocket-connector/README.md +166 -166
  178. package/components/ln-websocket-connector/ln-websocket-connector.js +1 -1
  179. package/components/ln-websocket-connector/ln-websocket-connector.schema.json +29 -29
  180. package/components/ln-websocket-connector/src/ln-websocket-connector.js +283 -279
  181. package/ln-ashlar.html-data.json +7 -8
  182. package/package.json +84 -84
  183. package/theme/brand.css +73 -73
  184. package/theme/components/_confirm.scss +6 -6
  185. package/theme/components/_picklist.scss +3 -3
  186. package/theme/config/_palette.scss +274 -274
  187. package/theme/config/_theme.scss +292 -292
  188. package/theme/config/_tokens.scss +285 -285
  189. package/theme/config/mixins/_index.scss +62 -62
  190. package/theme/config/mixins/_picklist.scss +66 -66
  191. package/theme/ln-ashlar-dev.scss +66 -66
  192. package/theme/ln-ashlar-landing.scss +56 -56
  193. package/theme/ln-ashlar-theme.scss +63 -63
  194. package/theme/presentation/_bento.scss +151 -151
  195. package/theme/presentation/_cta.scss +111 -111
  196. package/theme/presentation/_effects.scss +216 -216
  197. package/theme/presentation/_features.scss +108 -108
  198. package/theme/presentation/_footer.scss +129 -129
  199. package/theme/presentation/_hero.scss +158 -158
  200. package/theme/presentation/_layout.scss +170 -170
  201. package/theme/presentation/_navbar.scss +140 -140
  202. package/theme/presentation/_pricing.scss +262 -262
  203. package/theme/presentation/_stats.scss +87 -87
  204. package/theme/presentation/_testimonials.scss +124 -124
  205. package/theme/presentation/_tokens.scss +39 -39
  206. package/theme/presentation/_typography.scss +163 -163
  207. package/web-types.json +12 -12
@@ -1,211 +1,211 @@
1
- {
2
- "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
- "component": "ln-table",
4
- "generator": "scripts/sync-ln-schemas.mjs",
5
- "attributes": {
6
- "data-ln-debug": {
7
- "direction": null,
8
- "sources": [
9
- "ln-table-dev.scss"
10
- ]
11
- },
12
- "data-ln-sort": {
13
- "direction": null,
14
- "sources": [
15
- "ln-table-dev.scss",
16
- "ln-table.scss"
17
- ]
18
- },
19
- "data-ln-sort-icon": {
20
- "direction": null,
21
- "sources": [
22
- "ln-table.scss"
23
- ]
24
- },
25
- "data-ln-table": {
26
- "direction": null,
27
- "sources": [
28
- "ln-table-dev.scss",
29
- "ln-table.scss",
30
- "src/ln-table.js"
31
- ],
32
- "type": "string",
33
- "fallback": "",
34
- "description": "Table instance name or identifier"
35
- },
36
- "data-ln-table-body": {
37
- "direction": "author",
38
- "sources": [
39
- "src/ln-table.js"
40
- ]
41
- },
42
- "data-ln-table-cell-attr": {
43
- "direction": "author",
44
- "sources": [
45
- "src/ln-table.js"
46
- ],
47
- "type": "string",
48
- "description": "Cell attribute template mapping"
49
- },
50
- "data-ln-table-col": {
51
- "direction": "author",
52
- "sources": [
53
- "src/ln-table.js"
54
- ],
55
- "type": "string",
56
- "description": "Column header identifier or field mapping"
57
- },
58
- "data-ln-table-col-select": {
59
- "direction": "author",
60
- "sources": [
61
- "src/ln-table.js"
62
- ],
63
- "type": "trigger",
64
- "description": "Header select-all checkbox trigger"
65
- },
66
- "data-ln-table-col-sort": {
67
- "direction": null,
68
- "sources": [
69
- "ln-table-dev.scss"
70
- ]
71
- },
72
- "data-ln-table-count": {
73
- "direction": "author",
74
- "sources": [
75
- "src/ln-table.js"
76
- ],
77
- "type": "integer",
78
- "min": 0,
79
- "description": "Total record count override for virtual scrollbar calculation"
80
- },
81
- "data-ln-table-dict": {
82
- "direction": "author",
83
- "sources": [
84
- "src/ln-table.js"
85
- ]
86
- },
87
- "data-ln-table-empty": {
88
- "direction": "author",
89
- "sources": [
90
- "src/ln-table.js"
91
- ],
92
- "type": "marker",
93
- "description": "Container for table empty state"
94
- },
95
- "data-ln-table-empty-when": {
96
- "direction": "author",
97
- "sources": [
98
- "src/ln-table.js"
99
- ]
100
- },
101
- "data-ln-table-filtered": {
102
- "direction": "author",
103
- "sources": [
104
- "src/ln-table.js"
105
- ]
106
- },
107
- "data-ln-table-row": {
108
- "direction": "both",
109
- "sources": [
110
- "src/ln-table.js"
111
- ],
112
- "type": "marker",
113
- "description": "Table row template element"
114
- },
115
- "data-ln-table-row-action": {
116
- "direction": "author",
117
- "sources": [
118
- "src/ln-table.js"
119
- ],
120
- "type": "trigger",
121
- "description": "Action trigger inside a table row"
122
- },
123
- "data-ln-table-row-id": {
124
- "direction": "both",
125
- "sources": [
126
- "src/ln-table.js"
127
- ],
128
- "type": "string",
129
- "description": "Record identifier on row element"
130
- },
131
- "data-ln-table-row-select": {
132
- "direction": "both",
133
- "sources": [
134
- "src/ln-table.js"
135
- ],
136
- "type": "trigger",
137
- "description": "Row selection checkbox trigger"
138
- },
139
- "data-ln-table-select-all-label": {
140
- "direction": "author",
141
- "sources": [
142
- "src/ln-table.js"
143
- ],
144
- "type": "string",
145
- "description": "Accessibility label for select-all header trigger"
146
- },
147
- "data-ln-table-selectable": {
148
- "direction": null,
149
- "sources": [
150
- "src/ln-table.js"
151
- ],
152
- "type": "boolean",
153
- "description": "Enables row selection check controls"
154
- },
155
- "data-ln-table-selected": {
156
- "direction": "author",
157
- "sources": [
158
- "src/ln-table.js"
159
- ]
160
- },
161
- "data-ln-table-sort": {
162
- "direction": null,
163
- "sources": [
164
- "ln-table-dev.scss"
165
- ]
166
- },
167
- "data-ln-table-source": {
168
- "direction": "author",
169
- "sources": [
170
- "src/ln-table.js"
171
- ],
172
- "type": "string",
173
- "fallback": "",
174
- "description": "Source store or coordinator addressing"
175
- },
176
- "data-ln-table-total": {
177
- "direction": "author",
178
- "sources": [
179
- "src/ln-table.js"
180
- ]
181
- },
182
- "data-ln-table-window": {
183
- "direction": "author",
184
- "sources": [
185
- "src/ln-table.js"
186
- ],
187
- "type": "integer",
188
- "min": 10,
189
- "description": "Virtual scrolling window size in rows"
190
- },
191
- "data-ln-table-window-page": {
192
- "direction": "author",
193
- "sources": [
194
- "src/ln-table.js"
195
- ],
196
- "type": "integer",
197
- "min": 5,
198
- "description": "Virtual scrolling slice page size"
199
- },
200
- "data-ln-table-window-threshold": {
201
- "direction": "author",
202
- "sources": [
203
- "src/ln-table.js"
204
- ],
205
- "type": "integer",
206
- "fallback": 50,
207
- "min": 0,
208
- "description": "Scroll threshold margin in pixels to trigger page fetch"
209
- }
210
- }
211
- }
1
+ {
2
+ "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
+ "component": "ln-table",
4
+ "generator": "scripts/sync-ln-schemas.mjs",
5
+ "attributes": {
6
+ "data-ln-debug": {
7
+ "direction": null,
8
+ "sources": [
9
+ "ln-table-dev.scss"
10
+ ]
11
+ },
12
+ "data-ln-sort": {
13
+ "direction": null,
14
+ "sources": [
15
+ "ln-table-dev.scss",
16
+ "ln-table.scss"
17
+ ]
18
+ },
19
+ "data-ln-sort-icon": {
20
+ "direction": null,
21
+ "sources": [
22
+ "ln-table.scss"
23
+ ]
24
+ },
25
+ "data-ln-table": {
26
+ "direction": null,
27
+ "sources": [
28
+ "ln-table-dev.scss",
29
+ "ln-table.scss",
30
+ "src/ln-table.js"
31
+ ],
32
+ "type": "string",
33
+ "fallback": "",
34
+ "description": "Table instance name or identifier"
35
+ },
36
+ "data-ln-table-body": {
37
+ "direction": "author",
38
+ "sources": [
39
+ "src/ln-table.js"
40
+ ]
41
+ },
42
+ "data-ln-table-cell-attr": {
43
+ "direction": "author",
44
+ "sources": [
45
+ "src/ln-table.js"
46
+ ],
47
+ "type": "string",
48
+ "description": "Cell attribute template mapping"
49
+ },
50
+ "data-ln-table-col": {
51
+ "direction": "author",
52
+ "sources": [
53
+ "src/ln-table.js"
54
+ ],
55
+ "type": "string",
56
+ "description": "Column header identifier or field mapping"
57
+ },
58
+ "data-ln-table-col-select": {
59
+ "direction": "author",
60
+ "sources": [
61
+ "src/ln-table.js"
62
+ ],
63
+ "type": "trigger",
64
+ "description": "Header select-all checkbox trigger"
65
+ },
66
+ "data-ln-table-col-sort": {
67
+ "direction": null,
68
+ "sources": [
69
+ "ln-table-dev.scss"
70
+ ]
71
+ },
72
+ "data-ln-table-count": {
73
+ "direction": "author",
74
+ "sources": [
75
+ "src/ln-table.js"
76
+ ],
77
+ "type": "integer",
78
+ "min": 0,
79
+ "description": "Total record count override for virtual scrollbar calculation"
80
+ },
81
+ "data-ln-table-dict": {
82
+ "direction": "author",
83
+ "sources": [
84
+ "src/ln-table.js"
85
+ ]
86
+ },
87
+ "data-ln-table-empty": {
88
+ "direction": "author",
89
+ "sources": [
90
+ "src/ln-table.js"
91
+ ],
92
+ "type": "marker",
93
+ "description": "Container for table empty state"
94
+ },
95
+ "data-ln-table-empty-when": {
96
+ "direction": "author",
97
+ "sources": [
98
+ "src/ln-table.js"
99
+ ]
100
+ },
101
+ "data-ln-table-filtered": {
102
+ "direction": "author",
103
+ "sources": [
104
+ "src/ln-table.js"
105
+ ]
106
+ },
107
+ "data-ln-table-row": {
108
+ "direction": "both",
109
+ "sources": [
110
+ "src/ln-table.js"
111
+ ],
112
+ "type": "marker",
113
+ "description": "Table row template element"
114
+ },
115
+ "data-ln-table-row-action": {
116
+ "direction": "author",
117
+ "sources": [
118
+ "src/ln-table.js"
119
+ ],
120
+ "type": "trigger",
121
+ "description": "Action trigger inside a table row"
122
+ },
123
+ "data-ln-table-row-id": {
124
+ "direction": "both",
125
+ "sources": [
126
+ "src/ln-table.js"
127
+ ],
128
+ "type": "string",
129
+ "description": "Record identifier on row element"
130
+ },
131
+ "data-ln-table-row-select": {
132
+ "direction": "both",
133
+ "sources": [
134
+ "src/ln-table.js"
135
+ ],
136
+ "type": "trigger",
137
+ "description": "Row selection checkbox trigger"
138
+ },
139
+ "data-ln-table-select-all-label": {
140
+ "direction": "author",
141
+ "sources": [
142
+ "src/ln-table.js"
143
+ ],
144
+ "type": "string",
145
+ "description": "Accessibility label for select-all header trigger"
146
+ },
147
+ "data-ln-table-selectable": {
148
+ "direction": null,
149
+ "sources": [
150
+ "src/ln-table.js"
151
+ ],
152
+ "type": "boolean",
153
+ "description": "Enables row selection check controls"
154
+ },
155
+ "data-ln-table-selected": {
156
+ "direction": "author",
157
+ "sources": [
158
+ "src/ln-table.js"
159
+ ]
160
+ },
161
+ "data-ln-table-sort": {
162
+ "direction": null,
163
+ "sources": [
164
+ "ln-table-dev.scss"
165
+ ]
166
+ },
167
+ "data-ln-table-source": {
168
+ "direction": "author",
169
+ "sources": [
170
+ "src/ln-table.js"
171
+ ],
172
+ "type": "string",
173
+ "fallback": "",
174
+ "description": "Source store or coordinator addressing"
175
+ },
176
+ "data-ln-table-total": {
177
+ "direction": "author",
178
+ "sources": [
179
+ "src/ln-table.js"
180
+ ]
181
+ },
182
+ "data-ln-table-window": {
183
+ "direction": "author",
184
+ "sources": [
185
+ "src/ln-table.js"
186
+ ],
187
+ "type": "integer",
188
+ "min": 10,
189
+ "description": "Virtual scrolling window size in rows"
190
+ },
191
+ "data-ln-table-window-page": {
192
+ "direction": "author",
193
+ "sources": [
194
+ "src/ln-table.js"
195
+ ],
196
+ "type": "integer",
197
+ "min": 5,
198
+ "description": "Virtual scrolling slice page size"
199
+ },
200
+ "data-ln-table-window-threshold": {
201
+ "direction": "author",
202
+ "sources": [
203
+ "src/ln-table.js"
204
+ ],
205
+ "type": "integer",
206
+ "fallback": 50,
207
+ "min": 0,
208
+ "description": "Scroll threshold margin in pixels to trigger page fetch"
209
+ }
210
+ }
211
+ }
@@ -1,98 +1,98 @@
1
- /**
2
- * Calculates virtual scrolling slicing indices and padding heights.
3
- * @param {number} scrollTop
4
- * @param {number} viewportHeight
5
- * @param {number} rowHeight
6
- * @param {number} totalCount
7
- * @param {number} [bufferRows=15]
8
- * @returns {{ start: number, end: number, topPadding: number, bottomPadding: number }}
9
- */
10
- export function calculateVirtualWindow(scrollTop, viewportHeight, rowHeight, totalCount, bufferRows = 15) {
11
- if (totalCount <= 0 || rowHeight <= 0) {
12
- return { start: 0, end: 0, topPadding: 0, bottomPadding: 0 };
13
- }
14
-
15
- const safeScrollTop = Math.max(0, scrollTop || 0);
16
- const safeViewportHeight = Math.max(0, viewportHeight || 0);
17
-
18
- const visibleStartIndex = Math.floor(safeScrollTop / rowHeight);
19
- const visibleCount = Math.ceil(safeViewportHeight / rowHeight);
20
-
21
- const start = Math.max(0, visibleStartIndex - bufferRows);
22
- const end = Math.min(totalCount, visibleStartIndex + visibleCount + bufferRows);
23
-
24
- const topPadding = start * rowHeight;
25
- const bottomPadding = Math.max(0, (totalCount - end) * rowHeight);
26
-
27
- return { start, end, topPadding, bottomPadding };
28
- }
29
-
30
- /**
31
- * Computes selection state metadata across a dataset.
32
- * @param {string[]|number[]} allIds
33
- * @param {Set<string|number>|Array<string|number>} selectedIds
34
- * @returns {{ totalCount: number, selectedCount: number, isAllSelected: boolean, isIndeterminate: boolean }}
35
- */
36
- export function calculateSelectionState(allIds, selectedIds) {
37
- const totalCount = Array.isArray(allIds) ? allIds.length : 0;
38
- const selectedSet = selectedIds instanceof Set ? selectedIds : new Set(selectedIds || []);
39
- let selectedCount = 0;
40
-
41
- if (Array.isArray(allIds)) {
42
- for (let i = 0; i < allIds.length; i++) {
43
- if (selectedSet.has(allIds[i])) {
44
- selectedCount++;
45
- }
46
- }
47
- } else {
48
- selectedCount = selectedSet.size;
49
- }
50
-
51
- const isAllSelected = totalCount > 0 && selectedCount === totalCount;
52
- const isIndeterminate = selectedCount > 0 && selectedCount < totalCount;
53
-
54
- return { totalCount, selectedCount, isAllSelected, isIndeterminate };
55
- }
56
-
57
- /**
58
- * Toggles a row ID within a Set of selected IDs.
59
- * @param {Set<string|number>} selectedSet
60
- * @param {string|number} rowId
61
- * @param {boolean} [forceState]
62
- * @returns {Set<string|number>}
63
- */
64
- export function toggleRowSelection(selectedSet, rowId, forceState) {
65
- const next = new Set(selectedSet);
66
- if (rowId == null) return next;
67
-
68
- const shouldSelect = forceState !== undefined ? forceState : !next.has(rowId);
69
- if (shouldSelect) {
70
- next.add(rowId);
71
- } else {
72
- next.delete(rowId);
73
- }
74
- return next;
75
- }
76
-
77
- /**
78
- * Selects or deselects all IDs.
79
- * @param {Set<string|number>} selectedSet
80
- * @param {Array<string|number>} allIds
81
- * @param {boolean} selectAll
82
- * @returns {Set<string|number>}
83
- */
84
- export function toggleSelectAll(selectedSet, allIds, selectAll) {
85
- const next = new Set(selectedSet);
86
- if (!Array.isArray(allIds)) return next;
87
-
88
- if (selectAll) {
89
- for (let i = 0; i < allIds.length; i++) {
90
- if (allIds[i] != null) next.add(allIds[i]);
91
- }
92
- } else {
93
- for (let i = 0; i < allIds.length; i++) {
94
- next.delete(allIds[i]);
95
- }
96
- }
97
- return next;
98
- }
1
+ /**
2
+ * Calculates virtual scrolling slicing indices and padding heights.
3
+ * @param {number} scrollTop
4
+ * @param {number} viewportHeight
5
+ * @param {number} rowHeight
6
+ * @param {number} totalCount
7
+ * @param {number} [bufferRows=15]
8
+ * @returns {{ start: number, end: number, topPadding: number, bottomPadding: number }}
9
+ */
10
+ export function calculateVirtualWindow(scrollTop, viewportHeight, rowHeight, totalCount, bufferRows = 15) {
11
+ if (totalCount <= 0 || rowHeight <= 0) {
12
+ return { start: 0, end: 0, topPadding: 0, bottomPadding: 0 };
13
+ }
14
+
15
+ const safeScrollTop = Math.max(0, scrollTop || 0);
16
+ const safeViewportHeight = Math.max(0, viewportHeight || 0);
17
+
18
+ const visibleStartIndex = Math.floor(safeScrollTop / rowHeight);
19
+ const visibleCount = Math.ceil(safeViewportHeight / rowHeight);
20
+
21
+ const start = Math.max(0, visibleStartIndex - bufferRows);
22
+ const end = Math.min(totalCount, visibleStartIndex + visibleCount + bufferRows);
23
+
24
+ const topPadding = start * rowHeight;
25
+ const bottomPadding = Math.max(0, (totalCount - end) * rowHeight);
26
+
27
+ return { start, end, topPadding, bottomPadding };
28
+ }
29
+
30
+ /**
31
+ * Computes selection state metadata across a dataset.
32
+ * @param {string[]|number[]} allIds
33
+ * @param {Set<string|number>|Array<string|number>} selectedIds
34
+ * @returns {{ totalCount: number, selectedCount: number, isAllSelected: boolean, isIndeterminate: boolean }}
35
+ */
36
+ export function calculateSelectionState(allIds, selectedIds) {
37
+ const totalCount = Array.isArray(allIds) ? allIds.length : 0;
38
+ const selectedSet = selectedIds instanceof Set ? selectedIds : new Set(selectedIds || []);
39
+ let selectedCount = 0;
40
+
41
+ if (Array.isArray(allIds)) {
42
+ for (let i = 0; i < allIds.length; i++) {
43
+ if (selectedSet.has(allIds[i])) {
44
+ selectedCount++;
45
+ }
46
+ }
47
+ } else {
48
+ selectedCount = selectedSet.size;
49
+ }
50
+
51
+ const isAllSelected = totalCount > 0 && selectedCount === totalCount;
52
+ const isIndeterminate = selectedCount > 0 && selectedCount < totalCount;
53
+
54
+ return { totalCount, selectedCount, isAllSelected, isIndeterminate };
55
+ }
56
+
57
+ /**
58
+ * Toggles a row ID within a Set of selected IDs.
59
+ * @param {Set<string|number>} selectedSet
60
+ * @param {string|number} rowId
61
+ * @param {boolean} [forceState]
62
+ * @returns {Set<string|number>}
63
+ */
64
+ export function toggleRowSelection(selectedSet, rowId, forceState) {
65
+ const next = new Set(selectedSet);
66
+ if (rowId == null) return next;
67
+
68
+ const shouldSelect = forceState !== undefined ? forceState : !next.has(rowId);
69
+ if (shouldSelect) {
70
+ next.add(rowId);
71
+ } else {
72
+ next.delete(rowId);
73
+ }
74
+ return next;
75
+ }
76
+
77
+ /**
78
+ * Selects or deselects all IDs.
79
+ * @param {Set<string|number>} selectedSet
80
+ * @param {Array<string|number>} allIds
81
+ * @param {boolean} selectAll
82
+ * @returns {Set<string|number>}
83
+ */
84
+ export function toggleSelectAll(selectedSet, allIds, selectAll) {
85
+ const next = new Set(selectedSet);
86
+ if (!Array.isArray(allIds)) return next;
87
+
88
+ if (selectAll) {
89
+ for (let i = 0; i < allIds.length; i++) {
90
+ if (allIds[i] != null) next.add(allIds[i]);
91
+ }
92
+ } else {
93
+ for (let i = 0; i < allIds.length; i++) {
94
+ next.delete(allIds[i]);
95
+ }
96
+ }
97
+ return next;
98
+ }