@threadlabs/looma 0.37.3 → 0.37.5

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 (125) hide show
  1. package/components/shared/active-item-reveal.js +74 -0
  2. package/components/shared/menu-navigation.js +3 -1
  3. package/components/ui-button/ui-button.html +13 -0
  4. package/components/ui-combobox/ui-combobox.js +3 -1
  5. package/components/ui-context-menu/ui-context-menu.js +4 -1
  6. package/components/ui-editor-link-form/ui-editor-link-form.js +3 -1
  7. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +12 -5
  8. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +12 -5
  9. package/components/ui-form-field/ui-form-field.js +7 -1
  10. package/components/ui-listbox/ui-listbox.js +3 -1
  11. package/components/ui-menu/ui-menu.js +5 -1
  12. package/components/ui-pagination/ui-pagination.html +74 -0
  13. package/components/ui-pagination/ui-pagination.js +19 -0
  14. package/components/ui-search-shell/ui-search-shell.js +7 -4
  15. package/dist/index.js +20 -19
  16. package/docs/catalog.json +323 -1
  17. package/docs/examples/ui-pagination/examples/01-numbered.behavior.js +11 -0
  18. package/package.json +1 -1
  19. package/styles/ui-button.css +12 -0
  20. package/styles/ui-pagination.css +1 -0
  21. package/vanilla/UiButton.d.ts +1 -0
  22. package/vanilla/UiButton.js +31 -31
  23. package/vanilla/UiPagination.d.ts +35 -0
  24. package/vanilla/UiPagination.js +202 -0
  25. package/vanilla/index.js +1 -0
  26. package/vue/UiButton.d.ts +6 -0
  27. package/vue/UiButton.vue +34 -0
  28. package/vue/UiPagination.d.ts +115 -0
  29. package/vue/UiPagination.js +2 -0
  30. package/vue/UiPagination.vue +598 -0
  31. package/vue/chunks/UiActionBar.js +1 -1
  32. package/vue/chunks/UiAffordanceScope.js +1 -1
  33. package/vue/chunks/UiAvatar.js +1 -1
  34. package/vue/chunks/UiAvatarGroup.js +1 -1
  35. package/vue/chunks/UiBadge.js +1 -1
  36. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  37. package/vue/chunks/UiBreadcrumbs.js +1 -1
  38. package/vue/chunks/UiButton.js +30 -2
  39. package/vue/chunks/UiCallout.js +1 -1
  40. package/vue/chunks/UiCard.js +1 -1
  41. package/vue/chunks/UiCheckbox.js +1 -1
  42. package/vue/chunks/UiCluster.js +1 -1
  43. package/vue/chunks/UiColorPicker.js +1 -1
  44. package/vue/chunks/UiCombobox.js +1 -1
  45. package/vue/chunks/UiContainer.js +1 -1
  46. package/vue/chunks/UiContextMenu.js +1 -1
  47. package/vue/chunks/UiCover.js +1 -1
  48. package/vue/chunks/UiCurveEditor.js +1 -1
  49. package/vue/chunks/UiCycleButton.js +1 -1
  50. package/vue/chunks/UiDescriptionItem.js +1 -1
  51. package/vue/chunks/UiDescriptionList.js +1 -1
  52. package/vue/chunks/UiDialog.js +1 -1
  53. package/vue/chunks/UiDisclosure.js +1 -1
  54. package/vue/chunks/UiEditable.js +1 -1
  55. package/vue/chunks/UiEditorBlockActions.js +1 -1
  56. package/vue/chunks/UiEditorChipEditor.js +1 -1
  57. package/vue/chunks/UiEditorCodeLanguage.js +1 -1
  58. package/vue/chunks/UiEditorFootnoteEditor.js +1 -1
  59. package/vue/chunks/UiEditorImageToolbar.js +1 -1
  60. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  61. package/vue/chunks/UiEditorLinkCard.js +1 -1
  62. package/vue/chunks/UiEditorLinkForm.js +1 -1
  63. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  64. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  65. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  66. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  67. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  68. package/vue/chunks/UiEditorSurface.js +1 -1
  69. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  70. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  71. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  72. package/vue/chunks/UiEditorToolbar.js +1 -1
  73. package/vue/chunks/UiFloatingActionButton.js +1 -1
  74. package/vue/chunks/UiFormField.js +1 -1
  75. package/vue/chunks/UiGrid.js +1 -1
  76. package/vue/chunks/UiIcon.js +1 -1
  77. package/vue/chunks/UiIconButton.js +1 -1
  78. package/vue/chunks/UiImage.js +1 -1
  79. package/vue/chunks/UiInput.js +1 -1
  80. package/vue/chunks/UiInputGroup.js +1 -1
  81. package/vue/chunks/UiLightEditor.js +1 -1
  82. package/vue/chunks/UiList.js +1 -1
  83. package/vue/chunks/UiListItem.js +1 -1
  84. package/vue/chunks/UiListbox.js +1 -1
  85. package/vue/chunks/UiMenu.js +1 -1
  86. package/vue/chunks/UiMenuGroup.js +1 -1
  87. package/vue/chunks/UiMenuItem.js +1 -1
  88. package/vue/chunks/UiMeter.js +1 -1
  89. package/vue/chunks/UiNavItem.js +1 -1
  90. package/vue/chunks/UiNumberInput.js +1 -1
  91. package/vue/chunks/UiPageHeader.js +1 -1
  92. package/vue/chunks/UiPagination.js +551 -0
  93. package/vue/chunks/UiPopover.js +1 -1
  94. package/vue/chunks/UiRadio.js +1 -1
  95. package/vue/chunks/UiRadioGroup.js +1 -1
  96. package/vue/chunks/UiReel.js +1 -1
  97. package/vue/chunks/UiScrollArea.js +1 -1
  98. package/vue/chunks/UiSearchResultRow.js +1 -1
  99. package/vue/chunks/UiSearchShell.js +1 -1
  100. package/vue/chunks/UiSection.js +1 -1
  101. package/vue/chunks/UiSelect.js +1 -1
  102. package/vue/chunks/UiSeparator.js +1 -1
  103. package/vue/chunks/UiSidebar.js +1 -1
  104. package/vue/chunks/UiSlider.js +1 -1
  105. package/vue/chunks/UiSpinner.js +1 -1
  106. package/vue/chunks/UiStack.js +1 -1
  107. package/vue/chunks/UiStatusMessage.js +1 -1
  108. package/vue/chunks/UiSwatch.js +1 -1
  109. package/vue/chunks/UiSwitch.js +1 -1
  110. package/vue/chunks/UiSwitcher.js +1 -1
  111. package/vue/chunks/UiTable.js +1 -1
  112. package/vue/chunks/UiTabs.js +1 -1
  113. package/vue/chunks/UiText.js +1 -1
  114. package/vue/chunks/UiTextarea.js +1 -1
  115. package/vue/chunks/UiToast.js +1 -1
  116. package/vue/chunks/UiToastRegion.js +1 -1
  117. package/vue/chunks/UiTooltip.js +1 -1
  118. package/vue/chunks/UiTopBar.js +1 -1
  119. package/vue/chunks/UiTree.js +1 -1
  120. package/vue/chunks/UiTreeItem.js +1 -1
  121. package/vue/chunks/_plugin-vue_export-helper.js +27 -2
  122. package/vue/components.css +22 -0
  123. package/vue/editor/index.js +145 -36
  124. package/vue/index.d.ts +1 -0
  125. package/vue/index.js +2 -1
@@ -0,0 +1,598 @@
1
+ <!-- Generated by HTML Next 1.0.0-alpha.69 for Vue 3.5. Do not edit. -->
2
+ <script setup lang="ts">
3
+ import { computed, getCurrentInstance, ref, watchSyncEffect } from 'vue'
4
+ import type { PropType } from 'vue'
5
+ import {
6
+ checkHydratedRoot,
7
+ concat,
8
+ createDispatch,
9
+ decimalAdd,
10
+ decimalSubtract,
11
+ formatValue,
12
+ inlineTextSegment,
13
+ KeyedBoundary,
14
+ nativeAttrs,
15
+ number,
16
+ RetainedInlineText,
17
+ uniqueKeys,
18
+ useComponentHost,
19
+ useReflectedProp,
20
+ } from './host'
21
+ import {
22
+ BINDING_INPUTS_PROP,
23
+ checkedProp,
24
+ checkPropInput,
25
+ evaluateInput,
26
+ type InputBindings,
27
+ inputDefault,
28
+ inputRead,
29
+ propValidityState,
30
+ READY_INPUT,
31
+ requireInputStatus,
32
+ UNRESOLVED_INPUT,
33
+ vPropValidity,
34
+ vuePropInputs,
35
+ } from './props'
36
+ import UiButton from './UiButton.vue'
37
+ import UiCluster from './UiCluster.vue'
38
+ import UiIcon from './UiIcon.vue'
39
+
40
+ defineOptions({ inheritAttrs: false })
41
+
42
+ const propValidityContract = {
43
+ props: {
44
+ disabled: {
45
+ type: { kind: 'terminal', name: 'boolean' },
46
+ required: false,
47
+ target: { attribute: 'disabled' },
48
+ description: 'Makes all page controls unavailable while keeping the current page visible.',
49
+ default: false,
50
+ },
51
+ hasNext: {
52
+ type: { kind: 'terminal', name: 'boolean' },
53
+ required: false,
54
+ target: { attribute: 'hasnext' },
55
+ description: 'Whether another page is available. The component does not infer a total.',
56
+ default: false,
57
+ },
58
+ hasPrevious: {
59
+ type: { kind: 'terminal', name: 'boolean' },
60
+ required: false,
61
+ target: { attribute: 'hasprevious' },
62
+ description:
63
+ 'Whether a preceding page is available. Previous is always unavailable on page one.',
64
+ default: false,
65
+ },
66
+ label: {
67
+ type: { kind: 'terminal', name: 'string' },
68
+ required: false,
69
+ target: { attribute: 'aria-label' },
70
+ description: 'Accessible name for the navigation landmark.',
71
+ default: 'Results pages',
72
+ },
73
+ nextHref: {
74
+ type: { kind: 'terminal', name: 'string' },
75
+ required: false,
76
+ target: { attribute: 'href' },
77
+ description: 'Optional native destination for Next. Empty renders a request button.',
78
+ default: '',
79
+ },
80
+ nextLabel: {
81
+ type: { kind: 'terminal', name: 'string' },
82
+ required: false,
83
+ target: { attribute: 'aria-label' },
84
+ description: 'Accessible label for the following page action.',
85
+ default: 'Next',
86
+ },
87
+ page: {
88
+ type: { kind: 'terminal', name: 'number' },
89
+ required: false,
90
+ target: { attribute: 'page' },
91
+ description:
92
+ 'Current one-based page. The consumer updates it after a navigate request; activation never changes it internally.',
93
+ default: 1,
94
+ },
95
+ pageLabel: {
96
+ type: { kind: 'terminal', name: 'string' },
97
+ required: false,
98
+ target: { attribute: 'pagelabel' },
99
+ description:
100
+ 'Prefix for each numbered page\'s accessible name, followed by its localized number.',
101
+ default: 'Page',
102
+ },
103
+ pages: {
104
+ type: {
105
+ kind: 'list',
106
+ item: {
107
+ kind: 'object',
108
+ fields: [{ name: 'value', type: { kind: 'terminal', name: 'number' }, optional: false }, {
109
+ name: 'href',
110
+ type: { kind: 'terminal', name: 'string' },
111
+ optional: true,
112
+ }],
113
+ open: false,
114
+ },
115
+ },
116
+ required: false,
117
+ target: { attribute: 'pages' },
118
+ description:
119
+ 'Visible numbered pages in ascending order. Omit for previous/next navigation without a known total. Gaps between\n numbers show an ellipsis. Supply href to keep a numbered page usable as a native link before JavaScript.',
120
+ default: [],
121
+ },
122
+ previousHref: {
123
+ type: { kind: 'terminal', name: 'string' },
124
+ required: false,
125
+ target: { attribute: 'href' },
126
+ description: 'Optional native destination for Previous. Empty renders a request button.',
127
+ default: '',
128
+ },
129
+ previousLabel: {
130
+ type: { kind: 'terminal', name: 'string' },
131
+ required: false,
132
+ target: { attribute: 'aria-label' },
133
+ description: 'Accessible label for the preceding page action.',
134
+ default: 'Previous',
135
+ },
136
+ size: {
137
+ type: { kind: 'terminal', name: 'keyword' },
138
+ required: false,
139
+ target: { attribute: 'size' },
140
+ description:
141
+ 'Uses Button\'s shared size scale. Narrow groups wrap without enlarging compact controls.',
142
+ values: ['sm', 'md', 'lg'],
143
+ default: 'sm',
144
+ },
145
+ },
146
+ } as const
147
+ const props = defineProps({
148
+ disabled: { type: null as unknown as PropType<boolean | null> },
149
+ hasNext: { type: null as unknown as PropType<boolean | null> },
150
+ hasPrevious: { type: null as unknown as PropType<boolean | null> },
151
+ label: { type: null as unknown as PropType<string | null> },
152
+ nextHref: { type: null as unknown as PropType<string | null> },
153
+ nextLabel: { type: null as unknown as PropType<string | null> },
154
+ page: { type: null as unknown as PropType<number | null> },
155
+ pageLabel: { type: null as unknown as PropType<string | null> },
156
+ pages: {
157
+ type: null as unknown as PropType<
158
+ readonly ({ readonly value: number; readonly href?: string | null })[] | null
159
+ >,
160
+ },
161
+ previousHref: { type: null as unknown as PropType<string | null> },
162
+ previousLabel: { type: null as unknown as PropType<string | null> },
163
+ size: { type: null as unknown as PropType<'sm' | 'md' | 'lg' | null> },
164
+ [BINDING_INPUTS_PROP]: { type: null as unknown as PropType<InputBindings> },
165
+ })
166
+ const acceptedProps: Record<string, unknown> = {
167
+ disabled: false,
168
+ hasNext: false,
169
+ hasPrevious: false,
170
+ label: 'Results pages',
171
+ nextHref: '',
172
+ nextLabel: 'Next',
173
+ page: 1,
174
+ pageLabel: 'Page',
175
+ pages: [],
176
+ previousHref: '',
177
+ previousLabel: 'Previous',
178
+ size: 'sm',
179
+ }
180
+ const inputTracking = vuePropInputs(acceptedProps, {
181
+ disabled: false,
182
+ hasNext: false,
183
+ hasPrevious: false,
184
+ label: 'Results pages',
185
+ nextHref: '',
186
+ nextLabel: 'Next',
187
+ page: 1,
188
+ pageLabel: 'Page',
189
+ pages: [],
190
+ previousHref: '',
191
+ previousLabel: 'Previous',
192
+ size: 'sm',
193
+ }, (name, value, source, values) => {
194
+ switch (name) {
195
+ case 'disabled':
196
+ return checkPropInput(value, { kind: 'terminal', name: 'boolean' }, true, true)
197
+ case 'hasNext':
198
+ return checkPropInput(value, { kind: 'terminal', name: 'boolean' }, true, true)
199
+ case 'hasPrevious':
200
+ return checkPropInput(value, { kind: 'terminal', name: 'boolean' }, true, true)
201
+ case 'label':
202
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
203
+ case 'nextHref':
204
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
205
+ case 'nextLabel':
206
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
207
+ case 'page':
208
+ return checkPropInput(value, { kind: 'terminal', name: 'number' }, true, true)
209
+ case 'pageLabel':
210
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
211
+ case 'pages':
212
+ return checkPropInput(
213
+ value,
214
+ {
215
+ kind: 'list',
216
+ item: {
217
+ kind: 'object',
218
+ fields: [
219
+ { name: 'value', type: { kind: 'terminal', name: 'number' }, optional: false },
220
+ { name: 'href', type: { kind: 'terminal', name: 'string' }, optional: true },
221
+ ],
222
+ open: false,
223
+ },
224
+ },
225
+ true,
226
+ true,
227
+ )
228
+ case 'previousHref':
229
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
230
+ case 'previousLabel':
231
+ return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
232
+ case 'size':
233
+ return checkPropInput(value, { kind: 'terminal', name: 'keyword' }, true, true)
234
+ default:
235
+ return { ok: false }
236
+ }
237
+ }, () => {
238
+ void checkedProps.value
239
+ })
240
+ const propInputs = inputTracking.inputs
241
+ const checkedProps = computed(() => {
242
+ void inputTracking.version.value
243
+ return ({
244
+ disabled: propInputs.value<boolean | null>(
245
+ 'disabled',
246
+ props['disabled'],
247
+ props[BINDING_INPUTS_PROP],
248
+ ) as boolean,
249
+ hasNext: propInputs.value<boolean | null>(
250
+ 'hasNext',
251
+ props['hasNext'],
252
+ props[BINDING_INPUTS_PROP],
253
+ ) as boolean,
254
+ hasPrevious: propInputs.value<boolean | null>(
255
+ 'hasPrevious',
256
+ props['hasPrevious'],
257
+ props[BINDING_INPUTS_PROP],
258
+ ) as boolean,
259
+ label: propInputs.value<string | null>(
260
+ 'label',
261
+ props['label'],
262
+ props[BINDING_INPUTS_PROP],
263
+ ) as string,
264
+ nextHref: propInputs.value<string | null>(
265
+ 'nextHref',
266
+ props['nextHref'],
267
+ props[BINDING_INPUTS_PROP],
268
+ ) as string,
269
+ nextLabel: propInputs.value<string | null>(
270
+ 'nextLabel',
271
+ props['nextLabel'],
272
+ props[BINDING_INPUTS_PROP],
273
+ ) as string,
274
+ page: propInputs.value<number | null>(
275
+ 'page',
276
+ props['page'],
277
+ props[BINDING_INPUTS_PROP],
278
+ ) as number,
279
+ pageLabel: propInputs.value<string | null>(
280
+ 'pageLabel',
281
+ props['pageLabel'],
282
+ props[BINDING_INPUTS_PROP],
283
+ ) as string,
284
+ pages: propInputs.value<
285
+ readonly ({ readonly value: number; readonly href?: string | null })[] | null
286
+ >(
287
+ 'pages',
288
+ props['pages'],
289
+ props[BINDING_INPUTS_PROP],
290
+ ) as readonly ({ readonly value: number; readonly href?: string | null })[],
291
+ previousHref: propInputs.value<string | null>(
292
+ 'previousHref',
293
+ props['previousHref'],
294
+ props[BINDING_INPUTS_PROP],
295
+ ) as string,
296
+ previousLabel: propInputs.value<string | null>(
297
+ 'previousLabel',
298
+ props['previousLabel'],
299
+ props[BINDING_INPUTS_PROP],
300
+ ) as string,
301
+ size: propInputs.value<'sm' | 'md' | 'lg' | null>(
302
+ 'size',
303
+ props['size'],
304
+ props[BINDING_INPUTS_PROP],
305
+ ) as 'sm' | 'md' | 'lg',
306
+ })
307
+ })
308
+ const inputStatus = (name: string, handlesError: boolean) => {
309
+ void checkedProps.value
310
+ void inputTracking.version.value
311
+ return requireInputStatus(propInputs.status(name), handlesError)
312
+ }
313
+ void checkedProps.value
314
+ watchSyncEffect(() => {
315
+ void checkedProps.value
316
+ })
317
+ const reflectedProp = useReflectedProp()
318
+ const hydrationInstance = getCurrentInstance()
319
+ const emit = defineEmits<{
320
+ 'update:page': [value: number]
321
+ navigate: [
322
+ event: CustomEvent<
323
+ {
324
+ readonly page: number
325
+ readonly previousPage: number
326
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
327
+ }
328
+ >,
329
+ ]
330
+ }>()
331
+
332
+ const root = ref<HTMLElement | null>(null)
333
+ checkHydratedRoot('nav', 'ui-pagination')
334
+
335
+ const isNavigateDetail = (
336
+ detail: unknown,
337
+ ): boolean => (detail !== null && typeof detail === 'object' && !Array.isArray(detail)
338
+ && (typeof (detail as Record<string, unknown>)['page'] === 'number'
339
+ && Number.isFinite((detail as Record<string, unknown>)['page']))
340
+ && (typeof (detail as Record<string, unknown>)['previousPage'] === 'number'
341
+ && Number.isFinite((detail as Record<string, unknown>)['previousPage']))
342
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
343
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
344
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
345
+ && Object.keys(detail as object).every((key) =>
346
+ ['page', 'previousPage', 'trigger'].includes(key)
347
+ ))
348
+ const dispatch = createDispatch(root, emit as (name: string, detail: unknown) => void, {
349
+ checks: {
350
+ navigate: isNavigateDetail,
351
+ },
352
+ modeled: ['page'],
353
+ })
354
+
355
+ useComponentHost(() => import('../components/ui-pagination/ui-pagination.js'), {
356
+ root,
357
+ module: true,
358
+ dispatch,
359
+ controllerSource: {
360
+ specifier: '../components/ui-pagination/ui-pagination.js',
361
+ definition: './components/ui-pagination/ui-pagination.html',
362
+ },
363
+ props: checkedProps,
364
+ inputs: propInputs,
365
+ inputTracking,
366
+ propInputs: (name: string) => {
367
+ const incoming = hydrationInstance?.vnode.props
368
+ const kebab = name.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase())
369
+ return incoming !== null && incoming !== undefined
370
+ ? (incoming[name] ?? incoming[kebab] ?? null)
371
+ : null
372
+ },
373
+ propNames: [
374
+ 'disabled',
375
+ 'hasNext',
376
+ 'hasPrevious',
377
+ 'label',
378
+ 'nextHref',
379
+ 'nextLabel',
380
+ 'page',
381
+ 'pageLabel',
382
+ 'pages',
383
+ 'previousHref',
384
+ 'previousLabel',
385
+ 'size',
386
+ ],
387
+ propValidity: (name: string) =>
388
+ propValidityState({ contract: propValidityContract, values: { ...props } }, name),
389
+ })
390
+ </script>
391
+
392
+ <template>
393
+ <nav
394
+ v-bind="nativeAttrs($attrs)"
395
+ data-hn
396
+ :aria-label="checkedProps.label ?? undefined"
397
+ v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
398
+ :data-ui-pagination-prop-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
399
+ :data-ui-pagination-prop-has-next="reflectedProp('hasNext', 'has-next', checkedProps.hasNext, undefined, false)"
400
+ :data-ui-pagination-prop-has-previous="reflectedProp('hasPrevious', 'has-previous', checkedProps.hasPrevious, undefined, false)"
401
+ :data-ui-pagination-prop-label="reflectedProp('label', 'label', checkedProps.label, undefined, false)"
402
+ :data-ui-pagination-prop-next-href="reflectedProp('nextHref', 'next-href', checkedProps.nextHref, undefined, false)"
403
+ :data-ui-pagination-prop-next-label="reflectedProp('nextLabel', 'next-label', checkedProps.nextLabel, undefined, false)"
404
+ :data-ui-pagination-prop-page="reflectedProp('page', 'page', checkedProps.page, undefined, false)"
405
+ :data-ui-pagination-prop-page-label="reflectedProp('pageLabel', 'page-label', checkedProps.pageLabel, undefined, false)"
406
+ :data-ui-pagination-prop-pages="reflectedProp('pages', 'pages', checkedProps.pages, undefined, false)"
407
+ :data-ui-pagination-prop-previous-href="reflectedProp('previousHref', 'previous-href', checkedProps.previousHref, undefined, false)"
408
+ :data-ui-pagination-prop-previous-label="reflectedProp('previousLabel', 'previous-label', checkedProps.previousLabel, undefined, false)"
409
+ :data-ui-pagination-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
410
+ ref="root"
411
+ >
412
+ <UiCluster gap="xs"><template
413
+ v-for="boundInput in [evaluateInput(
414
+ () =>
415
+ (inputRead(checkedProps.disabled, inputStatus('disabled', true))
416
+ || !inputRead(checkedProps.hasPrevious, inputStatus('hasPrevious', true))
417
+ || (number(inputRead(checkedProps.page, inputStatus('page', true))) === undefined
418
+ || number(1) === undefined
419
+ ? undefined
420
+ : number(inputRead(checkedProps.page, inputStatus('page', true)))! <= number(1)!)) as any,
421
+ READY_INPUT,
422
+ )]"
423
+ ><template
424
+ v-for="boundInputSnapshot in [evaluateInput(
425
+ () =>
426
+ (((objectValue: any, indexValue: any) =>
427
+ objectValue === Symbol.for('html-next.invalid-result')
428
+ || indexValue === Symbol.for('html-next.invalid-result')
429
+ ? Symbol.for('html-next.invalid-result')
430
+ : objectValue[indexValue])(
431
+ { true: 'a', false: 'button' },
432
+ concat(inputRead(checkedProps.previousHref, inputStatus('previousHref', true)) !== ''),
433
+ )) as any,
434
+ READY_INPUT,
435
+ )]"
436
+ ><UiButton
437
+ :square="true"
438
+ variant="ghost"
439
+ tone="neutral"
440
+ :size="checkedProps.size"
441
+ :disabled="boundInput.value"
442
+ :as="boundInputSnapshot.value"
443
+ :href="checkedProps.previousHref"
444
+ :aria-label="checkedProps.previousLabel"
445
+ :data-pagination-page="number(checkedProps.page) === undefined || number(1) === undefined
446
+ ? undefined
447
+ : decimalSubtract(number(checkedProps.page)!, number(1)!)"
448
+ v-bind="{
449
+ [BINDING_INPUTS_PROP]: {
450
+ size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
451
+ disabled: () => boundInput,
452
+ as: () => boundInputSnapshot,
453
+ href: () => ({ value: checkedProps.previousHref, status: inputStatus('previousHref', true) }),
454
+ },
455
+ }"
456
+ ><UiIcon name="chevron-left" /></UiButton></template></template>{{ ' ' }}<KeyedBoundary
457
+ ><template
458
+ v-for="(item, index) in uniqueKeys(checkedProps.pages ?? [], (item, index, loop) => item.value)"
459
+ :key="item.value"
460
+ >{{ ' ' }}<span
461
+ v-if="index > 0
462
+ && (number(item.value) === undefined
463
+ || number(
464
+ number(checkedProps.pages?.[decimalSubtract(index, 1)]?.value) === undefined
465
+ || number(1) === undefined
466
+ ? undefined
467
+ : decimalAdd(
468
+ number(checkedProps.pages?.[decimalSubtract(index, 1)]?.value)!,
469
+ number(1)!,
470
+ ),
471
+ ) === undefined
472
+ ? undefined
473
+ : number(item.value)!
474
+ > number(
475
+ number(checkedProps.pages?.[decimalSubtract(index, 1)]?.value) === undefined
476
+ || number(1) === undefined
477
+ ? undefined
478
+ : decimalAdd(number(checkedProps.pages?.[decimalSubtract(index, 1)]?.value)!, number(1)!),
479
+ )!)"
480
+ aria-hidden="true"
481
+ >…</span>{{ ' ' }}<template
482
+ v-for="boundInputSnapshot2 in [evaluateInput(
483
+ () =>
484
+ (((objectValue: any, indexValue: any) =>
485
+ objectValue === Symbol.for('html-next.invalid-result')
486
+ || indexValue === Symbol.for('html-next.invalid-result')
487
+ ? Symbol.for('html-next.invalid-result')
488
+ : objectValue[indexValue])(
489
+ { true: 'solid', false: 'ghost' },
490
+ concat(item.value === inputRead(checkedProps.page, inputStatus('page', true))),
491
+ )) as any,
492
+ READY_INPUT,
493
+ )]"
494
+ ><template
495
+ v-for="boundInputSnapshot3 in [evaluateInput(
496
+ () =>
497
+ (((objectValue: any, indexValue: any) =>
498
+ objectValue === Symbol.for('html-next.invalid-result')
499
+ || indexValue === Symbol.for('html-next.invalid-result')
500
+ ? Symbol.for('html-next.invalid-result')
501
+ : objectValue[indexValue])(
502
+ { true: 'accent', false: 'neutral' },
503
+ concat(item.value === inputRead(checkedProps.page, inputStatus('page', true))),
504
+ )) as any,
505
+ READY_INPUT,
506
+ )]"
507
+ ><UiButton
508
+ :square="true"
509
+ :variant="boundInputSnapshot2.value"
510
+ :tone="boundInputSnapshot3.value"
511
+ :size="checkedProps.size"
512
+ :disabled="checkedProps.disabled"
513
+ :as="((objectValue: any, indexValue: any) =>
514
+ objectValue === Symbol.for('html-next.invalid-result')
515
+ || indexValue === Symbol.for('html-next.invalid-result')
516
+ ? Symbol.for('html-next.invalid-result')
517
+ : objectValue[indexValue])(
518
+ { true: 'a', false: 'button' },
519
+ concat((() => {
520
+ const left: any = item.href ?? ''
521
+ if (left === Symbol.for('html-next.invalid-result')) return left
522
+ const right: any = ''
523
+ if (right === Symbol.for('html-next.invalid-result')) return right
524
+ return left !== right
525
+ })()),
526
+ )"
527
+ :href="item.href"
528
+ :data-pagination-page="item.value"
529
+ :aria-label="concat(checkedProps.pageLabel, ' ', formatValue(item.value, 'number', 'format', 'number'))"
530
+ :aria-current="((objectValue: any, indexValue: any) =>
531
+ objectValue === Symbol.for('html-next.invalid-result')
532
+ || indexValue === Symbol.for('html-next.invalid-result')
533
+ ? Symbol.for('html-next.invalid-result')
534
+ : objectValue[indexValue])(
535
+ { true: 'page', false: null },
536
+ concat(item.value === checkedProps.page),
537
+ )"
538
+ v-bind="{
539
+ [BINDING_INPUTS_PROP]: {
540
+ variant: () => boundInputSnapshot2,
541
+ tone: () => boundInputSnapshot3,
542
+ size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
543
+ disabled: () => ({ value: checkedProps.disabled, status: inputStatus('disabled', true) }),
544
+ },
545
+ }"
546
+ ><RetainedInlineText
547
+ :segments="[inlineTextSegment(
548
+ formatValue(item.value, 'number', 'format', 'number'),
549
+ true,
550
+ (candidate) => candidate,
551
+ )]"
552
+ /></UiButton></template></template>{{ ' ' }}</template></KeyedBoundary>{{
553
+ ' '
554
+ }}<template
555
+ v-for="boundInputSnapshot4 in [evaluateInput(
556
+ () =>
557
+ (inputRead(checkedProps.disabled, inputStatus('disabled', true))
558
+ || !inputRead(checkedProps.hasNext, inputStatus('hasNext', true))) as any,
559
+ READY_INPUT,
560
+ )]"
561
+ ><template
562
+ v-for="boundInputSnapshot5 in [evaluateInput(
563
+ () =>
564
+ (((objectValue: any, indexValue: any) =>
565
+ objectValue === Symbol.for('html-next.invalid-result')
566
+ || indexValue === Symbol.for('html-next.invalid-result')
567
+ ? Symbol.for('html-next.invalid-result')
568
+ : objectValue[indexValue])(
569
+ { true: 'a', false: 'button' },
570
+ concat(inputRead(checkedProps.nextHref, inputStatus('nextHref', true)) !== ''),
571
+ )) as any,
572
+ READY_INPUT,
573
+ )]"
574
+ ><UiButton
575
+ :square="true"
576
+ variant="ghost"
577
+ tone="neutral"
578
+ :size="checkedProps.size"
579
+ :disabled="boundInputSnapshot4.value"
580
+ :as="boundInputSnapshot5.value"
581
+ :href="checkedProps.nextHref"
582
+ :aria-label="checkedProps.nextLabel"
583
+ :data-pagination-page="number(checkedProps.page) === undefined || number(1) === undefined
584
+ ? undefined
585
+ : decimalAdd(number(checkedProps.page)!, number(1)!)"
586
+ v-bind="{
587
+ [BINDING_INPUTS_PROP]: {
588
+ size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
589
+ disabled: () => boundInputSnapshot4,
590
+ as: () => boundInputSnapshot5,
591
+ href: () => ({ value: checkedProps.nextHref, status: inputStatus('nextHref', true) }),
592
+ },
593
+ }"
594
+ ><UiIcon name="chevron-right" /></UiButton></template></template>{{
595
+ ' '
596
+ }}<slot /></UiCluster>
597
+ </nav>
598
+ </template>
@@ -1,4 +1,4 @@
1
- import { i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
1
+ import { _ as nativeAttrs, a as checkHydratedRoot, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref } from "vue";
3
3
  //#region .build/vue/UiActionBar.vue?vue&type=script&setup=true&lang.ts
4
4
  var _hoisted_1 = {
@@ -1,4 +1,4 @@
1
- import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, S as useComponentHost, _ as nativeAttrs, a as checkHydratedRoot, s as createDispatch, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { d as propValidityState, h as vuePropInputs, i as checkPropInput, m as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiAffordanceScope.vue?vue&type=script&setup=true&lang.ts
@@ -1,4 +1,4 @@
1
- import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, S as useComponentHost, _ as nativeAttrs, a as checkHydratedRoot, s as createDispatch, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { d as propValidityState, h as vuePropInputs, i as checkPropInput, m as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { t as UiIcon_default } from "./UiIcon.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
@@ -1,4 +1,4 @@
1
- import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, S as useComponentHost, _ as nativeAttrs, a as checkHydratedRoot, s as createDispatch, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { d as propValidityState, h as vuePropInputs, i as checkPropInput, m as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiAvatarGroup.vue?vue&type=script&setup=true&lang.ts
@@ -1,4 +1,4 @@
1
- import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, _ as nativeAttrs, a as checkHydratedRoot, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { h as vuePropInputs, i as checkPropInput, m as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiBadge.vue?vue&type=script&setup=true&lang.ts
@@ -1,4 +1,4 @@
1
- import { a as concat, b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, r as attribute, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, _ as nativeAttrs, a as checkHydratedRoot, i as attribute, o as concat, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { h as vuePropInputs, i as checkPropInput, m as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { t as UiIcon_default } from "./UiIcon.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref, watchSyncEffect, withDirectives } from "vue";
@@ -1,4 +1,4 @@
1
- import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
1
+ import { C as useReflectedProp, _ as nativeAttrs, a as checkHydratedRoot, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { h as vuePropInputs, i as checkPropInput, m as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, renderSlot, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiBreadcrumbs.vue?vue&type=script&setup=true&lang.ts